summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJianzheng Zhou <jianzheng.zhou@freescale.com>2013-10-15 17:32:51 +0800
committerJianzheng Zhou <jianzheng.zhou@freescale.com>2013-10-15 17:59:49 +0800
commit5be7e0e0b0f4f1039ecf07aeef7346fe2285e053 (patch)
tree9eabd020f0549cfc67a3c8e0c666c0cd01714c89
parente47c5c2627d3b7e0cb429a512842843f0a781e3b (diff)
ENGR00275869 wifi: update new rtl8723as wifi driver
Base on rtl8723as driver(v4.1.8_9180.20130927_BTCOEX20130528_ver3.3_beta) still do the following changes for imx6: 1.add imx6 in Makefile. 2.fix suspend/resume issue.Just refactor runtime_pm in suspend. Signed-off-by: Jianzheng Zhou <jianzheng.zhou@freescale.com>
-rwxr-xr-xdrivers/net/wireless/rtl8723as/Makefile131
-rwxr-xr-xdrivers/net/wireless/rtl8723as/autoconf_rtl8723a_sdio_linux.h14
-rwxr-xr-xdrivers/net/wireless/rtl8723as/autoconf_rtl8723a_usb_linux.h22
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_ap.c5875
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_bt_mp.c3469
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_cmd.c376
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_debug.c152
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_ieee80211.c181
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_io.c26
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_ioctl_set.c171
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_led.c4844
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_mlme.c311
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_mlme_ext.c1048
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_mp.c46
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_mp_ioctl.c4
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_odm.c217
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_p2p.c911
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_pwrctrl.c272
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_recv.c277
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_security.c325
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_sreset.c706
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_sta_mgt.c11
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_tdls.c5882
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_wapi.c2652
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_wapi_sms4.c1846
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_wlan_util.c145
-rwxr-xr-xdrivers/net/wireless/rtl8723as/core/rtw_xmit.c386
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/HalPwrSeqCmd.c374
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/odm.c976
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/odm.h4046
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/odm_HWConfig.c2373
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/odm_HWConfig.h390
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/odm_RegDefine11AC.h110
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/odm_RegDefine11N.h344
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/odm_debug.c1254
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/odm_debug.h1810
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/odm_interface.c1332
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/odm_interface.h748
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/odm_precomp.h444
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/odm_reg.h240
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEMACImg_CE.c188
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEMACImg_CE.h20
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEPHYImg_CE.c2396
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEPHYImg_CE.h120
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CReg.h90
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUMACImg_CE.c194
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUMACImg_CE.h24
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUPHYImg_CE.c5284
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUPHYImg_CE.h162
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/HalDMOutSrc8192C_CE.c11
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/odm_RTL8192C.c4466
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/odm_RTL8192C.h172
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723Reg.h90
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723SHWImg_CE.c13217
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723SHWImg_CE.h134
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723UHWImg_CE.c14764
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723UHWImg_CE.h150
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_BB.c1630
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_BB.h126
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_FW.c3194
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_FW.h78
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_MAC.c438
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_MAC.h72
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_RF.c580
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_RF.h74
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/hal_com.c58
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/hal_intf.c100
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/Hal8723PwrSeq.c182
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_bt-coexist.c469
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_cmd.c2344
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_dm.c1159
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_hal_init.c230
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_mp.c2393
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_phycfg.c6803
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_rf6052.c1970
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_rxdesc.c2
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_sreset.c215
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_xmit.c130
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/rtl8723as_led.c258
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/rtl8723as_recv.c75
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/rtl8723as_xmit.c49
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/sdio_halinit.c78
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/sdio_ops.c258
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/usb/rtl8723au_recv.c18
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/usb/rtl8723au_xmit.c29
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/usb/usb_halinit.c162
-rwxr-xr-xdrivers/net/wireless/rtl8723as/hal/rtl8723a/usb/usb_ops_linux.c83
-rwxr-xr-xdrivers/net/wireless/rtl8723as/ifcfg-wlan06
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/Hal8188EPhyCfg.h857
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/Hal8188EPhyReg.h2222
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/Hal8188EPwrSeq.h354
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/Hal8192CPhyCfg.h1
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/Hal8192DPhyCfg.h1
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/Hal8192DPhyReg.h2308
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/Hal8723APhyCfg.h60
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/Hal8723APhyReg.h148
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/Hal8723PwrSeq.h342
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/HalPwrSeqCmd.h276
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/HalVerDef.h7
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/autoconf.h14
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/byteorder/swab.h4
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/drv_conf.h5
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/drv_types.h25
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/drv_types_gspi.h98
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/drv_types_sdio.h142
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/hal_com.h3
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/hal_intf.h10
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/ieee80211.h21
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/ieee80211_ext.h918
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/ioctl_cfg80211.h313
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/osdep_ce_service.h306
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/osdep_intf.h7
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/osdep_service.h207
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8188e_cmd.h59
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8188e_hal.h1434
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8188e_led.h92
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8188e_recv.h292
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8188e_spec.h3473
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8188e_xmit.h622
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8192c_event.h20
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8192c_hal.h1
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8192c_led.h48
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8192c_recv.h2
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8192c_rf.h148
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8192c_sreset.h30
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8192d_hal.h1
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8192d_led.h50
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8192d_recv.h2
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8192d_rf.h158
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8723a_bt-coexist.h7
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8723a_cmd.h2
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8723a_hal.h1695
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8723a_led.h100
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8723a_recv.h82
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8723a_spec.h1069
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtl8723a_xmit.h476
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_ap.h130
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_bt_mp.h636
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_byteorder.h2
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_cmd.h19
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_debug.h16
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_eeprom.h1
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_io.h23
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_ioctl_set.h3
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_iol.h278
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_led.h438
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_mlme.h50
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_mlme_ext.h39
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_mp.h3
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_odm.h42
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_pwrctrl.h22
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_recv.h20
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_security.h27
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_tdls.h286
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_version.h2
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_wapi.h458
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/rtw_xmit.h27
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/sdio_ops_ce.h74
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/sdio_ops_linux.h28
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/sta_info.h23
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/usb_ops.h26
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/wifi.h9
-rwxr-xr-xdrivers/net/wireless/rtl8723as/include/xmit_osdep.h1
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/linux/custom_gpio_linux.c33
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/linux/gspi_intf.c37
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/linux/ioctl_cfg80211.c11117
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/linux/ioctl_linux.c1089
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/linux/mlme_linux.c45
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/linux/os_intfs.c705
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/linux/pci_intf.c31
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/linux/pci_ops_linux.c48
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/linux/recv_linux.c72
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/linux/rtw_android.c53
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/linux/sdio_intf.c1002
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/linux/sdio_ops_linux.c385
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/linux/usb_intf.c307
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/linux/usb_ops_linux.c1344
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/linux/xmit_linux.c29
-rwxr-xr-xdrivers/net/wireless/rtl8723as/os_dep/osdep_service.c642
179 files changed, 76334 insertions, 71286 deletions
diff --git a/drivers/net/wireless/rtl8723as/Makefile b/drivers/net/wireless/rtl8723as/Makefile
index 5ebf2598a208..e8e633c5ccee 100755
--- a/drivers/net/wireless/rtl8723as/Makefile
+++ b/drivers/net/wireless/rtl8723as/Makefile
@@ -42,10 +42,13 @@ CONFIG_WAPI_SUPPORT = n
CONFIG_EFUSE_CONFIG_FILE = n
CONFIG_EXT_CLK = n
CONFIG_FTP_PROTECT = n
-CONFIG_WOWLAN = y
+CONFIG_WOWLAN = n
+CONFIG_GPIO_WAKEUP = n
+CONFIG_ODM_ADAPTIVITY = n
-CONFIG_PLATFORM_I386_PC = n
+CONFIG_PLATFORM_I386_PC = y
CONFIG_PLATFORM_ANDROID_X86 = n
+CONFIG_PLATFORM_JB_X86 = n
CONFIG_PLATFORM_ARM_S3C2K4 = n
CONFIG_PLATFORM_ARM_PXA2XX = n
CONFIG_PLATFORM_ARM_S3C6K4 = n
@@ -62,6 +65,7 @@ CONFIG_PLATFORM_TEGRA3_CARDHU = n
CONFIG_PLATFORM_TEGRA4_DALMORE = n
CONFIG_PLATFORM_ARM_TCC8900 = n
CONFIG_PLATFORM_ARM_TCC8920 = n
+CONFIG_PLATFORM_ARM_TCC8920_JB42 = n
CONFIG_PLATFORM_ARM_RK2818 = n
CONFIG_PLATFORM_ARM_URBETTER = n
CONFIG_PLATFORM_ARM_TI_PANDA = n
@@ -69,15 +73,17 @@ CONFIG_PLATFORM_MIPS_JZ4760 = n
CONFIG_PLATFORM_DMP_PHILIPS = n
CONFIG_PLATFORM_TI_DM365 = n
CONFIG_PLATFORM_MSTAR_TITANIA12 = n
+CONFIG_PLATFORM_MSTAR = n
CONFIG_PLATFORM_SZEBOOK = n
CONFIG_PLATFORM_ARM_SUNxI = n
CONFIG_PLATFORM_ARM_SUN6I = n
+CONFIG_PLATFORM_ARM_SUN7I = n
CONFIG_PLATFORM_ACTIONS_ATM702X = n
CONFIG_PLATFORM_MN10300 = n
CONFIG_PLATFORM_ACTIONS_ATV5201 = n
+CONFIG_PLATFORM_IMX6 = y
CONFIG_DRVEXT_MODULE = n
-CONFIG_PLATFORM_NEW = y
export TopDIR ?= $(shell pwd)
@@ -358,10 +364,17 @@ ifeq ($(CONFIG_FTP_PROTECT), y)
EXTRA_CFLAGS += -DCONFIG_FTP_PROTECT
endif
-ifeq ($(CONFIG_RTL8723A), y)
+ifeq ($(CONFIG_ODM_ADAPTIVITY), y)
+EXTRA_CFLAGS += -DCONFIG_ODM_ADAPTIVITY
+endif
+
+ifeq ($(CONFIG_RTL8188E), y)
ifeq ($(CONFIG_WOWLAN), y)
EXTRA_CFLAGS += -DCONFIG_WOWLAN
endif
+ifeq ($(CONFIG_GPIO_WAKEUP), y)
+EXTRA_CFLAGS += -DCONFIG_GPIO_WAKEUP
+endif
endif
ifeq ($(CONFIG_RTL8188E), y)
@@ -370,15 +383,15 @@ EXTRA_CFLAGS += -DCONFIG_RF_GAIN_OFFSET
endif
endif
-ifeq ($(CONFIG_PLATFORM_NEW), y)
- EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-# ARCH := arm
-# CROSS_COMPILE := ~/madicsdq/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
- KSRC := $(TopDIR)/../../kernel_imx
- MODULE_NAME := 8723as
+ifeq ($(CONFIG_PLATFORM_IMX6), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
+EXTRA_CFLAGS += -DCONFIG_P2P_IPS
+KSRC := $(TopDIR)/../../kernel_imx
+MODULE_NAME := 8723as
endif
-
ifeq ($(CONFIG_PLATFORM_I386_PC), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
@@ -410,13 +423,21 @@ ARCH := arm
endif
ifeq ($(CONFIG_PLATFORM_MSTAR_TITANIA12), y)
-EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MSTAR_TITANIA12
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MSTAR -DCONFIG_PLATFORM_MSTAR_TITANIA12
ARCH:=mips
CROSS_COMPILE:= /usr/src/Mstar_kernel/mips-4.3/bin/mips-linux-gnu-
KVER:= 2.6.28.9
KSRC:= /usr/src/Mstar_kernel/2.6.28.9/
endif
+ifeq ($(CONFIG_PLATFORM_MSTAR), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MSTAR
+ARCH:=arm
+CROSS_COMPILE:= /usr/src/bin/arm-none-linux-gnueabi-
+KVER:= 3.1.10
+KSRC:= /usr/src/Mstar_kernel/3.1.10/
+endif
+
ifeq ($(CONFIG_PLATFORM_ANDROID_X86), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
@@ -426,6 +447,18 @@ KSRC := /media/DATA-2/android-x86/ics-x86_20120130/out/target/product/generic_x8
MODULE_NAME :=wlan
endif
+ifeq ($(CONFIG_PLATFORM_JB_X86), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
+EXTRA_CFLAGS += -DCONFIG_P2P_IPS
+SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
+ARCH := $(SUBARCH)
+CROSS_COMPILE := /home/android_sdk/android-x86_JB/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7/bin/i686-linux-android-
+KSRC := /home/android_sdk/android-x86_JB/out/target/product/x86/obj/kernel/
+MODULE_NAME :=wlan
+endif
+
ifeq ($(CONFIG_PLATFORM_ARM_PXA2XX), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
ARCH := arm
@@ -543,7 +576,7 @@ EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DDCONFIG_P2P_IPS
+EXTRA_CFLAGS += -DCONFIG_P2P_IPS
ARCH := arm
CROSS_COMPILE := /home/android_sdk/nvidia/tegra-16r3-partner-android-4.1_20120723/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
KSRC := /home/android_sdk/nvidia/tegra-16r3-partner-android-4.1_20120723/out/target/product/cardhu/obj/KERNEL
@@ -556,7 +589,7 @@ EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DDCONFIG_P2P_IPS
+EXTRA_CFLAGS += -DCONFIG_P2P_IPS
ARCH := arm
CROSS_COMPILE := /home/android_sdk/nvidia/tegra-17r9-partner-android-4.2-dalmore_20130131/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
KSRC := /home/android_sdk/nvidia/tegra-17r9-partner-android-4.2-dalmore_20130131/out/target/product/dalmore/obj/KERNEL
@@ -579,8 +612,23 @@ KSRC := /home/android_sdk/Telechips/v12.06_r1-tcc-android-4.0.4/kernel
MODULE_NAME := wlan
endif
+ifeq ($(CONFIG_PLATFORM_ARM_TCC8920_JB42), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
+# default setting for Android 4.1, 4.2
+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
+EXTRA_CFLAGS += -DCONFIG_P2P_IPS
+ARCH := arm
+CROSS_COMPILE := /home/android_sdk/Telechips/v13.03_r1-tcc-android-4.2.2_ds_patched/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
+KSRC := /home/android_sdk/Telechips/v13.03_r1-tcc-android-4.2.2_ds_patched/kernel
+MODULE_NAME := wlan
+endif
+
ifeq ($(CONFIG_PLATFORM_ARM_RK2818), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID -DCONFIG_PLATFORM_ROCKCHIPS -DCONFIG_MINIMAL_MEMORY_USAGE
+ifeq ($(CONFIG_SDIO_HCI), y)
+EXTRA_CFLAGS += -DCONFIG_DETECT_CPWM_BY_POLLING -DCONFIG_DETECT_C2H_BY_POLLING
+endif
ARCH := arm
CROSS_COMPILE := /usr/src/release_fae_version/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
KSRC := /usr/src/release_fae_version/kernel25_A7_281x
@@ -630,29 +678,73 @@ KSRC := /home/winuser/work/Plat_sLD2T_V3010/usr/src/linux-2.6.32.2
INSTALL_PREFIX :=
endif
-
ifeq ($(CONFIG_PLATFORM_ARM_SUNxI), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ARM_SUNxI
+ifeq ($(CONFIG_USB_HCI), y)
+EXTRA_CFLAGS += -DCONFIG_USE_USB_BUFFER_ALLOC_TX
+endif
+# default setting for Android 4.1, 4.2
+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
+EXTRA_CFLAGS += -DDCONFIG_P2P_IPS
+# default setting for A10-EVB mmc0
+ifeq ($(CONFIG_SDIO_HCI), y)
+#EXTRA_CFLAGS += -DCONFIG_WITS_EVB_V13
+endif
ARCH := arm
-CROSS_COMPILE := arm-none-linux-gnueabi-
+#CROSS_COMPILE := arm-none-linux-gnueabi-
+CROSS_COMPILE=/home/android_sdk/Allwinner/a10/android-jb42/lichee-jb42/buildroot/output/external-toolchain/bin/arm-none-linux-gnueabi-
KVER := 3.0.8
#KSRC:= ../lichee/linux-3.0/
+KSRC=/home/android_sdk/Allwinner/a10/android-jb42/lichee-jb42/linux-3.0
endif
ifeq ($(CONFIG_PLATFORM_ARM_SUN6I), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_SUN6I
+ifeq ($(CONFIG_USB_HCI), y)
EXTRA_CFLAGS += -DCONFIG_USE_USB_BUFFER_ALLOC_TX
+endif
+# default setting for A31-EVB mmc0
+ifeq ($(CONFIG_SDIO_HCI), y)
+EXTRA_CFLAGS += -DCONFIG_A31_EVB
+endif
+
+EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT
# default setting for Android 4.1, 4.2
EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-EXTRA_CFLAGS += -DDCONFIG_P2P_IPS
+EXTRA_CFLAGS += -DCONFIG_P2P_IPS -DCONFIG_QOS_OPTIMIZATION
ARCH := arm
-CROSS_COMPILE := arm-none-linux-gnueabi-
+CROSS_COMPILE := /home/android_sdk/Allwinner/a31/android-jb42/lichee/buildroot/output/external-toolchain/bin/arm-linux-gnueabi-
KVER := 3.3.0
#KSRC:= ../lichee/linux-3.3/
+KSRC :=/home/android_sdk/Allwinner/a31/android-jb42/lichee/linux-3.3
+ifeq ($(CONFIG_USB_HCI), y)
+MODULE_NAME := 8188eu_sw
+endif
endif
+ifeq ($(CONFIG_PLATFORM_ARM_SUN7I), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
+EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_SUN6I
+ifeq ($(CONFIG_USB_HCI), y)
+EXTRA_CFLAGS += -DCONFIG_USE_USB_BUFFER_ALLOC_TX
+endif
+EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT
+# default setting for Android 4.1, 4.2
+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
+EXTRA_CFLAGS += -DCONFIG_P2P_IPS -DCONFIG_QOS_OPTIMIZATION
+ARCH := arm
+CROSS_COMPILE := /home/android_sdk/Allwinner/a20/sugar/lichee/out/android/common/buildroot/external-toolchain/bin/arm-linux-gnueabi-
+KVER := 3.3.0
+#KSRC:= ../lichee/linux-3.3/
+KSRC :=/home/android_sdk/Allwinner/a20/sugar/lichee/linux-3.3
+
+endif
+
+
ifeq ($(CONFIG_PLATFORM_ACTIONS_ATV5201), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ACTIONS_ATV5201
ARCH := mips
@@ -688,7 +780,8 @@ rtk_core := core/rtw_cmd.o \
core/rtw_br_ext.o \
core/rtw_iol.o \
core/rtw_led.o \
- core/rtw_sreset.o
+ core/rtw_sreset.o \
+ core/rtw_odm.o
$(MODULE_NAME)-y += $(rtk_core)
diff --git a/drivers/net/wireless/rtl8723as/autoconf_rtl8723a_sdio_linux.h b/drivers/net/wireless/rtl8723as/autoconf_rtl8723a_sdio_linux.h
index 2165c253ebd7..d34be3689d89 100755
--- a/drivers/net/wireless/rtl8723as/autoconf_rtl8723a_sdio_linux.h
+++ b/drivers/net/wireless/rtl8723as/autoconf_rtl8723a_sdio_linux.h
@@ -47,9 +47,9 @@
#define CONFIG_80211N_HT
#define CONFIG_RECV_REORDERING_CTRL
-#define CONFIG_IOCTL_CFG80211
+//#define CONFIG_IOCTL_CFG80211
#ifdef CONFIG_IOCTL_CFG80211
- #define RTW_USE_CFG80211_STA_EVENT /* Indecate new sta asoc through cfg80211_new_sta */
+ //#define RTW_USE_CFG80211_STA_EVENT /* Indecate new sta asoc through cfg80211_new_sta */
#define CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER
//#define CONFIG_DEBUG_CFG80211
#define CONFIG_SET_SCAN_DENY_TIMER
@@ -76,8 +76,9 @@
#endif
//#define CONFIG_DBG_P2P
- //#define CONFIG_P2P_PS
+ #define CONFIG_P2P_PS
//#define CONFIG_P2P_IPS
+ #define P2P_OP_CHECK_SOCIAL_CH
#endif
// Added by Kurt 20110511
@@ -119,6 +120,7 @@
#define CONFIG_LONG_DELAY_ISSUE
#define CONFIG_NEW_SIGNAL_STAT_PROCESS
#define RTW_NOTCH_FILTER 0 /* 0:Disable, 1:Enable, */
+#define CONFIG_DEAUTH_BEFORE_CONNECT
//#define CONFIG_PATCH_JOIN_WRONG_CHANNEL
@@ -141,10 +143,11 @@
#endif
-#define CONFIG_CONCURRENT_MODE
+//#define CONFIG_CONCURRENT_MODE
#ifdef CONFIG_CONCURRENT_MODE
#define CONFIG_TSF_RESET_OFFLOAD // For 2 PORT TSF SYNC.
//#define CONFIG_HWPORT_SWAP //Port0->Sec , Port1 -> Pri
+ //#define CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
#endif // CONFIG_CONCURRENT_MODE
@@ -183,6 +186,7 @@
#ifndef CONFIG_LPS
#define CONFIG_LPS // download reserved page to FW
#endif
+ #define CONFIG_CHECK_BT_HANG
#endif
@@ -191,6 +195,8 @@
//#define CONFIG_HW_ANTENNA_DIVERSITY
#endif
+//#define CONFIG_RF_GAIN_OFFSET
+
#ifndef DISABLE_BB_RF
#define DISABLE_BB_RF 0
#endif
diff --git a/drivers/net/wireless/rtl8723as/autoconf_rtl8723a_usb_linux.h b/drivers/net/wireless/rtl8723as/autoconf_rtl8723a_usb_linux.h
index 033ea90c4d05..21053fd02d37 100755
--- a/drivers/net/wireless/rtl8723as/autoconf_rtl8723a_usb_linux.h
+++ b/drivers/net/wireless/rtl8723as/autoconf_rtl8723a_usb_linux.h
@@ -51,11 +51,6 @@
#define SUPPORT_HW_RFOFF_DETECTED
//#define CONFIG_IOCTL_CFG80211
-#ifdef CONFIG_PLATFORM_ARM_SUNxI
- #ifndef CONFIG_IOCTL_CFG80211
- #define CONFIG_IOCTL_CFG80211
- #endif
-#endif
#ifdef CONFIG_IOCTL_CFG80211
//#define RTW_USE_CFG80211_STA_EVENT /* Indecate new sta asoc through cfg80211_new_sta */
@@ -87,6 +82,7 @@
#define CONFIG_P2P_PS
//#define CONFIG_P2P_IPS
+ #define P2P_OP_CHECK_SOCIAL_CH
#endif
// Added by Kurt 20110511
@@ -106,6 +102,7 @@
#ifdef CONFIG_CONCURRENT_MODE
#define CONFIG_TSF_RESET_OFFLOAD // For 2 PORT TSF SYNC.
//#define CONFIG_HWPORT_SWAP //Port0->Sec , Port1 -> Pri
+ //#define CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
#endif // CONFIG_CONCURRENT_MODE
#define CONFIG_SKB_COPY //for amsdu
@@ -119,7 +116,7 @@
#define CONFIG_LONG_DELAY_ISSUE
#define CONFIG_NEW_SIGNAL_STAT_PROCESS
#define RTW_NOTCH_FILTER 0 /* 0:Disable, 1:Enable, */
-
+#define CONFIG_DEAUTH_BEFORE_CONNECT
//#define CONFIG_ANTENNA_DIVERSITY
@@ -174,7 +171,7 @@
#endif // CONFIG_BR_EXT
//#define CONFIG_TX_MCAST2UNI // Support IP multicast->unicast
-
+//#define CONFIG_CHECK_AC_LIFETIME // Check packet lifetime of 4 ACs.
#if defined(CONFIG_BT_COEXIST) || defined(CONFIG_POWER_SAVING)
#ifndef CONFIG_USB_INTERRUPT_IN_PIPE
@@ -182,6 +179,9 @@
#endif
#endif
+#if defined(CONFIG_BT_COEXIST)
+ #define CONFIG_CHECK_BT_HANG
+#endif
/*
* Interface Related Config
*/
@@ -201,12 +201,6 @@
#undef CONFIG_PREALLOC_RECV_SKB
#endif
-#ifdef CONFIG_PLATFORM_ARM_SUNxI
- #ifndef CONFIG_USE_USB_BUFFER_ALLOC_TX
- #define CONFIG_USE_USB_BUFFER_ALLOC_TX
- #endif
-#endif
-
/*
* USB VENDOR REQ BUFFER ALLOCATION METHOD
* if not set we'll use function local variable (stack memory)
@@ -236,7 +230,7 @@
#define CONFIG_OUT_EP_WIFI_MODE 0
-#define ENABLE_USB_DROP_INCORRECT_OUT 0
+#define ENABLE_USB_DROP_INCORRECT_OUT
#define RTL8192CU_ASIC_VERIFICATION 0 // For ASIC verification.
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_ap.c b/drivers/net/wireless/rtl8723as/core/rtw_ap.c
index 4213f3bdf1b4..adebe11f32c7 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_ap.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_ap.c
@@ -1,2936 +1,2939 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#define _RTW_AP_C_
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <wifi.h>
-
-
-#ifdef CONFIG_AP_MODE
-
-extern unsigned char RTW_WPA_OUI[];
-extern unsigned char WMM_OUI[];
-extern unsigned char WPS_OUI[];
-extern unsigned char P2P_OUI[];
-extern unsigned char WFD_OUI[];
-
-void init_mlme_ap_info(_adapter *padapter)
-{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
-
-
- _rtw_spinlock_init(&pmlmepriv->bcn_update_lock);
-
- //for ACL
- _rtw_init_queue(&pacl_list->acl_node_q);
-
- //pmlmeext->bstart_bss = _FALSE;
-
- start_ap_mode(padapter);
-}
-
-void free_mlme_ap_info(_adapter *padapter)
-{
- _irqL irqL;
- struct sta_info *psta=NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
- //stop_ap_mode(padapter);
-
- pmlmepriv->update_bcn = _FALSE;
- pmlmeext->bstart_bss = _FALSE;
-
- rtw_sta_flush(padapter);
-
- pmlmeinfo->state = _HW_STATE_NOLINK_;
-
- //free_assoc_sta_resources
- rtw_free_all_stainfo(padapter);
-
- //free bc/mc sta_info
- psta = rtw_get_bcmc_stainfo(padapter);
- _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
- rtw_free_stainfo(padapter, psta);
- _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
-
-
- _rtw_spinlock_free(&pmlmepriv->bcn_update_lock);
-
-}
-
-static void update_BCNTIM(_adapter *padapter)
-{
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- WLAN_BSSID_EX *pnetwork_mlmeext = &(pmlmeinfo->network);
- unsigned char *pie = pnetwork_mlmeext->IEs;
-
- //DBG_871X("%s\n", __FUNCTION__);
-
- //update TIM IE
- //if(pstapriv->tim_bitmap)
- if(_TRUE)
- {
- u8 *p, *dst_ie, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
- u16 tim_bitmap_le;
- uint offset, tmp_len, tim_ielen, tim_ie_offset, remainder_ielen;
-
- tim_bitmap_le = cpu_to_le16(pstapriv->tim_bitmap);
-
- p = rtw_get_ie(pie + _FIXED_IE_LENGTH_, _TIM_IE_, &tim_ielen, pnetwork_mlmeext->IELength - _FIXED_IE_LENGTH_);
- if (p != NULL && tim_ielen>0)
- {
- tim_ielen += 2;
-
- premainder_ie = p+tim_ielen;
-
- tim_ie_offset = (sint)(p -pie);
-
- remainder_ielen = pnetwork_mlmeext->IELength - tim_ie_offset - tim_ielen;
-
- //append TIM IE from dst_ie offset
- dst_ie = p;
- }
- else
- {
- tim_ielen = 0;
-
- //calucate head_len
- offset = _FIXED_IE_LENGTH_;
-
- /* get ssid_ie len */
- p = rtw_get_ie(pie + _BEACON_IE_OFFSET_, _SSID_IE_, &tmp_len, (pnetwork_mlmeext->IELength - _BEACON_IE_OFFSET_));
- if (p != NULL)
- offset += tmp_len+2;
-
- // get supported rates len
- p = rtw_get_ie(pie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &tmp_len, (pnetwork_mlmeext->IELength - _BEACON_IE_OFFSET_));
- if (p != NULL)
- {
- offset += tmp_len+2;
- }
-
- //DS Parameter Set IE, len=3
- offset += 3;
-
- premainder_ie = pie + offset;
-
- remainder_ielen = pnetwork_mlmeext->IELength - offset - tim_ielen;
-
- //append TIM IE from offset
- dst_ie = pie + offset;
-
- }
-
-
- if(remainder_ielen>0)
- {
- pbackup_remainder_ie = rtw_malloc(remainder_ielen);
- if(pbackup_remainder_ie && premainder_ie)
- _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
- }
-
- *dst_ie++=_TIM_IE_;
-
- if((pstapriv->tim_bitmap&0xff00) && (pstapriv->tim_bitmap&0x00fc))
- tim_ielen = 5;
- else
- tim_ielen = 4;
-
- *dst_ie++= tim_ielen;
-
- *dst_ie++=0;//DTIM count
- *dst_ie++=1;//DTIM peroid
-
- if(pstapriv->tim_bitmap&BIT(0))//for bc/mc frames
- *dst_ie++ = BIT(0);//bitmap ctrl
- else
- *dst_ie++ = 0;
-
- if(tim_ielen==4)
- {
- *dst_ie++ = *(u8*)&tim_bitmap_le;
- }
- else if(tim_ielen==5)
- {
- _rtw_memcpy(dst_ie, &tim_bitmap_le, 2);
- dst_ie+=2;
- }
-
- //copy remainder IE
- if(pbackup_remainder_ie)
- {
- _rtw_memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
-
- rtw_mfree(pbackup_remainder_ie, remainder_ielen);
- }
-
- offset = (uint)(dst_ie - pie);
- pnetwork_mlmeext->IELength = offset + remainder_ielen;
-
- }
-
-#ifndef CONFIG_INTERRUPT_BASED_TXBCN
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
- set_tx_beacon_cmd(padapter);
-#endif
-#endif //!CONFIG_INTERRUPT_BASED_TXBCN
-
-
-}
-
-void rtw_add_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index, u8 *data, u8 len)
-{
- PNDIS_802_11_VARIABLE_IEs pIE;
- u8 bmatch = _FALSE;
- u8 *pie = pnetwork->IEs;
- u8 *p, *dst_ie, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
- u32 i, offset, ielen, ie_offset, remainder_ielen = 0;
-
- for (i = sizeof(NDIS_802_11_FIXED_IEs); i < pnetwork->IELength;)
- {
- pIE = (PNDIS_802_11_VARIABLE_IEs)(pnetwork->IEs + i);
-
- if (pIE->ElementID > index)
- {
- break;
- }
- else if(pIE->ElementID == index) // already exist the same IE
- {
- p = (u8 *)pIE;
- ielen = pIE->Length;
- bmatch = _TRUE;
- break;
- }
-
- p = (u8 *)pIE;
- ielen = pIE->Length;
- i += (pIE->Length + 2);
- }
-
- if (p != NULL && ielen>0)
- {
- ielen += 2;
-
- premainder_ie = p+ielen;
-
- ie_offset = (sint)(p -pie);
-
- remainder_ielen = pnetwork->IELength - ie_offset - ielen;
-
- if(bmatch)
- dst_ie = p;
- else
- dst_ie = (p+ielen);
- }
-
- if(remainder_ielen>0)
- {
- pbackup_remainder_ie = rtw_malloc(remainder_ielen);
- if(pbackup_remainder_ie && premainder_ie)
- _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
- }
-
- *dst_ie++=index;
- *dst_ie++=len;
-
- _rtw_memcpy(dst_ie, data, len);
- dst_ie+=len;
-
- //copy remainder IE
- if(pbackup_remainder_ie)
- {
- _rtw_memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
-
- rtw_mfree(pbackup_remainder_ie, remainder_ielen);
- }
-
- offset = (uint)(dst_ie - pie);
- pnetwork->IELength = offset + remainder_ielen;
-}
-
-void rtw_remove_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index)
-{
- u8 *p, *dst_ie, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
- uint offset, ielen, ie_offset, remainder_ielen = 0;
- u8 *pie = pnetwork->IEs;
-
- p = rtw_get_ie(pie + _FIXED_IE_LENGTH_, index, &ielen, pnetwork->IELength - _FIXED_IE_LENGTH_);
- if (p != NULL && ielen>0)
- {
- ielen += 2;
-
- premainder_ie = p+ielen;
-
- ie_offset = (sint)(p -pie);
-
- remainder_ielen = pnetwork->IELength - ie_offset - ielen;
-
- dst_ie = p;
- }
-
- if(remainder_ielen>0)
- {
- pbackup_remainder_ie = rtw_malloc(remainder_ielen);
- if(pbackup_remainder_ie && premainder_ie)
- _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
- }
-
- //copy remainder IE
- if(pbackup_remainder_ie)
- {
- _rtw_memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
-
- rtw_mfree(pbackup_remainder_ie, remainder_ielen);
- }
-
- offset = (uint)(dst_ie - pie);
- pnetwork->IELength = offset + remainder_ielen;
-}
-
-
-u8 chk_sta_is_alive(struct sta_info *psta);
-u8 chk_sta_is_alive(struct sta_info *psta)
-{
- u8 ret = _FALSE;
- #ifdef DBG_EXPIRATION_CHK
- DBG_871X("sta:"MAC_FMT", rssi:%d, rx:"STA_PKTS_FMT", expire_to:%u, %s%ssq_len:%u\n"
- , MAC_ARG(psta->hwaddr)
- , psta->rssi_stat.UndecoratedSmoothedPWDB
- //, STA_RX_PKTS_ARG(psta)
- , STA_RX_PKTS_DIFF_ARG(psta)
- , psta->expire_to
- , psta->state&WIFI_SLEEP_STATE?"PS, ":""
- , psta->state&WIFI_STA_ALIVE_CHK_STATE?"SAC, ":""
- , psta->sleepq_len
- );
- #endif
-
- //if(sta_last_rx_pkts(psta) == sta_rx_pkts(psta))
- if((psta->sta_stats.last_rx_data_pkts + psta->sta_stats.last_rx_ctrl_pkts) == (psta->sta_stats.rx_data_pkts + psta->sta_stats.rx_ctrl_pkts))
- {
- #if 0
- if(psta->state&WIFI_SLEEP_STATE)
- ret = _TRUE;
- #endif
- }
- else
- {
- ret = _TRUE;
- }
-
- sta_update_last_rx_pkts(psta);
-
- return ret;
-}
-
-void expire_timeout_chk(_adapter *padapter)
-{
- _irqL irqL;
- _list *phead, *plist;
- u8 updated;
- struct sta_info *psta=NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
- u8 chk_alive_num = 0;
- char chk_alive_list[NUM_STA];
- int i;
-
- _enter_critical_bh(&pstapriv->auth_list_lock, &irqL);
-
- phead = &pstapriv->auth_list;
- plist = get_next(phead);
-
- //check auth_queue
- #ifdef DBG_EXPIRATION_CHK
- if (rtw_end_of_queue_search(phead, plist) == _FALSE) {
- DBG_871X(FUNC_NDEV_FMT" auth_list, cnt:%u\n"
- , FUNC_NDEV_ARG(padapter->pnetdev), pstapriv->auth_list_cnt);
- }
- #endif
- while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
- {
- psta = LIST_CONTAINOR(plist, struct sta_info, auth_list);
- plist = get_next(plist);
-
- if(psta->expire_to>0)
- {
- psta->expire_to--;
- if (psta->expire_to == 0)
- {
- rtw_list_delete(&psta->auth_list);
- pstapriv->auth_list_cnt--;
-
- DBG_871X("auth expire %02X%02X%02X%02X%02X%02X\n",
- psta->hwaddr[0],psta->hwaddr[1],psta->hwaddr[2],psta->hwaddr[3],psta->hwaddr[4],psta->hwaddr[5]);
-
- _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
-
- _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
- rtw_free_stainfo(padapter, psta);
- _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
-
- _enter_critical_bh(&pstapriv->auth_list_lock, &irqL);
- }
- }
-
- }
-
- _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
-
- psta = NULL;
-
-
- _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
-
- phead = &pstapriv->asoc_list;
- plist = get_next(phead);
-
- //check asoc_queue
- #ifdef DBG_EXPIRATION_CHK
- if (rtw_end_of_queue_search(phead, plist) == _FALSE) {
- DBG_871X(FUNC_NDEV_FMT" asoc_list, cnt:%u\n"
- , FUNC_NDEV_ARG(padapter->pnetdev), pstapriv->asoc_list_cnt);
- }
- #endif
- while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
- {
- psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
- plist = get_next(plist);
-
- if (chk_sta_is_alive(psta) || !psta->expire_to) {
- psta->expire_to = pstapriv->expire_to;
- psta->keep_alive_trycnt = 0;
- #ifdef CONFIG_TX_MCAST2UNI
- psta->under_exist_checking = 0;
- #endif // CONFIG_TX_MCAST2UNI
- } else {
- psta->expire_to--;
- }
-
-#ifndef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
-#ifdef CONFIG_TX_MCAST2UNI
-#ifdef CONFIG_80211N_HT
- if ( (psta->flags & WLAN_STA_HT) && (psta->htpriv.agg_enable_bitmap || psta->under_exist_checking) ) {
- // check sta by delba(addba) for 11n STA
- // ToDo: use CCX report to check for all STAs
- //DBG_871X("asoc check by DELBA/ADDBA! (pstapriv->expire_to=%d s)(psta->expire_to=%d s), [%02x, %d]\n", pstapriv->expire_to*2, psta->expire_to*2, psta->htpriv.agg_enable_bitmap, psta->under_exist_checking);
-
- if ( psta->expire_to <= (pstapriv->expire_to - 50 ) ) {
- DBG_871X("asoc expire by DELBA/ADDBA! (%d s)\n", (pstapriv->expire_to-psta->expire_to)*2);
- psta->under_exist_checking = 0;
- psta->expire_to = 0;
- } else if ( psta->expire_to <= (pstapriv->expire_to - 3) && (psta->under_exist_checking==0)) {
- DBG_871X("asoc check by DELBA/ADDBA! (%d s)\n", (pstapriv->expire_to-psta->expire_to)*2);
- psta->under_exist_checking = 1;
- //tear down TX AMPDU
- send_delba(padapter, 1, psta->hwaddr);// // originator
- psta->htpriv.agg_enable_bitmap = 0x0;//reset
- psta->htpriv.candidate_tid_bitmap = 0x0;//reset
- }
- }
-#endif //CONFIG_80211N_HT
-#endif // CONFIG_TX_MCAST2UNI
-#endif //CONFIG_ACTIVE_KEEP_ALIVE_CHECK
-
- if (psta->expire_to <= 0)
- {
- #ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
- if (padapter->registrypriv.wifi_spec == 1)
- {
- psta->expire_to = pstapriv->expire_to;
- continue;
- }
-
- if (psta->state & WIFI_SLEEP_STATE) {
- if (!(psta->state & WIFI_STA_ALIVE_CHK_STATE)) {
- //to check if alive by another methods if staion is at ps mode.
- psta->expire_to = pstapriv->expire_to;
- psta->state |= WIFI_STA_ALIVE_CHK_STATE;
-
- //DBG_871X("alive chk, sta:" MAC_FMT " is at ps mode!\n", MAC_ARG(psta->hwaddr));
-
- //to update bcn with tim_bitmap for this station
- pstapriv->tim_bitmap |= BIT(psta->aid);
- update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
-
- if(!pmlmeext->active_keep_alive_check)
- continue;
- }
- }
-
- if (pmlmeext->active_keep_alive_check) {
- int stainfo_offset;
-
- stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
- if (stainfo_offset_valid(stainfo_offset)) {
- chk_alive_list[chk_alive_num++] = stainfo_offset;
- }
-
- continue;
- }
- #endif /* CONFIG_ACTIVE_KEEP_ALIVE_CHECK */
-
- rtw_list_delete(&psta->asoc_list);
- pstapriv->asoc_list_cnt--;
-
- DBG_871X("asoc expire "MAC_FMT", state=0x%x\n", MAC_ARG(psta->hwaddr), psta->state);
- updated = ap_free_sta(padapter, psta, _FALSE, WLAN_REASON_DEAUTH_LEAVING);
- }
- else
- {
- /* TODO: Aging mechanism to digest frames in sleep_q to avoid running out of xmitframe */
- if (psta->sleepq_len > (NR_XMITFRAME/pstapriv->asoc_list_cnt)
- && padapter->xmitpriv.free_xmitframe_cnt < ((NR_XMITFRAME/pstapriv->asoc_list_cnt)/2)
- ){
- DBG_871X("%s sta:"MAC_FMT", sleepq_len:%u, free_xmitframe_cnt:%u, asoc_list_cnt:%u, clear sleep_q\n", __func__
- , MAC_ARG(psta->hwaddr)
- , psta->sleepq_len, padapter->xmitpriv.free_xmitframe_cnt, pstapriv->asoc_list_cnt);
- wakeup_sta_to_xmit(padapter, psta);
- }
- }
- }
-
- _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
-
-#ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
-if (chk_alive_num) {
-
- u8 backup_oper_channel=0;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- /* switch to correct channel of current network before issue keep-alive frames */
- if (rtw_get_oper_ch(padapter) != pmlmeext->cur_channel) {
- backup_oper_channel = rtw_get_oper_ch(padapter);
- SelectChannel(padapter, pmlmeext->cur_channel);
- }
-
- /* issue null data to check sta alive*/
- for (i = 0; i < chk_alive_num; i++) {
-
- int ret = _FAIL;
-
- psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
- if(!(psta->state &_FW_LINKED))
- continue;
-
- if (psta->state & WIFI_SLEEP_STATE)
- ret = issue_nulldata(padapter, psta->hwaddr, 0, 1, 50);
- else
- ret = issue_nulldata(padapter, psta->hwaddr, 0, 3, 50);
-
- psta->keep_alive_trycnt++;
- if (ret == _SUCCESS)
- {
- DBG_871X("asoc check, sta(" MAC_FMT ") is alive\n", MAC_ARG(psta->hwaddr));
- psta->expire_to = pstapriv->expire_to;
- psta->keep_alive_trycnt = 0;
- continue;
- }
- else if (psta->keep_alive_trycnt <= 3)
- {
- DBG_871X("ack check for asoc expire, keep_alive_trycnt=%d\n", psta->keep_alive_trycnt);
- psta->expire_to = 1;
- continue;
- }
-
- psta->keep_alive_trycnt = 0;
-
- DBG_871X("asoc expire "MAC_FMT", state=0x%x\n", MAC_ARG(psta->hwaddr), psta->state);
- _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
- if (rtw_is_list_empty(&psta->asoc_list)==_FALSE) {
- rtw_list_delete(&psta->asoc_list);
- pstapriv->asoc_list_cnt--;
- updated = ap_free_sta(padapter, psta, _FALSE, WLAN_REASON_DEAUTH_LEAVING);
- }
- _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
-
- }
-
- if (backup_oper_channel>0) /* back to the original operation channel */
- SelectChannel(padapter, backup_oper_channel);
-}
-#endif /* CONFIG_ACTIVE_KEEP_ALIVE_CHECK */
-
- associated_clients_update(padapter, updated);
-}
-
-void add_RATid(_adapter *padapter, struct sta_info *psta, u8 rssi_level)
-{
- int i;
- u8 rf_type;
- u32 init_rate=0;
- unsigned char sta_band = 0, raid, shortGIrate = _FALSE;
- unsigned char limit;
- unsigned int tx_ra_bitmap=0;
- struct ht_priv *psta_ht = NULL;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
-
-#ifdef CONFIG_80211N_HT
- if(psta)
- psta_ht = &psta->htpriv;
- else
- return;
-#endif //CONFIG_80211N_HT
-
- if(!(psta->state & _FW_LINKED))
- return;
-
- //b/g mode ra_bitmap
- for (i=0; i<sizeof(psta->bssrateset); i++)
- {
- if (psta->bssrateset[i])
- tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
- }
-#ifdef CONFIG_80211N_HT
- //n mode ra_bitmap
- if(psta_ht->ht_option)
- {
- rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
- if(rf_type == RF_2T2R)
- limit=16;// 2R
- else
- limit=8;// 1R
-
- for (i=0; i<limit; i++) {
- if (psta_ht->ht_cap.supp_mcs_set[i/8] & BIT(i%8))
- tx_ra_bitmap |= BIT(i+12);
- }
-
- //max short GI rate
- shortGIrate = psta_ht->sgi;
- }
-#endif //CONFIG_80211N_HT
-
-#if 0//gtest
- if(get_rf_mimo_mode(padapter) == RTL8712_RF_2T2R)
- {
- //is this a 2r STA?
- if((pstat->tx_ra_bitmap & 0x0ff00000) != 0 && !(priv->pshare->has_2r_sta & BIT(pstat->aid)))
- {
- priv->pshare->has_2r_sta |= BIT(pstat->aid);
- if(rtw_read16(padapter, 0x102501f6) != 0xffff)
- {
- rtw_write16(padapter, 0x102501f6, 0xffff);
- reset_1r_sta_RA(priv, 0xffff);
- Switch_1SS_Antenna(priv, 3);
- }
- }
- else// bg or 1R STA?
- {
- if((priv->pmib->dot11BssType.net_work_type & WIRELESS_11N) && pstat->ht_cap_len && priv->pshare->has_2r_sta == 0)
- {
- if(rtw_read16(padapter, 0x102501f6) != 0x7777)
- { // MCS7 SGI
- rtw_write16(padapter, 0x102501f6,0x7777);
- reset_1r_sta_RA(priv, 0x7777);
- Switch_1SS_Antenna(priv, 2);
- }
- }
- }
-
- }
-
- if ((pstat->rssi_level < 1) || (pstat->rssi_level > 3))
- {
- if (pstat->rssi >= priv->pshare->rf_ft_var.raGoDownUpper)
- pstat->rssi_level = 1;
- else if ((pstat->rssi >= priv->pshare->rf_ft_var.raGoDown20MLower) ||
- ((priv->pshare->is_40m_bw) && (pstat->ht_cap_len) &&
- (pstat->rssi >= priv->pshare->rf_ft_var.raGoDown40MLower) &&
- (pstat->ht_cap_buf.ht_cap_info & cpu_to_le16(_HTCAP_SUPPORT_CH_WDTH_))))
- pstat->rssi_level = 2;
- else
- pstat->rssi_level = 3;
- }
-
- // rate adaptive by rssi
- if ((priv->pmib->dot11BssType.net_work_type & WIRELESS_11N) && pstat->ht_cap_len)
- {
- if ((get_rf_mimo_mode(priv) == MIMO_1T2R) || (get_rf_mimo_mode(priv) == MIMO_1T1R))
- {
- switch (pstat->rssi_level) {
- case 1:
- pstat->tx_ra_bitmap &= 0x100f0000;
- break;
- case 2:
- pstat->tx_ra_bitmap &= 0x100ff000;
- break;
- case 3:
- if (priv->pshare->is_40m_bw)
- pstat->tx_ra_bitmap &= 0x100ff005;
- else
- pstat->tx_ra_bitmap &= 0x100ff001;
-
- break;
- }
- }
- else
- {
- switch (pstat->rssi_level) {
- case 1:
- pstat->tx_ra_bitmap &= 0x1f0f0000;
- break;
- case 2:
- pstat->tx_ra_bitmap &= 0x1f0ff000;
- break;
- case 3:
- if (priv->pshare->is_40m_bw)
- pstat->tx_ra_bitmap &= 0x000ff005;
- else
- pstat->tx_ra_bitmap &= 0x000ff001;
-
- break;
- }
-
- // Don't need to mask high rates due to new rate adaptive parameters
- //if (pstat->is_broadcom_sta) // use MCS12 as the highest rate vs. Broadcom sta
- // pstat->tx_ra_bitmap &= 0x81ffffff;
-
- // NIC driver will report not supporting MCS15 and MCS14 in asoc req
- //if (pstat->is_rtl8190_sta && !pstat->is_2t_mimo_sta)
- // pstat->tx_ra_bitmap &= 0x83ffffff; // if Realtek 1x2 sta, don't use MCS15 and MCS14
- }
- }
- else if ((priv->pmib->dot11BssType.net_work_type & WIRELESS_11G) && isErpSta(pstat))
- {
- switch (pstat->rssi_level) {
- case 1:
- pstat->tx_ra_bitmap &= 0x00000f00;
- break;
- case 2:
- pstat->tx_ra_bitmap &= 0x00000ff0;
- break;
- case 3:
- pstat->tx_ra_bitmap &= 0x00000ff5;
- break;
- }
- }
- else
- {
- pstat->tx_ra_bitmap &= 0x0000000d;
- }
-
- // disable tx short GI when station cannot rx MCS15(AP is 2T2R)
- // disable tx short GI when station cannot rx MCS7 (AP is 1T2R or 1T1R)
- // if there is only 1r STA and we are 2T2R, DO NOT mask SGI rate
- if ((!(pstat->tx_ra_bitmap & 0x8000000) && (priv->pshare->has_2r_sta > 0) && (get_rf_mimo_mode(padapter) == RTL8712_RF_2T2R)) ||
- (!(pstat->tx_ra_bitmap & 0x80000) && (get_rf_mimo_mode(padapter) != RTL8712_RF_2T2R)))
- {
- pstat->tx_ra_bitmap &= ~BIT(28);
- }
-#endif
-
- if ( pcur_network->Configuration.DSConfig > 14 ) {
- // 5G band
- if (tx_ra_bitmap & 0xffff000)
- sta_band |= WIRELESS_11_5N | WIRELESS_11A;
- else
- sta_band |= WIRELESS_11A;
- } else {
- if (tx_ra_bitmap & 0xffff000)
- sta_band |= WIRELESS_11_24N | WIRELESS_11G | WIRELESS_11B;
- else if (tx_ra_bitmap & 0xff0)
- sta_band |= WIRELESS_11G |WIRELESS_11B;
- else
- sta_band |= WIRELESS_11B;
- }
-
- psta->wireless_mode = sta_band;
-
- raid = networktype_to_raid(sta_band);
- init_rate = get_highest_rate_idx(tx_ra_bitmap&0x0fffffff)&0x3f;
-
- if (psta->aid < NUM_STA)
- {
- u8 arg = 0;
-
- arg = psta->mac_id&0x1f;
-
- arg |= BIT(7);//support entry 2~31
-
- if (shortGIrate==_TRUE)
- arg |= BIT(5);
-
- tx_ra_bitmap |= ((raid<<28)&0xf0000000);
-
- DBG_871X("%s=> mac_id:%d , raid:%d , bitmap=0x%x, arg=0x%x\n",
- __FUNCTION__ , psta->mac_id, raid ,tx_ra_bitmap, arg);
-
- //bitmap[0:27] = tx_rate_bitmap
- //bitmap[28:31]= Rate Adaptive id
- //arg[0:4] = macid
- //arg[5] = Short GI
- rtw_hal_add_ra_tid(padapter, tx_ra_bitmap, arg, rssi_level);
-
-
- if (shortGIrate==_TRUE)
- init_rate |= BIT(6);
-
- //set ra_id, init_rate
- psta->raid = raid;
- psta->init_rate = init_rate;
-
- }
- else
- {
- DBG_871X("station aid %d exceed the max number\n", psta->aid);
- }
-
-}
-
-static void update_bmc_sta(_adapter *padapter)
-{
- _irqL irqL;
- u32 init_rate=0;
- unsigned char network_type, raid;
- int i, supportRateNum = 0;
- unsigned int tx_ra_bitmap=0;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
- struct sta_info *psta = rtw_get_bcmc_stainfo(padapter);
-
- if(psta)
- {
- psta->aid = 0;//default set to 0
- //psta->mac_id = psta->aid+4;
- psta->mac_id = psta->aid + 1;
-
- psta->qos_option = 0;
-#ifdef CONFIG_80211N_HT
- psta->htpriv.ht_option = _FALSE;
-#endif //CONFIG_80211N_HT
-
- psta->ieee8021x_blocked = 0;
-
- _rtw_memset((void*)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
-
- //psta->dot118021XPrivacy = _NO_PRIVACY_;//!!! remove it, because it has been set before this.
-
-
-
- //prepare for add_RATid
- supportRateNum = rtw_get_rateset_len((u8*)&pcur_network->SupportedRates);
- network_type = rtw_check_network_type((u8*)&pcur_network->SupportedRates, supportRateNum, 1);
-
- _rtw_memcpy(psta->bssrateset, &pcur_network->SupportedRates, supportRateNum);
- psta->bssratelen = supportRateNum;
-
- //b/g mode ra_bitmap
- for (i=0; i<supportRateNum; i++)
- {
- if (psta->bssrateset[i])
- tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
- }
-
- if ( pcur_network->Configuration.DSConfig > 14 ) {
- //force to A mode. 5G doesn't support CCK rates
- network_type = WIRELESS_11A;
- tx_ra_bitmap = 0x150; // 6, 12, 24 Mbps
- } else {
- //force to b mode
- network_type = WIRELESS_11B;
- tx_ra_bitmap = 0xf;
- }
-
- //tx_ra_bitmap = update_basic_rate(pcur_network->SupportedRates, supportRateNum);
-
- raid = networktype_to_raid(network_type);
- init_rate = get_highest_rate_idx(tx_ra_bitmap&0x0fffffff)&0x3f;
-
- //DBG_871X("Add id %d val %08x to ratr for bmc sta\n", psta->aid, tx_ra_bitmap);
- //ap mode
- rtw_hal_set_odm_var(padapter, HAL_ODM_STA_INFO, psta, _TRUE);
-
- //if(pHalData->fw_ractrl == _TRUE)
- {
- u8 arg = 0;
-
- arg = psta->mac_id&0x1f;
-
- arg |= BIT(7);
-
- //if (shortGIrate==_TRUE)
- // arg |= BIT(5);
-
- tx_ra_bitmap |= ((raid<<28)&0xf0000000);
-
- DBG_871X("update_bmc_sta, mask=0x%x, arg=0x%x\n", tx_ra_bitmap, arg);
-
- //bitmap[0:27] = tx_rate_bitmap
- //bitmap[28:31]= Rate Adaptive id
- //arg[0:4] = macid
- //arg[5] = Short GI
- rtw_hal_add_ra_tid(padapter, tx_ra_bitmap, arg, 0);
-
- }
-
- //set ra_id, init_rate
- psta->raid = raid;
- psta->init_rate = init_rate;
-
- rtw_stassoc_hw_rpt(padapter, psta);
-
- _enter_critical_bh(&psta->lock, &irqL);
- psta->state = _FW_LINKED;
- _exit_critical_bh(&psta->lock, &irqL);
-
- }
- else
- {
- DBG_871X("add_RATid_bmc_sta error!\n");
- }
-
-}
-
-//notes:
-//AID: 1~MAX for sta and 0 for bc/mc in ap/adhoc mode
-//MAC_ID = AID+1 for sta in ap/adhoc mode
-//MAC_ID = 1 for bc/mc for sta/ap/adhoc
-//MAC_ID = 0 for bssid for sta/ap/adhoc
-//CAM_ID = //0~3 for default key, cmd_id=macid + 3, macid=aid+1;
-
-void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta)
-{
- _irqL irqL;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
-#ifdef CONFIG_80211N_HT
- struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
- struct ht_priv *phtpriv_sta = &psta->htpriv;
-#endif //CONFIG_80211N_HT
- //set intf_tag to if1
- //psta->intf_tag = 0;
-
- //psta->mac_id = psta->aid+4;
- psta->mac_id = psta->aid+1;
- DBG_871X("%s\n",__FUNCTION__);
-
- //ap mode
- rtw_hal_set_odm_var(padapter,HAL_ODM_STA_INFO,psta,_TRUE);
-
- if(psecuritypriv->dot11AuthAlgrthm==dot11AuthAlgrthm_8021X)
- psta->ieee8021x_blocked = _TRUE;
- else
- psta->ieee8021x_blocked = _FALSE;
-
-
- //update sta's cap
-
- //ERP
- VCS_update(padapter, psta);
-#ifdef CONFIG_80211N_HT
- //HT related cap
- if(phtpriv_sta->ht_option)
- {
- //check if sta supports rx ampdu
- phtpriv_sta->ampdu_enable = phtpriv_ap->ampdu_enable;
-
- //check if sta support s Short GI
- if((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40))
- {
- phtpriv_sta->sgi = _TRUE;
- }
-
- // bwmode
- if((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH))
- {
- //phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_40;
- phtpriv_sta->bwmode = pmlmeext->cur_bwmode;
- phtpriv_sta->ch_offset = pmlmeext->cur_ch_offset;
-
- }
-
- psta->qos_option = _TRUE;
-
- }
- else
- {
- phtpriv_sta->ampdu_enable = _FALSE;
-
- phtpriv_sta->sgi = _FALSE;
- phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_20;
- phtpriv_sta->ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
- }
-
- //Rx AMPDU
- send_delba(padapter, 0, psta->hwaddr);// recipient
-
- //TX AMPDU
- send_delba(padapter, 1, psta->hwaddr);// // originator
- phtpriv_sta->agg_enable_bitmap = 0x0;//reset
- phtpriv_sta->candidate_tid_bitmap = 0x0;//reset
-#endif //CONFIG_80211N_HT
-
- //todo: init other variables
-
- _rtw_memset((void*)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
-
-
- //add ratid
- //add_RATid(padapter, psta);//move to ap_sta_info_defer_update()
-
-
- _enter_critical_bh(&psta->lock, &irqL);
- psta->state |= _FW_LINKED;
- _exit_critical_bh(&psta->lock, &irqL);
-
-
-}
-
-static void update_hw_ht_param(_adapter *padapter)
-{
- unsigned char max_AMPDU_len;
- unsigned char min_MPDU_spacing;
- struct registry_priv *pregpriv = &padapter->registrypriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
- DBG_871X("%s\n", __FUNCTION__);
-
-
- //handle A-MPDU parameter field
- /*
- AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
- AMPDU_para [4:2]:Min MPDU Start Spacing
- */
- max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x03;
-
- min_MPDU_spacing = (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) >> 2;
-
- rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_MIN_SPACE, (u8 *)(&min_MPDU_spacing));
-
- rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_FACTOR, (u8 *)(&max_AMPDU_len));
-
- //
- // Config SM Power Save setting
- //
- pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & 0x0C) >> 2;
- if(pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
- {
- /*u8 i;
- //update the MCS rates
- for (i = 0; i < 16; i++)
- {
- pmlmeinfo->HT_caps.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
- }*/
- DBG_871X("%s(): WLAN_HT_CAP_SM_PS_STATIC\n",__FUNCTION__);
- }
-
- //
- // Config current HT Protection mode.
- //
- //pmlmeinfo->HT_protection = pmlmeinfo->HT_info.infos[1] & 0x3;
-
-}
-
-static void start_bss_network(_adapter *padapter, u8 *pbuf)
-{
- u8 *p;
- u8 val8, cur_channel, cur_bwmode, cur_ch_offset;
- u16 bcn_interval;
- u32 acparm;
- int ie_len;
- struct registry_priv *pregpriv = &padapter->registrypriv;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct security_priv* psecuritypriv=&(padapter->securitypriv);
- WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- WLAN_BSSID_EX *pnetwork_mlmeext = &(pmlmeinfo->network);
- struct HT_info_element *pht_info=NULL;
-#ifdef CONFIG_P2P
- struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
-#endif //CONFIG_P2P
-
- //DBG_871X("%s\n", __FUNCTION__);
-
- bcn_interval = (u16)pnetwork->Configuration.BeaconPeriod;
- cur_channel = pnetwork->Configuration.DSConfig;
- cur_bwmode = HT_CHANNEL_WIDTH_20;;
- cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-
-
- //check if there is wps ie,
- //if there is wpsie in beacon, the hostapd will update beacon twice when stating hostapd,
- //and at first time the security ie ( RSN/WPA IE) will not include in beacon.
- if(NULL == rtw_get_wps_ie(pnetwork->IEs+_FIXED_IE_LENGTH_, pnetwork->IELength-_FIXED_IE_LENGTH_, NULL, NULL))
- {
- pmlmeext->bstart_bss = _TRUE;
- }
-
- //todo: update wmm, ht cap
- //pmlmeinfo->WMM_enable;
- //pmlmeinfo->HT_enable;
- if(pmlmepriv->qospriv.qos_option)
- pmlmeinfo->WMM_enable = _TRUE;
-#ifdef CONFIG_80211N_HT
- if(pmlmepriv->htpriv.ht_option)
- {
- pmlmeinfo->WMM_enable = _TRUE;
- pmlmeinfo->HT_enable = _TRUE;
- //pmlmeinfo->HT_info_enable = _TRUE;
- //pmlmeinfo->HT_caps_enable = _TRUE;
-
- update_hw_ht_param(padapter);
- }
-#endif //#CONFIG_80211N_HT
-
-
- if(pmlmepriv->cur_network.join_res != _TRUE) //setting only at first time
- {
- //WEP Key will be set before this function, do not clear CAM.
- if ((psecuritypriv->dot11PrivacyAlgrthm != _WEP40_) && (psecuritypriv->dot11PrivacyAlgrthm != _WEP104_))
- flush_all_cam_entry(padapter); //clear CAM
- }
-
- //set MSR to AP_Mode
- Set_MSR(padapter, _HW_STATE_AP_);
-
- //Set BSSID REG
- rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, pnetwork->MacAddress);
-
- //Set EDCA param reg
-#ifdef CONFIG_CONCURRENT_MODE
- acparm = 0x005ea42b;
-#else
- acparm = 0x002F3217; // VO
-#endif
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acparm));
- acparm = 0x005E4317; // VI
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acparm));
- //acparm = 0x00105320; // BE
- acparm = 0x005ea42b;
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
- acparm = 0x0000A444; // BK
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acparm));
-
- //Set Security
- val8 = (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)? 0xcc: 0xcf;
- rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
-
- //Beacon Control related register
- rtw_hal_set_hwreg(padapter, HW_VAR_BEACON_INTERVAL, (u8 *)(&bcn_interval));
-
-
- UpdateBrateTbl(padapter, pnetwork->SupportedRates);
- rtw_hal_set_hwreg(padapter, HW_VAR_BASIC_RATE, pnetwork->SupportedRates);
-
- if(pmlmepriv->cur_network.join_res != _TRUE) //setting only at first time
- {
- //u32 initialgain;
-
- //initialgain = 0x1e;
-
-
- //disable dynamic functions, such as high power, DIG
- //Save_DM_Func_Flag(padapter);
- //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
-
-#ifdef CONFIG_CONCURRENT_MODE
- if(padapter->adapter_type > PRIMARY_ADAPTER)
- {
- if(rtw_buddy_adapter_up(padapter))
- {
- _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
-
- //turn on all dynamic functions on PRIMARY_ADAPTER, dynamic functions only runs at PRIMARY_ADAPTER
- Switch_DM_Func(pbuddy_adapter, DYNAMIC_ALL_FUNC_ENABLE, _TRUE);
-
- //rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
- }
- }
- else
-#endif
- {
- //turn on all dynamic functions
- Switch_DM_Func(padapter, DYNAMIC_ALL_FUNC_ENABLE, _TRUE);
-
- //rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
- }
-
- }
-#ifdef CONFIG_80211N_HT
- //set channel, bwmode
- p = rtw_get_ie((pnetwork->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _HT_ADD_INFO_IE_, &ie_len, (pnetwork->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
- if( p && ie_len)
- {
- pht_info = (struct HT_info_element *)(p+2);
-
- if ((pregpriv->cbw40_enable) && (pht_info->infos[0] & BIT(2)))
- {
- //switch to the 40M Hz mode
- //pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
- cur_bwmode = HT_CHANNEL_WIDTH_40;
- switch (pht_info->infos[0] & 0x3)
- {
- case 1:
- //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
- cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
- break;
-
- case 3:
- //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
- cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
- break;
-
- default:
- //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
- cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
- break;
- }
-
- }
-
- }
-#endif //CONFIG_80211N_HT
-#ifdef CONFIG_DUALMAC_CONCURRENT
- dc_set_ap_channel_bandwidth(padapter, cur_channel, cur_ch_offset, cur_bwmode);
-#else
- //TODO: need to judge the phy parameters on concurrent mode for single phy
- //set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-#ifdef CONFIG_CONCURRENT_MODE
- if(!check_buddy_fwstate(padapter, _FW_LINKED|_FW_UNDER_LINKING|_FW_UNDER_SURVEY))
- {
- set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
- }
- else if(check_buddy_fwstate(padapter, _FW_LINKED)==_TRUE)//only second adapter can enter AP Mode
- {
- _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
- struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
-
- //To sync cur_channel/cur_bwmode/cur_ch_offset with primary adapter
- DBG_871X("primary iface is at linked state, sync cur_channel/cur_bwmode/cur_ch_offset\n");
- DBG_871X("primary adapter, CH=%d, BW=%d, offset=%d\n", pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
- DBG_871X("second adapter, CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
-
- cur_channel = pbuddy_mlmeext->cur_channel;
- if(cur_bwmode == HT_CHANNEL_WIDTH_40)
- {
- if(pht_info)
- pht_info->infos[0] &= ~(BIT(0)|BIT(1));
-
- if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
- {
- cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
-
- //to update cur_ch_offset value in beacon
- if(pht_info)
- {
- switch(cur_ch_offset)
- {
- case HAL_PRIME_CHNL_OFFSET_LOWER:
- pht_info->infos[0] |= 0x1;
- break;
- case HAL_PRIME_CHNL_OFFSET_UPPER:
- pht_info->infos[0] |= 0x3;
- break;
- case HAL_PRIME_CHNL_OFFSET_DONT_CARE:
- default:
- break;
- }
- }
-
- }
- else if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20)
- {
- cur_bwmode = HT_CHANNEL_WIDTH_20;
- cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-
- if(cur_channel>0 && cur_channel<5)
- {
- if(pht_info)
- pht_info->infos[0] |= 0x1;
-
- cur_bwmode = HT_CHANNEL_WIDTH_40;
- cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
- }
-
- if(cur_channel>7 && cur_channel<(14+1))
- {
- if(pht_info)
- pht_info->infos[0] |= 0x3;
-
- cur_bwmode = HT_CHANNEL_WIDTH_40;
- cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
- }
-
- set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
- }
-
- }
-
- // to update channel value in beacon
- pnetwork->Configuration.DSConfig = cur_channel;
- p = rtw_get_ie((pnetwork->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _DSSET_IE_, &ie_len, (pnetwork->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
- if(p && ie_len>0)
- *(p + 2) = cur_channel;
-
- if(pht_info)
- pht_info->primary_channel = cur_channel;
- }
-#else
- set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
-#endif //CONFIG_CONCURRENT_MODE
-
- DBG_871X("CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
-
- //
- pmlmeext->cur_channel = cur_channel;
- pmlmeext->cur_bwmode = cur_bwmode;
- pmlmeext->cur_ch_offset = cur_ch_offset;
-#endif //CONFIG_DUALMAC_CONCURRENT
- pmlmeext->cur_wireless_mode = pmlmepriv->cur_network.network_type;
-
- //update cur_wireless_mode
- update_wireless_mode(padapter);
-
- //udpate capability after cur_wireless_mode updated
- update_capinfo(padapter, rtw_get_capability((WLAN_BSSID_EX *)pnetwork));
-
- //let pnetwork_mlmeext == pnetwork_mlme.
- _rtw_memcpy(pnetwork_mlmeext, pnetwork, pnetwork->Length);
-
-#ifdef CONFIG_P2P
- _rtw_memcpy(pwdinfo->p2p_group_ssid, pnetwork->Ssid.Ssid, pnetwork->Ssid.SsidLength);
- pwdinfo->p2p_group_ssid_len = pnetwork->Ssid.SsidLength;
-#endif //CONFIG_P2P
-
- if(_TRUE == pmlmeext->bstart_bss)
- {
- update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
-
-#ifndef CONFIG_INTERRUPT_BASED_TXBCN //other case will tx beacon when bcn interrupt coming in.
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
- //issue beacon frame
- if(send_beacon(padapter)==_FAIL)
- {
- DBG_871X("issue_beacon, fail!\n");
- }
-#endif
-#endif //!CONFIG_INTERRUPT_BASED_TXBCN
-
- }
-
-
- //update bc/mc sta_info
- update_bmc_sta(padapter);
-
- //pmlmeext->bstart_bss = _TRUE;
-
-}
-
-int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len)
-{
- int ret=_SUCCESS;
- u8 *p;
- u8 *pHT_caps_ie=NULL;
- u8 *pHT_info_ie=NULL;
- struct sta_info *psta = NULL;
- u16 cap, ht_cap=_FALSE;
- uint ie_len = 0;
- int group_cipher, pairwise_cipher;
- u8 channel, network_type, supportRate[NDIS_802_11_LENGTH_RATES_EX];
- int supportRateNum = 0;
- u8 OUI1[] = {0x00, 0x50, 0xf2,0x01};
- u8 wps_oui[4]={0x0,0x50,0xf2,0x04};
- u8 WMM_PARA_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01};
- struct registry_priv *pregistrypriv = &padapter->registrypriv;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- WLAN_BSSID_EX *pbss_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
- struct sta_priv *pstapriv = &padapter->stapriv;
- u8 *ie = pbss_network->IEs;
-
-
- /* SSID */
- /* Supported rates */
- /* DS Params */
- /* WLAN_EID_COUNTRY */
- /* ERP Information element */
- /* Extended supported rates */
- /* WPA/WPA2 */
- /* Wi-Fi Wireless Multimedia Extensions */
- /* ht_capab, ht_oper */
- /* WPS IE */
-
- DBG_871X("%s, len=%d\n", __FUNCTION__, len);
-
- if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
- return _FAIL;
-
-
- if(len>MAX_IE_SZ)
- return _FAIL;
-
- pbss_network->IELength = len;
-
- _rtw_memset(ie, 0, MAX_IE_SZ);
-
- _rtw_memcpy(ie, pbuf, pbss_network->IELength);
-
-
- if(pbss_network->InfrastructureMode!=Ndis802_11APMode)
- return _FAIL;
-
- pbss_network->Rssi = 0;
-
- _rtw_memcpy(pbss_network->MacAddress, myid(&(padapter->eeprompriv)), ETH_ALEN);
-
- //beacon interval
- p = rtw_get_beacon_interval_from_ie(ie);//ie + 8; // 8: TimeStamp, 2: Beacon Interval 2:Capability
- //pbss_network->Configuration.BeaconPeriod = le16_to_cpu(*(unsigned short*)p);
- pbss_network->Configuration.BeaconPeriod = RTW_GET_LE16(p);
-
- //capability
- //cap = *(unsigned short *)rtw_get_capability_from_ie(ie);
- //cap = le16_to_cpu(cap);
- cap = RTW_GET_LE16(ie);
-
- //SSID
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SSID_IE_, &ie_len, (pbss_network->IELength -_BEACON_IE_OFFSET_));
- if(p && ie_len>0)
- {
- _rtw_memset(&pbss_network->Ssid, 0, sizeof(NDIS_802_11_SSID));
- _rtw_memcpy(pbss_network->Ssid.Ssid, (p + 2), ie_len);
- pbss_network->Ssid.SsidLength = ie_len;
- }
-
- //chnnel
- channel = 0;
- pbss_network->Configuration.Length = 0;
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _DSSET_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
- if(p && ie_len>0)
- channel = *(p + 2);
-
- pbss_network->Configuration.DSConfig = channel;
-
-
- _rtw_memset(supportRate, 0, NDIS_802_11_LENGTH_RATES_EX);
- // get supported rates
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
- if (p != NULL)
- {
- _rtw_memcpy(supportRate, p+2, ie_len);
- supportRateNum = ie_len;
- }
-
- //get ext_supported rates
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _EXT_SUPPORTEDRATES_IE_, &ie_len, pbss_network->IELength - _BEACON_IE_OFFSET_);
- if (p != NULL)
- {
- _rtw_memcpy(supportRate+supportRateNum, p+2, ie_len);
- supportRateNum += ie_len;
-
- }
-
- network_type = rtw_check_network_type(supportRate, supportRateNum, channel);
-
- rtw_set_supported_rate(pbss_network->SupportedRates, network_type);
-
-
- //parsing ERP_IE
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
- if(p && ie_len>0)
- {
- ERP_IE_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)p);
- }
-
- //update privacy/security
- if (cap & BIT(4))
- pbss_network->Privacy = 1;
- else
- pbss_network->Privacy = 0;
-
- psecuritypriv->wpa_psk = 0;
-
- //wpa2
- group_cipher = 0; pairwise_cipher = 0;
- psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
- psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _RSN_IE_2_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
- if(p && ie_len>0)
- {
- if(rtw_parse_wpa2_ie(p, ie_len+2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS)
- {
- psecuritypriv->dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
-
- psecuritypriv->dot8021xalg = 1;//psk, todo:802.1x
- psecuritypriv->wpa_psk |= BIT(1);
-
- psecuritypriv->wpa2_group_cipher = group_cipher;
- psecuritypriv->wpa2_pairwise_cipher = pairwise_cipher;
-#if 0
- switch(group_cipher)
- {
- case WPA_CIPHER_NONE:
- psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
- break;
- case WPA_CIPHER_WEP40:
- psecuritypriv->wpa2_group_cipher = _WEP40_;
- break;
- case WPA_CIPHER_TKIP:
- psecuritypriv->wpa2_group_cipher = _TKIP_;
- break;
- case WPA_CIPHER_CCMP:
- psecuritypriv->wpa2_group_cipher = _AES_;
- break;
- case WPA_CIPHER_WEP104:
- psecuritypriv->wpa2_group_cipher = _WEP104_;
- break;
- }
-
- switch(pairwise_cipher)
- {
- case WPA_CIPHER_NONE:
- psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
- break;
- case WPA_CIPHER_WEP40:
- psecuritypriv->wpa2_pairwise_cipher = _WEP40_;
- break;
- case WPA_CIPHER_TKIP:
- psecuritypriv->wpa2_pairwise_cipher = _TKIP_;
- break;
- case WPA_CIPHER_CCMP:
- psecuritypriv->wpa2_pairwise_cipher = _AES_;
- break;
- case WPA_CIPHER_WEP104:
- psecuritypriv->wpa2_pairwise_cipher = _WEP104_;
- break;
- }
-#endif
- }
-
- }
-
- //wpa
- ie_len = 0;
- group_cipher = 0; pairwise_cipher = 0;
- psecuritypriv->wpa_group_cipher = _NO_PRIVACY_;
- psecuritypriv->wpa_pairwise_cipher = _NO_PRIVACY_;
- for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2))
- {
- p = rtw_get_ie(p, _SSN_IE_1_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
- if ((p) && (_rtw_memcmp(p+2, OUI1, 4)))
- {
- if(rtw_parse_wpa_ie(p, ie_len+2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS)
- {
- psecuritypriv->dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
-
- psecuritypriv->dot8021xalg = 1;//psk, todo:802.1x
-
- psecuritypriv->wpa_psk |= BIT(0);
-
- psecuritypriv->wpa_group_cipher = group_cipher;
- psecuritypriv->wpa_pairwise_cipher = pairwise_cipher;
-
-#if 0
- switch(group_cipher)
- {
- case WPA_CIPHER_NONE:
- psecuritypriv->wpa_group_cipher = _NO_PRIVACY_;
- break;
- case WPA_CIPHER_WEP40:
- psecuritypriv->wpa_group_cipher = _WEP40_;
- break;
- case WPA_CIPHER_TKIP:
- psecuritypriv->wpa_group_cipher = _TKIP_;
- break;
- case WPA_CIPHER_CCMP:
- psecuritypriv->wpa_group_cipher = _AES_;
- break;
- case WPA_CIPHER_WEP104:
- psecuritypriv->wpa_group_cipher = _WEP104_;
- break;
- }
-
- switch(pairwise_cipher)
- {
- case WPA_CIPHER_NONE:
- psecuritypriv->wpa_pairwise_cipher = _NO_PRIVACY_;
- break;
- case WPA_CIPHER_WEP40:
- psecuritypriv->wpa_pairwise_cipher = _WEP40_;
- break;
- case WPA_CIPHER_TKIP:
- psecuritypriv->wpa_pairwise_cipher = _TKIP_;
- break;
- case WPA_CIPHER_CCMP:
- psecuritypriv->wpa_pairwise_cipher = _AES_;
- break;
- case WPA_CIPHER_WEP104:
- psecuritypriv->wpa_pairwise_cipher = _WEP104_;
- break;
- }
-#endif
- }
-
- break;
-
- }
-
- if ((p == NULL) || (ie_len == 0))
- {
- break;
- }
-
- }
-
- //wmm
- ie_len = 0;
- pmlmepriv->qospriv.qos_option = 0;
- if(pregistrypriv->wmm_enable)
- {
- for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2))
- {
- p = rtw_get_ie(p, _VENDOR_SPECIFIC_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
- if((p) && _rtw_memcmp(p+2, WMM_PARA_IE, 6))
- {
- pmlmepriv->qospriv.qos_option = 1;
-
- *(p+8) |= BIT(7);//QoS Info, support U-APSD
-
- /* disable all ACM bits since the WMM admission control is not supported */
- *(p + 10) &= ~BIT(4); /* BE */
- *(p + 14) &= ~BIT(4); /* BK */
- *(p + 18) &= ~BIT(4); /* VI */
- *(p + 22) &= ~BIT(4); /* VO */
-
- break;
- }
-
- if ((p == NULL) || (ie_len == 0))
- {
- break;
- }
- }
- }
-#ifdef CONFIG_80211N_HT
- //parsing HT_CAP_IE
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_CAPABILITY_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
- if(p && ie_len>0)
- {
- u8 rf_type;
-
- struct rtw_ieee80211_ht_cap *pht_cap = (struct rtw_ieee80211_ht_cap *)(p+2);
-
- pHT_caps_ie=p;
-
-
- ht_cap = _TRUE;
- network_type |= WIRELESS_11_24N;
-
-
- rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
-
- if((psecuritypriv->wpa_pairwise_cipher & WPA_CIPHER_CCMP) ||
- (psecuritypriv->wpa2_pairwise_cipher & WPA_CIPHER_CCMP))
- {
- pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&(0x07<<2));
- }
- else
- {
- pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&0x00);
- }
-
- pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_FACTOR & 0x03); //set Max Rx AMPDU size to 64K
-
- if(rf_type == RF_1T1R)
- {
- pht_cap->supp_mcs_set[0] = 0xff;
- pht_cap->supp_mcs_set[1] = 0x0;
- }
-
- _rtw_memcpy(&pmlmepriv->htpriv.ht_cap, p+2, ie_len);
-
- }
-
- //parsing HT_INFO_IE
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_ADD_INFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
- if(p && ie_len>0)
- {
- pHT_info_ie=p;
- }
-#endif //CONFIG_80211N_HT
- switch(network_type)
- {
- case WIRELESS_11B:
- pbss_network->NetworkTypeInUse = Ndis802_11DS;
- break;
- case WIRELESS_11G:
- case WIRELESS_11BG:
- case WIRELESS_11G_24N:
- case WIRELESS_11BG_24N:
- pbss_network->NetworkTypeInUse = Ndis802_11OFDM24;
- break;
- case WIRELESS_11A:
- pbss_network->NetworkTypeInUse = Ndis802_11OFDM5;
- break;
- default :
- pbss_network->NetworkTypeInUse = Ndis802_11OFDM24;
- break;
- }
-
- pmlmepriv->cur_network.network_type = network_type;
-
-#ifdef CONFIG_80211N_HT
- pmlmepriv->htpriv.ht_option = _FALSE;
-
- if( (psecuritypriv->wpa2_pairwise_cipher&WPA_CIPHER_TKIP) ||
- (psecuritypriv->wpa_pairwise_cipher&WPA_CIPHER_TKIP))
- {
- //todo:
- //ht_cap = _FALSE;
- }
-
- //ht_cap
- if(pregistrypriv->ht_enable && ht_cap==_TRUE)
- {
- pmlmepriv->htpriv.ht_option = _TRUE;
- pmlmepriv->qospriv.qos_option = 1;
-
- if(pregistrypriv->ampdu_enable==1)
- {
- pmlmepriv->htpriv.ampdu_enable = _TRUE;
- }
-
- HT_caps_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)pHT_caps_ie);
-
- HT_info_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)pHT_info_ie);
- }
-#endif
-
-
- pbss_network->Length = get_WLAN_BSSID_EX_sz((WLAN_BSSID_EX *)pbss_network);
-
- //issue beacon to start bss network
- start_bss_network(padapter, (u8*)pbss_network);
-
-
- //alloc sta_info for ap itself
- psta = rtw_get_stainfo(&padapter->stapriv, pbss_network->MacAddress);
- if(!psta)
- {
- psta = rtw_alloc_stainfo(&padapter->stapriv, pbss_network->MacAddress);
- if (psta == NULL)
- {
- return _FAIL;
- }
- }
- psta->state |= WIFI_AP_STATE; //Aries, add,fix bug of flush_cam_entry at STOP AP mode , 0724
- rtw_indicate_connect( padapter);
-
- pmlmepriv->cur_network.join_res = _TRUE;//for check if already set beacon
-
- //update bc/mc sta_info
- //update_bmc_sta(padapter);
-
- return ret;
-
-}
-
-void rtw_set_macaddr_acl(_adapter *padapter, int mode)
-{
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
-
- DBG_871X("%s, mode=%d\n", __func__, mode);
-
- pacl_list->mode = mode;
-}
-
-int rtw_acl_add_sta(_adapter *padapter, u8 *addr)
-{
- _irqL irqL;
- _list *plist, *phead;
- u8 added = _FALSE;
- int i, ret=0;
- struct rtw_wlan_acl_node *paclnode;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
- _queue *pacl_node_q =&pacl_list->acl_node_q;
-
- DBG_871X("%s(acl_num=%d)=" MAC_FMT "\n", __func__, pacl_list->num, MAC_ARG(addr));
-
- if((NUM_ACL-1) < pacl_list->num)
- return (-1);
-
-
- _enter_critical_bh(&(pacl_node_q->lock), &irqL);
-
- phead = get_list_head(pacl_node_q);
- plist = get_next(phead);
-
- while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
- {
- paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
- plist = get_next(plist);
-
- if(_rtw_memcmp(paclnode->addr, addr, ETH_ALEN))
- {
- if(paclnode->valid == _TRUE)
- {
- added = _TRUE;
- DBG_871X("%s, sta has been added\n", __func__);
- break;
- }
- }
- }
-
- _exit_critical_bh(&(pacl_node_q->lock), &irqL);
-
-
- if(added == _TRUE)
- return ret;
-
-
- _enter_critical_bh(&(pacl_node_q->lock), &irqL);
-
- for(i=0; i< NUM_ACL; i++)
- {
- paclnode = &pacl_list->aclnode[i];
-
- if(paclnode->valid == _FALSE)
- {
- _rtw_init_listhead(&paclnode->list);
-
- _rtw_memcpy(paclnode->addr, addr, ETH_ALEN);
-
- paclnode->valid = _TRUE;
-
- rtw_list_insert_tail(&paclnode->list, get_list_head(pacl_node_q));
-
- pacl_list->num++;
-
- break;
- }
- }
-
- DBG_871X("%s, acl_num=%d\n", __func__, pacl_list->num);
-
- _exit_critical_bh(&(pacl_node_q->lock), &irqL);
-
- return ret;
-}
-
-int rtw_acl_remove_sta(_adapter *padapter, u8 *addr)
-{
- _irqL irqL;
- _list *plist, *phead;
- int i, ret=0;
- struct rtw_wlan_acl_node *paclnode;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
- _queue *pacl_node_q =&pacl_list->acl_node_q;
-
- DBG_871X("%s(acl_num=%d)=" MAC_FMT "\n", __func__, pacl_list->num, MAC_ARG(addr));
-
- _enter_critical_bh(&(pacl_node_q->lock), &irqL);
-
- phead = get_list_head(pacl_node_q);
- plist = get_next(phead);
-
- while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
- {
- paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
- plist = get_next(plist);
-
- if(_rtw_memcmp(paclnode->addr, addr, ETH_ALEN))
- {
- if(paclnode->valid == _TRUE)
- {
- paclnode->valid = _FALSE;
-
- rtw_list_delete(&paclnode->list);
-
- pacl_list->num--;
- }
- }
- }
-
- _exit_critical_bh(&(pacl_node_q->lock), &irqL);
-
- DBG_871X("%s, acl_num=%d\n", __func__, pacl_list->num);
-
- return ret;
-
-}
-
-#ifdef CONFIG_NATIVEAP_MLME
-
-static void update_bcn_fixed_ie(_adapter *padapter)
-{
- DBG_871X("%s\n", __FUNCTION__);
-
-}
-
-static void update_bcn_erpinfo_ie(_adapter *padapter)
-{
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- WLAN_BSSID_EX *pnetwork = &(pmlmeinfo->network);
- unsigned char *p, *ie = pnetwork->IEs;
- u32 len = 0;
-
- DBG_871X("%s, ERP_enable=%d\n", __FUNCTION__, pmlmeinfo->ERP_enable);
-
- if(!pmlmeinfo->ERP_enable)
- return;
-
- //parsing ERP_IE
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &len, (pnetwork->IELength - _BEACON_IE_OFFSET_));
- if(p && len>0)
- {
- PNDIS_802_11_VARIABLE_IEs pIE = (PNDIS_802_11_VARIABLE_IEs)p;
-
- if (pmlmepriv->num_sta_non_erp == 1)
- pIE->data[0] |= RTW_ERP_INFO_NON_ERP_PRESENT|RTW_ERP_INFO_USE_PROTECTION;
- else
- pIE->data[0] &= ~(RTW_ERP_INFO_NON_ERP_PRESENT|RTW_ERP_INFO_USE_PROTECTION);
-
- if(pmlmepriv->num_sta_no_short_preamble > 0)
- pIE->data[0] |= RTW_ERP_INFO_BARKER_PREAMBLE_MODE;
- else
- pIE->data[0] &= ~(RTW_ERP_INFO_BARKER_PREAMBLE_MODE);
-
- ERP_IE_handler(padapter, pIE);
- }
-
-}
-
-static void update_bcn_htcap_ie(_adapter *padapter)
-{
- DBG_871X("%s\n", __FUNCTION__);
-
-}
-
-static void update_bcn_htinfo_ie(_adapter *padapter)
-{
- DBG_871X("%s\n", __FUNCTION__);
-
-}
-
-static void update_bcn_rsn_ie(_adapter *padapter)
-{
- DBG_871X("%s\n", __FUNCTION__);
-
-}
-
-static void update_bcn_wpa_ie(_adapter *padapter)
-{
- DBG_871X("%s\n", __FUNCTION__);
-
-}
-
-static void update_bcn_wmm_ie(_adapter *padapter)
-{
- DBG_871X("%s\n", __FUNCTION__);
-
-}
-
-static void update_bcn_wps_ie(_adapter *padapter)
-{
- u8 *pwps_ie=NULL, *pwps_ie_src, *premainder_ie, *pbackup_remainder_ie=NULL;
- uint wps_ielen=0, wps_offset, remainder_ielen;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- WLAN_BSSID_EX *pnetwork = &(pmlmeinfo->network);
- unsigned char *ie = pnetwork->IEs;
- u32 ielen = pnetwork->IELength;
-
-
- DBG_871X("%s\n", __FUNCTION__);
-
- pwps_ie = rtw_get_wps_ie(ie+_FIXED_IE_LENGTH_, ielen-_FIXED_IE_LENGTH_, NULL, &wps_ielen);
-
- if(pwps_ie==NULL || wps_ielen==0)
- return;
-
- wps_offset = (uint)(pwps_ie-ie);
-
- premainder_ie = pwps_ie + wps_ielen;
-
- remainder_ielen = ielen - wps_offset - wps_ielen;
-
- if(remainder_ielen>0)
- {
- pbackup_remainder_ie = rtw_malloc(remainder_ielen);
- if(pbackup_remainder_ie)
- _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
- }
-
-
- pwps_ie_src = pmlmepriv->wps_beacon_ie;
- if(pwps_ie_src == NULL)
- return;
-
-
- wps_ielen = (uint)pwps_ie_src[1];//to get ie data len
- if((wps_offset+wps_ielen+2+remainder_ielen)<=MAX_IE_SZ)
- {
- _rtw_memcpy(pwps_ie, pwps_ie_src, wps_ielen+2);
- pwps_ie += (wps_ielen+2);
-
- if(pbackup_remainder_ie)
- _rtw_memcpy(pwps_ie, pbackup_remainder_ie, remainder_ielen);
-
- //update IELength
- pnetwork->IELength = wps_offset + (wps_ielen+2) + remainder_ielen;
- }
-
- if(pbackup_remainder_ie)
- rtw_mfree(pbackup_remainder_ie, remainder_ielen);
-
-}
-
-static void update_bcn_p2p_ie(_adapter *padapter)
-{
-
-}
-
-static void update_bcn_vendor_spec_ie(_adapter *padapter, u8*oui)
-{
- DBG_871X("%s\n", __FUNCTION__);
-
- if(_rtw_memcmp(RTW_WPA_OUI, oui, 4))
- {
- update_bcn_wpa_ie(padapter);
- }
- else if(_rtw_memcmp(WMM_OUI, oui, 4))
- {
- update_bcn_wmm_ie(padapter);
- }
- else if(_rtw_memcmp(WPS_OUI, oui, 4))
- {
- update_bcn_wps_ie(padapter);
- }
- else if(_rtw_memcmp(P2P_OUI, oui, 4))
- {
- update_bcn_p2p_ie(padapter);
- }
- else
- {
- DBG_871X("unknown OUI type!\n");
- }
-
-
-}
-
-void update_beacon(_adapter *padapter, u8 ie_id, u8 *oui, u8 tx)
-{
- _irqL irqL;
- struct mlme_priv *pmlmepriv;
- struct mlme_ext_priv *pmlmeext;
- //struct mlme_ext_info *pmlmeinfo;
-
- //DBG_871X("%s\n", __FUNCTION__);
-
- if(!padapter)
- return;
-
- pmlmepriv = &(padapter->mlmepriv);
- pmlmeext = &(padapter->mlmeextpriv);
- //pmlmeinfo = &(pmlmeext->mlmext_info);
-
- if(_FALSE == pmlmeext->bstart_bss)
- return;
-
- _enter_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
-
- switch(ie_id)
- {
- case 0xFF:
-
- update_bcn_fixed_ie(padapter);//8: TimeStamp, 2: Beacon Interval 2:Capability
-
- break;
-
- case _TIM_IE_:
-
- update_BCNTIM(padapter);
-
- break;
-
- case _ERPINFO_IE_:
-
- update_bcn_erpinfo_ie(padapter);
-
- break;
-
- case _HT_CAPABILITY_IE_:
-
- update_bcn_htcap_ie(padapter);
-
- break;
-
- case _RSN_IE_2_:
-
- update_bcn_rsn_ie(padapter);
-
- break;
-
- case _HT_ADD_INFO_IE_:
-
- update_bcn_htinfo_ie(padapter);
-
- break;
-
- case _VENDOR_SPECIFIC_IE_:
-
- update_bcn_vendor_spec_ie(padapter, oui);
-
- break;
-
- default:
- break;
- }
-
- pmlmepriv->update_bcn = _TRUE;
-
- _exit_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
-
-#ifndef CONFIG_INTERRUPT_BASED_TXBCN
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
- if(tx)
- {
- //send_beacon(padapter);//send_beacon must execute on TSR level
- set_tx_beacon_cmd(padapter);
- }
-#else
- {
- //PCI will issue beacon when BCN interrupt occurs.
- }
-#endif
-#endif //!CONFIG_INTERRUPT_BASED_TXBCN
-
-}
-
-#ifdef CONFIG_80211N_HT
-
-/*
-op_mode
-Set to 0 (HT pure) under the followign conditions
- - all STAs in the BSS are 20/40 MHz HT in 20/40 MHz BSS or
- - all STAs in the BSS are 20 MHz HT in 20 MHz BSS
-Set to 1 (HT non-member protection) if there may be non-HT STAs
- in both the primary and the secondary channel
-Set to 2 if only HT STAs are associated in BSS,
- however and at least one 20 MHz HT STA is associated
-Set to 3 (HT mixed mode) when one or more non-HT STAs are associated
- (currently non-GF HT station is considered as non-HT STA also)
-*/
-static int rtw_ht_operation_update(_adapter *padapter)
-{
- u16 cur_op_mode, new_op_mode;
- int op_mode_changes = 0;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
-
- if(pmlmepriv->htpriv.ht_option == _TRUE)
- return 0;
-
- //if (!iface->conf->ieee80211n || iface->conf->ht_op_mode_fixed)
- // return 0;
-
- DBG_871X("%s current operation mode=0x%X\n",
- __FUNCTION__, pmlmepriv->ht_op_mode);
-
- if (!(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT)
- && pmlmepriv->num_sta_ht_no_gf) {
- pmlmepriv->ht_op_mode |=
- HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT;
- op_mode_changes++;
- } else if ((pmlmepriv->ht_op_mode &
- HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT) &&
- pmlmepriv->num_sta_ht_no_gf == 0) {
- pmlmepriv->ht_op_mode &=
- ~HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT;
- op_mode_changes++;
- }
-
- if (!(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT) &&
- (pmlmepriv->num_sta_no_ht || pmlmepriv->olbc_ht)) {
- pmlmepriv->ht_op_mode |= HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT;
- op_mode_changes++;
- } else if ((pmlmepriv->ht_op_mode &
- HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT) &&
- (pmlmepriv->num_sta_no_ht == 0 && !pmlmepriv->olbc_ht)) {
- pmlmepriv->ht_op_mode &=
- ~HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT;
- op_mode_changes++;
- }
-
- /* Note: currently we switch to the MIXED op mode if HT non-greenfield
- * station is associated. Probably it's a theoretical case, since
- * it looks like all known HT STAs support greenfield.
- */
- new_op_mode = 0;
- if (pmlmepriv->num_sta_no_ht ||
- (pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT))
- new_op_mode = OP_MODE_MIXED;
- else if ((phtpriv_ap->ht_cap.cap_info & IEEE80211_HT_CAP_SUP_WIDTH)
- && pmlmepriv->num_sta_ht_20mhz)
- new_op_mode = OP_MODE_20MHZ_HT_STA_ASSOCED;
- else if (pmlmepriv->olbc_ht)
- new_op_mode = OP_MODE_MAY_BE_LEGACY_STAS;
- else
- new_op_mode = OP_MODE_PURE;
-
- cur_op_mode = pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_OP_MODE_MASK;
- if (cur_op_mode != new_op_mode) {
- pmlmepriv->ht_op_mode &= ~HT_INFO_OPERATION_MODE_OP_MODE_MASK;
- pmlmepriv->ht_op_mode |= new_op_mode;
- op_mode_changes++;
- }
-
- DBG_871X("%s new operation mode=0x%X changes=%d\n",
- __FUNCTION__, pmlmepriv->ht_op_mode, op_mode_changes);
-
- return op_mode_changes;
-
-}
-
-#endif /* CONFIG_80211N_HT */
-
-void associated_clients_update(_adapter *padapter, u8 updated)
-{
- //update associcated stations cap.
- if(updated == _TRUE)
- {
- _irqL irqL;
- _list *phead, *plist;
- struct sta_info *psta=NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
-
- _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
-
- phead = &pstapriv->asoc_list;
- plist = get_next(phead);
-
- //check asoc_queue
- while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
- {
- psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
-
- plist = get_next(plist);
-
- VCS_update(padapter, psta);
- }
-
- _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
-
- }
-
-}
-
-/* called > TSR LEVEL for USB or SDIO Interface*/
-void bss_cap_update_on_sta_join(_adapter *padapter, struct sta_info *psta)
-{
- u8 beacon_updated = _FALSE;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
-
-
-#if 0
- if (!(psta->capability & WLAN_CAPABILITY_SHORT_PREAMBLE) &&
- !psta->no_short_preamble_set) {
- psta->no_short_preamble_set = 1;
- pmlmepriv->num_sta_no_short_preamble++;
- if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
- (pmlmepriv->num_sta_no_short_preamble == 1))
- ieee802_11_set_beacons(hapd->iface);
- }
-#endif
-
-
- if(!(psta->flags & WLAN_STA_SHORT_PREAMBLE))
- {
- if(!psta->no_short_preamble_set)
- {
- psta->no_short_preamble_set = 1;
-
- pmlmepriv->num_sta_no_short_preamble++;
-
- if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
- (pmlmepriv->num_sta_no_short_preamble == 1))
- {
- beacon_updated = _TRUE;
- update_beacon(padapter, 0xFF, NULL, _TRUE);
- }
-
- }
- }
- else
- {
- if(psta->no_short_preamble_set)
- {
- psta->no_short_preamble_set = 0;
-
- pmlmepriv->num_sta_no_short_preamble--;
-
- if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
- (pmlmepriv->num_sta_no_short_preamble == 0))
- {
- beacon_updated = _TRUE;
- update_beacon(padapter, 0xFF, NULL, _TRUE);
- }
-
- }
- }
-
-#if 0
- if (psta->flags & WLAN_STA_NONERP && !psta->nonerp_set) {
- psta->nonerp_set = 1;
- pmlmepriv->num_sta_non_erp++;
- if (pmlmepriv->num_sta_non_erp == 1)
- ieee802_11_set_beacons(hapd->iface);
- }
-#endif
-
- if(psta->flags & WLAN_STA_NONERP)
- {
- if(!psta->nonerp_set)
- {
- psta->nonerp_set = 1;
-
- pmlmepriv->num_sta_non_erp++;
-
- if (pmlmepriv->num_sta_non_erp == 1)
- {
- beacon_updated = _TRUE;
- update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
- }
- }
-
- }
- else
- {
- if(psta->nonerp_set)
- {
- psta->nonerp_set = 0;
-
- pmlmepriv->num_sta_non_erp--;
-
- if (pmlmepriv->num_sta_non_erp == 0)
- {
- beacon_updated = _TRUE;
- update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
- }
- }
-
- }
-
-
-#if 0
- if (!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT) &&
- !psta->no_short_slot_time_set) {
- psta->no_short_slot_time_set = 1;
- pmlmepriv->num_sta_no_short_slot_time++;
- if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
- (pmlmepriv->num_sta_no_short_slot_time == 1))
- ieee802_11_set_beacons(hapd->iface);
- }
-#endif
-
- if(!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT))
- {
- if(!psta->no_short_slot_time_set)
- {
- psta->no_short_slot_time_set = 1;
-
- pmlmepriv->num_sta_no_short_slot_time++;
-
- if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
- (pmlmepriv->num_sta_no_short_slot_time == 1))
- {
- beacon_updated = _TRUE;
- update_beacon(padapter, 0xFF, NULL, _TRUE);
- }
-
- }
- }
- else
- {
- if(psta->no_short_slot_time_set)
- {
- psta->no_short_slot_time_set = 0;
-
- pmlmepriv->num_sta_no_short_slot_time--;
-
- if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
- (pmlmepriv->num_sta_no_short_slot_time == 0))
- {
- beacon_updated = _TRUE;
- update_beacon(padapter, 0xFF, NULL, _TRUE);
- }
- }
- }
-
-#ifdef CONFIG_80211N_HT
-
- if (psta->flags & WLAN_STA_HT)
- {
- u16 ht_capab = le16_to_cpu(psta->htpriv.ht_cap.cap_info);
-
- DBG_871X("HT: STA " MAC_FMT " HT Capabilities "
- "Info: 0x%04x\n", MAC_ARG(psta->hwaddr), ht_capab);
-
- if (psta->no_ht_set) {
- psta->no_ht_set = 0;
- pmlmepriv->num_sta_no_ht--;
- }
-
- if ((ht_capab & IEEE80211_HT_CAP_GRN_FLD) == 0) {
- if (!psta->no_ht_gf_set) {
- psta->no_ht_gf_set = 1;
- pmlmepriv->num_sta_ht_no_gf++;
- }
- DBG_871X("%s STA " MAC_FMT " - no "
- "greenfield, num of non-gf stations %d\n",
- __FUNCTION__, MAC_ARG(psta->hwaddr),
- pmlmepriv->num_sta_ht_no_gf);
- }
-
- if ((ht_capab & IEEE80211_HT_CAP_SUP_WIDTH) == 0) {
- if (!psta->ht_20mhz_set) {
- psta->ht_20mhz_set = 1;
- pmlmepriv->num_sta_ht_20mhz++;
- }
- DBG_871X("%s STA " MAC_FMT " - 20 MHz HT, "
- "num of 20MHz HT STAs %d\n",
- __FUNCTION__, MAC_ARG(psta->hwaddr),
- pmlmepriv->num_sta_ht_20mhz);
- }
-
- }
- else
- {
- if (!psta->no_ht_set) {
- psta->no_ht_set = 1;
- pmlmepriv->num_sta_no_ht++;
- }
- if(pmlmepriv->htpriv.ht_option == _TRUE) {
- DBG_871X("%s STA " MAC_FMT
- " - no HT, num of non-HT stations %d\n",
- __FUNCTION__, MAC_ARG(psta->hwaddr),
- pmlmepriv->num_sta_no_ht);
- }
- }
-
- if (rtw_ht_operation_update(padapter) > 0)
- {
- update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, _FALSE);
- update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, _TRUE);
- }
-
-#endif /* CONFIG_80211N_HT */
-
- //update associcated stations cap.
- associated_clients_update(padapter, beacon_updated);
-
- DBG_871X("%s, updated=%d\n", __func__, beacon_updated);
-
-}
-
-u8 bss_cap_update_on_sta_leave(_adapter *padapter, struct sta_info *psta)
-{
- u8 beacon_updated = _FALSE;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
-
- if(!psta)
- return beacon_updated;
-
- if (psta->no_short_preamble_set) {
- psta->no_short_preamble_set = 0;
- pmlmepriv->num_sta_no_short_preamble--;
- if (pmlmeext->cur_wireless_mode > WIRELESS_11B
- && pmlmepriv->num_sta_no_short_preamble == 0)
- {
- beacon_updated = _TRUE;
- update_beacon(padapter, 0xFF, NULL, _TRUE);
- }
- }
-
- if (psta->nonerp_set) {
- psta->nonerp_set = 0;
- pmlmepriv->num_sta_non_erp--;
- if (pmlmepriv->num_sta_non_erp == 0)
- {
- beacon_updated = _TRUE;
- update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
- }
- }
-
- if (psta->no_short_slot_time_set) {
- psta->no_short_slot_time_set = 0;
- pmlmepriv->num_sta_no_short_slot_time--;
- if (pmlmeext->cur_wireless_mode > WIRELESS_11B
- && pmlmepriv->num_sta_no_short_slot_time == 0)
- {
- beacon_updated = _TRUE;
- update_beacon(padapter, 0xFF, NULL, _TRUE);
- }
- }
-
-#ifdef CONFIG_80211N_HT
-
- if (psta->no_ht_gf_set) {
- psta->no_ht_gf_set = 0;
- pmlmepriv->num_sta_ht_no_gf--;
- }
-
- if (psta->no_ht_set) {
- psta->no_ht_set = 0;
- pmlmepriv->num_sta_no_ht--;
- }
-
- if (psta->ht_20mhz_set) {
- psta->ht_20mhz_set = 0;
- pmlmepriv->num_sta_ht_20mhz--;
- }
-
- if (rtw_ht_operation_update(padapter) > 0)
- {
- update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, _FALSE);
- update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, _TRUE);
- }
-
-#endif /* CONFIG_80211N_HT */
-
- //update associcated stations cap.
- //associated_clients_update(padapter, beacon_updated); //move it to avoid deadlock
-
- DBG_871X("%s, updated=%d\n", __func__, beacon_updated);
-
- return beacon_updated;
-
-}
-
-u8 ap_free_sta(_adapter *padapter, struct sta_info *psta, bool active, u16 reason)
-{
- _irqL irqL;
- u8 beacon_updated = _FALSE;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct sta_priv *pstapriv = &padapter->stapriv;
-
- if(!psta)
- return beacon_updated;
-
- if (active == _TRUE)
- {
-#ifdef CONFIG_80211N_HT
- //tear down Rx AMPDU
- send_delba(padapter, 0, psta->hwaddr);// recipient
-
- //tear down TX AMPDU
- send_delba(padapter, 1, psta->hwaddr);// // originator
-
-#endif //CONFIG_80211N_HT
-
- issue_deauth(padapter, psta->hwaddr, reason);
- }
-
- psta->htpriv.agg_enable_bitmap = 0x0;//reset
- psta->htpriv.candidate_tid_bitmap = 0x0;//reset
-
-
- //report_del_sta_event(padapter, psta->hwaddr, reason);
-
- //clear cam entry / key
- //clear_cam_entry(padapter, (psta->mac_id + 3));
- rtw_clearstakey_cmd(padapter, (u8*)psta, (u8)(psta->mac_id + 3), _TRUE);
-
-
- _enter_critical_bh(&psta->lock, &irqL);
- psta->state &= ~_FW_LINKED;
- _exit_critical_bh(&psta->lock, &irqL);
-
- #ifdef CONFIG_IOCTL_CFG80211
- if (1) {
- #ifdef COMPAT_KERNEL_RELEASE
- rtw_cfg80211_indicate_sta_disassoc(padapter, psta->hwaddr, reason);
- #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
- rtw_cfg80211_indicate_sta_disassoc(padapter, psta->hwaddr, reason);
- #else //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
- /* will call rtw_cfg80211_indicate_sta_disassoc() in cmd_thread for old API context */
- #endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
- } else
- #endif //CONFIG_IOCTL_CFG80211
- {
- rtw_indicate_sta_disassoc_event(padapter, psta);
- }
-
- report_del_sta_event(padapter, psta->hwaddr, reason);
-
- beacon_updated = bss_cap_update_on_sta_leave(padapter, psta);
-
- _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
- rtw_free_stainfo(padapter, psta);
- _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
-
-
- return beacon_updated;
-
-}
-
-int rtw_ap_inform_ch_switch(_adapter *padapter, u8 new_ch, u8 ch_offset)
-{
- _irqL irqL;
- _list *phead, *plist;
- int ret=0;
- struct sta_info *psta = NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
-
- if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
- return ret;
-
- DBG_871X(FUNC_NDEV_FMT" with ch:%u, offset:%u\n",
- FUNC_NDEV_ARG(padapter->pnetdev), new_ch, ch_offset);
-
- _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
- phead = &pstapriv->asoc_list;
- plist = get_next(phead);
-
- /* for each sta in asoc_queue */
- while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
- {
- psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
- plist = get_next(plist);
-
- issue_action_spct_ch_switch(padapter, psta->hwaddr, new_ch, ch_offset);
- psta->expire_to = ((pstapriv->expire_to * 2) > 5) ? 5 : (pstapriv->expire_to * 2);
- }
- _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
-
- issue_action_spct_ch_switch(padapter, bc_addr, new_ch, ch_offset);
-
- return ret;
-}
-
-int rtw_sta_flush(_adapter *padapter)
-{
- _irqL irqL;
- _list *phead, *plist;
- int ret=0;
- struct sta_info *psta = NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
- u8 chk_alive_num = 0;
- char chk_alive_list[NUM_STA];
- int i;
-
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(padapter->pnetdev));
-
- if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
- return ret;
-
- _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
- phead = &pstapriv->asoc_list;
- plist = get_next(phead);
-
- while ((rtw_end_of_queue_search(phead, plist)) == _FALSE) {
- int stainfo_offset;
-
- psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
- plist = get_next(plist);
-
- /* Remove sta from asoc_list */
- rtw_list_delete(&psta->asoc_list);
- pstapriv->asoc_list_cnt--;
-
- /* Keep sta for ap_free_sta() beyond this asoc_list loop */
- stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
- if (stainfo_offset_valid(stainfo_offset)) {
- chk_alive_list[chk_alive_num++] = stainfo_offset;
- }
- }
- _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
-
-
- /* For each sta in chk_alive_list, call ap_free_sta */
- for (i = 0; i < chk_alive_num; i++) {
- psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
- ap_free_sta(padapter, psta, _TRUE, WLAN_REASON_DEAUTH_LEAVING);
- }
-
- issue_deauth(padapter, bc_addr, WLAN_REASON_DEAUTH_LEAVING);
-
- associated_clients_update(padapter, _TRUE);
-
- return ret;
-
-}
-
-/* called > TSR LEVEL for USB or SDIO Interface*/
-void sta_info_update(_adapter *padapter, struct sta_info *psta)
-{
- int flags = psta->flags;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-
-
- //update wmm cap.
- if(WLAN_STA_WME&flags)
- psta->qos_option = 1;
- else
- psta->qos_option = 0;
-
- if(pmlmepriv->qospriv.qos_option == 0)
- psta->qos_option = 0;
-
-
-#ifdef CONFIG_80211N_HT
- //update 802.11n ht cap.
- if(WLAN_STA_HT&flags)
- {
- psta->htpriv.ht_option = _TRUE;
- psta->qos_option = 1;
- }
- else
- {
- psta->htpriv.ht_option = _FALSE;
- }
-
- if(pmlmepriv->htpriv.ht_option == _FALSE)
- psta->htpriv.ht_option = _FALSE;
-#endif
-
-
- update_sta_info_apmode(padapter, psta);
-
-
-}
-
-/* called >= TSR LEVEL for USB or SDIO Interface*/
-void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta)
-{
- if(psta->state & _FW_LINKED)
- {
- //add ratid
- add_RATid(padapter, psta, 0);//DM_RATR_STA_INIT
- }
-}
-
-/* restore hw setting from sw data structures */
-void rtw_ap_restore_network(_adapter *padapter)
-{
- struct mlme_priv *mlmepriv = &padapter->mlmepriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- struct sta_priv * pstapriv = &padapter->stapriv;
- struct sta_info *psta;
- struct security_priv* psecuritypriv=&(padapter->securitypriv);
- _irqL irqL;
- _list *phead, *plist;
- u8 chk_alive_num = 0;
- char chk_alive_list[NUM_STA];
- int i;
-
- rtw_setopmode_cmd(padapter, Ndis802_11APMode);
-
- set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
- start_bss_network(padapter, (u8*)&mlmepriv->cur_network.network);
-
- if((padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||
- (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))
- {
- /* restore group key, WEP keys is restored in ips_leave() */
- rtw_set_key(padapter, psecuritypriv, psecuritypriv->dot118021XGrpKeyid, 0);
- }
-
- /* per sta pairwise key and settings */
- if((padapter->securitypriv.dot11PrivacyAlgrthm != _TKIP_) &&
- (padapter->securitypriv.dot11PrivacyAlgrthm != _AES_)) {
- return;
- }
-
- _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
-
- phead = &pstapriv->asoc_list;
- plist = get_next(phead);
-
- while ((rtw_end_of_queue_search(phead, plist)) == _FALSE) {
- int stainfo_offset;
-
- psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
- plist = get_next(plist);
-
- stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
- if (stainfo_offset_valid(stainfo_offset)) {
- chk_alive_list[chk_alive_num++] = stainfo_offset;
- }
- }
-
- _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
-
- for (i = 0; i < chk_alive_num; i++) {
- psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
-
- if (psta == NULL) {
- DBG_871X(FUNC_ADPT_FMT" sta_info is null\n", FUNC_ADPT_ARG(padapter));
- }
- else if(psta->state &_FW_LINKED)
- {
- Update_RA_Entry(padapter, psta);
- //pairwise key
- rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE);
- }
- }
-
-}
-
-void start_ap_mode(_adapter *padapter)
-{
- int i;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
-
- pmlmepriv->update_bcn = _FALSE;
-
- //init_mlme_ap_info(padapter);
- pmlmeext->bstart_bss = _FALSE;
-
- pmlmepriv->num_sta_non_erp = 0;
-
- pmlmepriv->num_sta_no_short_slot_time = 0;
-
- pmlmepriv->num_sta_no_short_preamble = 0;
-
- pmlmepriv->num_sta_ht_no_gf = 0;
-#ifdef CONFIG_80211N_HT
- pmlmepriv->num_sta_no_ht = 0;
-#endif //CONFIG_80211N_HT
- pmlmepriv->num_sta_ht_20mhz = 0;
-
- pmlmepriv->olbc = _FALSE;
-
- pmlmepriv->olbc_ht = _FALSE;
-
-#ifdef CONFIG_80211N_HT
- pmlmepriv->ht_op_mode = 0;
-#endif
-
- for(i=0; i<NUM_STA; i++)
- pstapriv->sta_aid[i] = NULL;
-
- pmlmepriv->wps_beacon_ie = NULL;
- pmlmepriv->wps_probe_resp_ie = NULL;
- pmlmepriv->wps_assoc_resp_ie = NULL;
-
- pmlmepriv->p2p_beacon_ie = NULL;
- pmlmepriv->p2p_probe_resp_ie = NULL;
-
-
- //for ACL
- _rtw_init_listhead(&(pacl_list->acl_node_q.queue));
- pacl_list->num = 0;
- pacl_list->mode = 0;
- for(i = 0; i < NUM_ACL; i++)
- {
- _rtw_init_listhead(&pacl_list->aclnode[i].list);
- pacl_list->aclnode[i].valid = _FALSE;
- }
-
-}
-
-void stop_ap_mode(_adapter *padapter)
-{
- _irqL irqL;
- _list *phead, *plist;
- struct rtw_wlan_acl_node *paclnode;
- struct sta_info *psta=NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
- _queue *pacl_node_q =&pacl_list->acl_node_q;
-
- pmlmepriv->update_bcn = _FALSE;
- pmlmeext->bstart_bss = _FALSE;
- //_rtw_spinlock_free(&pmlmepriv->bcn_update_lock);
-
- //reset and init security priv , this can refine with rtw_reset_securitypriv
- _rtw_memset((unsigned char *)&padapter->securitypriv, 0, sizeof (struct security_priv));
- padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen;
- padapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled;
-
- //for ACL
- _enter_critical_bh(&(pacl_node_q->lock), &irqL);
- phead = get_list_head(pacl_node_q);
- plist = get_next(phead);
- while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
- {
- paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
- plist = get_next(plist);
-
- if(paclnode->valid == _TRUE)
- {
- paclnode->valid = _FALSE;
-
- rtw_list_delete(&paclnode->list);
-
- pacl_list->num--;
- }
- }
- _exit_critical_bh(&(pacl_node_q->lock), &irqL);
-
- DBG_871X("%s, free acl_node_queue, num=%d\n", __func__, pacl_list->num);
-
- rtw_sta_flush(padapter);
-
- //free_assoc_sta_resources
- rtw_free_all_stainfo(padapter);
-
- psta = rtw_get_bcmc_stainfo(padapter);
- _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
- rtw_free_stainfo(padapter, psta);
- _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
-
- rtw_init_bcmc_stainfo(padapter);
-
- rtw_free_mlme_priv_ie_data(pmlmepriv);
-
-}
-
-#endif //CONFIG_NATIVEAP_MLME
-#endif //CONFIG_AP_MODE
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#define _RTW_AP_C_
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+#include <wifi.h>
+
+
+#ifdef CONFIG_AP_MODE
+
+extern unsigned char RTW_WPA_OUI[];
+extern unsigned char WMM_OUI[];
+extern unsigned char WPS_OUI[];
+extern unsigned char P2P_OUI[];
+extern unsigned char WFD_OUI[];
+
+void init_mlme_ap_info(_adapter *padapter)
+{
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
+
+
+ _rtw_spinlock_init(&pmlmepriv->bcn_update_lock);
+
+ //for ACL
+ _rtw_init_queue(&pacl_list->acl_node_q);
+
+ //pmlmeext->bstart_bss = _FALSE;
+
+ start_ap_mode(padapter);
+}
+
+void free_mlme_ap_info(_adapter *padapter)
+{
+ _irqL irqL;
+ struct sta_info *psta=NULL;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+
+ //stop_ap_mode(padapter);
+
+ pmlmepriv->update_bcn = _FALSE;
+ pmlmeext->bstart_bss = _FALSE;
+
+ rtw_sta_flush(padapter);
+
+ pmlmeinfo->state = _HW_STATE_NOLINK_;
+
+ //free_assoc_sta_resources
+ rtw_free_all_stainfo(padapter);
+
+ //free bc/mc sta_info
+ psta = rtw_get_bcmc_stainfo(padapter);
+ _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
+ rtw_free_stainfo(padapter, psta);
+ _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
+ _rtw_spinlock_free(&pmlmepriv->bcn_update_lock);
+
+}
+
+static void update_BCNTIM(_adapter *padapter)
+{
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ WLAN_BSSID_EX *pnetwork_mlmeext = &(pmlmeinfo->network);
+ unsigned char *pie = pnetwork_mlmeext->IEs;
+
+ //DBG_871X("%s\n", __FUNCTION__);
+
+ //update TIM IE
+ //if(pstapriv->tim_bitmap)
+ if(_TRUE)
+ {
+ u8 *p, *dst_ie, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
+ u16 tim_bitmap_le;
+ uint offset, tmp_len, tim_ielen, tim_ie_offset, remainder_ielen;
+
+ tim_bitmap_le = cpu_to_le16(pstapriv->tim_bitmap);
+
+ p = rtw_get_ie(pie + _FIXED_IE_LENGTH_, _TIM_IE_, &tim_ielen, pnetwork_mlmeext->IELength - _FIXED_IE_LENGTH_);
+ if (p != NULL && tim_ielen>0)
+ {
+ tim_ielen += 2;
+
+ premainder_ie = p+tim_ielen;
+
+ tim_ie_offset = (sint)(p -pie);
+
+ remainder_ielen = pnetwork_mlmeext->IELength - tim_ie_offset - tim_ielen;
+
+ //append TIM IE from dst_ie offset
+ dst_ie = p;
+ }
+ else
+ {
+ tim_ielen = 0;
+
+ //calucate head_len
+ offset = _FIXED_IE_LENGTH_;
+
+ /* get ssid_ie len */
+ p = rtw_get_ie(pie + _BEACON_IE_OFFSET_, _SSID_IE_, &tmp_len, (pnetwork_mlmeext->IELength - _BEACON_IE_OFFSET_));
+ if (p != NULL)
+ offset += tmp_len+2;
+
+ // get supported rates len
+ p = rtw_get_ie(pie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &tmp_len, (pnetwork_mlmeext->IELength - _BEACON_IE_OFFSET_));
+ if (p != NULL)
+ {
+ offset += tmp_len+2;
+ }
+
+ //DS Parameter Set IE, len=3
+ offset += 3;
+
+ premainder_ie = pie + offset;
+
+ remainder_ielen = pnetwork_mlmeext->IELength - offset - tim_ielen;
+
+ //append TIM IE from offset
+ dst_ie = pie + offset;
+
+ }
+
+
+ if(remainder_ielen>0)
+ {
+ pbackup_remainder_ie = rtw_malloc(remainder_ielen);
+ if(pbackup_remainder_ie && premainder_ie)
+ _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
+ }
+
+ *dst_ie++=_TIM_IE_;
+
+ if((pstapriv->tim_bitmap&0xff00) && (pstapriv->tim_bitmap&0x00fc))
+ tim_ielen = 5;
+ else
+ tim_ielen = 4;
+
+ *dst_ie++= tim_ielen;
+
+ *dst_ie++=0;//DTIM count
+ *dst_ie++=1;//DTIM peroid
+
+ if(pstapriv->tim_bitmap&BIT(0))//for bc/mc frames
+ *dst_ie++ = BIT(0);//bitmap ctrl
+ else
+ *dst_ie++ = 0;
+
+ if(tim_ielen==4)
+ {
+ *dst_ie++ = *(u8*)&tim_bitmap_le;
+ }
+ else if(tim_ielen==5)
+ {
+ _rtw_memcpy(dst_ie, &tim_bitmap_le, 2);
+ dst_ie+=2;
+ }
+
+ //copy remainder IE
+ if(pbackup_remainder_ie)
+ {
+ _rtw_memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
+
+ rtw_mfree(pbackup_remainder_ie, remainder_ielen);
+ }
+
+ offset = (uint)(dst_ie - pie);
+ pnetwork_mlmeext->IELength = offset + remainder_ielen;
+
+ }
+
+#ifndef CONFIG_INTERRUPT_BASED_TXBCN
+#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+ set_tx_beacon_cmd(padapter);
+#endif
+#endif //!CONFIG_INTERRUPT_BASED_TXBCN
+
+
+}
+
+void rtw_add_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index, u8 *data, u8 len)
+{
+ PNDIS_802_11_VARIABLE_IEs pIE;
+ u8 bmatch = _FALSE;
+ u8 *pie = pnetwork->IEs;
+ u8 *p, *dst_ie, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
+ u32 i, offset, ielen, ie_offset, remainder_ielen = 0;
+
+ for (i = sizeof(NDIS_802_11_FIXED_IEs); i < pnetwork->IELength;)
+ {
+ pIE = (PNDIS_802_11_VARIABLE_IEs)(pnetwork->IEs + i);
+
+ if (pIE->ElementID > index)
+ {
+ break;
+ }
+ else if(pIE->ElementID == index) // already exist the same IE
+ {
+ p = (u8 *)pIE;
+ ielen = pIE->Length;
+ bmatch = _TRUE;
+ break;
+ }
+
+ p = (u8 *)pIE;
+ ielen = pIE->Length;
+ i += (pIE->Length + 2);
+ }
+
+ if (p != NULL && ielen>0)
+ {
+ ielen += 2;
+
+ premainder_ie = p+ielen;
+
+ ie_offset = (sint)(p -pie);
+
+ remainder_ielen = pnetwork->IELength - ie_offset - ielen;
+
+ if(bmatch)
+ dst_ie = p;
+ else
+ dst_ie = (p+ielen);
+ }
+
+ if(remainder_ielen>0)
+ {
+ pbackup_remainder_ie = rtw_malloc(remainder_ielen);
+ if(pbackup_remainder_ie && premainder_ie)
+ _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
+ }
+
+ *dst_ie++=index;
+ *dst_ie++=len;
+
+ _rtw_memcpy(dst_ie, data, len);
+ dst_ie+=len;
+
+ //copy remainder IE
+ if(pbackup_remainder_ie)
+ {
+ _rtw_memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
+
+ rtw_mfree(pbackup_remainder_ie, remainder_ielen);
+ }
+
+ offset = (uint)(dst_ie - pie);
+ pnetwork->IELength = offset + remainder_ielen;
+}
+
+void rtw_remove_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index)
+{
+ u8 *p, *dst_ie, *premainder_ie=NULL, *pbackup_remainder_ie=NULL;
+ uint offset, ielen, ie_offset, remainder_ielen = 0;
+ u8 *pie = pnetwork->IEs;
+
+ p = rtw_get_ie(pie + _FIXED_IE_LENGTH_, index, &ielen, pnetwork->IELength - _FIXED_IE_LENGTH_);
+ if (p != NULL && ielen>0)
+ {
+ ielen += 2;
+
+ premainder_ie = p+ielen;
+
+ ie_offset = (sint)(p -pie);
+
+ remainder_ielen = pnetwork->IELength - ie_offset - ielen;
+
+ dst_ie = p;
+ }
+ else {
+ return;
+ }
+
+ if(remainder_ielen>0)
+ {
+ pbackup_remainder_ie = rtw_malloc(remainder_ielen);
+ if(pbackup_remainder_ie && premainder_ie)
+ _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
+ }
+
+ //copy remainder IE
+ if(pbackup_remainder_ie)
+ {
+ _rtw_memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
+
+ rtw_mfree(pbackup_remainder_ie, remainder_ielen);
+ }
+
+ offset = (uint)(dst_ie - pie);
+ pnetwork->IELength = offset + remainder_ielen;
+}
+
+
+u8 chk_sta_is_alive(struct sta_info *psta);
+u8 chk_sta_is_alive(struct sta_info *psta)
+{
+ u8 ret = _FALSE;
+ #ifdef DBG_EXPIRATION_CHK
+ DBG_871X("sta:"MAC_FMT", rssi:%d, rx:"STA_PKTS_FMT", expire_to:%u, %s%ssq_len:%u\n"
+ , MAC_ARG(psta->hwaddr)
+ , psta->rssi_stat.UndecoratedSmoothedPWDB
+ //, STA_RX_PKTS_ARG(psta)
+ , STA_RX_PKTS_DIFF_ARG(psta)
+ , psta->expire_to
+ , psta->state&WIFI_SLEEP_STATE?"PS, ":""
+ , psta->state&WIFI_STA_ALIVE_CHK_STATE?"SAC, ":""
+ , psta->sleepq_len
+ );
+ #endif
+
+ //if(sta_last_rx_pkts(psta) == sta_rx_pkts(psta))
+ if((psta->sta_stats.last_rx_data_pkts + psta->sta_stats.last_rx_ctrl_pkts) == (psta->sta_stats.rx_data_pkts + psta->sta_stats.rx_ctrl_pkts))
+ {
+ #if 0
+ if(psta->state&WIFI_SLEEP_STATE)
+ ret = _TRUE;
+ #endif
+ }
+ else
+ {
+ ret = _TRUE;
+ }
+
+ sta_update_last_rx_pkts(psta);
+
+ return ret;
+}
+
+void expire_timeout_chk(_adapter *padapter)
+{
+ _irqL irqL;
+ _list *phead, *plist;
+ u8 updated;
+ struct sta_info *psta=NULL;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ u8 chk_alive_num = 0;
+ char chk_alive_list[NUM_STA];
+ int i;
+
+ _enter_critical_bh(&pstapriv->auth_list_lock, &irqL);
+
+ phead = &pstapriv->auth_list;
+ plist = get_next(phead);
+
+ //check auth_queue
+ #ifdef DBG_EXPIRATION_CHK
+ if (rtw_end_of_queue_search(phead, plist) == _FALSE) {
+ DBG_871X(FUNC_NDEV_FMT" auth_list, cnt:%u\n"
+ , FUNC_NDEV_ARG(padapter->pnetdev), pstapriv->auth_list_cnt);
+ }
+ #endif
+ while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
+ {
+ psta = LIST_CONTAINOR(plist, struct sta_info, auth_list);
+ plist = get_next(plist);
+
+ if(psta->expire_to>0)
+ {
+ psta->expire_to--;
+ if (psta->expire_to == 0)
+ {
+ rtw_list_delete(&psta->auth_list);
+ pstapriv->auth_list_cnt--;
+
+ DBG_871X("auth expire %02X%02X%02X%02X%02X%02X\n",
+ psta->hwaddr[0],psta->hwaddr[1],psta->hwaddr[2],psta->hwaddr[3],psta->hwaddr[4],psta->hwaddr[5]);
+
+ _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
+
+ _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
+ rtw_free_stainfo(padapter, psta);
+ _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
+
+ _enter_critical_bh(&pstapriv->auth_list_lock, &irqL);
+ }
+ }
+
+ }
+
+ _exit_critical_bh(&pstapriv->auth_list_lock, &irqL);
+
+ psta = NULL;
+
+
+ _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+
+ phead = &pstapriv->asoc_list;
+ plist = get_next(phead);
+
+ //check asoc_queue
+ #ifdef DBG_EXPIRATION_CHK
+ if (rtw_end_of_queue_search(phead, plist) == _FALSE) {
+ DBG_871X(FUNC_NDEV_FMT" asoc_list, cnt:%u\n"
+ , FUNC_NDEV_ARG(padapter->pnetdev), pstapriv->asoc_list_cnt);
+ }
+ #endif
+ while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
+ {
+ psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
+ plist = get_next(plist);
+
+ if (chk_sta_is_alive(psta) || !psta->expire_to) {
+ psta->expire_to = pstapriv->expire_to;
+ psta->keep_alive_trycnt = 0;
+ #ifdef CONFIG_TX_MCAST2UNI
+ psta->under_exist_checking = 0;
+ #endif // CONFIG_TX_MCAST2UNI
+ } else {
+ psta->expire_to--;
+ }
+
+#ifndef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
+#ifdef CONFIG_TX_MCAST2UNI
+#ifdef CONFIG_80211N_HT
+ if ( (psta->flags & WLAN_STA_HT) && (psta->htpriv.agg_enable_bitmap || psta->under_exist_checking) ) {
+ // check sta by delba(addba) for 11n STA
+ // ToDo: use CCX report to check for all STAs
+ //DBG_871X("asoc check by DELBA/ADDBA! (pstapriv->expire_to=%d s)(psta->expire_to=%d s), [%02x, %d]\n", pstapriv->expire_to*2, psta->expire_to*2, psta->htpriv.agg_enable_bitmap, psta->under_exist_checking);
+
+ if ( psta->expire_to <= (pstapriv->expire_to - 50 ) ) {
+ DBG_871X("asoc expire by DELBA/ADDBA! (%d s)\n", (pstapriv->expire_to-psta->expire_to)*2);
+ psta->under_exist_checking = 0;
+ psta->expire_to = 0;
+ } else if ( psta->expire_to <= (pstapriv->expire_to - 3) && (psta->under_exist_checking==0)) {
+ DBG_871X("asoc check by DELBA/ADDBA! (%d s)\n", (pstapriv->expire_to-psta->expire_to)*2);
+ psta->under_exist_checking = 1;
+ //tear down TX AMPDU
+ send_delba(padapter, 1, psta->hwaddr);// // originator
+ psta->htpriv.agg_enable_bitmap = 0x0;//reset
+ psta->htpriv.candidate_tid_bitmap = 0x0;//reset
+ }
+ }
+#endif //CONFIG_80211N_HT
+#endif // CONFIG_TX_MCAST2UNI
+#endif //CONFIG_ACTIVE_KEEP_ALIVE_CHECK
+
+ if (psta->expire_to <= 0)
+ {
+ #ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+
+ if (padapter->registrypriv.wifi_spec == 1)
+ {
+ psta->expire_to = pstapriv->expire_to;
+ continue;
+ }
+
+ if (psta->state & WIFI_SLEEP_STATE) {
+ if (!(psta->state & WIFI_STA_ALIVE_CHK_STATE)) {
+ //to check if alive by another methods if staion is at ps mode.
+ psta->expire_to = pstapriv->expire_to;
+ psta->state |= WIFI_STA_ALIVE_CHK_STATE;
+
+ //DBG_871X("alive chk, sta:" MAC_FMT " is at ps mode!\n", MAC_ARG(psta->hwaddr));
+
+ //to update bcn with tim_bitmap for this station
+ pstapriv->tim_bitmap |= BIT(psta->aid);
+ update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
+
+ if(!pmlmeext->active_keep_alive_check)
+ continue;
+ }
+ }
+
+ if (pmlmeext->active_keep_alive_check) {
+ int stainfo_offset;
+
+ stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
+ if (stainfo_offset_valid(stainfo_offset)) {
+ chk_alive_list[chk_alive_num++] = stainfo_offset;
+ }
+
+ continue;
+ }
+ #endif /* CONFIG_ACTIVE_KEEP_ALIVE_CHECK */
+
+ rtw_list_delete(&psta->asoc_list);
+ pstapriv->asoc_list_cnt--;
+
+ DBG_871X("asoc expire "MAC_FMT", state=0x%x\n", MAC_ARG(psta->hwaddr), psta->state);
+ updated = ap_free_sta(padapter, psta, _FALSE, WLAN_REASON_DEAUTH_LEAVING);
+ }
+ else
+ {
+ /* TODO: Aging mechanism to digest frames in sleep_q to avoid running out of xmitframe */
+ if (psta->sleepq_len > (NR_XMITFRAME/pstapriv->asoc_list_cnt)
+ && padapter->xmitpriv.free_xmitframe_cnt < ((NR_XMITFRAME/pstapriv->asoc_list_cnt)/2)
+ ){
+ DBG_871X("%s sta:"MAC_FMT", sleepq_len:%u, free_xmitframe_cnt:%u, asoc_list_cnt:%u, clear sleep_q\n", __func__
+ , MAC_ARG(psta->hwaddr)
+ , psta->sleepq_len, padapter->xmitpriv.free_xmitframe_cnt, pstapriv->asoc_list_cnt);
+ wakeup_sta_to_xmit(padapter, psta);
+ }
+ }
+ }
+
+ _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+
+#ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
+if (chk_alive_num) {
+
+ u8 backup_oper_channel=0;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ /* switch to correct channel of current network before issue keep-alive frames */
+ if (rtw_get_oper_ch(padapter) != pmlmeext->cur_channel) {
+ backup_oper_channel = rtw_get_oper_ch(padapter);
+ SelectChannel(padapter, pmlmeext->cur_channel);
+ }
+
+ /* issue null data to check sta alive*/
+ for (i = 0; i < chk_alive_num; i++) {
+
+ int ret = _FAIL;
+
+ psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
+ if(!(psta->state &_FW_LINKED))
+ continue;
+
+ if (psta->state & WIFI_SLEEP_STATE)
+ ret = issue_nulldata(padapter, psta->hwaddr, 0, 1, 50);
+ else
+ ret = issue_nulldata(padapter, psta->hwaddr, 0, 3, 50);
+
+ psta->keep_alive_trycnt++;
+ if (ret == _SUCCESS)
+ {
+ DBG_871X("asoc check, sta(" MAC_FMT ") is alive\n", MAC_ARG(psta->hwaddr));
+ psta->expire_to = pstapriv->expire_to;
+ psta->keep_alive_trycnt = 0;
+ continue;
+ }
+ else if (psta->keep_alive_trycnt <= 3)
+ {
+ DBG_871X("ack check for asoc expire, keep_alive_trycnt=%d\n", psta->keep_alive_trycnt);
+ psta->expire_to = 1;
+ continue;
+ }
+
+ psta->keep_alive_trycnt = 0;
+
+ DBG_871X("asoc expire "MAC_FMT", state=0x%x\n", MAC_ARG(psta->hwaddr), psta->state);
+ _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+ if (rtw_is_list_empty(&psta->asoc_list)==_FALSE) {
+ rtw_list_delete(&psta->asoc_list);
+ pstapriv->asoc_list_cnt--;
+ updated = ap_free_sta(padapter, psta, _FALSE, WLAN_REASON_DEAUTH_LEAVING);
+ }
+ _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+
+ }
+
+ if (backup_oper_channel>0) /* back to the original operation channel */
+ SelectChannel(padapter, backup_oper_channel);
+}
+#endif /* CONFIG_ACTIVE_KEEP_ALIVE_CHECK */
+
+ associated_clients_update(padapter, updated);
+}
+
+void add_RATid(_adapter *padapter, struct sta_info *psta, u8 rssi_level)
+{
+ int i;
+ u8 rf_type;
+ u32 init_rate=0;
+ unsigned char sta_band = 0, raid, shortGIrate = _FALSE;
+ unsigned char limit;
+ unsigned int tx_ra_bitmap=0;
+ struct ht_priv *psta_ht = NULL;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
+
+#ifdef CONFIG_80211N_HT
+ if(psta)
+ psta_ht = &psta->htpriv;
+ else
+ return;
+#endif //CONFIG_80211N_HT
+
+ if(!(psta->state & _FW_LINKED))
+ return;
+
+ //b/g mode ra_bitmap
+ for (i=0; i<sizeof(psta->bssrateset); i++)
+ {
+ if (psta->bssrateset[i])
+ tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
+ }
+#ifdef CONFIG_80211N_HT
+ //n mode ra_bitmap
+ if(psta_ht->ht_option)
+ {
+ rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
+ if(rf_type == RF_2T2R)
+ limit=16;// 2R
+ else
+ limit=8;// 1R
+
+ for (i=0; i<limit; i++) {
+ if (psta_ht->ht_cap.supp_mcs_set[i/8] & BIT(i%8))
+ tx_ra_bitmap |= BIT(i+12);
+ }
+
+ //max short GI rate
+ shortGIrate = psta_ht->sgi;
+ }
+#endif //CONFIG_80211N_HT
+
+#if 0//gtest
+ if(get_rf_mimo_mode(padapter) == RTL8712_RF_2T2R)
+ {
+ //is this a 2r STA?
+ if((pstat->tx_ra_bitmap & 0x0ff00000) != 0 && !(priv->pshare->has_2r_sta & BIT(pstat->aid)))
+ {
+ priv->pshare->has_2r_sta |= BIT(pstat->aid);
+ if(rtw_read16(padapter, 0x102501f6) != 0xffff)
+ {
+ rtw_write16(padapter, 0x102501f6, 0xffff);
+ reset_1r_sta_RA(priv, 0xffff);
+ Switch_1SS_Antenna(priv, 3);
+ }
+ }
+ else// bg or 1R STA?
+ {
+ if((priv->pmib->dot11BssType.net_work_type & WIRELESS_11N) && pstat->ht_cap_len && priv->pshare->has_2r_sta == 0)
+ {
+ if(rtw_read16(padapter, 0x102501f6) != 0x7777)
+ { // MCS7 SGI
+ rtw_write16(padapter, 0x102501f6,0x7777);
+ reset_1r_sta_RA(priv, 0x7777);
+ Switch_1SS_Antenna(priv, 2);
+ }
+ }
+ }
+
+ }
+
+ if ((pstat->rssi_level < 1) || (pstat->rssi_level > 3))
+ {
+ if (pstat->rssi >= priv->pshare->rf_ft_var.raGoDownUpper)
+ pstat->rssi_level = 1;
+ else if ((pstat->rssi >= priv->pshare->rf_ft_var.raGoDown20MLower) ||
+ ((priv->pshare->is_40m_bw) && (pstat->ht_cap_len) &&
+ (pstat->rssi >= priv->pshare->rf_ft_var.raGoDown40MLower) &&
+ (pstat->ht_cap_buf.ht_cap_info & cpu_to_le16(_HTCAP_SUPPORT_CH_WDTH_))))
+ pstat->rssi_level = 2;
+ else
+ pstat->rssi_level = 3;
+ }
+
+ // rate adaptive by rssi
+ if ((priv->pmib->dot11BssType.net_work_type & WIRELESS_11N) && pstat->ht_cap_len)
+ {
+ if ((get_rf_mimo_mode(priv) == MIMO_1T2R) || (get_rf_mimo_mode(priv) == MIMO_1T1R))
+ {
+ switch (pstat->rssi_level) {
+ case 1:
+ pstat->tx_ra_bitmap &= 0x100f0000;
+ break;
+ case 2:
+ pstat->tx_ra_bitmap &= 0x100ff000;
+ break;
+ case 3:
+ if (priv->pshare->is_40m_bw)
+ pstat->tx_ra_bitmap &= 0x100ff005;
+ else
+ pstat->tx_ra_bitmap &= 0x100ff001;
+
+ break;
+ }
+ }
+ else
+ {
+ switch (pstat->rssi_level) {
+ case 1:
+ pstat->tx_ra_bitmap &= 0x1f0f0000;
+ break;
+ case 2:
+ pstat->tx_ra_bitmap &= 0x1f0ff000;
+ break;
+ case 3:
+ if (priv->pshare->is_40m_bw)
+ pstat->tx_ra_bitmap &= 0x000ff005;
+ else
+ pstat->tx_ra_bitmap &= 0x000ff001;
+
+ break;
+ }
+
+ // Don't need to mask high rates due to new rate adaptive parameters
+ //if (pstat->is_broadcom_sta) // use MCS12 as the highest rate vs. Broadcom sta
+ // pstat->tx_ra_bitmap &= 0x81ffffff;
+
+ // NIC driver will report not supporting MCS15 and MCS14 in asoc req
+ //if (pstat->is_rtl8190_sta && !pstat->is_2t_mimo_sta)
+ // pstat->tx_ra_bitmap &= 0x83ffffff; // if Realtek 1x2 sta, don't use MCS15 and MCS14
+ }
+ }
+ else if ((priv->pmib->dot11BssType.net_work_type & WIRELESS_11G) && isErpSta(pstat))
+ {
+ switch (pstat->rssi_level) {
+ case 1:
+ pstat->tx_ra_bitmap &= 0x00000f00;
+ break;
+ case 2:
+ pstat->tx_ra_bitmap &= 0x00000ff0;
+ break;
+ case 3:
+ pstat->tx_ra_bitmap &= 0x00000ff5;
+ break;
+ }
+ }
+ else
+ {
+ pstat->tx_ra_bitmap &= 0x0000000d;
+ }
+
+ // disable tx short GI when station cannot rx MCS15(AP is 2T2R)
+ // disable tx short GI when station cannot rx MCS7 (AP is 1T2R or 1T1R)
+ // if there is only 1r STA and we are 2T2R, DO NOT mask SGI rate
+ if ((!(pstat->tx_ra_bitmap & 0x8000000) && (priv->pshare->has_2r_sta > 0) && (get_rf_mimo_mode(padapter) == RTL8712_RF_2T2R)) ||
+ (!(pstat->tx_ra_bitmap & 0x80000) && (get_rf_mimo_mode(padapter) != RTL8712_RF_2T2R)))
+ {
+ pstat->tx_ra_bitmap &= ~BIT(28);
+ }
+#endif
+
+ if ( pcur_network->Configuration.DSConfig > 14 ) {
+ // 5G band
+ if (tx_ra_bitmap & 0xffff000)
+ sta_band |= WIRELESS_11_5N ;
+
+ if (tx_ra_bitmap & 0xff0)
+ sta_band |= WIRELESS_11A;
+
+ } else {
+ if (tx_ra_bitmap & 0xffff000)
+ sta_band |= WIRELESS_11_24N;
+
+ if (tx_ra_bitmap & 0xff0)
+ sta_band |= WIRELESS_11G;
+
+ if (tx_ra_bitmap & 0x0f)
+ sta_band |= WIRELESS_11B;
+ }
+
+ psta->wireless_mode = sta_band;
+
+ raid = networktype_to_raid(sta_band);
+ init_rate = get_highest_rate_idx(tx_ra_bitmap&0x0fffffff)&0x3f;
+
+ if (psta->aid < NUM_STA)
+ {
+ u8 arg = 0;
+
+ arg = psta->mac_id&0x1f;
+
+ arg |= BIT(7);//support entry 2~31
+
+ if (shortGIrate==_TRUE)
+ arg |= BIT(5);
+
+ tx_ra_bitmap |= ((raid<<28)&0xf0000000);
+
+ DBG_871X("%s=> mac_id:%d , raid:%d , bitmap=0x%x, arg=0x%x\n",
+ __FUNCTION__ , psta->mac_id, raid ,tx_ra_bitmap, arg);
+
+ //bitmap[0:27] = tx_rate_bitmap
+ //bitmap[28:31]= Rate Adaptive id
+ //arg[0:4] = macid
+ //arg[5] = Short GI
+ rtw_hal_add_ra_tid(padapter, tx_ra_bitmap, arg, rssi_level);
+
+
+ if (shortGIrate==_TRUE)
+ init_rate |= BIT(6);
+
+ //set ra_id, init_rate
+ psta->raid = raid;
+ psta->init_rate = init_rate;
+
+ }
+ else
+ {
+ DBG_871X("station aid %d exceed the max number\n", psta->aid);
+ }
+
+}
+
+void update_bmc_sta(_adapter *padapter)
+{
+ _irqL irqL;
+ u32 init_rate=0;
+ unsigned char network_type, raid;
+ int i, supportRateNum = 0;
+ unsigned int tx_ra_bitmap=0;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
+ struct sta_info *psta = rtw_get_bcmc_stainfo(padapter);
+
+ if(psta)
+ {
+ psta->aid = 0;//default set to 0
+ //psta->mac_id = psta->aid+4;
+ psta->mac_id = psta->aid + 1;
+
+ psta->qos_option = 0;
+#ifdef CONFIG_80211N_HT
+ psta->htpriv.ht_option = _FALSE;
+#endif //CONFIG_80211N_HT
+
+ psta->ieee8021x_blocked = 0;
+
+ _rtw_memset((void*)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
+
+ //psta->dot118021XPrivacy = _NO_PRIVACY_;//!!! remove it, because it has been set before this.
+
+
+
+ //prepare for add_RATid
+ supportRateNum = rtw_get_rateset_len((u8*)&pcur_network->SupportedRates);
+ network_type = rtw_check_network_type((u8*)&pcur_network->SupportedRates, supportRateNum, 1);
+
+ _rtw_memcpy(psta->bssrateset, &pcur_network->SupportedRates, supportRateNum);
+ psta->bssratelen = supportRateNum;
+
+ //b/g mode ra_bitmap
+ for (i=0; i<supportRateNum; i++)
+ {
+ if (psta->bssrateset[i])
+ tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
+ }
+
+ if ( pcur_network->Configuration.DSConfig > 14 ) {
+ //force to A mode. 5G doesn't support CCK rates
+ network_type = WIRELESS_11A;
+ tx_ra_bitmap = 0x150; // 6, 12, 24 Mbps
+ } else {
+ //force to b mode
+ network_type = WIRELESS_11B;
+ tx_ra_bitmap = 0xf;
+ }
+
+ //tx_ra_bitmap = update_basic_rate(pcur_network->SupportedRates, supportRateNum);
+
+ raid = networktype_to_raid(network_type);
+ init_rate = get_highest_rate_idx(tx_ra_bitmap&0x0fffffff)&0x3f;
+
+ //DBG_871X("Add id %d val %08x to ratr for bmc sta\n", psta->aid, tx_ra_bitmap);
+ //ap mode
+ rtw_hal_set_odm_var(padapter, HAL_ODM_STA_INFO, psta, _TRUE);
+
+ //if(pHalData->fw_ractrl == _TRUE)
+ {
+ u8 arg = 0;
+
+ arg = psta->mac_id&0x1f;
+
+ arg |= BIT(7);
+
+ //if (shortGIrate==_TRUE)
+ // arg |= BIT(5);
+
+ tx_ra_bitmap |= ((raid<<28)&0xf0000000);
+
+ DBG_871X("update_bmc_sta, mask=0x%x, arg=0x%x\n", tx_ra_bitmap, arg);
+
+ //bitmap[0:27] = tx_rate_bitmap
+ //bitmap[28:31]= Rate Adaptive id
+ //arg[0:4] = macid
+ //arg[5] = Short GI
+ rtw_hal_add_ra_tid(padapter, tx_ra_bitmap, arg, 0);
+
+ }
+
+ //set ra_id, init_rate
+ psta->raid = raid;
+ psta->init_rate = init_rate;
+
+ rtw_sta_media_status_rpt(padapter, psta, 1);
+
+ _enter_critical_bh(&psta->lock, &irqL);
+ psta->state = _FW_LINKED;
+ _exit_critical_bh(&psta->lock, &irqL);
+
+ }
+ else
+ {
+ DBG_871X("add_RATid_bmc_sta error!\n");
+ }
+
+}
+
+//notes:
+//AID: 1~MAX for sta and 0 for bc/mc in ap/adhoc mode
+//MAC_ID = AID+1 for sta in ap/adhoc mode
+//MAC_ID = 1 for bc/mc for sta/ap/adhoc
+//MAC_ID = 0 for bssid for sta/ap/adhoc
+//CAM_ID = //0~3 for default key, cmd_id=macid + 3, macid=aid+1;
+
+void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta)
+{
+ _irqL irqL;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct security_priv *psecuritypriv = &padapter->securitypriv;
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+#ifdef CONFIG_80211N_HT
+ struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
+ struct ht_priv *phtpriv_sta = &psta->htpriv;
+#endif //CONFIG_80211N_HT
+ //set intf_tag to if1
+ //psta->intf_tag = 0;
+
+ //psta->mac_id = psta->aid+4;
+ psta->mac_id = psta->aid+1;
+ DBG_871X("%s\n",__FUNCTION__);
+
+ //ap mode
+ rtw_hal_set_odm_var(padapter,HAL_ODM_STA_INFO,psta,_TRUE);
+
+ if(psecuritypriv->dot11AuthAlgrthm==dot11AuthAlgrthm_8021X)
+ psta->ieee8021x_blocked = _TRUE;
+ else
+ psta->ieee8021x_blocked = _FALSE;
+
+
+ //update sta's cap
+
+ //ERP
+ VCS_update(padapter, psta);
+#ifdef CONFIG_80211N_HT
+ //HT related cap
+ if(phtpriv_sta->ht_option)
+ {
+ //check if sta supports rx ampdu
+ phtpriv_sta->ampdu_enable = phtpriv_ap->ampdu_enable;
+
+ //check if sta support s Short GI
+ if((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40))
+ {
+ phtpriv_sta->sgi = _TRUE;
+ }
+
+ // bwmode
+ if((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH))
+ {
+ //phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_40;
+ phtpriv_sta->bwmode = pmlmeext->cur_bwmode;
+ phtpriv_sta->ch_offset = pmlmeext->cur_ch_offset;
+
+ }
+
+ psta->qos_option = _TRUE;
+
+ }
+ else
+ {
+ phtpriv_sta->ampdu_enable = _FALSE;
+
+ phtpriv_sta->sgi = _FALSE;
+ phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_20;
+ phtpriv_sta->ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
+ }
+
+ //Rx AMPDU
+ send_delba(padapter, 0, psta->hwaddr);// recipient
+
+ //TX AMPDU
+ send_delba(padapter, 1, psta->hwaddr);// // originator
+ phtpriv_sta->agg_enable_bitmap = 0x0;//reset
+ phtpriv_sta->candidate_tid_bitmap = 0x0;//reset
+#endif //CONFIG_80211N_HT
+
+ //todo: init other variables
+
+ _rtw_memset((void*)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
+
+
+ //add ratid
+ //add_RATid(padapter, psta);//move to ap_sta_info_defer_update()
+
+
+ _enter_critical_bh(&psta->lock, &irqL);
+ psta->state |= _FW_LINKED;
+ _exit_critical_bh(&psta->lock, &irqL);
+
+
+}
+
+static void update_hw_ht_param(_adapter *padapter)
+{
+ unsigned char max_AMPDU_len;
+ unsigned char min_MPDU_spacing;
+ struct registry_priv *pregpriv = &padapter->registrypriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+
+ DBG_871X("%s\n", __FUNCTION__);
+
+
+ //handle A-MPDU parameter field
+ /*
+ AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
+ AMPDU_para [4:2]:Min MPDU Start Spacing
+ */
+ max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x03;
+
+ min_MPDU_spacing = (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) >> 2;
+
+ rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_MIN_SPACE, (u8 *)(&min_MPDU_spacing));
+
+ rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_FACTOR, (u8 *)(&max_AMPDU_len));
+
+ //
+ // Config SM Power Save setting
+ //
+ pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & 0x0C) >> 2;
+ if(pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
+ {
+ /*u8 i;
+ //update the MCS rates
+ for (i = 0; i < 16; i++)
+ {
+ pmlmeinfo->HT_caps.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
+ }*/
+ DBG_871X("%s(): WLAN_HT_CAP_SM_PS_STATIC\n",__FUNCTION__);
+ }
+
+ //
+ // Config current HT Protection mode.
+ //
+ //pmlmeinfo->HT_protection = pmlmeinfo->HT_info.infos[1] & 0x3;
+
+}
+
+static void start_bss_network(_adapter *padapter, u8 *pbuf)
+{
+ u8 *p;
+ u8 val8, cur_channel, cur_bwmode, cur_ch_offset;
+ u16 bcn_interval;
+ u32 acparm;
+ int ie_len;
+ struct registry_priv *pregpriv = &padapter->registrypriv;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct security_priv* psecuritypriv=&(padapter->securitypriv);
+ WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ WLAN_BSSID_EX *pnetwork_mlmeext = &(pmlmeinfo->network);
+ struct HT_info_element *pht_info=NULL;
+#ifdef CONFIG_P2P
+ struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
+#endif //CONFIG_P2P
+
+ //DBG_871X("%s\n", __FUNCTION__);
+
+ bcn_interval = (u16)pnetwork->Configuration.BeaconPeriod;
+ cur_channel = pnetwork->Configuration.DSConfig;
+ cur_bwmode = HT_CHANNEL_WIDTH_20;;
+ cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
+
+
+ //check if there is wps ie,
+ //if there is wpsie in beacon, the hostapd will update beacon twice when stating hostapd,
+ //and at first time the security ie ( RSN/WPA IE) will not include in beacon.
+ if(NULL == rtw_get_wps_ie(pnetwork->IEs+_FIXED_IE_LENGTH_, pnetwork->IELength-_FIXED_IE_LENGTH_, NULL, NULL))
+ {
+ pmlmeext->bstart_bss = _TRUE;
+ }
+
+ //todo: update wmm, ht cap
+ //pmlmeinfo->WMM_enable;
+ //pmlmeinfo->HT_enable;
+ if(pmlmepriv->qospriv.qos_option)
+ pmlmeinfo->WMM_enable = _TRUE;
+#ifdef CONFIG_80211N_HT
+ if(pmlmepriv->htpriv.ht_option)
+ {
+ pmlmeinfo->WMM_enable = _TRUE;
+ pmlmeinfo->HT_enable = _TRUE;
+ //pmlmeinfo->HT_info_enable = _TRUE;
+ //pmlmeinfo->HT_caps_enable = _TRUE;
+
+ update_hw_ht_param(padapter);
+ }
+#endif //#CONFIG_80211N_HT
+
+
+ if(pmlmepriv->cur_network.join_res != _TRUE) //setting only at first time
+ {
+ //WEP Key will be set before this function, do not clear CAM.
+ if ((psecuritypriv->dot11PrivacyAlgrthm != _WEP40_) && (psecuritypriv->dot11PrivacyAlgrthm != _WEP104_))
+ flush_all_cam_entry(padapter); //clear CAM
+ }
+
+ //set MSR to AP_Mode
+ Set_MSR(padapter, _HW_STATE_AP_);
+
+ //Set BSSID REG
+ rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, pnetwork->MacAddress);
+
+ //Set EDCA param reg
+#ifdef CONFIG_CONCURRENT_MODE
+ acparm = 0x005ea42b;
+#else
+ acparm = 0x002F3217; // VO
+#endif
+ rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acparm));
+ acparm = 0x005E4317; // VI
+ rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acparm));
+ //acparm = 0x00105320; // BE
+ acparm = 0x005ea42b;
+ rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
+ acparm = 0x0000A444; // BK
+ rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acparm));
+
+ //Set Security
+ val8 = (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)? 0xcc: 0xcf;
+ rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
+
+ //Beacon Control related register
+ rtw_hal_set_hwreg(padapter, HW_VAR_BEACON_INTERVAL, (u8 *)(&bcn_interval));
+
+
+ UpdateBrateTbl(padapter, pnetwork->SupportedRates);
+ rtw_hal_set_hwreg(padapter, HW_VAR_BASIC_RATE, pnetwork->SupportedRates);
+
+ if(pmlmepriv->cur_network.join_res != _TRUE) //setting only at first time
+ {
+ //u32 initialgain;
+
+ //initialgain = 0x1e;
+
+
+ //disable dynamic functions, such as high power, DIG
+ //Save_DM_Func_Flag(padapter);
+ //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
+
+#ifdef CONFIG_CONCURRENT_MODE
+ if(padapter->adapter_type > PRIMARY_ADAPTER)
+ {
+ if(rtw_buddy_adapter_up(padapter))
+ {
+ _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
+
+ //turn on all dynamic functions on PRIMARY_ADAPTER, dynamic functions only runs at PRIMARY_ADAPTER
+ Switch_DM_Func(pbuddy_adapter, DYNAMIC_ALL_FUNC_ENABLE, _TRUE);
+
+ //rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
+ }
+ }
+ else
+#endif
+ {
+ //turn on all dynamic functions
+ Switch_DM_Func(padapter, DYNAMIC_ALL_FUNC_ENABLE, _TRUE);
+
+ //rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
+ }
+
+ }
+#ifdef CONFIG_80211N_HT
+ //set channel, bwmode
+ p = rtw_get_ie((pnetwork->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _HT_ADD_INFO_IE_, &ie_len, (pnetwork->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
+ if( p && ie_len)
+ {
+ pht_info = (struct HT_info_element *)(p+2);
+
+ if ((pregpriv->cbw40_enable) && (pht_info->infos[0] & BIT(2)))
+ {
+ //switch to the 40M Hz mode
+ //pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
+ cur_bwmode = HT_CHANNEL_WIDTH_40;
+ switch (pht_info->infos[0] & 0x3)
+ {
+ case 1:
+ //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
+ cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
+ break;
+
+ case 3:
+ //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
+ cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
+ break;
+
+ default:
+ //pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
+ cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
+ break;
+ }
+
+ }
+
+ }
+#endif //CONFIG_80211N_HT
+#ifdef CONFIG_DUALMAC_CONCURRENT
+ dc_set_ap_channel_bandwidth(padapter, cur_channel, cur_ch_offset, cur_bwmode);
+#else
+ //TODO: need to judge the phy parameters on concurrent mode for single phy
+ //set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
+#ifdef CONFIG_CONCURRENT_MODE
+ if(!check_buddy_fwstate(padapter, _FW_LINKED|_FW_UNDER_LINKING|_FW_UNDER_SURVEY))
+ {
+ set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
+ }
+ else if(check_buddy_fwstate(padapter, _FW_LINKED)==_TRUE)//only second adapter can enter AP Mode
+ {
+ _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
+ struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
+
+ //To sync cur_channel/cur_bwmode/cur_ch_offset with primary adapter
+ DBG_871X("primary iface is at linked state, sync cur_channel/cur_bwmode/cur_ch_offset\n");
+ DBG_871X("primary adapter, CH=%d, BW=%d, offset=%d\n", pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
+ DBG_871X("second adapter, CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
+
+ cur_channel = pbuddy_mlmeext->cur_channel;
+ if(cur_bwmode == HT_CHANNEL_WIDTH_40)
+ {
+ if(pht_info)
+ pht_info->infos[0] &= ~(BIT(0)|BIT(1));
+
+ if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40)
+ {
+ cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
+
+ //to update cur_ch_offset value in beacon
+ if(pht_info)
+ {
+ switch(cur_ch_offset)
+ {
+ case HAL_PRIME_CHNL_OFFSET_LOWER:
+ pht_info->infos[0] |= 0x1;
+ break;
+ case HAL_PRIME_CHNL_OFFSET_UPPER:
+ pht_info->infos[0] |= 0x3;
+ break;
+ case HAL_PRIME_CHNL_OFFSET_DONT_CARE:
+ default:
+ break;
+ }
+ }
+
+ }
+ else if(pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20)
+ {
+ cur_bwmode = HT_CHANNEL_WIDTH_20;
+ cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
+
+ if(cur_channel>0 && cur_channel<5)
+ {
+ if(pht_info)
+ pht_info->infos[0] |= 0x1;
+
+ cur_bwmode = HT_CHANNEL_WIDTH_40;
+ cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
+ }
+
+ if(cur_channel>7 && cur_channel<(14+1))
+ {
+ if(pht_info)
+ pht_info->infos[0] |= 0x3;
+
+ cur_bwmode = HT_CHANNEL_WIDTH_40;
+ cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
+ }
+
+ set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
+ }
+
+ }
+
+ // to update channel value in beacon
+ pnetwork->Configuration.DSConfig = cur_channel;
+ p = rtw_get_ie((pnetwork->IEs + sizeof(NDIS_802_11_FIXED_IEs)), _DSSET_IE_, &ie_len, (pnetwork->IELength - sizeof(NDIS_802_11_FIXED_IEs)));
+ if(p && ie_len>0)
+ *(p + 2) = cur_channel;
+
+ if(pht_info)
+ pht_info->primary_channel = cur_channel;
+ }
+#else
+ set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
+#endif //CONFIG_CONCURRENT_MODE
+
+ DBG_871X("CH=%d, BW=%d, offset=%d\n", cur_channel, cur_bwmode, cur_ch_offset);
+
+ //
+ pmlmeext->cur_channel = cur_channel;
+ pmlmeext->cur_bwmode = cur_bwmode;
+ pmlmeext->cur_ch_offset = cur_ch_offset;
+#endif //CONFIG_DUALMAC_CONCURRENT
+ pmlmeext->cur_wireless_mode = pmlmepriv->cur_network.network_type;
+
+ //update cur_wireless_mode
+ update_wireless_mode(padapter);
+
+ //udpate capability after cur_wireless_mode updated
+ update_capinfo(padapter, rtw_get_capability((WLAN_BSSID_EX *)pnetwork));
+
+ //let pnetwork_mlmeext == pnetwork_mlme.
+ _rtw_memcpy(pnetwork_mlmeext, pnetwork, pnetwork->Length);
+
+#ifdef CONFIG_P2P
+ _rtw_memcpy(pwdinfo->p2p_group_ssid, pnetwork->Ssid.Ssid, pnetwork->Ssid.SsidLength);
+ pwdinfo->p2p_group_ssid_len = pnetwork->Ssid.SsidLength;
+#endif //CONFIG_P2P
+
+ if(_TRUE == pmlmeext->bstart_bss)
+ {
+ update_beacon(padapter, _TIM_IE_, NULL, _FALSE);
+
+#ifndef CONFIG_INTERRUPT_BASED_TXBCN //other case will tx beacon when bcn interrupt coming in.
+#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+ //issue beacon frame
+ if(send_beacon(padapter)==_FAIL)
+ {
+ DBG_871X("issue_beacon, fail!\n");
+ }
+#endif
+#endif //!CONFIG_INTERRUPT_BASED_TXBCN
+
+ }
+
+
+ //update bc/mc sta_info
+ update_bmc_sta(padapter);
+
+ //pmlmeext->bstart_bss = _TRUE;
+
+}
+
+int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len)
+{
+ int ret=_SUCCESS;
+ u8 *p;
+ u8 *pHT_caps_ie=NULL;
+ u8 *pHT_info_ie=NULL;
+ struct sta_info *psta = NULL;
+ u16 cap, ht_cap=_FALSE;
+ uint ie_len = 0;
+ int group_cipher, pairwise_cipher;
+ u8 channel, network_type, supportRate[NDIS_802_11_LENGTH_RATES_EX];
+ int supportRateNum = 0;
+ u8 OUI1[] = {0x00, 0x50, 0xf2,0x01};
+ u8 wps_oui[4]={0x0,0x50,0xf2,0x04};
+ u8 WMM_PARA_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01};
+ struct registry_priv *pregistrypriv = &padapter->registrypriv;
+ struct security_priv *psecuritypriv = &padapter->securitypriv;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ WLAN_BSSID_EX *pbss_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ u8 *ie = pbss_network->IEs;
+
+
+ /* SSID */
+ /* Supported rates */
+ /* DS Params */
+ /* WLAN_EID_COUNTRY */
+ /* ERP Information element */
+ /* Extended supported rates */
+ /* WPA/WPA2 */
+ /* Wi-Fi Wireless Multimedia Extensions */
+ /* ht_capab, ht_oper */
+ /* WPS IE */
+
+ DBG_871X("%s, len=%d\n", __FUNCTION__, len);
+
+ if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
+ return _FAIL;
+
+
+ if(len>MAX_IE_SZ)
+ return _FAIL;
+
+ pbss_network->IELength = len;
+
+ _rtw_memset(ie, 0, MAX_IE_SZ);
+
+ _rtw_memcpy(ie, pbuf, pbss_network->IELength);
+
+
+ if(pbss_network->InfrastructureMode!=Ndis802_11APMode)
+ return _FAIL;
+
+ pbss_network->Rssi = 0;
+
+ _rtw_memcpy(pbss_network->MacAddress, myid(&(padapter->eeprompriv)), ETH_ALEN);
+
+ //beacon interval
+ p = rtw_get_beacon_interval_from_ie(ie);//ie + 8; // 8: TimeStamp, 2: Beacon Interval 2:Capability
+ //pbss_network->Configuration.BeaconPeriod = le16_to_cpu(*(unsigned short*)p);
+ pbss_network->Configuration.BeaconPeriod = RTW_GET_LE16(p);
+
+ //capability
+ //cap = *(unsigned short *)rtw_get_capability_from_ie(ie);
+ //cap = le16_to_cpu(cap);
+ cap = RTW_GET_LE16(ie);
+
+ //SSID
+ p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SSID_IE_, &ie_len, (pbss_network->IELength -_BEACON_IE_OFFSET_));
+ if(p && ie_len>0)
+ {
+ _rtw_memset(&pbss_network->Ssid, 0, sizeof(NDIS_802_11_SSID));
+ _rtw_memcpy(pbss_network->Ssid.Ssid, (p + 2), ie_len);
+ pbss_network->Ssid.SsidLength = ie_len;
+ }
+
+ //chnnel
+ channel = 0;
+ pbss_network->Configuration.Length = 0;
+ p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _DSSET_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
+ if(p && ie_len>0)
+ channel = *(p + 2);
+
+ pbss_network->Configuration.DSConfig = channel;
+
+
+ _rtw_memset(supportRate, 0, NDIS_802_11_LENGTH_RATES_EX);
+ // get supported rates
+ p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
+ if (p != NULL)
+ {
+ _rtw_memcpy(supportRate, p+2, ie_len);
+ supportRateNum = ie_len;
+ }
+
+ //get ext_supported rates
+ p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _EXT_SUPPORTEDRATES_IE_, &ie_len, pbss_network->IELength - _BEACON_IE_OFFSET_);
+ if (p != NULL)
+ {
+ _rtw_memcpy(supportRate+supportRateNum, p+2, ie_len);
+ supportRateNum += ie_len;
+
+ }
+
+ network_type = rtw_check_network_type(supportRate, supportRateNum, channel);
+
+ rtw_set_supported_rate(pbss_network->SupportedRates, network_type);
+
+
+ //parsing ERP_IE
+ p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
+ if(p && ie_len>0)
+ {
+ ERP_IE_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)p);
+ }
+
+ //update privacy/security
+ if (cap & BIT(4))
+ pbss_network->Privacy = 1;
+ else
+ pbss_network->Privacy = 0;
+
+ psecuritypriv->wpa_psk = 0;
+
+ //wpa2
+ group_cipher = 0; pairwise_cipher = 0;
+ psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
+ psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
+ p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _RSN_IE_2_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
+ if(p && ie_len>0)
+ {
+ if(rtw_parse_wpa2_ie(p, ie_len+2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS)
+ {
+ psecuritypriv->dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
+
+ psecuritypriv->dot8021xalg = 1;//psk, todo:802.1x
+ psecuritypriv->wpa_psk |= BIT(1);
+
+ psecuritypriv->wpa2_group_cipher = group_cipher;
+ psecuritypriv->wpa2_pairwise_cipher = pairwise_cipher;
+#if 0
+ switch(group_cipher)
+ {
+ case WPA_CIPHER_NONE:
+ psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
+ break;
+ case WPA_CIPHER_WEP40:
+ psecuritypriv->wpa2_group_cipher = _WEP40_;
+ break;
+ case WPA_CIPHER_TKIP:
+ psecuritypriv->wpa2_group_cipher = _TKIP_;
+ break;
+ case WPA_CIPHER_CCMP:
+ psecuritypriv->wpa2_group_cipher = _AES_;
+ break;
+ case WPA_CIPHER_WEP104:
+ psecuritypriv->wpa2_group_cipher = _WEP104_;
+ break;
+ }
+
+ switch(pairwise_cipher)
+ {
+ case WPA_CIPHER_NONE:
+ psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
+ break;
+ case WPA_CIPHER_WEP40:
+ psecuritypriv->wpa2_pairwise_cipher = _WEP40_;
+ break;
+ case WPA_CIPHER_TKIP:
+ psecuritypriv->wpa2_pairwise_cipher = _TKIP_;
+ break;
+ case WPA_CIPHER_CCMP:
+ psecuritypriv->wpa2_pairwise_cipher = _AES_;
+ break;
+ case WPA_CIPHER_WEP104:
+ psecuritypriv->wpa2_pairwise_cipher = _WEP104_;
+ break;
+ }
+#endif
+ }
+
+ }
+
+ //wpa
+ ie_len = 0;
+ group_cipher = 0; pairwise_cipher = 0;
+ psecuritypriv->wpa_group_cipher = _NO_PRIVACY_;
+ psecuritypriv->wpa_pairwise_cipher = _NO_PRIVACY_;
+ for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2))
+ {
+ p = rtw_get_ie(p, _SSN_IE_1_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
+ if ((p) && (_rtw_memcmp(p+2, OUI1, 4)))
+ {
+ if(rtw_parse_wpa_ie(p, ie_len+2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS)
+ {
+ psecuritypriv->dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
+
+ psecuritypriv->dot8021xalg = 1;//psk, todo:802.1x
+
+ psecuritypriv->wpa_psk |= BIT(0);
+
+ psecuritypriv->wpa_group_cipher = group_cipher;
+ psecuritypriv->wpa_pairwise_cipher = pairwise_cipher;
+
+#if 0
+ switch(group_cipher)
+ {
+ case WPA_CIPHER_NONE:
+ psecuritypriv->wpa_group_cipher = _NO_PRIVACY_;
+ break;
+ case WPA_CIPHER_WEP40:
+ psecuritypriv->wpa_group_cipher = _WEP40_;
+ break;
+ case WPA_CIPHER_TKIP:
+ psecuritypriv->wpa_group_cipher = _TKIP_;
+ break;
+ case WPA_CIPHER_CCMP:
+ psecuritypriv->wpa_group_cipher = _AES_;
+ break;
+ case WPA_CIPHER_WEP104:
+ psecuritypriv->wpa_group_cipher = _WEP104_;
+ break;
+ }
+
+ switch(pairwise_cipher)
+ {
+ case WPA_CIPHER_NONE:
+ psecuritypriv->wpa_pairwise_cipher = _NO_PRIVACY_;
+ break;
+ case WPA_CIPHER_WEP40:
+ psecuritypriv->wpa_pairwise_cipher = _WEP40_;
+ break;
+ case WPA_CIPHER_TKIP:
+ psecuritypriv->wpa_pairwise_cipher = _TKIP_;
+ break;
+ case WPA_CIPHER_CCMP:
+ psecuritypriv->wpa_pairwise_cipher = _AES_;
+ break;
+ case WPA_CIPHER_WEP104:
+ psecuritypriv->wpa_pairwise_cipher = _WEP104_;
+ break;
+ }
+#endif
+ }
+
+ break;
+
+ }
+
+ if ((p == NULL) || (ie_len == 0))
+ {
+ break;
+ }
+
+ }
+
+ //wmm
+ ie_len = 0;
+ pmlmepriv->qospriv.qos_option = 0;
+ if(pregistrypriv->wmm_enable)
+ {
+ for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2))
+ {
+ p = rtw_get_ie(p, _VENDOR_SPECIFIC_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
+ if((p) && _rtw_memcmp(p+2, WMM_PARA_IE, 6))
+ {
+ pmlmepriv->qospriv.qos_option = 1;
+
+ *(p+8) |= BIT(7);//QoS Info, support U-APSD
+
+ /* disable all ACM bits since the WMM admission control is not supported */
+ *(p + 10) &= ~BIT(4); /* BE */
+ *(p + 14) &= ~BIT(4); /* BK */
+ *(p + 18) &= ~BIT(4); /* VI */
+ *(p + 22) &= ~BIT(4); /* VO */
+
+ break;
+ }
+
+ if ((p == NULL) || (ie_len == 0))
+ {
+ break;
+ }
+ }
+ }
+#ifdef CONFIG_80211N_HT
+ //parsing HT_CAP_IE
+ p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_CAPABILITY_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
+ if(p && ie_len>0)
+ {
+ u8 rf_type;
+
+ struct rtw_ieee80211_ht_cap *pht_cap = (struct rtw_ieee80211_ht_cap *)(p+2);
+
+ pHT_caps_ie=p;
+
+
+ ht_cap = _TRUE;
+ network_type |= WIRELESS_11_24N;
+
+
+ rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
+
+ if((psecuritypriv->wpa_pairwise_cipher & WPA_CIPHER_CCMP) ||
+ (psecuritypriv->wpa2_pairwise_cipher & WPA_CIPHER_CCMP))
+ {
+ pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&(0x07<<2));
+ }
+ else
+ {
+ pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&0x00);
+ }
+
+ pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_FACTOR & 0x03); //set Max Rx AMPDU size to 64K
+
+ if(rf_type == RF_1T1R)
+ {
+ pht_cap->supp_mcs_set[0] = 0xff;
+ pht_cap->supp_mcs_set[1] = 0x0;
+ }
+
+ _rtw_memcpy(&pmlmepriv->htpriv.ht_cap, p+2, ie_len);
+
+ }
+
+ //parsing HT_INFO_IE
+ p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_ADD_INFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
+ if(p && ie_len>0)
+ {
+ pHT_info_ie=p;
+ }
+#endif //CONFIG_80211N_HT
+ switch(network_type)
+ {
+ case WIRELESS_11B:
+ pbss_network->NetworkTypeInUse = Ndis802_11DS;
+ break;
+ case WIRELESS_11G:
+ case WIRELESS_11BG:
+ case WIRELESS_11G_24N:
+ case WIRELESS_11BG_24N:
+ pbss_network->NetworkTypeInUse = Ndis802_11OFDM24;
+ break;
+ case WIRELESS_11A:
+ pbss_network->NetworkTypeInUse = Ndis802_11OFDM5;
+ break;
+ default :
+ pbss_network->NetworkTypeInUse = Ndis802_11OFDM24;
+ break;
+ }
+
+ pmlmepriv->cur_network.network_type = network_type;
+
+#ifdef CONFIG_80211N_HT
+ pmlmepriv->htpriv.ht_option = _FALSE;
+
+ if( (psecuritypriv->wpa2_pairwise_cipher&WPA_CIPHER_TKIP) ||
+ (psecuritypriv->wpa_pairwise_cipher&WPA_CIPHER_TKIP))
+ {
+ //todo:
+ //ht_cap = _FALSE;
+ }
+
+ //ht_cap
+ if(pregistrypriv->ht_enable && ht_cap==_TRUE)
+ {
+ pmlmepriv->htpriv.ht_option = _TRUE;
+ pmlmepriv->qospriv.qos_option = 1;
+
+ if(pregistrypriv->ampdu_enable==1)
+ {
+ pmlmepriv->htpriv.ampdu_enable = _TRUE;
+ }
+
+ HT_caps_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)pHT_caps_ie);
+
+ HT_info_handler(padapter, (PNDIS_802_11_VARIABLE_IEs)pHT_info_ie);
+ }
+#endif
+
+
+ pbss_network->Length = get_WLAN_BSSID_EX_sz((WLAN_BSSID_EX *)pbss_network);
+
+ //issue beacon to start bss network
+ start_bss_network(padapter, (u8*)pbss_network);
+
+
+ //alloc sta_info for ap itself
+ psta = rtw_get_stainfo(&padapter->stapriv, pbss_network->MacAddress);
+ if(!psta)
+ {
+ psta = rtw_alloc_stainfo(&padapter->stapriv, pbss_network->MacAddress);
+ if (psta == NULL)
+ {
+ return _FAIL;
+ }
+ }
+ psta->state |= WIFI_AP_STATE; //Aries, add,fix bug of flush_cam_entry at STOP AP mode , 0724
+ rtw_indicate_connect( padapter);
+
+ pmlmepriv->cur_network.join_res = _TRUE;//for check if already set beacon
+
+ //update bc/mc sta_info
+ //update_bmc_sta(padapter);
+
+ return ret;
+
+}
+
+void rtw_set_macaddr_acl(_adapter *padapter, int mode)
+{
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
+
+ DBG_871X("%s, mode=%d\n", __func__, mode);
+
+ pacl_list->mode = mode;
+}
+
+int rtw_acl_add_sta(_adapter *padapter, u8 *addr)
+{
+ _irqL irqL;
+ _list *plist, *phead;
+ u8 added = _FALSE;
+ int i, ret=0;
+ struct rtw_wlan_acl_node *paclnode;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
+ _queue *pacl_node_q =&pacl_list->acl_node_q;
+
+ DBG_871X("%s(acl_num=%d)=" MAC_FMT "\n", __func__, pacl_list->num, MAC_ARG(addr));
+
+ if((NUM_ACL-1) < pacl_list->num)
+ return (-1);
+
+
+ _enter_critical_bh(&(pacl_node_q->lock), &irqL);
+
+ phead = get_list_head(pacl_node_q);
+ plist = get_next(phead);
+
+ while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
+ {
+ paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
+ plist = get_next(plist);
+
+ if(_rtw_memcmp(paclnode->addr, addr, ETH_ALEN))
+ {
+ if(paclnode->valid == _TRUE)
+ {
+ added = _TRUE;
+ DBG_871X("%s, sta has been added\n", __func__);
+ break;
+ }
+ }
+ }
+
+ _exit_critical_bh(&(pacl_node_q->lock), &irqL);
+
+
+ if(added == _TRUE)
+ return ret;
+
+
+ _enter_critical_bh(&(pacl_node_q->lock), &irqL);
+
+ for(i=0; i< NUM_ACL; i++)
+ {
+ paclnode = &pacl_list->aclnode[i];
+
+ if(paclnode->valid == _FALSE)
+ {
+ _rtw_init_listhead(&paclnode->list);
+
+ _rtw_memcpy(paclnode->addr, addr, ETH_ALEN);
+
+ paclnode->valid = _TRUE;
+
+ rtw_list_insert_tail(&paclnode->list, get_list_head(pacl_node_q));
+
+ pacl_list->num++;
+
+ break;
+ }
+ }
+
+ DBG_871X("%s, acl_num=%d\n", __func__, pacl_list->num);
+
+ _exit_critical_bh(&(pacl_node_q->lock), &irqL);
+
+ return ret;
+}
+
+int rtw_acl_remove_sta(_adapter *padapter, u8 *addr)
+{
+ _irqL irqL;
+ _list *plist, *phead;
+ int i, ret=0;
+ struct rtw_wlan_acl_node *paclnode;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
+ _queue *pacl_node_q =&pacl_list->acl_node_q;
+
+ DBG_871X("%s(acl_num=%d)=" MAC_FMT "\n", __func__, pacl_list->num, MAC_ARG(addr));
+
+ _enter_critical_bh(&(pacl_node_q->lock), &irqL);
+
+ phead = get_list_head(pacl_node_q);
+ plist = get_next(phead);
+
+ while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
+ {
+ paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
+ plist = get_next(plist);
+
+ if(_rtw_memcmp(paclnode->addr, addr, ETH_ALEN))
+ {
+ if(paclnode->valid == _TRUE)
+ {
+ paclnode->valid = _FALSE;
+
+ rtw_list_delete(&paclnode->list);
+
+ pacl_list->num--;
+ }
+ }
+ }
+
+ _exit_critical_bh(&(pacl_node_q->lock), &irqL);
+
+ DBG_871X("%s, acl_num=%d\n", __func__, pacl_list->num);
+
+ return ret;
+
+}
+
+#ifdef CONFIG_NATIVEAP_MLME
+
+static void update_bcn_fixed_ie(_adapter *padapter)
+{
+ DBG_871X("%s\n", __FUNCTION__);
+
+}
+
+static void update_bcn_erpinfo_ie(_adapter *padapter)
+{
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ WLAN_BSSID_EX *pnetwork = &(pmlmeinfo->network);
+ unsigned char *p, *ie = pnetwork->IEs;
+ u32 len = 0;
+
+ DBG_871X("%s, ERP_enable=%d\n", __FUNCTION__, pmlmeinfo->ERP_enable);
+
+ if(!pmlmeinfo->ERP_enable)
+ return;
+
+ //parsing ERP_IE
+ p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &len, (pnetwork->IELength - _BEACON_IE_OFFSET_));
+ if(p && len>0)
+ {
+ PNDIS_802_11_VARIABLE_IEs pIE = (PNDIS_802_11_VARIABLE_IEs)p;
+
+ if (pmlmepriv->num_sta_non_erp == 1)
+ pIE->data[0] |= RTW_ERP_INFO_NON_ERP_PRESENT|RTW_ERP_INFO_USE_PROTECTION;
+ else
+ pIE->data[0] &= ~(RTW_ERP_INFO_NON_ERP_PRESENT|RTW_ERP_INFO_USE_PROTECTION);
+
+ if(pmlmepriv->num_sta_no_short_preamble > 0)
+ pIE->data[0] |= RTW_ERP_INFO_BARKER_PREAMBLE_MODE;
+ else
+ pIE->data[0] &= ~(RTW_ERP_INFO_BARKER_PREAMBLE_MODE);
+
+ ERP_IE_handler(padapter, pIE);
+ }
+
+}
+
+static void update_bcn_htcap_ie(_adapter *padapter)
+{
+ DBG_871X("%s\n", __FUNCTION__);
+
+}
+
+static void update_bcn_htinfo_ie(_adapter *padapter)
+{
+ DBG_871X("%s\n", __FUNCTION__);
+
+}
+
+static void update_bcn_rsn_ie(_adapter *padapter)
+{
+ DBG_871X("%s\n", __FUNCTION__);
+
+}
+
+static void update_bcn_wpa_ie(_adapter *padapter)
+{
+ DBG_871X("%s\n", __FUNCTION__);
+
+}
+
+static void update_bcn_wmm_ie(_adapter *padapter)
+{
+ DBG_871X("%s\n", __FUNCTION__);
+
+}
+
+static void update_bcn_wps_ie(_adapter *padapter)
+{
+ u8 *pwps_ie=NULL, *pwps_ie_src, *premainder_ie, *pbackup_remainder_ie=NULL;
+ uint wps_ielen=0, wps_offset, remainder_ielen;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ WLAN_BSSID_EX *pnetwork = &(pmlmeinfo->network);
+ unsigned char *ie = pnetwork->IEs;
+ u32 ielen = pnetwork->IELength;
+
+
+ DBG_871X("%s\n", __FUNCTION__);
+
+ pwps_ie = rtw_get_wps_ie(ie+_FIXED_IE_LENGTH_, ielen-_FIXED_IE_LENGTH_, NULL, &wps_ielen);
+
+ if(pwps_ie==NULL || wps_ielen==0)
+ return;
+
+ wps_offset = (uint)(pwps_ie-ie);
+
+ premainder_ie = pwps_ie + wps_ielen;
+
+ remainder_ielen = ielen - wps_offset - wps_ielen;
+
+ if(remainder_ielen>0)
+ {
+ pbackup_remainder_ie = rtw_malloc(remainder_ielen);
+ if(pbackup_remainder_ie)
+ _rtw_memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
+ }
+
+
+ pwps_ie_src = pmlmepriv->wps_beacon_ie;
+ if(pwps_ie_src == NULL)
+ return;
+
+
+ wps_ielen = (uint)pwps_ie_src[1];//to get ie data len
+ if((wps_offset+wps_ielen+2+remainder_ielen)<=MAX_IE_SZ)
+ {
+ _rtw_memcpy(pwps_ie, pwps_ie_src, wps_ielen+2);
+ pwps_ie += (wps_ielen+2);
+
+ if(pbackup_remainder_ie)
+ _rtw_memcpy(pwps_ie, pbackup_remainder_ie, remainder_ielen);
+
+ //update IELength
+ pnetwork->IELength = wps_offset + (wps_ielen+2) + remainder_ielen;
+ }
+
+ if(pbackup_remainder_ie)
+ rtw_mfree(pbackup_remainder_ie, remainder_ielen);
+
+}
+
+static void update_bcn_p2p_ie(_adapter *padapter)
+{
+
+}
+
+static void update_bcn_vendor_spec_ie(_adapter *padapter, u8*oui)
+{
+ DBG_871X("%s\n", __FUNCTION__);
+
+ if(_rtw_memcmp(RTW_WPA_OUI, oui, 4))
+ {
+ update_bcn_wpa_ie(padapter);
+ }
+ else if(_rtw_memcmp(WMM_OUI, oui, 4))
+ {
+ update_bcn_wmm_ie(padapter);
+ }
+ else if(_rtw_memcmp(WPS_OUI, oui, 4))
+ {
+ update_bcn_wps_ie(padapter);
+ }
+ else if(_rtw_memcmp(P2P_OUI, oui, 4))
+ {
+ update_bcn_p2p_ie(padapter);
+ }
+ else
+ {
+ DBG_871X("unknown OUI type!\n");
+ }
+
+
+}
+
+void update_beacon(_adapter *padapter, u8 ie_id, u8 *oui, u8 tx)
+{
+ _irqL irqL;
+ struct mlme_priv *pmlmepriv;
+ struct mlme_ext_priv *pmlmeext;
+ //struct mlme_ext_info *pmlmeinfo;
+
+ //DBG_871X("%s\n", __FUNCTION__);
+
+ if(!padapter)
+ return;
+
+ pmlmepriv = &(padapter->mlmepriv);
+ pmlmeext = &(padapter->mlmeextpriv);
+ //pmlmeinfo = &(pmlmeext->mlmext_info);
+
+ if(_FALSE == pmlmeext->bstart_bss)
+ return;
+
+ _enter_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
+
+ switch(ie_id)
+ {
+ case 0xFF:
+
+ update_bcn_fixed_ie(padapter);//8: TimeStamp, 2: Beacon Interval 2:Capability
+
+ break;
+
+ case _TIM_IE_:
+
+ update_BCNTIM(padapter);
+
+ break;
+
+ case _ERPINFO_IE_:
+
+ update_bcn_erpinfo_ie(padapter);
+
+ break;
+
+ case _HT_CAPABILITY_IE_:
+
+ update_bcn_htcap_ie(padapter);
+
+ break;
+
+ case _RSN_IE_2_:
+
+ update_bcn_rsn_ie(padapter);
+
+ break;
+
+ case _HT_ADD_INFO_IE_:
+
+ update_bcn_htinfo_ie(padapter);
+
+ break;
+
+ case _VENDOR_SPECIFIC_IE_:
+
+ update_bcn_vendor_spec_ie(padapter, oui);
+
+ break;
+
+ default:
+ break;
+ }
+
+ pmlmepriv->update_bcn = _TRUE;
+
+ _exit_critical_bh(&pmlmepriv->bcn_update_lock, &irqL);
+
+#ifndef CONFIG_INTERRUPT_BASED_TXBCN
+#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+ if(tx)
+ {
+ //send_beacon(padapter);//send_beacon must execute on TSR level
+ set_tx_beacon_cmd(padapter);
+ }
+#else
+ {
+ //PCI will issue beacon when BCN interrupt occurs.
+ }
+#endif
+#endif //!CONFIG_INTERRUPT_BASED_TXBCN
+
+}
+
+#ifdef CONFIG_80211N_HT
+
+/*
+op_mode
+Set to 0 (HT pure) under the followign conditions
+ - all STAs in the BSS are 20/40 MHz HT in 20/40 MHz BSS or
+ - all STAs in the BSS are 20 MHz HT in 20 MHz BSS
+Set to 1 (HT non-member protection) if there may be non-HT STAs
+ in both the primary and the secondary channel
+Set to 2 if only HT STAs are associated in BSS,
+ however and at least one 20 MHz HT STA is associated
+Set to 3 (HT mixed mode) when one or more non-HT STAs are associated
+ (currently non-GF HT station is considered as non-HT STA also)
+*/
+static int rtw_ht_operation_update(_adapter *padapter)
+{
+ u16 cur_op_mode, new_op_mode;
+ int op_mode_changes = 0;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
+
+ if(pmlmepriv->htpriv.ht_option == _TRUE)
+ return 0;
+
+ //if (!iface->conf->ieee80211n || iface->conf->ht_op_mode_fixed)
+ // return 0;
+
+ DBG_871X("%s current operation mode=0x%X\n",
+ __FUNCTION__, pmlmepriv->ht_op_mode);
+
+ if (!(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT)
+ && pmlmepriv->num_sta_ht_no_gf) {
+ pmlmepriv->ht_op_mode |=
+ HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT;
+ op_mode_changes++;
+ } else if ((pmlmepriv->ht_op_mode &
+ HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT) &&
+ pmlmepriv->num_sta_ht_no_gf == 0) {
+ pmlmepriv->ht_op_mode &=
+ ~HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT;
+ op_mode_changes++;
+ }
+
+ if (!(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT) &&
+ (pmlmepriv->num_sta_no_ht || pmlmepriv->olbc_ht)) {
+ pmlmepriv->ht_op_mode |= HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT;
+ op_mode_changes++;
+ } else if ((pmlmepriv->ht_op_mode &
+ HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT) &&
+ (pmlmepriv->num_sta_no_ht == 0 && !pmlmepriv->olbc_ht)) {
+ pmlmepriv->ht_op_mode &=
+ ~HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT;
+ op_mode_changes++;
+ }
+
+ /* Note: currently we switch to the MIXED op mode if HT non-greenfield
+ * station is associated. Probably it's a theoretical case, since
+ * it looks like all known HT STAs support greenfield.
+ */
+ new_op_mode = 0;
+ if (pmlmepriv->num_sta_no_ht ||
+ (pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT))
+ new_op_mode = OP_MODE_MIXED;
+ else if ((phtpriv_ap->ht_cap.cap_info & IEEE80211_HT_CAP_SUP_WIDTH)
+ && pmlmepriv->num_sta_ht_20mhz)
+ new_op_mode = OP_MODE_20MHZ_HT_STA_ASSOCED;
+ else if (pmlmepriv->olbc_ht)
+ new_op_mode = OP_MODE_MAY_BE_LEGACY_STAS;
+ else
+ new_op_mode = OP_MODE_PURE;
+
+ cur_op_mode = pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_OP_MODE_MASK;
+ if (cur_op_mode != new_op_mode) {
+ pmlmepriv->ht_op_mode &= ~HT_INFO_OPERATION_MODE_OP_MODE_MASK;
+ pmlmepriv->ht_op_mode |= new_op_mode;
+ op_mode_changes++;
+ }
+
+ DBG_871X("%s new operation mode=0x%X changes=%d\n",
+ __FUNCTION__, pmlmepriv->ht_op_mode, op_mode_changes);
+
+ return op_mode_changes;
+
+}
+
+#endif /* CONFIG_80211N_HT */
+
+void associated_clients_update(_adapter *padapter, u8 updated)
+{
+ //update associcated stations cap.
+ if(updated == _TRUE)
+ {
+ _irqL irqL;
+ _list *phead, *plist;
+ struct sta_info *psta=NULL;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+
+ _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+
+ phead = &pstapriv->asoc_list;
+ plist = get_next(phead);
+
+ //check asoc_queue
+ while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
+ {
+ psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
+
+ plist = get_next(plist);
+
+ VCS_update(padapter, psta);
+ }
+
+ _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+
+ }
+
+}
+
+/* called > TSR LEVEL for USB or SDIO Interface*/
+void bss_cap_update_on_sta_join(_adapter *padapter, struct sta_info *psta)
+{
+ u8 beacon_updated = _FALSE;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+
+
+#if 0
+ if (!(psta->capability & WLAN_CAPABILITY_SHORT_PREAMBLE) &&
+ !psta->no_short_preamble_set) {
+ psta->no_short_preamble_set = 1;
+ pmlmepriv->num_sta_no_short_preamble++;
+ if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
+ (pmlmepriv->num_sta_no_short_preamble == 1))
+ ieee802_11_set_beacons(hapd->iface);
+ }
+#endif
+
+
+ if(!(psta->flags & WLAN_STA_SHORT_PREAMBLE))
+ {
+ if(!psta->no_short_preamble_set)
+ {
+ psta->no_short_preamble_set = 1;
+
+ pmlmepriv->num_sta_no_short_preamble++;
+
+ if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
+ (pmlmepriv->num_sta_no_short_preamble == 1))
+ {
+ beacon_updated = _TRUE;
+ update_beacon(padapter, 0xFF, NULL, _TRUE);
+ }
+
+ }
+ }
+ else
+ {
+ if(psta->no_short_preamble_set)
+ {
+ psta->no_short_preamble_set = 0;
+
+ pmlmepriv->num_sta_no_short_preamble--;
+
+ if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
+ (pmlmepriv->num_sta_no_short_preamble == 0))
+ {
+ beacon_updated = _TRUE;
+ update_beacon(padapter, 0xFF, NULL, _TRUE);
+ }
+
+ }
+ }
+
+#if 0
+ if (psta->flags & WLAN_STA_NONERP && !psta->nonerp_set) {
+ psta->nonerp_set = 1;
+ pmlmepriv->num_sta_non_erp++;
+ if (pmlmepriv->num_sta_non_erp == 1)
+ ieee802_11_set_beacons(hapd->iface);
+ }
+#endif
+
+ if(psta->flags & WLAN_STA_NONERP)
+ {
+ if(!psta->nonerp_set)
+ {
+ psta->nonerp_set = 1;
+
+ pmlmepriv->num_sta_non_erp++;
+
+ if (pmlmepriv->num_sta_non_erp == 1)
+ {
+ beacon_updated = _TRUE;
+ update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
+ }
+ }
+
+ }
+ else
+ {
+ if(psta->nonerp_set)
+ {
+ psta->nonerp_set = 0;
+
+ pmlmepriv->num_sta_non_erp--;
+
+ if (pmlmepriv->num_sta_non_erp == 0)
+ {
+ beacon_updated = _TRUE;
+ update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
+ }
+ }
+
+ }
+
+
+#if 0
+ if (!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT) &&
+ !psta->no_short_slot_time_set) {
+ psta->no_short_slot_time_set = 1;
+ pmlmepriv->num_sta_no_short_slot_time++;
+ if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
+ (pmlmepriv->num_sta_no_short_slot_time == 1))
+ ieee802_11_set_beacons(hapd->iface);
+ }
+#endif
+
+ if(!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT))
+ {
+ if(!psta->no_short_slot_time_set)
+ {
+ psta->no_short_slot_time_set = 1;
+
+ pmlmepriv->num_sta_no_short_slot_time++;
+
+ if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
+ (pmlmepriv->num_sta_no_short_slot_time == 1))
+ {
+ beacon_updated = _TRUE;
+ update_beacon(padapter, 0xFF, NULL, _TRUE);
+ }
+
+ }
+ }
+ else
+ {
+ if(psta->no_short_slot_time_set)
+ {
+ psta->no_short_slot_time_set = 0;
+
+ pmlmepriv->num_sta_no_short_slot_time--;
+
+ if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
+ (pmlmepriv->num_sta_no_short_slot_time == 0))
+ {
+ beacon_updated = _TRUE;
+ update_beacon(padapter, 0xFF, NULL, _TRUE);
+ }
+ }
+ }
+
+#ifdef CONFIG_80211N_HT
+
+ if (psta->flags & WLAN_STA_HT)
+ {
+ u16 ht_capab = le16_to_cpu(psta->htpriv.ht_cap.cap_info);
+
+ DBG_871X("HT: STA " MAC_FMT " HT Capabilities "
+ "Info: 0x%04x\n", MAC_ARG(psta->hwaddr), ht_capab);
+
+ if (psta->no_ht_set) {
+ psta->no_ht_set = 0;
+ pmlmepriv->num_sta_no_ht--;
+ }
+
+ if ((ht_capab & IEEE80211_HT_CAP_GRN_FLD) == 0) {
+ if (!psta->no_ht_gf_set) {
+ psta->no_ht_gf_set = 1;
+ pmlmepriv->num_sta_ht_no_gf++;
+ }
+ DBG_871X("%s STA " MAC_FMT " - no "
+ "greenfield, num of non-gf stations %d\n",
+ __FUNCTION__, MAC_ARG(psta->hwaddr),
+ pmlmepriv->num_sta_ht_no_gf);
+ }
+
+ if ((ht_capab & IEEE80211_HT_CAP_SUP_WIDTH) == 0) {
+ if (!psta->ht_20mhz_set) {
+ psta->ht_20mhz_set = 1;
+ pmlmepriv->num_sta_ht_20mhz++;
+ }
+ DBG_871X("%s STA " MAC_FMT " - 20 MHz HT, "
+ "num of 20MHz HT STAs %d\n",
+ __FUNCTION__, MAC_ARG(psta->hwaddr),
+ pmlmepriv->num_sta_ht_20mhz);
+ }
+
+ }
+ else
+ {
+ if (!psta->no_ht_set) {
+ psta->no_ht_set = 1;
+ pmlmepriv->num_sta_no_ht++;
+ }
+ if(pmlmepriv->htpriv.ht_option == _TRUE) {
+ DBG_871X("%s STA " MAC_FMT
+ " - no HT, num of non-HT stations %d\n",
+ __FUNCTION__, MAC_ARG(psta->hwaddr),
+ pmlmepriv->num_sta_no_ht);
+ }
+ }
+
+ if (rtw_ht_operation_update(padapter) > 0)
+ {
+ update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, _FALSE);
+ update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, _TRUE);
+ }
+
+#endif /* CONFIG_80211N_HT */
+
+ //update associcated stations cap.
+ associated_clients_update(padapter, beacon_updated);
+
+ DBG_871X("%s, updated=%d\n", __func__, beacon_updated);
+
+}
+
+u8 bss_cap_update_on_sta_leave(_adapter *padapter, struct sta_info *psta)
+{
+ u8 beacon_updated = _FALSE;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+
+ if(!psta)
+ return beacon_updated;
+
+ if (psta->no_short_preamble_set) {
+ psta->no_short_preamble_set = 0;
+ pmlmepriv->num_sta_no_short_preamble--;
+ if (pmlmeext->cur_wireless_mode > WIRELESS_11B
+ && pmlmepriv->num_sta_no_short_preamble == 0)
+ {
+ beacon_updated = _TRUE;
+ update_beacon(padapter, 0xFF, NULL, _TRUE);
+ }
+ }
+
+ if (psta->nonerp_set) {
+ psta->nonerp_set = 0;
+ pmlmepriv->num_sta_non_erp--;
+ if (pmlmepriv->num_sta_non_erp == 0)
+ {
+ beacon_updated = _TRUE;
+ update_beacon(padapter, _ERPINFO_IE_, NULL, _TRUE);
+ }
+ }
+
+ if (psta->no_short_slot_time_set) {
+ psta->no_short_slot_time_set = 0;
+ pmlmepriv->num_sta_no_short_slot_time--;
+ if (pmlmeext->cur_wireless_mode > WIRELESS_11B
+ && pmlmepriv->num_sta_no_short_slot_time == 0)
+ {
+ beacon_updated = _TRUE;
+ update_beacon(padapter, 0xFF, NULL, _TRUE);
+ }
+ }
+
+#ifdef CONFIG_80211N_HT
+
+ if (psta->no_ht_gf_set) {
+ psta->no_ht_gf_set = 0;
+ pmlmepriv->num_sta_ht_no_gf--;
+ }
+
+ if (psta->no_ht_set) {
+ psta->no_ht_set = 0;
+ pmlmepriv->num_sta_no_ht--;
+ }
+
+ if (psta->ht_20mhz_set) {
+ psta->ht_20mhz_set = 0;
+ pmlmepriv->num_sta_ht_20mhz--;
+ }
+
+ if (rtw_ht_operation_update(padapter) > 0)
+ {
+ update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, _FALSE);
+ update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, _TRUE);
+ }
+
+#endif /* CONFIG_80211N_HT */
+
+ //update associcated stations cap.
+ //associated_clients_update(padapter, beacon_updated); //move it to avoid deadlock
+
+ DBG_871X("%s, updated=%d\n", __func__, beacon_updated);
+
+ return beacon_updated;
+
+}
+
+u8 ap_free_sta(_adapter *padapter, struct sta_info *psta, bool active, u16 reason)
+{
+ _irqL irqL;
+ u8 beacon_updated = _FALSE;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct sta_priv *pstapriv = &padapter->stapriv;
+
+ if(!psta)
+ return beacon_updated;
+
+ if (active == _TRUE)
+ {
+#ifdef CONFIG_80211N_HT
+ //tear down Rx AMPDU
+ send_delba(padapter, 0, psta->hwaddr);// recipient
+
+ //tear down TX AMPDU
+ send_delba(padapter, 1, psta->hwaddr);// // originator
+
+#endif //CONFIG_80211N_HT
+
+ issue_deauth(padapter, psta->hwaddr, reason);
+ }
+
+ psta->htpriv.agg_enable_bitmap = 0x0;//reset
+ psta->htpriv.candidate_tid_bitmap = 0x0;//reset
+
+
+ //report_del_sta_event(padapter, psta->hwaddr, reason);
+
+ //clear cam entry / key
+ //clear_cam_entry(padapter, (psta->mac_id + 3));
+ rtw_clearstakey_cmd(padapter, (u8*)psta, (u8)(psta->mac_id + 3), _TRUE);
+
+
+ _enter_critical_bh(&psta->lock, &irqL);
+ psta->state &= ~_FW_LINKED;
+ _exit_critical_bh(&psta->lock, &irqL);
+
+ #ifdef CONFIG_IOCTL_CFG80211
+ if (1) {
+ #ifdef COMPAT_KERNEL_RELEASE
+ rtw_cfg80211_indicate_sta_disassoc(padapter, psta->hwaddr, reason);
+ #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
+ rtw_cfg80211_indicate_sta_disassoc(padapter, psta->hwaddr, reason);
+ #else //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
+ /* will call rtw_cfg80211_indicate_sta_disassoc() in cmd_thread for old API context */
+ #endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
+ } else
+ #endif //CONFIG_IOCTL_CFG80211
+ {
+ rtw_indicate_sta_disassoc_event(padapter, psta);
+ }
+
+ report_del_sta_event(padapter, psta->hwaddr, reason);
+
+ beacon_updated = bss_cap_update_on_sta_leave(padapter, psta);
+
+ _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
+ rtw_free_stainfo(padapter, psta);
+ _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
+
+
+ return beacon_updated;
+
+}
+
+int rtw_ap_inform_ch_switch(_adapter *padapter, u8 new_ch, u8 ch_offset)
+{
+ _irqL irqL;
+ _list *phead, *plist;
+ int ret=0;
+ struct sta_info *psta = NULL;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
+
+ if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
+ return ret;
+
+ DBG_871X(FUNC_NDEV_FMT" with ch:%u, offset:%u\n",
+ FUNC_NDEV_ARG(padapter->pnetdev), new_ch, ch_offset);
+
+ _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+ phead = &pstapriv->asoc_list;
+ plist = get_next(phead);
+
+ /* for each sta in asoc_queue */
+ while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
+ {
+ psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
+ plist = get_next(plist);
+
+ issue_action_spct_ch_switch(padapter, psta->hwaddr, new_ch, ch_offset);
+ psta->expire_to = ((pstapriv->expire_to * 2) > 5) ? 5 : (pstapriv->expire_to * 2);
+ }
+ _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+
+ issue_action_spct_ch_switch(padapter, bc_addr, new_ch, ch_offset);
+
+ return ret;
+}
+
+int rtw_sta_flush(_adapter *padapter)
+{
+ _irqL irqL;
+ _list *phead, *plist;
+ int ret=0;
+ struct sta_info *psta = NULL;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff};
+ u8 chk_alive_num = 0;
+ char chk_alive_list[NUM_STA];
+ int i;
+
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(padapter->pnetdev));
+
+ if((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
+ return ret;
+
+ _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+ phead = &pstapriv->asoc_list;
+ plist = get_next(phead);
+
+ while ((rtw_end_of_queue_search(phead, plist)) == _FALSE) {
+ int stainfo_offset;
+
+ psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
+ plist = get_next(plist);
+
+ /* Remove sta from asoc_list */
+ rtw_list_delete(&psta->asoc_list);
+ pstapriv->asoc_list_cnt--;
+
+ /* Keep sta for ap_free_sta() beyond this asoc_list loop */
+ stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
+ if (stainfo_offset_valid(stainfo_offset)) {
+ chk_alive_list[chk_alive_num++] = stainfo_offset;
+ }
+ }
+ _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+
+
+ /* For each sta in chk_alive_list, call ap_free_sta */
+ for (i = 0; i < chk_alive_num; i++) {
+ psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
+ ap_free_sta(padapter, psta, _TRUE, WLAN_REASON_DEAUTH_LEAVING);
+ }
+
+ issue_deauth(padapter, bc_addr, WLAN_REASON_DEAUTH_LEAVING);
+
+ associated_clients_update(padapter, _TRUE);
+
+ return ret;
+
+}
+
+/* called > TSR LEVEL for USB or SDIO Interface*/
+void sta_info_update(_adapter *padapter, struct sta_info *psta)
+{
+ int flags = psta->flags;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+
+
+ //update wmm cap.
+ if(WLAN_STA_WME&flags)
+ psta->qos_option = 1;
+ else
+ psta->qos_option = 0;
+
+ if(pmlmepriv->qospriv.qos_option == 0)
+ psta->qos_option = 0;
+
+
+#ifdef CONFIG_80211N_HT
+ //update 802.11n ht cap.
+ if(WLAN_STA_HT&flags)
+ {
+ psta->htpriv.ht_option = _TRUE;
+ psta->qos_option = 1;
+ }
+ else
+ {
+ psta->htpriv.ht_option = _FALSE;
+ }
+
+ if(pmlmepriv->htpriv.ht_option == _FALSE)
+ psta->htpriv.ht_option = _FALSE;
+#endif
+
+
+ update_sta_info_apmode(padapter, psta);
+
+
+}
+
+/* called >= TSR LEVEL for USB or SDIO Interface*/
+void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta)
+{
+ if(psta->state & _FW_LINKED)
+ {
+ //add ratid
+ add_RATid(padapter, psta, 0);//DM_RATR_STA_INIT
+ }
+}
+/* restore hw setting from sw data structures */
+void rtw_ap_restore_network(_adapter *padapter)
+{
+ struct mlme_priv *mlmepriv = &padapter->mlmepriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ struct sta_priv * pstapriv = &padapter->stapriv;
+ struct sta_info *psta;
+ struct security_priv* psecuritypriv=&(padapter->securitypriv);
+ _irqL irqL;
+ _list *phead, *plist;
+ u8 chk_alive_num = 0;
+ char chk_alive_list[NUM_STA];
+ int i;
+
+ rtw_setopmode_cmd(padapter, Ndis802_11APMode,_FALSE);
+
+ set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
+
+ start_bss_network(padapter, (u8*)&mlmepriv->cur_network.network);
+
+ if((padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||
+ (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))
+ {
+ /* restore group key, WEP keys is restored in ips_leave() */
+ rtw_set_key(padapter, psecuritypriv, psecuritypriv->dot118021XGrpKeyid, 0,_FALSE);
+ }
+
+ _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+
+ phead = &pstapriv->asoc_list;
+ plist = get_next(phead);
+
+ while ((rtw_end_of_queue_search(phead, plist)) == _FALSE) {
+ int stainfo_offset;
+
+ psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
+ plist = get_next(plist);
+
+ stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
+ if (stainfo_offset_valid(stainfo_offset)) {
+ chk_alive_list[chk_alive_num++] = stainfo_offset;
+ }
+ }
+
+ _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+
+ for (i = 0; i < chk_alive_num; i++) {
+ psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
+
+ if (psta == NULL) {
+ DBG_871X(FUNC_ADPT_FMT" sta_info is null\n", FUNC_ADPT_ARG(padapter));
+ }
+ else if(psta->state &_FW_LINKED)
+ {
+ Update_RA_Entry(padapter, psta);
+ //pairwise key
+ /* per sta pairwise key and settings */
+ if( (padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||
+ (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))
+ {
+ rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE,_FALSE);
+ }
+ }
+ }
+
+}
+
+void start_ap_mode(_adapter *padapter)
+{
+ int i;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
+
+ pmlmepriv->update_bcn = _FALSE;
+
+ //init_mlme_ap_info(padapter);
+ pmlmeext->bstart_bss = _FALSE;
+
+ pmlmepriv->num_sta_non_erp = 0;
+
+ pmlmepriv->num_sta_no_short_slot_time = 0;
+
+ pmlmepriv->num_sta_no_short_preamble = 0;
+
+ pmlmepriv->num_sta_ht_no_gf = 0;
+#ifdef CONFIG_80211N_HT
+ pmlmepriv->num_sta_no_ht = 0;
+#endif //CONFIG_80211N_HT
+ pmlmepriv->num_sta_ht_20mhz = 0;
+
+ pmlmepriv->olbc = _FALSE;
+
+ pmlmepriv->olbc_ht = _FALSE;
+
+#ifdef CONFIG_80211N_HT
+ pmlmepriv->ht_op_mode = 0;
+#endif
+
+ for(i=0; i<NUM_STA; i++)
+ pstapriv->sta_aid[i] = NULL;
+
+ pmlmepriv->wps_beacon_ie = NULL;
+ pmlmepriv->wps_probe_resp_ie = NULL;
+ pmlmepriv->wps_assoc_resp_ie = NULL;
+
+ pmlmepriv->p2p_beacon_ie = NULL;
+ pmlmepriv->p2p_probe_resp_ie = NULL;
+
+
+ //for ACL
+ _rtw_init_listhead(&(pacl_list->acl_node_q.queue));
+ pacl_list->num = 0;
+ pacl_list->mode = 0;
+ for(i = 0; i < NUM_ACL; i++)
+ {
+ _rtw_init_listhead(&pacl_list->aclnode[i].list);
+ pacl_list->aclnode[i].valid = _FALSE;
+ }
+
+}
+
+void stop_ap_mode(_adapter *padapter)
+{
+ _irqL irqL;
+ _list *phead, *plist;
+ struct rtw_wlan_acl_node *paclnode;
+ struct sta_info *psta=NULL;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
+ _queue *pacl_node_q =&pacl_list->acl_node_q;
+
+ pmlmepriv->update_bcn = _FALSE;
+ pmlmeext->bstart_bss = _FALSE;
+ //_rtw_spinlock_free(&pmlmepriv->bcn_update_lock);
+
+ //reset and init security priv , this can refine with rtw_reset_securitypriv
+ _rtw_memset((unsigned char *)&padapter->securitypriv, 0, sizeof (struct security_priv));
+ padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen;
+ padapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled;
+
+ //for ACL
+ _enter_critical_bh(&(pacl_node_q->lock), &irqL);
+ phead = get_list_head(pacl_node_q);
+ plist = get_next(phead);
+ while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
+ {
+ paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
+ plist = get_next(plist);
+
+ if(paclnode->valid == _TRUE)
+ {
+ paclnode->valid = _FALSE;
+
+ rtw_list_delete(&paclnode->list);
+
+ pacl_list->num--;
+ }
+ }
+ _exit_critical_bh(&(pacl_node_q->lock), &irqL);
+
+ DBG_871X("%s, free acl_node_queue, num=%d\n", __func__, pacl_list->num);
+
+ rtw_sta_flush(padapter);
+
+ //free_assoc_sta_resources
+ rtw_free_all_stainfo(padapter);
+
+ psta = rtw_get_bcmc_stainfo(padapter);
+ _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
+ rtw_free_stainfo(padapter, psta);
+ _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
+
+ rtw_init_bcmc_stainfo(padapter);
+
+ rtw_free_mlme_priv_ie_data(pmlmepriv);
+
+}
+
+#endif //CONFIG_NATIVEAP_MLME
+#endif //CONFIG_AP_MODE
+
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_bt_mp.c b/drivers/net/wireless/rtl8723as/core/rtw_bt_mp.c
index 8b2afecc7b62..e3e0f3d95fec 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_bt_mp.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_bt_mp.c
@@ -1,1734 +1,1735 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-
-#include "rtw_bt_mp.h"
-#include <drv_types.h>
-#include <rtl8723a_hal.h>
-
-#ifdef CONFIG_RTL8723A
-
-void MPh2c_timeout_handle(void *FunctionContext)
-{
- _adapter *pAdapter = (_adapter *)FunctionContext;
- PMPT_CONTEXT pMptCtx=&pAdapter->mppriv.MptCtx;
-
- DBG_8192C("[MPT], MPh2c_timeout_handle \n");
-
- pMptCtx->bMPh2c_timeout=_TRUE;
-
- _rtw_up_sema(&pMptCtx->MPh2c_Sema);
-
- //_cancel_timer_ex( &pMptCtx->MPh2c_timeout_timer);
-
- return;
-}
-u32 WaitC2Hevent( PADAPTER pAdapter,BOOLEAN *C2H_event ,u32 delay_time)
-{
- PMPT_CONTEXT pMptCtx=&(pAdapter->mppriv.MptCtx);
- pMptCtx->bMPh2c_timeout=_FALSE;
-
- _set_timer( &pMptCtx->MPh2c_timeout_timer, delay_time );
-
- _rtw_down_sema(&pMptCtx->MPh2c_Sema);
-
- if( pMptCtx->bMPh2c_timeout == _TRUE )
- {
- C2H_event =_FALSE;
-
- return _FALSE;
- }
-
- return _TRUE;
-
-}
-
-BT_CTRL_STATUS
-mptbt_CheckC2hFrame(
- PADAPTER Adapter,
- PBT_H2C pH2c,
- PBT_EXT_C2H pExtC2h
- )
-{
- BT_CTRL_STATUS c2hStatus = BT_STATUS_C2H_SUCCESS;
-
- //DBG_8192C("[MPT], MPT rsp C2H hex: %x %x %x %x %x %x \n"), pExtC2h , pExtC2h+1 ,pExtC2h+2 ,pExtC2h+3 ,pExtC2h+4 ,pExtC2h+5);
-
- DBG_8192C("[MPT], statusCode = 0x%x\n", pExtC2h->statusCode);
- DBG_8192C("[MPT], retLen = %d\n", pExtC2h->retLen);
- DBG_8192C("[MPT], opCodeVer : req/rsp=%d/%d\n", pH2c->opCodeVer, pExtC2h->opCodeVer);
- DBG_8192C("[MPT], reqNum : req/rsp=%d/%d\n", pH2c->reqNum, pExtC2h->reqNum);
- if(pExtC2h->reqNum != pH2c->reqNum)
- {
- c2hStatus = BT_STATUS_C2H_REQNUM_MISMATCH;
- DBG_8192C("[MPT], Error!! C2H reqNum Mismatch!!\n");
- }
- else if(pExtC2h->opCodeVer != pH2c->opCodeVer)
- {
- c2hStatus = BT_STATUS_OPCODE_L_VERSION_MISMATCH;
- DBG_8192C("[MPT], Error!! OPCode version L mismatch!!\n");
- }
-
- return c2hStatus;
-}
-
-extern s32 FillH2CCmd(PADAPTER padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
-
-BT_CTRL_STATUS
-mptbt_SendH2c(
- PADAPTER Adapter,
- PBT_H2C pH2c,
- u2Byte h2cCmdLen
- )
-{
- //KIRQL OldIrql = KeGetCurrentIrql();
- BT_CTRL_STATUS h2cStatus=BT_STATUS_H2C_SUCCESS;
- PMPT_CONTEXT pMptCtx=&(Adapter->mppriv.MptCtx);
- u1Byte i;
-
- DBG_8192C("[MPT], mptbt_SendH2c()=========>\n");
-
- //PlatformResetEvent(&pMptCtx->MptH2cRspEvent);
- //PlatformResetEvent(&pMptCtx->MptBtC2hEvent);
-
-// if(OldIrql == PASSIVE_LEVEL)
-// {
- //RTPRINT_DATA(FMPBT, FMPBT_H2C_CONTENT, ("[MPT], MPT H2C hex: \n"), pH2c, h2cCmdLen);
-
- for(i=0; i<BT_H2C_MAX_RETRY; i++)
- {
- DBG_8192C("[MPT], Send H2C command to wifi!!!\n");
- FillH2CCmd(Adapter, 70, h2cCmdLen, (pu1Byte)pH2c);
- pMptCtx->h2cReqNum++;
- pMptCtx->h2cReqNum %= 16;
-
- if(WaitC2Hevent(Adapter, &pMptCtx->MptH2cRspEvent, 100))
- {
- DBG_8192C("[MPT], Received WiFi MptH2cRspEvent!!!\n");
- if(WaitC2Hevent(Adapter, &pMptCtx->MptBtC2hEvent, 400))
- {
- DBG_8192C("[MPT], Received MptBtC2hEvent!!!\n");
- break;
- }
- else
- {
- DBG_8192C("[MPT], Error!!BT MptBtC2hEvent timeout!!\n");
- h2cStatus = BT_STATUS_H2C_BT_NO_RSP;
- }
- }
- else
- {
- DBG_8192C("[MPT], Error!!WiFi MptH2cRspEvent timeout!!\n");
- h2cStatus = BT_STATUS_H2C_TIMTOUT;
- }
- }
-// }
-// else
-// {
-// RT_ASSERT(FALSE, ("[MPT], mptbt_SendH2c() can only run under PASSIVE_LEVEL!!\n"));
-// h2cStatus = BT_STATUS_WRONG_LEVEL;
-// }
-
- DBG_8192C("[MPT], mptbt_SendH2c()<=========\n");
- return h2cStatus;
-}
-
-
-
-BT_CTRL_STATUS
-mptbt_CheckBtRspStatus(
- PADAPTER Adapter,
- PBT_EXT_C2H pExtC2h
- )
-{
- BT_CTRL_STATUS retStatus=BT_OP_STATUS_SUCCESS;
-
- switch(pExtC2h->statusCode)
- {
- case BT_OP_STATUS_SUCCESS:
- retStatus = BT_STATUS_BT_OP_SUCCESS;
- DBG_8192C("[MPT], BT status : BT_STATUS_SUCCESS\n");
- break;
- case BT_OP_STATUS_VERSION_MISMATCH:
- retStatus = BT_STATUS_OPCODE_L_VERSION_MISMATCH;
- DBG_8192C("[MPT], BT status : BT_STATUS_OPCODE_L_VERSION_MISMATCH\n");
- break;
- case BT_OP_STATUS_UNKNOWN_OPCODE:
- retStatus = BT_STATUS_UNKNOWN_OPCODE_L;
- DBG_8192C("[MPT], BT status : BT_STATUS_UNKNOWN_OPCODE_L\n");
- break;
- case BT_OP_STATUS_ERROR_PARAMETER:
- retStatus = BT_STATUS_PARAMETER_FORMAT_ERROR_L;
- DBG_8192C("[MPT], BT status : BT_STATUS_PARAMETER_FORMAT_ERROR_L\n");
- break;
- default:
- retStatus = BT_STATUS_UNKNOWN_STATUS_L;
- DBG_8192C("[MPT], BT status : BT_STATUS_UNKNOWN_STATUS_L\n");
- break;
- }
-
- return retStatus;
-}
-
-
-
-BT_CTRL_STATUS
-mptbt_BtFwOpCodeProcess(
- PADAPTER Adapter,
- u1Byte btFwOpCode,
- u1Byte opCodeVer,
- pu1Byte pH2cPar,
- u1Byte h2cParaLen
- )
-{
- u1Byte H2C_Parameter[6] ={0};
- PBT_H2C pH2c=(PBT_H2C)&H2C_Parameter[0];
- PMPT_CONTEXT pMptCtx=&(Adapter->mppriv.MptCtx);
- PBT_EXT_C2H pExtC2h=(PBT_EXT_C2H)&pMptCtx->c2hBuf[0];
- u2Byte paraLen=0,i;
- BT_CTRL_STATUS h2cStatus=BT_STATUS_H2C_SUCCESS, c2hStatus=BT_STATUS_C2H_SUCCESS;
- BT_CTRL_STATUS retStatus=BT_STATUS_H2C_BT_NO_RSP;
-
- pH2c->opCode = btFwOpCode;
- pH2c->opCodeVer = opCodeVer;
- pH2c->reqNum = pMptCtx->h2cReqNum;
- //PlatformMoveMemory(&pH2c->buf[0], pH2cPar, h2cParaLen);
- //_rtw_memcpy(&pH2c->buf[0], pH2cPar, h2cParaLen);
- _rtw_memcpy(pH2c->buf, pH2cPar, h2cParaLen);
-
- DBG_8192C("[MPT], pH2c->opCode=%d\n", pH2c->opCode);
- DBG_8192C("[MPT], pH2c->opCodeVer=%d\n", pH2c->opCodeVer);
- DBG_8192C("[MPT], pH2c->reqNum=%d\n", pH2c->reqNum);
- DBG_8192C("[MPT], h2c parameter length=%d\n", h2cParaLen);
- if(h2cParaLen)
- {
- DBG_8192C("[MPT], parameters(hex): \n");
- for(i=0;i<h2cParaLen;i++)
- {
- DBG_8192C(" 0x%x \n", pH2c->buf[i]);
- }
- }
-
- h2cStatus = mptbt_SendH2c(Adapter, pH2c, h2cParaLen+2);
- if(BT_STATUS_H2C_SUCCESS == h2cStatus)
- {
- // if reach here, it means H2C get the correct c2h response,
- c2hStatus = mptbt_CheckC2hFrame(Adapter, pH2c, pExtC2h);
- if(BT_STATUS_C2H_SUCCESS == c2hStatus)
- {
- retStatus = mptbt_CheckBtRspStatus(Adapter, pExtC2h);
- }
- else
- {
- DBG_8192C("[MPT], Error!! C2H failed for pH2c->opCode=%d\n", pH2c->opCode);
- // check c2h status error, return error status code to upper layer.
- retStatus = c2hStatus;
- }
- }
- else
- {
- DBG_8192C("[MPT], Error!! H2C failed for pH2c->opCode=%d\n", pH2c->opCode);
- // check h2c status error, return error status code to upper layer.
- retStatus = h2cStatus;
- }
-
- return retStatus;
-}
-
-
-
-
-u2Byte
-mptbt_BtReady(
- PADAPTER Adapter,
- PBT_REQ_CMD pBtReq,
- PBT_RSP_CMD pBtRsp
- )
-{
- u1Byte h2cParaBuf[6] ={0};
- u1Byte h2cParaLen=0;
- u2Byte paraLen=0;
- u1Byte retStatus=BT_STATUS_BT_OP_SUCCESS;
- u1Byte btOpcode;
- u1Byte btOpcodeVer=0;
- PMPT_CONTEXT pMptCtx=&(Adapter->mppriv.MptCtx);
- PBT_EXT_C2H pExtC2h=(PBT_EXT_C2H)&pMptCtx->c2hBuf[0];
- u1Byte i;
- u1Byte btFwVer=0, bdAddr[6]={0};
- u2Byte btRealFwVer=0;
- pu2Byte pu2Tmp=NULL;
-
- //
- // check upper layer parameters
- //
-
- // 1. check upper layer opcode version
- if(pBtReq->opCodeVer != 1)
- {
- DBG_8192C("[MPT], Error!! Upper OP code version not match!!!\n");
- pBtRsp->status = BT_STATUS_OPCODE_U_VERSION_MISMATCH;
- return paraLen;
- }
-
- pBtRsp->pParamStart[0] = MP_BT_NOT_READY;
- paraLen = 10;
- //
- // execute lower layer opcodes
- //
-
- // Get BT FW version
- // fill h2c parameters
- btOpcode = BT_LO_OP_GET_BT_VERSION;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- else
- {
- pu2Tmp = (pu2Byte)&pExtC2h->buf[0];
- btRealFwVer = *pu2Tmp;
- btFwVer = pExtC2h->buf[1];
- DBG_8192C("[MPT], btRealFwVer=0x%x, btFwVer=0x%x\n", btRealFwVer, btFwVer);
- }
-
- // Get BD Address
- // fill h2c parameters
- btOpcode = BT_LO_OP_GET_BD_ADDR_L;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- else
- {
- bdAddr[5] = pExtC2h->buf[0];
- bdAddr[4] = pExtC2h->buf[1];
- bdAddr[3] = pExtC2h->buf[2];
- }
-
- // fill h2c parameters
- btOpcode = BT_LO_OP_GET_BD_ADDR_H;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- else
- {
- bdAddr[2] = pExtC2h->buf[0];
- bdAddr[1] = pExtC2h->buf[1];
- bdAddr[0] = pExtC2h->buf[2];
- }
- DBG_8192C("[MPT], Local BDAddr:");
- for(i=0; i<6; i++)
- {
- DBG_8192C(" 0x%x ", bdAddr[i]);
- }
- pBtRsp->status = BT_STATUS_SUCCESS;
- pBtRsp->pParamStart[0] = MP_BT_READY;
- pu2Tmp = (pu2Byte)&pBtRsp->pParamStart[1];
- *pu2Tmp = btRealFwVer;
- pBtRsp->pParamStart[3] = btFwVer;
- for(i=0; i<6; i++)
- {
- pBtRsp->pParamStart[4+i] = bdAddr[5-i];
- }
-
- return paraLen;
-}
-
-void mptbt_close_WiFiRF(PADAPTER Adapter)
-{
- PHY_SetBBReg(Adapter, 0x824, 0xF, 0x0);
- PHY_SetBBReg(Adapter, 0x824, 0x700000, 0x0);
- PHY_SetRFReg(Adapter, RF90_PATH_A, 0x0, 0xF0000, 0x0);
-}
-
-void mptbt_open_WiFiRF(PADAPTER Adapter)
-{
- PHY_SetBBReg(Adapter, 0x824, 0x700000, 0x3);
- PHY_SetBBReg(Adapter, 0x824, 0xF, 0x2);
- PHY_SetRFReg(Adapter, RF90_PATH_A, 0x0, 0xF0000, 0x3);
-}
-
-u4Byte mptbt_switch_RF(PADAPTER Adapter, u1Byte Enter)
-{
- u2Byte tmp_2byte = 0;
-
- //Enter test mode
- if (Enter) {
- ////1>. close WiFi RF
- mptbt_close_WiFiRF(Adapter);
-
- ////2>. change ant switch to BT
- tmp_2byte = rtw_read16(Adapter, 0x860);
- tmp_2byte = tmp_2byte | BIT(9);
- tmp_2byte = tmp_2byte & (~BIT(8));
- rtw_write16(Adapter, 0x860, tmp_2byte);
- rtw_write16(Adapter, 0x870, 0x300);
- } else {
- ////1>. Open WiFi RF
- mptbt_open_WiFiRF(Adapter);
-
- ////2>. change ant switch back
- tmp_2byte = rtw_read16(Adapter, 0x860);
- tmp_2byte = tmp_2byte | BIT(8);
- tmp_2byte = tmp_2byte & (~BIT(9));
- rtw_write16(Adapter, 0x860, tmp_2byte);
- rtw_write16(Adapter, 0x870, 0x300);
- }
-
- return 0;
-}
-
-u2Byte
-mptbt_BtSetMode(
- PADAPTER Adapter,
- PBT_REQ_CMD pBtReq,
- PBT_RSP_CMD pBtRsp
- )
-{
- u1Byte h2cParaBuf[6] ={0};
- u1Byte h2cParaLen=0;
- u2Byte paraLen=0;
- u1Byte retStatus=BT_STATUS_BT_OP_SUCCESS;
- u1Byte btOpcode;
- u1Byte btOpcodeVer=0;
- u1Byte btModeToSet=0;
-
- //
- // check upper layer parameters
- //
- // 1. check upper layer opcode version
- if(pBtReq->opCodeVer != 1)
- {
- DBG_8192C("[MPT], Error!! Upper OP code version not match!!!\n");
- pBtRsp->status = BT_STATUS_OPCODE_U_VERSION_MISMATCH;
- return paraLen;
- }
- // 2. check upper layer parameter length
- if(1 == pBtReq->paraLength)
- {
- btModeToSet = pBtReq->pParamStart[0];
- DBG_8192C("[MPT], BtTestMode=%d \n", btModeToSet);
- }
- else
- {
- DBG_8192C("[MPT], Error!! wrong parameter length=%d (should be 1)\n", pBtReq->paraLength);
- pBtRsp->status = BT_STATUS_PARAMETER_FORMAT_ERROR_U;
- return paraLen;
- }
-
- //
- // execute lower layer opcodes
- //
-
- // 1. fill h2c parameters
- // check bt mode
- btOpcode = BT_LO_OP_SET_BT_MODE;
- if(btModeToSet >= MP_BT_MODE_MAX)
- {
- pBtRsp->status = BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- else
- {
- mptbt_switch_RF(Adapter, 1);
-
- h2cParaBuf[0] = btModeToSet;
- h2cParaLen = 1;
- // 2. execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- }
-
- // 3. construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS == retStatus)
- {
- pBtRsp->status = BT_STATUS_SUCCESS;
- }
- else
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- }
-
- return paraLen;
-}
-
-
-VOID
-MPTBT_FwC2hBtMpCtrl(
- PADAPTER Adapter,
- pu1Byte tmpBuf,
- u1Byte length
- )
-{
- u32 i;
- PMPT_CONTEXT pMptCtx=&(Adapter->mppriv.MptCtx);
- PBT_EXT_C2H pExtC2h=(PBT_EXT_C2H)tmpBuf;
-
- if(Adapter->bBTFWReady == _FALSE || Adapter->registrypriv.mp_mode == 0 )
- {
- DBG_8192C("[MPT], %s,bBTFWReady == _FALSE\n",__func__);
- return;
- }
- //cancel_timeout for h2c handle
- _cancel_timer_ex( &pMptCtx->MPh2c_timeout_timer);
-
- DBG_8192C("[MPT], MPTBT_FwC2hBtMpCtrl(), hex: \n");
- for(i=0;i<=length;i++)
- {
- //DBG_8192C("[MPT], MPTBT_FwC2hBtMpCtrl(), hex: \n",tmpBuf[i], length);
- DBG_8192C(" 0x%x ",tmpBuf[i]);
- }
- DBG_8192C("\n [MPT], pExtC2h->extendId=0x%x\n", pExtC2h->extendId);
-
- switch(pExtC2h->extendId)
- {
- case EXT_C2H_WIFI_FW_ACTIVE_RSP:
- DBG_8192C("[MPT], EXT_C2H_WIFI_FW_ACTIVE_RSP\n");
- DBG_8192C("[MPT], pExtC2h->buf hex: \n");
- if( length > 32 || length < 3 )
- break ;
- for(i=0;i<=(length-3);i++)
- DBG_8192C(" 0x%x ",pExtC2h->buf[i]);
- //PlatformSetEvent(&pMptCtx->MptH2cRspEvent);
- pMptCtx->MptH2cRspEvent=_TRUE;
- _rtw_up_sema(&pMptCtx->MPh2c_Sema);
- break;
- case EXT_C2H_TRIG_BY_BT_FW:
- DBG_8192C("[MPT], EXT_C2H_TRIG_BY_BT_FW\n");
- //PlatformMoveMemory(&pMptCtx->c2hBuf[0], tmpBuf, length);
- _rtw_memcpy(&pMptCtx->c2hBuf[0], tmpBuf, length);
- DBG_8192C("[MPT], pExtC2h->statusCode=0x%x\n", pExtC2h->statusCode);
- DBG_8192C("[MPT], pExtC2h->retLen=0x%x\n", pExtC2h->retLen);
- DBG_8192C("[MPT], pExtC2h->opCodeVer=0x%x\n", pExtC2h->opCodeVer);
- DBG_8192C("[MPT], pExtC2h->reqNum=0x%x\n", pExtC2h->reqNum);
- DBG_8192C("[MPT], pExtC2h->buf hex: \n");
- for(i=0;i<=(length-3);i++)
- DBG_8192C(" 0x%x ",pExtC2h->buf[0]);
- //PlatformSetEvent(&pMptCtx->MptBtC2hEvent);
- pMptCtx->MptBtC2hEvent=_TRUE;
- _rtw_up_sema(&pMptCtx->MPh2c_Sema);
- break;
- default:
- break;
- }
-
-
-
-}
-
-
-u2Byte
-mptbt_BtGetGeneral(
- IN PADAPTER Adapter,
- IN PBT_REQ_CMD pBtReq,
- IN PBT_RSP_CMD pBtRsp
- )
-{
- PMPT_CONTEXT pMptCtx=&(Adapter->mppriv.MptCtx);
- PBT_EXT_C2H pExtC2h=(PBT_EXT_C2H)&pMptCtx->c2hBuf[0];
- u1Byte h2cParaBuf[6] ={0};
- u1Byte h2cParaLen=0;
- u2Byte paraLen=0;
- u1Byte retStatus=BT_STATUS_BT_OP_SUCCESS;
- u1Byte btOpcode, bdAddr[6]={0};
- u1Byte btOpcodeVer=0;
- u1Byte getType=0, i;
- u2Byte getParaLen=0, validParaLen=0;
- u1Byte regType=0, reportType=0;
- u4Byte regAddr=0, regValue=0;
- pu4Byte pu4Tmp;
- pu2Byte pu2Tmp;
- pu1Byte pu1Tmp;
-
- //
- // check upper layer parameters
- //
-
- // check upper layer opcode version
- if(pBtReq->opCodeVer != 1)
- {
- DBG_8192C("[MPT], Error!! Upper OP code version not match!!!\n");
- pBtRsp->status = BT_STATUS_OPCODE_U_VERSION_MISMATCH;
- return paraLen;
- }
- // check upper layer parameter length
- if(pBtReq->paraLength < 1)
- {
- DBG_8192C("[MPT], Error!! wrong parameter length=%d (should larger than 1)\n", pBtReq->paraLength);
- pBtRsp->status = BT_STATUS_PARAMETER_FORMAT_ERROR_U;
- return paraLen;
- }
- getParaLen = pBtReq->paraLength - 1;
- getType = pBtReq->pParamStart[0];
-
- DBG_8192C("[MPT], getType=%d, getParaLen=%d\n", getType, getParaLen);
-
- // check parameter first
- switch(getType)
- {
- case BT_GGET_REG:
- DBG_8192C("[MPT], [BT_GGET_REG]\n");
- validParaLen = 5;
- if(getParaLen == validParaLen)
- {
- btOpcode = BT_LO_OP_READ_REG;
- regType = pBtReq->pParamStart[1];
- pu4Tmp = (pu4Byte)&pBtReq->pParamStart[2];
- regAddr = *pu4Tmp;
- DBG_8192C("[MPT], BT_GGET_REG regType=0x%x, regAddr=0x%x!!\n",
- regType, regAddr);
- if(regType >= BT_REG_MAX)
- {
- pBtRsp->status = (btOpcode<<8)| BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- else
- {
- if( ((BT_REG_RF==regType)&&(regAddr>0x7f)) ||
- ((BT_REG_MODEM==regType)&&(regAddr>0x1ff)) ||
- ((BT_REG_BLUEWIZE==regType)&&(regAddr>0xfff)) ||
- ((BT_REG_VENDOR==regType)&&(regAddr>0xfff)) ||
- ((BT_REG_LE==regType)&&(regAddr>0xfff)) )
- {
- pBtRsp->status = (btOpcode<<8)| BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- }
- }
- break;
- case BT_GGET_STATUS:
- DBG_8192C("[MPT], [BT_GGET_STATUS]\n");
- validParaLen = 0;
- break;
- case BT_GGET_REPORT:
- DBG_8192C("[MPT], [BT_GGET_REPORT]\n");
- validParaLen = 1;
- if(getParaLen == validParaLen)
- {
- reportType = pBtReq->pParamStart[1];
- DBG_8192C("[MPT], BT_GGET_REPORT reportType=0x%x!!\n", reportType);
- if(reportType >= BT_REPORT_MAX)
- {
- pBtRsp->status = BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- }
- break;
- default:
- {
- DBG_8192C("[MPT], Error!! getType=%d, out of range\n", getType);
- pBtRsp->status = BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- break;
- }
- if(getParaLen != validParaLen)
- {
- DBG_8192C("[MPT], Error!! wrong parameter length=%d for BT_GET_GEN_CMD cmd id=0x%x, paraLen should=0x%x\n",
- getParaLen, getType, validParaLen);
- pBtRsp->status = BT_STATUS_PARAMETER_FORMAT_ERROR_U;
- return paraLen;
- }
-
- //
- // execute lower layer opcodes
- //
- if(BT_GGET_REG == getType)
- {
- // fill h2c parameters
- // here we should write reg value first then write the address, adviced by Austin
- btOpcode = BT_LO_OP_READ_REG;
- h2cParaBuf[0] = regType;
- h2cParaBuf[1] = pBtReq->pParamStart[2];
- h2cParaBuf[2] = pBtReq->pParamStart[3];
- h2cParaLen = 3;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
-
- pu2Tmp = (pu2Byte)&pExtC2h->buf[0];
- regValue = *pu2Tmp;
- DBG_8192C("[MPT], read reg regType=0x%x, regAddr=0x%x, regValue=0x%x\n",
- regType, regAddr, regValue);
-
- pu4Tmp = (pu4Byte)&pBtRsp->pParamStart[0];
- *pu4Tmp = regValue;
- paraLen = 4;
- }
- else if(BT_GGET_STATUS == getType)
- {
- btOpcode = BT_LO_OP_GET_BT_STATUS;
- h2cParaLen = 0;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
-
- pBtRsp->pParamStart[0] = pExtC2h->buf[0];
- pBtRsp->pParamStart[1] = pExtC2h->buf[1];
- DBG_8192C("[MPT], read bt status, testMode=0x%x, testStatus=0x%x\n",
- pBtRsp->pParamStart[0], pBtRsp->pParamStart[1]);
- paraLen = 2;
- }
- else if(BT_GGET_REPORT == getType)
- {
- switch(reportType)
- {
- case BT_REPORT_RX_PACKET_CNT:
- {
- DBG_8192C("[MPT], [Rx Packet Counts]\n");
- btOpcode = BT_LO_OP_GET_RX_PKT_CNT_L;
- h2cParaLen = 0;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- pBtRsp->pParamStart[0] = pExtC2h->buf[0];
- pBtRsp->pParamStart[1] = pExtC2h->buf[1];
-
- btOpcode = BT_LO_OP_GET_RX_PKT_CNT_H;
- h2cParaLen = 0;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- pBtRsp->pParamStart[2] = pExtC2h->buf[0];
- pBtRsp->pParamStart[3] = pExtC2h->buf[1];
- paraLen = 4;
- }
- break;
- case BT_REPORT_RX_ERROR_BITS:
- {
- DBG_8192C("[MPT], [Rx Error Bits]\n");
- btOpcode = BT_LO_OP_GET_RX_ERROR_BITS_L;
- h2cParaLen = 0;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- pBtRsp->pParamStart[0] = pExtC2h->buf[0];
- pBtRsp->pParamStart[1] = pExtC2h->buf[1];
-
- btOpcode = BT_LO_OP_GET_RX_ERROR_BITS_H;
- h2cParaLen = 0;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- pBtRsp->pParamStart[2] = pExtC2h->buf[0];
- pBtRsp->pParamStart[3] = pExtC2h->buf[1];
- paraLen = 4;
- }
- break;
- case BT_REPORT_RSSI:
- {
- DBG_8192C("[MPT], [RSSI]\n");
- btOpcode = BT_LO_OP_GET_RSSI;
- h2cParaLen = 0;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- pBtRsp->pParamStart[0] = pExtC2h->buf[0];
- pBtRsp->pParamStart[1] = pExtC2h->buf[1];
- paraLen = 2;
- }
- break;
- case BT_REPORT_CFO_HDR_QUALITY:
- {
- DBG_8192C("[MPT], [CFO & Header Quality]\n");
- btOpcode = BT_LO_OP_GET_CFO_HDR_QUALITY_L;
- h2cParaLen = 0;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- pBtRsp->pParamStart[0] = pExtC2h->buf[0];
- pBtRsp->pParamStart[1] = pExtC2h->buf[1];
-
- btOpcode = BT_LO_OP_GET_CFO_HDR_QUALITY_H;
- h2cParaLen = 0;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- pBtRsp->pParamStart[2] = pExtC2h->buf[0];
- pBtRsp->pParamStart[3] = pExtC2h->buf[1];
- paraLen = 4;
- }
- break;
- case BT_REPORT_CONNECT_TARGET_BD_ADDR:
- {
- DBG_8192C("[MPT], [Connected Target BD ADDR]\n");
- btOpcode = BT_LO_OP_GET_TARGET_BD_ADDR_L;
- h2cParaLen = 0;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- bdAddr[5] = pExtC2h->buf[0];
- bdAddr[4] = pExtC2h->buf[1];
- bdAddr[3] = pExtC2h->buf[2];
-
- btOpcode = BT_LO_OP_GET_TARGET_BD_ADDR_H;
- h2cParaLen = 0;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- bdAddr[2] = pExtC2h->buf[0];
- bdAddr[1] = pExtC2h->buf[1];
- bdAddr[0] = pExtC2h->buf[2];
-
- DBG_8192C("[MPT], Connected Target BDAddr:%s", bdAddr);
- for(i=0; i<6; i++)
- {
- pBtRsp->pParamStart[i] = bdAddr[5-i];
- }
- paraLen = 6;
- }
- break;
- default:
- pBtRsp->status = BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- break;
- }
- }
-
- pBtRsp->status = BT_STATUS_SUCCESS;
- return paraLen;
-}
-
-
-
-u2Byte
-mptbt_BtSetGeneral(
- IN PADAPTER Adapter,
- IN PBT_REQ_CMD pBtReq,
- IN PBT_RSP_CMD pBtRsp
- )
-{
- u1Byte h2cParaBuf[6] ={0};
- u1Byte h2cParaLen=0;
- u2Byte paraLen=0;
- u1Byte retStatus=BT_STATUS_BT_OP_SUCCESS;
- u1Byte btOpcode;
- u1Byte btOpcodeVer=0;
- u1Byte setType=0;
- u2Byte setParaLen=0, validParaLen=0;
- u1Byte regType=0, bdAddr[6]={0}, calVal=0;
- u4Byte regAddr=0, regValue=0;
- pu4Byte pu4Tmp;
- pu2Byte pu2Tmp;
- pu1Byte pu1Tmp;
-
- //
- // check upper layer parameters
- //
-
- // check upper layer opcode version
- if(pBtReq->opCodeVer != 1)
- {
- DBG_8192C("[MPT], Error!! Upper OP code version not match!!!\n");
- pBtRsp->status = BT_STATUS_OPCODE_U_VERSION_MISMATCH;
- return paraLen;
- }
- // check upper layer parameter length
- if(pBtReq->paraLength < 1)
- {
- DBG_8192C("[MPT], Error!! wrong parameter length=%d (should larger than 1)\n", pBtReq->paraLength);
- pBtRsp->status = BT_STATUS_PARAMETER_FORMAT_ERROR_U;
- return paraLen;
- }
- setParaLen = pBtReq->paraLength - 1;
- setType = pBtReq->pParamStart[0];
-
- DBG_8192C("[MPT], setType=%d, setParaLen=%d\n", setType, setParaLen);
-
- // check parameter first
- switch(setType)
- {
- case BT_GSET_REG:
- DBG_8192C ("[MPT], [BT_GSET_REG]\n");
- validParaLen = 9;
- if(setParaLen == validParaLen)
- {
- btOpcode = BT_LO_OP_WRITE_REG_VALUE;
- regType = pBtReq->pParamStart[1];
- pu4Tmp = (pu4Byte)&pBtReq->pParamStart[2];
- regAddr = *pu4Tmp;
- pu4Tmp = (pu4Byte)&pBtReq->pParamStart[6];
- regValue = *pu4Tmp;
- DBG_8192C("[MPT], BT_GSET_REG regType=0x%x, regAddr=0x%x, regValue=0x%x!!\n",
- regType, regAddr, regValue);
- if(regType >= BT_REG_MAX)
- {
- pBtRsp->status = (btOpcode<<8)| BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- else
- {
- if( ((BT_REG_RF==regType)&&(regAddr>0x7f)) ||
- ((BT_REG_MODEM==regType)&&(regAddr>0x1ff)) ||
- ((BT_REG_BLUEWIZE==regType)&&(regAddr>0xfff)) ||
- ((BT_REG_VENDOR==regType)&&(regAddr>0xfff)) ||
- ((BT_REG_LE==regType)&&(regAddr>0xfff)) )
- {
- pBtRsp->status = (btOpcode<<8)| BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- }
- }
- break;
- case BT_GSET_RESET:
- DBG_8192C("[MPT], [BT_GSET_RESET]\n");
- validParaLen = 0;
- break;
- case BT_GSET_TARGET_BD_ADDR:
- DBG_8192C("[MPT], [BT_GSET_TARGET_BD_ADDR]\n");
- validParaLen = 6;
- if(setParaLen == validParaLen)
- {
- btOpcode = BT_LO_OP_SET_TARGET_BD_ADDR_H;
- if( (pBtReq->pParamStart[1]==0) &&
- (pBtReq->pParamStart[2]==0) &&
- (pBtReq->pParamStart[3]==0) &&
- (pBtReq->pParamStart[4]==0) &&
- (pBtReq->pParamStart[5]==0) &&
- (pBtReq->pParamStart[6]==0) )
- {
- DBG_8192C("[MPT], Error!! targetBDAddr=all zero\n");
- pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- if( (pBtReq->pParamStart[1]==0xff) &&
- (pBtReq->pParamStart[2]==0xff) &&
- (pBtReq->pParamStart[3]==0xff) &&
- (pBtReq->pParamStart[4]==0xff) &&
- (pBtReq->pParamStart[5]==0xff) &&
- (pBtReq->pParamStart[6]==0xff) )
- {
- DBG_8192C("[MPT], Error!! targetBDAddr=all 0xf\n");
- pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- bdAddr[0] = pBtReq->pParamStart[6];
- bdAddr[1] = pBtReq->pParamStart[5];
- bdAddr[2] = pBtReq->pParamStart[4];
- bdAddr[3] = pBtReq->pParamStart[3];
- bdAddr[4] = pBtReq->pParamStart[2];
- bdAddr[5] = pBtReq->pParamStart[1];
- DBG_8192C ("[MPT], target BDAddr:%x,%x,%x,%x,%x,%x\n",
- bdAddr[0],bdAddr[1],bdAddr[2],bdAddr[3],bdAddr[4],bdAddr[5]);
- }
- break;
- case BT_GSET_TX_PWR_FINETUNE:
- DBG_8192C("[MPT], [BT_GSET_TX_PWR_FINETUNE]\n");
- validParaLen = 1;
- if(setParaLen == validParaLen)
- {
- btOpcode = BT_LO_OP_SET_TX_POWER_CALIBRATION;
- calVal = pBtReq->pParamStart[1];
- if( (calVal<1) || (calVal>9) )
- {
- pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- DBG_8192C ("[MPT], calVal=%d\n", calVal);
- }
- break;
- case BT_SET_TRACKING_INTERVAL:
- DBG_871X("[MPT], [BT_SET_TRACKING_INTERVAL] setParaLen =%d \n",setParaLen);
-
- validParaLen = 1;
- if(setParaLen == validParaLen)
- calVal = pBtReq->pParamStart[1];
- break;
- case BT_SET_THERMAL_METER:
- DBG_871X("[MPT], [BT_SET_THERMAL_METER] setParaLen =%d \n",setParaLen);
- validParaLen = 1;
- if(setParaLen == validParaLen)
- calVal = pBtReq->pParamStart[1];
- break;
- case BT_ENABLE_CFO_TRACKING:
- DBG_871X("[MPT], [BT_ENABLE_CFO_TRACKING] setParaLen =%d \n",setParaLen);
- validParaLen = 1;
- if(setParaLen == validParaLen)
- calVal = pBtReq->pParamStart[1];
- break;
- case BT_GSET_UPDATE_BT_PATCH:
- if(IS_HARDWARE_TYPE_8723AE(Adapter) && Adapter->bFWReady)
- {
- u1Byte i;
- DBG_8192C ("[MPT], write regs for load patch\n");
- //BTFwPatch8723A(Adapter);
- PlatformEFIOWrite1Byte(Adapter, 0xCC, 0x2d);
- rtw_msleep_os(50);
- PlatformEFIOWrite4Byte(Adapter, 0x68, 0xa005000c);
- rtw_msleep_os(50);
- PlatformEFIOWrite4Byte(Adapter, 0x68, 0xb005000c);
- rtw_msleep_os(50);
- PlatformEFIOWrite1Byte(Adapter, 0xCC, 0x29);
- for(i=0; i<12; i++)
- rtw_msleep_os(100);
-//#if (DEV_BUS_TYPE == RT_PCI_INTERFACE)
-// BTFwPatch8723A(Adapter);
-//#endif
- DBG_8192C("[MPT], load BT FW Patch finished!!!\n");
- }
- break;
- default:
- {
- DBG_8192C ("[MPT], Error!! setType=%d, out of range\n", setType);
- pBtRsp->status = BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- break;
- }
- if(setParaLen != validParaLen)
- {
- DBG_8192C("[MPT], Error!! wrong parameter length=%d for BT_SET_GEN_CMD cmd id=0x%x, paraLen should=0x%x\n",
- setParaLen, setType, validParaLen);
- pBtRsp->status = BT_STATUS_PARAMETER_FORMAT_ERROR_U;
- return paraLen;
- }
-
- //
- // execute lower layer opcodes
- //
- if(BT_GSET_REG == setType)
- {
- // fill h2c parameters
- // here we should write reg value first then write the address, adviced by Austin
- btOpcode = BT_LO_OP_WRITE_REG_VALUE;
- h2cParaBuf[0] = pBtReq->pParamStart[6];
- h2cParaBuf[1] = pBtReq->pParamStart[7];
- h2cParaBuf[2] = pBtReq->pParamStart[8];
- h2cParaLen = 3;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
-
- // write reg address
- btOpcode = BT_LO_OP_WRITE_REG_ADDR;
- h2cParaBuf[0] = regType;
- h2cParaBuf[1] = pBtReq->pParamStart[2];
- h2cParaBuf[2] = pBtReq->pParamStart[3];
- h2cParaLen = 3;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- }
- else if(BT_GSET_RESET == setType)
- {
- btOpcode = BT_LO_OP_RESET;
- h2cParaLen = 0;
- // execute h2c and check respond c2h from bt fw is correct or not
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- }
- else if(BT_GSET_TARGET_BD_ADDR == setType)
- {
- // fill h2c parameters
- btOpcode = BT_LO_OP_SET_TARGET_BD_ADDR_L;
- h2cParaBuf[0] = pBtReq->pParamStart[1];
- h2cParaBuf[1] = pBtReq->pParamStart[2];
- h2cParaBuf[2] = pBtReq->pParamStart[3];
- h2cParaLen = 3;
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
-
- btOpcode = BT_LO_OP_SET_TARGET_BD_ADDR_H;
- h2cParaBuf[0] = pBtReq->pParamStart[4];
- h2cParaBuf[1] = pBtReq->pParamStart[5];
- h2cParaBuf[2] = pBtReq->pParamStart[6];
- h2cParaLen = 3;
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- }
- else if(BT_GSET_TX_PWR_FINETUNE == setType)
- {
- // fill h2c parameters
- btOpcode = BT_LO_OP_SET_TX_POWER_CALIBRATION;
- h2cParaBuf[0] = calVal;
- h2cParaLen = 1;
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- }
- else if(BT_SET_TRACKING_INTERVAL == setType)
- {
- // BT_LO_OP_SET_TRACKING_INTERVAL = 0x22,
- // BT_LO_OP_SET_THERMAL_METER = 0x23,
- // BT_LO_OP_ENABLE_CFO_TRACKING = 0x24,
- btOpcode = BT_LO_OP_SET_TRACKING_INTERVAL;
- h2cParaBuf[0] = calVal;
- h2cParaLen = 1;
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- }
- else if(BT_SET_THERMAL_METER == setType)
- {
- btOpcode = BT_LO_OP_SET_THERMAL_METER;
- h2cParaBuf[0] = calVal;
- h2cParaLen = 1;
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- }
- else if(BT_ENABLE_CFO_TRACKING == setType)
- {
- btOpcode = BT_LO_OP_ENABLE_CFO_TRACKING;
- h2cParaBuf[0] = calVal;
- h2cParaLen = 1;
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
- }
-
- pBtRsp->status = BT_STATUS_SUCCESS;
- return paraLen;
-}
-
-
-
-u2Byte
-mptbt_BtSetTxRxPars(
- IN PADAPTER Adapter,
- IN PBT_REQ_CMD pBtReq,
- IN PBT_RSP_CMD pBtRsp
- )
-{
- u1Byte h2cParaBuf[6] ={0};
- u1Byte h2cParaLen=0;
- u2Byte paraLen=0;
- u1Byte retStatus=BT_STATUS_BT_OP_SUCCESS;
- u1Byte btOpcode;
- u1Byte btOpcodeVer=0;
- PBT_TXRX_PARAMETERS pTxRxPars=(PBT_TXRX_PARAMETERS)&pBtReq->pParamStart[0];
- u2Byte lenTxRx=sizeof(BT_TXRX_PARAMETERS);
- u1Byte i;
- u1Byte bdAddr[6]={0};
-
- //
- // check upper layer parameters
- //
-
- // 1. check upper layer opcode version
- if(pBtReq->opCodeVer != 1)
- {
- DBG_8192C("[MPT], Error!! Upper OP code version not match!!!\n");
- pBtRsp->status = BT_STATUS_OPCODE_U_VERSION_MISMATCH;
- return paraLen;
- }
- // 2. check upper layer parameter length
- if(pBtReq->paraLength == sizeof(BT_TXRX_PARAMETERS))
- {
- DBG_8192C ("[MPT], pTxRxPars->txrxChannel=0x%x \n", pTxRxPars->txrxChannel);
- DBG_8192C ("[MPT], pTxRxPars->txrxTxPktCnt=0x%8x \n", pTxRxPars->txrxTxPktCnt);
- DBG_8192C ("[MPT], pTxRxPars->txrxTxPktInterval=0x%x \n", pTxRxPars->txrxTxPktInterval);
- DBG_8192C ("[MPT], pTxRxPars->txrxPayloadType=0x%x \n", pTxRxPars->txrxPayloadType);
- DBG_8192C ("[MPT], pTxRxPars->txrxPktType=0x%x \n", pTxRxPars->txrxPktType);
- DBG_8192C ("[MPT], pTxRxPars->txrxPayloadLen=0x%x \n", pTxRxPars->txrxPayloadLen);
- DBG_8192C ("[MPT], pTxRxPars->txrxPktHeader=0x%x \n", pTxRxPars->txrxPktHeader);
- DBG_8192C ("[MPT], pTxRxPars->txrxWhitenCoeff=0x%x \n", pTxRxPars->txrxWhitenCoeff);
- bdAddr[0] = pTxRxPars->txrxBdaddr[5];
- bdAddr[1] = pTxRxPars->txrxBdaddr[4];
- bdAddr[2] = pTxRxPars->txrxBdaddr[3];
- bdAddr[3] = pTxRxPars->txrxBdaddr[2];
- bdAddr[4] = pTxRxPars->txrxBdaddr[1];
- bdAddr[5] = pTxRxPars->txrxBdaddr[0];
- DBG_8192C ("[MPT], pTxRxPars->txrxBdaddr: %s", &bdAddr[0]);
- DBG_8192C ("[MPT], pTxRxPars->txrxTxGainIndex=0x%x \n", pTxRxPars->txrxTxGainIndex);
- }
- else
- {
- DBG_8192C ("[MPT], Error!! pBtReq->paraLength=%d, correct Len=%d\n", pBtReq->paraLength, lenTxRx);
- pBtRsp->status = BT_STATUS_PARAMETER_FORMAT_ERROR_U;
- return paraLen;
- }
-
- //
- // execute lower layer opcodes
- //
-
- // fill h2c parameters
- btOpcode = BT_LO_OP_SET_PKT_HEADER;
- if(pTxRxPars->txrxPktHeader > 0x3ffff)
- {
- DBG_8192C ("[MPT], Error!! pTxRxPars->txrxPktHeader=0x%x is out of range, (should be between 0x0~0x3ffff)\n", pTxRxPars->txrxPktHeader);
- pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- else
- {
- h2cParaBuf[0] = (u1Byte)(pTxRxPars->txrxPktHeader&0xff);
- h2cParaBuf[1] = (u1Byte)((pTxRxPars->txrxPktHeader&0xff00)>>8);
- h2cParaBuf[2] = (u1Byte)((pTxRxPars->txrxPktHeader&0xff0000)>>16);
- h2cParaLen = 3;
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- }
-
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
-
- // fill h2c parameters
- btOpcode = BT_LO_OP_SET_PKT_TYPE_LEN;
- {
- u2Byte payloadLenLimit=0;
- switch(pTxRxPars->txrxPktType)
- {
- case MP_BT_PKT_DH1:
- payloadLenLimit = 27*8;
- break;
- case MP_BT_PKT_DH3:
- payloadLenLimit = 183*8;
- break;
- case MP_BT_PKT_DH5:
- payloadLenLimit = 339*8;
- break;
- case MP_BT_PKT_2DH1:
- payloadLenLimit = 54*8;
- break;
- case MP_BT_PKT_2DH3:
- payloadLenLimit = 367*8;
- break;
- case MP_BT_PKT_2DH5:
- payloadLenLimit = 679*8;
- break;
- case MP_BT_PKT_3DH1:
- payloadLenLimit = 83*8;
- break;
- case MP_BT_PKT_3DH3:
- payloadLenLimit = 552*8;
- break;
- case MP_BT_PKT_3DH5:
- payloadLenLimit = 1021*8;
- break;
- case MP_BT_PKT_LE:
- payloadLenLimit = 39*8;
- break;
- default:
- {
- DBG_8192C ("[MPT], Error!! Unknown pTxRxPars->txrxPktType=0x%x\n", pTxRxPars->txrxPktType);
- pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- break;
- }
-
- if(pTxRxPars->txrxPayloadLen > payloadLenLimit)
- {
- DBG_8192C ("[MPT], Error!! pTxRxPars->txrxPayloadLen=0x%x, (should smaller than %d)\n",
- pTxRxPars->txrxPayloadLen, payloadLenLimit);
- pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
-
- h2cParaBuf[0] = pTxRxPars->txrxPktType;
- h2cParaBuf[1] = (u1Byte)((pTxRxPars->txrxPayloadLen&0xff));
- h2cParaBuf[2] = (u1Byte)((pTxRxPars->txrxPayloadLen&0xff00)>>8);
- h2cParaLen = 3;
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- }
-
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
-
- // fill h2c parameters
- btOpcode = BT_LO_OP_SET_PKT_CNT_L_PL_TYPE;
- if(pTxRxPars->txrxPayloadType > MP_BT_PAYLOAD_MAX)
- {
- DBG_8192C ("[MPT], Error!! pTxRxPars->txrxPayloadType=0x%x, (should be between 0~4)\n", pTxRxPars->txrxPayloadType);
- pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- else
- {
- h2cParaBuf[0] = (u1Byte)((pTxRxPars->txrxTxPktCnt&0xff));
- h2cParaBuf[1] = (u1Byte)((pTxRxPars->txrxTxPktCnt&0xff00)>>8);
- h2cParaBuf[2] = pTxRxPars->txrxPayloadType;
- h2cParaLen = 3;
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- }
-
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
-
- // fill h2c parameters
- btOpcode = BT_LO_OP_SET_PKT_CNT_H_PKT_INTV;
- if(pTxRxPars->txrxTxPktInterval > 15)
- {
- DBG_8192C ("[MPT], Error!! pTxRxPars->txrxTxPktInterval=0x%x, (should be between 0~15)\n", pTxRxPars->txrxTxPktInterval);
- pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- else
- {
- h2cParaBuf[0] = (u1Byte)((pTxRxPars->txrxTxPktCnt&0xff0000)>>16);
- h2cParaBuf[1] = (u1Byte)((pTxRxPars->txrxTxPktCnt&0xff000000)>>24);
- h2cParaBuf[2] = pTxRxPars->txrxTxPktInterval;
- h2cParaLen = 3;
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- }
-
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
-
- // fill h2c parameters
- btOpcode = BT_LO_OP_SET_WHITENCOEFF;
- {
- h2cParaBuf[0] = pTxRxPars->txrxWhitenCoeff;
- h2cParaLen = 1;
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- }
-
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
-
-
- // fill h2c parameters
- btOpcode = BT_LO_OP_SET_CHNL_TX_GAIN;
- if( (pTxRxPars->txrxChannel > 78) ||
- (pTxRxPars->txrxTxGainIndex > 7) )
- {
- DBG_8192C ("[MPT], Error!! pTxRxPars->txrxChannel=0x%x, (should be between 0~78)\n", pTxRxPars->txrxChannel);
- DBG_8192C ("[MPT], Error!! pTxRxPars->txrxTxGainIndex=0x%x, (should be between 0~7)\n", pTxRxPars->txrxTxGainIndex);
- pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- else
- {
- h2cParaBuf[0] = pTxRxPars->txrxChannel;
- h2cParaBuf[1] = pTxRxPars->txrxTxGainIndex;
- h2cParaLen = 2;
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- }
-
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
-
- // fill h2c parameters
- btOpcode = BT_LO_OP_SET_BD_ADDR_L;
- if( (pTxRxPars->txrxBdaddr[0]==0) &&
- (pTxRxPars->txrxBdaddr[1]==0) &&
- (pTxRxPars->txrxBdaddr[2]==0) &&
- (pTxRxPars->txrxBdaddr[3]==0) &&
- (pTxRxPars->txrxBdaddr[4]==0) &&
- (pTxRxPars->txrxBdaddr[5]==0) )
- {
- DBG_8192C ("[MPT], Error!! pTxRxPars->txrxBdaddr=all zero\n");
- pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- if( (pTxRxPars->txrxBdaddr[0]==0xff) &&
- (pTxRxPars->txrxBdaddr[1]==0xff) &&
- (pTxRxPars->txrxBdaddr[2]==0xff) &&
- (pTxRxPars->txrxBdaddr[3]==0xff) &&
- (pTxRxPars->txrxBdaddr[4]==0xff) &&
- (pTxRxPars->txrxBdaddr[5]==0xff) )
- {
- DBG_8192C ("[MPT], Error!! pTxRxPars->txrxBdaddr=all 0xf\n");
- pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
-
- {
- h2cParaBuf[0] = pTxRxPars->txrxBdaddr[0];
- h2cParaBuf[1] = pTxRxPars->txrxBdaddr[1];
- h2cParaBuf[2] = pTxRxPars->txrxBdaddr[2];
- h2cParaLen = 3;
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- }
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
-
- btOpcode = BT_LO_OP_SET_BD_ADDR_H;
- {
- h2cParaBuf[0] = pTxRxPars->txrxBdaddr[3];
- h2cParaBuf[1] = pTxRxPars->txrxBdaddr[4];
- h2cParaBuf[2] = pTxRxPars->txrxBdaddr[5];
- h2cParaLen = 3;
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- }
- // ckeck bt return status.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
-
- pBtRsp->status = BT_STATUS_SUCCESS;
- return paraLen;
-}
-
-
-
-u2Byte
-mptbt_BtTestCtrl(
- IN PADAPTER Adapter,
- IN PBT_REQ_CMD pBtReq,
- IN PBT_RSP_CMD pBtRsp
- )
-{
- u1Byte h2cParaBuf[6] ={0};
- u1Byte h2cParaLen=0;
- u2Byte paraLen=0;
- u1Byte retStatus=BT_STATUS_BT_OP_SUCCESS;
- u1Byte btOpcode;
- u1Byte btOpcodeVer=0;
- u1Byte testCtrl=0;
-
- //
- // check upper layer parameters
- //
-
- // 1. check upper layer opcode version
- if(pBtReq->opCodeVer != 1)
- {
- DBG_8192C("[MPT], Error!! Upper OP code version not match!!!\n");
- pBtRsp->status = BT_STATUS_OPCODE_U_VERSION_MISMATCH;
- return paraLen;
- }
- // 2. check upper layer parameter length
- if(1 == pBtReq->paraLength)
- {
- testCtrl = pBtReq->pParamStart[0];
- DBG_8192C("[MPT], testCtrl=%d \n", testCtrl);
- }
- else
- {
- DBG_8192C("[MPT], Error!! wrong parameter length=%d (should be 1)\n", pBtReq->paraLength);
- pBtRsp->status = BT_STATUS_PARAMETER_FORMAT_ERROR_U;
- return paraLen;
- }
-
- //
- // execute lower layer opcodes
- //
-
- // 1. fill h2c parameters
- // check bt mode
- btOpcode = BT_LO_OP_TEST_CTRL;
- if(testCtrl >= MP_BT_TEST_MAX)
- {
- DBG_8192C("[MPT], Error!! testCtrl=0x%x, (should be between smaller or equal to 0x%x)\n",
- testCtrl, MP_BT_TEST_MAX-1);
- pBtRsp->status = BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
- return paraLen;
- }
- else
- {
- h2cParaBuf[0] = testCtrl;
- h2cParaLen = 1;
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- }
-
- // 3. construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
-
- pBtRsp->status = BT_STATUS_SUCCESS;
- return paraLen;
-}
-
-
-u2Byte
-mptbt_TestBT(
- IN PADAPTER Adapter,
- IN PBT_REQ_CMD pBtReq,
- IN PBT_RSP_CMD pBtRsp
- )
-{
-
- u1Byte h2cParaBuf[6] ={0};
- u1Byte h2cParaLen=0;
- u2Byte paraLen=0;
- u1Byte retStatus=BT_STATUS_BT_OP_SUCCESS;
- u1Byte btOpcode;
- u1Byte btOpcodeVer=0;
- u1Byte testCtrl=0;
-
- // 1. fill h2c parameters
- btOpcode = 0x11;
- h2cParaBuf[0] = 0x11;
- h2cParaBuf[1] = 0x0;
- h2cParaBuf[2] = 0x0;
- h2cParaBuf[3] = 0x0;
- h2cParaBuf[4] = 0x0;
- h2cParaLen = 1;
- // retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
- retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, h2cParaBuf, h2cParaLen);
-
-
- // 3. construct respond status code and data.
- if(BT_STATUS_BT_OP_SUCCESS != retStatus)
- {
- pBtRsp->status = ((btOpcode<<8)|retStatus);
- DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
- return paraLen;
- }
-
- pBtRsp->status = BT_STATUS_SUCCESS;
- return paraLen;
-}
-
-VOID
-mptbt_BtControlProcess(
- PADAPTER Adapter,
- PVOID pInBuf
- )
-{
- u1Byte H2C_Parameter[6] ={0};
- PBT_H2C pH2c=(PBT_H2C)&H2C_Parameter[0];
- PMPT_CONTEXT pMptCtx=&(Adapter->mppriv.MptCtx);
- PBT_REQ_CMD pBtReq=(PBT_REQ_CMD)pInBuf;
- PBT_RSP_CMD pBtRsp=(PBT_RSP_CMD)&pMptCtx->mptOutBuf[0];
- u1Byte i;
-
- DBG_8192C("[MPT], mptbt_BtControlProcess()=========>\n");
-
- DBG_8192C("[MPT], input opCodeVer=%d\n", pBtReq->opCodeVer);
- DBG_8192C("[MPT], input OpCode=%d\n", pBtReq->OpCode);
- DBG_8192C("[MPT], paraLength=%d \n", pBtReq->paraLength);
- if(pBtReq->paraLength)
- {
- //DBG_8192C("[MPT], parameters(hex):0x%x %d \n",&pBtReq->pParamStart[0], pBtReq->paraLength);
- }
-
- // The following we should maintain the User OP codes sent by upper layer
-
- pBtRsp->status = BT_STATUS_SUCCESS;
- pMptCtx->mptOutLen = 4; //length of (BT_RSP_CMD.status+BT_RSP_CMD.paraLength)
- pBtRsp->paraLength = 0x0;
-
- _rtw_memset((PVOID)&pMptCtx->mptOutBuf[0], '\0',100);
-
- switch(pBtReq->OpCode)
- {
- case BT_UP_OP_BT_READY:
- DBG_8192C("[MPT], OPcode : [BT_READY]\n");
- pBtRsp->paraLength = mptbt_BtReady(Adapter, pBtReq, pBtRsp);
- break;
- case BT_UP_OP_BT_SET_MODE:
- DBG_8192C("[MPT], OPcode : [BT_SET_MODE]\n");
- pBtRsp->paraLength = mptbt_BtSetMode(Adapter, pBtReq, pBtRsp);
- break;
- case BT_UP_OP_BT_SET_TX_RX_PARAMETER:
- DBG_8192C("[MPT], OPcode : [BT_SET_TXRX_PARAMETER]\n");
- pBtRsp->paraLength = mptbt_BtSetTxRxPars(Adapter, pBtReq, pBtRsp);
- break;
- case BT_UP_OP_BT_SET_GENERAL:
- DBG_8192C("[MPT], OPcode : [BT_SET_GENERAL]\n");
- pBtRsp->paraLength = mptbt_BtSetGeneral(Adapter, pBtReq, pBtRsp);
- break;
- case BT_UP_OP_BT_GET_GENERAL:
- DBG_8192C("[MPT], OPcode : [BT_GET_GENERAL]\n");
- pBtRsp->paraLength = mptbt_BtGetGeneral(Adapter, pBtReq, pBtRsp);
- break;
- case BT_UP_OP_BT_TEST_CTRL:
- DBG_8192C("[MPT], OPcode : [BT_TEST_CTRL]\n");
- pBtRsp->paraLength = mptbt_BtTestCtrl(Adapter, pBtReq, pBtRsp);
- break;
- case BT_UP_OP_TEST_BT:
- DBG_8192C("[MPT], OPcode : [TEST_BT]\n");
- pBtRsp->paraLength = mptbt_TestBT(Adapter, pBtReq, pBtRsp);
- break;
- default:
- DBG_8192C("[MPT], Error!! OPcode : UNDEFINED!!!!\n");
- pBtRsp->status = BT_STATUS_UNKNOWN_OPCODE_U;
- pBtRsp->paraLength = 0x0;
- break;
- }
-
- DBG_8192C("pBtRsp->paraLength =%d \n",pBtRsp->paraLength);
-
- pMptCtx->mptOutLen += pBtRsp->paraLength;
-
- DBG_8192C("\n [MPT], OUT to DLL pMptCtx->mptOutLen=%d ,pBtRsp->paraLength =%d ",pMptCtx->mptOutLen,pBtRsp->paraLength);
-
- DBG_8192C("\n [MPT], mptbt_BtControlProcess()<=========\n");
-}
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+
+#include "rtw_bt_mp.h"
+#include <drv_types.h>
+#include <rtl8723a_hal.h>
+
+#ifdef CONFIG_RTL8723A
+
+void MPh2c_timeout_handle(void *FunctionContext)
+{
+ _adapter *pAdapter = (_adapter *)FunctionContext;
+ PMPT_CONTEXT pMptCtx=&pAdapter->mppriv.MptCtx;
+
+ DBG_8192C("[MPT], MPh2c_timeout_handle \n");
+
+ pMptCtx->bMPh2c_timeout=_TRUE;
+
+ _rtw_up_sema(&pMptCtx->MPh2c_Sema);
+
+ //_cancel_timer_ex( &pMptCtx->MPh2c_timeout_timer);
+
+ return;
+}
+u32 WaitC2Hevent( PADAPTER pAdapter,BOOLEAN *C2H_event ,u32 delay_time)
+{
+ PMPT_CONTEXT pMptCtx=&(pAdapter->mppriv.MptCtx);
+ pMptCtx->bMPh2c_timeout=_FALSE;
+ DBG_8192C("WaitC2Hevent _set_timer \n");
+ _set_timer( &pMptCtx->MPh2c_timeout_timer, delay_time );
+
+ _rtw_down_sema(&pMptCtx->MPh2c_Sema);
+
+ if( pMptCtx->bMPh2c_timeout == _TRUE )
+ {
+ C2H_event =_FALSE;
+ DBG_8192C("WaitC2Hevent bMPh2c_timeout _TRUE \n");
+ return _FALSE;
+ }
+
+ return _TRUE;
+
+}
+
+BT_CTRL_STATUS
+mptbt_CheckC2hFrame(
+ PADAPTER Adapter,
+ PBT_H2C pH2c,
+ PBT_EXT_C2H pExtC2h
+ )
+{
+ BT_CTRL_STATUS c2hStatus = BT_STATUS_C2H_SUCCESS;
+
+ //DBG_8192C("[MPT], MPT rsp C2H hex: %x %x %x %x %x %x \n"), pExtC2h , pExtC2h+1 ,pExtC2h+2 ,pExtC2h+3 ,pExtC2h+4 ,pExtC2h+5);
+
+ DBG_8192C("[MPT], statusCode = 0x%x\n", pExtC2h->statusCode);
+ DBG_8192C("[MPT], retLen = %d\n", pExtC2h->retLen);
+ DBG_8192C("[MPT], opCodeVer : req/rsp=%d/%d\n", pH2c->opCodeVer, pExtC2h->opCodeVer);
+ DBG_8192C("[MPT], reqNum : req/rsp=%d/%d\n", pH2c->reqNum, pExtC2h->reqNum);
+ if(pExtC2h->reqNum != pH2c->reqNum)
+ {
+ c2hStatus = BT_STATUS_C2H_REQNUM_MISMATCH;
+ DBG_8192C("[MPT], Error!! C2H reqNum Mismatch!!\n");
+ }
+ else if(pExtC2h->opCodeVer != pH2c->opCodeVer)
+ {
+ c2hStatus = BT_STATUS_OPCODE_L_VERSION_MISMATCH;
+ DBG_8192C("[MPT], Error!! OPCode version L mismatch!!\n");
+ }
+
+ return c2hStatus;
+}
+
+extern s32 FillH2CCmd(PADAPTER padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
+
+BT_CTRL_STATUS
+mptbt_SendH2c(
+ PADAPTER Adapter,
+ PBT_H2C pH2c,
+ u2Byte h2cCmdLen
+ )
+{
+ //KIRQL OldIrql = KeGetCurrentIrql();
+ BT_CTRL_STATUS h2cStatus=BT_STATUS_H2C_SUCCESS;
+ PMPT_CONTEXT pMptCtx=&(Adapter->mppriv.MptCtx);
+ u1Byte i;
+
+ DBG_8192C("[MPT], mptbt_SendH2c()=========>\n");
+
+ //PlatformResetEvent(&pMptCtx->MptH2cRspEvent);
+ //PlatformResetEvent(&pMptCtx->MptBtC2hEvent);
+
+// if(OldIrql == PASSIVE_LEVEL)
+// {
+ //RTPRINT_DATA(FMPBT, FMPBT_H2C_CONTENT, ("[MPT], MPT H2C hex: \n"), pH2c, h2cCmdLen);
+
+ for(i=0; i<BT_H2C_MAX_RETRY; i++)
+ {
+ DBG_8192C("[MPT], Send H2C command to wifi!!!\n");
+ FillH2CCmd(Adapter, 70, h2cCmdLen, (pu1Byte)pH2c);
+ pMptCtx->h2cReqNum++;
+ pMptCtx->h2cReqNum %= 16;
+
+ if(WaitC2Hevent(Adapter, &pMptCtx->MptH2cRspEvent, 200))
+ {
+ DBG_8192C("[MPT], Received WiFi MptH2cRspEvent!!!\n");
+ if(WaitC2Hevent(Adapter, &pMptCtx->MptBtC2hEvent, 800))
+ {
+ DBG_8192C("[MPT], Received BT MptBtC2hEvent!!!\n");
+ break;
+ }
+ else
+ {
+ DBG_8192C("[MPT], Error!!BT MptBtC2hEvent timeout!!\n");
+ h2cStatus = BT_STATUS_H2C_BT_NO_RSP;
+ }
+ }
+ else
+ {
+ DBG_8192C("[MPT], Error!!WiFi MptH2cRspEvent timeout!!\n");
+ h2cStatus = BT_STATUS_H2C_TIMTOUT;
+ }
+ }
+// }
+// else
+// {
+// RT_ASSERT(FALSE, ("[MPT], mptbt_SendH2c() can only run under PASSIVE_LEVEL!!\n"));
+// h2cStatus = BT_STATUS_WRONG_LEVEL;
+// }
+
+ DBG_8192C("[MPT], mptbt_SendH2c()<=========\n");
+ return h2cStatus;
+}
+
+
+
+BT_CTRL_STATUS
+mptbt_CheckBtRspStatus(
+ PADAPTER Adapter,
+ PBT_EXT_C2H pExtC2h
+ )
+{
+ BT_CTRL_STATUS retStatus=BT_OP_STATUS_SUCCESS;
+
+ switch(pExtC2h->statusCode)
+ {
+ case BT_OP_STATUS_SUCCESS:
+ retStatus = BT_STATUS_BT_OP_SUCCESS;
+ DBG_8192C("[MPT], BT status : BT_STATUS_SUCCESS\n");
+ break;
+ case BT_OP_STATUS_VERSION_MISMATCH:
+ retStatus = BT_STATUS_OPCODE_L_VERSION_MISMATCH;
+ DBG_8192C("[MPT], BT status : BT_STATUS_OPCODE_L_VERSION_MISMATCH\n");
+ break;
+ case BT_OP_STATUS_UNKNOWN_OPCODE:
+ retStatus = BT_STATUS_UNKNOWN_OPCODE_L;
+ DBG_8192C("[MPT], BT status : BT_STATUS_UNKNOWN_OPCODE_L\n");
+ break;
+ case BT_OP_STATUS_ERROR_PARAMETER:
+ retStatus = BT_STATUS_PARAMETER_FORMAT_ERROR_L;
+ DBG_8192C("[MPT], BT status : BT_STATUS_PARAMETER_FORMAT_ERROR_L\n");
+ break;
+ default:
+ retStatus = BT_STATUS_UNKNOWN_STATUS_L;
+ DBG_8192C("[MPT], BT status : BT_STATUS_UNKNOWN_STATUS_L\n");
+ break;
+ }
+
+ return retStatus;
+}
+
+
+
+BT_CTRL_STATUS
+mptbt_BtFwOpCodeProcess(
+ PADAPTER Adapter,
+ u1Byte btFwOpCode,
+ u1Byte opCodeVer,
+ pu1Byte pH2cPar,
+ u1Byte h2cParaLen
+ )
+{
+ u1Byte H2C_Parameter[6] ={0};
+ PBT_H2C pH2c=(PBT_H2C)&H2C_Parameter[0];
+ PMPT_CONTEXT pMptCtx=&(Adapter->mppriv.MptCtx);
+ PBT_EXT_C2H pExtC2h=(PBT_EXT_C2H)&pMptCtx->c2hBuf[0];
+ u2Byte paraLen=0,i;
+ BT_CTRL_STATUS h2cStatus=BT_STATUS_H2C_SUCCESS, c2hStatus=BT_STATUS_C2H_SUCCESS;
+ BT_CTRL_STATUS retStatus=BT_STATUS_H2C_BT_NO_RSP;
+
+ pH2c->opCode = btFwOpCode;
+ pH2c->opCodeVer = opCodeVer;
+ pH2c->reqNum = pMptCtx->h2cReqNum;
+ //PlatformMoveMemory(&pH2c->buf[0], pH2cPar, h2cParaLen);
+ //_rtw_memcpy(&pH2c->buf[0], pH2cPar, h2cParaLen);
+ _rtw_memcpy(pH2c->buf, pH2cPar, h2cParaLen);
+
+ DBG_8192C("[MPT], pH2c->opCode=%d\n", pH2c->opCode);
+ DBG_8192C("[MPT], pH2c->opCodeVer=%d\n", pH2c->opCodeVer);
+ DBG_8192C("[MPT], pH2c->reqNum=%d\n", pH2c->reqNum);
+ DBG_8192C("[MPT], h2c parameter length=%d\n", h2cParaLen);
+ if(h2cParaLen)
+ {
+ DBG_8192C("[MPT], parameters(hex): \n");
+ for(i=0;i<h2cParaLen;i++)
+ {
+ DBG_8192C(" 0x%x \n", pH2c->buf[i]);
+ }
+ }
+
+ h2cStatus = mptbt_SendH2c(Adapter, pH2c, h2cParaLen+2);
+ if(BT_STATUS_H2C_SUCCESS == h2cStatus)
+ {
+ // if reach here, it means H2C get the correct c2h response,
+ c2hStatus = mptbt_CheckC2hFrame(Adapter, pH2c, pExtC2h);
+ if(BT_STATUS_C2H_SUCCESS == c2hStatus)
+ {
+ retStatus = mptbt_CheckBtRspStatus(Adapter, pExtC2h);
+ }
+ else
+ {
+ DBG_8192C("[MPT], Error!! C2H failed for pH2c->opCode=%d\n", pH2c->opCode);
+ // check c2h status error, return error status code to upper layer.
+ retStatus = c2hStatus;
+ }
+ }
+ else
+ {
+ DBG_8192C("[MPT], Error!! H2C failed for pH2c->opCode=%d\n", pH2c->opCode);
+ // check h2c status error, return error status code to upper layer.
+ retStatus = h2cStatus;
+ }
+
+ return retStatus;
+}
+
+
+
+
+u2Byte
+mptbt_BtReady(
+ PADAPTER Adapter,
+ PBT_REQ_CMD pBtReq,
+ PBT_RSP_CMD pBtRsp
+ )
+{
+ u1Byte h2cParaBuf[6] ={0};
+ u1Byte h2cParaLen=0;
+ u2Byte paraLen=0;
+ u1Byte retStatus=BT_STATUS_BT_OP_SUCCESS;
+ u1Byte btOpcode;
+ u1Byte btOpcodeVer=0;
+ PMPT_CONTEXT pMptCtx=&(Adapter->mppriv.MptCtx);
+ PBT_EXT_C2H pExtC2h=(PBT_EXT_C2H)&pMptCtx->c2hBuf[0];
+ u1Byte i;
+ u1Byte btFwVer=0, bdAddr[6]={0};
+ u2Byte btRealFwVer=0;
+ pu2Byte pu2Tmp=NULL;
+
+ //
+ // check upper layer parameters
+ //
+
+ // 1. check upper layer opcode version
+ if(pBtReq->opCodeVer != 1)
+ {
+ DBG_8192C("[MPT], Error!! Upper OP code version not match!!!\n");
+ pBtRsp->status = BT_STATUS_OPCODE_U_VERSION_MISMATCH;
+ return paraLen;
+ }
+
+ pBtRsp->pParamStart[0] = MP_BT_NOT_READY;
+ paraLen = 10;
+ //
+ // execute lower layer opcodes
+ //
+
+ // Get BT FW version
+ // fill h2c parameters
+ btOpcode = BT_LO_OP_GET_BT_VERSION;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ else
+ {
+ pu2Tmp = (pu2Byte)&pExtC2h->buf[0];
+ btRealFwVer = *pu2Tmp;
+ btFwVer = pExtC2h->buf[1];
+ DBG_8192C("[MPT], btRealFwVer=0x%x, btFwVer=0x%x\n", btRealFwVer, btFwVer);
+ }
+
+ // Get BD Address
+ // fill h2c parameters
+ btOpcode = BT_LO_OP_GET_BD_ADDR_L;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ else
+ {
+ bdAddr[5] = pExtC2h->buf[0];
+ bdAddr[4] = pExtC2h->buf[1];
+ bdAddr[3] = pExtC2h->buf[2];
+ }
+
+ // fill h2c parameters
+ btOpcode = BT_LO_OP_GET_BD_ADDR_H;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ else
+ {
+ bdAddr[2] = pExtC2h->buf[0];
+ bdAddr[1] = pExtC2h->buf[1];
+ bdAddr[0] = pExtC2h->buf[2];
+ }
+ DBG_8192C("[MPT], Local BDAddr:");
+ for(i=0; i<6; i++)
+ {
+ DBG_8192C(" 0x%x ", bdAddr[i]);
+ }
+ pBtRsp->status = BT_STATUS_SUCCESS;
+ pBtRsp->pParamStart[0] = MP_BT_READY;
+ pu2Tmp = (pu2Byte)&pBtRsp->pParamStart[1];
+ *pu2Tmp = btRealFwVer;
+ pBtRsp->pParamStart[3] = btFwVer;
+ for(i=0; i<6; i++)
+ {
+ pBtRsp->pParamStart[4+i] = bdAddr[5-i];
+ }
+
+ return paraLen;
+}
+
+void mptbt_close_WiFiRF(PADAPTER Adapter)
+{
+ PHY_SetBBReg(Adapter, 0x824, 0xF, 0x0);
+ PHY_SetBBReg(Adapter, 0x824, 0x700000, 0x0);
+ PHY_SetRFReg(Adapter, RF90_PATH_A, 0x0, 0xF0000, 0x0);
+}
+
+void mptbt_open_WiFiRF(PADAPTER Adapter)
+{
+ PHY_SetBBReg(Adapter, 0x824, 0x700000, 0x3);
+ PHY_SetBBReg(Adapter, 0x824, 0xF, 0x2);
+ PHY_SetRFReg(Adapter, RF90_PATH_A, 0x0, 0xF0000, 0x3);
+}
+
+u4Byte mptbt_switch_RF(PADAPTER Adapter, u1Byte Enter)
+{
+ u2Byte tmp_2byte = 0;
+
+ //Enter test mode
+ if (Enter) {
+ ////1>. close WiFi RF
+ mptbt_close_WiFiRF(Adapter);
+
+ ////2>. change ant switch to BT
+ tmp_2byte = rtw_read16(Adapter, 0x860);
+ tmp_2byte = tmp_2byte | BIT(9);
+ tmp_2byte = tmp_2byte & (~BIT(8));
+ rtw_write16(Adapter, 0x860, tmp_2byte);
+ rtw_write16(Adapter, 0x870, 0x300);
+ } else {
+ ////1>. Open WiFi RF
+ mptbt_open_WiFiRF(Adapter);
+
+ ////2>. change ant switch back
+ tmp_2byte = rtw_read16(Adapter, 0x860);
+ tmp_2byte = tmp_2byte | BIT(8);
+ tmp_2byte = tmp_2byte & (~BIT(9));
+ rtw_write16(Adapter, 0x860, tmp_2byte);
+ rtw_write16(Adapter, 0x870, 0x300);
+ }
+
+ return 0;
+}
+
+u2Byte
+mptbt_BtSetMode(
+ PADAPTER Adapter,
+ PBT_REQ_CMD pBtReq,
+ PBT_RSP_CMD pBtRsp
+ )
+{
+ u1Byte h2cParaBuf[6] ={0};
+ u1Byte h2cParaLen=0;
+ u2Byte paraLen=0;
+ u1Byte retStatus=BT_STATUS_BT_OP_SUCCESS;
+ u1Byte btOpcode;
+ u1Byte btOpcodeVer=0;
+ u1Byte btModeToSet=0;
+
+ //
+ // check upper layer parameters
+ //
+ // 1. check upper layer opcode version
+ if(pBtReq->opCodeVer != 1)
+ {
+ DBG_8192C("[MPT], Error!! Upper OP code version not match!!!\n");
+ pBtRsp->status = BT_STATUS_OPCODE_U_VERSION_MISMATCH;
+ return paraLen;
+ }
+ // 2. check upper layer parameter length
+ if(1 == pBtReq->paraLength)
+ {
+ btModeToSet = pBtReq->pParamStart[0];
+ DBG_8192C("[MPT], BtTestMode=%d \n", btModeToSet);
+ }
+ else
+ {
+ DBG_8192C("[MPT], Error!! wrong parameter length=%d (should be 1)\n", pBtReq->paraLength);
+ pBtRsp->status = BT_STATUS_PARAMETER_FORMAT_ERROR_U;
+ return paraLen;
+ }
+
+ //
+ // execute lower layer opcodes
+ //
+
+ // 1. fill h2c parameters
+ // check bt mode
+ btOpcode = BT_LO_OP_SET_BT_MODE;
+ if(btModeToSet >= MP_BT_MODE_MAX)
+ {
+ pBtRsp->status = BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ else
+ {
+ mptbt_switch_RF(Adapter, 1);
+
+ h2cParaBuf[0] = btModeToSet;
+ h2cParaLen = 1;
+ // 2. execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ }
+
+ // 3. construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS == retStatus)
+ {
+ pBtRsp->status = BT_STATUS_SUCCESS;
+ }
+ else
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ }
+
+ return paraLen;
+}
+
+
+VOID
+MPTBT_FwC2hBtMpCtrl(
+ PADAPTER Adapter,
+ pu1Byte tmpBuf,
+ u1Byte length
+ )
+{
+ u32 i;
+ PMPT_CONTEXT pMptCtx=&(Adapter->mppriv.MptCtx);
+ PBT_EXT_C2H pExtC2h=(PBT_EXT_C2H)tmpBuf;
+
+ if(Adapter->bBTFWReady == _FALSE || Adapter->registrypriv.mp_mode == 0 )
+ {
+ DBG_8192C("[MPT], %s,bBTFWReady == _FALSE\n",__func__);
+ return;
+ }
+ //cancel_timeout for h2c handle
+ _cancel_timer_ex( &pMptCtx->MPh2c_timeout_timer);
+
+ DBG_8192C("[MPT], MPTBT_FwC2hBtMpCtrl(), hex: \n");
+ for(i=0;i<=length;i++)
+ {
+ //DBG_8192C("[MPT], MPTBT_FwC2hBtMpCtrl(), hex: \n",tmpBuf[i], length);
+ DBG_8192C(" 0x%x ",tmpBuf[i]);
+ }
+ DBG_8192C("\n [MPT], pExtC2h->extendId=0x%x\n", pExtC2h->extendId);
+
+ switch(pExtC2h->extendId)
+ {
+ case EXT_C2H_WIFI_FW_ACTIVE_RSP:
+ DBG_8192C("[MPT], EXT_C2H_WIFI_FW_ACTIVE_RSP\n");
+ DBG_8192C("[MPT], pExtC2h->buf hex: \n");
+ if( length > 32 || length < 3 )
+ break ;
+ for(i=0;i<=(length-3);i++)
+ DBG_8192C(" 0x%x ",pExtC2h->buf[i]);
+ //PlatformSetEvent(&pMptCtx->MptH2cRspEvent);
+ pMptCtx->MptH2cRspEvent=_TRUE;
+ _rtw_up_sema(&pMptCtx->MPh2c_Sema);
+ break;
+ case EXT_C2H_TRIG_BY_BT_FW:
+ DBG_8192C("[MPT], EXT_C2H_TRIG_BY_BT_FW\n");
+ //PlatformMoveMemory(&pMptCtx->c2hBuf[0], tmpBuf, length);
+ _rtw_memcpy(&pMptCtx->c2hBuf[0], tmpBuf, length);
+ DBG_8192C("[MPT], pExtC2h->statusCode=0x%x\n", pExtC2h->statusCode);
+ DBG_8192C("[MPT], pExtC2h->retLen=0x%x\n", pExtC2h->retLen);
+ DBG_8192C("[MPT], pExtC2h->opCodeVer=0x%x\n", pExtC2h->opCodeVer);
+ DBG_8192C("[MPT], pExtC2h->reqNum=0x%x\n", pExtC2h->reqNum);
+ DBG_8192C("[MPT], pExtC2h->buf hex: \n");
+ for(i=0;i<=(length-3);i++)
+ DBG_8192C(" 0x%x ",pExtC2h->buf[0]);
+ //PlatformSetEvent(&pMptCtx->MptBtC2hEvent);
+ pMptCtx->MptBtC2hEvent=_TRUE;
+ _rtw_up_sema(&pMptCtx->MPh2c_Sema);
+ break;
+ default:
+ DBG_8192C("[MPT], EXT_C2H Target not found,pExtC2h->extendId =%d ,pExtC2h->reqNum=%d\n",pExtC2h->extendId,pExtC2h->reqNum);
+ break;
+ }
+
+
+
+}
+
+
+u2Byte
+mptbt_BtGetGeneral(
+ IN PADAPTER Adapter,
+ IN PBT_REQ_CMD pBtReq,
+ IN PBT_RSP_CMD pBtRsp
+ )
+{
+ PMPT_CONTEXT pMptCtx=&(Adapter->mppriv.MptCtx);
+ PBT_EXT_C2H pExtC2h=(PBT_EXT_C2H)&pMptCtx->c2hBuf[0];
+ u1Byte h2cParaBuf[6] ={0};
+ u1Byte h2cParaLen=0;
+ u2Byte paraLen=0;
+ u1Byte retStatus=BT_STATUS_BT_OP_SUCCESS;
+ u1Byte btOpcode, bdAddr[6]={0};
+ u1Byte btOpcodeVer=0;
+ u1Byte getType=0, i;
+ u2Byte getParaLen=0, validParaLen=0;
+ u1Byte regType=0, reportType=0;
+ u4Byte regAddr=0, regValue=0;
+ pu4Byte pu4Tmp;
+ pu2Byte pu2Tmp;
+ pu1Byte pu1Tmp;
+
+ //
+ // check upper layer parameters
+ //
+
+ // check upper layer opcode version
+ if(pBtReq->opCodeVer != 1)
+ {
+ DBG_8192C("[MPT], Error!! Upper OP code version not match!!!\n");
+ pBtRsp->status = BT_STATUS_OPCODE_U_VERSION_MISMATCH;
+ return paraLen;
+ }
+ // check upper layer parameter length
+ if(pBtReq->paraLength < 1)
+ {
+ DBG_8192C("[MPT], Error!! wrong parameter length=%d (should larger than 1)\n", pBtReq->paraLength);
+ pBtRsp->status = BT_STATUS_PARAMETER_FORMAT_ERROR_U;
+ return paraLen;
+ }
+ getParaLen = pBtReq->paraLength - 1;
+ getType = pBtReq->pParamStart[0];
+
+ DBG_8192C("[MPT], getType=%d, getParaLen=%d\n", getType, getParaLen);
+
+ // check parameter first
+ switch(getType)
+ {
+ case BT_GGET_REG:
+ DBG_8192C("[MPT], [BT_GGET_REG]\n");
+ validParaLen = 5;
+ if(getParaLen == validParaLen)
+ {
+ btOpcode = BT_LO_OP_READ_REG;
+ regType = pBtReq->pParamStart[1];
+ pu4Tmp = (pu4Byte)&pBtReq->pParamStart[2];
+ regAddr = *pu4Tmp;
+ DBG_8192C("[MPT], BT_GGET_REG regType=0x%x, regAddr=0x%x!!\n",
+ regType, regAddr);
+ if(regType >= BT_REG_MAX)
+ {
+ pBtRsp->status = (btOpcode<<8)| BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ else
+ {
+ if( ((BT_REG_RF==regType)&&(regAddr>0x7f)) ||
+ ((BT_REG_MODEM==regType)&&(regAddr>0x1ff)) ||
+ ((BT_REG_BLUEWIZE==regType)&&(regAddr>0xfff)) ||
+ ((BT_REG_VENDOR==regType)&&(regAddr>0xfff)) ||
+ ((BT_REG_LE==regType)&&(regAddr>0xfff)) )
+ {
+ pBtRsp->status = (btOpcode<<8)| BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ }
+ }
+ break;
+ case BT_GGET_STATUS:
+ DBG_8192C("[MPT], [BT_GGET_STATUS]\n");
+ validParaLen = 0;
+ break;
+ case BT_GGET_REPORT:
+ DBG_8192C("[MPT], [BT_GGET_REPORT]\n");
+ validParaLen = 1;
+ if(getParaLen == validParaLen)
+ {
+ reportType = pBtReq->pParamStart[1];
+ DBG_8192C("[MPT], BT_GGET_REPORT reportType=0x%x!!\n", reportType);
+ if(reportType >= BT_REPORT_MAX)
+ {
+ pBtRsp->status = BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ }
+ break;
+ default:
+ {
+ DBG_8192C("[MPT], Error!! getType=%d, out of range\n", getType);
+ pBtRsp->status = BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ break;
+ }
+ if(getParaLen != validParaLen)
+ {
+ DBG_8192C("[MPT], Error!! wrong parameter length=%d for BT_GET_GEN_CMD cmd id=0x%x, paraLen should=0x%x\n",
+ getParaLen, getType, validParaLen);
+ pBtRsp->status = BT_STATUS_PARAMETER_FORMAT_ERROR_U;
+ return paraLen;
+ }
+
+ //
+ // execute lower layer opcodes
+ //
+ if(BT_GGET_REG == getType)
+ {
+ // fill h2c parameters
+ // here we should write reg value first then write the address, adviced by Austin
+ btOpcode = BT_LO_OP_READ_REG;
+ h2cParaBuf[0] = regType;
+ h2cParaBuf[1] = pBtReq->pParamStart[2];
+ h2cParaBuf[2] = pBtReq->pParamStart[3];
+ h2cParaLen = 3;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+
+ pu2Tmp = (pu2Byte)&pExtC2h->buf[0];
+ regValue = *pu2Tmp;
+ DBG_8192C("[MPT], read reg regType=0x%x, regAddr=0x%x, regValue=0x%x\n",
+ regType, regAddr, regValue);
+
+ pu4Tmp = (pu4Byte)&pBtRsp->pParamStart[0];
+ *pu4Tmp = regValue;
+ paraLen = 4;
+ }
+ else if(BT_GGET_STATUS == getType)
+ {
+ btOpcode = BT_LO_OP_GET_BT_STATUS;
+ h2cParaLen = 0;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+
+ pBtRsp->pParamStart[0] = pExtC2h->buf[0];
+ pBtRsp->pParamStart[1] = pExtC2h->buf[1];
+ DBG_8192C("[MPT], read bt status, testMode=0x%x, testStatus=0x%x\n",
+ pBtRsp->pParamStart[0], pBtRsp->pParamStart[1]);
+ paraLen = 2;
+ }
+ else if(BT_GGET_REPORT == getType)
+ {
+ switch(reportType)
+ {
+ case BT_REPORT_RX_PACKET_CNT:
+ {
+ DBG_8192C("[MPT], [Rx Packet Counts]\n");
+ btOpcode = BT_LO_OP_GET_RX_PKT_CNT_L;
+ h2cParaLen = 0;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ pBtRsp->pParamStart[0] = pExtC2h->buf[0];
+ pBtRsp->pParamStart[1] = pExtC2h->buf[1];
+
+ btOpcode = BT_LO_OP_GET_RX_PKT_CNT_H;
+ h2cParaLen = 0;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ pBtRsp->pParamStart[2] = pExtC2h->buf[0];
+ pBtRsp->pParamStart[3] = pExtC2h->buf[1];
+ paraLen = 4;
+ }
+ break;
+ case BT_REPORT_RX_ERROR_BITS:
+ {
+ DBG_8192C("[MPT], [Rx Error Bits]\n");
+ btOpcode = BT_LO_OP_GET_RX_ERROR_BITS_L;
+ h2cParaLen = 0;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ pBtRsp->pParamStart[0] = pExtC2h->buf[0];
+ pBtRsp->pParamStart[1] = pExtC2h->buf[1];
+
+ btOpcode = BT_LO_OP_GET_RX_ERROR_BITS_H;
+ h2cParaLen = 0;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ pBtRsp->pParamStart[2] = pExtC2h->buf[0];
+ pBtRsp->pParamStart[3] = pExtC2h->buf[1];
+ paraLen = 4;
+ }
+ break;
+ case BT_REPORT_RSSI:
+ {
+ DBG_8192C("[MPT], [RSSI]\n");
+ btOpcode = BT_LO_OP_GET_RSSI;
+ h2cParaLen = 0;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ pBtRsp->pParamStart[0] = pExtC2h->buf[0];
+ pBtRsp->pParamStart[1] = pExtC2h->buf[1];
+ paraLen = 2;
+ }
+ break;
+ case BT_REPORT_CFO_HDR_QUALITY:
+ {
+ DBG_8192C("[MPT], [CFO & Header Quality]\n");
+ btOpcode = BT_LO_OP_GET_CFO_HDR_QUALITY_L;
+ h2cParaLen = 0;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ pBtRsp->pParamStart[0] = pExtC2h->buf[0];
+ pBtRsp->pParamStart[1] = pExtC2h->buf[1];
+
+ btOpcode = BT_LO_OP_GET_CFO_HDR_QUALITY_H;
+ h2cParaLen = 0;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ pBtRsp->pParamStart[2] = pExtC2h->buf[0];
+ pBtRsp->pParamStart[3] = pExtC2h->buf[1];
+ paraLen = 4;
+ }
+ break;
+ case BT_REPORT_CONNECT_TARGET_BD_ADDR:
+ {
+ DBG_8192C("[MPT], [Connected Target BD ADDR]\n");
+ btOpcode = BT_LO_OP_GET_TARGET_BD_ADDR_L;
+ h2cParaLen = 0;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ bdAddr[5] = pExtC2h->buf[0];
+ bdAddr[4] = pExtC2h->buf[1];
+ bdAddr[3] = pExtC2h->buf[2];
+
+ btOpcode = BT_LO_OP_GET_TARGET_BD_ADDR_H;
+ h2cParaLen = 0;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ bdAddr[2] = pExtC2h->buf[0];
+ bdAddr[1] = pExtC2h->buf[1];
+ bdAddr[0] = pExtC2h->buf[2];
+
+ DBG_8192C("[MPT], Connected Target BDAddr:%s", bdAddr);
+ for(i=0; i<6; i++)
+ {
+ pBtRsp->pParamStart[i] = bdAddr[5-i];
+ }
+ paraLen = 6;
+ }
+ break;
+ default:
+ pBtRsp->status = BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ break;
+ }
+ }
+
+ pBtRsp->status = BT_STATUS_SUCCESS;
+ return paraLen;
+}
+
+
+
+u2Byte
+mptbt_BtSetGeneral(
+ IN PADAPTER Adapter,
+ IN PBT_REQ_CMD pBtReq,
+ IN PBT_RSP_CMD pBtRsp
+ )
+{
+ u1Byte h2cParaBuf[6] ={0};
+ u1Byte h2cParaLen=0;
+ u2Byte paraLen=0;
+ u1Byte retStatus=BT_STATUS_BT_OP_SUCCESS;
+ u1Byte btOpcode;
+ u1Byte btOpcodeVer=0;
+ u1Byte setType=0;
+ u2Byte setParaLen=0, validParaLen=0;
+ u1Byte regType=0, bdAddr[6]={0}, calVal=0;
+ u4Byte regAddr=0, regValue=0;
+ pu4Byte pu4Tmp;
+ pu2Byte pu2Tmp;
+ pu1Byte pu1Tmp;
+
+ //
+ // check upper layer parameters
+ //
+
+ // check upper layer opcode version
+ if(pBtReq->opCodeVer != 1)
+ {
+ DBG_8192C("[MPT], Error!! Upper OP code version not match!!!\n");
+ pBtRsp->status = BT_STATUS_OPCODE_U_VERSION_MISMATCH;
+ return paraLen;
+ }
+ // check upper layer parameter length
+ if(pBtReq->paraLength < 1)
+ {
+ DBG_8192C("[MPT], Error!! wrong parameter length=%d (should larger than 1)\n", pBtReq->paraLength);
+ pBtRsp->status = BT_STATUS_PARAMETER_FORMAT_ERROR_U;
+ return paraLen;
+ }
+ setParaLen = pBtReq->paraLength - 1;
+ setType = pBtReq->pParamStart[0];
+
+ DBG_8192C("[MPT], setType=%d, setParaLen=%d\n", setType, setParaLen);
+
+ // check parameter first
+ switch(setType)
+ {
+ case BT_GSET_REG:
+ DBG_8192C ("[MPT], [BT_GSET_REG]\n");
+ validParaLen = 9;
+ if(setParaLen == validParaLen)
+ {
+ btOpcode = BT_LO_OP_WRITE_REG_VALUE;
+ regType = pBtReq->pParamStart[1];
+ pu4Tmp = (pu4Byte)&pBtReq->pParamStart[2];
+ regAddr = *pu4Tmp;
+ pu4Tmp = (pu4Byte)&pBtReq->pParamStart[6];
+ regValue = *pu4Tmp;
+ DBG_8192C("[MPT], BT_GSET_REG regType=0x%x, regAddr=0x%x, regValue=0x%x!!\n",
+ regType, regAddr, regValue);
+ if(regType >= BT_REG_MAX)
+ {
+ pBtRsp->status = (btOpcode<<8)| BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ else
+ {
+ if( ((BT_REG_RF==regType)&&(regAddr>0x7f)) ||
+ ((BT_REG_MODEM==regType)&&(regAddr>0x1ff)) ||
+ ((BT_REG_BLUEWIZE==regType)&&(regAddr>0xfff)) ||
+ ((BT_REG_VENDOR==regType)&&(regAddr>0xfff)) ||
+ ((BT_REG_LE==regType)&&(regAddr>0xfff)) )
+ {
+ pBtRsp->status = (btOpcode<<8)| BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ }
+ }
+ break;
+ case BT_GSET_RESET:
+ DBG_8192C("[MPT], [BT_GSET_RESET]\n");
+ validParaLen = 0;
+ break;
+ case BT_GSET_TARGET_BD_ADDR:
+ DBG_8192C("[MPT], [BT_GSET_TARGET_BD_ADDR]\n");
+ validParaLen = 6;
+ if(setParaLen == validParaLen)
+ {
+ btOpcode = BT_LO_OP_SET_TARGET_BD_ADDR_H;
+ if( (pBtReq->pParamStart[1]==0) &&
+ (pBtReq->pParamStart[2]==0) &&
+ (pBtReq->pParamStart[3]==0) &&
+ (pBtReq->pParamStart[4]==0) &&
+ (pBtReq->pParamStart[5]==0) &&
+ (pBtReq->pParamStart[6]==0) )
+ {
+ DBG_8192C("[MPT], Error!! targetBDAddr=all zero\n");
+ pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ if( (pBtReq->pParamStart[1]==0xff) &&
+ (pBtReq->pParamStart[2]==0xff) &&
+ (pBtReq->pParamStart[3]==0xff) &&
+ (pBtReq->pParamStart[4]==0xff) &&
+ (pBtReq->pParamStart[5]==0xff) &&
+ (pBtReq->pParamStart[6]==0xff) )
+ {
+ DBG_8192C("[MPT], Error!! targetBDAddr=all 0xf\n");
+ pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ bdAddr[0] = pBtReq->pParamStart[6];
+ bdAddr[1] = pBtReq->pParamStart[5];
+ bdAddr[2] = pBtReq->pParamStart[4];
+ bdAddr[3] = pBtReq->pParamStart[3];
+ bdAddr[4] = pBtReq->pParamStart[2];
+ bdAddr[5] = pBtReq->pParamStart[1];
+ DBG_8192C ("[MPT], target BDAddr:%x,%x,%x,%x,%x,%x\n",
+ bdAddr[0],bdAddr[1],bdAddr[2],bdAddr[3],bdAddr[4],bdAddr[5]);
+ }
+ break;
+ case BT_GSET_TX_PWR_FINETUNE:
+ DBG_8192C("[MPT], [BT_GSET_TX_PWR_FINETUNE]\n");
+ validParaLen = 1;
+ if(setParaLen == validParaLen)
+ {
+ btOpcode = BT_LO_OP_SET_TX_POWER_CALIBRATION;
+ calVal = pBtReq->pParamStart[1];
+ if( (calVal<1) || (calVal>9) )
+ {
+ pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ DBG_8192C ("[MPT], calVal=%d\n", calVal);
+ }
+ break;
+ case BT_SET_TRACKING_INTERVAL:
+ DBG_871X("[MPT], [BT_SET_TRACKING_INTERVAL] setParaLen =%d \n",setParaLen);
+
+ validParaLen = 1;
+ if(setParaLen == validParaLen)
+ calVal = pBtReq->pParamStart[1];
+ break;
+ case BT_SET_THERMAL_METER:
+ DBG_871X("[MPT], [BT_SET_THERMAL_METER] setParaLen =%d \n",setParaLen);
+ validParaLen = 1;
+ if(setParaLen == validParaLen)
+ calVal = pBtReq->pParamStart[1];
+ break;
+ case BT_ENABLE_CFO_TRACKING:
+ DBG_871X("[MPT], [BT_ENABLE_CFO_TRACKING] setParaLen =%d \n",setParaLen);
+ validParaLen = 1;
+ if(setParaLen == validParaLen)
+ calVal = pBtReq->pParamStart[1];
+ break;
+ case BT_GSET_UPDATE_BT_PATCH:
+ if(IS_HARDWARE_TYPE_8723AE(Adapter) && Adapter->bFWReady)
+ {
+ u1Byte i;
+ DBG_8192C ("[MPT], write regs for load patch\n");
+ //BTFwPatch8723A(Adapter);
+ PlatformEFIOWrite1Byte(Adapter, 0xCC, 0x2d);
+ rtw_msleep_os(50);
+ PlatformEFIOWrite4Byte(Adapter, 0x68, 0xa005000c);
+ rtw_msleep_os(50);
+ PlatformEFIOWrite4Byte(Adapter, 0x68, 0xb005000c);
+ rtw_msleep_os(50);
+ PlatformEFIOWrite1Byte(Adapter, 0xCC, 0x29);
+ for(i=0; i<12; i++)
+ rtw_msleep_os(100);
+//#if (DEV_BUS_TYPE == RT_PCI_INTERFACE)
+// BTFwPatch8723A(Adapter);
+//#endif
+ DBG_8192C("[MPT], load BT FW Patch finished!!!\n");
+ }
+ break;
+ default:
+ {
+ DBG_8192C ("[MPT], Error!! setType=%d, out of range\n", setType);
+ pBtRsp->status = BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ break;
+ }
+ if(setParaLen != validParaLen)
+ {
+ DBG_8192C("[MPT], Error!! wrong parameter length=%d for BT_SET_GEN_CMD cmd id=0x%x, paraLen should=0x%x\n",
+ setParaLen, setType, validParaLen);
+ pBtRsp->status = BT_STATUS_PARAMETER_FORMAT_ERROR_U;
+ return paraLen;
+ }
+
+ //
+ // execute lower layer opcodes
+ //
+ if(BT_GSET_REG == setType)
+ {
+ // fill h2c parameters
+ // here we should write reg value first then write the address, adviced by Austin
+ btOpcode = BT_LO_OP_WRITE_REG_VALUE;
+ h2cParaBuf[0] = pBtReq->pParamStart[6];
+ h2cParaBuf[1] = pBtReq->pParamStart[7];
+ h2cParaBuf[2] = pBtReq->pParamStart[8];
+ h2cParaLen = 3;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+
+ // write reg address
+ btOpcode = BT_LO_OP_WRITE_REG_ADDR;
+ h2cParaBuf[0] = regType;
+ h2cParaBuf[1] = pBtReq->pParamStart[2];
+ h2cParaBuf[2] = pBtReq->pParamStart[3];
+ h2cParaLen = 3;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ }
+ else if(BT_GSET_RESET == setType)
+ {
+ btOpcode = BT_LO_OP_RESET;
+ h2cParaLen = 0;
+ // execute h2c and check respond c2h from bt fw is correct or not
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ }
+ else if(BT_GSET_TARGET_BD_ADDR == setType)
+ {
+ // fill h2c parameters
+ btOpcode = BT_LO_OP_SET_TARGET_BD_ADDR_L;
+ h2cParaBuf[0] = pBtReq->pParamStart[1];
+ h2cParaBuf[1] = pBtReq->pParamStart[2];
+ h2cParaBuf[2] = pBtReq->pParamStart[3];
+ h2cParaLen = 3;
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+
+ btOpcode = BT_LO_OP_SET_TARGET_BD_ADDR_H;
+ h2cParaBuf[0] = pBtReq->pParamStart[4];
+ h2cParaBuf[1] = pBtReq->pParamStart[5];
+ h2cParaBuf[2] = pBtReq->pParamStart[6];
+ h2cParaLen = 3;
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ }
+ else if(BT_GSET_TX_PWR_FINETUNE == setType)
+ {
+ // fill h2c parameters
+ btOpcode = BT_LO_OP_SET_TX_POWER_CALIBRATION;
+ h2cParaBuf[0] = calVal;
+ h2cParaLen = 1;
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ }
+ else if(BT_SET_TRACKING_INTERVAL == setType)
+ {
+ // BT_LO_OP_SET_TRACKING_INTERVAL = 0x22,
+ // BT_LO_OP_SET_THERMAL_METER = 0x23,
+ // BT_LO_OP_ENABLE_CFO_TRACKING = 0x24,
+ btOpcode = BT_LO_OP_SET_TRACKING_INTERVAL;
+ h2cParaBuf[0] = calVal;
+ h2cParaLen = 1;
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ }
+ else if(BT_SET_THERMAL_METER == setType)
+ {
+ btOpcode = BT_LO_OP_SET_THERMAL_METER;
+ h2cParaBuf[0] = calVal;
+ h2cParaLen = 1;
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ }
+ else if(BT_ENABLE_CFO_TRACKING == setType)
+ {
+ btOpcode = BT_LO_OP_ENABLE_CFO_TRACKING;
+ h2cParaBuf[0] = calVal;
+ h2cParaLen = 1;
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+ }
+
+ pBtRsp->status = BT_STATUS_SUCCESS;
+ return paraLen;
+}
+
+
+
+u2Byte
+mptbt_BtSetTxRxPars(
+ IN PADAPTER Adapter,
+ IN PBT_REQ_CMD pBtReq,
+ IN PBT_RSP_CMD pBtRsp
+ )
+{
+ u1Byte h2cParaBuf[6] ={0};
+ u1Byte h2cParaLen=0;
+ u2Byte paraLen=0;
+ u1Byte retStatus=BT_STATUS_BT_OP_SUCCESS;
+ u1Byte btOpcode;
+ u1Byte btOpcodeVer=0;
+ PBT_TXRX_PARAMETERS pTxRxPars=(PBT_TXRX_PARAMETERS)&pBtReq->pParamStart[0];
+ u2Byte lenTxRx=sizeof(BT_TXRX_PARAMETERS);
+ u1Byte i;
+ u1Byte bdAddr[6]={0};
+
+ //
+ // check upper layer parameters
+ //
+
+ // 1. check upper layer opcode version
+ if(pBtReq->opCodeVer != 1)
+ {
+ DBG_8192C("[MPT], Error!! Upper OP code version not match!!!\n");
+ pBtRsp->status = BT_STATUS_OPCODE_U_VERSION_MISMATCH;
+ return paraLen;
+ }
+ // 2. check upper layer parameter length
+ if(pBtReq->paraLength == sizeof(BT_TXRX_PARAMETERS))
+ {
+ DBG_8192C ("[MPT], pTxRxPars->txrxChannel=0x%x \n", pTxRxPars->txrxChannel);
+ DBG_8192C ("[MPT], pTxRxPars->txrxTxPktCnt=0x%8x \n", pTxRxPars->txrxTxPktCnt);
+ DBG_8192C ("[MPT], pTxRxPars->txrxTxPktInterval=0x%x \n", pTxRxPars->txrxTxPktInterval);
+ DBG_8192C ("[MPT], pTxRxPars->txrxPayloadType=0x%x \n", pTxRxPars->txrxPayloadType);
+ DBG_8192C ("[MPT], pTxRxPars->txrxPktType=0x%x \n", pTxRxPars->txrxPktType);
+ DBG_8192C ("[MPT], pTxRxPars->txrxPayloadLen=0x%x \n", pTxRxPars->txrxPayloadLen);
+ DBG_8192C ("[MPT], pTxRxPars->txrxPktHeader=0x%x \n", pTxRxPars->txrxPktHeader);
+ DBG_8192C ("[MPT], pTxRxPars->txrxWhitenCoeff=0x%x \n", pTxRxPars->txrxWhitenCoeff);
+ bdAddr[0] = pTxRxPars->txrxBdaddr[5];
+ bdAddr[1] = pTxRxPars->txrxBdaddr[4];
+ bdAddr[2] = pTxRxPars->txrxBdaddr[3];
+ bdAddr[3] = pTxRxPars->txrxBdaddr[2];
+ bdAddr[4] = pTxRxPars->txrxBdaddr[1];
+ bdAddr[5] = pTxRxPars->txrxBdaddr[0];
+ DBG_8192C ("[MPT], pTxRxPars->txrxBdaddr: %s", &bdAddr[0]);
+ DBG_8192C ("[MPT], pTxRxPars->txrxTxGainIndex=0x%x \n", pTxRxPars->txrxTxGainIndex);
+ }
+ else
+ {
+ DBG_8192C ("[MPT], Error!! pBtReq->paraLength=%d, correct Len=%d\n", pBtReq->paraLength, lenTxRx);
+ pBtRsp->status = BT_STATUS_PARAMETER_FORMAT_ERROR_U;
+ return paraLen;
+ }
+
+ //
+ // execute lower layer opcodes
+ //
+
+ // fill h2c parameters
+ btOpcode = BT_LO_OP_SET_PKT_HEADER;
+ if(pTxRxPars->txrxPktHeader > 0x3ffff)
+ {
+ DBG_8192C ("[MPT], Error!! pTxRxPars->txrxPktHeader=0x%x is out of range, (should be between 0x0~0x3ffff)\n", pTxRxPars->txrxPktHeader);
+ pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ else
+ {
+ h2cParaBuf[0] = (u1Byte)(pTxRxPars->txrxPktHeader&0xff);
+ h2cParaBuf[1] = (u1Byte)((pTxRxPars->txrxPktHeader&0xff00)>>8);
+ h2cParaBuf[2] = (u1Byte)((pTxRxPars->txrxPktHeader&0xff0000)>>16);
+ h2cParaLen = 3;
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ }
+
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+
+ // fill h2c parameters
+ btOpcode = BT_LO_OP_SET_PKT_TYPE_LEN;
+ {
+ u2Byte payloadLenLimit=0;
+ switch(pTxRxPars->txrxPktType)
+ {
+ case MP_BT_PKT_DH1:
+ payloadLenLimit = 27*8;
+ break;
+ case MP_BT_PKT_DH3:
+ payloadLenLimit = 183*8;
+ break;
+ case MP_BT_PKT_DH5:
+ payloadLenLimit = 339*8;
+ break;
+ case MP_BT_PKT_2DH1:
+ payloadLenLimit = 54*8;
+ break;
+ case MP_BT_PKT_2DH3:
+ payloadLenLimit = 367*8;
+ break;
+ case MP_BT_PKT_2DH5:
+ payloadLenLimit = 679*8;
+ break;
+ case MP_BT_PKT_3DH1:
+ payloadLenLimit = 83*8;
+ break;
+ case MP_BT_PKT_3DH3:
+ payloadLenLimit = 552*8;
+ break;
+ case MP_BT_PKT_3DH5:
+ payloadLenLimit = 1021*8;
+ break;
+ case MP_BT_PKT_LE:
+ payloadLenLimit = 39*8;
+ break;
+ default:
+ {
+ DBG_8192C ("[MPT], Error!! Unknown pTxRxPars->txrxPktType=0x%x\n", pTxRxPars->txrxPktType);
+ pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ break;
+ }
+
+ if(pTxRxPars->txrxPayloadLen > payloadLenLimit)
+ {
+ DBG_8192C ("[MPT], Error!! pTxRxPars->txrxPayloadLen=0x%x, (should smaller than %d)\n",
+ pTxRxPars->txrxPayloadLen, payloadLenLimit);
+ pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+
+ h2cParaBuf[0] = pTxRxPars->txrxPktType;
+ h2cParaBuf[1] = (u1Byte)((pTxRxPars->txrxPayloadLen&0xff));
+ h2cParaBuf[2] = (u1Byte)((pTxRxPars->txrxPayloadLen&0xff00)>>8);
+ h2cParaLen = 3;
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ }
+
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+
+ // fill h2c parameters
+ btOpcode = BT_LO_OP_SET_PKT_CNT_L_PL_TYPE;
+ if(pTxRxPars->txrxPayloadType > MP_BT_PAYLOAD_MAX)
+ {
+ DBG_8192C ("[MPT], Error!! pTxRxPars->txrxPayloadType=0x%x, (should be between 0~4)\n", pTxRxPars->txrxPayloadType);
+ pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ else
+ {
+ h2cParaBuf[0] = (u1Byte)((pTxRxPars->txrxTxPktCnt&0xff));
+ h2cParaBuf[1] = (u1Byte)((pTxRxPars->txrxTxPktCnt&0xff00)>>8);
+ h2cParaBuf[2] = pTxRxPars->txrxPayloadType;
+ h2cParaLen = 3;
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ }
+
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+
+ // fill h2c parameters
+ btOpcode = BT_LO_OP_SET_PKT_CNT_H_PKT_INTV;
+ if(pTxRxPars->txrxTxPktInterval > 15)
+ {
+ DBG_8192C ("[MPT], Error!! pTxRxPars->txrxTxPktInterval=0x%x, (should be between 0~15)\n", pTxRxPars->txrxTxPktInterval);
+ pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ else
+ {
+ h2cParaBuf[0] = (u1Byte)((pTxRxPars->txrxTxPktCnt&0xff0000)>>16);
+ h2cParaBuf[1] = (u1Byte)((pTxRxPars->txrxTxPktCnt&0xff000000)>>24);
+ h2cParaBuf[2] = pTxRxPars->txrxTxPktInterval;
+ h2cParaLen = 3;
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ }
+
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+
+ // fill h2c parameters
+ btOpcode = BT_LO_OP_SET_WHITENCOEFF;
+ {
+ h2cParaBuf[0] = pTxRxPars->txrxWhitenCoeff;
+ h2cParaLen = 1;
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ }
+
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+
+
+ // fill h2c parameters
+ btOpcode = BT_LO_OP_SET_CHNL_TX_GAIN;
+ if( (pTxRxPars->txrxChannel > 78) ||
+ (pTxRxPars->txrxTxGainIndex > 7) )
+ {
+ DBG_8192C ("[MPT], Error!! pTxRxPars->txrxChannel=0x%x, (should be between 0~78)\n", pTxRxPars->txrxChannel);
+ DBG_8192C ("[MPT], Error!! pTxRxPars->txrxTxGainIndex=0x%x, (should be between 0~7)\n", pTxRxPars->txrxTxGainIndex);
+ pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ else
+ {
+ h2cParaBuf[0] = pTxRxPars->txrxChannel;
+ h2cParaBuf[1] = pTxRxPars->txrxTxGainIndex;
+ h2cParaLen = 2;
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ }
+
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+
+ // fill h2c parameters
+ btOpcode = BT_LO_OP_SET_BD_ADDR_L;
+ if( (pTxRxPars->txrxBdaddr[0]==0) &&
+ (pTxRxPars->txrxBdaddr[1]==0) &&
+ (pTxRxPars->txrxBdaddr[2]==0) &&
+ (pTxRxPars->txrxBdaddr[3]==0) &&
+ (pTxRxPars->txrxBdaddr[4]==0) &&
+ (pTxRxPars->txrxBdaddr[5]==0) )
+ {
+ DBG_8192C ("[MPT], Error!! pTxRxPars->txrxBdaddr=all zero\n");
+ pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ if( (pTxRxPars->txrxBdaddr[0]==0xff) &&
+ (pTxRxPars->txrxBdaddr[1]==0xff) &&
+ (pTxRxPars->txrxBdaddr[2]==0xff) &&
+ (pTxRxPars->txrxBdaddr[3]==0xff) &&
+ (pTxRxPars->txrxBdaddr[4]==0xff) &&
+ (pTxRxPars->txrxBdaddr[5]==0xff) )
+ {
+ DBG_8192C ("[MPT], Error!! pTxRxPars->txrxBdaddr=all 0xf\n");
+ pBtRsp->status = (btOpcode<<8)|BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+
+ {
+ h2cParaBuf[0] = pTxRxPars->txrxBdaddr[0];
+ h2cParaBuf[1] = pTxRxPars->txrxBdaddr[1];
+ h2cParaBuf[2] = pTxRxPars->txrxBdaddr[2];
+ h2cParaLen = 3;
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ }
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+
+ btOpcode = BT_LO_OP_SET_BD_ADDR_H;
+ {
+ h2cParaBuf[0] = pTxRxPars->txrxBdaddr[3];
+ h2cParaBuf[1] = pTxRxPars->txrxBdaddr[4];
+ h2cParaBuf[2] = pTxRxPars->txrxBdaddr[5];
+ h2cParaLen = 3;
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ }
+ // ckeck bt return status.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C ("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+
+ pBtRsp->status = BT_STATUS_SUCCESS;
+ return paraLen;
+}
+
+
+
+u2Byte
+mptbt_BtTestCtrl(
+ IN PADAPTER Adapter,
+ IN PBT_REQ_CMD pBtReq,
+ IN PBT_RSP_CMD pBtRsp
+ )
+{
+ u1Byte h2cParaBuf[6] ={0};
+ u1Byte h2cParaLen=0;
+ u2Byte paraLen=0;
+ u1Byte retStatus=BT_STATUS_BT_OP_SUCCESS;
+ u1Byte btOpcode;
+ u1Byte btOpcodeVer=0;
+ u1Byte testCtrl=0;
+
+ //
+ // check upper layer parameters
+ //
+
+ // 1. check upper layer opcode version
+ if(pBtReq->opCodeVer != 1)
+ {
+ DBG_8192C("[MPT], Error!! Upper OP code version not match!!!\n");
+ pBtRsp->status = BT_STATUS_OPCODE_U_VERSION_MISMATCH;
+ return paraLen;
+ }
+ // 2. check upper layer parameter length
+ if(1 == pBtReq->paraLength)
+ {
+ testCtrl = pBtReq->pParamStart[0];
+ DBG_8192C("[MPT], testCtrl=%d \n", testCtrl);
+ }
+ else
+ {
+ DBG_8192C("[MPT], Error!! wrong parameter length=%d (should be 1)\n", pBtReq->paraLength);
+ pBtRsp->status = BT_STATUS_PARAMETER_FORMAT_ERROR_U;
+ return paraLen;
+ }
+
+ //
+ // execute lower layer opcodes
+ //
+
+ // 1. fill h2c parameters
+ // check bt mode
+ btOpcode = BT_LO_OP_TEST_CTRL;
+ if(testCtrl >= MP_BT_TEST_MAX)
+ {
+ DBG_8192C("[MPT], Error!! testCtrl=0x%x, (should be between smaller or equal to 0x%x)\n",
+ testCtrl, MP_BT_TEST_MAX-1);
+ pBtRsp->status = BT_STATUS_PARAMETER_OUT_OF_RANGE_U;
+ return paraLen;
+ }
+ else
+ {
+ h2cParaBuf[0] = testCtrl;
+ h2cParaLen = 1;
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ }
+
+ // 3. construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+
+ pBtRsp->status = BT_STATUS_SUCCESS;
+ return paraLen;
+}
+
+
+u2Byte
+mptbt_TestBT(
+ IN PADAPTER Adapter,
+ IN PBT_REQ_CMD pBtReq,
+ IN PBT_RSP_CMD pBtRsp
+ )
+{
+
+ u1Byte h2cParaBuf[6] ={0};
+ u1Byte h2cParaLen=0;
+ u2Byte paraLen=0;
+ u1Byte retStatus=BT_STATUS_BT_OP_SUCCESS;
+ u1Byte btOpcode;
+ u1Byte btOpcodeVer=0;
+ u1Byte testCtrl=0;
+
+ // 1. fill h2c parameters
+ btOpcode = 0x11;
+ h2cParaBuf[0] = 0x11;
+ h2cParaBuf[1] = 0x0;
+ h2cParaBuf[2] = 0x0;
+ h2cParaBuf[3] = 0x0;
+ h2cParaBuf[4] = 0x0;
+ h2cParaLen = 1;
+ // retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen);
+ retStatus = mptbt_BtFwOpCodeProcess(Adapter, btOpcode, btOpcodeVer, h2cParaBuf, h2cParaLen);
+
+
+ // 3. construct respond status code and data.
+ if(BT_STATUS_BT_OP_SUCCESS != retStatus)
+ {
+ pBtRsp->status = ((btOpcode<<8)|retStatus);
+ DBG_8192C("[MPT], Error!! status code=0x%x \n", pBtRsp->status);
+ return paraLen;
+ }
+
+ pBtRsp->status = BT_STATUS_SUCCESS;
+ return paraLen;
+}
+
+VOID
+mptbt_BtControlProcess(
+ PADAPTER Adapter,
+ PVOID pInBuf
+ )
+{
+ u1Byte H2C_Parameter[6] ={0};
+ PBT_H2C pH2c=(PBT_H2C)&H2C_Parameter[0];
+ PMPT_CONTEXT pMptCtx=&(Adapter->mppriv.MptCtx);
+ PBT_REQ_CMD pBtReq=(PBT_REQ_CMD)pInBuf;
+ PBT_RSP_CMD pBtRsp=(PBT_RSP_CMD)&pMptCtx->mptOutBuf[0];
+ u1Byte i;
+
+ DBG_8192C("[MPT], mptbt_BtControlProcess()=========>\n");
+
+ DBG_8192C("[MPT], input opCodeVer=%d\n", pBtReq->opCodeVer);
+ DBG_8192C("[MPT], input OpCode=%d\n", pBtReq->OpCode);
+ DBG_8192C("[MPT], paraLength=%d \n", pBtReq->paraLength);
+ if(pBtReq->paraLength)
+ {
+ //DBG_8192C("[MPT], parameters(hex):0x%x %d \n",&pBtReq->pParamStart[0], pBtReq->paraLength);
+ }
+
+ // The following we should maintain the User OP codes sent by upper layer
+
+ pBtRsp->status = BT_STATUS_SUCCESS;
+ pMptCtx->mptOutLen = 4; //length of (BT_RSP_CMD.status+BT_RSP_CMD.paraLength)
+ pBtRsp->paraLength = 0x0;
+
+ _rtw_memset((PVOID)&pMptCtx->mptOutBuf[0], '\0',100);
+
+ switch(pBtReq->OpCode)
+ {
+ case BT_UP_OP_BT_READY:
+ DBG_8192C("[MPT], OPcode : [BT_READY]\n");
+ pBtRsp->paraLength = mptbt_BtReady(Adapter, pBtReq, pBtRsp);
+ break;
+ case BT_UP_OP_BT_SET_MODE:
+ DBG_8192C("[MPT], OPcode : [BT_SET_MODE]\n");
+ pBtRsp->paraLength = mptbt_BtSetMode(Adapter, pBtReq, pBtRsp);
+ break;
+ case BT_UP_OP_BT_SET_TX_RX_PARAMETER:
+ DBG_8192C("[MPT], OPcode : [BT_SET_TXRX_PARAMETER]\n");
+ pBtRsp->paraLength = mptbt_BtSetTxRxPars(Adapter, pBtReq, pBtRsp);
+ break;
+ case BT_UP_OP_BT_SET_GENERAL:
+ DBG_8192C("[MPT], OPcode : [BT_SET_GENERAL]\n");
+ pBtRsp->paraLength = mptbt_BtSetGeneral(Adapter, pBtReq, pBtRsp);
+ break;
+ case BT_UP_OP_BT_GET_GENERAL:
+ DBG_8192C("[MPT], OPcode : [BT_GET_GENERAL]\n");
+ pBtRsp->paraLength = mptbt_BtGetGeneral(Adapter, pBtReq, pBtRsp);
+ break;
+ case BT_UP_OP_BT_TEST_CTRL:
+ DBG_8192C("[MPT], OPcode : [BT_TEST_CTRL]\n");
+ pBtRsp->paraLength = mptbt_BtTestCtrl(Adapter, pBtReq, pBtRsp);
+ break;
+ case BT_UP_OP_TEST_BT:
+ DBG_8192C("[MPT], OPcode : [TEST_BT]\n");
+ pBtRsp->paraLength = mptbt_TestBT(Adapter, pBtReq, pBtRsp);
+ break;
+ default:
+ DBG_8192C("[MPT], Error!! OPcode : UNDEFINED!!!!\n");
+ pBtRsp->status = BT_STATUS_UNKNOWN_OPCODE_U;
+ pBtRsp->paraLength = 0x0;
+ break;
+ }
+
+ DBG_8192C("pBtRsp->paraLength =%d \n",pBtRsp->paraLength);
+
+ pMptCtx->mptOutLen += pBtRsp->paraLength;
+
+ DBG_8192C("\n [MPT], OUT to DLL pMptCtx->mptOutLen=%d ,pBtRsp->paraLength =%d ",pMptCtx->mptOutLen,pBtRsp->paraLength);
+
+ DBG_8192C("\n [MPT], mptbt_BtControlProcess()<=========\n");
+}
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_cmd.c b/drivers/net/wireless/rtl8723as/core/rtw_cmd.c
index 75d1e766c698..5da4fb23be54 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_cmd.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_cmd.c
@@ -182,6 +182,7 @@ _func_enter_;
rtw_mfree(c2h, 16);
}
}
+ rtw_cbuf_free(pevtpriv->c2h_queue);
#endif
RT_TRACE(_module_rtl871x_cmd_c_,_drv_info_,("-_rtw_free_evt_priv \n"));
@@ -309,7 +310,7 @@ int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj)
#ifdef SUPPORT_HW_RFOFF_DETECTED
//To decide allow or not
- if( (pcmdpriv->padapter->pwrctrlpriv.bHWPwrPindetect)
+ if( (adapter_to_pwrctl(pcmdpriv->padapter)->bHWPwrPindetect)
&&(!pcmdpriv->padapter->registrypriv.usbss_enable)
)
{
@@ -426,6 +427,18 @@ _func_enter_;
_func_exit_;
}
+
+void rtw_stop_cmd_thread(_adapter *adapter)
+{
+ if(adapter->cmdThread && adapter->cmdpriv.cmdthd_running == _TRUE
+ && adapter->cmdpriv.stop_req == 0)
+ {
+ adapter->cmdpriv.stop_req = 1;
+ _rtw_up_sema(&adapter->cmdpriv.cmd_queue_sema);
+ _rtw_down_sema(&adapter->cmdpriv.terminate_cmdthread_sema);
+ }
+}
+
thread_return rtw_cmd_thread(thread_context context)
{
u8 ret;
@@ -443,6 +456,7 @@ _func_enter_;
pcmdbuf = pcmdpriv->cmd_buf;
prspbuf = pcmdpriv->rsp_buf;
+ pcmdpriv->stop_req = 0;
pcmdpriv->cmdthd_running=_TRUE;
_rtw_up_sema(&pcmdpriv->terminate_cmdthread_sema);
@@ -450,16 +464,29 @@ _func_enter_;
while(1)
{
- if (_rtw_down_sema(&pcmdpriv->cmd_queue_sema) == _FAIL)
+ if (_rtw_down_sema(&pcmdpriv->cmd_queue_sema) == _FAIL) {
+ DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" _rtw_down_sema(&pcmdpriv->cmd_queue_sema) return _FAIL, break\n", FUNC_ADPT_ARG(padapter));
break;
+ }
if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved == _TRUE))
{
- DBG_871X("%s: DriverStopped(%d) SurpriseRemoved(%d) break at line %d\n",
+ DBG_871X_LEVEL(_drv_always_, "%s: DriverStopped(%d) SurpriseRemoved(%d) break at line %d\n",
__FUNCTION__, padapter->bDriverStopped, padapter->bSurpriseRemoved, __LINE__);
break;
}
+ if (pcmdpriv->stop_req) {
+ DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" stop_req:%u, break\n", FUNC_ADPT_ARG(padapter), pcmdpriv->stop_req);
+ break;
+ }
+
+ if(rtw_is_list_empty(&(pcmdpriv->cmd_queue.queue)))
+ {
+ //DBG_871X("%s: cmd queue is empty!\n", __func__);
+ continue;
+ }
+
#ifdef CONFIG_LPS_LCLK
if (rtw_register_cmd_alive(padapter) != _SUCCESS)
{
@@ -472,7 +499,7 @@ _func_enter_;
_next:
if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE))
{
- DBG_871X("%s: DriverStopped(%d) SurpriseRemoved(%d) break at line %d\n",
+ DBG_871X_LEVEL(_drv_always_, "%s: DriverStopped(%d) SurpriseRemoved(%d) break at line %d\n",
__FUNCTION__, padapter->bDriverStopped, padapter->bSurpriseRemoved, __LINE__);
break;
}
@@ -774,7 +801,7 @@ _func_enter_;
#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
if((padapter->pbuddy_adapter->mlmeextpriv.mlmext_info.state&0x03) == WIFI_FW_AP_STATE)
- _set_timer(&pmlmepriv->scan_to_timer, SURVEY_TO * ( 38 + ( 38 / RTW_SCAN_NUM_OF_CH ) * RTW_STAY_AP_CH_MILLISECOND ) + 1000 );
+ _set_timer(&pmlmepriv->scan_to_timer, SURVEY_TO * ( padapter->mlmeextpriv.max_chan_nums + ( padapter->mlmeextpriv.max_chan_nums / RTW_SCAN_NUM_OF_CH ) * RTW_STAY_AP_CH_MILLISECOND ) + 1000 );
else
#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
_set_timer(&pmlmepriv->scan_to_timer, SCANNING_TIMEOUT);
@@ -1302,11 +1329,11 @@ _func_enter_;
pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pnetwork->network.IEs, pnetwork->network.IELength);
if (pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_TENDA)
- padapter->pwrctrlpriv.smart_ps = 0;
+ adapter_to_pwrctl(padapter)->smart_ps = 0;
else
- padapter->pwrctrlpriv.smart_ps = padapter->registrypriv.smart_ps;
+ adapter_to_pwrctl(padapter)->smart_ps = padapter->registrypriv.smart_ps;
- DBG_871X("%s: smart_ps=%d\n", __func__, padapter->pwrctrlpriv.smart_ps);
+ DBG_871X("%s: smart_ps=%d\n", __func__, adapter_to_pwrctl(padapter)->smart_ps);
#if 0
psecuritypriv->supplicant_ie[0]=(u8)psecnetwork->IELength;
@@ -1400,7 +1427,7 @@ _func_exit_;
return res;
}
-u8 rtw_setopmode_cmd(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype)
+u8 rtw_setopmode_cmd(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype, bool enqueue)
{
struct cmd_obj* ph2c;
struct setopmode_parm* psetop;
@@ -1409,25 +1436,29 @@ u8 rtw_setopmode_cmd(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE net
u8 res=_SUCCESS;
_func_enter_;
-
- ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
- if(ph2c==NULL){
- res= _FALSE;
- goto exit;
- }
psetop = (struct setopmode_parm*)rtw_zmalloc(sizeof(struct setopmode_parm));
- if(psetop==NULL){
- rtw_mfree((u8 *) ph2c, sizeof(struct cmd_obj));
- res=_FALSE;
+ if(psetop==NULL){
+ res=_FAIL;
goto exit;
}
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, psetop, _SetOpMode_CMD_);
psetop->mode = (u8)networktype;
+
+ if(enqueue){
+ ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
+ if(ph2c==NULL){
+ rtw_mfree((u8 *)psetop, sizeof(*psetop));
+ res= _FAIL;
+ goto exit;
+ }
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
+ init_h2fwcmd_w_parm_no_rsp(ph2c, psetop, _SetOpMode_CMD_);
+ res = rtw_enqueue_cmd(pcmdpriv, ph2c);
+ }
+ else{
+ setopmode_hdl(padapter, (u8 *)psetop);
+ rtw_mfree((u8 *)psetop, sizeof(*psetop));
+ }
exit:
_func_exit_;
@@ -1435,7 +1466,7 @@ _func_exit_;
return res;
}
-u8 rtw_setstakey_cmd(_adapter *padapter, u8 *psta, u8 unicast_key)
+u8 rtw_setstakey_cmd(_adapter *padapter, u8 *psta, u8 unicast_key, bool enqueue)
{
struct cmd_obj* ph2c;
struct set_stakey_parm *psetstakey_para;
@@ -1449,40 +1480,21 @@ u8 rtw_setstakey_cmd(_adapter *padapter, u8 *psta, u8 unicast_key)
_func_enter_;
- ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
- if ( ph2c == NULL){
- res= _FAIL;
- goto exit;
- }
-
psetstakey_para = (struct set_stakey_parm*)rtw_zmalloc(sizeof(struct set_stakey_parm));
- if(psetstakey_para==NULL){
- rtw_mfree((u8 *) ph2c, sizeof(struct cmd_obj));
+ if(psetstakey_para==NULL){
res=_FAIL;
goto exit;
}
-
- psetstakey_rsp = (struct set_stakey_rsp*)rtw_zmalloc(sizeof(struct set_stakey_rsp));
- if(psetstakey_rsp == NULL){
- rtw_mfree((u8 *) ph2c, sizeof(struct cmd_obj));
- rtw_mfree((u8 *) psetstakey_para, sizeof(struct set_stakey_parm));
- res=_FAIL;
- goto exit;
- }
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, _SetStaKey_CMD_);
- ph2c->rsp = (u8 *) psetstakey_rsp;
- ph2c->rspsz = sizeof(struct set_stakey_rsp);
-
+
_rtw_memcpy(psetstakey_para->addr, sta->hwaddr,ETH_ALEN);
-
+
if(check_fwstate(pmlmepriv, WIFI_STATION_STATE)){
#ifdef CONFIG_TDLS
if(sta->tdls_sta_state&TDLS_LINKED_STATE)
psetstakey_para->algorithm=(u8)sta->dot118021XPrivacy;
else
#endif //CONFIG_TDLS
- psetstakey_para->algorithm =(unsigned char) psecuritypriv->dot11PrivacyAlgrthm;
+ psetstakey_para->algorithm =(unsigned char) psecuritypriv->dot11PrivacyAlgrthm;
}else{
GET_ENCRY_ALGO(psecuritypriv, sta, psetstakey_para->algorithm, _FALSE);
}
@@ -1494,15 +1506,40 @@ _func_enter_;
else
#endif //CONFIG_TDLS
_rtw_memcpy(&psetstakey_para->key, &sta->dot118021x_UncstKey, 16);
- } else {
+ }
+ else {
_rtw_memcpy(&psetstakey_para->key, &psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey, 16);
- }
+ }
//jeff: set this becasue at least sw key is ready
padapter->securitypriv.busetkipkey=_TRUE;
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
+ if(enqueue)
+ {
+ ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
+ if ( ph2c == NULL){
+ rtw_mfree((u8 *) psetstakey_para, sizeof(struct set_stakey_parm));
+ res= _FAIL;
+ goto exit;
+ }
+ psetstakey_rsp = (struct set_stakey_rsp*)rtw_zmalloc(sizeof(struct set_stakey_rsp));
+ if(psetstakey_rsp == NULL){
+ rtw_mfree((u8 *) ph2c, sizeof(struct cmd_obj));
+ rtw_mfree((u8 *) psetstakey_para, sizeof(struct set_stakey_parm));
+ res=_FAIL;
+ goto exit;
+ }
+
+ init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, _SetStaKey_CMD_);
+ ph2c->rsp = (u8 *) psetstakey_rsp;
+ ph2c->rspsz = sizeof(struct set_stakey_rsp);
+ res = rtw_enqueue_cmd(pcmdpriv, ph2c);
+ }
+ else{
+ set_stakey_hdl(padapter, (u8 *)psetstakey_para);
+ rtw_mfree((u8 *) psetstakey_para, sizeof(struct set_stakey_parm));
+ }
exit:
_func_exit_;
@@ -1727,6 +1764,86 @@ _func_exit_;
return res;
}
+//add for CONFIG_IEEE80211W, none 11w can use it
+u8 rtw_reset_securitypriv_cmd(_adapter*padapter)
+{
+ struct cmd_obj* ph2c;
+ struct drvextra_cmd_parm *pdrvextra_cmd_parm;
+ struct cmd_priv *pcmdpriv=&padapter->cmdpriv;
+ u8 res=_SUCCESS;
+
+_func_enter_;
+
+ ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
+ if(ph2c==NULL){
+ res= _FAIL;
+ goto exit;
+ }
+
+ pdrvextra_cmd_parm = (struct drvextra_cmd_parm*)rtw_zmalloc(sizeof(struct drvextra_cmd_parm));
+ if(pdrvextra_cmd_parm==NULL){
+ rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
+ res= _FAIL;
+ goto exit;
+ }
+
+ pdrvextra_cmd_parm->ec_id = RESET_SECURITYPRIV;
+ pdrvextra_cmd_parm->type_size = 0;
+ pdrvextra_cmd_parm->pbuf = (u8 *)padapter;
+
+ init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
+
+
+ //rtw_enqueue_cmd(pcmdpriv, ph2c);
+ res = rtw_enqueue_cmd(pcmdpriv, ph2c);
+
+exit:
+
+_func_exit_;
+
+ return res;
+
+}
+
+u8 rtw_free_assoc_resources_cmd(_adapter*padapter)
+{
+ struct cmd_obj* ph2c;
+ struct drvextra_cmd_parm *pdrvextra_cmd_parm;
+ struct cmd_priv *pcmdpriv=&padapter->cmdpriv;
+ u8 res=_SUCCESS;
+
+_func_enter_;
+
+ ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
+ if(ph2c==NULL){
+ res= _FAIL;
+ goto exit;
+ }
+
+ pdrvextra_cmd_parm = (struct drvextra_cmd_parm*)rtw_zmalloc(sizeof(struct drvextra_cmd_parm));
+ if(pdrvextra_cmd_parm==NULL){
+ rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
+ res= _FAIL;
+ goto exit;
+ }
+
+ pdrvextra_cmd_parm->ec_id = FREE_ASSOC_RESOURCES;
+ pdrvextra_cmd_parm->type_size = 0;
+ pdrvextra_cmd_parm->pbuf = (u8 *)padapter;
+
+ init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
+
+
+ //rtw_enqueue_cmd(pcmdpriv, ph2c);
+ res = rtw_enqueue_cmd(pcmdpriv, ph2c);
+
+exit:
+
+_func_exit_;
+
+ return res;
+
+}
u8 rtw_dynamic_chk_wk_cmd(_adapter*padapter)
{
@@ -2007,12 +2124,60 @@ _func_exit_;
return res;
}
+#ifdef CONFIG_DETECT_C2H_BY_POLLING
+u8 rtw_event_polling_cmd(_adapter*padapter)
+{
+ struct cmd_obj* ph2c;
+ struct drvextra_cmd_parm *pdrvextra_cmd_parm;
+ struct cmd_priv *pcmdpriv=&padapter->cmdpriv;
+ u8 res=_SUCCESS;
+
+_func_enter_;
+
+#if defined(CONFIG_CONCURRENT_MODE)
+ if (padapter->adapter_type != PRIMARY_ADAPTER)
+ {
+ return _FAIL;
+ }
+#endif
+
+ ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
+ if(ph2c==NULL){
+ res= _FAIL;
+ goto exit;
+ }
+
+ pdrvextra_cmd_parm = (struct drvextra_cmd_parm*)rtw_zmalloc(sizeof(struct drvextra_cmd_parm));
+ if(pdrvextra_cmd_parm==NULL){
+ rtw_mfree((unsigned char *)ph2c, sizeof(struct cmd_obj));
+ res= _FAIL;
+ goto exit;
+ }
+
+ pdrvextra_cmd_parm->ec_id = EVENT_POLLING_CID;
+ pdrvextra_cmd_parm->type_size = 0;
+ pdrvextra_cmd_parm->pbuf = (u8 *)padapter;
+
+ init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
+
+
+ //rtw_enqueue_cmd(pcmdpriv, ph2c);
+ res = rtw_enqueue_cmd(pcmdpriv, ph2c);
+
+exit:
+
+ _func_exit_;
+
+ return res;
+}
+#endif
+
static void traffic_status_watchdog(_adapter *padapter)
{
#ifdef CONFIG_LPS
u8 bEnterPS;
#endif
- u16 BusyThreshold = 100;
+ u16 BusyThreshold = 200;// 100;
u8 bBusyTraffic = _FALSE, bTxBusyTraffic = _FALSE, bRxBusyTraffic = _FALSE;
u8 bHigherBusyTraffic = _FALSE, bHigherBusyRxTraffic = _FALSE, bHigherBusyTxTraffic = _FALSE;
#ifdef CONFIG_FTP_PROTECT
@@ -2023,23 +2188,19 @@ static void traffic_status_watchdog(_adapter *padapter)
struct tdls_info *ptdlsinfo = &(padapter->tdlsinfo);
#endif //CONFIG_TDLS
+ RT_LINK_DETECT_T * link_detect = &pmlmepriv->LinkDetectInfo;
+
//
// Determine if our traffic is busy now
//
if((check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
/*&& !MgntInitAdapterInProgress(pMgntInfo)*/)
{
-
-#ifdef CONFIG_BT_COEXIST
- if( pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > 50 ||
- pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > 50 )
-#else // !CONFIG_BT_COEXIST
// if we raise bBusyTraffic in last watchdog, using lower threshold.
if (pmlmepriv->LinkDetectInfo.bBusyTraffic)
- BusyThreshold = 75;
+ BusyThreshold =180; // 75;
if( pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > BusyThreshold ||
pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > BusyThreshold )
-#endif // !CONFIG_BT_COEXIST
{
bBusyTraffic = _TRUE;
@@ -2076,7 +2237,25 @@ static void traffic_status_watchdog(_adapter *padapter)
rtw_unlock_suspend();
}
#endif //CONFIG_KEEP_FTP_TRANSMIT
-
+
+#ifdef CONFIG_TRAFFIC_PROTECT
+#define TX_ACTIVE_TH 2
+#define RX_ACTIVE_TH 1
+#define TRAFFIC_PROTECT_PERIOD_MS 4500
+
+ if (link_detect->NumTxOkInPeriod > TX_ACTIVE_TH
+ || link_detect->NumRxUnicastOkInPeriod > RX_ACTIVE_TH) {
+
+ DBG_871X_LEVEL(_drv_info_, FUNC_ADPT_FMT" acqiure wake_lock for %u ms(tx:%d,rx_unicast:%d)\n",
+ FUNC_ADPT_ARG(padapter),
+ TRAFFIC_PROTECT_PERIOD_MS,
+ link_detect->NumTxOkInPeriod,
+ link_detect->NumRxUnicastOkInPeriod);
+
+ rtw_lock_suspend_timeout(TRAFFIC_PROTECT_PERIOD_MS);
+ }
+#endif
+
#ifdef CONFIG_TDLS
#ifdef CONFIG_TDLS_AUTOSETUP
if( ( ptdlsinfo->watchdog_count % TDLS_WATCHDOG_PERIOD ) == 0 ) //10 * 2sec, periodically sending
@@ -2176,7 +2355,7 @@ void dynamic_chk_wk_hdl(_adapter *padapter, u8 *pbuf, int sz)
void lps_ctrl_wk_hdl(_adapter *padapter, u8 lps_ctrl_type);
void lps_ctrl_wk_hdl(_adapter *padapter, u8 lps_ctrl_type)
{
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
u8 mstatus;
@@ -2211,7 +2390,7 @@ _func_enter_;
//DBG_871X("LPS_CTRL_CONNECT \n");
mstatus = 1;//connect
// Reset LPS Setting
- padapter->pwrctrlpriv.LpsIdleCount = 0;
+ pwrpriv->LpsIdleCount = 0;
rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_JOINBSSRPT, (u8 *)(&mstatus));
#ifdef CONFIG_BT_COEXIST
BT_WifiMediaStatusNotify(padapter, mstatus);
@@ -2263,7 +2442,7 @@ u8 rtw_lps_ctrl_wk_cmd(_adapter*padapter, u8 lps_ctrl_type, u8 enqueue)
struct cmd_obj *ph2c;
struct drvextra_cmd_parm *pdrvextra_cmd_parm;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
- //struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
+ //struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(padapter);
u8 res = _SUCCESS;
_func_enter_;
@@ -2271,6 +2450,11 @@ _func_enter_;
//if(!pwrctrlpriv->bLeisurePs)
// return res;
+#ifdef CONFIG_CONCURRENT_MODE
+ if (padapter->iface_type != IFACE_PORT0)
+ return res;
+#endif
+
if(enqueue)
{
ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
@@ -2410,6 +2594,17 @@ void power_saving_wk_hdl(_adapter *padapter, u8 *pbuf, int sz)
rtw_ps_processor(padapter);
}
+//add for CONFIG_IEEE80211W, none 11w can use it
+void reset_securitypriv_hdl(_adapter *padapter)
+{
+ rtw_reset_securitypriv(padapter);
+}
+
+void free_assoc_resources_hdl(_adapter *padapter)
+{
+ rtw_free_assoc_resources(padapter, 1);
+}
+
#ifdef CONFIG_P2P
u8 p2p_protocol_wk_cmd(_adapter*padapter, int intCmdType )
{
@@ -2683,6 +2878,51 @@ static void c2h_wk_callback(_workitem *work)
}
#endif
+#ifdef CONFIG_DETECT_C2H_BY_POLLING
+void event_polling_hdl(_adapter *padapter, u8 *pbuf, int sz)
+{
+ c2h_id_filter ccx_id_filter = rtw_hal_c2h_id_filter_ccx(padapter);
+ u8 check_c2hcmd, check_ccx;
+
+ //check_c2hcmd = rtw_read8(padapter, REG_C2HEVT_CLEAR);
+ //check_ccx= rtw_read8(padapter, REG_C2HEVT_MSG_NORMAL);
+
+ rtw_hal_get_hwreg(padapter, HW_VAR_C2HEVT_CLEAR, (u8 *)(&check_c2hcmd));
+ rtw_hal_get_hwreg(padapter, HW_VAR_C2HEVT_MSG_NORMAL, (u8 *)(&check_ccx));
+
+ if (check_c2hcmd != 0)
+ {
+ struct c2h_evt_hdr *c2h_evt;
+
+ if (check_c2hcmd != 0xFF)
+ {
+ c2h_evt_clear(padapter);
+ }
+ else if (ccx_id_filter(check_ccx & 0x0F) == _FALSE)
+ {
+ if ((c2h_evt = (struct c2h_evt_hdr *)rtw_zmalloc(16)) != NULL) {
+ if (c2h_evt_read(padapter, (u8 *)c2h_evt) == _SUCCESS) {
+ rtw_hal_c2h_handler(padapter, c2h_evt);
+ }
+ rtw_mfree((u8*)c2h_evt, 16);
+ } else {
+ /* Error handling for malloc fail */
+ if (rtw_cbuf_push(padapter->evtpriv.c2h_queue, (void*)NULL) != _SUCCESS)
+ DBG_871X("%s rtw_cbuf_push fail\n", __func__);
+ _set_workitem(&padapter->evtpriv.c2h_wk);
+ }
+ }
+ else
+ {
+ if (padapter->xmitpriv.ack_tx == _FALSE)
+ {
+ c2h_evt_clear(padapter);
+ }
+ }
+ }
+}
+#endif
+
u8 rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf)
{
struct drvextra_cmd_parm *pdrvextra_cmd;
@@ -2735,11 +2975,21 @@ u8 rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf)
intel_widi_wk_hdl(padapter, pdrvextra_cmd->type_size, pdrvextra_cmd->pbuf);
break;
#endif //CONFIG_INTEL_WIDI
-
+ //add for CONFIG_IEEE80211W, none 11w can use it
+ case RESET_SECURITYPRIV:
+ reset_securitypriv_hdl(padapter);
+ break;
+ case FREE_ASSOC_RESOURCES:
+ free_assoc_resources_hdl(padapter);
+ break;
case C2H_WK_CID:
c2h_evt_hdl(padapter, (struct c2h_evt_hdr *)pdrvextra_cmd->pbuf, NULL);
break;
-
+#ifdef CONFIG_DETECT_C2H_BY_POLLING
+ case EVENT_POLLING_CID:
+ event_polling_hdl(padapter, pdrvextra_cmd->pbuf, pdrvextra_cmd->type_size);
+ break;
+#endif
default:
break;
}
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_debug.c b/drivers/net/wireless/rtl8723as/core/rtw_debug.c
index 509ed8106410..d2fc13c061b9 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_debug.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_debug.c
@@ -76,6 +76,20 @@ int proc_get_drv_version(char *page, char **start,
return len;
}
+#ifdef DBG_MEM_ALLOC
+int proc_get_mstat(char *page, char **start,
+ off_t offset, int count,
+ int *eof, void *data)
+{
+ int len = 0;
+
+ len += _rtw_mstat_dump(page+len, count-len);
+ *eof = 1;
+
+ return len;
+}
+#endif /* DBG_MEM_ALLOC */
+
int proc_get_write_reg(char *page, char **start,
off_t offset, int count,
int *eof, void *data)
@@ -1121,6 +1135,31 @@ int proc_get_best_channel(char *page, char **start,
return len;
}
+
+int proc_set_best_channel(struct file *file, const char *buffer,
+ unsigned long count, void *data)
+{
+ struct net_device *dev = (struct net_device *)data;
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ char tmp[32];
+
+ if(count < 1)
+ return -EFAULT;
+
+ if(buffer && !copy_from_user(tmp, buffer, sizeof(tmp)))
+ {
+ int i;
+ for(i = 0; pmlmeext->channel_set[i].ChannelNum != 0; i++)
+ {
+ pmlmeext->channel_set[i].rx_count = 0;
+ }
+
+ DBG_871X("set %s\n", "Clean Best Channel Count");
+ }
+
+ return count;
+}
#endif /* CONFIG_FIND_BEST_CHANNEL */
#ifdef CONFIG_BT_COEXIST
#define _bt_dbg_off_ 0
@@ -1214,5 +1253,118 @@ int proc_set_sreset(struct file *file, const char *buffer, unsigned long count,
}
#endif /* DBG_CONFIG_ERROR_DETECT */
+int proc_get_odm_dbg_comp(char *page, char **start, off_t offset, int count, int *eof, void *data)
+{
+ struct net_device *dev = data;
+ _adapter *adapter = (_adapter *)rtw_netdev_priv(dev);
+ int len = 0;
+
+ len += _rtw_odm_dbg_comp_msg(adapter, page, count);
+
+ *eof = 1;
+ return len;
+}
+
+int proc_set_odm_dbg_comp(struct file *file, const char *buffer, unsigned long count, void *data)
+{
+ struct net_device *dev = (struct net_device *)data;
+ _adapter *adapter = (_adapter *)rtw_netdev_priv(dev);
+ char tmp[32];
+
+ u64 dbg_comp;
+
+ if (count < 1)
+ return -EFAULT;
+
+ if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
+
+ int num = sscanf(tmp, "%llx", &dbg_comp);
+
+ if (num != 1)
+ return count;
+
+ rtw_odm_dbg_comp_set(adapter, dbg_comp);
+ }
+
+ return count;
+}
+
+int proc_get_odm_dbg_level(char *page, char **start, off_t offset, int count, int *eof, void *data)
+{
+ struct net_device *dev = data;
+ _adapter *adapter = (_adapter *)rtw_netdev_priv(dev);
+ int len = 0;
+
+ len += _rtw_odm_dbg_level_msg(adapter, page, count);
+
+ *eof = 1;
+ return len;
+}
+
+int proc_set_odm_dbg_level(struct file *file, const char *buffer, unsigned long count, void *data)
+{
+ struct net_device *dev = (struct net_device *)data;
+ _adapter *adapter = (_adapter *)rtw_netdev_priv(dev);
+ char tmp[32];
+
+ u32 dbg_level;
+
+ if (count < 1)
+ return -EFAULT;
+
+ if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
+
+ int num = sscanf(tmp, "%u", &dbg_level);
+
+ if (num != 1)
+ return count;
+
+ rtw_odm_dbg_level_set(adapter, dbg_level);
+ }
+
+ return count;
+}
+
+int proc_get_odm_adaptivity(char *page, char **start, off_t offset, int count, int *eof, void *data)
+{
+ struct net_device *dev = data;
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+ int len = 0;
+
+ len += _rtw_odm_adaptivity_parm_msg(padapter, page, count);
+
+ *eof = 1;
+ return len;
+}
+
+int proc_set_odm_adaptivity(struct file *file, const char *buffer, unsigned long count, void *data)
+{
+ struct net_device *dev = (struct net_device *)data;
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+ char tmp[32];
+ u32 TH_L2H_ini;
+ s8 TH_EDCCA_HL_diff;
+ u32 IGI_Base;
+ int ForceEDCCA;
+ u8 AdapEn_RSSI;
+ u8 IGI_LowerBound;
+
+ if (count < 1)
+ return -EFAULT;
+
+ if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
+
+ int num = sscanf(tmp, "%x %hhd %x %d %hhu %hhu",
+ &TH_L2H_ini, &TH_EDCCA_HL_diff, &IGI_Base, &ForceEDCCA, &AdapEn_RSSI, &IGI_LowerBound);
+
+ if (num != 6)
+ return count;
+
+ rtw_odm_adaptivity_parm_set(padapter, (s8)TH_L2H_ini, TH_EDCCA_HL_diff, (s8)IGI_Base, (bool)ForceEDCCA, AdapEn_RSSI, IGI_LowerBound);
+ }
+
+ return count;
+}
+
#endif
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_ieee80211.c b/drivers/net/wireless/rtl8723as/core/rtw_ieee80211.c
index ea353d4cfe2a..af32123cbcc0 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_ieee80211.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_ieee80211.c
@@ -886,6 +886,28 @@ u8 rtw_is_wps_ie(u8 *ie_ptr, uint *wps_ielen)
return match;
}
+u8 *rtw_get_wps_ie_from_scan_queue(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen, u8 frame_type)
+{
+ u8* wps = NULL;
+
+ DBG_871X( "[%s] frame_type = %d\n", __FUNCTION__, frame_type );
+ switch( frame_type )
+ {
+ case 1:
+ case 3:
+ { // Beacon or Probe Response
+ wps = rtw_get_wps_ie(in_ie + _PROBERSP_IE_OFFSET_, in_len - _PROBERSP_IE_OFFSET_, wps_ie, wps_ielen);
+ break;
+ }
+ case 2:
+ { // Probe Request
+ wps = rtw_get_wps_ie(in_ie + _PROBEREQ_IE_OFFSET_ , in_len - _PROBEREQ_IE_OFFSET_ , wps_ie, wps_ielen);
+ break;
+ }
+ }
+ return wps;
+}
+
/**
* rtw_get_wps_ie - Search WPS IE from a series of IEs
* @in_ie: Address of IEs to search
@@ -1331,32 +1353,37 @@ void rtw_macaddr_cfg(u8 *mac_addr)
DBG_871X("rtw_macaddr_cfg MAC Address = "MAC_FMT"\n", MAC_ARG(mac_addr));
}
-void dump_ies(u8 *buf, u32 buf_len) {
+void dump_ies(u8 *buf, u32 buf_len)
+{
u8* pos = (u8*)buf;
u8 id, len;
-
+
while(pos-buf<=buf_len){
id = *pos;
len = *(pos+1);
DBG_871X("%s ID:%u, LEN:%u\n", __FUNCTION__, id, len);
+ dump_wps_ie(pos, len);
#ifdef CONFIG_P2P
dump_p2p_ie(pos, len);
+ #ifdef CONFIG_WFD
+ dump_wfd_ie(pos, len);
+ #endif
#endif
- dump_wps_ie(pos, len);
pos+=(2+len);
- }
+ }
}
-void dump_wps_ie(u8 *ie, u32 ie_len) {
+void dump_wps_ie(u8 *ie, u32 ie_len)
+{
u8* pos = (u8*)ie;
u16 id;
u16 len;
u8 *wps_ie;
uint wps_ielen;
-
+
wps_ie = rtw_get_wps_ie(ie, ie_len, NULL, &wps_ielen);
if(wps_ie != ie || wps_ielen == 0)
return;
@@ -1369,10 +1396,81 @@ void dump_wps_ie(u8 *ie, u32 ie_len) {
DBG_871X("%s ID:0x%04x, LEN:%u\n", __FUNCTION__, id, len);
pos+=(4+len);
- }
+ }
}
#ifdef CONFIG_P2P
+/**
+ * rtw_get_p2p_merged_len - Get merged ie length from muitiple p2p ies.
+ * @in_ie: Pointer of the first p2p ie
+ * @in_len: Total len of muiltiple p2p ies
+ * Returns: Length of merged p2p ie length
+ */
+u32 rtw_get_p2p_merged_ies_len(u8 *in_ie, u32 in_len)
+{
+ PNDIS_802_11_VARIABLE_IEs pIE;
+ u8 OUI[4] = { 0x50, 0x6f, 0x9a, 0x09 };
+ int i=0;
+ int j=0, len=0;
+
+ while( i < in_len)
+ {
+ pIE = (PNDIS_802_11_VARIABLE_IEs)(in_ie+ i);
+
+ if( pIE->ElementID == _VENDOR_SPECIFIC_IE_ && _rtw_memcmp(pIE->data, OUI, 4) )
+ {
+ len += pIE->Length-4; // 4 is P2P OUI length, don't count it in this loop
+ }
+
+ i += (pIE->Length + 2);
+ }
+
+ return len + 4; // Append P2P OUI length at last.
+}
+
+/**
+ * rtw_p2p_merge_ies - Merge muitiple p2p ies into one
+ * @in_ie: Pointer of the first p2p ie
+ * @in_len: Total len of muiltiple p2p ies
+ * @merge_ie: Pointer of merged ie
+ * Returns: Length of merged p2p ie
+ */
+int rtw_p2p_merge_ies(u8 *in_ie, u32 in_len, u8 *merge_ie)
+{
+ PNDIS_802_11_VARIABLE_IEs pIE;
+ u8 len = 0;
+ u8 OUI[4] = { 0x50, 0x6f, 0x9a, 0x09 };
+ u8 ELOUI[6] = { 0xDD, 0x00, 0x50, 0x6f, 0x9a, 0x09 }; //EID;Len;OUI, Len would copy at the end of function
+ int i=0;
+
+ if( merge_ie != NULL)
+ {
+ //Set first P2P OUI
+ _rtw_memcpy(merge_ie, ELOUI, 6);
+ merge_ie += 6;
+
+ while( i < in_len)
+ {
+ pIE = (PNDIS_802_11_VARIABLE_IEs)(in_ie+ i);
+
+ // Take out the rest of P2P OUIs
+ if( pIE->ElementID == _VENDOR_SPECIFIC_IE_ && _rtw_memcmp(pIE->data, OUI, 4) )
+ {
+ _rtw_memcpy( merge_ie, pIE->data +4, pIE->Length -4);
+ len += pIE->Length-4;
+ merge_ie += pIE->Length-4;
+ }
+
+ i += (pIE->Length + 2);
+ }
+
+ return len + 4; // 4 is for P2P OUI
+
+ }
+
+ return 0;
+}
+
void dump_p2p_ie(u8 *ie, u32 ie_len) {
u8* pos = (u8*)ie;
u8 id;
@@ -1396,6 +1494,28 @@ void dump_p2p_ie(u8 *ie, u32 ie_len) {
}
}
+u8 *rtw_get_p2p_ie_from_scan_queue(u8 *in_ie, int in_len, u8 *p2p_ie, uint *p2p_ielen, u8 frame_type)
+{
+ u8* p2p = NULL;
+
+ DBG_871X( "[%s] frame_type = %d\n", __FUNCTION__, frame_type );
+ switch( frame_type )
+ {
+ case 1:
+ case 3:
+ { // Beacon or Probe Response
+ p2p = rtw_get_p2p_ie(in_ie + _PROBERSP_IE_OFFSET_, in_len - _PROBERSP_IE_OFFSET_, p2p_ie, p2p_ielen);
+ break;
+ }
+ case 2:
+ { // Probe Request
+ p2p = rtw_get_p2p_ie(in_ie + _PROBEREQ_IE_OFFSET_ , in_len - _PROBEREQ_IE_OFFSET_ , p2p_ie, p2p_ielen);
+ break;
+ }
+ }
+ return p2p;
+}
+
/**
* rtw_get_p2p_ie - Search P2P IE from a series of IEs
* @in_ie: Address of IEs to search
@@ -1640,6 +1760,29 @@ void rtw_WLAN_BSSID_EX_remove_p2p_attr(WLAN_BSSID_EX *bss_ex, u8 attr_id)
#endif //CONFIG_P2P
#ifdef CONFIG_WFD
+void dump_wfd_ie(u8 *ie, u32 ie_len)
+{
+ u8* pos = (u8*)ie;
+ u8 id;
+ u16 len;
+
+ u8 *wfd_ie;
+ uint wfd_ielen;
+
+ if(rtw_get_wfd_ie(ie, ie_len, NULL, &wfd_ielen) == _FALSE)
+ return;
+
+ pos+=6;
+ while(pos-ie < ie_len){
+ id = *pos;
+ len = RTW_GET_BE16(pos+1);
+
+ DBG_871X("%s ID:%u, LEN:%u\n", __FUNCTION__, id, len);
+
+ pos+=(3+len);
+ }
+}
+
int rtw_get_wfd_ie(u8 *in_ie, int in_len, u8 *wfd_ie, uint *wfd_ielen)
{
int match;
@@ -1699,6 +1842,30 @@ int rtw_get_wfd_ie(u8 *in_ie, int in_len, u8 *wfd_ie, uint *wfd_ielen)
}
+int rtw_get_wfd_ie_from_scan_queue(u8 *in_ie, int in_len, u8 *wfd_ie, uint *wfd_ielen, u8 frame_type)
+{
+ int match;
+
+ match=_FALSE;
+
+ DBG_871X( "[%s] frame_type = %d\n", __FUNCTION__, frame_type );
+ switch( frame_type )
+ {
+ case 1:
+ case 3:
+ { // Beacon or Probe Response
+ match = rtw_get_wfd_ie(in_ie + _PROBERSP_IE_OFFSET_, in_len - _PROBERSP_IE_OFFSET_, wfd_ie, wfd_ielen);
+ break;
+ }
+ case 2:
+ { // Probe Request
+ match = rtw_get_wfd_ie(in_ie + _PROBEREQ_IE_OFFSET_ , in_len - _PROBEREQ_IE_OFFSET_ , wfd_ie, wfd_ielen);
+ break;
+ }
+ }
+ return match;
+}
+
// attr_content: The output buffer, contains the "body field" of WFD attribute.
// attr_contentlen: The data length of the "body field" of WFD attribute.
int rtw_get_wfd_attr_content(u8 *wfd_ie, uint wfd_ielen, u8 target_attr_id ,u8 *attr_content, uint *attr_contentlen)
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_io.c b/drivers/net/wireless/rtl8723as/core/rtw_io.c
index 83cd2fbbd395..26797830ffc3 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_io.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_io.c
@@ -384,6 +384,32 @@ int rtw_init_io_priv(_adapter *padapter, void (*set_intf_ops)(struct _io_ops *po
return _SUCCESS;
}
+/*
+* Increase and check if the continual_io_error of this @param dvobjprive is larger than MAX_CONTINUAL_IO_ERR
+* @return _TRUE:
+* @return _FALSE:
+*/
+int rtw_inc_and_chk_continual_io_error(struct dvobj_priv *dvobj)
+{
+ int ret = _FALSE;
+ int value;
+ if( (value=ATOMIC_INC_RETURN(&dvobj->continual_io_error)) > MAX_CONTINUAL_IO_ERR) {
+ DBG_871X("[dvobj:%p][ERROR] continual_io_error:%d > %d\n", dvobj, value, MAX_CONTINUAL_IO_ERR);
+ ret = _TRUE;
+ } else {
+ //DBG_871X("[dvobj:%p] continual_io_error:%d\n", dvobj, value);
+ }
+ return ret;
+}
+
+/*
+* Set the continual_io_error of this @param dvobjprive to 0
+*/
+void rtw_reset_continual_io_error(struct dvobj_priv *dvobj)
+{
+ ATOMIC_SET(&dvobj->continual_io_error, 0);
+}
+
#ifdef DBG_IO
u16 read_sniff_ranges[][2] = {
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_ioctl_set.c b/drivers/net/wireless/rtl8723as/core/rtw_ioctl_set.c
index 4df2e4e19425..d2d07d7ef386 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_ioctl_set.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_ioctl_set.c
@@ -47,6 +47,20 @@ extern void indicate_wx_scan_complete_event(_adapter *padapter);
(addr[4] == 0xff) && (addr[5] == 0xff) ) ? _TRUE : _FALSE \
)
+u8 rtw_validate_bssid(u8 *bssid)
+{
+ u8 ret = _TRUE;
+
+ if (is_zero_mac_addr(bssid)
+ || is_broadcast_mac_addr(bssid)
+ || is_multicast_mac_addr(bssid)
+ ) {
+ ret = _FALSE;
+ }
+
+ return ret;
+}
+
u8 rtw_validate_ssid(NDIS_802_11_SSID *ssid)
{
u8 i;
@@ -60,6 +74,7 @@ _func_enter_;
goto exit;
}
+#ifdef CONFIG_VALIDATE_SSID
for(i = 0; i < ssid->SsidLength; i++)
{
//wifi, printable ascii code must be supported
@@ -69,6 +84,7 @@ _func_enter_;
break;
}
}
+#endif /* CONFIG_VALIDATE_SSID */
exit:
@@ -374,24 +390,10 @@ _func_enter_;
}
handle_tkip_countermeasure:
- //should we add something here...?
-
-#ifdef PLATFORM_LINUX
- if (padapter->securitypriv.btkip_countermeasure == _TRUE) {
- cur_time = rtw_get_current_time();
-
- if( (cur_time - padapter->securitypriv.btkip_countermeasure_time) > 60 * HZ )
- {
- padapter->securitypriv.btkip_countermeasure = _FALSE;
- padapter->securitypriv.btkip_countermeasure_time = 0;
- }
- else
- {
- status = _FAIL;
- goto release_mlme_lock;
- }
+ if (rtw_handle_tkip_countermeasure(padapter, __func__) == _FAIL) {
+ status = _FAIL;
+ goto release_mlme_lock;
}
-#endif
_rtw_memcpy(&pmlmepriv->assoc_bssid, bssid, ETH_ALEN);
pmlmepriv->assoc_by_bssid=_TRUE;
@@ -506,56 +508,15 @@ _func_enter_;
}
handle_tkip_countermeasure:
-#ifdef PLATFORM_WINDOWS
- if (padapter->securitypriv.btkip_countermeasure==_TRUE)
- {
- LARGE_INTEGER sys_time;
- u32 diff_time,cur_time ;
- RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid:padapter->securitypriv.btkip_countermeasure==_TRUE\n"));
- NdisGetCurrentSystemTime(&sys_time);
- cur_time=(u32)(sys_time.QuadPart/10); // In micro-second.
- RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid:cur_time=0x%x\n",cur_time));
- RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid:psecuritypriv->last_mic_err_time=0x%x\n",padapter->securitypriv.btkip_countermeasure_time));
- diff_time = cur_time -padapter->securitypriv.btkip_countermeasure_time; // In micro-second.
- RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid:diff_time=0x%x\n",diff_time));
-
- if (diff_time > 60000000) {
- RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid(): countermeasure time >60s.\n"));
- padapter->securitypriv.btkip_countermeasure=_FALSE;
- // Update MIC error time.
- padapter->securitypriv.btkip_countermeasure_time=0;
- } else {
- // can't join in 60 seconds.
- status = _FAIL;
- RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_info_,("rtw_set_802_11_ssid(): countermeasure time <60s.\n"));
- goto release_mlme_lock;
- }
- }
-#endif
-
-#ifdef PLATFORM_LINUX
- if (padapter->securitypriv.btkip_countermeasure == _TRUE) {
- cur_time = rtw_get_current_time();
-
- if( (cur_time - padapter->securitypriv.btkip_countermeasure_time) > 60 * HZ )
- {
- padapter->securitypriv.btkip_countermeasure = _FALSE;
- padapter->securitypriv.btkip_countermeasure_time = 0;
- }
- else
- {
- status = _FAIL;
- goto release_mlme_lock;
- }
+ if (rtw_handle_tkip_countermeasure(padapter, __func__) == _FAIL) {
+ status = _FAIL;
+ goto release_mlme_lock;
}
-#endif
- #ifdef CONFIG_VALIDATE_SSID
if (rtw_validate_ssid(ssid) == _FALSE) {
status = _FAIL;
goto release_mlme_lock;
}
- #endif
_rtw_memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(NDIS_802_11_SSID));
pmlmepriv->assoc_by_bssid=_FALSE;
@@ -580,6 +541,79 @@ _func_exit_;
}
+u8 rtw_set_802_11_connect(_adapter* padapter, u8 *bssid, NDIS_802_11_SSID *ssid)
+{
+ _irqL irqL;
+ u8 status = _SUCCESS;
+ u32 cur_time = 0;
+ bool bssid_valid = _TRUE;
+ bool ssid_valid = _TRUE;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+
+_func_enter_;
+
+ if (!ssid || rtw_validate_ssid(ssid) == _FALSE)
+ ssid_valid = _FALSE;
+
+ if (!bssid || rtw_validate_bssid(bssid) == _FALSE)
+ bssid_valid = _FALSE;
+
+ if (ssid_valid == _FALSE && bssid_valid == _FALSE) {
+ DBG_871X(FUNC_ADPT_FMT" ssid:%p, ssid_valid:%d, bssid:%p, bssid_valid:%d\n",
+ FUNC_ADPT_ARG(padapter), ssid, ssid_valid, bssid, bssid_valid);
+ status = _FAIL;
+ goto exit;
+ }
+
+ if(padapter->hw_init_completed==_FALSE){
+ RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
+ ("set_ssid: hw_init_completed==_FALSE=>exit!!!\n"));
+ status = _FAIL;
+ goto exit;
+ }
+
+ _enter_critical_bh(&pmlmepriv->lock, &irqL);
+
+ DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" fw_state=0x%08x\n",
+ FUNC_ADPT_ARG(padapter), get_fwstate(pmlmepriv));
+
+ if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) {
+ goto handle_tkip_countermeasure;
+ } else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE) {
+ goto release_mlme_lock;
+ }
+
+handle_tkip_countermeasure:
+ if (rtw_handle_tkip_countermeasure(padapter, __func__) == _FAIL) {
+ status = _FAIL;
+ goto release_mlme_lock;
+ }
+
+ if (ssid && ssid_valid)
+ _rtw_memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(NDIS_802_11_SSID));
+
+ if (bssid && bssid_valid) {
+ _rtw_memcpy(&pmlmepriv->assoc_bssid, bssid, ETH_ALEN);
+ pmlmepriv->assoc_by_bssid = _TRUE;
+ }
+
+ if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) {
+ pmlmepriv->to_join = _TRUE;
+ }
+ else {
+ status = rtw_do_join(padapter);
+ }
+
+release_mlme_lock:
+ _exit_critical_bh(&pmlmepriv->lock, &irqL);
+
+exit:
+
+_func_exit_;
+
+ return status;
+}
+
u8 rtw_set_802_11_infrastructure_mode(_adapter* padapter,
NDIS_802_11_NETWORK_INFRASTRUCTURE networktype)
{
@@ -683,7 +717,8 @@ _func_enter_;
rtw_disassoc_cmd(padapter, 0, _TRUE);
rtw_indicate_disconnect(padapter);
- rtw_free_assoc_resources(padapter, 1);
+ //modify for CONFIG_IEEE80211W, none 11w can use it
+ rtw_free_assoc_resources_cmd(padapter);
rtw_pwr_wakeup(padapter);
}
@@ -832,7 +867,7 @@ _func_enter_;
psecuritypriv->dot11DefKey[keyid].skey[9],psecuritypriv->dot11DefKey[keyid].skey[10],psecuritypriv->dot11DefKey[keyid].skey[11],
psecuritypriv->dot11DefKey[keyid].skey[12]));
- res=rtw_set_key(padapter,psecuritypriv, keyid, 1);
+ res=rtw_set_key(padapter,psecuritypriv, keyid, 1,_TRUE);
if(res==_FAIL)
ret= _FALSE;
@@ -864,7 +899,7 @@ _func_enter_;
_rtw_memset(&psecuritypriv->dot11DefKey[keyindex], 0, 16);
- res=rtw_set_key(padapter,psecuritypriv,keyindex, 0);
+ res=rtw_set_key(padapter,psecuritypriv,keyindex, 0,_TRUE);
psecuritypriv->dot11DefKeylen[keyindex]=0;
@@ -1180,7 +1215,7 @@ _func_enter_;
RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("reset group key"));
- res=rtw_set_key(padapter,&padapter->securitypriv, key->KeyIndex, 1);
+ res=rtw_set_key(padapter,&padapter->securitypriv, key->KeyIndex, 1,_TRUE);
if(res==_FAIL)
ret= _FAIL;
@@ -1230,11 +1265,11 @@ _func_enter_;
//Set key to CAM through H2C command
if(bgrouptkey)//never go to here
{
- res=rtw_setstakey_cmd(padapter, (unsigned char *)stainfo, _FALSE);
+ res=rtw_setstakey_cmd(padapter, (unsigned char *)stainfo, _FALSE, _TRUE);
RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("\n rtw_set_802_11_add_key:rtw_setstakey_cmd(group)\n"));
}
else{
- res=rtw_setstakey_cmd(padapter, (unsigned char *)stainfo, _TRUE);
+ res=rtw_setstakey_cmd(padapter, (unsigned char *)stainfo, _TRUE, _TRUE);
RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("\n rtw_set_802_11_add_key:rtw_setstakey_cmd(unicast)\n"));
}
@@ -1441,6 +1476,8 @@ int rtw_set_country(_adapter *adapter, const char *country_code)
channel_plan = RT_CHANNEL_DOMAIN_MKK;
else if(0 == strcmp(country_code, "CN"))
channel_plan = RT_CHANNEL_DOMAIN_CHINA;
+ else if(0 == strcmp(country_code, "IN"))
+ channel_plan = RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN;
else
DBG_871X("%s unknown country_code:%s\n", __FUNCTION__, country_code);
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_led.c b/drivers/net/wireless/rtl8723as/core/rtw_led.c
index f8de4329ff45..7710f324c3a0 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_led.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_led.c
@@ -1,2422 +1,2422 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-#include <drv_types.h>
-
-//
-// Description:
-// Callback function of LED BlinkTimer,
-// it just schedules to corresponding BlinkWorkItem/led_blink_hdl
-//
-void BlinkTimerCallback(void *data)
-{
- PLED_871x pLed = (PLED_871x)data;
- _adapter *padapter = pLed->padapter;
-
- //DBG_871X("%s\n", __FUNCTION__);
-
- if( (padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
- {
- //DBG_871X("%s bSurpriseRemoved:%d, bDriverStopped:%d\n", __FUNCTION__, padapter->bSurpriseRemoved, padapter->bDriverStopped);
- return;
- }
-
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
- #ifdef CONFIG_LED_HANDLED_BY_CMD_THREAD
- rtw_led_blink_cmd(padapter, pLed);
- #else
- _set_workitem(&(pLed->BlinkWorkItem));
- #endif
-#elif defined(CONFIG_PCI_HCI)
- BlinkHandler(pLed);
-#endif
-
-}
-
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
-//
-// Description:
-// Callback function of LED BlinkWorkItem.
-// We dispatch acture LED blink action according to LedStrategy.
-//
-void BlinkWorkItemCallback(struct work_struct *work)
-{
- PLED_871x pLed = container_of(work, LED_871x, BlinkWorkItem);
- BlinkHandler(pLed);
-}
-#endif
-
-//
-// Description:
-// Reset status of LED_871x object.
-//
-void ResetLedStatus(PLED_871x pLed) {
-
- pLed->CurrLedState = RTW_LED_OFF; // Current LED state.
- pLed->bLedOn = _FALSE; // true if LED is ON, false if LED is OFF.
-
- pLed->bLedBlinkInProgress = _FALSE; // true if it is blinking, false o.w..
- pLed->bLedWPSBlinkInProgress = _FALSE;
-
- pLed->BlinkTimes = 0; // Number of times to toggle led state for blinking.
- pLed->BlinkingLedState = LED_UNKNOWN; // Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are.
-
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
- pLed->bLedNoLinkBlinkInProgress = _FALSE;
- pLed->bLedLinkBlinkInProgress = _FALSE;
- pLed->bLedStartToLinkBlinkInProgress = _FALSE;
- pLed->bLedScanBlinkInProgress = _FALSE;
-#endif
-}
-
- //
-// Description:
-// Initialize an LED_871x object.
-//
-void
-InitLed871x(
- _adapter *padapter,
- PLED_871x pLed,
- LED_PIN_871x LedPin
- )
-{
- pLed->padapter = padapter;
- pLed->LedPin = LedPin;
-
- ResetLedStatus(pLed);
-
- _init_timer(&(pLed->BlinkTimer), padapter->pnetdev, BlinkTimerCallback, pLed);
-
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
- _init_workitem(&(pLed->BlinkWorkItem), BlinkWorkItemCallback, pLed);
-#endif
-}
-
-
-//
-// Description:
-// DeInitialize an LED_871x object.
-//
-void
-DeInitLed871x(
- PLED_871x pLed
- )
-{
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
- _cancel_workitem_sync(&(pLed->BlinkWorkItem));
-#endif
- _cancel_timer_ex(&(pLed->BlinkTimer));
- ResetLedStatus(pLed);
-}
-
-
-//
-// Description:
-// Implementation of LED blinking behavior.
-// It toggle off LED and schedule corresponding timer if necessary.
-//
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
-
-void SwLedOn(_adapter *padapter, PLED_871x pLed);
-void SwLedOff(_adapter *padapter, PLED_871x pLed);
-
-#define CONFIG_LED_REMOVE_HAL
-
-void
-SwLedBlink(
- PLED_871x pLed
- )
-{
- _adapter *padapter = pLed->padapter;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- u8 bStopBlinking = _FALSE;
-
- // Change LED according to BlinkingLedState specified.
- if( pLed->BlinkingLedState == RTW_LED_ON )
- {
- SwLedOn(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
- }
- else
- {
- SwLedOff(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,( "Blinktimes (%d): turn off\n", pLed->BlinkTimes));
- }
-
- // Determine if we shall change LED state again.
- pLed->BlinkTimes--;
- switch(pLed->CurrLedState)
- {
-
- case LED_BLINK_NORMAL:
- if(pLed->BlinkTimes == 0)
- {
- bStopBlinking = _TRUE;
- }
- break;
-
- case LED_BLINK_StartToBlink:
- if( check_fwstate(pmlmepriv, _FW_LINKED) && check_fwstate(pmlmepriv, WIFI_STATION_STATE) )
- {
- bStopBlinking = _TRUE;
- }
- if( check_fwstate(pmlmepriv, _FW_LINKED) &&
- (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) )
- {
- bStopBlinking = _TRUE;
- }
- else if(pLed->BlinkTimes == 0)
- {
- bStopBlinking = _TRUE;
- }
- break;
-
- case LED_BLINK_WPS:
- if( pLed->BlinkTimes == 0 )
- {
- bStopBlinking = _TRUE;
- }
- break;
-
-
- default:
- bStopBlinking = _TRUE;
- break;
-
- }
-
- if(bStopBlinking)
- {
- //if( padapter->pwrctrlpriv.cpwm >= PS_STATE_S2)
- if(0)
- {
- SwLedOff(padapter, pLed);
- }
- else if( (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) && (pLed->bLedOn == _FALSE))
- {
- SwLedOn(padapter, pLed);
- }
- else if( (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) && pLed->bLedOn == _TRUE)
- {
- SwLedOff(padapter, pLed);
- }
-
- pLed->BlinkTimes = 0;
- pLed->bLedBlinkInProgress = _FALSE;
- }
- else
- {
- // Assign LED state to toggle.
- if( pLed->BlinkingLedState == RTW_LED_ON )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
-
- // Schedule a timer to toggle LED state.
- switch( pLed->CurrLedState )
- {
- case LED_BLINK_NORMAL:
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
- break;
-
- case LED_BLINK_SLOWLY:
- case LED_BLINK_StartToBlink:
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
- break;
-
- case LED_BLINK_WPS:
- {
- if( pLed->BlinkingLedState == RTW_LED_ON )
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
- else
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
- }
- break;
-
- default:
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
- break;
- }
- }
-}
-
-void
-SwLedBlink1(
- PLED_871x pLed
- )
-{
- _adapter *padapter = pLed->padapter;
-#ifndef CONFIG_LED_REMOVE_HAL
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
-#endif
- struct led_priv *ledpriv = &(padapter->ledpriv);
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- PLED_871x pLed1 = &(ledpriv->SwLed1);
- u8 bStopBlinking = _FALSE;
-
-#ifndef CONFIG_LED_REMOVE_HAL
- if(pHalData->EEPROMCustomerID == RT_CID_819x_CAMEO)
- pLed = &(ledpriv->SwLed1);
-#endif
-
- // Change LED according to BlinkingLedState specified.
- if( pLed->BlinkingLedState == RTW_LED_ON )
- {
- SwLedOn(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,( "Blinktimes (%d): turn on\n", pLed->BlinkTimes));
- }
- else
- {
- SwLedOff(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
- }
-
-#ifndef CONFIG_LED_REMOVE_HAL
- if(pHalData->EEPROMCustomerID == RT_CID_DEFAULT)
- {
- if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
- {
- if(!pLed1->bSWLedCtrl)
- {
- SwLedOn(padapter, pLed1);
- pLed1->bSWLedCtrl = _TRUE;
- }
- else if(!pLed1->bLedOn)
- SwLedOn(padapter, pLed1);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (): turn on pLed1\n"));
- }
- else
- {
- if(!pLed1->bSWLedCtrl)
- {
- SwLedOff(padapter, pLed1);
- pLed1->bSWLedCtrl = _TRUE;
- }
- else if(pLed1->bLedOn)
- SwLedOff(padapter, pLed1);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (): turn off pLed1\n"));
- }
- }
-
-#endif
-
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
- {
- SwLedOff(padapter, pLed);
- ResetLedStatus(pLed);
- return;
- }
-
- switch(pLed->CurrLedState)
- {
- case LED_BLINK_SLOWLY:
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
- break;
-
- case LED_BLINK_NORMAL:
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
- break;
-
- case LED_BLINK_SCAN:
- pLed->BlinkTimes--;
- if( pLed->BlinkTimes == 0 )
- {
- bStopBlinking = _TRUE;
- }
-
- if(bStopBlinking)
- {
- if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
- {
- pLed->bLedLinkBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_NORMAL;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
-
- }
- else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
- {
- pLed->bLedNoLinkBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_SLOWLY;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
- }
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
- else
- {
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
- }
- break;
-
- case LED_BLINK_TXRX:
- pLed->BlinkTimes--;
- if( pLed->BlinkTimes == 0 )
- {
- bStopBlinking = _TRUE;
- }
- if(bStopBlinking)
- {
- if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
- {
- pLed->bLedLinkBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_NORMAL;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
- }
- else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
- {
- pLed->bLedNoLinkBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_SLOWLY;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
- }
- pLed->BlinkTimes = 0;
- pLed->bLedBlinkInProgress = _FALSE;
- }
- else
- {
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
- }
- break;
-
- case LED_BLINK_WPS:
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
- break;
-
- case LED_BLINK_WPS_STOP: //WPS success
- if(pLed->BlinkingLedState == RTW_LED_ON)
- bStopBlinking = _FALSE;
- else
- bStopBlinking = _TRUE;
-
- if(bStopBlinking)
- {
- pLed->bLedLinkBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_NORMAL;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
-
- pLed->bLedWPSBlinkInProgress = _FALSE;
- }
- else
- {
- pLed->BlinkingLedState = RTW_LED_OFF;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
- }
- break;
-
- default:
- break;
- }
-
-}
-
-void
-SwLedBlink2(
- PLED_871x pLed
- )
-{
- _adapter *padapter = pLed->padapter;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- u8 bStopBlinking = _FALSE;
-
- // Change LED according to BlinkingLedState specified.
- if( pLed->BlinkingLedState == RTW_LED_ON)
- {
- SwLedOn(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
- }
- else
- {
- SwLedOff(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
- }
-
- switch(pLed->CurrLedState)
- {
- case LED_BLINK_SCAN:
- pLed->BlinkTimes--;
- if( pLed->BlinkTimes == 0 )
- {
- bStopBlinking = _TRUE;
- }
-
- if(bStopBlinking)
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
- {
- SwLedOff(padapter, pLed);
- }
- else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
- {
- pLed->CurrLedState = RTW_LED_ON;
- pLed->BlinkingLedState = RTW_LED_ON;
- SwLedOn(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop scan blink CurrLedState %d\n", pLed->CurrLedState));
-
- }
- else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
- {
- pLed->CurrLedState = RTW_LED_OFF;
- pLed->BlinkingLedState = RTW_LED_OFF;
- SwLedOff(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop scan blink CurrLedState %d\n", pLed->CurrLedState));
- }
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
- else
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
- {
- SwLedOff(padapter, pLed);
- }
- else
- {
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
- }
- }
- break;
-
- case LED_BLINK_TXRX:
- pLed->BlinkTimes--;
- if( pLed->BlinkTimes == 0 )
- {
- bStopBlinking = _TRUE;
- }
- if(bStopBlinking)
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
- {
- SwLedOff(padapter, pLed);
- }
- else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
- {
- pLed->CurrLedState = RTW_LED_ON;
- pLed->BlinkingLedState = RTW_LED_ON;
- SwLedOn(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop CurrLedState %d\n", pLed->CurrLedState));
-
- }
- else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
- {
- pLed->CurrLedState = RTW_LED_OFF;
- pLed->BlinkingLedState = RTW_LED_OFF;
- SwLedOff(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop CurrLedState %d\n", pLed->CurrLedState));
- }
- pLed->bLedBlinkInProgress = _FALSE;
- }
- else
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
- {
- SwLedOff(padapter, pLed);
- }
- else
- {
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
- }
- }
- break;
-
- default:
- break;
- }
-
-}
-
-void
-SwLedBlink3(
- PLED_871x pLed
- )
-{
- _adapter *padapter = pLed->padapter;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- u8 bStopBlinking = _FALSE;
-
- // Change LED according to BlinkingLedState specified.
- if( pLed->BlinkingLedState == RTW_LED_ON )
- {
- SwLedOn(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
- }
- else
- {
- if(pLed->CurrLedState != LED_BLINK_WPS_STOP)
- SwLedOff(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
- }
-
- switch(pLed->CurrLedState)
- {
- case LED_BLINK_SCAN:
- pLed->BlinkTimes--;
- if( pLed->BlinkTimes == 0 )
- {
- bStopBlinking = _TRUE;
- }
-
- if(bStopBlinking)
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
- {
- SwLedOff(padapter, pLed);
- }
- else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
- {
- pLed->CurrLedState = RTW_LED_ON;
- pLed->BlinkingLedState = RTW_LED_ON;
- if( !pLed->bLedOn )
- SwLedOn(padapter, pLed);
-
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
- }
- else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
- {
- pLed->CurrLedState = RTW_LED_OFF;
- pLed->BlinkingLedState = RTW_LED_OFF;
- if( pLed->bLedOn )
- SwLedOff(padapter, pLed);
-
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
- }
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
- else
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
- {
- SwLedOff(padapter, pLed);
- }
- else
- {
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
- }
- }
- break;
-
- case LED_BLINK_TXRX:
- pLed->BlinkTimes--;
- if( pLed->BlinkTimes == 0 )
- {
- bStopBlinking = _TRUE;
- }
- if(bStopBlinking)
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
- {
- SwLedOff(padapter, pLed);
- }
- else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
- {
- pLed->CurrLedState = RTW_LED_ON;
- pLed->BlinkingLedState = RTW_LED_ON;
-
- if( !pLed->bLedOn )
- SwLedOn(padapter, pLed);
-
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
- }
- else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
- {
- pLed->CurrLedState = RTW_LED_OFF;
- pLed->BlinkingLedState = RTW_LED_OFF;
-
- if( pLed->bLedOn )
- SwLedOff(padapter, pLed);
-
-
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
- }
- pLed->bLedBlinkInProgress = _FALSE;
- }
- else
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
- {
- SwLedOff(padapter, pLed);
- }
- else
- {
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
- }
- }
- break;
-
- case LED_BLINK_WPS:
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
- break;
-
- case LED_BLINK_WPS_STOP: //WPS success
- if(pLed->BlinkingLedState == RTW_LED_ON)
- {
- pLed->BlinkingLedState = RTW_LED_OFF;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
- bStopBlinking = _FALSE;
- }
- else
- {
- bStopBlinking = _TRUE;
- }
-
- if(bStopBlinking)
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on )
- {
- SwLedOff(padapter, pLed);
- }
- else
- {
- pLed->CurrLedState = RTW_LED_ON;
- pLed->BlinkingLedState = RTW_LED_ON;
- SwLedOn(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
- }
- pLed->bLedWPSBlinkInProgress = _FALSE;
- }
- break;
-
-
- default:
- break;
- }
-
-}
-
-
-void
-SwLedBlink4(
- PLED_871x pLed
- )
-{
- _adapter *padapter = pLed->padapter;
- struct led_priv *ledpriv = &(padapter->ledpriv);
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- PLED_871x pLed1 = &(ledpriv->SwLed1);
- u8 bStopBlinking = _FALSE;
-
- // Change LED according to BlinkingLedState specified.
- if( pLed->BlinkingLedState == RTW_LED_ON )
- {
- SwLedOn(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
- }
- else
- {
- SwLedOff(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
- }
-
- if(!pLed1->bLedWPSBlinkInProgress && pLed1->BlinkingLedState == LED_UNKNOWN)
- {
- pLed1->BlinkingLedState = RTW_LED_OFF;
- pLed1->CurrLedState = RTW_LED_OFF;
- SwLedOff(padapter, pLed1);
- }
-
- switch(pLed->CurrLedState)
- {
- case LED_BLINK_SLOWLY:
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
- break;
-
- case LED_BLINK_StartToBlink:
- if( pLed->bLedOn )
- {
- pLed->BlinkingLedState = RTW_LED_OFF;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
- }
- else
- {
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
- }
- break;
-
- case LED_BLINK_SCAN:
- pLed->BlinkTimes--;
- if( pLed->BlinkTimes == 0 )
- {
- bStopBlinking = _FALSE;
- }
-
- if(bStopBlinking)
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
- {
- SwLedOff(padapter, pLed);
- }
- else
- {
- pLed->bLedNoLinkBlinkInProgress = _FALSE;
- pLed->CurrLedState = LED_BLINK_SLOWLY;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
- }
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
- else
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
- {
- SwLedOff(padapter, pLed);
- }
- else
- {
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
- }
- }
- break;
-
- case LED_BLINK_TXRX:
- pLed->BlinkTimes--;
- if( pLed->BlinkTimes == 0 )
- {
- bStopBlinking = _TRUE;
- }
- if(bStopBlinking)
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
- {
- SwLedOff(padapter, pLed);
- }
- else
- {
- pLed->bLedNoLinkBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_SLOWLY;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
- }
- pLed->bLedBlinkInProgress = _FALSE;
- }
- else
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
- {
- SwLedOff(padapter, pLed);
- }
- else
- {
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
- }
- }
- break;
-
- case LED_BLINK_WPS:
- if( pLed->bLedOn )
- {
- pLed->BlinkingLedState = RTW_LED_OFF;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
- }
- else
- {
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
- }
- break;
-
- case LED_BLINK_WPS_STOP: //WPS authentication fail
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
-
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
- break;
-
- case LED_BLINK_WPS_STOP_OVERLAP: //WPS session overlap
- pLed->BlinkTimes--;
- if(pLed->BlinkTimes == 0)
- {
- if(pLed->bLedOn)
- {
- pLed->BlinkTimes = 1;
- }
- else
- {
- bStopBlinking = _TRUE;
- }
- }
-
- if(bStopBlinking)
- {
- pLed->BlinkTimes = 10;
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
- }
- else
- {
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
-
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
- }
- break;
-
-
- default:
- break;
- }
-
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SwLedBlink4 CurrLedState %d\n", pLed->CurrLedState));
-
-
-}
-
-void
-SwLedBlink5(
- PLED_871x pLed
- )
-{
- _adapter *padapter = pLed->padapter;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- u8 bStopBlinking = _FALSE;
-
- // Change LED according to BlinkingLedState specified.
- if( pLed->BlinkingLedState == RTW_LED_ON )
- {
- SwLedOn(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
- }
- else
- {
- SwLedOff(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
- }
-
- switch(pLed->CurrLedState)
- {
- case LED_BLINK_SCAN:
- pLed->BlinkTimes--;
- if( pLed->BlinkTimes == 0 )
- {
- bStopBlinking = _TRUE;
- }
-
- if(bStopBlinking)
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
- {
- pLed->CurrLedState = RTW_LED_OFF;
- pLed->BlinkingLedState = RTW_LED_OFF;
- if(pLed->bLedOn)
- SwLedOff(padapter, pLed);
- }
- else
- { pLed->CurrLedState = RTW_LED_ON;
- pLed->BlinkingLedState = RTW_LED_ON;
- if(!pLed->bLedOn)
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
- }
-
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
- else
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
- {
- SwLedOff(padapter, pLed);
- }
- else
- {
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
- }
- }
- break;
-
-
- case LED_BLINK_TXRX:
- pLed->BlinkTimes--;
- if( pLed->BlinkTimes == 0 )
- {
- bStopBlinking = _TRUE;
- }
-
- if(bStopBlinking)
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
- {
- pLed->CurrLedState = RTW_LED_OFF;
- pLed->BlinkingLedState = RTW_LED_OFF;
- if(pLed->bLedOn)
- SwLedOff(padapter, pLed);
- }
- else
- {
- pLed->CurrLedState = RTW_LED_ON;
- pLed->BlinkingLedState = RTW_LED_ON;
- if(!pLed->bLedOn)
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
- }
-
- pLed->bLedBlinkInProgress = _FALSE;
- }
- else
- {
- if( padapter->pwrctrlpriv.rf_pwrstate != rf_on && padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS)
- {
- SwLedOff(padapter, pLed);
- }
- else
- {
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
- }
- }
- break;
-
- default:
- break;
- }
-
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SwLedBlink5 CurrLedState %d\n", pLed->CurrLedState));
-
-
-}
-
-void
-SwLedBlink6(
- PLED_871x pLed
- )
-{
- _adapter *padapter = pLed->padapter;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- u8 bStopBlinking = _FALSE;
-
- // Change LED according to BlinkingLedState specified.
- if( pLed->BlinkingLedState == RTW_LED_ON )
- {
- SwLedOn(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
- }
- else
- {
- SwLedOff(padapter, pLed);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
- }
-
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("<==== blink6\n"));
-}
-
-static void
-SwLedControlMode0(
- _adapter *padapter,
- LED_CTL_MODE LedAction
-)
-{
- struct led_priv *ledpriv = &(padapter->ledpriv);
- PLED_871x pLed = &(ledpriv->SwLed1);
-
- // Decide led state
- switch(LedAction)
- {
- case LED_CTL_TX:
- case LED_CTL_RX:
- if( pLed->bLedBlinkInProgress == _FALSE )
- {
- pLed->bLedBlinkInProgress = _TRUE;
-
- pLed->CurrLedState = LED_BLINK_NORMAL;
- pLed->BlinkTimes = 2;
-
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
- }
- break;
-
- case LED_CTL_START_TO_LINK:
- if( pLed->bLedBlinkInProgress == _FALSE )
- {
- pLed->bLedBlinkInProgress = _TRUE;
-
- pLed->CurrLedState = LED_BLINK_StartToBlink;
- pLed->BlinkTimes = 24;
-
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
- }
- else
- {
- pLed->CurrLedState = LED_BLINK_StartToBlink;
- }
- break;
-
- case LED_CTL_LINK:
- pLed->CurrLedState = RTW_LED_ON;
- if( pLed->bLedBlinkInProgress == _FALSE )
- {
- SwLedOn(padapter, pLed);
- }
- break;
-
- case LED_CTL_NO_LINK:
- pLed->CurrLedState = RTW_LED_OFF;
- if( pLed->bLedBlinkInProgress == _FALSE )
- {
- SwLedOff(padapter, pLed);
- }
- break;
-
- case LED_CTL_POWER_OFF:
- pLed->CurrLedState = RTW_LED_OFF;
- if(pLed->bLedBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- SwLedOff(padapter, pLed);
- break;
-
- case LED_CTL_START_WPS:
- if( pLed->bLedBlinkInProgress == _FALSE || pLed->CurrLedState == RTW_LED_ON)
- {
- pLed->bLedBlinkInProgress = _TRUE;
-
- pLed->CurrLedState = LED_BLINK_WPS;
- pLed->BlinkTimes = 20;
-
- if( pLed->bLedOn )
- {
- pLed->BlinkingLedState = RTW_LED_OFF;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
- }
- else
- {
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
- }
- }
- break;
-
- case LED_CTL_STOP_WPS:
- if(pLed->bLedBlinkInProgress)
- {
- pLed->CurrLedState = RTW_LED_OFF;
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- break;
-
-
- default:
- break;
- }
-
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));
-
-}
-
- //ALPHA, added by chiyoko, 20090106
-static void
-SwLedControlMode1(
- _adapter *padapter,
- LED_CTL_MODE LedAction
-)
-{
-#ifndef CONFIG_LED_REMOVE_HAL
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
-#endif
- struct led_priv *ledpriv = &(padapter->ledpriv);
- PLED_871x pLed = &(ledpriv->SwLed0);
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-
-#ifndef CONFIG_LED_REMOVE_HAL
- if(pHalData->EEPROMCustomerID == RT_CID_819x_CAMEO)
- pLed = &(ledpriv->SwLed1);
-#endif
-
- switch(LedAction)
- {
- case LED_CTL_POWER_ON:
- case LED_CTL_START_TO_LINK:
- case LED_CTL_NO_LINK:
- if( pLed->bLedNoLinkBlinkInProgress == _FALSE )
- {
- if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
- {
- return;
- }
- if( pLed->bLedLinkBlinkInProgress == _TRUE )
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedLinkBlinkInProgress = _FALSE;
- }
- if(pLed->bLedBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
-
- pLed->bLedNoLinkBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_SLOWLY;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
- }
- break;
-
- case LED_CTL_LINK:
- if( pLed->bLedLinkBlinkInProgress == _FALSE )
- {
- if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
- {
- return;
- }
- if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedNoLinkBlinkInProgress = _FALSE;
- }
- if(pLed->bLedBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- pLed->bLedLinkBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_NORMAL;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
- }
- break;
-
- case LED_CTL_SITE_SURVEY:
- if((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
- ;
- else if(pLed->bLedScanBlinkInProgress ==_FALSE)
- {
- if(IS_LED_WPS_BLINKING(pLed))
- return;
-
- if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedNoLinkBlinkInProgress = _FALSE;
- }
- if( pLed->bLedLinkBlinkInProgress == _TRUE )
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedLinkBlinkInProgress = _FALSE;
- }
- if(pLed->bLedBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- pLed->bLedScanBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_SCAN;
- pLed->BlinkTimes = 24;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
- }
- break;
-
- case LED_CTL_TX:
- case LED_CTL_RX:
- if(pLed->bLedBlinkInProgress ==_FALSE)
- {
- if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
- {
- return;
- }
- if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedNoLinkBlinkInProgress = _FALSE;
- }
- if( pLed->bLedLinkBlinkInProgress == _TRUE )
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedLinkBlinkInProgress = _FALSE;
- }
- pLed->bLedBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_TXRX;
- pLed->BlinkTimes = 2;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
- }
- break;
-
- case LED_CTL_START_WPS: //wait until xinpin finish
- case LED_CTL_START_WPS_BOTTON:
- if(pLed->bLedWPSBlinkInProgress ==_FALSE)
- {
- if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedNoLinkBlinkInProgress = _FALSE;
- }
- if( pLed->bLedLinkBlinkInProgress == _TRUE )
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedLinkBlinkInProgress = _FALSE;
- }
- if(pLed->bLedBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- if(pLed->bLedScanBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
- pLed->bLedWPSBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_WPS;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
- }
- break;
-
-
- case LED_CTL_STOP_WPS:
- if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedNoLinkBlinkInProgress = _FALSE;
- }
- if( pLed->bLedLinkBlinkInProgress == _TRUE )
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedLinkBlinkInProgress = _FALSE;
- }
- if(pLed->bLedBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- if(pLed->bLedScanBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
- if(pLed->bLedWPSBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- }
- else
- {
- pLed->bLedWPSBlinkInProgress = _TRUE;
- }
-
- pLed->CurrLedState = LED_BLINK_WPS_STOP;
- if(pLed->bLedOn)
- {
- pLed->BlinkingLedState = RTW_LED_OFF;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
- }
- else
- {
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), 0);
- }
- break;
-
- case LED_CTL_STOP_WPS_FAIL:
- if(pLed->bLedWPSBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedWPSBlinkInProgress = _FALSE;
- }
-
- pLed->bLedNoLinkBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_SLOWLY;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
- break;
-
- case LED_CTL_POWER_OFF:
- pLed->CurrLedState = RTW_LED_OFF;
- pLed->BlinkingLedState = RTW_LED_OFF;
- if( pLed->bLedNoLinkBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedNoLinkBlinkInProgress = _FALSE;
- }
- if( pLed->bLedLinkBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedLinkBlinkInProgress = _FALSE;
- }
- if( pLed->bLedBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- if( pLed->bLedWPSBlinkInProgress )
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedWPSBlinkInProgress = _FALSE;
- }
- if( pLed->bLedScanBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
-
- SwLedOff(padapter, pLed);
- break;
-
- default:
- break;
-
- }
-
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));
-}
-
- //Arcadyan/Sitecom , added by chiyoko, 20090216
-static void
-SwLedControlMode2(
- _adapter *padapter,
- LED_CTL_MODE LedAction
-)
-{
- struct led_priv *ledpriv = &(padapter->ledpriv);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- PLED_871x pLed = &(ledpriv->SwLed0);
-
- switch(LedAction)
- {
- case LED_CTL_SITE_SURVEY:
- if(pmlmepriv->LinkDetectInfo.bBusyTraffic)
- ;
- else if(pLed->bLedScanBlinkInProgress ==_FALSE)
- {
- if(IS_LED_WPS_BLINKING(pLed))
- return;
-
- if(pLed->bLedBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- pLed->bLedScanBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_SCAN;
- pLed->BlinkTimes = 24;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
- }
- break;
-
- case LED_CTL_TX:
- case LED_CTL_RX:
- if((pLed->bLedBlinkInProgress ==_FALSE) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
- {
- if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
- {
- return;
- }
-
- pLed->bLedBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_TXRX;
- pLed->BlinkTimes = 2;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
- }
- break;
-
- case LED_CTL_LINK:
- pLed->CurrLedState = RTW_LED_ON;
- pLed->BlinkingLedState = RTW_LED_ON;
- if( pLed->bLedBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- if( pLed->bLedScanBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
-
- _set_timer(&(pLed->BlinkTimer), 0);
- break;
-
- case LED_CTL_START_WPS: //wait until xinpin finish
- case LED_CTL_START_WPS_BOTTON:
- if(pLed->bLedWPSBlinkInProgress ==_FALSE)
- {
- if(pLed->bLedBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- if(pLed->bLedScanBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
- pLed->bLedWPSBlinkInProgress = _TRUE;
- pLed->CurrLedState = RTW_LED_ON;
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), 0);
- }
- break;
-
- case LED_CTL_STOP_WPS:
- pLed->bLedWPSBlinkInProgress = _FALSE;
- if(padapter->pwrctrlpriv.rf_pwrstate != rf_on)
- {
- SwLedOff(padapter, pLed);
- }
- else
- {
- pLed->CurrLedState = RTW_LED_ON;
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), 0);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
- }
- break;
-
- case LED_CTL_STOP_WPS_FAIL:
- pLed->bLedWPSBlinkInProgress = _FALSE;
- if(padapter->pwrctrlpriv.rf_pwrstate != rf_on)
- {
- SwLedOff(padapter, pLed);
- }
- else
- {
- pLed->CurrLedState = RTW_LED_OFF;
- pLed->BlinkingLedState = RTW_LED_OFF;
- _set_timer(&(pLed->BlinkTimer), 0);
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
- }
- break;
-
- case LED_CTL_START_TO_LINK:
- case LED_CTL_NO_LINK:
- if(!IS_LED_BLINKING(pLed))
- {
- pLed->CurrLedState = RTW_LED_OFF;
- pLed->BlinkingLedState = RTW_LED_OFF;
- _set_timer(&(pLed->BlinkTimer), 0);
- }
- break;
-
- case LED_CTL_POWER_OFF:
- pLed->CurrLedState = RTW_LED_OFF;
- pLed->BlinkingLedState = RTW_LED_OFF;
- if( pLed->bLedBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- if( pLed->bLedScanBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
- if( pLed->bLedWPSBlinkInProgress )
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedWPSBlinkInProgress = _FALSE;
- }
-
- _set_timer(&(pLed->BlinkTimer), 0);
- break;
-
- default:
- break;
-
- }
-
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
-}
-
- //COREGA, added by chiyoko, 20090316
- static void
- SwLedControlMode3(
- _adapter *padapter,
- LED_CTL_MODE LedAction
-)
-{
- struct led_priv *ledpriv = &(padapter->ledpriv);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- PLED_871x pLed = &(ledpriv->SwLed0);
-
- switch(LedAction)
- {
- case LED_CTL_SITE_SURVEY:
- if(pmlmepriv->LinkDetectInfo.bBusyTraffic)
- ;
- else if(pLed->bLedScanBlinkInProgress ==_FALSE)
- {
- if(IS_LED_WPS_BLINKING(pLed))
- return;
-
- if(pLed->bLedBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- pLed->bLedScanBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_SCAN;
- pLed->BlinkTimes = 24;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
- }
- break;
-
- case LED_CTL_TX:
- case LED_CTL_RX:
- if((pLed->bLedBlinkInProgress ==_FALSE) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
- {
- if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
- {
- return;
- }
-
- pLed->bLedBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_TXRX;
- pLed->BlinkTimes = 2;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
- }
- break;
-
- case LED_CTL_LINK:
- if(IS_LED_WPS_BLINKING(pLed))
- return;
-
- pLed->CurrLedState = RTW_LED_ON;
- pLed->BlinkingLedState = RTW_LED_ON;
- if( pLed->bLedBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- if( pLed->bLedScanBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
-
- _set_timer(&(pLed->BlinkTimer), 0);
- break;
-
- case LED_CTL_START_WPS: //wait until xinpin finish
- case LED_CTL_START_WPS_BOTTON:
- if(pLed->bLedWPSBlinkInProgress ==_FALSE)
- {
- if(pLed->bLedBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- if(pLed->bLedScanBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
- pLed->bLedWPSBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_WPS;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
- }
- break;
-
- case LED_CTL_STOP_WPS:
- if(pLed->bLedWPSBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedWPSBlinkInProgress = _FALSE;
- }
- else
- {
- pLed->bLedWPSBlinkInProgress = _TRUE;
- }
-
- pLed->CurrLedState = LED_BLINK_WPS_STOP;
- if(pLed->bLedOn)
- {
- pLed->BlinkingLedState = RTW_LED_OFF;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
- }
- else
- {
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), 0);
- }
-
- break;
-
- case LED_CTL_STOP_WPS_FAIL:
- if(pLed->bLedWPSBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedWPSBlinkInProgress = _FALSE;
- }
-
- pLed->CurrLedState = RTW_LED_OFF;
- pLed->BlinkingLedState = RTW_LED_OFF;
- _set_timer(&(pLed->BlinkTimer), 0);
- break;
-
- case LED_CTL_START_TO_LINK:
- case LED_CTL_NO_LINK:
- if(!IS_LED_BLINKING(pLed))
- {
- pLed->CurrLedState = RTW_LED_OFF;
- pLed->BlinkingLedState = RTW_LED_OFF;
- _set_timer(&(pLed->BlinkTimer), 0);
- }
- break;
-
- case LED_CTL_POWER_OFF:
- pLed->CurrLedState = RTW_LED_OFF;
- pLed->BlinkingLedState = RTW_LED_OFF;
- if( pLed->bLedBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- if( pLed->bLedScanBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
- if( pLed->bLedWPSBlinkInProgress )
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedWPSBlinkInProgress = _FALSE;
- }
-
- _set_timer(&(pLed->BlinkTimer), 0);
- break;
-
- default:
- break;
-
- }
-
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
-}
-
-
- //Edimax-Belkin, added by chiyoko, 20090413
-static void
-SwLedControlMode4(
- _adapter *padapter,
- LED_CTL_MODE LedAction
-)
-{
- struct led_priv *ledpriv = &(padapter->ledpriv);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- PLED_871x pLed = &(ledpriv->SwLed0);
- PLED_871x pLed1 = &(ledpriv->SwLed1);
-
- switch(LedAction)
- {
- case LED_CTL_START_TO_LINK:
- if(pLed1->bLedWPSBlinkInProgress)
- {
- pLed1->bLedWPSBlinkInProgress = _FALSE;
- _cancel_timer_ex(&(pLed1->BlinkTimer));
-
- pLed1->BlinkingLedState = RTW_LED_OFF;
- pLed1->CurrLedState = RTW_LED_OFF;
-
- if(pLed1->bLedOn)
- _set_timer(&(pLed->BlinkTimer), 0);
- }
-
- if( pLed->bLedStartToLinkBlinkInProgress == _FALSE )
- {
- if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
- {
- return;
- }
- if(pLed->bLedBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- if(pLed->bLedNoLinkBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedNoLinkBlinkInProgress = _FALSE;
- }
-
- pLed->bLedStartToLinkBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_StartToBlink;
- if( pLed->bLedOn )
- {
- pLed->BlinkingLedState = RTW_LED_OFF;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
- }
- else
- {
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
- }
- }
- break;
-
- case LED_CTL_LINK:
- case LED_CTL_NO_LINK:
- //LED1 settings
- if(LedAction == LED_CTL_LINK)
- {
- if(pLed1->bLedWPSBlinkInProgress)
- {
- pLed1->bLedWPSBlinkInProgress = _FALSE;
- _cancel_timer_ex(&(pLed1->BlinkTimer));
-
- pLed1->BlinkingLedState = RTW_LED_OFF;
- pLed1->CurrLedState = RTW_LED_OFF;
-
- if(pLed1->bLedOn)
- _set_timer(&(pLed->BlinkTimer), 0);
- }
- }
-
- if( pLed->bLedNoLinkBlinkInProgress == _FALSE )
- {
- if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
- {
- return;
- }
- if(pLed->bLedBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
-
- pLed->bLedNoLinkBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_SLOWLY;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
- }
- break;
-
- case LED_CTL_SITE_SURVEY:
- if((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
- ;
- else if(pLed->bLedScanBlinkInProgress ==_FALSE)
- {
- if(IS_LED_WPS_BLINKING(pLed))
- return;
-
- if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedNoLinkBlinkInProgress = _FALSE;
- }
- if(pLed->bLedBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- pLed->bLedScanBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_SCAN;
- pLed->BlinkTimes = 24;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
- }
- break;
-
- case LED_CTL_TX:
- case LED_CTL_RX:
- if(pLed->bLedBlinkInProgress ==_FALSE)
- {
- if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
- {
- return;
- }
- if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedNoLinkBlinkInProgress = _FALSE;
- }
- pLed->bLedBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_TXRX;
- pLed->BlinkTimes = 2;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
- }
- break;
-
- case LED_CTL_START_WPS: //wait until xinpin finish
- case LED_CTL_START_WPS_BOTTON:
- if(pLed1->bLedWPSBlinkInProgress)
- {
- pLed1->bLedWPSBlinkInProgress = _FALSE;
- _cancel_timer_ex(&(pLed1->BlinkTimer));
-
- pLed1->BlinkingLedState = RTW_LED_OFF;
- pLed1->CurrLedState = RTW_LED_OFF;
-
- if(pLed1->bLedOn)
- _set_timer(&(pLed->BlinkTimer), 0);
- }
-
- if(pLed->bLedWPSBlinkInProgress ==_FALSE)
- {
- if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedNoLinkBlinkInProgress = _FALSE;
- }
- if(pLed->bLedBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- if(pLed->bLedScanBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
- pLed->bLedWPSBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_WPS;
- if( pLed->bLedOn )
- {
- pLed->BlinkingLedState = RTW_LED_OFF;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
- }
- else
- {
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
- }
- }
- break;
-
- case LED_CTL_STOP_WPS: //WPS connect success
- if(pLed->bLedWPSBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedWPSBlinkInProgress = _FALSE;
- }
-
- pLed->bLedNoLinkBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_SLOWLY;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
-
- break;
-
- case LED_CTL_STOP_WPS_FAIL: //WPS authentication fail
- if(pLed->bLedWPSBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedWPSBlinkInProgress = _FALSE;
- }
-
- pLed->bLedNoLinkBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_SLOWLY;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
-
- //LED1 settings
- if(pLed1->bLedWPSBlinkInProgress)
- _cancel_timer_ex(&(pLed1->BlinkTimer));
- else
- pLed1->bLedWPSBlinkInProgress = _TRUE;
-
- pLed1->CurrLedState = LED_BLINK_WPS_STOP;
- if( pLed1->bLedOn )
- pLed1->BlinkingLedState = RTW_LED_OFF;
- else
- pLed1->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
-
- break;
-
- case LED_CTL_STOP_WPS_FAIL_OVERLAP: //WPS session overlap
- if(pLed->bLedWPSBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedWPSBlinkInProgress = _FALSE;
- }
-
- pLed->bLedNoLinkBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_SLOWLY;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
-
- //LED1 settings
- if(pLed1->bLedWPSBlinkInProgress)
- _cancel_timer_ex(&(pLed1->BlinkTimer));
- else
- pLed1->bLedWPSBlinkInProgress = _TRUE;
-
- pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP;
- pLed1->BlinkTimes = 10;
- if( pLed1->bLedOn )
- pLed1->BlinkingLedState = RTW_LED_OFF;
- else
- pLed1->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
-
- break;
-
- case LED_CTL_POWER_OFF:
- pLed->CurrLedState = RTW_LED_OFF;
- pLed->BlinkingLedState = RTW_LED_OFF;
-
- if( pLed->bLedNoLinkBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedNoLinkBlinkInProgress = _FALSE;
- }
- if( pLed->bLedLinkBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedLinkBlinkInProgress = _FALSE;
- }
- if( pLed->bLedBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- if( pLed->bLedWPSBlinkInProgress )
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedWPSBlinkInProgress = _FALSE;
- }
- if( pLed->bLedScanBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedScanBlinkInProgress = _FALSE;
- }
- if( pLed->bLedStartToLinkBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedStartToLinkBlinkInProgress = _FALSE;
- }
-
- if( pLed1->bLedWPSBlinkInProgress )
- {
- _cancel_timer_ex(&(pLed1->BlinkTimer));
- pLed1->bLedWPSBlinkInProgress = _FALSE;
- }
-
- pLed1->BlinkingLedState = LED_UNKNOWN;
- SwLedOff(padapter, pLed);
- SwLedOff(padapter, pLed1);
- break;
-
- default:
- break;
-
- }
-
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));
-}
-
-
-
- //Sercomm-Belkin, added by chiyoko, 20090415
-static void
-SwLedControlMode5(
- _adapter *padapter,
- LED_CTL_MODE LedAction
-)
-{
-#ifndef CONFIG_LED_REMOVE_HAL
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
-#endif
- struct led_priv *ledpriv = &(padapter->ledpriv);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- PLED_871x pLed = &(ledpriv->SwLed0);
-
-#ifndef CONFIG_LED_REMOVE_HAL
- if(pHalData->EEPROMCustomerID == RT_CID_819x_CAMEO)
- pLed = &(ledpriv->SwLed1);
-#endif
-
- switch(LedAction)
- {
- case LED_CTL_POWER_ON:
- case LED_CTL_NO_LINK:
- case LED_CTL_LINK: //solid blue
- pLed->CurrLedState = RTW_LED_ON;
- pLed->BlinkingLedState = RTW_LED_ON;
-
- _set_timer(&(pLed->BlinkTimer), 0);
- break;
-
- case LED_CTL_SITE_SURVEY:
- if((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
- ;
- else if(pLed->bLedScanBlinkInProgress ==_FALSE)
- {
- if(pLed->bLedBlinkInProgress ==_TRUE)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
- pLed->bLedScanBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_SCAN;
- pLed->BlinkTimes = 24;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
- }
- break;
-
- case LED_CTL_TX:
- case LED_CTL_RX:
- if(pLed->bLedBlinkInProgress ==_FALSE)
- {
- if(pLed->CurrLedState == LED_BLINK_SCAN)
- {
- return;
- }
- pLed->bLedBlinkInProgress = _TRUE;
- pLed->CurrLedState = LED_BLINK_TXRX;
- pLed->BlinkTimes = 2;
- if( pLed->bLedOn )
- pLed->BlinkingLedState = RTW_LED_OFF;
- else
- pLed->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
- }
- break;
-
- case LED_CTL_POWER_OFF:
- pLed->CurrLedState = RTW_LED_OFF;
- pLed->BlinkingLedState = RTW_LED_OFF;
-
- if( pLed->bLedBlinkInProgress)
- {
- _cancel_timer_ex(&(pLed->BlinkTimer));
- pLed->bLedBlinkInProgress = _FALSE;
- }
-
- SwLedOff(padapter, pLed);
- break;
-
- default:
- break;
-
- }
-
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));
-}
-
- //WNC-Corega, added by chiyoko, 20090902
-static void
-SwLedControlMode6(
- _adapter *padapter,
- LED_CTL_MODE LedAction
-)
-{
- struct led_priv *ledpriv = &(padapter->ledpriv);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- PLED_871x pLed0 = &(ledpriv->SwLed0);
-
- switch(LedAction)
- {
- case LED_CTL_POWER_ON:
- case LED_CTL_LINK:
- case LED_CTL_NO_LINK:
- _cancel_timer_ex(&(pLed0->BlinkTimer));
- pLed0->CurrLedState = RTW_LED_ON;
- pLed0->BlinkingLedState = RTW_LED_ON;
- _set_timer(&(pLed0->BlinkTimer), 0);
- break;
-
- case LED_CTL_POWER_OFF:
- SwLedOff(padapter, pLed0);
- break;
-
- default:
- break;
- }
-
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("ledcontrol 6 Led %d\n", pLed0->CurrLedState));
-}
-
-//
-// Description:
-// Handler function of LED Blinking.
-// We dispatch acture LED blink action according to LedStrategy.
-//
-void BlinkHandler(PLED_871x pLed)
-{
- _adapter *padapter = pLed->padapter;
- struct led_priv *ledpriv = &(padapter->ledpriv);
-
- //DBG_871X("%s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);
-
- if( (padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
- {
- //DBG_871X("%s bSurpriseRemoved:%d, bDriverStopped:%d\n", __FUNCTION__, padapter->bSurpriseRemoved, padapter->bDriverStopped);
- return;
- }
-
- switch(ledpriv->LedStrategy)
- {
- case SW_LED_MODE0:
- SwLedBlink(pLed);
- break;
-
- case SW_LED_MODE1:
- SwLedBlink1(pLed);
- break;
-
- case SW_LED_MODE2:
- SwLedBlink2(pLed);
- break;
-
- case SW_LED_MODE3:
- SwLedBlink3(pLed);
- break;
-
- case SW_LED_MODE4:
- SwLedBlink4(pLed);
- break;
-
- case SW_LED_MODE5:
- SwLedBlink5(pLed);
- break;
-
- case SW_LED_MODE6:
- SwLedBlink6(pLed);
- break;
-
- default:
- //RT_TRACE(COMP_LED, DBG_LOUD, ("BlinkWorkItemCallback 0x%x \n", pHalData->LedStrategy));
- //SwLedBlink(pLed);
- break;
- }
-}
-
-void
-LedControl871x(
- _adapter *padapter,
- LED_CTL_MODE LedAction
- )
-{
- struct led_priv *ledpriv = &(padapter->ledpriv);
-
- if( (padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE)
- ||(padapter->hw_init_completed == _FALSE) )
- {
- return;
- }
-
-
- if( ledpriv->bRegUseLed == _FALSE)
- return;
-
- //if (!priv->up)
- // return;
-
- //if(priv->bInHctTest)
- // return;
-
- if( (padapter->pwrctrlpriv.rf_pwrstate != rf_on &&
- padapter->pwrctrlpriv.rfoff_reason > RF_CHANGE_BY_PS) &&
- (LedAction == LED_CTL_TX || LedAction == LED_CTL_RX ||
- LedAction == LED_CTL_SITE_SURVEY ||
- LedAction == LED_CTL_LINK ||
- LedAction == LED_CTL_NO_LINK ||
- LedAction == LED_CTL_POWER_ON) )
- {
- return;
- }
-
- switch(ledpriv->LedStrategy)
- {
- case SW_LED_MODE0:
- //SwLedControlMode0(padapter, LedAction);
- break;
-
- case SW_LED_MODE1:
- SwLedControlMode1(padapter, LedAction);
- break;
- case SW_LED_MODE2:
- SwLedControlMode2(padapter, LedAction);
- break;
-
- case SW_LED_MODE3:
- SwLedControlMode3(padapter, LedAction);
- break;
-
- case SW_LED_MODE4:
- SwLedControlMode4(padapter, LedAction);
- break;
-
- case SW_LED_MODE5:
- SwLedControlMode5(padapter, LedAction);
- break;
-
- case SW_LED_MODE6:
- SwLedControlMode6(padapter, LedAction);
- break;
-
- default:
- break;
- }
-
- RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("LedStrategy:%d, LedAction %d\n", ledpriv->LedStrategy,LedAction));
-}
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+#include <drv_types.h>
+
+//
+// Description:
+// Callback function of LED BlinkTimer,
+// it just schedules to corresponding BlinkWorkItem/led_blink_hdl
+//
+void BlinkTimerCallback(void *data)
+{
+ PLED_871x pLed = (PLED_871x)data;
+ _adapter *padapter = pLed->padapter;
+
+ //DBG_871X("%s\n", __FUNCTION__);
+
+ if( (padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
+ {
+ //DBG_871X("%s bSurpriseRemoved:%d, bDriverStopped:%d\n", __FUNCTION__, padapter->bSurpriseRemoved, padapter->bDriverStopped);
+ return;
+ }
+
+#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
+ #ifdef CONFIG_LED_HANDLED_BY_CMD_THREAD
+ rtw_led_blink_cmd(padapter, pLed);
+ #else
+ _set_workitem(&(pLed->BlinkWorkItem));
+ #endif
+#elif defined(CONFIG_PCI_HCI)
+ BlinkHandler(pLed);
+#endif
+
+}
+
+#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
+//
+// Description:
+// Callback function of LED BlinkWorkItem.
+// We dispatch acture LED blink action according to LedStrategy.
+//
+void BlinkWorkItemCallback(struct work_struct *work)
+{
+ PLED_871x pLed = container_of(work, LED_871x, BlinkWorkItem);
+ BlinkHandler(pLed);
+}
+#endif
+
+//
+// Description:
+// Reset status of LED_871x object.
+//
+void ResetLedStatus(PLED_871x pLed) {
+
+ pLed->CurrLedState = RTW_LED_OFF; // Current LED state.
+ pLed->bLedOn = _FALSE; // true if LED is ON, false if LED is OFF.
+
+ pLed->bLedBlinkInProgress = _FALSE; // true if it is blinking, false o.w..
+ pLed->bLedWPSBlinkInProgress = _FALSE;
+
+ pLed->BlinkTimes = 0; // Number of times to toggle led state for blinking.
+ pLed->BlinkingLedState = LED_UNKNOWN; // Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are.
+
+#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;
+ pLed->bLedLinkBlinkInProgress = _FALSE;
+ pLed->bLedStartToLinkBlinkInProgress = _FALSE;
+ pLed->bLedScanBlinkInProgress = _FALSE;
+#endif
+}
+
+ //
+// Description:
+// Initialize an LED_871x object.
+//
+void
+InitLed871x(
+ _adapter *padapter,
+ PLED_871x pLed,
+ LED_PIN_871x LedPin
+ )
+{
+ pLed->padapter = padapter;
+ pLed->LedPin = LedPin;
+
+ ResetLedStatus(pLed);
+
+ _init_timer(&(pLed->BlinkTimer), padapter->pnetdev, BlinkTimerCallback, pLed);
+
+#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI)
+ _init_workitem(&(pLed->BlinkWorkItem), BlinkWorkItemCallback, pLed);
+#endif
+}
+
+
+//
+// Description:
+// DeInitialize an LED_871x object.
+//
+void
+DeInitLed871x(
+ PLED_871x pLed
+ )
+{
+#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+ _cancel_workitem_sync(&(pLed->BlinkWorkItem));
+#endif
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ ResetLedStatus(pLed);
+}
+
+
+//
+// Description:
+// Implementation of LED blinking behavior.
+// It toggle off LED and schedule corresponding timer if necessary.
+//
+#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+
+void SwLedOn(_adapter *padapter, PLED_871x pLed);
+void SwLedOff(_adapter *padapter, PLED_871x pLed);
+
+#define CONFIG_LED_REMOVE_HAL
+
+void
+SwLedBlink(
+ PLED_871x pLed
+ )
+{
+ _adapter *padapter = pLed->padapter;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ u8 bStopBlinking = _FALSE;
+
+ // Change LED according to BlinkingLedState specified.
+ if( pLed->BlinkingLedState == RTW_LED_ON )
+ {
+ SwLedOn(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
+ }
+ else
+ {
+ SwLedOff(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,( "Blinktimes (%d): turn off\n", pLed->BlinkTimes));
+ }
+
+ // Determine if we shall change LED state again.
+ pLed->BlinkTimes--;
+ switch(pLed->CurrLedState)
+ {
+
+ case LED_BLINK_NORMAL:
+ if(pLed->BlinkTimes == 0)
+ {
+ bStopBlinking = _TRUE;
+ }
+ break;
+
+ case LED_BLINK_StartToBlink:
+ if( check_fwstate(pmlmepriv, _FW_LINKED) && check_fwstate(pmlmepriv, WIFI_STATION_STATE) )
+ {
+ bStopBlinking = _TRUE;
+ }
+ if( check_fwstate(pmlmepriv, _FW_LINKED) &&
+ (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) )
+ {
+ bStopBlinking = _TRUE;
+ }
+ else if(pLed->BlinkTimes == 0)
+ {
+ bStopBlinking = _TRUE;
+ }
+ break;
+
+ case LED_BLINK_WPS:
+ if( pLed->BlinkTimes == 0 )
+ {
+ bStopBlinking = _TRUE;
+ }
+ break;
+
+
+ default:
+ bStopBlinking = _TRUE;
+ break;
+
+ }
+
+ if(bStopBlinking)
+ {
+ //if(adapter_to_pwrctl(padapter)->cpwm >= PS_STATE_S2)
+ if(0)
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else if( (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) && (pLed->bLedOn == _FALSE))
+ {
+ SwLedOn(padapter, pLed);
+ }
+ else if( (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) && pLed->bLedOn == _TRUE)
+ {
+ SwLedOff(padapter, pLed);
+ }
+
+ pLed->BlinkTimes = 0;
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ else
+ {
+ // Assign LED state to toggle.
+ if( pLed->BlinkingLedState == RTW_LED_ON )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+
+ // Schedule a timer to toggle LED state.
+ switch( pLed->CurrLedState )
+ {
+ case LED_BLINK_NORMAL:
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
+ break;
+
+ case LED_BLINK_SLOWLY:
+ case LED_BLINK_StartToBlink:
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
+ break;
+
+ case LED_BLINK_WPS:
+ {
+ if( pLed->BlinkingLedState == RTW_LED_ON )
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
+ else
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
+ }
+ break;
+
+ default:
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
+ break;
+ }
+ }
+}
+
+void
+SwLedBlink1(
+ PLED_871x pLed
+ )
+{
+ _adapter *padapter = pLed->padapter;
+#ifndef CONFIG_LED_REMOVE_HAL
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+#endif
+ struct led_priv *ledpriv = &(padapter->ledpriv);
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ PLED_871x pLed1 = &(ledpriv->SwLed1);
+ u8 bStopBlinking = _FALSE;
+
+#ifndef CONFIG_LED_REMOVE_HAL
+ if(pHalData->EEPROMCustomerID == RT_CID_819x_CAMEO)
+ pLed = &(ledpriv->SwLed1);
+#endif
+
+ // Change LED according to BlinkingLedState specified.
+ if( pLed->BlinkingLedState == RTW_LED_ON )
+ {
+ SwLedOn(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,( "Blinktimes (%d): turn on\n", pLed->BlinkTimes));
+ }
+ else
+ {
+ SwLedOff(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
+ }
+
+#ifndef CONFIG_LED_REMOVE_HAL
+ if(pHalData->EEPROMCustomerID == RT_CID_DEFAULT)
+ {
+ if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
+ {
+ if(!pLed1->bSWLedCtrl)
+ {
+ SwLedOn(padapter, pLed1);
+ pLed1->bSWLedCtrl = _TRUE;
+ }
+ else if(!pLed1->bLedOn)
+ SwLedOn(padapter, pLed1);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (): turn on pLed1\n"));
+ }
+ else
+ {
+ if(!pLed1->bSWLedCtrl)
+ {
+ SwLedOff(padapter, pLed1);
+ pLed1->bSWLedCtrl = _TRUE;
+ }
+ else if(pLed1->bLedOn)
+ SwLedOff(padapter, pLed1);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (): turn off pLed1\n"));
+ }
+ }
+
+#endif
+
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )
+ {
+ SwLedOff(padapter, pLed);
+ ResetLedStatus(pLed);
+ return;
+ }
+
+ switch(pLed->CurrLedState)
+ {
+ case LED_BLINK_SLOWLY:
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
+ break;
+
+ case LED_BLINK_NORMAL:
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
+ break;
+
+ case LED_BLINK_SCAN:
+ pLed->BlinkTimes--;
+ if( pLed->BlinkTimes == 0 )
+ {
+ bStopBlinking = _TRUE;
+ }
+
+ if(bStopBlinking)
+ {
+ if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
+ {
+ pLed->bLedLinkBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_NORMAL;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
+
+ }
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
+ {
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_SLOWLY;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
+ }
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+ else
+ {
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_BLINK_TXRX:
+ pLed->BlinkTimes--;
+ if( pLed->BlinkTimes == 0 )
+ {
+ bStopBlinking = _TRUE;
+ }
+ if(bStopBlinking)
+ {
+ if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
+ {
+ pLed->bLedLinkBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_NORMAL;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
+ }
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
+ {
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_SLOWLY;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
+ }
+ pLed->BlinkTimes = 0;
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ else
+ {
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_BLINK_WPS:
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
+ break;
+
+ case LED_BLINK_WPS_STOP: //WPS success
+ if(pLed->BlinkingLedState == RTW_LED_ON)
+ bStopBlinking = _FALSE;
+ else
+ bStopBlinking = _TRUE;
+
+ if(bStopBlinking)
+ {
+ pLed->bLedLinkBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_NORMAL;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
+
+ pLed->bLedWPSBlinkInProgress = _FALSE;
+ }
+ else
+ {
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
+ }
+ break;
+
+ default:
+ break;
+ }
+
+}
+
+void
+SwLedBlink2(
+ PLED_871x pLed
+ )
+{
+ _adapter *padapter = pLed->padapter;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ u8 bStopBlinking = _FALSE;
+
+ // Change LED according to BlinkingLedState specified.
+ if( pLed->BlinkingLedState == RTW_LED_ON)
+ {
+ SwLedOn(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
+ }
+ else
+ {
+ SwLedOff(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
+ }
+
+ switch(pLed->CurrLedState)
+ {
+ case LED_BLINK_SCAN:
+ pLed->BlinkTimes--;
+ if( pLed->BlinkTimes == 0 )
+ {
+ bStopBlinking = _TRUE;
+ }
+
+ if(bStopBlinking)
+ {
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
+ {
+ pLed->CurrLedState = RTW_LED_ON;
+ pLed->BlinkingLedState = RTW_LED_ON;
+ SwLedOn(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop scan blink CurrLedState %d\n", pLed->CurrLedState));
+
+ }
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
+ {
+ pLed->CurrLedState = RTW_LED_OFF;
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ SwLedOff(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop scan blink CurrLedState %d\n", pLed->CurrLedState));
+ }
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+ else
+ {
+ if( adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else
+ {
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
+ }
+ }
+ break;
+
+ case LED_BLINK_TXRX:
+ pLed->BlinkTimes--;
+ if( pLed->BlinkTimes == 0 )
+ {
+ bStopBlinking = _TRUE;
+ }
+ if(bStopBlinking)
+ {
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
+ {
+ pLed->CurrLedState = RTW_LED_ON;
+ pLed->BlinkingLedState = RTW_LED_ON;
+ SwLedOn(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop CurrLedState %d\n", pLed->CurrLedState));
+
+ }
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
+ {
+ pLed->CurrLedState = RTW_LED_OFF;
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ SwLedOff(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("stop CurrLedState %d\n", pLed->CurrLedState));
+ }
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ else
+ {
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else
+ {
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+
+}
+
+void
+SwLedBlink3(
+ PLED_871x pLed
+ )
+{
+ _adapter *padapter = pLed->padapter;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ u8 bStopBlinking = _FALSE;
+
+ // Change LED according to BlinkingLedState specified.
+ if( pLed->BlinkingLedState == RTW_LED_ON )
+ {
+ SwLedOn(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
+ }
+ else
+ {
+ if(pLed->CurrLedState != LED_BLINK_WPS_STOP)
+ SwLedOff(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
+ }
+
+ switch(pLed->CurrLedState)
+ {
+ case LED_BLINK_SCAN:
+ pLed->BlinkTimes--;
+ if( pLed->BlinkTimes == 0 )
+ {
+ bStopBlinking = _TRUE;
+ }
+
+ if(bStopBlinking)
+ {
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
+ {
+ pLed->CurrLedState = RTW_LED_ON;
+ pLed->BlinkingLedState = RTW_LED_ON;
+ if( !pLed->bLedOn )
+ SwLedOn(padapter, pLed);
+
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
+ }
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
+ {
+ pLed->CurrLedState = RTW_LED_OFF;
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ if( pLed->bLedOn )
+ SwLedOff(padapter, pLed);
+
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
+ }
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+ else
+ {
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else
+ {
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
+ }
+ }
+ break;
+
+ case LED_BLINK_TXRX:
+ pLed->BlinkTimes--;
+ if( pLed->BlinkTimes == 0 )
+ {
+ bStopBlinking = _TRUE;
+ }
+ if(bStopBlinking)
+ {
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE)
+ {
+ pLed->CurrLedState = RTW_LED_ON;
+ pLed->BlinkingLedState = RTW_LED_ON;
+
+ if( !pLed->bLedOn )
+ SwLedOn(padapter, pLed);
+
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
+ }
+ else if(check_fwstate(pmlmepriv, _FW_LINKED)== _FALSE)
+ {
+ pLed->CurrLedState = RTW_LED_OFF;
+ pLed->BlinkingLedState = RTW_LED_OFF;
+
+ if( pLed->bLedOn )
+ SwLedOff(padapter, pLed);
+
+
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
+ }
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ else
+ {
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else
+ {
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
+ }
+ }
+ break;
+
+ case LED_BLINK_WPS:
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
+ break;
+
+ case LED_BLINK_WPS_STOP: //WPS success
+ if(pLed->BlinkingLedState == RTW_LED_ON)
+ {
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
+ bStopBlinking = _FALSE;
+ }
+ else
+ {
+ bStopBlinking = _TRUE;
+ }
+
+ if(bStopBlinking)
+ {
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on )
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else
+ {
+ pLed->CurrLedState = RTW_LED_ON;
+ pLed->BlinkingLedState = RTW_LED_ON;
+ SwLedOn(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
+ }
+ pLed->bLedWPSBlinkInProgress = _FALSE;
+ }
+ break;
+
+
+ default:
+ break;
+ }
+
+}
+
+
+void
+SwLedBlink4(
+ PLED_871x pLed
+ )
+{
+ _adapter *padapter = pLed->padapter;
+ struct led_priv *ledpriv = &(padapter->ledpriv);
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ PLED_871x pLed1 = &(ledpriv->SwLed1);
+ u8 bStopBlinking = _FALSE;
+
+ // Change LED according to BlinkingLedState specified.
+ if( pLed->BlinkingLedState == RTW_LED_ON )
+ {
+ SwLedOn(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
+ }
+ else
+ {
+ SwLedOff(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
+ }
+
+ if(!pLed1->bLedWPSBlinkInProgress && pLed1->BlinkingLedState == LED_UNKNOWN)
+ {
+ pLed1->BlinkingLedState = RTW_LED_OFF;
+ pLed1->CurrLedState = RTW_LED_OFF;
+ SwLedOff(padapter, pLed1);
+ }
+
+ switch(pLed->CurrLedState)
+ {
+ case LED_BLINK_SLOWLY:
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
+ break;
+
+ case LED_BLINK_StartToBlink:
+ if( pLed->bLedOn )
+ {
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
+ }
+ else
+ {
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
+ }
+ break;
+
+ case LED_BLINK_SCAN:
+ pLed->BlinkTimes--;
+ if( pLed->BlinkTimes == 0 )
+ {
+ bStopBlinking = _FALSE;
+ }
+
+ if(bStopBlinking)
+ {
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else
+ {
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;
+ pLed->CurrLedState = LED_BLINK_SLOWLY;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
+ }
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+ else
+ {
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else
+ {
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
+ }
+ }
+ break;
+
+ case LED_BLINK_TXRX:
+ pLed->BlinkTimes--;
+ if( pLed->BlinkTimes == 0 )
+ {
+ bStopBlinking = _TRUE;
+ }
+ if(bStopBlinking)
+ {
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else
+ {
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_SLOWLY;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
+ }
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ else
+ {
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else
+ {
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
+ }
+ }
+ break;
+
+ case LED_BLINK_WPS:
+ if( pLed->bLedOn )
+ {
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
+ }
+ else
+ {
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
+ }
+ break;
+
+ case LED_BLINK_WPS_STOP: //WPS authentication fail
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
+ break;
+
+ case LED_BLINK_WPS_STOP_OVERLAP: //WPS session overlap
+ pLed->BlinkTimes--;
+ if(pLed->BlinkTimes == 0)
+ {
+ if(pLed->bLedOn)
+ {
+ pLed->BlinkTimes = 1;
+ }
+ else
+ {
+ bStopBlinking = _TRUE;
+ }
+ }
+
+ if(bStopBlinking)
+ {
+ pLed->BlinkTimes = 10;
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
+ }
+ else
+ {
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
+ }
+ break;
+
+
+ default:
+ break;
+ }
+
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SwLedBlink4 CurrLedState %d\n", pLed->CurrLedState));
+
+
+}
+
+void
+SwLedBlink5(
+ PLED_871x pLed
+ )
+{
+ _adapter *padapter = pLed->padapter;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ u8 bStopBlinking = _FALSE;
+
+ // Change LED according to BlinkingLedState specified.
+ if( pLed->BlinkingLedState == RTW_LED_ON )
+ {
+ SwLedOn(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
+ }
+ else
+ {
+ SwLedOff(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
+ }
+
+ switch(pLed->CurrLedState)
+ {
+ case LED_BLINK_SCAN:
+ pLed->BlinkTimes--;
+ if( pLed->BlinkTimes == 0 )
+ {
+ bStopBlinking = _TRUE;
+ }
+
+ if(bStopBlinking)
+ {
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)
+ {
+ pLed->CurrLedState = RTW_LED_OFF;
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ if(pLed->bLedOn)
+ SwLedOff(padapter, pLed);
+ }
+ else
+ { pLed->CurrLedState = RTW_LED_ON;
+ pLed->BlinkingLedState = RTW_LED_ON;
+ if(!pLed->bLedOn)
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
+ }
+
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+ else
+ {
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else
+ {
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
+ }
+ }
+ break;
+
+
+ case LED_BLINK_TXRX:
+ pLed->BlinkTimes--;
+ if( pLed->BlinkTimes == 0 )
+ {
+ bStopBlinking = _TRUE;
+ }
+
+ if(bStopBlinking)
+ {
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)
+ {
+ pLed->CurrLedState = RTW_LED_OFF;
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ if(pLed->bLedOn)
+ SwLedOff(padapter, pLed);
+ }
+ else
+ {
+ pLed->CurrLedState = RTW_LED_ON;
+ pLed->BlinkingLedState = RTW_LED_ON;
+ if(!pLed->bLedOn)
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
+ }
+
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ else
+ {
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on && adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS)
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else
+ {
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("SwLedBlink5 CurrLedState %d\n", pLed->CurrLedState));
+
+
+}
+
+void
+SwLedBlink6(
+ PLED_871x pLed
+ )
+{
+ _adapter *padapter = pLed->padapter;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ u8 bStopBlinking = _FALSE;
+
+ // Change LED according to BlinkingLedState specified.
+ if( pLed->BlinkingLedState == RTW_LED_ON )
+ {
+ SwLedOn(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn on\n", pLed->BlinkTimes));
+ }
+ else
+ {
+ SwLedOff(padapter, pLed);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Blinktimes (%d): turn off\n", pLed->BlinkTimes));
+ }
+
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("<==== blink6\n"));
+}
+
+static void
+SwLedControlMode0(
+ _adapter *padapter,
+ LED_CTL_MODE LedAction
+)
+{
+ struct led_priv *ledpriv = &(padapter->ledpriv);
+ PLED_871x pLed = &(ledpriv->SwLed1);
+
+ // Decide led state
+ switch(LedAction)
+ {
+ case LED_CTL_TX:
+ case LED_CTL_RX:
+ if( pLed->bLedBlinkInProgress == _FALSE )
+ {
+ pLed->bLedBlinkInProgress = _TRUE;
+
+ pLed->CurrLedState = LED_BLINK_NORMAL;
+ pLed->BlinkTimes = 2;
+
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
+ }
+ break;
+
+ case LED_CTL_START_TO_LINK:
+ if( pLed->bLedBlinkInProgress == _FALSE )
+ {
+ pLed->bLedBlinkInProgress = _TRUE;
+
+ pLed->CurrLedState = LED_BLINK_StartToBlink;
+ pLed->BlinkTimes = 24;
+
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
+ }
+ else
+ {
+ pLed->CurrLedState = LED_BLINK_StartToBlink;
+ }
+ break;
+
+ case LED_CTL_LINK:
+ pLed->CurrLedState = RTW_LED_ON;
+ if( pLed->bLedBlinkInProgress == _FALSE )
+ {
+ SwLedOn(padapter, pLed);
+ }
+ break;
+
+ case LED_CTL_NO_LINK:
+ pLed->CurrLedState = RTW_LED_OFF;
+ if( pLed->bLedBlinkInProgress == _FALSE )
+ {
+ SwLedOff(padapter, pLed);
+ }
+ break;
+
+ case LED_CTL_POWER_OFF:
+ pLed->CurrLedState = RTW_LED_OFF;
+ if(pLed->bLedBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ SwLedOff(padapter, pLed);
+ break;
+
+ case LED_CTL_START_WPS:
+ if( pLed->bLedBlinkInProgress == _FALSE || pLed->CurrLedState == RTW_LED_ON)
+ {
+ pLed->bLedBlinkInProgress = _TRUE;
+
+ pLed->CurrLedState = LED_BLINK_WPS;
+ pLed->BlinkTimes = 20;
+
+ if( pLed->bLedOn )
+ {
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
+ }
+ else
+ {
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LONG_INTERVAL);
+ }
+ }
+ break;
+
+ case LED_CTL_STOP_WPS:
+ if(pLed->bLedBlinkInProgress)
+ {
+ pLed->CurrLedState = RTW_LED_OFF;
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ break;
+
+
+ default:
+ break;
+ }
+
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));
+
+}
+
+ //ALPHA, added by chiyoko, 20090106
+static void
+SwLedControlMode1(
+ _adapter *padapter,
+ LED_CTL_MODE LedAction
+)
+{
+#ifndef CONFIG_LED_REMOVE_HAL
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+#endif
+ struct led_priv *ledpriv = &(padapter->ledpriv);
+ PLED_871x pLed = &(ledpriv->SwLed0);
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+
+#ifndef CONFIG_LED_REMOVE_HAL
+ if(pHalData->EEPROMCustomerID == RT_CID_819x_CAMEO)
+ pLed = &(ledpriv->SwLed1);
+#endif
+
+ switch(LedAction)
+ {
+ case LED_CTL_POWER_ON:
+ case LED_CTL_START_TO_LINK:
+ case LED_CTL_NO_LINK:
+ if( pLed->bLedNoLinkBlinkInProgress == _FALSE )
+ {
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
+ {
+ return;
+ }
+ if( pLed->bLedLinkBlinkInProgress == _TRUE )
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedLinkBlinkInProgress = _FALSE;
+ }
+ if(pLed->bLedBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_SLOWLY;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_CTL_LINK:
+ if( pLed->bLedLinkBlinkInProgress == _FALSE )
+ {
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
+ {
+ return;
+ }
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;
+ }
+ if(pLed->bLedBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ pLed->bLedLinkBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_NORMAL;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_LINK_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_CTL_SITE_SURVEY:
+ if((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
+ ;
+ else if(pLed->bLedScanBlinkInProgress ==_FALSE)
+ {
+ if(IS_LED_WPS_BLINKING(pLed))
+ return;
+
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedLinkBlinkInProgress == _TRUE )
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedLinkBlinkInProgress = _FALSE;
+ }
+ if(pLed->bLedBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ pLed->bLedScanBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_SCAN;
+ pLed->BlinkTimes = 24;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_CTL_TX:
+ case LED_CTL_RX:
+ if(pLed->bLedBlinkInProgress ==_FALSE)
+ {
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
+ {
+ return;
+ }
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedLinkBlinkInProgress == _TRUE )
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedLinkBlinkInProgress = _FALSE;
+ }
+ pLed->bLedBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_TXRX;
+ pLed->BlinkTimes = 2;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_CTL_START_WPS: //wait until xinpin finish
+ case LED_CTL_START_WPS_BOTTON:
+ if(pLed->bLedWPSBlinkInProgress ==_FALSE)
+ {
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedLinkBlinkInProgress == _TRUE )
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedLinkBlinkInProgress = _FALSE;
+ }
+ if(pLed->bLedBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ if(pLed->bLedScanBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+ pLed->bLedWPSBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_WPS;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
+ }
+ break;
+
+
+ case LED_CTL_STOP_WPS:
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedLinkBlinkInProgress == _TRUE )
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedLinkBlinkInProgress = _FALSE;
+ }
+ if(pLed->bLedBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ if(pLed->bLedScanBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+ if(pLed->bLedWPSBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ }
+ else
+ {
+ pLed->bLedWPSBlinkInProgress = _TRUE;
+ }
+
+ pLed->CurrLedState = LED_BLINK_WPS_STOP;
+ if(pLed->bLedOn)
+ {
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
+ }
+ else
+ {
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), 0);
+ }
+ break;
+
+ case LED_CTL_STOP_WPS_FAIL:
+ if(pLed->bLedWPSBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedWPSBlinkInProgress = _FALSE;
+ }
+
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_SLOWLY;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
+ break;
+
+ case LED_CTL_POWER_OFF:
+ pLed->CurrLedState = RTW_LED_OFF;
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ if( pLed->bLedNoLinkBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedLinkBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedLinkBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedWPSBlinkInProgress )
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedWPSBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedScanBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+
+ SwLedOff(padapter, pLed);
+ break;
+
+ default:
+ break;
+
+ }
+
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));
+}
+
+ //Arcadyan/Sitecom , added by chiyoko, 20090216
+static void
+SwLedControlMode2(
+ _adapter *padapter,
+ LED_CTL_MODE LedAction
+)
+{
+ struct led_priv *ledpriv = &(padapter->ledpriv);
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ PLED_871x pLed = &(ledpriv->SwLed0);
+
+ switch(LedAction)
+ {
+ case LED_CTL_SITE_SURVEY:
+ if(pmlmepriv->LinkDetectInfo.bBusyTraffic)
+ ;
+ else if(pLed->bLedScanBlinkInProgress ==_FALSE)
+ {
+ if(IS_LED_WPS_BLINKING(pLed))
+ return;
+
+ if(pLed->bLedBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ pLed->bLedScanBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_SCAN;
+ pLed->BlinkTimes = 24;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_CTL_TX:
+ case LED_CTL_RX:
+ if((pLed->bLedBlinkInProgress ==_FALSE) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
+ {
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
+ {
+ return;
+ }
+
+ pLed->bLedBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_TXRX;
+ pLed->BlinkTimes = 2;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_CTL_LINK:
+ pLed->CurrLedState = RTW_LED_ON;
+ pLed->BlinkingLedState = RTW_LED_ON;
+ if( pLed->bLedBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedScanBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+
+ _set_timer(&(pLed->BlinkTimer), 0);
+ break;
+
+ case LED_CTL_START_WPS: //wait until xinpin finish
+ case LED_CTL_START_WPS_BOTTON:
+ if(pLed->bLedWPSBlinkInProgress ==_FALSE)
+ {
+ if(pLed->bLedBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ if(pLed->bLedScanBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+ pLed->bLedWPSBlinkInProgress = _TRUE;
+ pLed->CurrLedState = RTW_LED_ON;
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), 0);
+ }
+ break;
+
+ case LED_CTL_STOP_WPS:
+ pLed->bLedWPSBlinkInProgress = _FALSE;
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else
+ {
+ pLed->CurrLedState = RTW_LED_ON;
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), 0);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
+ }
+ break;
+
+ case LED_CTL_STOP_WPS_FAIL:
+ pLed->bLedWPSBlinkInProgress = _FALSE;
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on)
+ {
+ SwLedOff(padapter, pLed);
+ }
+ else
+ {
+ pLed->CurrLedState = RTW_LED_OFF;
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ _set_timer(&(pLed->BlinkTimer), 0);
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
+ }
+ break;
+
+ case LED_CTL_START_TO_LINK:
+ case LED_CTL_NO_LINK:
+ if(!IS_LED_BLINKING(pLed))
+ {
+ pLed->CurrLedState = RTW_LED_OFF;
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ _set_timer(&(pLed->BlinkTimer), 0);
+ }
+ break;
+
+ case LED_CTL_POWER_OFF:
+ pLed->CurrLedState = RTW_LED_OFF;
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ if( pLed->bLedBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedScanBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedWPSBlinkInProgress )
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedWPSBlinkInProgress = _FALSE;
+ }
+
+ _set_timer(&(pLed->BlinkTimer), 0);
+ break;
+
+ default:
+ break;
+
+ }
+
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
+}
+
+ //COREGA, added by chiyoko, 20090316
+ static void
+ SwLedControlMode3(
+ _adapter *padapter,
+ LED_CTL_MODE LedAction
+)
+{
+ struct led_priv *ledpriv = &(padapter->ledpriv);
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ PLED_871x pLed = &(ledpriv->SwLed0);
+
+ switch(LedAction)
+ {
+ case LED_CTL_SITE_SURVEY:
+ if(pmlmepriv->LinkDetectInfo.bBusyTraffic)
+ ;
+ else if(pLed->bLedScanBlinkInProgress ==_FALSE)
+ {
+ if(IS_LED_WPS_BLINKING(pLed))
+ return;
+
+ if(pLed->bLedBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ pLed->bLedScanBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_SCAN;
+ pLed->BlinkTimes = 24;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_CTL_TX:
+ case LED_CTL_RX:
+ if((pLed->bLedBlinkInProgress ==_FALSE) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
+ {
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
+ {
+ return;
+ }
+
+ pLed->bLedBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_TXRX;
+ pLed->BlinkTimes = 2;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_CTL_LINK:
+ if(IS_LED_WPS_BLINKING(pLed))
+ return;
+
+ pLed->CurrLedState = RTW_LED_ON;
+ pLed->BlinkingLedState = RTW_LED_ON;
+ if( pLed->bLedBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedScanBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+
+ _set_timer(&(pLed->BlinkTimer), 0);
+ break;
+
+ case LED_CTL_START_WPS: //wait until xinpin finish
+ case LED_CTL_START_WPS_BOTTON:
+ if(pLed->bLedWPSBlinkInProgress ==_FALSE)
+ {
+ if(pLed->bLedBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ if(pLed->bLedScanBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+ pLed->bLedWPSBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_WPS;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_CTL_STOP_WPS:
+ if(pLed->bLedWPSBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedWPSBlinkInProgress = _FALSE;
+ }
+ else
+ {
+ pLed->bLedWPSBlinkInProgress = _TRUE;
+ }
+
+ pLed->CurrLedState = LED_BLINK_WPS_STOP;
+ if(pLed->bLedOn)
+ {
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA);
+ }
+ else
+ {
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), 0);
+ }
+
+ break;
+
+ case LED_CTL_STOP_WPS_FAIL:
+ if(pLed->bLedWPSBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedWPSBlinkInProgress = _FALSE;
+ }
+
+ pLed->CurrLedState = RTW_LED_OFF;
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ _set_timer(&(pLed->BlinkTimer), 0);
+ break;
+
+ case LED_CTL_START_TO_LINK:
+ case LED_CTL_NO_LINK:
+ if(!IS_LED_BLINKING(pLed))
+ {
+ pLed->CurrLedState = RTW_LED_OFF;
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ _set_timer(&(pLed->BlinkTimer), 0);
+ }
+ break;
+
+ case LED_CTL_POWER_OFF:
+ pLed->CurrLedState = RTW_LED_OFF;
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ if( pLed->bLedBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedScanBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedWPSBlinkInProgress )
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedWPSBlinkInProgress = _FALSE;
+ }
+
+ _set_timer(&(pLed->BlinkTimer), 0);
+ break;
+
+ default:
+ break;
+
+ }
+
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("CurrLedState %d\n", pLed->CurrLedState));
+}
+
+
+ //Edimax-Belkin, added by chiyoko, 20090413
+static void
+SwLedControlMode4(
+ _adapter *padapter,
+ LED_CTL_MODE LedAction
+)
+{
+ struct led_priv *ledpriv = &(padapter->ledpriv);
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ PLED_871x pLed = &(ledpriv->SwLed0);
+ PLED_871x pLed1 = &(ledpriv->SwLed1);
+
+ switch(LedAction)
+ {
+ case LED_CTL_START_TO_LINK:
+ if(pLed1->bLedWPSBlinkInProgress)
+ {
+ pLed1->bLedWPSBlinkInProgress = _FALSE;
+ _cancel_timer_ex(&(pLed1->BlinkTimer));
+
+ pLed1->BlinkingLedState = RTW_LED_OFF;
+ pLed1->CurrLedState = RTW_LED_OFF;
+
+ if(pLed1->bLedOn)
+ _set_timer(&(pLed->BlinkTimer), 0);
+ }
+
+ if( pLed->bLedStartToLinkBlinkInProgress == _FALSE )
+ {
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
+ {
+ return;
+ }
+ if(pLed->bLedBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ if(pLed->bLedNoLinkBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;
+ }
+
+ pLed->bLedStartToLinkBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_StartToBlink;
+ if( pLed->bLedOn )
+ {
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
+ }
+ else
+ {
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
+ }
+ }
+ break;
+
+ case LED_CTL_LINK:
+ case LED_CTL_NO_LINK:
+ //LED1 settings
+ if(LedAction == LED_CTL_LINK)
+ {
+ if(pLed1->bLedWPSBlinkInProgress)
+ {
+ pLed1->bLedWPSBlinkInProgress = _FALSE;
+ _cancel_timer_ex(&(pLed1->BlinkTimer));
+
+ pLed1->BlinkingLedState = RTW_LED_OFF;
+ pLed1->CurrLedState = RTW_LED_OFF;
+
+ if(pLed1->bLedOn)
+ _set_timer(&(pLed->BlinkTimer), 0);
+ }
+ }
+
+ if( pLed->bLedNoLinkBlinkInProgress == _FALSE )
+ {
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
+ {
+ return;
+ }
+ if(pLed->bLedBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_SLOWLY;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_CTL_SITE_SURVEY:
+ if((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
+ ;
+ else if(pLed->bLedScanBlinkInProgress ==_FALSE)
+ {
+ if(IS_LED_WPS_BLINKING(pLed))
+ return;
+
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;
+ }
+ if(pLed->bLedBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ pLed->bLedScanBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_SCAN;
+ pLed->BlinkTimes = 24;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_CTL_TX:
+ case LED_CTL_RX:
+ if(pLed->bLedBlinkInProgress ==_FALSE)
+ {
+ if(pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
+ {
+ return;
+ }
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;
+ }
+ pLed->bLedBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_TXRX;
+ pLed->BlinkTimes = 2;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_CTL_START_WPS: //wait until xinpin finish
+ case LED_CTL_START_WPS_BOTTON:
+ if(pLed1->bLedWPSBlinkInProgress)
+ {
+ pLed1->bLedWPSBlinkInProgress = _FALSE;
+ _cancel_timer_ex(&(pLed1->BlinkTimer));
+
+ pLed1->BlinkingLedState = RTW_LED_OFF;
+ pLed1->CurrLedState = RTW_LED_OFF;
+
+ if(pLed1->bLedOn)
+ _set_timer(&(pLed->BlinkTimer), 0);
+ }
+
+ if(pLed->bLedWPSBlinkInProgress ==_FALSE)
+ {
+ if(pLed->bLedNoLinkBlinkInProgress == _TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;
+ }
+ if(pLed->bLedBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ if(pLed->bLedScanBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+ pLed->bLedWPSBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_WPS;
+ if( pLed->bLedOn )
+ {
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SLOWLY_INTERVAL);
+ }
+ else
+ {
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
+ }
+ }
+ break;
+
+ case LED_CTL_STOP_WPS: //WPS connect success
+ if(pLed->bLedWPSBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedWPSBlinkInProgress = _FALSE;
+ }
+
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_SLOWLY;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
+
+ break;
+
+ case LED_CTL_STOP_WPS_FAIL: //WPS authentication fail
+ if(pLed->bLedWPSBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedWPSBlinkInProgress = _FALSE;
+ }
+
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_SLOWLY;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
+
+ //LED1 settings
+ if(pLed1->bLedWPSBlinkInProgress)
+ _cancel_timer_ex(&(pLed1->BlinkTimer));
+ else
+ pLed1->bLedWPSBlinkInProgress = _TRUE;
+
+ pLed1->CurrLedState = LED_BLINK_WPS_STOP;
+ if( pLed1->bLedOn )
+ pLed1->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed1->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
+
+ break;
+
+ case LED_CTL_STOP_WPS_FAIL_OVERLAP: //WPS session overlap
+ if(pLed->bLedWPSBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedWPSBlinkInProgress = _FALSE;
+ }
+
+ pLed->bLedNoLinkBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_SLOWLY;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NO_LINK_INTERVAL_ALPHA);
+
+ //LED1 settings
+ if(pLed1->bLedWPSBlinkInProgress)
+ _cancel_timer_ex(&(pLed1->BlinkTimer));
+ else
+ pLed1->bLedWPSBlinkInProgress = _TRUE;
+
+ pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP;
+ pLed1->BlinkTimes = 10;
+ if( pLed1->bLedOn )
+ pLed1->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed1->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_NORMAL_INTERVAL);
+
+ break;
+
+ case LED_CTL_POWER_OFF:
+ pLed->CurrLedState = RTW_LED_OFF;
+ pLed->BlinkingLedState = RTW_LED_OFF;
+
+ if( pLed->bLedNoLinkBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedNoLinkBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedLinkBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedLinkBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedWPSBlinkInProgress )
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedWPSBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedScanBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedScanBlinkInProgress = _FALSE;
+ }
+ if( pLed->bLedStartToLinkBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedStartToLinkBlinkInProgress = _FALSE;
+ }
+
+ if( pLed1->bLedWPSBlinkInProgress )
+ {
+ _cancel_timer_ex(&(pLed1->BlinkTimer));
+ pLed1->bLedWPSBlinkInProgress = _FALSE;
+ }
+
+ pLed1->BlinkingLedState = LED_UNKNOWN;
+ SwLedOff(padapter, pLed);
+ SwLedOff(padapter, pLed1);
+ break;
+
+ default:
+ break;
+
+ }
+
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));
+}
+
+
+
+ //Sercomm-Belkin, added by chiyoko, 20090415
+static void
+SwLedControlMode5(
+ _adapter *padapter,
+ LED_CTL_MODE LedAction
+)
+{
+#ifndef CONFIG_LED_REMOVE_HAL
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+#endif
+ struct led_priv *ledpriv = &(padapter->ledpriv);
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ PLED_871x pLed = &(ledpriv->SwLed0);
+
+#ifndef CONFIG_LED_REMOVE_HAL
+ if(pHalData->EEPROMCustomerID == RT_CID_819x_CAMEO)
+ pLed = &(ledpriv->SwLed1);
+#endif
+
+ switch(LedAction)
+ {
+ case LED_CTL_POWER_ON:
+ case LED_CTL_NO_LINK:
+ case LED_CTL_LINK: //solid blue
+ pLed->CurrLedState = RTW_LED_ON;
+ pLed->BlinkingLedState = RTW_LED_ON;
+
+ _set_timer(&(pLed->BlinkTimer), 0);
+ break;
+
+ case LED_CTL_SITE_SURVEY:
+ if((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE))
+ ;
+ else if(pLed->bLedScanBlinkInProgress ==_FALSE)
+ {
+ if(pLed->bLedBlinkInProgress ==_TRUE)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+ pLed->bLedScanBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_SCAN;
+ pLed->BlinkTimes = 24;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_SCAN_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_CTL_TX:
+ case LED_CTL_RX:
+ if(pLed->bLedBlinkInProgress ==_FALSE)
+ {
+ if(pLed->CurrLedState == LED_BLINK_SCAN)
+ {
+ return;
+ }
+ pLed->bLedBlinkInProgress = _TRUE;
+ pLed->CurrLedState = LED_BLINK_TXRX;
+ pLed->BlinkTimes = 2;
+ if( pLed->bLedOn )
+ pLed->BlinkingLedState = RTW_LED_OFF;
+ else
+ pLed->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed->BlinkTimer), LED_BLINK_FASTER_INTERVAL_ALPHA);
+ }
+ break;
+
+ case LED_CTL_POWER_OFF:
+ pLed->CurrLedState = RTW_LED_OFF;
+ pLed->BlinkingLedState = RTW_LED_OFF;
+
+ if( pLed->bLedBlinkInProgress)
+ {
+ _cancel_timer_ex(&(pLed->BlinkTimer));
+ pLed->bLedBlinkInProgress = _FALSE;
+ }
+
+ SwLedOff(padapter, pLed);
+ break;
+
+ default:
+ break;
+
+ }
+
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("Led %d\n", pLed->CurrLedState));
+}
+
+ //WNC-Corega, added by chiyoko, 20090902
+static void
+SwLedControlMode6(
+ _adapter *padapter,
+ LED_CTL_MODE LedAction
+)
+{
+ struct led_priv *ledpriv = &(padapter->ledpriv);
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ PLED_871x pLed0 = &(ledpriv->SwLed0);
+
+ switch(LedAction)
+ {
+ case LED_CTL_POWER_ON:
+ case LED_CTL_LINK:
+ case LED_CTL_NO_LINK:
+ _cancel_timer_ex(&(pLed0->BlinkTimer));
+ pLed0->CurrLedState = RTW_LED_ON;
+ pLed0->BlinkingLedState = RTW_LED_ON;
+ _set_timer(&(pLed0->BlinkTimer), 0);
+ break;
+
+ case LED_CTL_POWER_OFF:
+ SwLedOff(padapter, pLed0);
+ break;
+
+ default:
+ break;
+ }
+
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("ledcontrol 6 Led %d\n", pLed0->CurrLedState));
+}
+
+//
+// Description:
+// Handler function of LED Blinking.
+// We dispatch acture LED blink action according to LedStrategy.
+//
+void BlinkHandler(PLED_871x pLed)
+{
+ _adapter *padapter = pLed->padapter;
+ struct led_priv *ledpriv = &(padapter->ledpriv);
+
+ //DBG_871X("%s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);
+
+ if( (padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
+ {
+ //DBG_871X("%s bSurpriseRemoved:%d, bDriverStopped:%d\n", __FUNCTION__, padapter->bSurpriseRemoved, padapter->bDriverStopped);
+ return;
+ }
+
+ switch(ledpriv->LedStrategy)
+ {
+ case SW_LED_MODE0:
+ SwLedBlink(pLed);
+ break;
+
+ case SW_LED_MODE1:
+ SwLedBlink1(pLed);
+ break;
+
+ case SW_LED_MODE2:
+ SwLedBlink2(pLed);
+ break;
+
+ case SW_LED_MODE3:
+ SwLedBlink3(pLed);
+ break;
+
+ case SW_LED_MODE4:
+ SwLedBlink4(pLed);
+ break;
+
+ case SW_LED_MODE5:
+ SwLedBlink5(pLed);
+ break;
+
+ case SW_LED_MODE6:
+ SwLedBlink6(pLed);
+ break;
+
+ default:
+ //RT_TRACE(COMP_LED, DBG_LOUD, ("BlinkWorkItemCallback 0x%x \n", pHalData->LedStrategy));
+ //SwLedBlink(pLed);
+ break;
+ }
+}
+
+void
+LedControl871x(
+ _adapter *padapter,
+ LED_CTL_MODE LedAction
+ )
+{
+ struct led_priv *ledpriv = &(padapter->ledpriv);
+
+ if( (padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE)
+ ||(padapter->hw_init_completed == _FALSE) )
+ {
+ return;
+ }
+
+
+ if( ledpriv->bRegUseLed == _FALSE)
+ return;
+
+ //if (!priv->up)
+ // return;
+
+ //if(priv->bInHctTest)
+ // return;
+
+ if( (adapter_to_pwrctl(padapter)->rf_pwrstate != rf_on &&
+ adapter_to_pwrctl(padapter)->rfoff_reason > RF_CHANGE_BY_PS) &&
+ (LedAction == LED_CTL_TX || LedAction == LED_CTL_RX ||
+ LedAction == LED_CTL_SITE_SURVEY ||
+ LedAction == LED_CTL_LINK ||
+ LedAction == LED_CTL_NO_LINK ||
+ LedAction == LED_CTL_POWER_ON) )
+ {
+ return;
+ }
+
+ switch(ledpriv->LedStrategy)
+ {
+ case SW_LED_MODE0:
+ //SwLedControlMode0(padapter, LedAction);
+ break;
+
+ case SW_LED_MODE1:
+ SwLedControlMode1(padapter, LedAction);
+ break;
+ case SW_LED_MODE2:
+ SwLedControlMode2(padapter, LedAction);
+ break;
+
+ case SW_LED_MODE3:
+ SwLedControlMode3(padapter, LedAction);
+ break;
+
+ case SW_LED_MODE4:
+ SwLedControlMode4(padapter, LedAction);
+ break;
+
+ case SW_LED_MODE5:
+ SwLedControlMode5(padapter, LedAction);
+ break;
+
+ case SW_LED_MODE6:
+ SwLedControlMode6(padapter, LedAction);
+ break;
+
+ default:
+ break;
+ }
+
+ RT_TRACE(_module_rtl8712_led_c_,_drv_info_,("LedStrategy:%d, LedAction %d\n", ledpriv->LedStrategy,LedAction));
+}
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_mlme.c b/drivers/net/wireless/rtl8723as/core/rtw_mlme.c
index a827c0221b36..b5e1807c69d7 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_mlme.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_mlme.c
@@ -119,7 +119,7 @@ static void rtw_free_mlme_ie_data(u8 **ppie, u32 *plen)
{
if(*ppie)
{
- _rtw_mfree(*ppie, *plen);
+ rtw_mfree(*ppie, *plen);
*plen = 0;
*ppie=NULL;
}
@@ -628,7 +628,7 @@ inline int is_same_ess(WLAN_BSSID_EX *a, WLAN_BSSID_EX *b)
&& _rtw_memcmp(a->Ssid.Ssid, b->Ssid.Ssid, a->Ssid.SsidLength)==_TRUE;
}
-int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst)
+int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst, u8 feature)
{
u16 s_cap, d_cap;
@@ -658,6 +658,14 @@ _func_enter_;
_func_exit_;
+#ifdef CONFIG_P2P
+ if ((feature == 1) && // 1: P2P supported
+ (_rtw_memcmp(src->MacAddress, dst->MacAddress, ETH_ALEN) == _TRUE)
+ ) {
+ return _TRUE;
+ }
+#endif
+
return ((src->Ssid.SsidLength == dst->Ssid.SsidLength) &&
// (src->Configuration.DSConfig == dst->Configuration.DSConfig) &&
( (_rtw_memcmp(src->MacAddress, dst->MacAddress, ETH_ALEN)) == _TRUE) &&
@@ -723,10 +731,10 @@ _func_enter_;
rtw_hal_antdiv_rssi_compared(padapter, dst, src); //this will update src.Rssi, need consider again
#endif
- #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) && 1
+ #if defined(DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) && 1
if(strcmp(dst->Ssid.Ssid, DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) == 0) {
- DBG_871X("%s %s("MAC_FMT", ch%u) ss_ori:%3u, sq_ori:%3u, rssi_ori:%3ld, ss_smp:%3u, sq_smp:%3u, rssi_smp:%3ld\n"
- , __FUNCTION__
+ DBG_871X(FUNC_ADPT_FMT" %s("MAC_FMT", ch%u) ss_ori:%3u, sq_ori:%3u, rssi_ori:%3ld, ss_smp:%3u, sq_smp:%3u, rssi_smp:%3ld\n"
+ , FUNC_ADPT_ARG(padapter)
, src->Ssid.Ssid, MAC_ARG(src->MacAddress), src->Configuration.DSConfig
,ss_ori, sq_ori, rssi_ori
,ss_smp, sq_smp, rssi_smp
@@ -735,7 +743,7 @@ _func_enter_;
#endif
/* The rule below is 1/5 for sample value, 4/5 for history value */
- if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) && is_same_network(&(padapter->mlmepriv.cur_network.network), src)) {
+ if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) && is_same_network(&(padapter->mlmepriv.cur_network.network), src, 0)) {
/* Take the recvpriv's value for the connected AP*/
ss_final = padapter->recvpriv.signal_strength;
sq_final = padapter->recvpriv.signal_qual;
@@ -759,24 +767,27 @@ _func_enter_;
}
- if (update_ie)
+ if (update_ie) {
+ dst->Reserved[0] = src->Reserved[0];
+ dst->Reserved[1] = src->Reserved[1];
_rtw_memcpy((u8 *)dst, (u8 *)src, get_WLAN_BSSID_EX_sz(src));
+ }
dst->PhyInfo.SignalStrength = ss_final;
dst->PhyInfo.SignalQuality = sq_final;
dst->Rssi = rssi_final;
- #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) && 1
+ #if defined(DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) && 1
if(strcmp(dst->Ssid.Ssid, DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) == 0) {
- DBG_871X("%s %s("MAC_FMT"), SignalStrength:%u, SignalQuality:%u, RawRSSI:%ld\n"
- , __FUNCTION__
+ DBG_871X(FUNC_ADPT_FMT" %s("MAC_FMT"), SignalStrength:%u, SignalQuality:%u, RawRSSI:%ld\n"
+ , FUNC_ADPT_ARG(padapter)
, dst->Ssid.Ssid, MAC_ARG(dst->MacAddress), dst->PhyInfo.SignalStrength, dst->PhyInfo.SignalQuality, dst->Rssi);
}
#endif
#if 0 // old codes, may be useful one day...
// DBG_871X("update_network: rssi=0x%lx dst->Rssi=%d ,dst->Rssi=0x%lx , src->Rssi=0x%lx",(dst->Rssi+src->Rssi)/2,dst->Rssi,dst->Rssi,src->Rssi);
- if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) && is_same_network(&(padapter->mlmepriv.cur_network.network), src))
+ if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) && is_same_network(&(padapter->mlmepriv.cur_network.network), src, 0))
{
//DBG_871X("b:ssid=%s update_network: src->rssi=0x%d padapter->recvpriv.ui_rssi=%d\n",src->Ssid.Ssid,src->Rssi,padapter->recvpriv.signal);
@@ -825,7 +836,7 @@ _func_enter_;
}
#endif
- if ( (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) && (is_same_network(&(pmlmepriv->cur_network.network), pnetwork)))
+ if ( (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) && (is_same_network(&(pmlmepriv->cur_network.network), pnetwork, 0)))
{
//RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,"Same Network\n");
@@ -854,9 +865,13 @@ void rtw_update_scanned_network(_adapter *adapter, WLAN_BSSID_EX *target)
_list *plist, *phead;
ULONG bssid_ex_sz;
struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
+ struct mlme_ext_priv *pmlmeext = &(adapter->mlmeextpriv);
+ struct wifidirect_info *pwdinfo= &(adapter->wdinfo);
_queue *queue = &(pmlmepriv->scanned_queue);
struct wlan_network *pnetwork = NULL;
struct wlan_network *oldest = NULL;
+ int target_find = 0;
+ u8 feature = 0;
_func_enter_;
@@ -864,6 +879,11 @@ _func_enter_;
phead = get_list_head(queue);
plist = get_next(phead);
+#ifdef CONFIG_P2P
+ if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
+ feature = 1; // p2p enable
+#endif
+
while(1)
{
if (rtw_end_of_queue_search(phead,plist)== _TRUE)
@@ -878,8 +898,10 @@ _func_enter_;
#endif
}
- if (is_same_network(&(pnetwork->network), target))
+ if (is_same_network(&(pnetwork->network), target, feature)) {
+ target_find = 1;
break;
+ }
if ((oldest == ((struct wlan_network *)0)) ||
time_after(oldest->last_scanned, pnetwork->last_scanned))
@@ -892,7 +914,8 @@ _func_enter_;
/* If we didn't find a match, then get a new network slot to initialize
* with this beacon's information */
- if (rtw_end_of_queue_search(phead,plist)== _TRUE) {
+ //if (rtw_end_of_queue_search(phead,plist)== _TRUE) {
+ if (!target_find) {
if (_rtw_queue_empty(&(pmlmepriv->free_bss_pool)) == _TRUE) {
/* If there are no more slots, expire the oldest */
@@ -955,8 +978,15 @@ _func_enter_;
pnetwork->last_scanned = rtw_get_current_time();
//target.Reserved[0]==1, means that scaned network is a bcn frame.
- if((pnetwork->network.IELength>target->IELength) && (target->Reserved[0]==1))
+ // probe resp(3) > beacon(1) > probe req(2)
+ if ((target->Reserved[0] != 2) &&
+ (target->Reserved[0] >= pnetwork->network.Reserved[0])
+ ) {
+ update_ie = _TRUE;
+ }
+ else {
update_ie = _FALSE;
+ }
update_network(&(pnetwork->network), target,adapter, update_ie);
}
@@ -1026,8 +1056,20 @@ int rtw_is_desired_network(_adapter *adapter, struct wlan_network *pnetwork)
}
if (adapter->registrypriv.wifi_spec == 1) //for correct flow of 8021X to do....
{
+ u8 *p=NULL;
+ uint ie_len=0;
+
if ((desired_encmode == Ndis802_11EncryptionDisabled) && (privacy != 0))
bselected = _FALSE;
+
+ if ( psecuritypriv->ndisauthtype == Ndis802_11AuthModeWPA2PSK) {
+ p = rtw_get_ie(pnetwork->network.IEs + _BEACON_IE_OFFSET_, _RSN_IE_2_, &ie_len, (pnetwork->network.IELength - _BEACON_IE_OFFSET_));
+ if (p && ie_len>0) {
+ bselected = _TRUE;
+ } else {
+ bselected = _FALSE;
+ }
+ }
}
@@ -1129,7 +1171,7 @@ _func_enter_;
pnetwork->Ssid.SsidLength = 0;
}
rtw_add_network(adapter, pnetwork);
- }
+ }
exit:
@@ -1145,6 +1187,7 @@ _func_exit_;
void rtw_surveydone_event_callback(_adapter *adapter, u8 *pbuf)
{
_irqL irqL;
+ u8 timer_cancelled = _FALSE;
struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
#ifdef CONFIG_MLME_EXT
@@ -1156,7 +1199,6 @@ void rtw_surveydone_event_callback(_adapter *adapter, u8 *pbuf)
_func_enter_;
_enter_critical_bh(&pmlmepriv->lock, &irqL);
-
if(pmlmepriv->wps_probe_req_ie)
{
u32 free_len = pmlmepriv->wps_probe_req_ie_len;
@@ -1169,9 +1211,10 @@ _func_enter_;
if (check_fwstate(pmlmepriv,_FW_UNDER_SURVEY))
{
- u8 timer_cancelled;
-
- _cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled);
+ //u8 timer_cancelled;
+
+ timer_cancelled = _TRUE;
+ //_cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled);
_clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
}
@@ -1179,6 +1222,13 @@ _func_enter_;
RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("nic status =%x, survey done event comes too late!\n", get_fwstate(pmlmepriv)));
}
+ _exit_critical_bh(&pmlmepriv->lock, &irqL);
+
+ if(timer_cancelled)
+ _cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled);
+
+
+ _enter_critical_bh(&pmlmepriv->lock, &irqL);
#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
rtw_set_signal_stat_timer(&adapter->recvpriv);
@@ -1293,7 +1343,7 @@ _func_enter_;
{
struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
if(pmlmeext->sitesurvey_res.bss_cnt == 0){
- rtw_hal_sreset_reset(adapter);
+ //rtw_hal_sreset_reset(adapter);
}
}
#endif
@@ -1413,6 +1463,32 @@ _func_enter_;
if(pwlan)
{
pwlan->fixed = _FALSE;
+#ifdef CONFIG_P2P
+ if(!rtw_p2p_chk_state(&adapter->wdinfo, P2P_STATE_NONE))
+ {
+ u32 p2p_ielen=0;
+ u8 *p2p_ie;
+ //u16 capability;
+ u8 *pcap = NULL;
+ u32 capability_len=0;
+
+ //DBG_871X("free disconnecting network\n");
+ //rtw_free_network_nolock(pmlmepriv, pwlan);
+
+ if((p2p_ie=rtw_get_p2p_ie(pwlan->network.IEs+_FIXED_IE_LENGTH_, pwlan->network.IELength-_FIXED_IE_LENGTH_, NULL, &p2p_ielen)))
+ {
+ pcap = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, NULL, &capability_len);
+ if(pcap && capability_len==2)
+ {
+ u16 cap = *(u16*)pcap ;
+ *(u16*)pcap = cap&0x00ff;//clear group capability when free this network
+ }
+ }
+
+ rtw_set_scan_deny(adapter, 2000);
+ //rtw_clear_scan_deny(adapter);
+ }
+#endif //CONFIG_P2P
}
else
{
@@ -1429,7 +1505,7 @@ _func_enter_;
if(lock_scanned_queue)
_exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
- pmlmepriv->key_mask = 0;
+ adapter->securitypriv.key_mask = 0;
_func_exit_;
@@ -1536,7 +1612,7 @@ _func_enter_;
rtw_os_indicate_disconnect(padapter);
//set ips_deny_time to avoid enter IPS before LPS leave
- padapter->pwrctrlpriv.ips_deny_time = rtw_get_current_time() + rtw_ms_to_systime(3000);
+ adapter_to_pwrctl(padapter)->ips_deny_time = rtw_get_current_time() + rtw_ms_to_systime(3000);
_clr_fwstate_(pmlmepriv, _FW_LINKED);
@@ -1551,9 +1627,6 @@ _func_enter_;
#endif // CONFIG_P2P_PS
#ifdef CONFIG_LPS
-#ifdef CONFIG_WOWLAN
- if(padapter->pwrctrlpriv.wowlan_mode==_FALSE)
-#endif //CONFIG_WOWLAN
rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_DISCONNECT, 1);
#endif
@@ -1587,7 +1660,7 @@ void rtw_scan_abort(_adapter *adapter)
if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) {
if (!adapter->bDriverStopped && !adapter->bSurpriseRemoved)
DBG_871X(FUNC_NDEV_FMT"waiting for scan_abort time out!\n", FUNC_NDEV_ARG(adapter->pnetdev));
- #ifdef CONFIG_PLATFORM_MSTAR_TITANIA12
+ #ifdef CONFIG_PLATFORM_MSTAR
//_clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
set_survey_timer(pmlmeext, 0);
_set_timer(&pmlmepriv->scan_to_timer, 50);
@@ -1642,7 +1715,10 @@ static struct sta_info *rtw_joinbss_update_stainfo(_adapter *padapter, struct wl
_rtw_memset((u8 *)&psta->dot11tkiprxmickey, 0, sizeof (union Keytype));
_rtw_memset((u8 *)&psta->dot11tkiptxmickey, 0, sizeof (union Keytype));
- _rtw_memset((u8 *)&psta->dot11txpn, 0, sizeof (union pn48));
+ _rtw_memset((u8 *)&psta->dot11txpn, 0, sizeof (union pn48));
+#ifdef CONFIG_IEEE80211W
+ _rtw_memset((u8 *)&psta->dot11wtxpn, 0, sizeof (union pn48));
+#endif //CONFIG_IEEE80211W
_rtw_memset((u8 *)&psta->dot11rxpn, 0, sizeof (union pn48));
}
@@ -1732,9 +1808,9 @@ static void rtw_joinbss_update_network(_adapter *padapter, struct wlan_network *
//the ptarget_wlan->network.Rssi is raw data, we use ptarget_wlan->network.PhyInfo.SignalStrength instead (has scaled)
padapter->recvpriv.rssi = translate_percentage_to_dbm(ptarget_wlan->network.PhyInfo.SignalStrength);
#if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) && 1
- DBG_871X("%s signal_strength:%3u, rssi:%3d, signal_qual:%3u"
+ DBG_871X(FUNC_ADPT_FMT" signal_strength:%3u, rssi:%3d, signal_qual:%3u"
"\n"
- , __FUNCTION__
+ , FUNC_ADPT_ARG(padapter)
, padapter->recvpriv.signal_strength
, padapter->recvpriv.rssi
, padapter->recvpriv.signal_qual
@@ -1911,15 +1987,16 @@ _func_enter_;
}
//s4. indicate connect
- if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
- {
- rtw_indicate_connect(adapter);
- }
- else
- {
- //adhoc mode will rtw_indicate_connect when rtw_stassoc_event_callback
- RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("adhoc mode, fw_state:%x", get_fwstate(pmlmepriv)));
- }
+ if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
+ {
+ pmlmepriv->cur_network_scanned = ptarget_wlan;
+ rtw_indicate_connect(adapter);
+ }
+ else
+ {
+ //adhoc mode will rtw_indicate_connect when rtw_stassoc_event_callback
+ RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("adhoc mode, fw_state:%x", get_fwstate(pmlmepriv)));
+ }
//s5. Cancle assoc_timer
@@ -2057,10 +2134,10 @@ u8 search_max_mac_id(_adapter *padapter)
}
-//FOR AP ,AD-HOC mode
-void rtw_stassoc_hw_rpt(_adapter *adapter,struct sta_info *psta)
+//FOR STA, AP ,AD-HOC mode
+void rtw_sta_media_status_rpt(_adapter *adapter,struct sta_info *psta, u32 mstatus)
{
- u16 media_status;
+ u16 media_status_rpt;
if(psta==NULL) return;
@@ -2070,8 +2147,8 @@ void rtw_stassoc_hw_rpt(_adapter *adapter,struct sta_info *psta)
rtw_hal_set_hwreg(adapter,HW_VAR_TX_RPT_MAX_MACID, (u8*)&macid);
}
#endif
- media_status = (psta->mac_id<<8)|1; // MACID|OPMODE:1 connect
- rtw_hal_set_hwreg(adapter,HW_VAR_H2C_MEDIA_STATUS_RPT,(u8 *)&media_status);
+ media_status_rpt = (u16)((psta->mac_id<<8)|mstatus); // MACID|OPMODE:1 connect
+ rtw_hal_set_hwreg(adapter,HW_VAR_H2C_MEDIA_STATUS_RPT,(u8 *)&media_status_rpt);
}
void rtw_stassoc_event_callback(_adapter *adapter, u8 *pbuf)
@@ -2094,13 +2171,18 @@ _func_enter_;
psta = rtw_get_stainfo(&adapter->stapriv, pstassoc->macaddr);
if(psta)
{
-#ifdef CONFIG_IOCTL_CFG80211
- #ifdef COMPAT_KERNEL_RELEASE
-
- #elif (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
u8 *passoc_req = NULL;
- u32 assoc_req_len;
+ u32 assoc_req_len = 0;
+
+ rtw_sta_media_status_rpt(adapter, psta, 1);
+
+#ifndef CONFIG_AUTO_AP_MODE
+
+ ap_sta_info_defer_update(adapter, psta);
+ //report to upper layer
+ DBG_871X("indicate_sta_assoc_event to upper layer - hostapd\n");
+#ifdef CONFIG_IOCTL_CFG80211
_enter_critical_bh(&psta->lock, &irqL);
if(psta->passoc_req && psta->assoc_req_len>0)
{
@@ -2110,7 +2192,7 @@ _func_enter_;
assoc_req_len = psta->assoc_req_len;
_rtw_memcpy(passoc_req, psta->passoc_req, assoc_req_len);
- _rtw_mfree(psta->passoc_req , psta->assoc_req_len);
+ rtw_mfree(psta->passoc_req , psta->assoc_req_len);
psta->passoc_req = NULL;
psta->assoc_req_len = 0;
}
@@ -2120,23 +2202,18 @@ _func_enter_;
if(passoc_req && assoc_req_len>0)
{
rtw_cfg80211_indicate_sta_assoc(adapter, passoc_req, assoc_req_len);
-
- _rtw_mfree(passoc_req, assoc_req_len);
- }
- #endif //(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37)) || defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
-#endif //CONFIG_IOCTL_CFG80211
-
- //bss_cap_update_on_sta_join(adapter, psta);
- //sta_info_update(adapter, psta);
- ap_sta_info_defer_update(adapter, psta);
-
- rtw_stassoc_hw_rpt(adapter,psta);
-
- }
+ rtw_mfree(passoc_req, assoc_req_len);
+ }
+#else //!CONFIG_IOCTL_CFG80211
+ rtw_indicate_sta_assoc_event(adapter, psta);
+#endif //!CONFIG_IOCTL_CFG80211
+#endif //!CONFIG_AUTO_AP_MODE
+ }
goto exit;
}
-#endif
+#endif //defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
+
//for AD-HOC mode
psta = rtw_get_stainfo(&adapter->stapriv, pstassoc->macaddr);
if( psta != NULL)
@@ -2162,7 +2239,7 @@ _func_enter_;
//for ad-hoc mode
rtw_hal_set_odm_var(adapter,HAL_ODM_STA_INFO,psta,_TRUE);
- rtw_stassoc_hw_rpt(adapter,psta);
+ rtw_sta_media_status_rpt(adapter, psta, 1);
if(adapter->securitypriv.dot11AuthAlgrthm==dot11AuthAlgrthm_8021X)
psta->dot118021XPrivacy = adapter->securitypriv.dot11PrivacyAlgrthm;
@@ -2193,7 +2270,7 @@ _func_enter_;
#ifdef CONFIG_RTL8711
//submit SetStaKey_cmd to tell fw, fw will allocate an CAM entry for this sta
- rtw_setstakey_cmd(adapter, (unsigned char*)psta, _FALSE);
+ rtw_setstakey_cmd(adapter, (unsigned char*)psta, _FALSE, _TRUE);
#endif
exit:
@@ -2253,7 +2330,9 @@ _func_enter_;
if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) )
{
#ifdef CONFIG_LAYER2_ROAMING
- if (rtw_to_roaming(adapter) > 0)
+ if(adapter->registrypriv.wifi_spec==1)
+ rtw_set_roaming(adapter, 0); /* don't roam */
+ else if (rtw_to_roaming(adapter) > 0)
pmlmepriv->to_roaming--; /* this stadel_event is caused by roaming, decrease to_roaming */
else if (rtw_to_roaming(adapter) == 0)
rtw_set_roaming(adapter, adapter->registrypriv.max_roaming_times);
@@ -2357,7 +2436,7 @@ _func_enter_;
RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("+rtw_cpwm_event_callback !!!\n"));
#ifdef CONFIG_LPS_LCLK
preportpwrstate = (struct reportpwrstate_parm*)pbuf;
- preportpwrstate->state |= (u8)(padapter->pwrctrlpriv.cpwm_tog + 0x80);
+ preportpwrstate->state |= (u8)(adapter_to_pwrctl(padapter)->cpwm_tog + 0x80);
cpwm_int_hdl(padapter, preportpwrstate);
#endif
@@ -2489,7 +2568,7 @@ void rtw_scan_timeout_handler (_adapter *adapter)
static void rtw_auto_scan_handler(_adapter *padapter)
{
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(padapter);
//auto site survey per 60sec
if(pmlmepriv->scan_interval >0)
@@ -2549,7 +2628,12 @@ void rtw_dynamic_check_timer_handlder(_adapter *adapter)
return;
#if defined(CONFIG_CHECK_BT_HANG) && defined(CONFIG_BT_COEXIST)
if(adapter->HalFunc.hal_checke_bt_hang)
- adapter->HalFunc.hal_checke_bt_hang(adapter);
+ {
+#ifdef CONFIG_CONCURRENT_MODE
+ if (adapter->adapter_type == PRIMARY_ADAPTER)
+#endif
+ adapter->HalFunc.hal_checke_bt_hang(adapter);
+ }
#endif
if(adapter->hw_init_completed == _FALSE)
return;
@@ -2678,6 +2762,13 @@ void rtw_set_scan_deny(_adapter *adapter, u32 ms)
}
#endif
+#ifdef CONFIG_DETECT_C2H_BY_POLLING
+void rtw_event_polling_timer_hdl(_adapter *adapter)
+{
+ rtw_event_polling_cmd(adapter);
+}
+#endif
+
#if defined(IEEE80211_SCAN_RESULT_EXPIRE)
#define RTW_SCAN_RESULT_EXPIRE IEEE80211_SCAN_RESULT_EXPIRE/HZ*1000 -1000 //3000 -1000
#else
@@ -2953,7 +3044,7 @@ _func_enter_;
if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
{
- if(is_same_network(&pmlmepriv->cur_network.network, &pnetwork->network))
+ if(is_same_network(&pmlmepriv->cur_network.network, &pnetwork->network), 0)
{
//DBG_871X("select_and_join(1): _FW_LINKED and is same network, it needn't join again\n");
@@ -2987,7 +3078,7 @@ _func_enter_;
if( (roaming_candidate == NULL ||roaming_candidate->network.Rssi<pnetwork->network.Rssi )
&& is_same_ess(&pnetwork->network, &pmlmepriv->cur_network.network)
- //&&(!is_same_network(&pnetwork->network, &pmlmepriv->cur_network.network))
+ //&&(!is_same_network(&pnetwork->network, &pmlmepriv->cur_network.network, 0))
&& rtw_get_time_interval_ms((u32)pnetwork->last_scanned,cur_time) < 5000
) {
roaming_candidate = pnetwork;
@@ -3030,7 +3121,7 @@ _func_enter_;
if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
{
#if 0
- if(is_same_network(&pmlmepriv->cur_network.network, &pnetwork->network))
+ if(is_same_network(&pmlmepriv->cur_network.network, &pnetwork->network, 0))
{
DBG_871X("select_and_join(2): _FW_LINKED and is same network, it needn't join again\n");
@@ -3141,7 +3232,7 @@ _func_exit_;
}
-sint rtw_set_key(_adapter * adapter,struct security_priv *psecuritypriv,sint keyid, u8 set_tx)
+sint rtw_set_key(_adapter * adapter,struct security_priv *psecuritypriv,sint keyid, u8 set_tx, bool enqueue)
{
u8 keylen;
struct cmd_obj *pcmd;
@@ -3151,19 +3242,12 @@ sint rtw_set_key(_adapter * adapter,struct security_priv *psecuritypriv,sint key
sint res=_SUCCESS;
_func_enter_;
-
- pcmd = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
- if(pcmd==NULL){
- res= _FAIL; //try again
- goto exit;
- }
+
psetkeyparm=(struct setkey_parm*)rtw_zmalloc(sizeof(struct setkey_parm));
- if(psetkeyparm==NULL){
- rtw_mfree((unsigned char *)pcmd, sizeof(struct cmd_obj));
+ if(psetkeyparm==NULL){
res= _FAIL;
goto exit;
}
-
_rtw_memset(psetkeyparm, 0, sizeof(struct setkey_parm));
if(psecuritypriv->dot11AuthAlgrthm ==dot11AuthAlgrthm_8021X){
@@ -3178,20 +3262,13 @@ _func_enter_;
psetkeyparm->keyid = (u8)keyid;//0~3
psetkeyparm->set_tx = set_tx;
if (is_wep_enc(psetkeyparm->algorithm))
- pmlmepriv->key_mask |= BIT(psetkeyparm->keyid);
+ psecuritypriv->key_mask |= BIT(psetkeyparm->keyid);
-#ifdef CONFIG_AUTOSUSPEND
- if( _TRUE == adapter->pwrctrlpriv.bInternalAutoSuspend)
- {
- adapter->pwrctrlpriv.wepkeymask = pmlmepriv->key_mask;
- DBG_871X("....AutoSuspend pwrctrlpriv.wepkeymask(%x)\n",adapter->pwrctrlpriv.wepkeymask);
- }
-#endif
- DBG_871X("==> rtw_set_key algorithm(%x),keyid(%x),key_mask(%x)\n",psetkeyparm->algorithm,psetkeyparm->keyid,pmlmepriv->key_mask);
+ DBG_871X("==> rtw_set_key algorithm(%x),keyid(%x),key_mask(%x)\n",psetkeyparm->algorithm,psetkeyparm->keyid, psecuritypriv->key_mask);
RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("\n rtw_set_key: psetkeyparm->algorithm=%d psetkeyparm->keyid=(u8)keyid=%d \n",psetkeyparm->algorithm, keyid));
switch(psetkeyparm->algorithm){
-
+
case _WEP40_:
keylen=5;
_rtw_memcpy(&(psetkeyparm->key[0]), &(psecuritypriv->dot11DefKey[keyid].skey[0]), keylen);
@@ -3201,7 +3278,7 @@ _func_enter_;
_rtw_memcpy(&(psetkeyparm->key[0]), &(psecuritypriv->dot11DefKey[keyid].skey[0]), keylen);
break;
case _TKIP_:
- keylen=16;
+ keylen=16;
_rtw_memcpy(&psetkeyparm->key, &psecuritypriv->dot118021XGrpKey[keyid], keylen);
psetkeyparm->grpkey=1;
break;
@@ -3213,23 +3290,35 @@ _func_enter_;
default:
RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("\n rtw_set_key:psecuritypriv->dot11PrivacyAlgrthm = %x (must be 1 or 2 or 4 or 5)\n",psecuritypriv->dot11PrivacyAlgrthm));
res= _FAIL;
+ rtw_mfree((unsigned char *)psetkeyparm, sizeof(struct setkey_parm));
goto exit;
}
+
+
+ if(enqueue){
+ pcmd = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
+ if(pcmd==NULL){
+ rtw_mfree((unsigned char *)psetkeyparm, sizeof(struct setkey_parm));
+ res= _FAIL; //try again
+ goto exit;
+ }
+
+ pcmd->cmdcode = _SetKey_CMD_;
+ pcmd->parmbuf = (u8 *)psetkeyparm;
+ pcmd->cmdsz = (sizeof(struct setkey_parm));
+ pcmd->rsp = NULL;
+ pcmd->rspsz = 0;
-
- pcmd->cmdcode = _SetKey_CMD_;
- pcmd->parmbuf = (u8 *)psetkeyparm;
- pcmd->cmdsz = (sizeof(struct setkey_parm));
- pcmd->rsp = NULL;
- pcmd->rspsz = 0;
-
-
- _rtw_init_listhead(&pcmd->list);
-
- //_rtw_init_sema(&(pcmd->cmd_sem), 0);
+ _rtw_init_listhead(&pcmd->list);
- res = rtw_enqueue_cmd(pcmdpriv, pcmd);
+ //_rtw_init_sema(&(pcmd->cmd_sem), 0);
+ res = rtw_enqueue_cmd(pcmdpriv, pcmd);
+ }
+ else{
+ setkey_hdl(adapter, (u8 *)psetkeyparm);
+ rtw_mfree((u8 *) psetkeyparm, sizeof(struct setkey_parm));
+ }
exit:
_func_exit_;
return res;
@@ -3389,6 +3478,14 @@ _func_enter_;
{
//copy RSN or SSN
_rtw_memcpy(&out_ie[ielength], &psecuritypriv->supplicant_ie[0], psecuritypriv->supplicant_ie[1]+2);
+ /* debug for CONFIG_IEEE80211W
+ {
+ int jj;
+ printk("supplicant_ie_length=%d &&&&&&&&&&&&&&&&&&&\n", psecuritypriv->supplicant_ie[1]+2);
+ for(jj=0; jj < psecuritypriv->supplicant_ie[1]+2; jj++)
+ printk(" %02x ", psecuritypriv->supplicant_ie[jj]);
+ printk("\n");
+ }*/
ielength+=psecuritypriv->supplicant_ie[1]+2;
rtw_report_sec_ie(adapter, authmode, psecuritypriv->supplicant_ie);
@@ -3655,7 +3752,7 @@ unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, ui
p = rtw_get_ie(in_ie+12, _HT_ADD_INFO_IE_, &ielen, in_len-12);
if(p && (ielen==sizeof(struct ieee80211_ht_addt_info)))
{
- out_len = *pout_len;
+ out_len = *pout_len;
pframe = rtw_set_ie(out_ie+out_len, _HT_ADD_INFO_IE_, ielen, p+2 , pout_len);
}
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_mlme_ext.c b/drivers/net/wireless/rtl8723as/core/rtw_mlme_ext.c
index fbf4b0668014..79961ad7df62 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_mlme_ext.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_mlme_ext.c
@@ -85,7 +85,14 @@ struct action_handler OnAction_tbl[]={
{RTW_WLAN_CATEGORY_RADIO_MEASUREMENT, "ACTION_RADIO_MEASUREMENT", &DoReserved},
{RTW_WLAN_CATEGORY_FT, "ACTION_FT", &DoReserved},
{RTW_WLAN_CATEGORY_HT, "ACTION_HT", &OnAction_ht},
+#ifdef CONFIG_IEEE80211W
+ {RTW_WLAN_CATEGORY_SA_QUERY, "ACTION_SA_QUERY", &OnAction_sa_query},
+#else
{RTW_WLAN_CATEGORY_SA_QUERY, "ACTION_SA_QUERY", &DoReserved},
+#endif //CONFIG_IEEE80211W
+ //add for CONFIG_IEEE80211W
+ {RTW_WLAN_CATEGORY_UNPROTECTED_WNM, "ACTION_UNPROTECTED_WNM", &DoReserved},
+ {RTW_WLAN_CATEGORY_SELF_PROTECTED, "ACTION_SELF_PROTECTED", &DoReserved},
{RTW_WLAN_CATEGORY_WMM, "ACTION_WMM", &OnAction_wmm},
{RTW_WLAN_CATEGORY_P2P, "ACTION_P2P", &OnAction_p2p},
};
@@ -307,7 +314,11 @@ static void init_mlme_ext_priv_value(_adapter* padapter)
ATOMIC_SET(&pmlmeext->event_seq, 0);
pmlmeext->mgnt_seq = 0;//reset to zero when disconnect at client mode
-
+#ifdef CONFIG_IEEE80211W
+ pmlmeext->sa_query_seq = 0;
+ pmlmeext->mgnt_80211w_IPN=0;
+ pmlmeext->mgnt_80211w_IPN_rx=0;
+#endif //CONFIG_IEEE80211W
pmlmeext->cur_channel = padapter->registrypriv.channel;
pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
@@ -754,7 +765,7 @@ void mgt_dispatcher(_adapter *padapter, union recv_frame *precv_frame)
}
#else
- _mgt_dispatcher(padapter, ptable, precv_frame);
+ _mgt_dispatcher(padapter, ptable, precv_frame);
#endif
@@ -764,27 +775,32 @@ void mgt_dispatcher(_adapter *padapter, union recv_frame *precv_frame)
u32 p2p_listen_state_process(_adapter *padapter, unsigned char *da)
{
bool response = _TRUE;
-
+
#ifdef CONFIG_IOCTL_CFG80211
- if (wdev_to_priv(padapter->rtw_wdev)->p2p_enabled == _FALSE
- || padapter->mlmepriv.wps_probe_resp_ie == NULL
- || padapter->mlmepriv.p2p_probe_resp_ie == NULL
- )
+ if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
{
- DBG_871X("DON'T issue_probersp_p2p: p2p_enabled:%d, wps_probe_resp_ie:%p, p2p_probe_resp_ie:%p\n",
- wdev_to_priv(padapter->rtw_wdev)->p2p_enabled,
- padapter->mlmepriv.wps_probe_resp_ie,
- padapter->mlmepriv.p2p_probe_resp_ie);
- response = _FALSE;
+ if (wdev_to_priv(padapter->rtw_wdev)->p2p_enabled == _FALSE
+ || padapter->mlmepriv.wps_probe_resp_ie == NULL
+ || padapter->mlmepriv.p2p_probe_resp_ie == NULL
+ )
+ {
+ DBG_871X("DON'T issue_probersp_p2p: p2p_enabled:%d, wps_probe_resp_ie:%p, p2p_probe_resp_ie:%p\n",
+ wdev_to_priv(padapter->rtw_wdev)->p2p_enabled,
+ padapter->mlmepriv.wps_probe_resp_ie,
+ padapter->mlmepriv.p2p_probe_resp_ie);
+ response = _FALSE;
+ }
}
-#else
-
- // do nothing if the device name is empty
- if ( !padapter->wdinfo.device_name_len )
+ else
+#endif //CONFIG_IOCTL_CFG80211
+ if( padapter->wdinfo.driver_interface == DRIVER_WEXT )
{
- response = _FALSE;
+ // do nothing if the device name is empty
+ if ( !padapter->wdinfo.device_name_len )
+ {
+ response = _FALSE;
+ }
}
-#endif
if (response == _TRUE)
issue_probersp_p2p( padapter, da);
@@ -910,8 +926,8 @@ _continue:
_issue_probersp:
- if(check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE &&
- pmlmepriv->cur_network.join_res == _TRUE)
+ if(((check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE &&
+ pmlmepriv->cur_network.join_res == _TRUE)) || check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE))
{
//DBG_871X("+issue_probersp during ap mode\n");
issue_probersp(padapter, get_sa(pframe), is_valid_p2p_probereq);
@@ -986,7 +1002,7 @@ unsigned int OnProbeRsp(_adapter *padapter, union recv_frame *precv_frame)
}
}
}
-#endif
+#endif //CONFIG_P2P
if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
@@ -994,10 +1010,10 @@ unsigned int OnProbeRsp(_adapter *padapter, union recv_frame *precv_frame)
report_survey_event(padapter, precv_frame);
#ifdef CONFIG_CONCURRENT_MODE
report_survey_event(padapter->pbuddy_adapter, precv_frame);
-#endif
+#endif //CONFIG_CONCURRENT_MODE
#ifdef CONFIG_DUALMAC_CONCURRENT
dc_report_survey_event(padapter, precv_frame);
-#endif
+#endif //CONFIG_DUALMAC_CONCURRENT
return _SUCCESS;
}
@@ -1105,7 +1121,7 @@ unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame)
ret = rtw_check_bcn_info(padapter, pframe, len);
if (!ret) {
DBG_871X_LEVEL(_drv_always_, "ap has changed, disconnect now\n ");
- receive_disconnect(padapter, pmlmeinfo->network.MacAddress , 65535);
+ receive_disconnect(padapter, pmlmeinfo->network.MacAddress , 0);
return _SUCCESS;
}
//update WMM, ERP in the beacon
@@ -2104,56 +2120,34 @@ unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame)
bss_cap_update_on_sta_join(padapter, pstat);
sta_info_update(padapter, pstat);
- //issue assoc rsp before notify station join event.
+ //.2 issue assoc rsp before notify station join event.
if (frame_type == WIFI_ASSOCREQ)
issue_asocrsp(padapter, status, pstat, WIFI_ASSOCRSP);
else
issue_asocrsp(padapter, status, pstat, WIFI_REASSOCRSP);
- //.2 - report to upper layer
- DBG_871X("indicate_sta_join_event to upper layer - hostapd\n");
- #ifdef CONFIG_IOCTL_CFG80211
- if (1) {
- #ifdef COMPAT_KERNEL_RELEASE
- rtw_cfg80211_indicate_sta_assoc(padapter, pframe, pkt_len);
- #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
- rtw_cfg80211_indicate_sta_assoc(padapter, pframe, pkt_len);
- #else //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
- _enter_critical_bh(&pstat->lock, &irqL);
- if(pstat->passoc_req)
- {
- rtw_mfree(pstat->passoc_req, pstat->assoc_req_len);
- pstat->passoc_req = NULL;
- pstat->assoc_req_len = 0;
- }
-
- pstat->passoc_req = rtw_zmalloc(pkt_len);
- if(pstat->passoc_req)
- {
- _rtw_memcpy(pstat->passoc_req, pframe, pkt_len);
- pstat->assoc_req_len = pkt_len;
- }
- _exit_critical_bh(&pstat->lock, &irqL);
- #endif //(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
+#ifdef CONFIG_IOCTL_CFG80211
+ _enter_critical_bh(&pstat->lock, &irqL);
+ if(pstat->passoc_req)
+ {
+ rtw_mfree(pstat->passoc_req, pstat->assoc_req_len);
+ pstat->passoc_req = NULL;
+ pstat->assoc_req_len = 0;
}
- else
- #endif //CONFIG_IOCTL_CFG80211
+
+ pstat->passoc_req = rtw_zmalloc(pkt_len);
+ if(pstat->passoc_req)
{
- rtw_indicate_sta_assoc_event(padapter, pstat);
+ _rtw_memcpy(pstat->passoc_req, pframe, pkt_len);
+ pstat->assoc_req_len = pkt_len;
}
+ _exit_critical_bh(&pstat->lock, &irqL);
+#endif //CONFIG_IOCTL_CFG80211
//.3-(1) report sta add event
report_add_sta_event(padapter, pstat->hwaddr, pstat->aid);
-/*
- //issue assoc rsp before notify station join event.
- if (frame_type == WIFI_ASSOCREQ)
- issue_asocrsp(padapter, status, pstat, WIFI_ASSOCRSP);
- else
- issue_asocrsp(padapter, status, pstat, WIFI_REASSOCRSP);
-*/
-
-#endif
+#endif //CONFIG_NATIVEAP_MLME
}
return _SUCCESS;
@@ -2364,10 +2358,32 @@ unsigned int OnDeAuth(_adapter *padapter, union recv_frame *precv_frame)
else
#endif
{
- DBG_871X_LEVEL(_drv_always_, "sta recv deauth reason code(%d) sta:%pM\n",
- reason, GetAddr3Ptr(pframe));
+ int ignore_received_deauth = 0;
+
+ // Commented by Albert 20130604
+ // Before sending the auth frame to start the STA/GC mode connection with AP/GO,
+ // we will send the deauth first.
+ // However, the Win8.1 with BRCM Wi-Fi will send the deauth with reason code 6 to us after receieving our deauth.
+ // Added the following code to avoid this case.
+ if ( ( pmlmeinfo->state & WIFI_FW_AUTH_STATE ) ||
+ ( pmlmeinfo->state & WIFI_FW_ASSOC_STATE ) )
+ {
+ if ( reason == WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA )
+ {
+ ignore_received_deauth = 1;
+ } else if (WLAN_REASON_PREV_AUTH_NOT_VALID == reason) {
+ // TODO: 802.11r
+ ignore_received_deauth = 1;
+ }
+ }
+
+ DBG_871X_LEVEL(_drv_always_, "sta recv deauth reason code(%d) sta:%pM, ignore = %d\n",
+ reason, GetAddr3Ptr(pframe), ignore_received_deauth);
- receive_disconnect(padapter, GetAddr3Ptr(pframe) ,reason);
+ if ( 0 == ignore_received_deauth )
+ {
+ receive_disconnect(padapter, GetAddr3Ptr(pframe) ,reason);
+ }
}
pmlmepriv->LinkDetectInfo.bBusyTraffic = _FALSE;
return _SUCCESS;
@@ -3835,13 +3851,60 @@ void issue_p2p_GO_confirm(_adapter *padapter, u8* raddr, u8 result)
// Type:
p2pie[ p2pielen++ ] = P2P_ATTR_CH_LIST;
- // Length:
- *(u16*) ( p2pie + p2pielen ) = cpu_to_le16( pwdinfo->channel_list_attr_len );
+ *(u16*) ( p2pie + p2pielen ) = 6;
p2pielen += 2;
+ // Country String
+ p2pie[ p2pielen++ ] = 'X';
+ p2pie[ p2pielen++ ] = 'X';
+
+ // The third byte should be set to 0x04.
+ // Described in the "Operating Channel Attribute" section.
+ p2pie[ p2pielen++ ] = 0x04;
+
// Value:
- _rtw_memcpy( p2pie + p2pielen, pwdinfo->channel_list_attr, pwdinfo->channel_list_attr_len );
- p2pielen += pwdinfo->channel_list_attr_len;
+ if ( rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) )
+ {
+ if ( pwdinfo->peer_operating_ch <= 14 )
+ {
+ // Operating Class
+ p2pie[ p2pielen++ ] = 0x51;
+ }
+ else if ( ( pwdinfo->peer_operating_ch >= 36 ) && ( pwdinfo->peer_operating_ch <= 48 ) )
+ {
+ // Operating Class
+ p2pie[ p2pielen++ ] = 0x73;
+ }
+ else
+ {
+ // Operating Class
+ p2pie[ p2pielen++ ] = 0x7c;
+ }
+ p2pie[ p2pielen++ ] = 1;
+ p2pie[ p2pielen++ ] = pwdinfo->peer_operating_ch;
+ }
+ else
+ {
+ if ( pwdinfo->operating_channel <= 14 )
+ {
+ // Operating Class
+ p2pie[ p2pielen++ ] = 0x51;
+ }
+ else if ( ( pwdinfo->operating_channel >= 36 ) && ( pwdinfo->operating_channel <= 48 ) )
+ {
+ // Operating Class
+ p2pie[ p2pielen++ ] = 0x73;
+ }
+ else
+ {
+ // Operating Class
+ p2pie[ p2pielen++ ] = 0x7c;
+ }
+
+ // Channel Number
+ p2pie[ p2pielen++ ] = 1;
+ p2pie[ p2pielen++ ] = pwdinfo->operating_channel; // Use the listen channel as the operating channel
+ }
if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) )
{
@@ -4655,11 +4718,6 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
#ifdef CONFIG_WFD
u32 wfdielen = 0;
#endif //CONFIG_WFD
-#ifdef CONFIG_IOCTL_CFG80211
- struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
- struct ieee80211_channel *ieee_ch = &pcfg80211_wdinfo->remain_on_ch_channel;
- u8 listen_channel = (u8) ieee80211_frequency_to_channel(ieee_ch->center_freq);
-#endif //CONFIG_IOCTL_CFG80211
#ifdef CONFIG_INTEL_WIDI
u8 zero_array_check[L2SDTA_SERVICE_VE_LEN] = { 0x00 };
#endif //CONFIG_INTEL_WIDI
@@ -4725,20 +4783,10 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, 8, pwdinfo->support_rate, &pattrib->pktlen);
// DS parameter set
-#ifdef CONFIG_IOCTL_CFG80211
- if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && listen_channel !=0 )
- {
- pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&listen_channel, &pattrib->pktlen);
- }
- else
-#endif //CONFIG_IOCTL_CFG80211
- {
- pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&pwdinfo->listen_channel, &pattrib->pktlen);
- }
-
+ pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&pwdinfo->listen_channel, &pattrib->pktlen);
#ifdef CONFIG_IOCTL_CFG80211
- if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
+ if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
{
if( pmlmepriv->wps_probe_resp_ie != NULL && pmlmepriv->p2p_probe_resp_ie != NULL )
{
@@ -4781,7 +4829,8 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
#ifdef CONFIG_INTEL_WIDI
// Commented by Kurt
// Appended WiDi info. only if we did issued_probereq_widi(), and then we saved ven. ext. in pmlmepriv->sa_ext.
- if( _rtw_memcmp(pmlmepriv->sa_ext, zero_array_check, L2SDTA_SERVICE_VE_LEN) == _FALSE )
+ if( _rtw_memcmp(pmlmepriv->sa_ext, zero_array_check, L2SDTA_SERVICE_VE_LEN) == _FALSE
+ || pmlmepriv->num_p2p_sdt != 0 )
{
//Sec dev type
*(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_SEC_DEV_TYPE_LIST );
@@ -4803,9 +4852,12 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
*(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_PDT_SCID_WIDI_CONSUMER_SINK );
wpsielen += 2;
- // Vendor Extension
- _rtw_memcpy( wpsie + wpsielen, pmlmepriv->sa_ext, L2SDTA_SERVICE_VE_LEN );
- wpsielen += L2SDTA_SERVICE_VE_LEN;
+ if( _rtw_memcmp(pmlmepriv->sa_ext, zero_array_check, L2SDTA_SERVICE_VE_LEN) == _FALSE )
+ {
+ // Vendor Extension
+ _rtw_memcpy( wpsie + wpsielen, pmlmepriv->sa_ext, L2SDTA_SERVICE_VE_LEN );
+ wpsielen += L2SDTA_SERVICE_VE_LEN;
+ }
}
#endif //CONFIG_INTEL_WIDI
@@ -4843,7 +4895,12 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
wpsielen += 2;
// Value:
- _rtw_memcpy( wpsie + wpsielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+ if (pwdinfo->external_uuid == 0) {
+ _rtw_memset( wpsie + wpsielen, 0x0, 16 );
+ _rtw_memcpy( wpsie + wpsielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+ } else {
+ _rtw_memcpy( wpsie + wpsielen, pwdinfo->uuid, 0x10 );
+ }
wpsielen += 0x10;
// Manufacturer
@@ -4967,7 +5024,7 @@ void issue_probersp_p2p(_adapter *padapter, unsigned char *da)
pattrib->pktlen += wfdielen;
}
#ifdef CONFIG_IOCTL_CFG80211
- else if (pmlmepriv->wfd_probe_resp_ie != NULL && pmlmepriv->wfd_probe_resp_ie_len>0)
+ else if (pmlmepriv->wfd_probe_resp_ie != NULL && pmlmepriv->wfd_probe_resp_ie_len>0)
{
//WFD IE
_rtw_memcpy(pframe, pmlmepriv->wfd_probe_resp_ie, pmlmepriv->wfd_probe_resp_ie_len);
@@ -5069,7 +5126,7 @@ int _issue_probereq_p2p(_adapter *padapter, u8 *da, int wait_ack)
pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, 8, pwdinfo->support_rate, &pattrib->pktlen);
#ifdef CONFIG_IOCTL_CFG80211
- if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
+ if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
{
if( pmlmepriv->wps_probe_req_ie != NULL && pmlmepriv->p2p_probe_req_ie != NULL )
{
@@ -5121,7 +5178,12 @@ int _issue_probereq_p2p(_adapter *padapter, u8 *da, int wait_ack)
wpsielen += 2;
// Value:
- _rtw_memcpy( wpsie + wpsielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+ if (pwdinfo->external_uuid == 0) {
+ _rtw_memset( wpsie + wpsielen, 0x0, 16 );
+ _rtw_memcpy( wpsie + wpsielen, myid( &padapter->eeprompriv ), ETH_ALEN );
+ } else {
+ _rtw_memcpy( wpsie + wpsielen, pwdinfo->uuid, 0x10 );
+ }
wpsielen += 0x10;
// Config Method
@@ -5430,6 +5492,8 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame)
struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
u8 result = P2P_STATUS_SUCCESS;
u8 empty_addr[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
+ u8 *merged_p2pie = NULL;
+ u32 merged_p2p_ielen = 0;
#endif //CONFIG_P2P
frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
@@ -5442,7 +5506,7 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame)
#ifdef CONFIG_P2P
_cancel_timer_ex( &pwdinfo->reset_ch_sitesurvey );
#ifdef CONFIG_IOCTL_CFG80211
- if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
+ if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211)
{
rtw_cfg80211_rx_p2p_action_public(padapter, pframe, len);
}
@@ -5499,6 +5563,7 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame)
if( (padapter->mlmepriv.widi_state == INTEL_WIDI_STATE_LISTEN) && (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_WFD_CONNECTION) )
{
padapter->mlmepriv.widi_state = INTEL_WIDI_STATE_WFD_CONNECTION;
+ _cancel_timer_ex(&(padapter->mlmepriv.listen_timer));
intel_widi_wk_cmd(padapter, INTEL_WIDI_LISTEN_STOP_WK, NULL);
}
#endif //CONFIG_INTEL_WIDI
@@ -5530,6 +5595,11 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame)
if ( rtw_p2p_role(pwdinfo) == P2P_ROLE_CLIENT )
{
pwdinfo->p2p_info.operation_ch[ 0 ] = pwdinfo->peer_operating_ch;
+ #ifdef P2P_OP_CHECK_SOCIAL_CH
+ pwdinfo->p2p_info.operation_ch[ 1 ] = 1; //Check whether GO is operating in channel 1;
+ pwdinfo->p2p_info.operation_ch[ 2 ] = 6; //Check whether GO is operating in channel 6;
+ pwdinfo->p2p_info.operation_ch[ 3 ] = 11; //Check whether GO is operating in channel 11;
+ #endif //P2P_OP_CHECK_SOCIAL_CH
pwdinfo->p2p_info.scan_op_ch_only = 1;
_set_timer( &pwdinfo->reset_ch_sitesurvey2, P2P_RESET_SCAN_CH );
}
@@ -5559,6 +5629,11 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame)
if ( rtw_p2p_role(pwdinfo) == P2P_ROLE_CLIENT )
{
pwdinfo->p2p_info.operation_ch[ 0 ] = pwdinfo->peer_operating_ch;
+ #ifdef P2P_OP_CHECK_SOCIAL_CH
+ pwdinfo->p2p_info.operation_ch[ 1 ] = 1; //Check whether GO is operating in channel 1;
+ pwdinfo->p2p_info.operation_ch[ 2 ] = 6; //Check whether GO is operating in channel 6;
+ pwdinfo->p2p_info.operation_ch[ 3 ] = 11; //Check whether GO is operating in channel 11;
+ #endif //P2P_OP_CHECK_SOCIAL_CH
pwdinfo->p2p_info.scan_op_ch_only = 1;
_set_timer( &pwdinfo->reset_ch_sitesurvey2, P2P_RESET_SCAN_CH );
}
@@ -5580,11 +5655,24 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame)
struct group_id_info group_id;
u8 invitation_flag = 0;
- rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_INVITATION_FLAGS, &invitation_flag, &attr_contentlen);
+
+ merged_p2p_ielen = rtw_get_p2p_merged_ies_len(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_);
+
+ merged_p2pie = rtw_malloc(merged_p2p_ielen);
+ if (merged_p2pie == NULL)
+ {
+ DBG_871X( "[%s] Malloc p2p ie fail\n", __FUNCTION__);
+ goto exit;
+ }
+ _rtw_memset(merged_p2pie, 0x00, merged_p2p_ielen);
+
+ merged_p2p_ielen = rtw_p2p_merge_ies(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, merged_p2pie);
+
+ rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_INVITATION_FLAGS, &invitation_flag, &attr_contentlen);
if ( attr_contentlen )
{
- rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_GROUP_BSSID, pwdinfo->p2p_peer_interface_addr, &attr_contentlen);
+ rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_BSSID, pwdinfo->p2p_peer_interface_addr, &attr_contentlen);
// Commented by Albert 20120510
// Copy to the pwdinfo->p2p_peer_interface_addr.
// So that the WFD UI ( or Sigma ) can get the peer interface address by using the following command.
@@ -5604,7 +5692,7 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame)
// Re-invoke the persistent group.
_rtw_memset( &group_id, 0x00, sizeof( struct group_id_info ) );
- rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, ( u8* ) &group_id, &attr_contentlen);
+ rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_ID, ( u8* ) &group_id, &attr_contentlen);
if ( attr_contentlen )
{
if ( _rtw_memcmp( group_id.go_device_addr, myid( &padapter->eeprompriv ), ETH_ALEN ) )
@@ -5620,18 +5708,24 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame)
if ( is_matched_in_profilelist( pwdinfo->p2p_peer_interface_addr, &pwdinfo->profileinfo[ 0 ] ) )
{
u8 operatingch_info[5] = { 0x00 };
- if ( rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen) )
+
+ if ( rtw_get_p2p_attr_content(merged_p2pie, merged_p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen) )
{
if( rtw_ch_set_search_ch(padapter->mlmeextpriv.channel_set, (u32)operatingch_info[4] ) )
{
// The operating channel is acceptable for this device.
pwdinfo->rx_invitereq_info.operation_ch[0]= operatingch_info[4];
+ #ifdef P2P_OP_CHECK_SOCIAL_CH
+ pwdinfo->rx_invitereq_info.operation_ch[1]= 1; //Check whether GO is operating in channel 1;
+ pwdinfo->rx_invitereq_info.operation_ch[2]= 6; //Check whether GO is operating in channel 6;
+ pwdinfo->rx_invitereq_info.operation_ch[3]= 11; //Check whether GO is operating in channel 11;
+ #endif //P2P_OP_CHECK_SOCIAL_CH
pwdinfo->rx_invitereq_info.scan_op_ch_only = 1;
_set_timer( &pwdinfo->reset_ch_sitesurvey, P2P_RESET_SCAN_CH );
rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_MATCH );
rtw_p2p_set_role( pwdinfo, P2P_ROLE_CLIENT );
status_code = P2P_STATUS_SUCCESS;
- }
+ }
else
{
// The operating channel isn't supported by this device.
@@ -5674,7 +5768,7 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame)
// Received the invitation to join a P2P group.
_rtw_memset( &group_id, 0x00, sizeof( struct group_id_info ) );
- rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, ( u8* ) &group_id, &attr_contentlen);
+ rtw_get_p2p_attr_content( merged_p2pie, merged_p2p_ielen, P2P_ATTR_GROUP_ID, ( u8* ) &group_id, &attr_contentlen);
if ( attr_contentlen )
{
if ( _rtw_memcmp( group_id.go_device_addr, myid( &padapter->eeprompriv ), ETH_ALEN ) )
@@ -5714,11 +5808,13 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame)
pwdinfo->inviteresp_info.token = frame_body[ 7 ];
issue_p2p_invitation_response( padapter, GetAddr2Ptr(pframe), pwdinfo->inviteresp_info.token, status_code );
+ _set_timer( &pwdinfo->restore_p2p_state_timer, 3000 );
}
#ifdef CONFIG_INTEL_WIDI
if( (padapter->mlmepriv.widi_state == INTEL_WIDI_STATE_LISTEN) && (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_WFD_CONNECTION) )
{
padapter->mlmepriv.widi_state = INTEL_WIDI_STATE_WFD_CONNECTION;
+ _cancel_timer_ex(&(padapter->mlmepriv.listen_timer));
intel_widi_wk_cmd(padapter, INTEL_WIDI_LISTEN_STOP_WK, NULL);
}
#endif //CONFIG_INTEL_WIDI
@@ -5804,6 +5900,7 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame)
if( (padapter->mlmepriv.widi_state == INTEL_WIDI_STATE_LISTEN) && (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_WFD_CONNECTION) )
{
padapter->mlmepriv.widi_state = INTEL_WIDI_STATE_WFD_CONNECTION;
+ _cancel_timer_ex(&(padapter->mlmepriv.listen_timer));
intel_widi_wk_cmd(padapter, INTEL_WIDI_LISTEN_STOP_WK, NULL);
}
#endif //CONFIG_INTEL_WIDI
@@ -5824,7 +5921,14 @@ unsigned int on_action_public_p2p(union recv_frame *precv_frame)
}
}
#endif //CONFIG_P2P
-
+
+exit:
+
+ if(merged_p2pie)
+ {
+ rtw_mfree(merged_p2pie, merged_p2p_ielen);
+ }
+
return _SUCCESS;
}
@@ -5904,6 +6008,45 @@ unsigned int OnAction_ht(_adapter *padapter, union recv_frame *precv_frame)
return _SUCCESS;
}
+#ifdef CONFIG_IEEE80211W
+unsigned int OnAction_sa_query(_adapter *padapter, union recv_frame *precv_frame)
+{
+ u8 *pframe = precv_frame->u.hdr.rx_data;
+ struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ unsigned short tid;
+ //Baron
+
+ DBG_871X("OnAction_sa_query\n");
+
+ switch (pframe[WLAN_HDR_A3_LEN+1])
+ {
+ case 0: //SA Query req
+ _rtw_memcpy(&tid, &pframe[WLAN_HDR_A3_LEN+2], sizeof(unsigned short));
+ DBG_871X("OnAction_sa_query request,action=%d, tid=%04x\n", pframe[WLAN_HDR_A3_LEN+1], tid);
+ issue_action_SA_Query(padapter, GetAddr2Ptr(pframe), 1, tid);
+ break;
+
+ case 1: //SA Query rsp
+ _cancel_timer_ex(&pmlmeext->sa_query_timer);
+ DBG_871X("OnAction_sa_query response,action=%d, tid=%04x, cahcel timer\n", pframe[WLAN_HDR_A3_LEN+1], pframe[WLAN_HDR_A3_LEN+2]);
+ break;
+ default:
+ break;
+ }
+ if(0)
+ {
+ int pp;
+ printk("pattrib->pktlen = %d =>", pattrib->pkt_len);
+ for(pp=0;pp< pattrib->pkt_len; pp++)
+ printk(" %02x ", pframe[pp]);
+ printk("\n");
+ }
+
+ return _SUCCESS;
+}
+#endif //CONFIG_IEEE80211W
+
unsigned int OnAction_wmm(_adapter *padapter, union recv_frame *precv_frame)
{
return _SUCCESS;
@@ -5935,7 +6078,7 @@ unsigned int OnAction_p2p(_adapter *padapter, union recv_frame *precv_frame)
return _SUCCESS;
#ifdef CONFIG_IOCTL_CFG80211
- if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
+ if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
{
rtw_cfg80211_rx_action_p2p(padapter, pframe, len);
return _SUCCESS;
@@ -6087,7 +6230,7 @@ void update_mgntframe_attrib(_adapter *padapter, struct pkt_attrib *pattrib)
pattrib->raid = 5;//a/g mode
pattrib->encrypt = _NO_PRIVACY_;
- pattrib->bswenc = _FALSE;
+ pattrib->bswenc = _FALSE;
pattrib->qos_en = _FALSE;
pattrib->ht_en = _FALSE;
@@ -6105,7 +6248,11 @@ void dump_mgntframe(_adapter *padapter, struct xmit_frame *pmgntframe)
{
if(padapter->bSurpriseRemoved == _TRUE ||
padapter->bDriverStopped == _TRUE)
+ {
+ rtw_free_xmitbuf(&padapter->xmitpriv, pmgntframe->pxmitbuf);
+ rtw_free_xmitframe(&padapter->xmitpriv, pmgntframe);
return;
+ }
rtw_hal_mgnt_xmit(padapter, pmgntframe);
}
@@ -6120,7 +6267,11 @@ s32 dump_mgntframe_and_wait(_adapter *padapter, struct xmit_frame *pmgntframe, i
if(padapter->bSurpriseRemoved == _TRUE ||
padapter->bDriverStopped == _TRUE)
+ {
+ rtw_free_xmitbuf(&padapter->xmitpriv, pmgntframe->pxmitbuf);
+ rtw_free_xmitframe(&padapter->xmitpriv, pmgntframe);
return ret;
+ }
rtw_sctx_init(&sctx, timeout_ms);
pxmitbuf->sctx = &sctx;
@@ -6147,10 +6298,14 @@ s32 dump_mgntframe_and_wait_ack(_adapter *padapter, struct xmit_frame *pmgntfram
if (padapter->pbuddy_adapter && !padapter->isprimary)
pxmitpriv = &(padapter->pbuddy_adapter->xmitpriv);
#endif
-
+
if(padapter->bSurpriseRemoved == _TRUE ||
padapter->bDriverStopped == _TRUE)
+ {
+ rtw_free_xmitbuf(&padapter->xmitpriv, pmgntframe->pxmitbuf);
+ rtw_free_xmitframe(&padapter->xmitpriv, pmgntframe);
return -1;
+ }
_enter_critical_mutex(&pxmitpriv->ack_tx_mutex, NULL);
pxmitpriv->ack_tx = _TRUE;
@@ -6288,7 +6443,7 @@ void issue_beacon(_adapter *padapter, int timeout_ms)
remainder_ielen = cur_network->IELength - wps_offset - wpsielen;
#ifdef CONFIG_IOCTL_CFG80211
- if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
+ if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
{
if(pmlmepriv->wps_beacon_ie && pmlmepriv->wps_beacon_ie_len>0)
{
@@ -6405,7 +6560,7 @@ void issue_beacon(_adapter *padapter, int timeout_ms)
{
u32 len;
#ifdef CONFIG_IOCTL_CFG80211
- if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
+ if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
{
len = pmlmepriv->p2p_beacon_ie_len;
if(pmlmepriv->p2p_beacon_ie && len>0)
@@ -6434,7 +6589,7 @@ void issue_beacon(_adapter *padapter, int timeout_ms)
{
len = pmlmepriv->wfd_beacon_ie_len;
_rtw_memcpy(pframe, pmlmepriv->wfd_beacon_ie, len);
- }
+ }
}
#endif //CONFIG_IOCTL_CFG80211
pframe += len;
@@ -6725,11 +6880,11 @@ void issue_probersp(_adapter *padapter, unsigned char *da, u8 is_valid_p2p_probe
}
#ifdef CONFIG_P2P
- if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && is_valid_p2p_probereq)
+ if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) /*&& is_valid_p2p_probereq*/)
{
u32 len;
#ifdef CONFIG_IOCTL_CFG80211
- if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
+ if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
{
//if pwdinfo->role == P2P_ROLE_DEVICE will call issue_probersp_p2p()
len = pmlmepriv->p2p_go_probe_resp_ie_len;
@@ -7236,17 +7391,18 @@ void issue_asocrsp(_adapter *padapter, unsigned short status, struct sta_info *p
}
#ifdef CONFIG_P2P
-#ifndef CONFIG_IOCTL_CFG80211
- if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && (pstat->is_p2p_device == _TRUE))
+ if( padapter->wdinfo.driver_interface == DRIVER_WEXT )
{
- u32 len;
+ if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && (pstat->is_p2p_device == _TRUE))
+ {
+ u32 len;
- len = build_assoc_resp_p2p_ie(pwdinfo, pframe, pstat->p2p_status_code);
+ len = build_assoc_resp_p2p_ie(pwdinfo, pframe, pstat->p2p_status_code);
- pframe += len;
- pattrib->pktlen += len;
+ pframe += len;
+ pattrib->pktlen += len;
+ }
}
-#endif //CONFIG_IOCTL_CFG80211
#ifdef CONFIG_WFD
if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)
#ifdef CONFIG_IOCTL_CFG80211
@@ -7564,7 +7720,7 @@ void issue_assocreq(_adapter *padapter)
#ifdef CONFIG_P2P
#ifdef CONFIG_IOCTL_CFG80211
- if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled)
+ if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->driver_interface == DRIVER_CFG80211 )
{
if(pmlmepriv->p2p_assoc_req_ie && pmlmepriv->p2p_assoc_req_ie_len>0)
{
@@ -8202,6 +8358,84 @@ void issue_action_spct_ch_switch(_adapter *padapter, u8 *ra, u8 new_ch, u8 ch_of
}
+#ifdef CONFIG_IEEE80211W
+void issue_action_SA_Query(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short tid)
+{
+ u8 category = RTW_WLAN_CATEGORY_SA_QUERY;
+ u16 reason_code;
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ u8 *pframe;
+ struct rtw_ieee80211_hdr *pwlanhdr;
+ u16 *fctrl;
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ struct sta_info *psta;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct registry_priv *pregpriv = &padapter->registrypriv;
+
+
+ DBG_871X("%s\n", __FUNCTION__);
+
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ DBG_871X("%s: alloc_mgtxmitframe fail\n", __FUNCTION__);
+ return;
+ }
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+ update_mgntframe_attrib(padapter, pattrib);
+
+ _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
+
+ pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
+ pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+
+ fctrl = &(pwlanhdr->frame_ctl);
+ *(fctrl) = 0;
+
+ if(raddr)
+ _rtw_memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
+ else
+ _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
+
+ SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
+ pmlmeext->mgnt_seq++;
+ SetFrameSubType(pframe, WIFI_ACTION);
+
+ pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
+ pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+
+ pframe = rtw_set_fixed_ie(pframe, 1, &category, &pattrib->pktlen);
+ pframe = rtw_set_fixed_ie(pframe, 1, &action, &pattrib->pktlen);
+
+ switch (action)
+ {
+ case 0: //SA Query req
+ pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)&pmlmeext->sa_query_seq, &pattrib->pktlen);
+ pmlmeext->sa_query_seq++;
+ //send sa query request to AP, AP should reply sa query response in 1 second
+ set_sa_query_timer(pmlmeext, 1000);
+ break;
+
+ case 1: //SA Query rsp
+ tid = cpu_to_le16(tid);
+ pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)&tid, &pattrib->pktlen);
+ break;
+ default:
+ break;
+ }
+
+ pattrib->last_txcmdsz = pattrib->pktlen;
+
+ dump_mgntframe(padapter, pmgntframe);
+}
+#endif //CONFIG_IEEE80211W
+
void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short status)
{
u8 category = RTW_WLAN_CATEGORY_BACK;
@@ -8776,7 +9010,6 @@ void site_survey(_adapter *padapter)
{
pmlmeinfo->scan_cnt = 0;
survey_channel = pbuddy_mlmeext->cur_channel;
- ScanType = SCAN_ACTIVE;
stay_buddy_ch = 1;
}
else
@@ -8877,19 +9110,24 @@ void site_survey(_adapter *padapter)
u8 cur_bwmode;
u8 cur_ch_offset;
- if(check_fwstate(pmlmepriv, _FW_LINKED))
+ if (rtw_get_ch_setting_union(padapter, &cur_channel, &cur_bwmode, &cur_ch_offset) != 0)
{
- cur_channel = pmlmeext->cur_channel;
- cur_bwmode = pmlmeext->cur_bwmode;
- cur_ch_offset = pmlmeext->cur_ch_offset;
+ if (0)
+ DBG_871X(FUNC_ADPT_FMT" back to linked union - ch:%u, bw:%u, offset:%u\n",
+ FUNC_ADPT_ARG(padapter), cur_channel, cur_bwmode, cur_ch_offset);
}
- //else if((pbuddy_mlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
- else if(check_buddy_fwstate(padapter, _FW_LINKED)) // for AP or STA
+ #ifdef CONFIG_IOCTL_CFG80211
+ else if(padapter->pbuddy_adapter
+ && pbuddy_adapter->wdinfo.driver_interface == DRIVER_CFG80211
+ && wdev_to_priv(pbuddy_adapter->rtw_wdev)->p2p_enabled
+ && rtw_p2p_chk_state(&pbuddy_adapter->wdinfo, P2P_STATE_LISTEN)
+ )
{
- cur_channel = pbuddy_mlmeext->cur_channel;
+ cur_channel = pbuddy_adapter->wdinfo.listen_channel;
cur_bwmode = pbuddy_mlmeext->cur_bwmode;
cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
}
+ #endif
else
{
cur_channel = pmlmeext->cur_channel;
@@ -8954,12 +9192,13 @@ void site_survey(_adapter *padapter)
if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH))
{
#ifdef CONFIG_CONCURRENT_MODE
- #ifndef CONFIG_IOCTL_CFG80211
- if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
+ if( pwdinfo->driver_interface == DRIVER_WEXT )
{
- _set_timer( &pwdinfo->ap_p2p_switch_timer, 500 );
- }
- #endif //CONFIG_IOCTL_CFG80211
+ if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
+ {
+ _set_timer( &pwdinfo->ap_p2p_switch_timer, 500 );
+ }
+ }
rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
#else
rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
@@ -8974,20 +9213,25 @@ void site_survey(_adapter *padapter)
//SelectChannel(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset);
{
+#ifdef CONFIG_CONCURRENT_MODE
+ set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
+#else
#ifdef CONFIG_DUALMAC_CONCURRENT
dc_set_channel_bwmode_survey_done(padapter);
#else
-#ifndef CONFIG_IOCTL_CFG80211
- if( rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN) )
+ if( pwdinfo->driver_interface == DRIVER_WEXT )
{
- set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
+ if( rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN) )
+ {
+ set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
+ }
+ else
+ set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
}
- else
-#endif //CONFIG_IOCTL_CFG80211
-#ifdef CONFIG_CONCURRENT_MODE
- set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
-#else
+ else if( pwdinfo->driver_interface == DRIVER_CFG80211 )
+ {
set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
+ }
#endif //CONFIG_DUALMAC_CONCURRENT
#endif //CONFIG_CONCURRENT_MODE
}
@@ -9030,7 +9274,19 @@ void site_survey(_adapter *padapter)
report_surveydone_event(padapter);
+#if defined(CONFIG_BT_COEXIST) && defined(CONFIG_RTL8723A)
+ if ((BT_1Ant(padapter) == _TRUE) && (BT_GetBtState(padapter) > BT_INFO_STATE_NO_CONNECTION))
+ {
+ pmlmeext->chan_scan_time = SURVEY_TO * 2;
+ }
+ else
+ {
+ pmlmeext->chan_scan_time = SURVEY_TO;
+ }
+#else
pmlmeext->chan_scan_time = SURVEY_TO;
+#endif
+
pmlmeext->sitesurvey_res.state = SCAN_DISABLE;
issue_action_BSSCoexistPacket(padapter);
@@ -9089,12 +9345,12 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI
ie_offset = _BEACON_IE_OFFSET_;
} else {
// FIXME : more type
- if (subtype == WIFI_PROBEREQ) {
- ie_offset = _PROBEREQ_IE_OFFSET_;
- bssid->Reserved[0] = 2;
- } else if (subtype == WIFI_PROBERSP) {
+ if (subtype == WIFI_PROBERSP) {
ie_offset = _PROBERSP_IE_OFFSET_;
bssid->Reserved[0] = 3;
+ } else if (subtype == WIFI_PROBEREQ) {
+ ie_offset = _PROBEREQ_IE_OFFSET_;
+ bssid->Reserved[0] = 2;
} else {
bssid->Reserved[0] = 0;
ie_offset = _FIXED_IE_LENGTH_;
@@ -9109,7 +9365,7 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI
//get the signal strength
//bssid->Rssi = precv_frame->u.hdr.attrib.SignalStrength; // 0-100 index.
- bssid->Rssi = precv_frame->u.hdr.attrib.phy_info.RecvSignalPower; // in dBM.raw data
+ bssid->Rssi = precv_frame->u.hdr.attrib.phy_info.RecvSignalPower; // in dBM.raw data
bssid->PhyInfo.SignalQuality = precv_frame->u.hdr.attrib.phy_info.SignalQuality;//in percentage
bssid->PhyInfo.SignalStrength = precv_frame->u.hdr.attrib.phy_info.SignalStrength;//in percentage
#ifdef CONFIG_ANTENNA_DIVERSITY
@@ -9181,6 +9437,31 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI
if (bssid->IELength < 12)
return _FAIL;
+#ifdef CONFIG_P2P
+ if (subtype == WIFI_PROBEREQ) {
+ u8 *p2p_ie;
+ u32 p2p_ielen;
+ // Set Listion Channel
+ if ((p2p_ie = rtw_get_p2p_ie(bssid->IEs, bssid->IELength, NULL, &p2p_ielen))) {
+ u32 attr_contentlen = 0;
+ u8 listen_ch[5] = { 0x00 };
+
+ rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_LISTEN_CH, listen_ch, &attr_contentlen);
+ bssid->Configuration.DSConfig = listen_ch[4];
+ }
+ else { // use current channel
+ bssid->Configuration.DSConfig = rtw_get_oper_ch(padapter);
+ DBG_871X("%s()-%d: Cannot get p2p_ie. set DSconfig to op_ch(%d)\n", __FUNCTION__, __LINE__, bssid->Configuration.DSConfig);
+ }
+
+ // FIXME
+ bssid->InfrastructureMode = Ndis802_11Infrastructure;
+ _rtw_memcpy(bssid->MacAddress, GetAddr2Ptr(pframe), ETH_ALEN);
+ bssid->Privacy = 1;
+ return _SUCCESS;
+ }
+#endif //CONFIG_P2P
+
// Checking for DSConfig
p = rtw_get_ie(bssid->IEs + ie_offset, _DSSET_IE_, &len, bssid->IELength - ie_offset);
@@ -9206,15 +9487,6 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI
}
}
- if (subtype==WIFI_PROBEREQ)
- {
- // FIXME
- bssid->InfrastructureMode = Ndis802_11Infrastructure;
- _rtw_memcpy(bssid->MacAddress, GetAddr2Ptr(pframe), ETH_ALEN);
- bssid->Privacy = 1;
- return _SUCCESS;
- }
-
_rtw_memcpy(&bssid->Configuration.BeaconPeriod, rtw_get_beacon_interval_from_ie(bssid->IEs), 2);
bssid->Configuration.BeaconPeriod = le32_to_cpu(bssid->Configuration.BeaconPeriod);
@@ -9270,7 +9542,7 @@ u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSI
}
#endif // CONFIG_INTEL_WIDI
- #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) & 1
+ #if defined(DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) & 1
if(strcmp(bssid->Ssid.Ssid, DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED) == 0) {
DBG_871X("Receiving %s("MAC_FMT", DSConfig:%u) from ch%u with ss:%3u, sq:%3u, RawRSSI:%3ld\n"
, bssid->Ssid.Ssid, MAC_ARG(bssid->MacAddress), bssid->Configuration.DSConfig
@@ -9346,6 +9618,8 @@ void start_create_ibss(_adapter* padapter)
DBG_871X("start_create_ibss, invalid cap:%x\n", caps);
return;
}
+ //update bc/mc sta_info
+ update_bmc_sta(padapter);
}
@@ -9358,9 +9632,6 @@ void start_clnt_join(_adapter* padapter)
WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network));
int beacon_timeout;
- pmlmeext->cur_channel = (u8)pnetwork->Configuration.DSConfig;
- pmlmeinfo->bcn_interval = get_beacon_interval(pnetwork);
-
//update wireless mode
update_wireless_mode(padapter);
@@ -9369,23 +9640,6 @@ void start_clnt_join(_adapter* padapter)
update_capinfo(padapter, caps);
if (caps&cap_ESS)
{
-
-#ifdef CONFIG_DUALMAC_CONCURRENT
- if(dc_handle_join_request(padapter) == _FAIL)
- {
- DBG_871X("dc_handle_join_request fail !!!\n");
- return;
- }
- //switch channel
- set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-#elif defined (CONFIG_CONCURRENT_MODE)
- if(concurrent_chk_start_clnt_join(padapter) == _FAIL)
- return;
-#else //NON CONCURRENT_MODE
- //switch channel
- set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-#endif
-
Set_MSR(padapter, WIFI_FW_STATION_STATE);
val8 = (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X)? 0xcc: 0xcf;
@@ -9399,8 +9653,48 @@ void start_clnt_join(_adapter* padapter)
#endif
rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
- //switch channel
- //set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
+ #ifdef CONFIG_DEAUTH_BEFORE_CONNECT
+ // Because of AP's not receiving deauth before
+ // AP may: 1)not response auth or 2)deauth us after link is complete
+ // issue deauth before issuing auth to deal with the situation
+
+ // Commented by Albert 2012/07/21
+ // For the Win8 P2P connection, it will be hard to have a successful connection if this Wi-Fi doesn't connect to it.
+ {
+ #ifdef CONFIG_P2P
+ _queue *queue = &(padapter->mlmepriv.scanned_queue);
+ _list *head = get_list_head(queue);
+ _list *pos = get_next(head);
+ struct wlan_network *scanned = NULL;
+ u8 ie_offset = 0;
+ _irqL irqL;
+ bool has_p2p_ie = _FALSE;
+
+ _enter_critical_bh(&(padapter->mlmepriv.scanned_queue.lock), &irqL);
+
+ for (pos = get_next(head);!rtw_end_of_queue_search(head, pos); pos = get_next(pos)) {
+
+ scanned = LIST_CONTAINOR(pos, struct wlan_network, list);
+ if(scanned==NULL)
+ rtw_warn_on(1);
+
+ if (_rtw_memcmp(&(scanned->network.Ssid), &(pnetwork->Ssid), sizeof(NDIS_802_11_SSID)) == _TRUE
+ && _rtw_memcmp(scanned->network.MacAddress, pnetwork->MacAddress, sizeof(NDIS_802_11_MAC_ADDRESS)) == _TRUE
+ ) {
+ ie_offset = (scanned->network.Reserved[0] == 2? 0:12);
+ if (rtw_get_p2p_ie(scanned->network.IEs+ie_offset, scanned->network.IELength-ie_offset, NULL, NULL))
+ has_p2p_ie = _TRUE;
+ break;
+ }
+ }
+
+ _exit_critical_bh(&(padapter->mlmepriv.scanned_queue.lock), &irqL);
+
+ if (scanned == NULL || rtw_end_of_queue_search(head, pos) || has_p2p_ie == _FALSE)
+ #endif /* CONFIG_P2P */
+ issue_deauth_ex(padapter, pnetwork->MacAddress, WLAN_REASON_DEAUTH_LEAVING, 5, 100);
+ }
+ #endif /* CONFIG_DEAUTH_BEFORE_CONNECT */
//here wait for receiving the beacon to start auth
//and enable a timer
@@ -9410,6 +9704,20 @@ void start_clnt_join(_adapter* padapter)
(REAUTH_TO * REAUTH_LIMIT) + (REASSOC_TO*REASSOC_LIMIT) +beacon_timeout);
pmlmeinfo->state = WIFI_FW_AUTH_NULL | WIFI_FW_STATION_STATE;
+
+ {//only for STA mode
+ u16 media_status;
+ u8 mac_id = 0;
+
+ #ifdef CONFIG_CONCURRENT_MODE
+ if(PRIMARY_ADAPTER == padapter->adapter_type)
+ mac_id=0;
+ else
+ mac_id=2;
+ #endif
+ media_status = (mac_id<<8)|1; // MACID|OPMODE:1 connect
+ rtw_hal_set_hwreg(padapter,HW_VAR_H2C_MEDIA_STATUS_RPT,(u8 *)&media_status);
+ }
}
else if (caps&cap_IBSS) //adhoc client
{
@@ -9426,9 +9734,6 @@ void start_clnt_join(_adapter* padapter)
val8 = 0xcf;
rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
- //switch channel
- set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
beacon_timing_control(padapter);
pmlmeinfo->state = WIFI_FW_ADHOC_STATE;
@@ -9460,15 +9765,6 @@ void start_clnt_auth(_adapter* padapter)
pmlmeext->retry = 0;
- // Because of AP's not receiving deauth before
- // AP may: 1)not response auth or 2)deauth us after link is complete
- // issue deauth before issuing auth to deal with the situation
-#ifndef CONFIG_PLATFORM_RTK_DMP
- // Commented by Albert 2012/07/21
- // For the Win8 P2P connection, it will be hard to have a successful connection if this Wi-Fi doesn't connect to it.
- issue_deauth(padapter, (&(pmlmeinfo->network))->MacAddress, WLAN_REASON_DEAUTH_LEAVING);
-#endif
-
DBG_871X_LEVEL(_drv_always_, "start auth\n");
issue_auth(padapter, NULL, 0);
@@ -10159,6 +10455,8 @@ void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
u8 join_type;
u16 media_status;
+ psta = rtw_get_stainfo(pstapriv, cur_network->MacAddress);
+
if(join_res < 0)
{
join_type = 1;
@@ -10168,6 +10466,11 @@ void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
//restore to initial setting.
update_tx_basic_rate(padapter, padapter->registrypriv.wireless_mode);
+ if (psta){//only for STA mode
+ media_status = (psta->mac_id<<8)|0; // MACID|OPMODE:1 connect
+ rtw_hal_set_hwreg(padapter,HW_VAR_H2C_MEDIA_STATUS_RPT,(u8 *)&media_status);
+ }
+
goto exit_mlmeext_joinbss_event_callback;
}
@@ -10181,6 +10484,8 @@ void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
update_bmc_sta_support_rate(padapter, psta_bmc->mac_id);
Update_RA_Entry(padapter, psta_bmc);
}
+ //update bc/mc sta_info
+ update_bmc_sta(padapter);
}
@@ -10210,7 +10515,7 @@ void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
#endif
- psta = rtw_get_stainfo(pstapriv, cur_network->MacAddress);
+
if (psta) //only for infra. mode
{
pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
@@ -10222,11 +10527,7 @@ void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res)
//set per sta rate after updating HT cap.
set_sta_rate(padapter, psta);
- #if (RATE_ADAPTIVE_SUPPORT==1) //for 88E RA
- rtw_hal_set_hwreg(padapter,HW_VAR_TX_RPT_MAX_MACID, (u8*)&psta->mac_id);
- #endif
- media_status = (psta->mac_id<<8)|1; // MACID|OPMODE: 1 means connect
- rtw_hal_set_hwreg(padapter,HW_VAR_H2C_MEDIA_STATUS_RPT,(u8 *)&media_status);
+ rtw_sta_media_status_rpt(padapter, psta, 1);
}
join_type = 2;
@@ -10403,8 +10704,8 @@ void _linked_rx_signal_strehgth_display(_adapter *padapter)
#endif
- rtw_hal_get_def_var(padapter, HAL_DEF_UNDERCORATEDSMOOTHEDPWDB, &UndecoratedSmoothedPWDB);
- DBG_871X("UndecoratedSmoothedPWDB:%d\n",UndecoratedSmoothedPWDB);
+ //rtw_hal_get_def_var(padapter, HAL_DEF_UNDERCORATEDSMOOTHEDPWDB, &UndecoratedSmoothedPWDB);
+ //DBG_871X("UndecoratedSmoothedPWDB:%d\n",UndecoratedSmoothedPWDB);
}
@@ -10483,10 +10784,13 @@ void linked_status_chk(_adapter *padapter)
rx_chk_limit = 8;
#endif
- #ifdef CONFIG_INTEL_WIDI
- if (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_NONE)
- rx_chk_limit = 1;
- #endif
+ // Marked by Kurt 20130715
+ // For WiDi 3.5 and latered on, they don't ask WiDi sink to do roaming, so we could not check rx limit that strictly.
+ // todo: To check why we under miracast session, rx_chk would be _FALSE
+ //#ifdef CONFIG_INTEL_WIDI
+ //if (padapter->mlmepriv.widi_state != INTEL_WIDI_STATE_NONE)
+ // rx_chk_limit = 1;
+ //#endif
if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress)) != NULL)
{
@@ -10861,6 +11165,27 @@ void addba_timer_hdl(struct sta_info *psta)
#endif //CONFIG_80211N_HT
}
+#ifdef CONFIG_IEEE80211W
+void sa_query_timer_hdl(_adapter *padapter)
+{
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_priv * pmlmepriv = &padapter->mlmepriv;
+ _irqL irqL;
+ //disconnect
+ _enter_critical_bh(&pmlmepriv->lock, &irqL);
+
+ if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
+ {
+ rtw_disassoc_cmd(padapter, 0, _TRUE);
+ rtw_indicate_disconnect(padapter);
+ rtw_free_assoc_resources(padapter, 1);
+ }
+
+ _exit_critical_bh(&pmlmepriv->lock, &irqL);
+ DBG_871X("SA query timeout disconnect\n");
+}
+#endif //CONFIG_IEEE80211W
+
u8 NULL_hdl(_adapter *padapter, u8 *pbuf)
{
return H2C_SUCCESS;
@@ -11037,6 +11362,9 @@ u8 join_cmd_hdl(_adapter *padapter, u8 *pbuf)
_rtw_memcpy(pnetwork->IEs, ((WLAN_BSSID_EX *)pbuf)->IEs, pnetwork->IELength);
+ pmlmeext->cur_channel = (u8)pnetwork->Configuration.DSConfig;
+ pmlmeinfo->bcn_interval = get_beacon_interval(pnetwork);
+
//Check AP vendor to move rtw_joinbss_cmd()
//pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pnetwork->IEs, pnetwork->IELength);
@@ -11135,6 +11463,20 @@ u8 join_cmd_hdl(_adapter *padapter, u8 *pbuf)
//initialgain = 0x1E;
//rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
+ /* check channel, bandwidth, offset and switch */
+#ifdef CONFIG_DUALMAC_CONCURRENT
+ if(dc_handle_join_request(padapter) == _FAIL) {
+ DBG_871X("dc_handle_join_request fail !!!\n");
+ return H2C_SUCCESS;
+ }
+ set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
+#else //NON CONFIG_DUALMAC_CONCURRENT
+ if(rtw_chk_start_clnt_join(padapter) == _FAIL) {
+ report_join_res(padapter, (-4));
+ return H2C_SUCCESS;
+ }
+#endif
+
rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, pmlmeinfo->network.MacAddress);
join_type = 0;
rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
@@ -11290,8 +11632,10 @@ u8 sitesurvey_cmd_hdl(_adapter *padapter, u8 *pbuf)
if (pmlmeext->sitesurvey_res.state == SCAN_DISABLE)
{
+#ifdef CONFIG_CONCURRENT_MODE
//for first time sitesurvey_cmd
rtw_hal_set_hwreg(padapter, HW_VAR_CHECK_TXBUF, 0);
+#endif //CONFIG_CONCURRENT_MODE
pmlmeext->sitesurvey_res.state = SCAN_START;
pmlmeext->sitesurvey_res.bss_cnt = 0;
@@ -11379,23 +11723,17 @@ u8 sitesurvey_cmd_hdl(_adapter *padapter, u8 *pbuf)
Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
//config the initial gain under scaning, need to write the BB registers
+#ifdef CONFIG_P2P
#ifdef CONFIG_IOCTL_CFG80211
- if((wdev_to_priv(padapter->rtw_wdev))->p2p_enabled == _TRUE)
- {
+ if((wdev_to_priv(padapter->rtw_wdev))->p2p_enabled == _TRUE && pwdinfo->driver_interface == DRIVER_CFG80211 )
initialgain = 0x30;
- }
- else
- initialgain = 0x1E;
-#else // go through the WEXT interface //CONFIG_IOCTL_CFG80211
-#ifdef CONFIG_P2P
- if ( rtw_p2p_chk_state( pwdinfo, P2P_STATE_NONE ) )
- initialgain = 0x1E;
else
+#endif //CONFIG_IOCTL_CFG80211
+ if ( !rtw_p2p_chk_state( pwdinfo, P2P_STATE_NONE ) )
initialgain = 0x28;
-#else // CONFIG_P2P
- initialgain = 0x1E;
-#endif // CONFIG_P2P
-#endif // CONFIG_IOCTL_CFG80211
+ else
+#endif //CONFIG_P2P
+ initialgain = 0x1e;
rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
@@ -12461,108 +12799,6 @@ sint check_buddy_mlmeinfo_state(_adapter *padapter, u32 state)
}
-int concurrent_chk_start_clnt_join(_adapter *padapter)
-{
- int ret = _FAIL;
- PADAPTER pbuddy_adapter;
- struct mlme_ext_priv *pbuddy_mlmeext;
- struct mlme_ext_info *pbuddy_pmlmeinfo;
- struct mlme_priv *pbuddy_mlmepriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- unsigned char cur_ch = pmlmeext->cur_channel;
- unsigned char cur_bw = pmlmeext->cur_bwmode;
- unsigned char cur_ch_offset = pmlmeext->cur_ch_offset;
-
- if(!rtw_buddy_adapter_up(padapter))
- {
- goto start_join_set_ch_bw;
- }
-
- pbuddy_adapter = padapter->pbuddy_adapter;
- pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
- pbuddy_pmlmeinfo = &(pbuddy_mlmeext->mlmext_info);
- pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
-
- if((pbuddy_pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)//for AP MODE
- {
- bool inform_ch_switch = _FALSE;
- if(pmlmeext->cur_channel != pbuddy_mlmeext->cur_channel)
- {
- inform_ch_switch = _TRUE;
- }
- else if((pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
- (pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
- (pmlmeext->cur_ch_offset != pbuddy_mlmeext->cur_ch_offset))
- {
- inform_ch_switch = _TRUE;
- }
- else if((pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20) &&
- (pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40))
- {
- inform_ch_switch = _FALSE;
- cur_ch = pmlmeext->cur_channel;
- cur_bw = pbuddy_mlmeext->cur_bwmode;
- cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
- }
-
-
- if (inform_ch_switch) {
- #ifdef CONFIG_SPCT_CH_SWITCH
- if (1) {
- rtw_ap_inform_ch_switch(pbuddy_adapter, pmlmeext->cur_channel , pmlmeext->cur_ch_offset);
- } else
- #endif
- {
- //issue deauth to all stas if if2 is at ap mode
- rtw_sta_flush(pbuddy_adapter);
- }
- rtw_hal_set_hwreg(padapter, HW_VAR_CHECK_TXBUF, 0);
- }
- }
- else if(check_fwstate(pbuddy_mlmepriv, _FW_LINKED) == _TRUE &&
- check_fwstate(pbuddy_mlmepriv, WIFI_STATION_STATE) == _TRUE) //for Client Mode/p2p client
- {
-#if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
- struct wifidirect_info *pbuddy_wdinfo = &(pbuddy_adapter->wdinfo);
- if(!rtw_p2p_chk_state(pbuddy_wdinfo, P2P_STATE_NONE))
- {
- goto start_join_set_ch_bw;//wlan0-sta mode has higher priority than p2p0-p2p client
- }
-#endif //CONFIG_P2P && CONFIG_IOCTL_CFG80211
-
- if(pmlmeext->cur_channel != pbuddy_mlmeext->cur_channel)
- {
- DBG_871X("start_clnt_join(ch=%d), but channel mismatch with buddy(ch=%d) interface\n",
- pmlmeext->cur_channel, pbuddy_mlmeext->cur_channel);
-
- report_join_res(padapter, (-4));
-
- return ret;
- }
-
- if((pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
- (pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
- (pmlmeext->cur_ch_offset != pbuddy_mlmeext->cur_ch_offset))
- {
- DBG_871X("start_clnt_join(bwmode=%d, ch_offset=%d), but bwmode & ch_offset mismatch with buddy(bwmode=%d, ch_offset=%d) interface\n",
- pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
-
- report_join_res(padapter, (-4));
-
- return ret;
- }
-
- }
-
-
-start_join_set_ch_bw:
-
- set_channel_bwmode(padapter, cur_ch, cur_ch_offset, cur_bw);
-
- return _SUCCESS;
-
-}
-
void concurrent_chk_joinbss_done(_adapter *padapter, int join_res)
{
struct mlme_ext_priv *pmlmeext;
@@ -12573,15 +12809,16 @@ void concurrent_chk_joinbss_done(_adapter *padapter, int join_res)
struct mlme_ext_info *pbuddy_mlmeinfo;
WLAN_BSSID_EX *pbuddy_network_mlmeext;
+ pmlmeext = &padapter->mlmeextpriv;
+ pmlmeinfo = &(pmlmeext->mlmext_info);
+
+
if(!rtw_buddy_adapter_up(padapter))
{
set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
return;
}
- pmlmeext = &padapter->mlmeextpriv;
- pmlmeinfo = &(pmlmeext->mlmext_info);
-
pbuddy_adapter = padapter->pbuddy_adapter;
pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
@@ -12772,6 +13009,181 @@ void concurrent_chk_joinbss_done(_adapter *padapter, int join_res)
}
#endif //CONFIG_CONCURRENT_MODE
+int rtw_chk_start_clnt_join(_adapter *padapter)
+{
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ unsigned char cur_ch = pmlmeext->cur_channel;
+ unsigned char cur_bw = pmlmeext->cur_bwmode;
+ unsigned char cur_ch_offset = pmlmeext->cur_ch_offset;
+ bool chbw_allow = _TRUE;
+ bool connect_allow = _TRUE;
+
+#ifdef CONFIG_CONCURRENT_MODE
+ PADAPTER pbuddy_adapter;
+ struct mlme_ext_priv *pbuddy_mlmeext;
+ struct mlme_ext_info *pbuddy_pmlmeinfo;
+ struct mlme_priv *pbuddy_mlmepriv;
+
+ if (!rtw_buddy_adapter_up(padapter)) {
+ goto start_join_set_ch_bw;
+ }
+
+ pbuddy_adapter = padapter->pbuddy_adapter;
+ pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
+ pbuddy_pmlmeinfo = &(pbuddy_mlmeext->mlmext_info);
+ pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
+
+ if((pbuddy_pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)//for AP MODE
+ {
+ DBG_871X("start_clnt_join: "ADPT_FMT"(ch=%d, bw=%d, ch_offset=%d)"
+ ", "ADPT_FMT" AP mode(ch=%d, bw=%d, ch_offset=%d)\n",
+ ADPT_ARG(padapter), pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset,
+ ADPT_ARG(pbuddy_adapter), pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
+
+ if(pmlmeext->cur_channel != pbuddy_mlmeext->cur_channel)
+ {
+ chbw_allow = _FALSE;
+ }
+ else if((pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
+ (pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
+ (pmlmeext->cur_ch_offset != pbuddy_mlmeext->cur_ch_offset))
+ {
+ chbw_allow = _FALSE;
+ }
+ else if((pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20) &&
+ (pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40))
+ {
+ cur_ch = pmlmeext->cur_channel;
+ cur_bw = pbuddy_mlmeext->cur_bwmode;
+ cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
+ }
+
+ DBG_871X("start_clnt_join: connect_allow:%d, chbw_allow:%d\n", connect_allow, chbw_allow);
+ if (chbw_allow == _FALSE) {
+ #ifdef CONFIG_SPCT_CH_SWITCH
+ if (1) {
+ rtw_ap_inform_ch_switch(pbuddy_adapter, pmlmeext->cur_channel , pmlmeext->cur_ch_offset);
+ } else
+ #endif
+ {
+ //issue deauth to all stas if if2 is at ap mode
+ rtw_sta_flush(pbuddy_adapter);
+ }
+ rtw_hal_set_hwreg(padapter, HW_VAR_CHECK_TXBUF, 0);
+ }
+ }
+ else if(check_fwstate(pbuddy_mlmepriv, _FW_LINKED) == _TRUE &&
+ check_fwstate(pbuddy_mlmepriv, WIFI_STATION_STATE) == _TRUE) //for Client Mode/p2p client
+ {
+ DBG_871X("start_clnt_join: "ADPT_FMT"(ch=%d, bw=%d, ch_offset=%d)"
+ ", "ADPT_FMT" STA mode(ch=%d, bw=%d, ch_offset=%d)\n",
+ ADPT_ARG(padapter), pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset,
+ ADPT_ARG(pbuddy_adapter), pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_bwmode, pbuddy_mlmeext->cur_ch_offset);
+
+ if(pmlmeext->cur_channel != pbuddy_mlmeext->cur_channel)
+ {
+ chbw_allow = _FALSE;
+ }
+ else if((pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_20) &&
+ (pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40))
+ {
+ cur_bw = HT_CHANNEL_WIDTH_40;
+ cur_ch_offset = pbuddy_mlmeext->cur_ch_offset;
+ }
+ else if((pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
+ (pbuddy_mlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) &&
+ (pmlmeext->cur_ch_offset != pbuddy_mlmeext->cur_ch_offset))
+ {
+ chbw_allow = _FALSE;
+ }
+
+ connect_allow = chbw_allow;
+
+ #if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
+ /* wlan0-sta mode has higher priority than p2p0-p2p client */
+ if (!rtw_p2p_chk_state(&(pbuddy_adapter->wdinfo), P2P_STATE_NONE)
+ && pbuddy_adapter->wdinfo.driver_interface == DRIVER_CFG80211)
+ {
+ connect_allow = _TRUE;
+ }
+ #endif /* CONFIG_P2P && CONFIG_IOCTL_CFG80211 */
+
+ DBG_871X("start_clnt_join: connect_allow:%d, chbw_allow:%d\n", connect_allow, chbw_allow);
+ if (connect_allow == _TRUE && chbw_allow == _FALSE) {
+ /* disconnect buddy's connection */
+ rtw_disassoc_cmd(pbuddy_adapter, 500, _FALSE);
+ rtw_indicate_disconnect(pbuddy_adapter);
+ rtw_free_assoc_resources(pbuddy_adapter, 1);
+ }
+ }
+
+start_join_set_ch_bw:
+#endif /* CONFIG_CONCURRENT_MODE */
+
+ if (connect_allow == _TRUE) {
+ DBG_871X("start_join_set_ch_bw: ch=%d, bwmode=%d, ch_offset=%d\n", cur_ch, cur_bw, cur_ch_offset);
+ set_channel_bwmode(padapter, cur_ch, cur_ch_offset, cur_bw);
+ }
+
+ return connect_allow == _TRUE ? _SUCCESS : _FAIL;
+}
+
+/* Find union about ch, bw, ch_offset of all linked interfaces */
+int rtw_get_ch_setting_union(_adapter *adapter, u8 *ch, u8 *bw, u8 *offset)
+{
+ struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
+ _adapter *iface;
+ struct mlme_ext_priv *mlmeext;
+ int i;
+ u8 ch_ret = 0;
+ u8 bw_ret = HT_CHANNEL_WIDTH_20;
+ u8 offset_ret = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
+ int num = 0;
+
+ if (ch) *ch = 0;
+ if (bw) *bw = HT_CHANNEL_WIDTH_20;
+ if (offset) *offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
+
+ for (i = 0; i<dvobj->iface_nums; i++) {
+ iface = dvobj->padapters[i];
+ mlmeext = &iface->mlmeextpriv;
+
+ if (!check_fwstate(&iface->mlmepriv, _FW_LINKED))
+ continue;
+
+ if (num == 0) {
+ ch_ret = mlmeext->cur_channel;
+ bw_ret = mlmeext->cur_bwmode;
+ offset_ret = mlmeext->cur_ch_offset;
+ num++;
+ continue;
+ }
+
+ if (ch_ret != mlmeext->cur_channel) {
+ num = 0;
+ break;
+ }
+
+ if (bw_ret < mlmeext->cur_bwmode) {
+ bw_ret = mlmeext->cur_bwmode;
+ offset_ret = mlmeext->cur_ch_offset;
+ } else if (bw_ret == mlmeext->cur_bwmode && offset_ret != mlmeext->cur_ch_offset) {
+ num = 0;
+ break;
+ }
+
+ num++;
+ }
+
+ if (num) {
+ if (ch) *ch = ch_ret;
+ if (bw) *bw = bw_ret;
+ if (offset) *offset = offset_ret;
+ }
+
+ return num;
+}
+
u8 set_ch_hdl(_adapter *padapter, u8 *pbuf)
{
struct set_ch_parm *set_ch_parm;
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_mp.c b/drivers/net/wireless/rtl8723as/core/rtw_mp.c
index a63604fcc61e..75f0da1ab224 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_mp.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_mp.c
@@ -570,7 +570,7 @@ static void disable_dm(PADAPTER padapter)
#endif
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
struct dm_priv *pdmpriv = &pHalData->dmpriv;
-
+ PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
//3 1. disable firmware dynamic mechanism
// disable Power Training, Rate Adaptive
@@ -590,7 +590,7 @@ static void disable_dm(PADAPTER padapter)
// enable APK, LCK and IQK but disable power tracking
#ifndef CONFIG_RTL8188E
- pdmpriv->TxPowerTrackControl = _FALSE;
+ pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _FALSE;
#endif
Switch_DM_Func(padapter, DYNAMIC_RF_CALIBRATION, _TRUE);
}
@@ -600,7 +600,7 @@ void MPT_PwrCtlDM(PADAPTER padapter, u32 bstart)
{
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
struct dm_priv *pdmpriv = &pHalData->dmpriv;
-
+ PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
//Switch_DM_Func(padapter, DYNAMIC_RF_CALIBRATION, bstart);
if (bstart==1){
DBG_871X("in MPT_PwrCtlDM start \n");
@@ -608,10 +608,16 @@ void MPT_PwrCtlDM(PADAPTER padapter, u32 bstart)
pdmpriv->InitODMFlag |= ODM_RF_TX_PWR_TRACK ;
pdmpriv->InitODMFlag |= ODM_RF_CALIBRATION ;
pdmpriv->TxPowerTrackControl = _TRUE;
+#ifndef CONFIG_RTL8188E
+ pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _TRUE;
+#endif
}else{
DBG_871X("in MPT_PwrCtlDM stop \n");
disable_dm(padapter);
pdmpriv->TxPowerTrackControl = _FALSE;
+ #ifndef CONFIG_RTL8188E
+ pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = _FALSE;
+ #endif
}
@@ -638,7 +644,6 @@ s32 mp_start_test(PADAPTER padapter)
//3 disable dynamic mechanism
disable_dm(padapter);
-
//3 0. update mp_priv
if (padapter->registrypriv.rf_config == RF_819X_MAX_TYPE) {
@@ -1316,16 +1321,17 @@ void SetPacketRx(PADAPTER pAdapter, u8 bStartRx)
if(bStartRx)
{
- #ifdef CONFIG_RTL8723A
- rtl8723a_InitAntenna_Selection(pAdapter);
- #endif //CONFIG_RTL8723A
- // Accept CRC error and destination address
+ // Accept CRC error and destination address
#if 1
//ndef CONFIG_RTL8723A
- pHalData->ReceiveConfig = AAP | APM | AM | AB | APP_ICV | ADF | AMF | HTC_LOC_CTRL | APP_MIC | APP_PHYSTS;
-
- pHalData->ReceiveConfig |= ACRC32;
+ //pHalData->ReceiveConfig = AAP | APM | AM | AB | APP_ICV | ADF | AMF | HTC_LOC_CTRL | APP_MIC | APP_PHYSTS;
+ //pHalData->ReceiveConfig |= ACRC32;
+
+ pHalData->ReceiveConfig = AAP | APM | AM | AB | APP_ICV | AMF | ADF | APP_FCS | HTC_LOC_CTRL | APP_MIC | APP_PHYSTS;
+
+ pHalData->ReceiveConfig |= (RCR_ACRC32|RCR_AAP);
+
rtw_write32(pAdapter, REG_RCR, pHalData->ReceiveConfig);
// Accept all data frames
@@ -1488,8 +1494,13 @@ void _rtw_mp_xmit_priv (struct xmit_priv *pxmitpriv)
}
else
{
- max_xmit_extbuf_size = 6000;
- num_xmit_extbuf = 8;
+ #ifdef CONFIG_RTL8723A_SDIO
+ max_xmit_extbuf_size = 20000;
+ num_xmit_extbuf = 1;
+ #else
+ max_xmit_extbuf_size = 6000;
+ num_xmit_extbuf = 8;
+ #endif
}
pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmit_extbuf;
@@ -1506,8 +1517,13 @@ void _rtw_mp_xmit_priv (struct xmit_priv *pxmitpriv)
if(padapter->registrypriv.mp_mode ==0)
{
- max_xmit_extbuf_size = 6000;
- num_xmit_extbuf = 8;
+ #ifdef CONFIG_RTL8723A_SDIO
+ max_xmit_extbuf_size = 20000;
+ num_xmit_extbuf = 1;
+ #else
+ max_xmit_extbuf_size = 6000;
+ num_xmit_extbuf = 8;
+ #endif
}
else
{
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_mp_ioctl.c b/drivers/net/wireless/rtl8723as/core/rtw_mp_ioctl.c
index 4771bc6a050a..95570d1e75e8 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_mp_ioctl.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_mp_ioctl.c
@@ -1677,12 +1677,12 @@ _func_enter_;
return NDIS_STATUS_INVALID_LENGTH;
*poid_par_priv->bytes_rw = 8;
- _rtw_memcpy(poid_par_priv->information_buf, &(Adapter->pwrctrlpriv.pwr_mode), 8);
+ _rtw_memcpy(poid_par_priv->information_buf, &(adapter_to_pwrctl(Adapter)->pwr_mode), 8);
*poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
RT_TRACE(_module_mp_, _drv_notice_,
("-oid_rt_pro_qry_pwrstate_hdl: pwr_mode=%d smart_ps=%d\n",
- Adapter->pwrctrlpriv.pwr_mode, Adapter->pwrctrlpriv.smart_ps));
+ adapter_to_pwrctl(Adapter)->pwr_mode, adapter_to_pwrctl(Adapter)->smart_ps));
_func_exit_;
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_odm.c b/drivers/net/wireless/rtl8723as/core/rtw_odm.c
new file mode 100755
index 000000000000..b7176266e149
--- /dev/null
+++ b/drivers/net/wireless/rtl8723as/core/rtw_odm.c
@@ -0,0 +1,217 @@
+/******************************************************************************
+ *
+ * Copyright(c) 2013 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+#include <rtw_odm.h>
+#ifdef CONFIG_RTL8192C
+#include <rtl8192c_hal.h>
+#endif
+#ifdef CONFIG_RTL8192D
+#include <rtl8192d_hal.h>
+#endif
+#ifdef CONFIG_RTL8723A
+#include <rtl8723a_hal.h>
+#endif
+#ifdef CONFIG_RTL8188E
+#include <rtl8188e_hal.h>
+#endif
+
+const char *odm_comp_str[] = {
+ "ODM_COMP_DIG",
+ "ODM_COMP_RA_MASK",
+ "ODM_COMP_DYNAMIC_TXPWR",
+ "ODM_COMP_FA_CNT",
+ "ODM_COMP_RSSI_MONITOR",
+ "ODM_COMP_CCK_PD",
+ "ODM_COMP_ANT_DIV",
+ "ODM_COMP_PWR_SAVE",
+ "ODM_COMP_PWR_TRAIN",
+ "ODM_COMP_RATE_ADAPTIVE",
+ "ODM_COMP_PATH_DIV",
+ "ODM_COMP_PSD",
+ "ODM_COMP_DYNAMIC_PRICCA",
+ "ODM_COMP_RXHP",
+ NULL,
+ NULL,
+ "ODM_COMP_EDCA_TURBO",
+ "ODM_COMP_EARLY_MODE",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "ODM_COMP_TX_PWR_TRACK",
+ "ODM_COMP_RX_GAIN_TRACK",
+ "ODM_COMP_CALIBRATION",
+ NULL,
+ NULL,
+ NULL,
+ "ODM_COMP_COMMON",
+ "ODM_COMP_INIT",
+};
+
+#define RTW_ODM_COMP_MAX 32
+
+const char *odm_ability_str[] = {
+ "ODM_BB_DIG",
+ "ODM_BB_RA_MASK",
+ "ODM_BB_DYNAMIC_TXPWR",
+ "ODM_BB_FA_CNT",
+ "ODM_BB_RSSI_MONITOR",
+ "ODM_BB_CCK_PD ",
+ "ODM_BB_ANT_DIV",
+ "ODM_BB_PWR_SAVE",
+ "ODM_BB_PWR_TRAIN",
+ "ODM_BB_RATE_ADAPTIVE",
+ "ODM_BB_PATH_DIV",
+ "ODM_BB_PSD",
+ "ODM_BB_RXHP",
+ "ODM_BB_ADAPTIVITY",
+ "ODM_BB_DYNAMIC_ATC",
+ NULL,
+ "ODM_MAC_EDCA_TURBO",
+ "ODM_MAC_EARLY_MODE",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "ODM_RF_TX_PWR_TRACK",
+ "ODM_RF_RX_GAIN_TRACK",
+ "ODM_RF_CALIBRATION",
+};
+
+#define RTW_ODM_ABILITY_MAX 27
+
+const char *odm_dbg_level_str[] = {
+ NULL,
+ "ODM_DBG_OFF",
+ "ODM_DBG_SERIOUS",
+ "ODM_DBG_WARNING",
+ "ODM_DBG_LOUD",
+ "ODM_DBG_TRACE ",
+};
+
+#define RTW_ODM_DBG_LEVEL_NUM 6
+
+int _rtw_odm_dbg_comp_msg(_adapter *adapter, char *buf, int len)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(adapter);
+ DM_ODM_T *odm = &pHalData->odmpriv;
+ int cnt = 0;
+ u64 dbg_comp;
+ int i;
+
+ rtw_hal_get_def_var(adapter, HW_DEF_ODM_DBG_FLAG, &dbg_comp);
+ cnt += snprintf(buf+cnt, len-cnt, "odm.DebugComponents = 0x%016llx \n", dbg_comp);
+ for (i=0;i<RTW_ODM_COMP_MAX;i++) {
+ if (odm_comp_str[i])
+ cnt += snprintf(buf+cnt, len-cnt, "%cBIT%-2d %s\n",
+ (BIT0 << i) & dbg_comp ? '+' : ' ', i, odm_comp_str[i]);
+ }
+
+ return cnt;
+}
+
+void rtw_odm_dbg_comp_msg(_adapter *adapter)
+{
+ char buf[768] = {0};
+
+ _rtw_odm_dbg_comp_msg(adapter, buf, 768);
+ DBG_871X_LEVEL(_drv_always_, "\n%s", buf);
+}
+
+inline void rtw_odm_dbg_comp_set(_adapter *adapter, u64 comps)
+{
+ rtw_hal_set_def_var(adapter, HW_DEF_ODM_DBG_FLAG, &comps);
+}
+
+int _rtw_odm_dbg_level_msg(_adapter *adapter, char *buf, int len)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(adapter);
+ DM_ODM_T *odm = &pHalData->odmpriv;
+ int cnt = 0;
+ u32 dbg_level;
+ int i;
+
+ rtw_hal_get_def_var(adapter, HW_DEF_ODM_DBG_LEVEL, &dbg_level);
+ cnt += snprintf(buf+cnt, len-cnt, "odm.DebugDebugLevel = %u\n", dbg_level);
+ for (i=0;i<RTW_ODM_DBG_LEVEL_NUM;i++) {
+ if (odm_dbg_level_str[i])
+ cnt += snprintf(buf+cnt, len-cnt, "%u %s\n", i, odm_dbg_level_str[i]);
+ }
+
+ return cnt;
+}
+
+void rtw_odm_dbg_level_msg(_adapter *adapter)
+{
+ char buf[100] = {0};
+
+ _rtw_odm_dbg_comp_msg(adapter, buf, 100);
+ DBG_871X_LEVEL(_drv_always_, "\n%s", buf);
+}
+
+inline void rtw_odm_dbg_level_set(_adapter *adapter, u32 level)
+{
+ rtw_hal_set_def_var(adapter, HW_DEF_ODM_DBG_LEVEL, &level);
+}
+
+int _rtw_odm_adaptivity_parm_msg(_adapter *adapter, char *buf, int len)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(adapter);
+ DM_ODM_T *odm = &pHalData->odmpriv;
+
+ return snprintf(buf, len,
+ "%10s %16s %8s %10s %11s %14s\n"
+ "0x%-8x %-16d 0x%-6x %-10d %-11u %-14u\n",
+ "TH_L2H_ini", "TH_EDCCA_HL_diff", "IGI_Base", "ForceEDCCA", "AdapEn_RSSI", "IGI_LowerBound",
+ (u8)odm->TH_L2H_ini,
+ odm->TH_EDCCA_HL_diff,
+ odm->IGI_Base,
+ odm->ForceEDCCA,
+ odm->AdapEn_RSSI,
+ odm->IGI_LowerBound
+ );
+}
+
+void rtw_odm_adaptivity_parm_msg(_adapter *adapter)
+{
+ char buf[256] = {0};
+
+ _rtw_odm_dbg_comp_msg(adapter, buf, 256);
+ DBG_871X_LEVEL(_drv_always_, "\n%s", buf);
+}
+
+void rtw_odm_adaptivity_parm_set(_adapter *adapter, s8 TH_L2H_ini, s8 TH_EDCCA_HL_diff,
+ s8 IGI_Base, bool ForceEDCCA, u8 AdapEn_RSSI, u8 IGI_LowerBound)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(adapter);
+ DM_ODM_T *odm = &pHalData->odmpriv;
+
+ odm->TH_L2H_ini = TH_L2H_ini;
+ odm->TH_EDCCA_HL_diff = TH_EDCCA_HL_diff;
+ odm->IGI_Base = IGI_Base;
+ odm->ForceEDCCA = ForceEDCCA;
+ odm->AdapEn_RSSI = AdapEn_RSSI;
+ odm->IGI_LowerBound = IGI_LowerBound;
+}
+
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_p2p.c b/drivers/net/wireless/rtl8723as/core/rtw_p2p.c
index 0ed4b5e31065..348bdb88357c 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_p2p.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_p2p.c
@@ -1888,7 +1888,18 @@ u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
u8 p2pie[ MAX_P2P_IE_LEN] = { 0x00 };
u32 len=0, p2pielen = 0;
#ifdef CONFIG_INTEL_WIDI
+ struct mlme_priv *pmlmepriv = &(pwdinfo->padapter->mlmepriv);
u8 zero_array_check[L2SDTA_SERVICE_VE_LEN] = { 0x00 };
+ u8 widi_version = 0, i = 0;
+
+ if( _rtw_memcmp( pmlmepriv->sa_ext, zero_array_check, L2SDTA_SERVICE_VE_LEN ) == _FALSE )
+ {
+ widi_version = 35;
+ }
+ else if( pmlmepriv->num_p2p_sdt != 0 )
+ {
+ widi_version = 40;
+ }
#endif //CONFIG_INTEL_WIDI
// P2P OUI
@@ -1977,10 +1988,14 @@ u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
// + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes)
//*(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 21 + pwdinfo->device_name_len );
#ifdef CONFIG_INTEL_WIDI
- if( _rtw_memcmp( pwdinfo->padapter->mlmepriv.sa_ext, zero_array_check, L2SDTA_SERVICE_VE_LEN ) == _FALSE )
+ if( widi_version == 35 )
{
RTW_PUT_LE16(p2pie + p2pielen, 21 + 8 + pwdinfo->device_name_len);
}
+ else if( widi_version == 40 )
+ {
+ RTW_PUT_LE16(p2pie + p2pielen, 21 + 8 * pmlmepriv->num_p2p_sdt + pwdinfo->device_name_len);
+ }
else
#endif //CONFIG_INTEL_WIDI
RTW_PUT_LE16(p2pie + p2pielen, 21 + pwdinfo->device_name_len);
@@ -1997,25 +2012,48 @@ u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
RTW_PUT_BE16(p2pie + p2pielen, pwdinfo->supported_wps_cm);
p2pielen += 2;
- // Primary Device Type
- // Category ID
- //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
- RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_MULIT_MEDIA);
- p2pielen += 2;
+#ifdef CONFIG_INTEL_WIDI
+ if( widi_version == 40 )
+ {
+ // Primary Device Type
+ // Category ID
+ //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
+ RTW_PUT_BE16(p2pie + p2pielen, pmlmepriv->p2p_pdt_cid );
+ p2pielen += 2;
- // OUI
- //*(u32*) ( p2pie + p2pielen ) = cpu_to_be32( WPSOUI );
- RTW_PUT_BE32(p2pie + p2pielen, WPSOUI);
- p2pielen += 4;
+ // OUI
+ //*(u32*) ( p2pie + p2pielen ) = cpu_to_be32( WPSOUI );
+ RTW_PUT_BE32(p2pie + p2pielen, WPSOUI);
+ p2pielen += 4;
- // Sub Category ID
- //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
- RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_SCID_MEDIA_SERVER);
- p2pielen += 2;
+ // Sub Category ID
+ //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
+ RTW_PUT_BE16(p2pie + p2pielen, pmlmepriv->p2p_pdt_scid);
+ p2pielen += 2;
+ }
+ else
+#endif //CONFIG_INTEL_WIDI
+ {
+ // Primary Device Type
+ // Category ID
+ //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_CID_MULIT_MEDIA );
+ RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_MULIT_MEDIA);
+ p2pielen += 2;
+
+ // OUI
+ //*(u32*) ( p2pie + p2pielen ) = cpu_to_be32( WPSOUI );
+ RTW_PUT_BE32(p2pie + p2pielen, WPSOUI);
+ p2pielen += 4;
+
+ // Sub Category ID
+ //*(u16*) ( p2pie + p2pielen ) = cpu_to_be16( WPS_PDT_SCID_MEDIA_SERVER );
+ RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_SCID_MEDIA_SERVER);
+ p2pielen += 2;
+ }
// Number of Secondary Device Types
#ifdef CONFIG_INTEL_WIDI
- if( _rtw_memcmp( pwdinfo->padapter->mlmepriv.sa_ext, zero_array_check, L2SDTA_SERVICE_VE_LEN ) == _FALSE )
+ if( widi_version == 35 )
{
p2pie[ p2pielen++ ] = 0x01;
@@ -2028,6 +2066,21 @@ u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
RTW_PUT_BE16(p2pie + p2pielen, P2P_SCID_WIDI_CONSUMER_SINK);
p2pielen += 2;
}
+ else if( widi_version == 40 )
+ {
+ p2pie[ p2pielen++ ] = pmlmepriv->num_p2p_sdt;
+ for( ; i < pmlmepriv->num_p2p_sdt; i++ )
+ {
+ RTW_PUT_BE16(p2pie + p2pielen, pmlmepriv->p2p_sdt_cid[i]);
+ p2pielen += 2;
+
+ RTW_PUT_BE32(p2pie + p2pielen, INTEL_DEV_TYPE_OUI);
+ p2pielen += 4;
+
+ RTW_PUT_BE16(p2pie + p2pielen, pmlmepriv->p2p_sdt_scid[i]);
+ p2pielen += 2;
+ }
+ }
else
#endif //CONFIG_INTEL_WIDI
p2pie[ p2pielen++ ] = 0x00; // No Secondary Device Type List
@@ -2732,11 +2785,11 @@ u8 process_p2p_group_negotation_req( struct wifidirect_info *pwdinfo, u8 *pframe
{
u8 attr_content = 0x00;
u32 attr_contentlen = 0;
- u8 ch_content[50] = { 0x00 };
+ u8 ch_content[100] = { 0x00 };
uint ch_cnt = 0;
- u8 peer_ch_list[50] = { 0x00 };
+ u8 peer_ch_list[100] = { 0x00 };
u8 peer_ch_num = 0;
- u8 ch_list_inclusioned[50] = { 0x00 };
+ u8 ch_list_inclusioned[100] = { 0x00 };
u8 ch_num_inclusioned = 0;
u16 cap_attr;
@@ -2934,12 +2987,12 @@ u8 process_p2p_group_negotation_resp( struct wifidirect_info *pwdinfo, u8 *pfram
u32 attr_contentlen = 0;
u8 operatingch_info[5] = { 0x00 };
uint ch_cnt = 0;
- u8 ch_content[50] = { 0x00 };
+ u8 ch_content[100] = { 0x00 };
u8 groupid[ 38 ];
u16 cap_attr;
- u8 peer_ch_list[50] = { 0x00 };
+ u8 peer_ch_list[100] = { 0x00 };
u8 peer_ch_num = 0;
- u8 ch_list_inclusioned[50] = { 0x00 };
+ u8 ch_list_inclusioned[100] = { 0x00 };
u8 ch_num_inclusioned = 0;
while ( p2p_ie ) // Found the P2P IE.
@@ -3392,98 +3445,100 @@ _func_enter_;
struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
pwdinfo->operating_channel = pbuddy_mlmeext->cur_channel;
-#ifdef CONFIG_IOCTL_CFG80211
- DBG_871X("%s, switch ch back to buddy's cur_channel=%d\n", __func__, pbuddy_mlmeext->cur_channel);
+ if( pwdinfo->driver_interface == DRIVER_CFG80211 )
+ {
+ DBG_871X("%s, switch ch back to buddy's cur_channel=%d\n", __func__, pbuddy_mlmeext->cur_channel);
- set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
+ set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
- issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
-
-#else //CONFIG_IOCTL_CFG80211
- if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
+ issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
+ }
+ else if( pwdinfo->driver_interface == DRIVER_WEXT )
{
- // Now, the driver stays on the AP's channel.
- // If the pwdinfo->ext_listen_period = 0, that means the P2P listen state is not available on listen channel.
- if ( pwdinfo->ext_listen_period > 0 )
+ if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
+ {
+ // Now, the driver stays on the AP's channel.
+ // If the pwdinfo->ext_listen_period = 0, that means the P2P listen state is not available on listen channel.
+ if ( pwdinfo->ext_listen_period > 0 )
+ {
+ DBG_8192C( "[%s] P2P_STATE_IDLE, ext_listen_period = %d\n", __FUNCTION__, pwdinfo->ext_listen_period );
+
+ if ( pbuddy_mlmeext->cur_channel != pwdinfo->listen_channel )
+ {
+ // Will switch to listen channel so that need to send the NULL data with PW bit to AP.
+ issue_nulldata(pbuddy_adapter, NULL, 1, 3, 500);
+ set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
+ }
+
+ rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
+ val8 = 1;
+ rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
+
+ // Todo: To check the value of pwdinfo->ext_listen_period is equal to 0 or not.
+ _set_timer( &pwdinfo->ap_p2p_switch_timer, pwdinfo->ext_listen_period );
+ }
+ }
+ else if ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN) ||
+ rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL) ||
+ ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING) && pwdinfo->nego_req_info.benable == _FALSE ) ||
+ rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ) )
{
- DBG_8192C( "[%s] P2P_STATE_IDLE, ext_listen_period = %d\n", __FUNCTION__, pwdinfo->ext_listen_period );
+ // Now, the driver is in the listen state of P2P mode.
+ DBG_8192C( "[%s] P2P_STATE_IDLE, ext_listen_interval = %d\n", __FUNCTION__, pwdinfo->ext_listen_interval );
+ // Commented by Albert 2012/11/01
+ // If the AP's channel is the same as the listen channel, we should still be in the listen state
+ // Other P2P device is still able to find this device out even this device is in the AP's channel.
+ // So, configure this device to be able to receive the probe request frame and set it to listen state.
if ( pbuddy_mlmeext->cur_channel != pwdinfo->listen_channel )
{
- // Will switch to listen channel so that need to send the NULL data with PW bit to AP.
- issue_nulldata(pbuddy_adapter, NULL, 1, 3, 500);
- set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
+ set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
+ val8 = 0;
+ padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
+ rtw_p2p_set_state(pwdinfo, P2P_STATE_IDLE);
+ issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
}
- rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
- val8 = 1;
- rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
-
- // Todo: To check the value of pwdinfo->ext_listen_period is equal to 0 or not.
- _set_timer( &pwdinfo->ap_p2p_switch_timer, pwdinfo->ext_listen_period );
+ // Todo: To check the value of pwdinfo->ext_listen_interval is equal to 0 or not.
+ _set_timer( &pwdinfo->ap_p2p_switch_timer, pwdinfo->ext_listen_interval );
}
- }
- else if ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN) ||
- rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL) ||
- ( rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING) && pwdinfo->nego_req_info.benable == _FALSE ) ||
- rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ) )
- {
- // Now, the driver is in the listen state of P2P mode.
- DBG_8192C( "[%s] P2P_STATE_IDLE, ext_listen_interval = %d\n", __FUNCTION__, pwdinfo->ext_listen_interval );
-
- // Commented by Albert 2012/11/01
- // If the AP's channel is the same as the listen channel, we should still be in the listen state
- // Other P2P device is still able to find this device out even this device is in the AP's channel.
- // So, configure this device to be able to receive the probe request frame and set it to listen state.
- if ( pbuddy_mlmeext->cur_channel != pwdinfo->listen_channel )
+ else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_OK))
{
- set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
+ // The driver had finished the P2P handshake successfully.
val8 = 0;
- padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
- rtw_p2p_set_state(pwdinfo, P2P_STATE_IDLE);
+ rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
+ set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
}
-
- // Todo: To check the value of pwdinfo->ext_listen_interval is equal to 0 or not.
- _set_timer( &pwdinfo->ap_p2p_switch_timer, pwdinfo->ext_listen_interval );
- }
- else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_OK))
- {
- // The driver had finished the P2P handshake successfully.
- val8 = 0;
- rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
- set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
- issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500);
- }
- else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_PROVISION_DIS_REQ))
- {
- val8 = 1;
- set_channel_bwmode(padapter, pwdinfo->tx_prov_disc_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
- rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
- issue_probereq_p2p(padapter, NULL);
- _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
- }
- else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING) && pwdinfo->nego_req_info.benable == _TRUE)
- {
- val8 = 1;
- set_channel_bwmode(padapter, pwdinfo->nego_req_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
- rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
- issue_probereq_p2p(padapter, NULL);
- _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
- }
- else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_INVITE_REQ ) && pwdinfo->invitereq_info.benable == _TRUE)
- {
- /*
- val8 = 1;
- set_channel_bwmode(padapter, , HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
- rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
- issue_probereq_p2p(padapter, NULL);
- _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
- */
+ else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_PROVISION_DIS_REQ))
+ {
+ val8 = 1;
+ set_channel_bwmode(padapter, pwdinfo->tx_prov_disc_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
+ rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
+ issue_probereq_p2p(padapter, NULL);
+ _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
+ }
+ else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING) && pwdinfo->nego_req_info.benable == _TRUE)
+ {
+ val8 = 1;
+ set_channel_bwmode(padapter, pwdinfo->nego_req_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
+ rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
+ issue_probereq_p2p(padapter, NULL);
+ _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
+ }
+ else if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_INVITE_REQ ) && pwdinfo->invitereq_info.benable == _TRUE)
+ {
+ /*
+ val8 = 1;
+ set_channel_bwmode(padapter, , HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
+ rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
+ issue_probereq_p2p(padapter, NULL);
+ _set_timer( &pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT );
+ */
+ }
}
-#endif //CONFIG_IOCTL_CFG80211
- }
+ }
else
{
set_channel_bwmode( padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
@@ -3498,39 +3553,38 @@ static void ro_ch_handler(_adapter *padapter)
{
struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
struct wifidirect_info *pwdinfo = &padapter->wdinfo;
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ u8 ch, bw, offset;
_func_enter_;
- {
-
-#ifdef CONFIG_CONCURRENT_MODE
- if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
- {
- PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
- struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
-
- DBG_871X("%s, switch ch back to buddy's cur_channel=%d\n", __func__, pbuddy_mlmeext->cur_channel);
-
- set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode);
+ if (rtw_get_ch_setting_union(padapter, &ch, &bw, &offset) != 0) {
+ if (0)
+ DBG_871X(FUNC_ADPT_FMT" back to linked union - ch:%u, bw:%u, offset:%u\n",
+ FUNC_ADPT_ARG(padapter), ch, bw, offset);
+ }
+ else if (wdev_to_priv(padapter->rtw_wdev)->p2p_enabled && pwdinfo->listen_channel) {
+ ch = pwdinfo->listen_channel;
+ bw = HT_CHANNEL_WIDTH_20;
+ offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
+ if (0)
+ DBG_871X(FUNC_ADPT_FMT" back to listen ch - ch:%u, bw:%u, offset:%u\n",
+ FUNC_ADPT_ARG(padapter), ch, bw, offset);
+ }
+ else {
+ ch = pcfg80211_wdinfo->restore_channel;
+ bw = HT_CHANNEL_WIDTH_20;
+ offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
+ if (0)
+ DBG_871X(FUNC_ADPT_FMT" back to restore ch - ch:%u, bw:%u, offset:%u\n",
+ FUNC_ADPT_ARG(padapter), ch, bw, offset);
+ }
- pmlmeext->cur_channel = pbuddy_mlmeext->cur_channel;
-
- }else
-#endif //CONFIG_CONCURRENT_MODE
- if( pcfg80211_wdinfo->restore_channel != pmlmeext->cur_channel )
- {
- if ( !check_fwstate(&padapter->mlmepriv, _FW_LINKED ) )
- pmlmeext->cur_channel = pcfg80211_wdinfo->restore_channel;
+ set_channel_bwmode(padapter, ch, offset, bw);
- set_channel_bwmode(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
- }
-
- rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
-#ifdef CONFIG_DEBUG_CFG80211
- DBG_871X("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
+ rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
+#ifdef CONFIG_DEBUG_CFG80211
+ DBG_871X("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
#endif
- }
pcfg80211_wdinfo->is_ro_ch = _FALSE;
@@ -3558,6 +3612,162 @@ static void ro_ch_timer_process (void *FunctionContext)
p2p_protocol_wk_cmd( adapter, P2P_RO_CH_WK);
}
+static void rtw_change_p2pie_op_ch(_adapter *padapter, const u8 *frame_body, u32 len, u8 ch)
+{
+ u8 *ies, *p2p_ie;
+ u32 ies_len, p2p_ielen;
+ PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
+ struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
+
+ ies = (u8*)(frame_body + _PUBLIC_ACTION_IE_OFFSET_);
+ ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
+
+ p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen );
+
+ while ( p2p_ie ) {
+ u32 attr_contentlen = 0;
+ u8 *pattr = NULL;
+
+ //Check P2P_ATTR_OPERATING_CH
+ attr_contentlen = 0;
+ pattr = NULL;
+ if((pattr = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, (uint*)&attr_contentlen))!=NULL)
+ {
+ *(pattr+4) = ch;
+ }
+
+ //Get the next P2P IE
+ p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
+ }
+}
+
+static void rtw_change_p2pie_ch_list(_adapter *padapter, const u8 *frame_body, u32 len, u8 ch)
+{
+ u8 *ies, *p2p_ie;
+ u32 ies_len, p2p_ielen;
+ PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
+ struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
+
+ ies = (u8*)(frame_body + _PUBLIC_ACTION_IE_OFFSET_);
+ ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
+
+ p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen );
+
+ while (p2p_ie) {
+ u32 attr_contentlen = 0;
+ u8 *pattr = NULL;
+
+ //Check P2P_ATTR_CH_LIST
+ if ((pattr=rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, NULL, (uint*)&attr_contentlen))!=NULL) {
+ int i;
+ u32 num_of_ch;
+ u8 *pattr_temp = pattr + 3 ;
+
+ attr_contentlen -= 3;
+
+ while (attr_contentlen>0) {
+ num_of_ch = *(pattr_temp+1);
+
+ for(i=0; i<num_of_ch; i++)
+ *(pattr_temp+2+i) = ch;
+
+ pattr_temp += (2+num_of_ch);
+ attr_contentlen -= (2+num_of_ch);
+ }
+ }
+
+ //Get the next P2P IE
+ p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
+ }
+}
+
+static bool rtw_chk_p2pie_ch_list_with_buddy(_adapter *padapter, const u8 *frame_body, u32 len)
+{
+ bool fit = _FALSE;
+#ifdef CONFIG_CONCURRENT_MODE
+ u8 *ies, *p2p_ie;
+ u32 ies_len, p2p_ielen;
+ PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
+ struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
+ u8 buddy_ch = pbuddy_mlmeext->cur_channel;
+
+ ies = (u8*)(frame_body + _PUBLIC_ACTION_IE_OFFSET_);
+ ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
+
+ p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen );
+
+ while (p2p_ie) {
+ u32 attr_contentlen = 0;
+ u8 *pattr = NULL;
+
+ //Check P2P_ATTR_CH_LIST
+ if ((pattr=rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, NULL, (uint*)&attr_contentlen))!=NULL) {
+ int i;
+ u32 num_of_ch;
+ u8 *pattr_temp = pattr + 3 ;
+
+ attr_contentlen -= 3;
+
+ while (attr_contentlen>0) {
+ num_of_ch = *(pattr_temp+1);
+
+ for(i=0; i<num_of_ch; i++) {
+ if (*(pattr_temp+2+i) == buddy_ch) {
+ DBG_871X(FUNC_ADPT_FMT" ch_list fit buddy_ch:%u\n", FUNC_ADPT_ARG(padapter), buddy_ch);
+ fit = _TRUE;
+ break;
+ }
+ }
+
+ pattr_temp += (2+num_of_ch);
+ attr_contentlen -= (2+num_of_ch);
+ }
+ }
+
+ //Get the next P2P IE
+ p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
+ }
+#endif
+ return fit;
+}
+
+static bool rtw_chk_p2pie_op_ch_with_buddy(_adapter *padapter, const u8 *frame_body, u32 len)
+{
+ bool fit = _FALSE;
+#ifdef CONFIG_CONCURRENT_MODE
+ u8 *ies, *p2p_ie;
+ u32 ies_len, p2p_ielen;
+ PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
+ struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
+ u8 buddy_ch = pbuddy_mlmeext->cur_channel;
+
+ ies = (u8*)(frame_body + _PUBLIC_ACTION_IE_OFFSET_);
+ ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
+
+ p2p_ie = rtw_get_p2p_ie( ies, ies_len, NULL, &p2p_ielen );
+
+ while (p2p_ie) {
+ u32 attr_contentlen = 0;
+ u8 *pattr = NULL;
+
+ //Check P2P_ATTR_OPERATING_CH
+ attr_contentlen = 0;
+ pattr = NULL;
+ if((pattr = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, (uint*)&attr_contentlen))!=NULL) {
+ if (*(pattr+4) == buddy_ch) {
+ DBG_871X(FUNC_ADPT_FMT" op_ch fit buddy_ch:%u\n", FUNC_ADPT_ARG(padapter), buddy_ch);
+ fit = _TRUE;
+ break;
+ }
+ }
+
+ //Get the next P2P IE
+ p2p_ie = rtw_get_p2p_ie(p2p_ie+p2p_ielen, ies_len -(p2p_ie -ies + p2p_ielen), NULL, &p2p_ielen);
+ }
+#endif
+ return fit;
+}
+
static void rtw_cfg80211_adjust_p2pie_channel(_adapter *padapter, const u8 *frame_body, u32 len)
{
#ifdef CONFIG_CONCURRENT_MODE
@@ -3730,6 +3940,69 @@ void rtw_append_wfd_ie(_adapter *padapter, u8 *buf, u32* len)
}
#endif
+u8 *dump_p2p_attr_ch_list(u8 *p2p_ie, uint p2p_ielen, u8 *buf, u32 buf_len)
+{
+ uint attr_contentlen = 0;
+ u8 *pattr = NULL;
+ int w_sz = 0;
+ u8 ch_cnt = 0;
+ u8 ch_list[40];
+ bool continuous = _FALSE;
+
+ if ((pattr=rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, NULL, &attr_contentlen))!=NULL) {
+ int i, j;
+ u32 num_of_ch;
+ u8 *pattr_temp = pattr + 3 ;
+
+ attr_contentlen -= 3;
+
+ _rtw_memset(ch_list, 0, 40);
+
+ while (attr_contentlen>0) {
+ num_of_ch = *(pattr_temp+1);
+
+ for(i=0; i<num_of_ch; i++) {
+ for (j=0;j<ch_cnt;j++) {
+ if (ch_list[j] == *(pattr_temp+2+i))
+ break;
+ }
+ if (j>=ch_cnt)
+ ch_list[ch_cnt++] = *(pattr_temp+2+i);
+
+ }
+
+ pattr_temp += (2+num_of_ch);
+ attr_contentlen -= (2+num_of_ch);
+ }
+
+ for (j=0;j<ch_cnt;j++) {
+ if (j == 0) {
+ w_sz += snprintf(buf+w_sz, buf_len-w_sz, "%u", ch_list[j]);
+ } else if (ch_list[j] - ch_list[j-1] != 1) {
+ w_sz += snprintf(buf+w_sz, buf_len-w_sz, ", %u", ch_list[j]);
+ } else if (j != ch_cnt-1 && ch_list[j+1] - ch_list[j] == 1) {
+ /* empty */
+ } else {
+ w_sz += snprintf(buf+w_sz, buf_len-w_sz, "-%u", ch_list[j]);
+ }
+ }
+ }
+ return buf;
+}
+
+/*
+ * return _TRUE if requester is GO, _FALSE if responder is GO
+ */
+bool rtw_p2p_nego_intent_compare(u8 req, u8 resp)
+{
+ if (req>>1 == resp >>1)
+ return req&0x01 ? _TRUE : _FALSE;
+ else if (req>>1 > resp>>1)
+ return _TRUE;
+ else
+ return _FALSE;
+}
+
int rtw_p2p_check_frames(_adapter *padapter, const u8 *buf, u32 len, u8 tx)
{
int is_p2p_frame = (-1);
@@ -3738,6 +4011,11 @@ int rtw_p2p_check_frames(_adapter *padapter, const u8 *buf, u32 len, u8 tx)
u8 *p2p_ie = NULL;
uint p2p_ielen = 0;
struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
+ int status = -1;
+ u8 ch_list_buf[128] = {'\0'};
+ int op_ch = -1;
+ int listen_ch = -1;
+ u8 intent = 0;
frame_body = (unsigned char *)(buf + sizeof(struct rtw_ieee80211_hdr_3addr));
category = frame_body[0];
@@ -3767,60 +4045,152 @@ int rtw_p2p_check_frames(_adapter *padapter, const u8 *buf, u32 len, u8 tx)
u8 *cont;
uint cont_len;
case P2P_GO_NEGO_REQ:
- DBG_871X("RTW_%s:P2P_GO_NEGO_REQ, dialogToken=%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken);
-
- if(tx)
- {
-#ifdef CONFIG_DRV_ISSUE_PROV_REQ // IOT FOR S2
+ {
+ struct rtw_wdev_nego_info* nego_info = &pwdev_priv->nego_info;
+
+ if (tx) {
+ #ifdef CONFIG_DRV_ISSUE_PROV_REQ // IOT FOR S2
if(pwdev_priv->provdisc_req_issued == _FALSE)
rtw_cfg80211_issue_p2p_provision_request(padapter, buf, len);
-#endif //CONFIG_DRV_ISSUE_PROV_REQ
+ #endif //CONFIG_DRV_ISSUE_PROV_REQ
//pwdev_priv->provdisc_req_issued = _FALSE;
-
-#ifdef CONFIG_CONCURRENT_MODE
+
+ #ifdef CONFIG_CONCURRENT_MODE
if(check_buddy_fwstate(padapter, _FW_LINKED))
rtw_cfg80211_adjust_p2pie_channel(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr));
-#endif
+ #endif
}
-
+
+ if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, &cont_len)))
+ op_ch = *(cont+4);
+ if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_LISTEN_CH, NULL, &cont_len)))
+ listen_ch = *(cont+4);
+ if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT, NULL, &cont_len)))
+ intent = *cont;
+
+ if (nego_info->token != dialogToken)
+ rtw_wdev_nego_info_init(nego_info);
+
+ _rtw_memcpy(nego_info->peer_mac, tx ? GetAddr1Ptr(buf) : GetAddr2Ptr(buf), ETH_ALEN);
+ nego_info->active = tx ? 1 : 0;
+ nego_info->token = dialogToken;
+ nego_info->req_op_ch = op_ch;
+ nego_info->req_listen_ch = listen_ch;
+ nego_info->req_intent = intent;
+ nego_info->state = 0;
+
+ dump_p2p_attr_ch_list(p2p_ie, p2p_ielen, ch_list_buf, 128);
+ DBG_871X("RTW_%s:P2P_GO_NEGO_REQ, dialogToken=%d, intent:%u%s, listen_ch:%d, op_ch:%d, ch_list:%s\n",
+ (tx==_TRUE)?"Tx":"Rx", dialogToken, (intent>>1), intent&0x1 ? "+" : "-", listen_ch, op_ch, ch_list_buf);
+
+ if (!tx) {
+ #ifdef CONFIG_CONCURRENT_MODE
+ if(check_buddy_fwstate(padapter, _FW_LINKED)
+ && rtw_chk_p2pie_ch_list_with_buddy(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr)) == _FALSE)
+ {
+ DBG_871X(FUNC_ADPT_FMT" ch_list has no intersect with buddy\n", FUNC_ADPT_ARG(padapter));
+ rtw_change_p2pie_ch_list(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr), 0);
+ }
+ #endif
+ }
+
break;
+ }
case P2P_GO_NEGO_RESP:
- cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, NULL, &cont_len);
- DBG_871X("RTW_%s:P2P_GO_NEGO_RESP, dialogToken=%d, status:%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken, cont?*cont:-1);
+ {
+ struct rtw_wdev_nego_info* nego_info = &pwdev_priv->nego_info;
- if(!tx)
- {
- pwdev_priv->provdisc_req_issued = _FALSE;
- }
-#ifdef CONFIG_CONCURRENT_MODE
- else
- {
+ if (tx) {
+ #ifdef CONFIG_CONCURRENT_MODE
if(check_buddy_fwstate(padapter, _FW_LINKED))
rtw_cfg80211_adjust_p2pie_channel(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr));
+ #endif
}
-#endif
- break;
+
+ if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, &cont_len)))
+ op_ch = *(cont+4);
+ if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT, NULL, &cont_len)))
+ intent = *cont;
+ if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, NULL, &cont_len)))
+ status = *cont;
+
+ if (nego_info->token == dialogToken && nego_info->state == 0
+ && _rtw_memcmp(nego_info->peer_mac, tx ? GetAddr1Ptr(buf) : GetAddr2Ptr(buf), ETH_ALEN) == _TRUE
+ ) {
+ nego_info->status = (status==-1) ? 0xff : status;
+ nego_info->rsp_op_ch= op_ch;
+ nego_info->rsp_intent = intent;
+ nego_info->state = 1;
+ if (status != 0)
+ nego_info->token = 0; /* init */
+ }
+
+ dump_p2p_attr_ch_list(p2p_ie, p2p_ielen, ch_list_buf, 128);
+ DBG_871X("RTW_%s:P2P_GO_NEGO_RESP, dialogToken=%d, intent:%u%s, status:%d, op_ch:%d, ch_list:%s\n",
+ (tx==_TRUE)?"Tx":"Rx", dialogToken, (intent>>1), intent&0x1 ? "+" : "-", status, op_ch, ch_list_buf);
+
+ if (!tx) {
+ pwdev_priv->provdisc_req_issued = _FALSE;
+ #ifdef CONFIG_CONCURRENT_MODE
+ if(check_buddy_fwstate(padapter, _FW_LINKED)
+ && rtw_chk_p2pie_ch_list_with_buddy(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr)) == _FALSE)
+ {
+ DBG_871X(FUNC_ADPT_FMT" ch_list has no intersect with buddy\n", FUNC_ADPT_ARG(padapter));
+ rtw_change_p2pie_ch_list(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr), 0);
+ }
+ #endif
+ }
+
+ break;
+ }
case P2P_GO_NEGO_CONF:
- cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, NULL, &cont_len);
- DBG_871X("RTW_%s:P2P_GO_NEGO_CONF, dialogToken=%d, status:%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken, cont?*cont:-1);
+ {
+ struct rtw_wdev_nego_info* nego_info = &pwdev_priv->nego_info;
+ bool is_go = _FALSE;
-#ifdef CONFIG_CONCURRENT_MODE
- if(tx)
- {
+ if (tx) {
+ #ifdef CONFIG_CONCURRENT_MODE
if(check_buddy_fwstate(padapter, _FW_LINKED))
rtw_cfg80211_adjust_p2pie_channel(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr));
+ #endif
}
-#endif
- break;
+
+ if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, &cont_len)))
+ op_ch = *(cont+4);
+ if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, NULL, &cont_len)))
+ status = *cont;
+
+ if (nego_info->token == dialogToken && nego_info->state == 1
+ && _rtw_memcmp(nego_info->peer_mac, tx ? GetAddr1Ptr(buf) : GetAddr2Ptr(buf), ETH_ALEN) == _TRUE
+ ) {
+ nego_info->status = (status==-1) ? 0xff : status;
+ nego_info->conf_op_ch = (op_ch==-1) ? 0 : op_ch;
+ nego_info->state = 2;
+
+ if (status == 0) {
+ if (rtw_p2p_nego_intent_compare(nego_info->req_intent, nego_info->rsp_intent) && tx)
+ is_go = _TRUE;
+ }
+
+ nego_info->token = 0; /* init */
+ }
+
+ dump_p2p_attr_ch_list(p2p_ie, p2p_ielen, ch_list_buf, 128);
+ DBG_871X("RTW_%s:P2P_GO_NEGO_CONF, dialogToken=%d, status:%d, op_ch:%d, ch_list:%s\n",
+ (tx==_TRUE)?"Tx":"Rx", dialogToken, status, op_ch, ch_list_buf);
+
+ if (!tx) {
+ }
+
+ break;
+ }
case P2P_INVIT_REQ:
{
struct rtw_wdev_invit_info* invit_info = &pwdev_priv->invit_info;
int flags = -1;
- int op_ch = 0;
- if(tx)
- {
+ if (tx) {
#ifdef CONFIG_CONCURRENT_MODE
if(check_buddy_fwstate(padapter, _FW_LINKED))
rtw_cfg80211_adjust_p2pie_channel(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr));
@@ -3835,21 +4205,38 @@ int rtw_p2p_check_frames(_adapter *padapter, const u8 *buf, u32 len, u8 tx)
if (invit_info->token != dialogToken)
rtw_wdev_invit_info_init(invit_info);
+ _rtw_memcpy(invit_info->peer_mac, tx ? GetAddr1Ptr(buf) : GetAddr2Ptr(buf), ETH_ALEN);
+ invit_info->active = tx ? 1 : 0;
invit_info->token = dialogToken;
invit_info->flags = (flags==-1) ? 0x0 : flags;
invit_info->req_op_ch= op_ch;
+ invit_info->state = 0;
+
+ dump_p2p_attr_ch_list(p2p_ie, p2p_ielen, ch_list_buf, 128);
+ DBG_871X("RTW_%s:P2P_INVIT_REQ, dialogToken=%d, flags:0x%02x, op_ch:%d, ch_list:%s\n",
+ (tx==_TRUE)?"Tx":"Rx", dialogToken, flags, op_ch, ch_list_buf);
+
+ if (!tx) {
+ #ifdef CONFIG_CONCURRENT_MODE
+ if(check_buddy_fwstate(padapter, _FW_LINKED)) {
+ if (op_ch != -1 && rtw_chk_p2pie_op_ch_with_buddy(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr)) == _FALSE) {
+ DBG_871X(FUNC_ADPT_FMT" op_ch:%u has no intersect with buddy\n", FUNC_ADPT_ARG(padapter), op_ch);
+ rtw_change_p2pie_ch_list(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr), 0);
+ } else if (rtw_chk_p2pie_ch_list_with_buddy(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr)) == _FALSE) {
+ DBG_871X(FUNC_ADPT_FMT" ch_list has no intersect with buddy\n", FUNC_ADPT_ARG(padapter));
+ rtw_change_p2pie_ch_list(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr), 0);
+ }
+ }
+ #endif
+ }
- DBG_871X("RTW_%s:P2P_INVIT_REQ, dialogToken=%d, flags:0x%02x, op_ch:%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken, flags, op_ch);
break;
}
case P2P_INVIT_RESP:
{
struct rtw_wdev_invit_info* invit_info = &pwdev_priv->invit_info;
- int status = -1;
- int op_ch = 0;
- if(tx)
- {
+ if (tx) {
#ifdef CONFIG_CONCURRENT_MODE
if(check_buddy_fwstate(padapter, _FW_LINKED))
rtw_cfg80211_adjust_p2pie_channel(padapter, frame_body, len-sizeof(struct rtw_ieee80211_hdr_3addr));
@@ -3857,19 +4244,35 @@ int rtw_p2p_check_frames(_adapter *padapter, const u8 *buf, u32 len, u8 tx)
}
if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, NULL, &cont_len)))
+ {
+#ifdef CONFIG_P2P_INVITE_IOT
+ if(tx && *cont==7)
+ {
+ DBG_871X("TX_P2P_INVITE_RESP, status is no common channel, change to unknown group\n");
+ *cont = 8; //unknow group status
+ }
+#endif //CONFIG_P2P_INVITE_IOT
status = *cont;
+ }
if ((cont = rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, NULL, &cont_len)))
op_ch = *(cont+4);
- if (invit_info->token != dialogToken) {
- rtw_wdev_invit_info_init(invit_info);
- } else {
- invit_info->token = 0;
+ if (invit_info->token == dialogToken && invit_info->state == 0
+ && _rtw_memcmp(invit_info->peer_mac, tx ? GetAddr1Ptr(buf) : GetAddr2Ptr(buf), ETH_ALEN) == _TRUE
+ ) {
invit_info->status = (status==-1) ? 0xff : status;
invit_info->rsp_op_ch= op_ch;
+ invit_info->state = 1;
+ invit_info->token = 0; /* init */
+ }
+
+ dump_p2p_attr_ch_list(p2p_ie, p2p_ielen, ch_list_buf, 128);
+ DBG_871X("RTW_%s:P2P_INVIT_RESP, dialogToken=%d, status:%d, op_ch:%d, ch_list:%s\n",
+ (tx==_TRUE)?"Tx":"Rx", dialogToken, status, op_ch, ch_list_buf);
+
+ if (!tx) {
}
- DBG_871X("RTW_%s:P2P_INVIT_RESP, dialogToken=%d, status:%d, op_ch:%d\n", (tx==_TRUE)?"Tx":"Rx", dialogToken, status, op_ch);
break;
}
case P2P_DEVDISC_REQ:
@@ -3954,10 +4357,9 @@ int rtw_p2p_check_frames(_adapter *padapter, const u8 *buf, u32 len, u8 tx)
}
}
- else
+ else
{
DBG_871X("RTW_%s:action frame category=%d\n", (tx==_TRUE)?"TX":"RX", category);
- //is_p2p_frame = (-1);
}
return is_p2p_frame;
@@ -4138,7 +4540,7 @@ _func_enter_;
{
pwdinfo->p2p_ps_mode = P2P_PS_CTWINDOW;
// driver should wait LPS for entering CTWindow
- if(padapter->pwrctrlpriv.bFwCurrentInPSMode == _TRUE)
+ if(adapter_to_pwrctl(padapter)->bFwCurrentInPSMode == _TRUE)
{
p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 1);
}
@@ -4175,7 +4577,7 @@ _func_exit_;
void p2p_ps_wk_hdl(_adapter *padapter, u8 p2p_ps_state)
{
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
_func_enter_;
@@ -4193,12 +4595,12 @@ _func_enter_;
pwdinfo->opp_ps = 0;
pwdinfo->noa_num = 0;
pwdinfo->p2p_ps_mode = P2P_PS_NONE;
- if(padapter->pwrctrlpriv.bFwCurrentInPSMode == _TRUE)
+ if(pwrpriv->bFwCurrentInPSMode == _TRUE)
{
if(pwrpriv->smart_ps == 0)
{
pwrpriv->smart_ps = 2;
- rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&(padapter->pwrctrlpriv.pwr_mode)));
+ rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&(pwrpriv->pwr_mode)));
}
}
break;
@@ -4212,7 +4614,7 @@ _func_enter_;
{
pwrpriv->smart_ps = 0;
DBG_871X("%s(): Enter CTW, change SmartPS\n", __FUNCTION__);
- rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&(padapter->pwrctrlpriv.pwr_mode)));
+ rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&(pwrpriv->pwr_mode)));
}
}
rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_P2P_PS_OFFLOAD, (u8 *)(&p2p_ps_state));
@@ -4300,6 +4702,11 @@ static void reset_ch_sitesurvey_timer_process (void *FunctionContext)
DBG_871X( "[%s] In\n", __FUNCTION__ );
// Reset the operation channel information
pwdinfo->rx_invitereq_info.operation_ch[0] = 0;
+#ifdef P2P_OP_CHECK_SOCIAL_CH
+ pwdinfo->rx_invitereq_info.operation_ch[1] = 0;
+ pwdinfo->rx_invitereq_info.operation_ch[2] = 0;
+ pwdinfo->rx_invitereq_info.operation_ch[3] = 0;
+#endif //P2P_OP_CHECK_SOCIAL_CH
pwdinfo->rx_invitereq_info.scan_op_ch_only = 0;
}
@@ -4314,6 +4721,11 @@ static void reset_ch_sitesurvey_timer_process2 (void *FunctionContext)
DBG_871X( "[%s] In\n", __FUNCTION__ );
// Reset the operation channel information
pwdinfo->p2p_info.operation_ch[0] = 0;
+#ifdef P2P_OP_CHECK_SOCIAL_CH
+ pwdinfo->p2p_info.operation_ch[1] = 0;
+ pwdinfo->p2p_info.operation_ch[2] = 0;
+ pwdinfo->p2p_info.operation_ch[3] = 0;
+#endif //P2P_OP_CHECK_SOCIAL_CH
pwdinfo->p2p_info.scan_op_ch_only = 0;
}
@@ -4611,45 +5023,118 @@ void init_wifidirect_info( _adapter* padapter, enum P2P_ROLE role)
pwdinfo->ext_listen_period = 1000;
#endif //!CONFIG_IOCTL_CFG80211
#endif
+
+// Commented by Kurt 20130319
+// For WiDi purpose: Use CFG80211 interface but controled WFD/RDS frame by driver itself.
+#ifdef CONFIG_IOCTL_CFG80211
+ pwdinfo->driver_interface = DRIVER_CFG80211;
+#else
+ pwdinfo->driver_interface = DRIVER_WEXT;
+#endif //CONFIG_IOCTL_CFG80211
+
pwdinfo->wfd_tdls_enable = 0;
_rtw_memset( pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN );
_rtw_memset( pwdinfo->p2p_peer_device_addr, 0x00, ETH_ALEN );
pwdinfo->rx_invitereq_info.operation_ch[0] = 0;
pwdinfo->rx_invitereq_info.operation_ch[1] = 0; // Used to indicate the scan end in site survey function
+#ifdef P2P_OP_CHECK_SOCIAL_CH
+ pwdinfo->rx_invitereq_info.operation_ch[2] = 0;
+ pwdinfo->rx_invitereq_info.operation_ch[3] = 0;
+ pwdinfo->rx_invitereq_info.operation_ch[4] = 0;
+#endif //P2P_OP_CHECK_SOCIAL_CH
pwdinfo->rx_invitereq_info.scan_op_ch_only = 0;
pwdinfo->p2p_info.operation_ch[0] = 0;
pwdinfo->p2p_info.operation_ch[1] = 0; // Used to indicate the scan end in site survey function
+#ifdef P2P_OP_CHECK_SOCIAL_CH
+ pwdinfo->p2p_info.operation_ch[2] = 0;
+ pwdinfo->p2p_info.operation_ch[3] = 0;
+ pwdinfo->p2p_info.operation_ch[4] = 0;
+#endif //P2P_OP_CHECK_SOCIAL_CH
pwdinfo->p2p_info.scan_op_ch_only = 0;
}
#ifdef CONFIG_DBG_P2P
-char * p2p_role_str[] = {
- "P2P_ROLE_DISABLE",
- "P2P_ROLE_DEVICE",
- "P2P_ROLE_CLIENT",
- "P2P_ROLE_GO"
-};
-
-char * p2p_state_str[] = {
- "P2P_STATE_NONE",
- "P2P_STATE_IDLE",
- "P2P_STATE_LISTEN",
- "P2P_STATE_SCAN",
- "P2P_STATE_FIND_PHASE_LISTEN",
- "P2P_STATE_FIND_PHASE_SEARCH",
- "P2P_STATE_TX_PROVISION_DIS_REQ",
- "P2P_STATE_RX_PROVISION_DIS_RSP",
- "P2P_STATE_RX_PROVISION_DIS_REQ",
- "P2P_STATE_GONEGO_ING",
- "P2P_STATE_GONEGO_OK",
- "P2P_STATE_GONEGO_FAIL",
- "P2P_STATE_RECV_INVITE_REQ_MATCH",
- "P2P_STATE_PROVISIONING_ING",
- "P2P_STATE_PROVISIONING_DONE",
- "P2P_STATE_RECV_INVITE_REQ_DISMATCH",
- "P2P_STATE_RECV_INVITE_REQ_GO"
-};
+
+/**
+ * rtw_p2p_role_txt - Get the p2p role name as a text string
+ * @role: P2P role
+ * Returns: The state name as a printable text string
+ */
+const char * rtw_p2p_role_txt(enum P2P_ROLE role)
+{
+ switch (role) {
+ case P2P_ROLE_DISABLE:
+ return "P2P_ROLE_DISABLE";
+ case P2P_ROLE_DEVICE:
+ return "P2P_ROLE_DEVICE";
+ case P2P_ROLE_CLIENT:
+ return "P2P_ROLE_CLIENT";
+ case P2P_ROLE_GO:
+ return "P2P_ROLE_GO";
+ default:
+ return "UNKNOWN";
+ }
+}
+
+/**
+ * rtw_p2p_state_txt - Get the p2p state name as a text string
+ * @state: P2P state
+ * Returns: The state name as a printable text string
+ */
+const char * rtw_p2p_state_txt(enum P2P_STATE state)
+{
+ switch (state) {
+ case P2P_STATE_NONE:
+ return "P2P_STATE_NONE";
+ case P2P_STATE_IDLE:
+ return "P2P_STATE_IDLE";
+ case P2P_STATE_LISTEN:
+ return "P2P_STATE_LISTEN";
+ case P2P_STATE_SCAN:
+ return "P2P_STATE_SCAN";
+ case P2P_STATE_FIND_PHASE_LISTEN:
+ return "P2P_STATE_FIND_PHASE_LISTEN";
+ case P2P_STATE_FIND_PHASE_SEARCH:
+ return "P2P_STATE_FIND_PHASE_SEARCH";
+ case P2P_STATE_TX_PROVISION_DIS_REQ:
+ return "P2P_STATE_TX_PROVISION_DIS_REQ";
+ case P2P_STATE_RX_PROVISION_DIS_RSP:
+ return "P2P_STATE_RX_PROVISION_DIS_RSP";
+ case P2P_STATE_RX_PROVISION_DIS_REQ:
+ return "P2P_STATE_RX_PROVISION_DIS_REQ";
+ case P2P_STATE_GONEGO_ING:
+ return "P2P_STATE_GONEGO_ING";
+ case P2P_STATE_GONEGO_OK:
+ return "P2P_STATE_GONEGO_OK";
+ case P2P_STATE_GONEGO_FAIL:
+ return "P2P_STATE_GONEGO_FAIL";
+ case P2P_STATE_RECV_INVITE_REQ_MATCH:
+ return "P2P_STATE_RECV_INVITE_REQ_MATCH";
+ case P2P_STATE_PROVISIONING_ING:
+ return "P2P_STATE_PROVISIONING_ING";
+ case P2P_STATE_PROVISIONING_DONE:
+ return "P2P_STATE_PROVISIONING_DONE";
+ case P2P_STATE_TX_INVITE_REQ:
+ return "P2P_STATE_TX_INVITE_REQ";
+ case P2P_STATE_RX_INVITE_RESP_OK:
+ return "P2P_STATE_RX_INVITE_RESP_OK";
+ case P2P_STATE_RECV_INVITE_REQ_DISMATCH:
+ return "P2P_STATE_RECV_INVITE_REQ_DISMATCH";
+ case P2P_STATE_RECV_INVITE_REQ_GO:
+ return "P2P_STATE_RECV_INVITE_REQ_GO";
+ case P2P_STATE_RECV_INVITE_REQ_JOIN:
+ return "P2P_STATE_RECV_INVITE_REQ_JOIN";
+ case P2P_STATE_RX_INVITE_RESP_FAIL:
+ return "P2P_STATE_RX_INVITE_RESP_FAIL";
+ case P2P_STATE_RX_INFOR_NOREADY:
+ return "P2P_STATE_RX_INFOR_NOREADY";
+ case P2P_STATE_TX_INFOR_NOREADY:
+ return "P2P_STATE_TX_INFOR_NOREADY";
+ default:
+ return "UNKNOWN";
+ }
+}
void dbg_rtw_p2p_set_state(struct wifidirect_info *wdinfo, enum P2P_STATE state, const char *caller, int line)
{
@@ -4657,11 +5142,11 @@ void dbg_rtw_p2p_set_state(struct wifidirect_info *wdinfo, enum P2P_STATE state,
enum P2P_STATE old_state = _rtw_p2p_state(wdinfo);
_rtw_p2p_set_state(wdinfo, state);
DBG_871X("[CONFIG_DBG_P2P]%s:%d set_state from %s to %s\n", caller, line
- , p2p_state_str[old_state], p2p_state_str[_rtw_p2p_state(wdinfo)]
+ , rtw_p2p_state_txt(old_state), rtw_p2p_state_txt(_rtw_p2p_state(wdinfo))
);
} else {
DBG_871X("[CONFIG_DBG_P2P]%s:%d set_state to same state %s\n", caller, line
- , p2p_state_str[_rtw_p2p_state(wdinfo)]
+ , rtw_p2p_state_txt(_rtw_p2p_state(wdinfo))
);
}
}
@@ -4671,11 +5156,11 @@ void dbg_rtw_p2p_set_pre_state(struct wifidirect_info *wdinfo, enum P2P_STATE st
enum P2P_STATE old_state = _rtw_p2p_pre_state(wdinfo);
_rtw_p2p_set_pre_state(wdinfo, state);
DBG_871X("[CONFIG_DBG_P2P]%s:%d set_pre_state from %s to %s\n", caller, line
- , p2p_state_str[old_state], p2p_state_str[_rtw_p2p_pre_state(wdinfo)]
+ , rtw_p2p_state_txt(old_state), rtw_p2p_state_txt(_rtw_p2p_pre_state(wdinfo))
);
} else {
DBG_871X("[CONFIG_DBG_P2P]%s:%d set_pre_state to same state %s\n", caller, line
- , p2p_state_str[_rtw_p2p_pre_state(wdinfo)]
+ , rtw_p2p_state_txt(_rtw_p2p_pre_state(wdinfo))
);
}
}
@@ -4700,11 +5185,11 @@ void dbg_rtw_p2p_set_role(struct wifidirect_info *wdinfo, enum P2P_ROLE role, co
enum P2P_ROLE old_role = wdinfo->role;
_rtw_p2p_set_role(wdinfo, role);
DBG_871X("[CONFIG_DBG_P2P]%s:%d set_role from %s to %s\n", caller, line
- , p2p_role_str[old_role], p2p_role_str[wdinfo->role]
+ , rtw_p2p_role_txt(old_role), rtw_p2p_role_txt(wdinfo->role)
);
} else {
DBG_871X("[CONFIG_DBG_P2P]%s:%d set_role to same role %s\n", caller, line
- , p2p_role_str[wdinfo->role]
+ , rtw_p2p_role_txt(wdinfo->role)
);
}
}
@@ -4715,7 +5200,6 @@ int rtw_p2p_enable(_adapter *padapter, enum P2P_ROLE role)
{
int ret = _SUCCESS;
struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
if (role == P2P_ROLE_DEVICE || role == P2P_ROLE_CLIENT|| role == P2P_ROLE_GO)
{
@@ -4757,6 +5241,11 @@ int rtw_p2p_enable(_adapter *padapter, enum P2P_ROLE role)
}
else if (role == P2P_ROLE_DISABLE)
{
+#ifdef CONFIG_INTEL_WIDI
+ if( padapter->mlmepriv.p2p_reject_disable == _TRUE )
+ return ret;
+#endif //CONFIG_INTEL_WIDI
+
if (_FAIL == rtw_pwr_wakeup(padapter)) {
ret = _FAIL;
goto exit;
@@ -4787,6 +5276,18 @@ int rtw_p2p_enable(_adapter *padapter, enum P2P_ROLE role)
//Restore to initial setting.
update_tx_basic_rate(padapter, padapter->registrypriv.wireless_mode);
+
+#ifdef CONFIG_INTEL_WIDI
+ rtw_reset_widi_info(padapter);
+#endif //CONFIG_INTEL_WIDI
+
+ //For WiDi purpose.
+#ifdef CONFIG_IOCTL_CFG80211
+ pwdinfo->driver_interface = DRIVER_CFG80211;
+#else
+ pwdinfo->driver_interface = DRIVER_WEXT;
+#endif //CONFIG_IOCTL_CFG80211
+
}
exit:
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_pwrctrl.c b/drivers/net/wireless/rtl8723as/core/rtw_pwrctrl.c
index 9e53994211b2..77b86f344dca 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_pwrctrl.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_pwrctrl.c
@@ -29,11 +29,15 @@
#endif
#ifdef CONFIG_IPS
-void ips_enter(_adapter * padapter)
+void _ips_enter(_adapter * padapter)
{
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
- _enter_pwrlock(&pwrpriv->lock);
+ if (padapter->hw_init_completed == _FALSE) {
+ DBG_871X("%s: hw_init_completed: %d\n",
+ __func__, padapter->hw_init_completed);
+ return;
+ }
pwrpriv->bips_processing = _TRUE;
@@ -58,20 +62,21 @@ void ips_enter(_adapter * padapter)
}
pwrpriv->bips_processing = _FALSE;
- _exit_pwrlock(&pwrpriv->lock);
-
}
-int ips_leave(_adapter * padapter)
+void ips_enter(_adapter * padapter)
{
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
- struct security_priv* psecuritypriv=&(padapter->securitypriv);
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- int result = _SUCCESS;
- sint keyid;
-
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
_enter_pwrlock(&pwrpriv->lock);
+ _ips_enter(padapter);
+ _exit_pwrlock(&pwrpriv->lock);
+}
+
+int _ips_leave(_adapter * padapter)
+{
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
+ int result = _SUCCESS;
if((pwrpriv->rf_pwrstate == rf_off) &&(!pwrpriv->bips_processing))
{
@@ -84,20 +89,6 @@ int ips_leave(_adapter * padapter)
pwrpriv->rf_pwrstate = rf_on;
}
DBG_871X_LEVEL(_drv_always_, "nolinked power save leave\n");
-
- if((_WEP40_ == psecuritypriv->dot11PrivacyAlgrthm) ||(_WEP104_ == psecuritypriv->dot11PrivacyAlgrthm))
- {
- DBG_871X("==>%s,channel(%d),processing(%x)\n",__FUNCTION__,padapter->mlmeextpriv.cur_channel,pwrpriv->bips_processing);
- set_channel_bwmode(padapter, padapter->mlmeextpriv.cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
- for(keyid=0;keyid<4;keyid++){
- if(pmlmepriv->key_mask & BIT(keyid)){
- if(keyid == psecuritypriv->dot11PrivacyKeyIndex)
- result=rtw_set_key(padapter,psecuritypriv, keyid, 1);
- else
- result=rtw_set_key(padapter,psecuritypriv, keyid, 0);
- }
- }
- }
DBG_871X("==> ips_leave.....LED(0x%08x)...\n",rtw_read32(padapter,0x4c));
pwrpriv->bips_processing = _FALSE;
@@ -106,13 +97,21 @@ int ips_leave(_adapter * padapter)
pwrpriv->bpower_saving = _FALSE;
}
- _exit_pwrlock(&pwrpriv->lock);
-
return result;
}
+int ips_leave(_adapter * padapter)
+{
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
+ int ret;
+
+ _enter_pwrlock(&pwrpriv->lock);
+ ret = _ips_leave(padapter);
+ _exit_pwrlock(&pwrpriv->lock);
-#endif
+ return ret;
+}
+#endif /* CONFIG_IPS */
#ifdef CONFIG_AUTOSUSPEND
extern void autosuspend_enter(_adapter* padapter);
@@ -138,7 +137,7 @@ bool rtw_pwr_unassociated_idle(_adapter *adapter)
bool ret = _FALSE;
- if (adapter->pwrctrlpriv.ips_deny_time >= rtw_get_current_time()) {
+ if (adapter_to_pwrctl(adapter)->ips_deny_time >= rtw_get_current_time()) {
//DBG_871X("%s ips_deny_time\n", __func__);
goto exit;
}
@@ -211,7 +210,7 @@ void rtw_ps_processor(_adapter*padapter)
#ifdef CONFIG_P2P
struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
#endif //CONFIG_P2P
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
#ifdef SUPPORT_HW_RFOFF_DETECTED
rt_rf_power_state rfpwrstate;
@@ -224,7 +223,7 @@ void rtw_ps_processor(_adapter*padapter)
goto exit;
//DBG_871X("==> fw report state(0x%x)\n",rtw_read8(padapter,0x1ca));
- if(padapter->pwrctrlpriv.bHWPwrPindetect)
+ if(pwrpriv->bHWPwrPindetect)
{
#ifdef CONFIG_AUTOSUSPEND
if(padapter->registrypriv.usbss_enable)
@@ -277,11 +276,7 @@ void rtw_ps_processor(_adapter*padapter)
}
#endif //SUPPORT_HW_RFOFF_DETECTED
- if (pwrpriv->ips_mode_req == IPS_NONE
- #ifdef CONFIG_CONCURRENT_MODE
- || padapter->pbuddy_adapter->pwrctrlpriv.ips_mode_req == IPS_NONE
- #endif
- )
+ if (pwrpriv->ips_mode_req == IPS_NONE)
goto exit;
if (rtw_pwr_unassociated_idle(padapter) == _FALSE)
@@ -333,7 +328,7 @@ void rtw_ps_processor(_adapter*padapter)
}
}
exit:
- rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
+ rtw_set_pwr_state_check_timer(pwrpriv);
pwrpriv->ps_processing = _FALSE;
return;
}
@@ -359,7 +354,13 @@ void pwr_state_check_handler(void *FunctionContext)
void rtw_set_rpwm(PADAPTER padapter, u8 pslv)
{
u8 rpwm;
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
+#ifdef CONFIG_DETECT_CPWM_BY_POLLING
+ u8 cpwm_orig = 0;
+ u8 cpwm_now = 0;
+ u32 cpwm_polling_start_time = 0;
+ u8 pollingRes = _FAIL;
+#endif
_func_enter_;
@@ -382,8 +383,10 @@ _func_enter_;
{
if ( (pwrpriv->rpwm == pslv)
#ifdef CONFIG_LPS_LCLK
+#ifndef CONFIG_RTL8723A
|| ((pwrpriv->rpwm >= PS_STATE_S2)&&(pslv >= PS_STATE_S2))
#endif
+#endif
)
{
RT_TRACE(_module_rtl871x_pwrctrl_c_,_drv_err_,
@@ -427,10 +430,18 @@ _func_enter_;
pwrpriv->rpwm = pslv;
-#ifdef CONFIG_LPS_RPWM_TIMER
+#ifdef CONFIG_DETECT_CPWM_BY_POLLING
+ if (rpwm & PS_ACK)
+ {
+ //cpwm_orig = rtw_read8(padapter, SDIO_LOCAL_BASE | SDIO_REG_HCPWM1);
+ rtw_hal_get_hwreg(padapter, HW_VAR_GET_CPWM, (u8 *)(&cpwm_orig));
+ }
+#endif
+
+#if defined(CONFIG_LPS_RPWM_TIMER) && !defined(CONFIG_DETECT_CPWM_BY_POLLING)
if (rpwm & PS_ACK)
_set_timer(&pwrpriv->pwr_rpwm_timer, LPS_RPWM_WAIT_MS);
-#endif // CONFIG_LPS_RPWM_TIMER
+#endif // CONFIG_LPS_RPWM_TIMER && !CONFIG_DETECT_CPWM_BY_POLLING
rtw_hal_set_hwreg(padapter, HW_VAR_SET_RPWM, (u8 *)(&rpwm));
pwrpriv->tog += 0x80;
@@ -443,6 +454,42 @@ _func_enter_;
pwrpriv->cpwm = pslv;
}
+#ifdef CONFIG_DETECT_CPWM_BY_POLLING
+ if (rpwm & PS_ACK)
+ {
+ cpwm_polling_start_time = rtw_get_current_time();
+
+ //polling cpwm
+ do{
+ rtw_mdelay_os(1);
+
+ //cpwm_now = rtw_read8(padapter, SDIO_LOCAL_BASE | SDIO_REG_HCPWM1);
+ rtw_hal_get_hwreg(padapter, HW_VAR_GET_CPWM, (u8 *)(&cpwm_now));
+ if ((cpwm_orig ^ cpwm_now) & 0x80)
+ {
+#ifdef CONFIG_LPS_LCLK
+ #ifdef CONFIG_RTL8723A
+ pwrpriv->cpwm = PS_STATE(cpwm_now);
+ #else // !CONFIG_RTL8723A
+ pwrpriv->cpwm = PS_STATE_S4;
+ #endif // !CONFIG_RTL8723A
+ pwrpriv->cpwm_tog = cpwm_now & PS_TOGGLE;
+#endif
+ pollingRes = _SUCCESS;
+ break;
+ }
+ }while (rtw_get_passing_time_ms(cpwm_polling_start_time) < LPS_RPWM_WAIT_MS);
+
+ if (pollingRes == _FAIL)
+ {
+#ifdef CONFIG_LPS_RPWM_TIMER
+ _set_timer(&pwrpriv->pwr_rpwm_timer, 1);
+#endif
+ DBG_871X("%s polling cpwm timeout!!!!!!!!!!\n", __FUNCTION__);
+ }
+ }
+#endif
+
_func_exit_;
}
@@ -450,9 +497,18 @@ u8 PS_RDY_CHECK(_adapter * padapter);
u8 PS_RDY_CHECK(_adapter * padapter)
{
u32 curr_time, delta_time;
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+#ifdef CONFIG_WOWLAN
+ if(_TRUE == pwrpriv->bInSuspend && pwrpriv->wowlan_mode)
+ return _TRUE;
+ else if (_TRUE == pwrpriv->bInSuspend)
+ return _FALSE;
+#else
+ if(_TRUE == pwrpriv->bInSuspend )
+ return _FALSE;
+#endif
curr_time = rtw_get_current_time();
delta_time = curr_time -pwrpriv->DelayLPSLastTimeStamp;
@@ -464,24 +520,18 @@ u8 PS_RDY_CHECK(_adapter * padapter)
if ((check_fwstate(pmlmepriv, _FW_LINKED) == _FALSE) ||
(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) ||
+ (check_fwstate(pmlmepriv, WIFI_UNDER_WPS) == _TRUE) ||
(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE) ||
(check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE) ||
(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE) )
return _FALSE;
-#ifdef CONFIG_WOWLAN
- if(_TRUE == pwrpriv->bInSuspend && pwrpriv->wowlan_mode)
- return _TRUE;
- else
- return _FALSE;
-#else
- if(_TRUE == pwrpriv->bInSuspend )
- return _FALSE;
-#endif
+
if( (padapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X) && (padapter->securitypriv.binstallGrpkey == _FALSE) )
{
DBG_871X("Group handshake still in progress !!!\n");
return _FALSE;
}
+
#ifdef CONFIG_IOCTL_CFG80211
if (!rtw_cfg80211_pwr_mgmt(padapter))
return _FALSE;
@@ -492,7 +542,7 @@ u8 PS_RDY_CHECK(_adapter * padapter)
void rtw_set_ps_mode(PADAPTER padapter, u8 ps_mode, u8 smart_ps, u8 bcn_ant_mode)
{
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
#ifdef CONFIG_P2P
struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
#endif //CONFIG_P2P
@@ -562,6 +612,26 @@ _func_enter_;
pwrpriv->pwr_mode = ps_mode;
rtw_set_rpwm(padapter, PS_STATE_S4);
+#ifdef CONFIG_WOWLAN
+ if (pwrpriv->wowlan_mode == _TRUE)
+ {
+ u32 start_time, delay_ms;
+ u8 val8;
+ delay_ms = 20;
+ start_time = rtw_get_current_time();
+ do {
+ val8 = rtw_read8(padapter, 0x90);
+ if (!(val8 & BIT(0))) break;
+ if (rtw_get_passing_time_ms(start_time) > delay_ms)
+ {
+ DBG_871X("%s: Wait for FW 32K leave more than %u ms!!!\n", __FUNCTION__, delay_ms);
+ break;
+ }
+ rtw_usleep_os(100);
+ } while (1);
+ pwrpriv->cpwm = PS_STATE_S4;
+ }
+#endif
rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&ps_mode));
pwrpriv->bFwCurrentInPSMode = _FALSE;
}
@@ -610,8 +680,9 @@ _func_enter_;
#endif //CONFIG_P2P_PS
#ifdef CONFIG_LPS_LCLK
- if (pwrpriv->alives == 0)
- rtw_set_rpwm(padapter, PS_STATE_S0);
+ DBG_871X("%s: alives: %d\n", __FUNCTION__, pwrpriv->alives);
+ if (pwrpriv->alives == 0)
+ rtw_set_rpwm(padapter, PS_STATE_S0);
#else
rtw_set_rpwm(padapter, PS_STATE_S2);
#endif
@@ -670,7 +741,7 @@ s32 LPS_RF_ON_check(PADAPTER padapter, u32 delay_ms)
//
void LPS_Enter(PADAPTER padapter)
{
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
_adapter *buddy = padapter->pbuddy_adapter;
@@ -721,7 +792,7 @@ _func_enter_;
pwrpriv->bpower_saving = _TRUE;
DBG_871X("%s smart_ps:%d\n", __func__, pwrpriv->smart_ps);
//For Tenda W311R IOT issue
- rtw_set_ps_mode(padapter, pwrpriv->power_mgnt, pwrpriv->smart_ps, 0);
+ rtw_set_ps_mode(padapter, pwrpriv->power_mgnt, pwrpriv->smart_ps, 0x40);
}
}
else
@@ -741,7 +812,7 @@ void LPS_Leave(PADAPTER padapter)
{
#define LPS_LEAVE_TIMEOUT_MS 100
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
u32 start_time;
u8 bAwake = _FALSE;
@@ -758,7 +829,7 @@ _func_enter_;
{
if(pwrpriv->pwr_mode != PS_MODE_ACTIVE)
{
- rtw_set_ps_mode(padapter, PS_MODE_ACTIVE, 0, 0);
+ rtw_set_ps_mode(padapter, PS_MODE_ACTIVE, 0, 0x40);
if(pwrpriv->pwr_mode == PS_MODE_ACTIVE)
LPS_RF_ON_check(padapter, LPS_LEAVE_TIMEOUT_MS);
@@ -805,7 +876,7 @@ _func_enter_;
}
else
{
- if(Adapter->pwrctrlpriv.rf_pwrstate== rf_off)
+ if(adapter_to_pwrctl(Adapter)->rf_pwrstate== rf_off)
{
#ifdef CONFIG_AUTOSUSPEND
if(Adapter->registrypriv.usbss_enable)
@@ -844,7 +915,7 @@ void LPS_Leave_check(
_func_enter_;
- pwrpriv = &padapter->pwrctrlpriv;
+ pwrpriv = adapter_to_pwrctl(padapter);
bReady = _FALSE;
start_time = rtw_get_current_time();
@@ -897,7 +968,7 @@ void cpwm_int_hdl(
_func_enter_;
- pwrpriv = &padapter->pwrctrlpriv;
+ pwrpriv = adapter_to_pwrctl(padapter);
#if 0
if (pwrpriv->cpwm_tog == (preportpwrstate->state & PS_TOGGLE)) {
RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_err_,
@@ -942,7 +1013,8 @@ _func_exit_;
static void cpwm_event_callback(struct work_struct *work)
{
struct pwrctrl_priv *pwrpriv = container_of(work, struct pwrctrl_priv, cpwm_event);
- _adapter *adapter = container_of(pwrpriv, _adapter, pwrctrlpriv);
+ struct dvobj_priv *dvobj = pwrctl_to_dvobj(pwrpriv);
+ _adapter *adapter = dvobj->if1;
struct reportpwrstate_parm report;
//DBG_871X("%s\n",__FUNCTION__);
@@ -955,11 +1027,13 @@ static void cpwm_event_callback(struct work_struct *work)
static void rpwmtimeout_workitem_callback(struct work_struct *work)
{
PADAPTER padapter;
+ struct dvobj_priv *dvobj;
struct pwrctrl_priv *pwrpriv;
pwrpriv = container_of(work, struct pwrctrl_priv, rpwmtimeoutwi);
- padapter = container_of(pwrpriv, _adapter, pwrctrlpriv);
+ dvobj = pwrctl_to_dvobj(pwrpriv);
+ padapter = dvobj->if1;
// DBG_871X("+%s: rpwm=0x%02X cpwm=0x%02X\n", __func__, pwrpriv->rpwm, pwrpriv->cpwm);
_enter_pwrlock(&pwrpriv->lock);
@@ -1010,7 +1084,7 @@ static void pwr_rpwm_timeout_handler(void *FunctionContext)
padapter = (PADAPTER)FunctionContext;
- pwrpriv = &padapter->pwrctrlpriv;
+ pwrpriv = adapter_to_pwrctl(padapter);
// DBG_871X("+%s: rpwm=0x%02X cpwm=0x%02X\n", __func__, pwrpriv->rpwm, pwrpriv->cpwm);
if ((pwrpriv->rpwm == pwrpriv->cpwm) || (pwrpriv->cpwm >= PS_STATE_S2))
@@ -1055,9 +1129,9 @@ s32 rtw_register_tx_alive(PADAPTER padapter)
_func_enter_;
res = _SUCCESS;
- pwrctrl = &padapter->pwrctrlpriv;
+ pwrctrl = adapter_to_pwrctl(padapter);
#ifdef CONFIG_BT_COEXIST
- if (_TRUE == padapter->pwrctrlpriv.btcoex_rfon)
+ if (_TRUE == adapter_to_pwrctl(padapter)->btcoex_rfon)
pslv = PS_STATE_S3;
else
#endif
@@ -1086,6 +1160,14 @@ _func_enter_;
_exit_pwrlock(&pwrctrl->lock);
+#ifdef CONFIG_DETECT_CPWM_BY_POLLING
+ if (_FAIL == res)
+ {
+ if (pwrctrl->cpwm >= PS_STATE_S2)
+ res = _SUCCESS;
+ }
+#endif // CONFIG_DETECT_CPWM_BY_POLLING
+
_func_exit_;
return res;
@@ -1113,9 +1195,9 @@ s32 rtw_register_cmd_alive(PADAPTER padapter)
_func_enter_;
res = _SUCCESS;
- pwrctrl = &padapter->pwrctrlpriv;
+ pwrctrl = adapter_to_pwrctl(padapter);
#ifdef CONFIG_BT_COEXIST
- if (_TRUE == padapter->pwrctrlpriv.btcoex_rfon)
+ if (_TRUE == adapter_to_pwrctl(padapter)->btcoex_rfon)
pslv = PS_STATE_S3;
else
#endif
@@ -1144,6 +1226,14 @@ _func_enter_;
_exit_pwrlock(&pwrctrl->lock);
+#ifdef CONFIG_DETECT_CPWM_BY_POLLING
+ if (_FAIL == res)
+ {
+ if (pwrctrl->cpwm >= PS_STATE_S2)
+ res = _SUCCESS;
+ }
+#endif // CONFIG_DETECT_CPWM_BY_POLLING
+
_func_exit_;
return res;
@@ -1164,7 +1254,7 @@ s32 rtw_register_rx_alive(PADAPTER padapter)
_func_enter_;
- pwrctrl = &padapter->pwrctrlpriv;
+ pwrctrl = adapter_to_pwrctl(padapter);
_enter_pwrlock(&pwrctrl->lock);
@@ -1195,7 +1285,7 @@ s32 rtw_register_evt_alive(PADAPTER padapter)
_func_enter_;
- pwrctrl = &padapter->pwrctrlpriv;
+ pwrctrl = adapter_to_pwrctl(padapter);
_enter_pwrlock(&pwrctrl->lock);
@@ -1224,7 +1314,7 @@ void rtw_unregister_tx_alive(PADAPTER padapter)
_func_enter_;
- pwrctrl = &padapter->pwrctrlpriv;
+ pwrctrl = adapter_to_pwrctl(padapter);
_enter_pwrlock(&pwrctrl->lock);
@@ -1262,7 +1352,7 @@ void rtw_unregister_cmd_alive(PADAPTER padapter)
_func_enter_;
- pwrctrl = &padapter->pwrctrlpriv;
+ pwrctrl = adapter_to_pwrctl(padapter);
_enter_pwrlock(&pwrctrl->lock);
@@ -1296,7 +1386,7 @@ void rtw_unregister_rx_alive(PADAPTER padapter)
_func_enter_;
- pwrctrl = &padapter->pwrctrlpriv;
+ pwrctrl = adapter_to_pwrctl(padapter);
_enter_pwrlock(&pwrctrl->lock);
@@ -1317,7 +1407,7 @@ void rtw_unregister_evt_alive(PADAPTER padapter)
_func_enter_;
- pwrctrl = &padapter->pwrctrlpriv;
+ pwrctrl = adapter_to_pwrctl(padapter);
unregister_task_alive(pwrctrl, EVT_ALIVE);
@@ -1337,7 +1427,12 @@ static void resume_workitem_callback(struct work_struct *work);
void rtw_init_pwrctrl_priv(PADAPTER padapter)
{
- struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(padapter);
+
+#if defined(CONFIG_CONCURRENT_MODE)
+ if (padapter->adapter_type != PRIMARY_ADAPTER)
+ return;
+#endif
_func_enter_;
@@ -1421,7 +1516,12 @@ _func_exit_;
void rtw_free_pwrctrl_priv(PADAPTER adapter)
{
- struct pwrctrl_priv *pwrctrlpriv = &adapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(adapter);
+
+#if defined(CONFIG_CONCURRENT_MODE)
+ if (adapter->adapter_type != PRIMARY_ADAPTER)
+ return;
+#endif
_func_enter_;
@@ -1452,7 +1552,8 @@ extern int rtw_resume_process(_adapter *padapter);
static void resume_workitem_callback(struct work_struct *work)
{
struct pwrctrl_priv *pwrpriv = container_of(work, struct pwrctrl_priv, resume_work);
- _adapter *adapter = container_of(pwrpriv, _adapter, pwrctrlpriv);
+ struct dvobj_priv *dvobj = pwrctl_to_dvobj(pwrpriv);
+ _adapter *adapter = dvobj->if1;
DBG_871X("%s\n",__FUNCTION__);
@@ -1507,7 +1608,8 @@ static void rtw_early_suspend(struct early_suspend *h)
static void rtw_late_resume(struct early_suspend *h)
{
struct pwrctrl_priv *pwrpriv = container_of(h, struct pwrctrl_priv, early_suspend);
- _adapter *adapter = container_of(pwrpriv, _adapter, pwrctrlpriv);
+ struct dvobj_priv *dvobj = pwrctl_to_dvobj(pwrpriv);
+ _adapter *adapter = dvobj->if1;
DBG_871X("%s\n",__FUNCTION__);
if(pwrpriv->do_late_resume) {
@@ -1527,8 +1629,6 @@ void rtw_register_early_suspend(struct pwrctrl_priv *pwrpriv)
pwrpriv->early_suspend.suspend = rtw_early_suspend;
pwrpriv->early_suspend.resume = rtw_late_resume;
register_early_suspend(&pwrpriv->early_suspend);
-
-
}
void rtw_unregister_early_suspend(struct pwrctrl_priv *pwrpriv)
@@ -1560,7 +1660,8 @@ static void rtw_early_suspend(android_early_suspend_t *h)
static void rtw_late_resume(android_early_suspend_t *h)
{
struct pwrctrl_priv *pwrpriv = container_of(h, struct pwrctrl_priv, early_suspend);
- _adapter *adapter = container_of(pwrpriv, _adapter, pwrctrlpriv);
+ struct dvobj_priv *dvobj = pwrctl_to_dvobj(pwrpriv);
+ _adapter *adapter = dvobj->if1;
DBG_871X("%s\n",__FUNCTION__);
if(pwrpriv->do_late_resume) {
@@ -1607,7 +1708,7 @@ u8 rtw_interface_ps_func(_adapter *padapter,HAL_INTF_PS_FUNC efunc_id,u8* val)
inline void rtw_set_ips_deny(_adapter *padapter, u32 ms)
{
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
pwrpriv->ips_deny_time = rtw_get_current_time() + rtw_ms_to_systime(ms);
}
@@ -1620,7 +1721,7 @@ inline void rtw_set_ips_deny(_adapter *padapter, u32 ms)
int _rtw_pwr_wakeup(_adapter *padapter, u32 ips_deffer_ms, const char *caller)
{
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
int ret = _SUCCESS;
u32 start = rtw_get_current_time();
@@ -1631,7 +1732,6 @@ int _rtw_pwr_wakeup(_adapter *padapter, u32 ips_deffer_ms, const char *caller)
if ((padapter->isprimary == _FALSE) && padapter->pbuddy_adapter){
padapter = padapter->pbuddy_adapter;
- pwrpriv = &padapter->pwrctrlpriv;
pmlmepriv = &padapter->mlmepriv;
}
#endif
@@ -1774,7 +1874,7 @@ exit:
int rtw_pm_set_lps(_adapter *padapter, u8 mode)
{
int ret = 0;
- struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(padapter);
if ( mode < PS_MODE_NUM )
{
@@ -1802,7 +1902,7 @@ int rtw_pm_set_lps(_adapter *padapter, u8 mode)
int rtw_pm_set_ips(_adapter *padapter, u8 mode)
{
- struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(padapter);
if( mode == IPS_NORMAL || mode == IPS_LEVEL_2 ) {
rtw_ips_mode_req(pwrctrlpriv, mode);
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_recv.c b/drivers/net/wireless/rtl8723as/core/rtw_recv.c
index e7f8708c2028..05a514ea6926 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_recv.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_recv.c
@@ -31,6 +31,10 @@
#include <usb_ops.h>
#endif
+#ifdef CONFIG_BT_COEXIST
+#include <rtl8723a_hal.h>
+#endif
+
#if defined (PLATFORM_LINUX) && defined (PLATFORM_WINDOWS)
#error "Shall be Linux or Windows, but not both!\n"
@@ -279,7 +283,7 @@ _func_enter_;
#ifdef CONFIG_BSD_RX_USE_MBUF
m_freem(precvframe->u.hdr.pkt);
#else // CONFIG_BSD_RX_USE_MBUF
- dev_kfree_skb_any(precvframe->u.hdr.pkt);//free skb by driver
+ rtw_skb_free(precvframe->u.hdr.pkt);//free skb by driver
#endif // CONFIG_BSD_RX_USE_MBUF
precvframe->u.hdr.pkt = NULL;
}
@@ -737,6 +741,9 @@ _func_enter_;
return_packet = NULL;
}
+ else{
+ prxattrib->bdecrypted = _TRUE;
+ }
//recvframe_chkmic(adapter, precv_frame); //move to recvframme_defrag function
_func_exit_;
@@ -761,7 +768,6 @@ union recv_frame * portctrl(_adapter *adapter,union recv_frame * precv_frame)
_func_enter_;
pstapriv = &adapter->stapriv;
- psta = rtw_get_stainfo(pstapriv, psta_addr);
auth_alg = adapter->securitypriv.dot11AuthAlgrthm;
@@ -772,6 +778,8 @@ _func_enter_;
prtnframe = NULL;
+ psta = rtw_get_stainfo(pstapriv, psta_addr);
+
RT_TRACE(_module_rtl871x_recv_c_,_drv_info_,("########portctrl:adapter->securitypriv.dot11AuthAlgrthm=%d\n",adapter->securitypriv.dot11AuthAlgrthm));
if(auth_alg==2)
@@ -1739,7 +1747,7 @@ union recv_frame* recvframe_chk_defrag(PADAPTER padapter, union recv_frame *prec
sint validate_recv_mgnt_frame(PADAPTER padapter, union recv_frame *precv_frame);
sint validate_recv_mgnt_frame(PADAPTER padapter, union recv_frame *precv_frame)
{
- //struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
+ //struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("+validate_recv_mgnt_frame\n"));
@@ -2012,6 +2020,127 @@ _func_exit_;
return ret;
}
+#ifdef CONFIG_IEEE80211W
+static sint validate_80211w_mgmt(_adapter *adapter, union recv_frame *precv_frame)
+{
+ struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
+ struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
+ u8 *ptr = precv_frame->u.hdr.rx_data;
+ u8 type;
+ u8 subtype;
+
+ type = GetFrameType(ptr);
+ subtype = GetFrameSubType(ptr); //bit(7)~bit(2)
+
+ //only support station mode
+ if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED)
+ && adapter->securitypriv.binstallBIPkey == _TRUE)
+ {
+ //unicast management frame decrypt
+ if(pattrib->privacy && !(IS_MCAST(GetAddr1Ptr(ptr))) &&
+ (subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC || subtype == WIFI_ACTION))
+ {
+ u8 *ppp, *mgmt_DATA;
+ u32 data_len=0;
+ ppp = GetAddr2Ptr(ptr);
+
+ pattrib->bdecrypted = 0;
+ pattrib->encrypt = _AES_;
+ pattrib->hdrlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+ //set iv and icv length
+ SET_ICE_IV_LEN(pattrib->iv_len, pattrib->icv_len, pattrib->encrypt);
+ _rtw_memcpy(pattrib->ra, GetAddr1Ptr(ptr), ETH_ALEN);
+ _rtw_memcpy(pattrib->ta, GetAddr2Ptr(ptr), ETH_ALEN);
+ //actual management data frame body
+ data_len = pattrib->pkt_len - pattrib->hdrlen - pattrib->iv_len - pattrib->icv_len;
+ mgmt_DATA = rtw_zmalloc(data_len);
+ if(mgmt_DATA == NULL)
+ {
+ DBG_871X("%s mgmt allocate fail !!!!!!!!!\n", __FUNCTION__);
+ goto validate_80211w_fail;
+ }
+ /*//dump the packet content before decrypt
+ {
+ int pp;
+ printk("pattrib->pktlen = %d =>", pattrib->pkt_len);
+ for(pp=0;pp< pattrib->pkt_len; pp++)
+ printk(" %02x ", ptr[pp]);
+ printk("\n");
+ }*/
+
+ precv_frame = decryptor(adapter, precv_frame);
+ //save actual management data frame body
+ _rtw_memcpy(mgmt_DATA, ptr+pattrib->hdrlen+pattrib->iv_len, data_len);
+ //overwrite the iv field
+ _rtw_memcpy(ptr+pattrib->hdrlen, mgmt_DATA, data_len);
+ //remove the iv and icv length
+ pattrib->pkt_len = pattrib->pkt_len - pattrib->iv_len - pattrib->icv_len;
+ rtw_mfree(mgmt_DATA, data_len);
+ /*//print packet content after decryption
+ {
+ int pp;
+ printk("after decryption pattrib->pktlen = %d @@=>", pattrib->pkt_len);
+ for(pp=0;pp< pattrib->pkt_len; pp++)
+ printk(" %02x ", ptr[pp]);
+ printk("\n");
+ }*/
+ if(!precv_frame)
+ {
+ DBG_871X("%s mgmt descrypt fail !!!!!!!!!\n", __FUNCTION__);
+ goto validate_80211w_fail;
+ }
+ }
+ else if(IS_MCAST(GetAddr1Ptr(ptr)) &&
+ (subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC))
+ {
+ sint BIP_ret = _SUCCESS;
+ //verify BIP MME IE of broadcast/multicast de-auth/disassoc packet
+ BIP_ret = rtw_BIP_verify(adapter, (u8 * )precv_frame);
+ if(BIP_ret == _FAIL)
+ {
+ //DBG_871X("802.11w BIP verify fail\n");
+ goto validate_80211w_fail;
+ }
+ else if(BIP_ret == RTW_RX_HANDLED)
+ {
+ //DBG_871X("802.11w recv none protected packet\n");
+ //issue sa query request
+ issue_action_SA_Query(adapter, NULL, 0, 0);
+ goto validate_80211w_fail;
+ }
+ }//802.11w protect
+ else
+ {
+ if(subtype == WIFI_ACTION)
+ {
+ //according 802.11-2012 standard, these five types are not robust types
+ if( ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_PUBLIC &&
+ ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_HT &&
+ ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_UNPROTECTED_WNM &&
+ ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_SELF_PROTECTED &&
+ ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_P2P)
+ {
+ DBG_871X("action frame category=%d should robust\n", ptr[WLAN_HDR_A3_LEN]);
+ goto validate_80211w_fail;
+ }
+ }
+ else if(subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC)
+ {
+ DBG_871X("802.11w recv none protected packet\n");
+ //issue sa query request
+ issue_action_SA_Query(adapter, NULL, 0, 0);
+ goto validate_80211w_fail;
+ }
+ }
+ }
+ return _SUCCESS;
+
+validate_80211w_fail:
+ return _FAIL;
+
+}
+#endif //CONFIG_IEEE80211W
+
sint validate_recv_frame(_adapter *adapter, union recv_frame *precv_frame);
sint validate_recv_frame(_adapter *adapter, union recv_frame *precv_frame)
{
@@ -2022,7 +2151,6 @@ sint validate_recv_frame(_adapter *adapter, union recv_frame *precv_frame)
u8 type;
u8 subtype;
sint retval = _SUCCESS;
-
struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
u8 *ptr = precv_frame->u.hdr.rx_data;
@@ -2138,6 +2266,14 @@ _func_enter_;
switch (type)
{
case WIFI_MGT_TYPE: //mgnt
+#ifdef CONFIG_IEEE80211W
+ if(validate_80211w_mgmt(adapter, precv_frame) == _FAIL)
+ {
+ retval = _FAIL;
+ break;
+ }
+#endif //CONFIG_IEEE80211W
+
retval = validate_recv_mgnt_frame(adapter, precv_frame);
if (retval == _FAIL)
{
@@ -2454,12 +2590,8 @@ static void recvframe_expand_pkt(
//3 1. alloc new skb
// prepare extra space for 4 bytes alignment
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
- ppkt = dev_alloc_skb(alloc_sz);
- if (ppkt) ppkt->dev = padapter->pnetdev;
-#else
- ppkt = netdev_alloc_skb(padapter->pnetdev, alloc_sz);
-#endif
+ ppkt = rtw_skb_alloc(alloc_sz);
+
if (!ppkt) return; // no way to expand
//3 2. Prepare new skb to replace & release old skb
@@ -2471,7 +2603,7 @@ static void recvframe_expand_pkt(
// copy data to new pkt
_rtw_memcpy(skb_put(ppkt, pfhdr->len), pfhdr->rx_data, pfhdr->len);
- dev_kfree_skb_any(pfhdr->pkt);
+ rtw_skb_free(pfhdr->pkt);
// attach new pkt to recvframe
pfhdr->pkt = ppkt;
@@ -2770,7 +2902,7 @@ int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe)
/* Allocate new skb for releasing to upper layer */
#ifdef CONFIG_SKB_COPY
- sub_skb = dev_alloc_skb(nSubframe_Length + 12);
+ sub_skb = rtw_skb_alloc(nSubframe_Length + 12);
if(sub_skb)
{
skb_reserve(sub_skb, 12);
@@ -2780,7 +2912,7 @@ int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe)
else
#endif // CONFIG_SKB_COPY
{
- sub_skb = skb_clone(prframe->u.hdr.pkt, GFP_ATOMIC);
+ sub_skb = rtw_skb_clone(prframe->u.hdr.pkt);
if(sub_skb)
{
sub_skb->data = pdata;
@@ -2789,7 +2921,7 @@ int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe)
}
else
{
- DBG_871X("skb_clone() Fail!!! , nr_subframes = %d\n",nr_subframes);
+ DBG_871X("rtw_skb_clone() Fail!!! , nr_subframes = %d\n",nr_subframes);
break;
}
}
@@ -2890,7 +3022,7 @@ int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe)
#if 1
// bypass this frame to upper layer!!
#else
- dev_kfree_skb_any(sub_skb);
+ rtw_skb_free(sub_skb);
continue;
#endif
}
@@ -2910,7 +3042,7 @@ int amsdu_to_msdu(_adapter *padapter, union recv_frame *prframe)
sub_skb->ip_summed = CHECKSUM_NONE;
#endif //CONFIG_TCP_CSUM_OFFLOAD_RX
- netif_rx(sub_skb);
+ rtw_netif_rx(padapter->pnetdev, sub_skb);
}
#else //PLATFORM_FREEBSD
@@ -3151,11 +3283,8 @@ exit:
_rtw_init_listhead(&pnrframe_new->u.hdr.list);
- #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
- pskb_copy = dev_alloc_skb(copy_len+64);
- #else
- pskb_copy = netdev_alloc_skb(padapter->pnetdev, copy_len + 64);
- #endif
+ pskb_copy = rtw_skb_alloc(copy_len+64);
+
if(pskb_copy==NULL)
{
DBG_871X("amsdu_to_msdu:can not all(ocate memory for skb copy\n");
@@ -3230,7 +3359,7 @@ exit:
#ifdef PLATFORM_LINUX
if(pskb)
{
- pnrframe_new->u.hdr.pkt = skb_clone(pskb, GFP_ATOMIC);
+ pnrframe_new->u.hdr.pkt = rtw_skb_clone(pskb);
}
#endif //PLATFORM_LINUX
@@ -3597,8 +3726,9 @@ int recv_indicatepkt_reorder(_adapter *padapter, union recv_frame *prframe)
//s1.
wlanhdr_to_ethhdr(prframe);
- if ((pattrib->qos!=1) /*|| pattrib->priority!=0 || IS_MCAST(pattrib->ra)*/
- || (pattrib->eth_type==0x0806) || (pattrib->ack_policy!=0))
+ //if ((pattrib->qos!=1) /*|| pattrib->priority!=0 || IS_MCAST(pattrib->ra)*/
+ // || (pattrib->eth_type==0x0806) || (pattrib->ack_policy!=0))
+ if (pattrib->qos!=1)
{
if ((padapter->bDriverStopped == _FALSE) &&
(padapter->bSurpriseRemoved == _FALSE))
@@ -3863,7 +3993,8 @@ int recv_func_prehandle(_adapter *padapter, union recv_frame *rframe)
struct rx_pkt_attrib *pattrib = &rframe->u.hdr.attrib;
struct recv_priv *precvpriv = &padapter->recvpriv;
_queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
-
+
+
#ifdef CONFIG_MP_INCLUDED
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
#endif //CONFIG_MP_INCLUDED
@@ -3871,20 +4002,20 @@ int recv_func_prehandle(_adapter *padapter, union recv_frame *rframe)
#ifdef CONFIG_MP_INCLUDED
if (padapter->registrypriv.mp_mode == 1)
{
- if ((check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE))//&&(padapter->mppriv.check_mp_pkt == 0))
- {
if (pattrib->crc_err == 1)
+ {
padapter->mppriv.rx_crcerrpktcount++;
+ }
else
+ {
padapter->mppriv.rx_pktcount++;
-
+ }
if (check_fwstate(pmlmepriv, WIFI_MP_LPBK_STATE) == _FALSE) {
RT_TRACE(_module_rtl871x_recv_c_, _drv_alert_, ("MP - Not in loopback mode , drop pkt \n"));
ret = _FAIL;
rtw_free_recvframe(rframe, pfree_recv_queue);//free this recv_frame
goto exit;
}
- }
}
#endif
@@ -4189,41 +4320,65 @@ void rtw_signal_stat_timer_hdl(RTW_TIMER_HDL_ARGS){
recvpriv->signal_qual_data.update_req = 1;
}
- //update value of signal_strength, rssi, signal_qual
- if(check_fwstate(&adapter->mlmepriv, _FW_UNDER_SURVEY) == _FALSE) {
- tmp_s = (avg_signal_strength+(_alpha-1)*recvpriv->signal_strength);
- if(tmp_s %_alpha)
- tmp_s = tmp_s/_alpha + 1;
- else
- tmp_s = tmp_s/_alpha;
- if(tmp_s>100)
- tmp_s = 100;
+ if (num_signal_strength == 0) {
+ if (rtw_get_on_cur_ch_time(adapter) == 0
+ || rtw_get_passing_time_ms(rtw_get_on_cur_ch_time(adapter)) < 2 * adapter->mlmeextpriv.mlmext_info.bcn_interval
+#ifdef CONFIG_BT_COEXIST
+ || ((BTDM_IsBtDisabled(adapter) == _FALSE) && (BT_IsBtInquiryPage(adapter) == _TRUE))
+#endif
+ ) {
+ goto set_timer;
+ }
+ }
- tmp_q = (avg_signal_qual+(_alpha-1)*recvpriv->signal_qual);
- if(tmp_q %_alpha)
- tmp_q = tmp_q/_alpha + 1;
- else
- tmp_q = tmp_q/_alpha;
- if(tmp_q>100)
- tmp_q = 100;
-
- recvpriv->signal_strength = tmp_s;
- recvpriv->rssi = (s8)translate_percentage_to_dbm(tmp_s);
- recvpriv->signal_qual = tmp_q;
-
- #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) && 1
- DBG_871X("%s signal_strength:%3u, rssi:%3d, signal_qual:%3u"
- ", num_signal_strength:%u, num_signal_qual:%u"
- "\n"
- , __FUNCTION__
- , recvpriv->signal_strength
- , recvpriv->rssi
- , recvpriv->signal_qual
- , num_signal_strength, num_signal_qual
- );
- #endif
+ if(check_fwstate(&adapter->mlmepriv, _FW_UNDER_SURVEY) == _TRUE
+ || check_fwstate(&adapter->mlmepriv, _FW_LINKED) == _FALSE
+ ) {
+ goto set_timer;
}
+
+ #ifdef CONFIG_CONCURRENT_MODE
+ if (check_buddy_fwstate(adapter, _FW_UNDER_SURVEY) == _TRUE)
+ goto set_timer;
+ #endif
+
+ //update value of signal_strength, rssi, signal_qual
+ tmp_s = (avg_signal_strength+(_alpha-1)*recvpriv->signal_strength);
+ if(tmp_s %_alpha)
+ tmp_s = tmp_s/_alpha + 1;
+ else
+ tmp_s = tmp_s/_alpha;
+ if(tmp_s>100)
+ tmp_s = 100;
+
+ tmp_q = (avg_signal_qual+(_alpha-1)*recvpriv->signal_qual);
+ if(tmp_q %_alpha)
+ tmp_q = tmp_q/_alpha + 1;
+ else
+ tmp_q = tmp_q/_alpha;
+ if(tmp_q>100)
+ tmp_q = 100;
+
+ recvpriv->signal_strength = tmp_s;
+ recvpriv->rssi = (s8)translate_percentage_to_dbm(tmp_s);
+ recvpriv->signal_qual = tmp_q;
+
+ #if defined(DBG_RX_SIGNAL_DISPLAY_PROCESSING) && 1
+ DBG_871X(FUNC_ADPT_FMT" signal_strength:%3u, rssi:%3d, signal_qual:%3u"
+ ", num_signal_strength:%u, num_signal_qual:%u"
+ ", on_cur_ch_ms:%d"
+ "\n"
+ , FUNC_ADPT_ARG(adapter)
+ , recvpriv->signal_strength
+ , recvpriv->rssi
+ , recvpriv->signal_qual
+ , num_signal_strength, num_signal_qual
+ , rtw_get_on_cur_ch_time(adapter) ? rtw_get_passing_time_ms(rtw_get_on_cur_ch_time(adapter)) : 0
+ );
+ #endif
}
+
+set_timer:
rtw_set_signal_stat_timer(recvpriv);
}
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_security.c b/drivers/net/wireless/rtl8723as/core/rtw_security.c
index 4a3b20a9caed..68dfafb18de5 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_security.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_security.c
@@ -212,7 +212,7 @@ _func_enter_;
length=pattrib->last_txcmdsz-pattrib->hdrlen-pattrib->iv_len- pattrib->icv_len;
- *((unsigned long *)crc)=cpu_to_le32(getcrc32(payload,length));
+ *((u32 *)crc)=cpu_to_le32(getcrc32(payload,length));
arcfour_init(&mycontext, wepkey,3+keylength);
arcfour_encrypt(&mycontext, payload, payload, length);
@@ -222,7 +222,7 @@ _func_enter_;
else
{
length=pxmitpriv->frag_len-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len ;
- *((unsigned long *)crc)=cpu_to_le32(getcrc32(payload,length));
+ *((u32 *)crc)=cpu_to_le32(getcrc32(payload,length));
arcfour_init(&mycontext, wepkey,3+keylength);
arcfour_encrypt(&mycontext, payload, payload, length);
arcfour_encrypt(&mycontext, payload+length, crc, 4);
@@ -275,7 +275,7 @@ _func_enter_;
arcfour_encrypt(&mycontext, payload, payload, length);
//calculate icv and compare the icv
- *((unsigned long *)crc)=le32_to_cpu(getcrc32(payload,length-4));
+ *((u32 *)crc)=le32_to_cpu(getcrc32(payload,length-4));
if(crc[3]!=payload[length-1] || crc[2]!=payload[length-2] || crc[1]!=payload[length-3] || crc[0]!=payload[length-4])
{
@@ -801,12 +801,42 @@ _func_enter_;
if(IS_MCAST(prxattrib->ra))
{
+ static u32 start = 0;
+ static u32 no_gkey_bc_cnt = 0;
+ static u32 no_gkey_mc_cnt = 0;
+
if(psecuritypriv->binstallGrpkey==_FALSE)
{
- res=_FAIL;
- DBG_8192C("%s:rx bc/mc packets,but didn't install group key!!!!!!!!!!\n",__FUNCTION__);
+ res=_FAIL;
+
+ if (start == 0)
+ start = rtw_get_current_time();
+
+ if (is_broadcast_mac_addr(prxattrib->ra))
+ no_gkey_bc_cnt++;
+ else
+ no_gkey_mc_cnt++;
+
+ if (rtw_get_passing_time_ms(start) > 1000) {
+ if (no_gkey_bc_cnt || no_gkey_mc_cnt) {
+ DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" no_gkey_bc_cnt:%u, no_gkey_mc_cnt:%u\n",
+ FUNC_ADPT_ARG(padapter), no_gkey_bc_cnt, no_gkey_mc_cnt);
+ }
+ start = rtw_get_current_time();
+ no_gkey_bc_cnt = 0;
+ no_gkey_mc_cnt = 0;
+ }
goto exit;
}
+
+ if (no_gkey_bc_cnt || no_gkey_mc_cnt) {
+ DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" gkey installed. no_gkey_bc_cnt:%u, no_gkey_mc_cnt:%u\n",
+ FUNC_ADPT_ARG(padapter), no_gkey_bc_cnt, no_gkey_mc_cnt);
+ }
+ start = 0;
+ no_gkey_bc_cnt = 0;
+ no_gkey_mc_cnt = 0;
+
//DBG_871X("rx bc/mc packets, to perform sw rtw_tkip_decrypt\n");
//prwskey = psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey;
prwskey = psecuritypriv->dot118021XGrpKey[prxattrib->key_index].skey;
@@ -916,11 +946,13 @@ static void construct_mic_iv(
sint a4_exists,
u8 *mpdu,
uint payload_length,
- u8 * pn_vector);
+ u8 * pn_vector,
+ uint frtype);// add for CONFIG_IEEE80211W, none 11w also can use
static void construct_mic_header1(
u8 *mic_header1,
sint header_length,
- u8 *mpdu);
+ u8 *mpdu,
+ uint frtype);// add for CONFIG_IEEE80211W, none 11w also can use
static void construct_mic_header2(
u8 *mic_header2,
u8 *mpdu,
@@ -932,7 +964,8 @@ static void construct_ctr_preload(
sint qc_exists,
u8 *mpdu,
u8 *pn_vector,
- sint c);
+ sint c,
+ uint frtype);// add for CONFIG_IEEE80211W, none 11w also can use
static void xor_128(u8 *a, u8 *b, u8 *out);
static void xor_32(u8 *a, u8 *b, u8 *out);
static u8 sbox(u8 a);
@@ -1152,6 +1185,8 @@ _func_exit_;
/************************************************/
/* construct_mic_iv() */
/* Builds the MIC IV from header fields and PN */
+/* Baron think the function is construct CCM */
+/* nonce */
/************************************************/
static void construct_mic_iv(
u8 *mic_iv,
@@ -1159,7 +1194,8 @@ static void construct_mic_iv(
sint a4_exists,
u8 *mpdu,
uint payload_length,
- u8 *pn_vector
+ u8 *pn_vector,
+ uint frtype// add for CONFIG_IEEE80211W, none 11w also can use
)
{
sint i;
@@ -1168,6 +1204,11 @@ _func_enter_;
if (qc_exists && a4_exists) mic_iv[1] = mpdu[30] & 0x0f; /* QoS_TC */
if (qc_exists && !a4_exists) mic_iv[1] = mpdu[24] & 0x0f; /* mute bits 7-4 */
if (!qc_exists) mic_iv[1] = 0x00;
+#ifdef CONFIG_IEEE80211W
+ //802.11w management frame should set management bit(4)
+ if(frtype == WIFI_MGT_TYPE)
+ mic_iv[1] |= BIT(4);
+#endif //CONFIG_IEEE80211W
for (i = 2; i < 8; i++)
mic_iv[i] = mpdu[i + 8]; /* mic_iv[2:7] = A2[0:5] = mpdu[10:15] */
#ifdef CONSISTENT_PN_ORDER
@@ -1187,17 +1228,26 @@ _func_exit_;
/* construct_mic_header1() */
/* Builds the first MIC header block from */
/* header fields. */
+/* Build AAD SC,A1,A2 */
/************************************************/
static void construct_mic_header1(
u8 *mic_header1,
sint header_length,
- u8 *mpdu
+ u8 *mpdu,
+ uint frtype// add for CONFIG_IEEE80211W, none 11w also can use
)
{
_func_enter_;
mic_header1[0] = (u8)((header_length - 2) / 256);
mic_header1[1] = (u8)((header_length - 2) % 256);
- mic_header1[2] = mpdu[0] & 0xcf; /* Mute CF poll & CF ack bits */
+#ifdef CONFIG_IEEE80211W
+ //802.11w management frame don't AND subtype bits 4,5,6 of frame control field
+ if(frtype == WIFI_MGT_TYPE)
+ mic_header1[2] = mpdu[0]; /* Mute CF poll & CF ack bits */
+ else
+#endif //CONFIG_IEEE80211W
+ mic_header1[2] = mpdu[0] & 0xcf; /* Mute CF poll & CF ack bits */
+
mic_header1[3] = mpdu[1] & 0xc7; /* Mute retry, more data and pwr mgt bits */
mic_header1[4] = mpdu[4]; /* A1 */
mic_header1[5] = mpdu[5];
@@ -1271,6 +1321,8 @@ _func_exit_;
/* construct_mic_header2() */
/* Builds the last MIC header block from */
/* header fields. */
+/* Baron think the function is construct CCM */
+/* nonce */
/************************************************/
static void construct_ctr_preload(
u8 *ctr_preload,
@@ -1278,20 +1330,25 @@ static void construct_ctr_preload(
sint qc_exists,
u8 *mpdu,
u8 *pn_vector,
- sint c
+ sint c,
+ uint frtype // add for CONFIG_IEEE80211W, none 11w also can use
)
{
sint i = 0;
_func_enter_;
for (i=0; i<16; i++) ctr_preload[i] = 0x00;
i = 0;
-
+
ctr_preload[0] = 0x01; /* flag */
if (qc_exists && a4_exists)
ctr_preload[1] = mpdu[30] & 0x0f; /* QoC_Control */
if (qc_exists && !a4_exists)
ctr_preload[1] = mpdu[24] & 0x0f;
-
+#ifdef CONFIG_IEEE80211W
+ //802.11w management frame should set management bit(4)
+ if(frtype == WIFI_MGT_TYPE)
+ ctr_preload[1] |= BIT(4);
+#endif //CONFIG_IEEE80211W
for (i = 2; i < 8; i++)
ctr_preload[i] = mpdu[i + 8]; /* ctr_preload[2:7] = A2[0:5] = mpdu[10:15] */
#ifdef CONSISTENT_PN_ORDER
@@ -1363,9 +1420,9 @@ _func_enter_;
a4_exists = 1;
if (
- (frtype == WIFI_DATA_CFACK) ||
- (frtype == WIFI_DATA_CFPOLL)||
- (frtype == WIFI_DATA_CFACKPOLL))
+ ((frtype|frsubtype) == WIFI_DATA_CFACK) ||
+ ((frtype|frsubtype) == WIFI_DATA_CFPOLL)||
+ ((frtype|frsubtype) == WIFI_DATA_CFACKPOLL))
{
qc_exists = 1;
if(hdrlen != WLAN_HDR_A3_QOS_LEN){
@@ -1373,11 +1430,12 @@ _func_enter_;
hdrlen += 2;
}
}
- else if (
- (frsubtype == 0x08) ||
+ // add for CONFIG_IEEE80211W, none 11w also can use
+ else if ((frtype == WIFI_DATA) &&
+ ((frsubtype == 0x08) ||
(frsubtype == 0x09)||
(frsubtype == 0x0a)||
- (frsubtype == 0x0b))
+ (frsubtype == 0x0b)))
{
if(hdrlen != WLAN_HDR_A3_QOS_LEN){
@@ -1401,13 +1459,15 @@ _func_enter_;
a4_exists,
pframe, //message,
plen,
- pn_vector
+ pn_vector,
+ frtype // add for CONFIG_IEEE80211W, none 11w also can use
);
construct_mic_header1(
mic_header1,
hdrlen,
- pframe //message
+ pframe, //message
+ frtype // add for CONFIG_IEEE80211W, none 11w also can use
);
construct_mic_header2(
mic_header2,
@@ -1466,7 +1526,8 @@ _func_enter_;
qc_exists,
pframe, //message,
pn_vector,
- i+1);
+ i+1,
+ frtype); // add for CONFIG_IEEE80211W, none 11w also can use
aes128k128d(key, ctr_preload, aes_out);
bitwise_xor(aes_out, &pframe[payload_index], chain_buffer);//bitwise_xor(aes_out, &message[payload_index], chain_buffer);
for (j=0; j<16;j++) pframe[payload_index++] = chain_buffer[j];//for (j=0; j<16;j++) message[payload_index++] = chain_buffer[j];
@@ -1480,7 +1541,8 @@ _func_enter_;
qc_exists,
pframe, //message,
pn_vector,
- num_blocks+1);
+ num_blocks+1,
+ frtype); // add for CONFIG_IEEE80211W, none 11w also can use
for (j = 0; j < 16; j++) padded_buffer[j] = 0x00;
for (j = 0; j < payload_remainder; j++)
@@ -1499,7 +1561,8 @@ _func_enter_;
qc_exists,
pframe, //message,
pn_vector,
- 0);
+ 0,
+ frtype); // add for CONFIG_IEEE80211W, none 11w also can use
for (j = 0; j < 16; j++) padded_buffer[j] = 0x00;
for (j = 0; j < 8; j++)
@@ -1566,7 +1629,7 @@ _func_enter_;
{
DBG_871X("%s, call rtw_get_stainfo()\n", __func__);
stainfo=rtw_get_stainfo(&padapter->stapriv ,&pattrib->ra[0] );
- }
+ }
if (stainfo!=NULL){
@@ -1671,7 +1734,7 @@ _func_enter_;
//start to decrypt the payload
- num_blocks = (plen-8) / 16; //(plen including llc, payload_length and mic )
+ num_blocks = (plen-8) / 16; //(plen including LLC, payload_length and mic )
payload_remainder = (plen-8) % 16;
@@ -1688,21 +1751,21 @@ _func_enter_;
a4_exists = 1;
if (
- (frtype == WIFI_DATA_CFACK) ||
- (frtype == WIFI_DATA_CFPOLL)||
- (frtype == WIFI_DATA_CFACKPOLL))
+ ((frtype|frsubtype) == WIFI_DATA_CFACK) ||
+ ((frtype|frsubtype) == WIFI_DATA_CFPOLL)||
+ ((frtype|frsubtype) == WIFI_DATA_CFACKPOLL))
{
qc_exists = 1;
if(hdrlen != WLAN_HDR_A3_QOS_LEN){
hdrlen += 2;
}
- }
- else if (
- (frsubtype == 0x08) ||
+ }//only for data packet . add for CONFIG_IEEE80211W, none 11w also can use
+ else if ((frtype == WIFI_DATA) &&
+ ((frsubtype == 0x08) ||
(frsubtype == 0x09)||
(frsubtype == 0x0a)||
- (frsubtype == 0x0b))
+ (frsubtype == 0x0b)))
{
if(hdrlen != WLAN_HDR_A3_QOS_LEN){
@@ -1726,7 +1789,8 @@ _func_enter_;
qc_exists,
pframe,
pn_vector,
- i+1
+ i+1,
+ frtype
);
aes128k128d(key, ctr_preload, aes_out);
@@ -1743,7 +1807,8 @@ _func_enter_;
qc_exists,
pframe,
pn_vector,
- num_blocks+1
+ num_blocks+1,
+ frtype // add for CONFIG_IEEE80211W, none 11w also can use
);
for (j = 0; j < 16; j++) padded_buffer[j] = 0x00;
@@ -1776,13 +1841,15 @@ _func_enter_;
a4_exists,
message,
plen-8,
- pn_vector
+ pn_vector,
+ frtype // add for CONFIG_IEEE80211W, none 11w also can use
);
construct_mic_header1(
mic_header1,
hdrlen,
- message
+ message,
+ frtype // add for CONFIG_IEEE80211W, none 11w also can use
);
construct_mic_header2(
mic_header2,
@@ -1841,7 +1908,8 @@ _func_enter_;
qc_exists,
message,
pn_vector,
- i+1);
+ i+1,
+ frtype); // add for CONFIG_IEEE80211W, none 11w also can use
aes128k128d(key, ctr_preload, aes_out);
bitwise_xor(aes_out, &message[payload_index], chain_buffer);
for (j=0; j<16;j++) message[payload_index++] = chain_buffer[j];
@@ -1855,7 +1923,8 @@ _func_enter_;
qc_exists,
message,
pn_vector,
- num_blocks+1);
+ num_blocks+1,
+ frtype); // add for CONFIG_IEEE80211W, none 11w also can use
for (j = 0; j < 16; j++) padded_buffer[j] = 0x00;
for (j = 0; j < payload_remainder; j++)
@@ -1874,7 +1943,8 @@ _func_enter_;
qc_exists,
message,
pn_vector,
- 0);
+ 0,
+ frtype); // add for CONFIG_IEEE80211W, none 11w also can use
for (j = 0; j < 16; j++) padded_buffer[j] = 0x00;
for (j = 0; j < 8; j++)
@@ -1952,9 +2022,31 @@ _func_enter_;
{
prwskey=&stainfo->dot118021x_UncstKey.skey[0];
}
-
+
length= ((union recv_frame *)precvframe)->u.hdr.len-prxattrib->hdrlen-prxattrib->iv_len;
-
+ /*// add for CONFIG_IEEE80211W, debug
+ if(0)
+ printk("@@@@@@@@@@@@@@@@@@ length=%d, prxattrib->hdrlen=%d, prxattrib->pkt_len=%d \n"
+ , length, prxattrib->hdrlen, prxattrib->pkt_len);
+ if(0)
+ {
+ int no;
+ //test print PSK
+ printk("PSK key below:\n");
+ for(no=0;no<16;no++)
+ printk(" %02x ", prwskey[no]);
+ printk("\n");
+ }
+ if(0)
+ {
+ int no;
+ //test print PSK
+ printk("frame:\n");
+ for(no=0;no<prxattrib->pkt_len;no++)
+ printk(" %02x ", pframe[no]);
+ printk("\n");
+ }*/
+
res= aes_decipher(prwskey,prxattrib->hdrlen,pframe, length);
@@ -1969,6 +2061,109 @@ _func_exit_;
exit:
return res;
}
+
+#ifdef CONFIG_IEEE80211W
+u32 rtw_BIP_verify(_adapter *padapter, u8 *precvframe)
+{
+ struct rx_pkt_attrib *pattrib = &((union recv_frame *)precvframe)->u.hdr.attrib;
+ u8 *pframe;
+ u8 *BIP_AAD, *p;
+ u32 res=_FAIL;
+ uint len, ori_len;
+ struct rtw_ieee80211_hdr *pwlanhdr;
+ u8 mic[16];
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ ori_len = pattrib->pkt_len-WLAN_HDR_A3_LEN+BIP_AAD_SIZE;
+ BIP_AAD = rtw_zmalloc(ori_len);
+
+ if(BIP_AAD == NULL)
+ {
+ DBG_871X("BIP AAD allocate fail\n");
+ return _FAIL;
+ }
+ //PKT start
+ pframe=(unsigned char *)((union recv_frame*)precvframe)->u.hdr.rx_data;
+ //mapping to wlan header
+ pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+ //save the frame body + MME
+ _rtw_memcpy(BIP_AAD+BIP_AAD_SIZE, pframe+WLAN_HDR_A3_LEN, pattrib->pkt_len-WLAN_HDR_A3_LEN);
+ //find MME IE pointer
+ p = rtw_get_ie(BIP_AAD+BIP_AAD_SIZE, _MME_IE_, &len, pattrib->pkt_len-WLAN_HDR_A3_LEN);
+ //Baron
+ if(p)
+ {
+ u16 keyid=0;
+ u64 temp_ipn=0;
+ //save packet number
+ _rtw_memcpy(&temp_ipn, p+4, 6);
+ temp_ipn = le64_to_cpu(temp_ipn);
+ //BIP packet number should bigger than previous BIP packet
+ if(temp_ipn <= pmlmeext->mgnt_80211w_IPN_rx)
+ {
+ DBG_871X("replay BIP packet\n");
+ goto BIP_exit;
+ }
+ //copy key index
+ _rtw_memcpy(&keyid, p+2, 2);
+ keyid = le16_to_cpu(keyid);
+ if(keyid != padapter->securitypriv.dot11wBIPKeyid)
+ {
+ DBG_871X("BIP key index error!\n");
+ goto BIP_exit;
+ }
+ //clear the MIC field of MME to zero
+ _rtw_memset(p+2+len-8, 0, 8);
+
+ //conscruct AAD, copy frame control field
+ _rtw_memcpy(BIP_AAD, &pwlanhdr->frame_ctl, 2);
+ ClearRetry(BIP_AAD);
+ ClearPwrMgt(BIP_AAD);
+ ClearMData(BIP_AAD);
+ //conscruct AAD, copy address 1 to address 3
+ _rtw_memcpy(BIP_AAD+2, pwlanhdr->addr1, 18);
+
+ if(omac1_aes_128(padapter->securitypriv.dot11wBIPKey[padapter->securitypriv.dot11wBIPKeyid].skey
+ , BIP_AAD, ori_len, mic))
+ goto BIP_exit;
+
+ /*//management packet content
+ {
+ int pp;
+ DBG_871X("pkt: ");
+ for(pp=0;pp< pattrib->pkt_len; pp++)
+ printk(" %02x ", pframe[pp]);
+ DBG_871X("\n");
+ //BIP AAD + management frame body + MME(MIC is zero)
+ DBG_871X("AAD+PKT: ");
+ for(pp=0;pp< ori_len; pp++)
+ DBG_871X(" %02x ", BIP_AAD[pp]);
+ DBG_871X("\n");
+ //show the MIC result
+ DBG_871X("mic: ");
+ for(pp=0;pp<16; pp++)
+ DBG_871X(" %02x ", mic[pp]);
+ DBG_871X("\n");
+ }
+ */
+ //MIC field should be last 8 bytes of packet (packet without FCS)
+ if(_rtw_memcmp(mic, pframe+pattrib->pkt_len-8, 8))
+ {
+ pmlmeext->mgnt_80211w_IPN_rx = temp_ipn;
+ res=_SUCCESS;
+ }
+ else
+ DBG_871X("BIP MIC error!\n");
+
+ }
+ else
+ res = RTW_RX_HANDLED;
+BIP_exit:
+
+ rtw_mfree(BIP_AAD, ori_len);
+ return res;
+}
+#endif //CONFIG_IEEE80211W
+
#ifndef PLATFORM_FREEBSD
/* compress 512-bits */
static int sha256_compress(struct sha256_state *md, unsigned char *buf)
@@ -2676,8 +2871,8 @@ static int omac1_aes_128_vector(u8 *key, size_t num_elem,
* This is a mode for using block cipher (AES in this case) for authentication.
* OMAC1 was standardized with the name CMAC by NIST in a Special Publication
* (SP) 800-38B.
- */
-static int omac1_aes_128(u8 *key, u8 *data, size_t data_len, u8 *mac)
+ */ //modify for CONFIG_IEEE80211W
+int omac1_aes_128(u8 *key, u8 *data, size_t data_len, u8 *mac)
{
return omac1_aes_128_vector(key, 1, &data, &data_len, mac);
}
@@ -2891,3 +3086,43 @@ _func_exit_;
}
+/* Restore HW wep key setting according to key_mask */
+void rtw_sec_restore_wep_key(_adapter *adapter)
+{
+ struct security_priv* securitypriv=&(adapter->securitypriv);
+ sint keyid;
+
+ if((_WEP40_ == securitypriv->dot11PrivacyAlgrthm) ||(_WEP104_ == securitypriv->dot11PrivacyAlgrthm)) {
+ for(keyid=0;keyid<4;keyid++){
+ if(securitypriv->key_mask & BIT(keyid)){
+ if(keyid == securitypriv->dot11PrivacyKeyIndex)
+ rtw_set_key(adapter,securitypriv, keyid, 1, _TRUE);
+ else
+ rtw_set_key(adapter,securitypriv, keyid, 0, _TRUE);
+ }
+ }
+ }
+}
+
+u8 rtw_handle_tkip_countermeasure(_adapter* adapter, const char *caller)
+{
+ struct security_priv* securitypriv=&(adapter->securitypriv);
+ u8 status = _SUCCESS;
+
+ if (securitypriv->btkip_countermeasure == _TRUE) {
+ u32 passing_ms = rtw_get_passing_time_ms(securitypriv->btkip_countermeasure_time);
+ if (passing_ms > 60*1000) {
+ DBG_871X_LEVEL(_drv_always_, "%s("ADPT_FMT") countermeasure time:%ds > 60s \n",
+ caller, ADPT_ARG(adapter), passing_ms/1000);
+ securitypriv->btkip_countermeasure = _FALSE;
+ securitypriv->btkip_countermeasure_time = 0;
+ } else {
+ DBG_871X_LEVEL(_drv_always_, "%s("ADPT_FMT") countermeasure time:%ds < 60s \n",
+ caller, ADPT_ARG(adapter), passing_ms/1000);
+ status = _FAIL;
+ }
+ }
+
+ return status;
+}
+
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_sreset.c b/drivers/net/wireless/rtl8723as/core/rtw_sreset.c
index b700bbfe5958..bc34827b492b 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_sreset.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_sreset.c
@@ -1,350 +1,356 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-#include<rtw_sreset.h>
-
-void sreset_init_value(_adapter *padapter)
-{
-#if defined(DBG_CONFIG_ERROR_DETECT)
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- struct sreset_priv *psrtpriv = &pHalData->srestpriv;
-
- _rtw_mutex_init(&psrtpriv->silentreset_mutex);
- psrtpriv->silent_reset_inprogress = _FALSE;
- psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
- psrtpriv->last_tx_time =0;
- psrtpriv->last_tx_complete_time =0;
-#endif
-}
-void sreset_reset_value(_adapter *padapter)
-{
-#if defined(DBG_CONFIG_ERROR_DETECT)
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- struct sreset_priv *psrtpriv = &pHalData->srestpriv;
-
- psrtpriv->silent_reset_inprogress = _FALSE;
- psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
- psrtpriv->last_tx_time =0;
- psrtpriv->last_tx_complete_time =0;
-#endif
-}
-
-u8 sreset_get_wifi_status(_adapter *padapter)
-{
-#if defined(DBG_CONFIG_ERROR_DETECT)
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- struct sreset_priv *psrtpriv = &pHalData->srestpriv;
-
- u8 status = WIFI_STATUS_SUCCESS;
- u32 val32 = 0;
- _irqL irqL;
- if(psrtpriv->silent_reset_inprogress == _TRUE)
- {
- return status;
- }
- val32 =rtw_read32(padapter,REG_TXDMA_STATUS);
- if(val32==0xeaeaeaea){
- psrtpriv->Wifi_Error_Status = WIFI_IF_NOT_EXIST;
- }
- else if(val32!=0){
- DBG_8192C("txdmastatu(%x)\n",val32);
- psrtpriv->Wifi_Error_Status = WIFI_MAC_TXDMA_ERROR;
- }
-
- if(WIFI_STATUS_SUCCESS !=psrtpriv->Wifi_Error_Status)
- {
- DBG_8192C("==>%s error_status(0x%x) \n",__FUNCTION__,psrtpriv->Wifi_Error_Status);
- status = (psrtpriv->Wifi_Error_Status &( ~(USB_READ_PORT_FAIL|USB_WRITE_PORT_FAIL)));
- }
- DBG_8192C("==> %s wifi_status(0x%x)\n",__FUNCTION__,status);
-
- //status restore
- psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
-
- return status;
-#else
- return WIFI_STATUS_SUCCESS;
-#endif
-}
-
-void sreset_set_wifi_error_status(_adapter *padapter, u32 status)
-{
-#if defined(DBG_CONFIG_ERROR_DETECT)
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- pHalData->srestpriv.Wifi_Error_Status = status;
-#endif
-}
-
-void sreset_set_trigger_point(_adapter *padapter, s32 tgp)
-{
-#if defined(DBG_CONFIG_ERROR_DETECT)
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- pHalData->srestpriv.dbg_trigger_point = tgp;
-#endif
-}
-
-bool sreset_inprogress(_adapter *padapter)
-{
-#if defined(DBG_CONFIG_ERROR_RESET)
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- return pHalData->srestpriv.silent_reset_inprogress;
-#else
- return _FALSE;
-#endif
-}
-
-void sreset_restore_security_station(_adapter *padapter)
-{
- u8 EntryId = 0;
- struct mlme_priv *mlmepriv = &padapter->mlmepriv;
- struct sta_priv * pstapriv = &padapter->stapriv;
- struct sta_info *psta;
- struct security_priv* psecuritypriv=&(padapter->securitypriv);
- struct mlme_ext_info *pmlmeinfo = &padapter->mlmeextpriv.mlmext_info;
-
- {
- u8 val8;
-
- if (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X) {
- val8 = 0xcc;
- #ifdef CONFIG_WAPI_SUPPORT
- } else if (padapter->wapiInfo.bWapiEnable && pmlmeinfo->auth_algo == dot11AuthAlgrthm_WAPI) {
- //Disable TxUseDefaultKey, RxUseDefaultKey, RxBroadcastUseDefaultKey.
- val8 = 0x4c;
- #endif
- } else {
- val8 = 0xcf;
- }
- rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
- }
-
- #if 0
- if ( ( padapter->securitypriv.dot11PrivacyAlgrthm == _WEP40_ ) ||
- ( padapter->securitypriv.dot11PrivacyAlgrthm == _WEP104_ ))
- {
-
- for(EntryId=0; EntryId<4; EntryId++)
- {
- if(EntryId == psecuritypriv->dot11PrivacyKeyIndex)
- rtw_set_key(padapter,&padapter->securitypriv, EntryId, 1);
- else
- rtw_set_key(padapter,&padapter->securitypriv, EntryId, 0);
- }
-
- }
- else
- #endif
- if((padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||
- (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))
- {
- psta = rtw_get_stainfo(pstapriv, get_bssid(mlmepriv));
- if (psta == NULL) {
- //DEBUG_ERR( ("Set wpa_set_encryption: Obtain Sta_info fail \n"));
- }
- else
- {
- //pairwise key
- rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE);
- //group key
- rtw_set_key(padapter,&padapter->securitypriv,padapter->securitypriv.dot118021XGrpKeyid, 0);
- }
- }
-}
-
-void sreset_restore_network_station(_adapter *padapter)
-{
- struct mlme_priv *mlmepriv = &padapter->mlmepriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
- #if 0
- {
- //=======================================================
- // reset related register of Beacon control
-
- //set MSR to nolink
- Set_MSR(padapter, _HW_STATE_NOLINK_);
- // reject all data frame
- rtw_write16(padapter, REG_RXFLTMAP2,0x00);
- //reset TSF
- rtw_write8(padapter, REG_DUAL_TSF_RST, (BIT(0)|BIT(1)));
-
- // disable update TSF
- SetBcnCtrlReg(padapter, BIT(4), 0);
-
- //=======================================================
- }
- #endif
-
- rtw_setopmode_cmd(padapter, Ndis802_11Infrastructure);
-
- {
- u8 threshold;
- #ifdef CONFIG_USB_HCI
- // TH=1 => means that invalidate usb rx aggregation
- // TH=0 => means that validate usb rx aggregation, use init value.
- if(mlmepriv->htpriv.ht_option) {
- if(padapter->registrypriv.wifi_spec==1)
- threshold = 1;
- else
- threshold = 0;
- rtw_hal_set_hwreg(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
- } else {
- threshold = 1;
- rtw_hal_set_hwreg(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
- }
- #endif
- }
-
- set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
- //disable dynamic functions, such as high power, DIG
- //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
-
- rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, pmlmeinfo->network.MacAddress);
-
- {
- u8 join_type = 0;
- rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
- }
-
- Set_MSR(padapter, (pmlmeinfo->state & 0x3));
-
- mlmeext_joinbss_event_callback(padapter, 1);
- //restore Sequence No.
- rtw_write8(padapter,0x4dc,padapter->xmitpriv.nqos_ssn);
-
- sreset_restore_security_station(padapter);
-}
-
-void sreset_restore_network_status(_adapter *padapter)
-{
- struct mlme_priv *mlmepriv = &padapter->mlmepriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
- if (check_fwstate(mlmepriv, WIFI_STATION_STATE)) {
- DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_STATION_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
- sreset_restore_network_station(padapter);
- } else if (check_fwstate(mlmepriv, WIFI_AP_STATE)) {
- DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_AP_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
- rtw_ap_restore_network(padapter);
- } else if (check_fwstate(mlmepriv, WIFI_ADHOC_STATE)) {
- DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_ADHOC_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
- } else {
- DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - ???\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
- }
-}
-
-void sreset_stop_adapter(_adapter *padapter)
-{
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
- if (padapter == NULL)
- return;
-
- DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
-
- if (!rtw_netif_queue_stopped(padapter->pnetdev))
- rtw_netif_stop_queue(padapter->pnetdev);
-
- rtw_cancel_all_timer(padapter);
-
- /* TODO: OS and HCI independent */
- #if defined(PLATFORM_LINUX) && defined(CONFIG_USB_HCI)
- tasklet_kill(&pxmitpriv->xmit_tasklet);
- #endif
-
- if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
- rtw_scan_abort(padapter);
-
- if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
- _rtw_join_timeout_handler(padapter);
-
-}
-
-void sreset_start_adapter(_adapter *padapter)
-{
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
- if (padapter == NULL)
- return;
-
- DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
-
- if (check_fwstate(pmlmepriv, _FW_LINKED)) {
- sreset_restore_network_status(padapter);
- }
-
- /* TODO: OS and HCI independent */
- #if defined(PLATFORM_LINUX) && defined(CONFIG_USB_HCI)
- tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
- #endif
-
- _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
-
- if (rtw_netif_queue_stopped(padapter->pnetdev))
- rtw_netif_wake_queue(padapter->pnetdev);
-
-}
-
-void sreset_reset(_adapter *padapter)
-{
-#ifdef DBG_CONFIG_ERROR_RESET
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- struct sreset_priv *psrtpriv = &pHalData->srestpriv;
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- _irqL irqL;
- u32 start = rtw_get_current_time();
-
- DBG_871X("%s\n", __FUNCTION__);
-
- psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
-
- _enter_critical_mutex(&psrtpriv->silentreset_mutex, &irqL);
- psrtpriv->silent_reset_inprogress = _TRUE;
- pwrpriv->change_rfpwrstate = rf_off;
-
- sreset_stop_adapter(padapter);
- #ifdef CONFIG_CONCURRENT_MODE
- sreset_stop_adapter(padapter->pbuddy_adapter);
- #endif
-
- #ifdef CONFIG_IPS
- ips_enter(padapter);
- ips_leave(padapter);
- #endif
-
- sreset_start_adapter(padapter);
- #ifdef CONFIG_CONCURRENT_MODE
- sreset_start_adapter(padapter->pbuddy_adapter);
- #endif
-
- psrtpriv->silent_reset_inprogress = _FALSE;
- _exit_critical_mutex(&psrtpriv->silentreset_mutex, &irqL);
-
- DBG_871X("%s done in %d ms\n", __FUNCTION__, rtw_get_passing_time_ms(start));
-#endif
-}
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+#include<rtw_sreset.h>
+
+void sreset_init_value(_adapter *padapter)
+{
+#if defined(DBG_CONFIG_ERROR_DETECT)
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct sreset_priv *psrtpriv = &pHalData->srestpriv;
+
+ _rtw_mutex_init(&psrtpriv->silentreset_mutex);
+ psrtpriv->silent_reset_inprogress = _FALSE;
+ psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
+ psrtpriv->last_tx_time =0;
+ psrtpriv->last_tx_complete_time =0;
+#endif
+}
+void sreset_reset_value(_adapter *padapter)
+{
+#if defined(DBG_CONFIG_ERROR_DETECT)
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct sreset_priv *psrtpriv = &pHalData->srestpriv;
+
+ //psrtpriv->silent_reset_inprogress = _FALSE;
+ psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
+ psrtpriv->last_tx_time =0;
+ psrtpriv->last_tx_complete_time =0;
+#endif
+}
+
+u8 sreset_get_wifi_status(_adapter *padapter)
+{
+#if defined(DBG_CONFIG_ERROR_DETECT)
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct sreset_priv *psrtpriv = &pHalData->srestpriv;
+
+ u8 status = WIFI_STATUS_SUCCESS;
+ u32 val32 = 0;
+ _irqL irqL;
+ if(psrtpriv->silent_reset_inprogress == _TRUE)
+ {
+ return status;
+ }
+ val32 =rtw_read32(padapter,REG_TXDMA_STATUS);
+ if(val32==0xeaeaeaea){
+ psrtpriv->Wifi_Error_Status = WIFI_IF_NOT_EXIST;
+ }
+ else if(val32!=0){
+ DBG_8192C("txdmastatu(%x)\n",val32);
+ psrtpriv->Wifi_Error_Status = WIFI_MAC_TXDMA_ERROR;
+ }
+
+ if(WIFI_STATUS_SUCCESS !=psrtpriv->Wifi_Error_Status)
+ {
+ DBG_8192C("==>%s error_status(0x%x) \n",__FUNCTION__,psrtpriv->Wifi_Error_Status);
+ status = (psrtpriv->Wifi_Error_Status &( ~(USB_READ_PORT_FAIL|USB_WRITE_PORT_FAIL)));
+ }
+ DBG_8192C("==> %s wifi_status(0x%x)\n",__FUNCTION__,status);
+
+ //status restore
+ psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
+
+ return status;
+#else
+ return WIFI_STATUS_SUCCESS;
+#endif
+}
+
+void sreset_set_wifi_error_status(_adapter *padapter, u32 status)
+{
+#if defined(DBG_CONFIG_ERROR_DETECT)
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ pHalData->srestpriv.Wifi_Error_Status = status;
+#endif
+}
+
+void sreset_set_trigger_point(_adapter *padapter, s32 tgp)
+{
+#if defined(DBG_CONFIG_ERROR_DETECT)
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ pHalData->srestpriv.dbg_trigger_point = tgp;
+#endif
+}
+
+bool sreset_inprogress(_adapter *padapter)
+{
+#if defined(DBG_CONFIG_ERROR_RESET)
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ return pHalData->srestpriv.silent_reset_inprogress;
+#else
+ return _FALSE;
+#endif
+}
+
+void sreset_restore_security_station(_adapter *padapter)
+{
+ u8 EntryId = 0;
+ struct mlme_priv *mlmepriv = &padapter->mlmepriv;
+ struct sta_priv * pstapriv = &padapter->stapriv;
+ struct sta_info *psta;
+ struct security_priv* psecuritypriv=&(padapter->securitypriv);
+ struct mlme_ext_info *pmlmeinfo = &padapter->mlmeextpriv.mlmext_info;
+
+ {
+ u8 val8;
+
+ if (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X) {
+ val8 = 0xcc;
+ #ifdef CONFIG_WAPI_SUPPORT
+ } else if (padapter->wapiInfo.bWapiEnable && pmlmeinfo->auth_algo == dot11AuthAlgrthm_WAPI) {
+ //Disable TxUseDefaultKey, RxUseDefaultKey, RxBroadcastUseDefaultKey.
+ val8 = 0x4c;
+ #endif
+ } else {
+ val8 = 0xcf;
+ }
+ rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
+ }
+
+ #if 0
+ if ( ( padapter->securitypriv.dot11PrivacyAlgrthm == _WEP40_ ) ||
+ ( padapter->securitypriv.dot11PrivacyAlgrthm == _WEP104_ ))
+ {
+
+ for(EntryId=0; EntryId<4; EntryId++)
+ {
+ if(EntryId == psecuritypriv->dot11PrivacyKeyIndex)
+ rtw_set_key(padapter,&padapter->securitypriv, EntryId, 1,_FALSE);
+ else
+ rtw_set_key(padapter,&padapter->securitypriv, EntryId, 0,_FALSE);
+ }
+
+ }
+ else
+ #endif
+ if((padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||
+ (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))
+ {
+ psta = rtw_get_stainfo(pstapriv, get_bssid(mlmepriv));
+ if (psta == NULL) {
+ //DEBUG_ERR( ("Set wpa_set_encryption: Obtain Sta_info fail \n"));
+ }
+ else
+ {
+ //pairwise key
+ rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE,_FALSE);
+ //group key
+ rtw_set_key(padapter,&padapter->securitypriv,padapter->securitypriv.dot118021XGrpKeyid, 0,_FALSE);
+ }
+ }
+}
+
+void sreset_restore_network_station(_adapter *padapter)
+{
+ struct mlme_priv *mlmepriv = &padapter->mlmepriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+
+ #if 0
+ {
+ //=======================================================
+ // reset related register of Beacon control
+
+ //set MSR to nolink
+ Set_MSR(padapter, _HW_STATE_NOLINK_);
+ // reject all data frame
+ rtw_write16(padapter, REG_RXFLTMAP2,0x00);
+ //reset TSF
+ rtw_write8(padapter, REG_DUAL_TSF_RST, (BIT(0)|BIT(1)));
+
+ // disable update TSF
+ SetBcnCtrlReg(padapter, BIT(4), 0);
+
+ //=======================================================
+ }
+ #endif
+
+ rtw_setopmode_cmd(padapter, Ndis802_11Infrastructure,_FALSE);
+
+ {
+ u8 threshold;
+ #ifdef CONFIG_USB_HCI
+ // TH=1 => means that invalidate usb rx aggregation
+ // TH=0 => means that validate usb rx aggregation, use init value.
+ if(mlmepriv->htpriv.ht_option) {
+ if(padapter->registrypriv.wifi_spec==1)
+ threshold = 1;
+ else
+ threshold = 0;
+ rtw_hal_set_hwreg(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
+ } else {
+ threshold = 1;
+ rtw_hal_set_hwreg(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
+ }
+ #endif
+ }
+
+ set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
+
+ //disable dynamic functions, such as high power, DIG
+ //Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
+
+ rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, pmlmeinfo->network.MacAddress);
+
+ {
+ u8 join_type = 0;
+ rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
+ }
+
+ Set_MSR(padapter, (pmlmeinfo->state & 0x3));
+
+ mlmeext_joinbss_event_callback(padapter, 1);
+ //restore Sequence No.
+ rtw_write8(padapter,0x4dc,padapter->xmitpriv.nqos_ssn);
+
+ sreset_restore_security_station(padapter);
+}
+
+
+void sreset_restore_network_status(_adapter *padapter)
+{
+ struct mlme_priv *mlmepriv = &padapter->mlmepriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+
+ if (check_fwstate(mlmepriv, WIFI_STATION_STATE)) {
+ DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_STATION_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
+ sreset_restore_network_station(padapter);
+ } else if (check_fwstate(mlmepriv, WIFI_AP_STATE)) {
+ DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_AP_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
+ rtw_ap_restore_network(padapter);
+ } else if (check_fwstate(mlmepriv, WIFI_ADHOC_STATE)) {
+ DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_ADHOC_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
+ } else {
+ DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - ???\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
+ }
+}
+
+void sreset_stop_adapter(_adapter *padapter)
+{
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
+
+ if (padapter == NULL)
+ return;
+
+ DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
+
+ if (!rtw_netif_queue_stopped(padapter->pnetdev))
+ rtw_netif_stop_queue(padapter->pnetdev);
+
+ rtw_cancel_all_timer(padapter);
+
+ /* TODO: OS and HCI independent */
+ #if defined(PLATFORM_LINUX) && defined(CONFIG_USB_HCI)
+ tasklet_kill(&pxmitpriv->xmit_tasklet);
+ #endif
+
+ if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
+ rtw_scan_abort(padapter);
+
+ if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
+ {
+ rtw_set_roaming(padapter, 0);
+ _rtw_join_timeout_handler(padapter);
+ }
+
+}
+
+void sreset_start_adapter(_adapter *padapter)
+{
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
+
+ if (padapter == NULL)
+ return;
+
+ DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
+
+ if (check_fwstate(pmlmepriv, _FW_LINKED)) {
+ sreset_restore_network_status(padapter);
+ }
+
+ /* TODO: OS and HCI independent */
+ #if defined(PLATFORM_LINUX) && defined(CONFIG_USB_HCI)
+ tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
+ #endif
+
+ _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
+
+ if (rtw_netif_queue_stopped(padapter->pnetdev))
+ rtw_netif_wake_queue(padapter->pnetdev);
+
+}
+
+void sreset_reset(_adapter *padapter)
+{
+#ifdef DBG_CONFIG_ERROR_RESET
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct sreset_priv *psrtpriv = &pHalData->srestpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
+ _irqL irqL;
+ u32 start = rtw_get_current_time();
+
+ DBG_871X("%s\n", __FUNCTION__);
+
+ psrtpriv->Wifi_Error_Status = WIFI_STATUS_SUCCESS;
+
+ _enter_pwrlock(&pwrpriv->lock);
+
+ psrtpriv->silent_reset_inprogress = _TRUE;
+ pwrpriv->change_rfpwrstate = rf_off;
+
+ sreset_stop_adapter(padapter);
+ #ifdef CONFIG_CONCURRENT_MODE
+ sreset_stop_adapter(padapter->pbuddy_adapter);
+ #endif
+
+ #ifdef CONFIG_IPS
+ _ips_enter(padapter);
+ _ips_leave(padapter);
+ #endif
+
+ sreset_start_adapter(padapter);
+ #ifdef CONFIG_CONCURRENT_MODE
+ sreset_start_adapter(padapter->pbuddy_adapter);
+ #endif
+
+ psrtpriv->silent_reset_inprogress = _FALSE;
+
+ _exit_pwrlock(&pwrpriv->lock);
+
+ DBG_871X("%s done in %d ms\n", __FUNCTION__, rtw_get_passing_time_ms(start));
+#endif
+}
+
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_sta_mgt.c b/drivers/net/wireless/rtl8723as/core/rtw_sta_mgt.c
index 3c1e4c305dc3..3ba598f87371 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_sta_mgt.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_sta_mgt.c
@@ -87,7 +87,18 @@ _func_enter_;
psta->keep_alive_trycnt = 0;
#endif // CONFIG_AP_MODE
+
+#ifdef DBG_TRX_STA_PKTS
+ psta->tx_be_cnt = 0;
+ psta->tx_bk_cnt = 0;
+ psta->tx_vi_cnt = 0;
+ psta->tx_vo_cnt = 0;
+ psta->rx_be_cnt = 0;
+ psta->rx_bk_cnt = 0;
+ psta->rx_vi_cnt = 0;
+ psta->rx_vo_cnt = 0;
+#endif
_func_exit_;
}
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_tdls.c b/drivers/net/wireless/rtl8723as/core/rtw_tdls.c
index 231b240c89b7..f7ca24aab826 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_tdls.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_tdls.c
@@ -1,2941 +1,2941 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#define _RTW_TDLS_C_
-
-#include <drv_types.h>
-#include <ethernet.h>
-#include <rtw_tdls.h>
-#include <wifi.h>
-
-#ifdef CONFIG_TDLS
-extern unsigned char MCS_rate_2R[16];
-extern unsigned char MCS_rate_1R[16];
-extern void process_wmmps_data(_adapter *padapter, union recv_frame *precv_frame);
-extern s32 rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe);
-
-void rtw_reset_tdls_info(_adapter* padapter)
-{
- struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
-
- ptdlsinfo->ap_prohibited = _FALSE;
- ptdlsinfo->setup_state = TDLS_STATE_NONE;
- ptdlsinfo->sta_cnt = 0;
- ptdlsinfo->sta_maximum = _FALSE;
- ptdlsinfo->macid_index= 6;
- ptdlsinfo->clear_cam= 0;
- ptdlsinfo->ch_sensing = 0;
- ptdlsinfo->cur_channel = 0;
- ptdlsinfo->candidate_ch = 1; //when inplement channel switching, default candidate channel is 1
- ptdlsinfo->watchdog_count = 0;
- ptdlsinfo->dev_discovered = 0;
-
-#ifdef CONFIG_WFD
- ptdlsinfo->wfd_info = &padapter->wfd_info;
-#endif //CONFIG_WFD
-}
-
-int rtw_init_tdls_info(_adapter* padapter)
-{
- int res = _SUCCESS;
- struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
-
- ptdlsinfo->enable = 1;
- rtw_reset_tdls_info(padapter);
-
- _rtw_spinlock_init(&ptdlsinfo->cmd_lock);
- _rtw_spinlock_init(&ptdlsinfo->hdl_lock);
-
- return res;
-
-}
-
-void rtw_free_tdls_info(struct tdls_info *ptdlsinfo)
-{
- _rtw_spinlock_free(&ptdlsinfo->cmd_lock);
- _rtw_spinlock_free(&ptdlsinfo->hdl_lock);
-
- _rtw_memset(ptdlsinfo, 0, sizeof(struct tdls_info) );
-
-}
-
-void issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, struct sta_info *ptdls_sta, unsigned int power_mode)
-{
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- unsigned char *pframe;
- struct rtw_ieee80211_hdr *pwlanhdr;
- unsigned short *fctrl;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
- if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
- {
- return;
- }
-
- //update attribute
- pattrib = &pmgntframe->attrib;
- update_mgntframe_attrib(padapter, pattrib);
-
- _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
- pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
- pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
-
- fctrl = &(pwlanhdr->frame_ctl);
- *(fctrl) = 0;
-// SetToDs(fctrl);
- if (power_mode)
- {
- SetPwrMgt(fctrl);
- }
-
- _rtw_memcpy(pwlanhdr->addr1, ptdls_sta->hwaddr, ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
-
- ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
- ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
- pattrib->seqnum = ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority];
- SetSeqNum(pwlanhdr, pattrib->seqnum);
-
- SetFrameSubType(pframe, WIFI_DATA_NULL);
-
- pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
- pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
-
- pattrib->last_txcmdsz = pattrib->pktlen;
- dump_mgntframe(padapter, pmgntframe);
-
- return;
-}
-
-s32 update_tdls_attrib(_adapter *padapter, struct pkt_attrib *pattrib)
-{
-
- struct sta_info *psta = NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct qos_priv *pqospriv= &pmlmepriv->qospriv;
-
- s32 res=_SUCCESS;
- sint bmcast;
-
- bmcast = IS_MCAST(pattrib->ra);
-
- psta = rtw_get_stainfo(pstapriv, pattrib->ra);
- if (psta == NULL) {
- res =_FAIL;
- goto exit;
- }
-
- pattrib->mac_id = psta->mac_id;
-
- pattrib->psta = psta;
-
- pattrib->ack_policy = 0;
- // get ether_hdr_len
- pattrib->pkt_hdrlen = ETH_HLEN;//(pattrib->ether_type == 0x8100) ? (14 + 4 ): 14; //vlan tag
-
- if (pqospriv->qos_option && psta->qos_option) {
- pattrib->priority = 1; //tdls management frame should be AC_BK
- pattrib->hdrlen = WLAN_HDR_A3_QOS_LEN;
- pattrib->subtype = WIFI_QOS_DATA_TYPE;
- } else {
- pattrib->hdrlen = WLAN_HDR_A3_LEN;
- pattrib->subtype = WIFI_DATA_TYPE;
- pattrib->priority = 0;
- }
-
- if (psta->ieee8021x_blocked == _TRUE)
- {
- pattrib->encrypt = 0;
- }
- else
- {
- GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, bmcast);
-
- switch(psecuritypriv->dot11AuthAlgrthm)
- {
- case dot11AuthAlgrthm_Open:
- case dot11AuthAlgrthm_Shared:
- case dot11AuthAlgrthm_Auto:
- pattrib->key_idx = (u8)psecuritypriv->dot11PrivacyKeyIndex;
- break;
- case dot11AuthAlgrthm_8021X:
- pattrib->key_idx = 0;
- break;
- default:
- pattrib->key_idx = 0;
- break;
- }
- }
-
- switch (pattrib->encrypt)
- {
- case _WEP40_:
- case _WEP104_:
- pattrib->iv_len = 4;
- pattrib->icv_len = 4;
- break;
- case _TKIP_:
- pattrib->iv_len = 8;
- pattrib->icv_len = 4;
- if(padapter->securitypriv.busetkipkey==_FAIL)
- {
- res =_FAIL;
- goto exit;
- }
- break;
- case _AES_:
- pattrib->iv_len = 8;
- pattrib->icv_len = 8;
- break;
- default:
- pattrib->iv_len = 0;
- pattrib->icv_len = 0;
- break;
- }
-
- if (pattrib->encrypt &&
- ((padapter->securitypriv.sw_encrypt == _TRUE) || (psecuritypriv->hw_decrypted == _FALSE)))
- {
- pattrib->bswenc = _TRUE;
- } else {
- pattrib->bswenc = _FALSE;
- }
-
- //qos_en, ht_en, init rate, ,bw, ch_offset, sgi
- pattrib->qos_en = psta->qos_option;
- pattrib->ht_en = psta->htpriv.ht_option;
- pattrib->raid = psta->raid;
- pattrib->bwmode = psta->htpriv.bwmode;
- pattrib->ch_offset = psta->htpriv.ch_offset;
- pattrib->sgi= psta->htpriv.sgi;
- pattrib->ampdu_en = _FALSE;
-
- //if(pattrib->ht_en && psta->htpriv.ampdu_enable)
- //{
- // if(psta->htpriv.agg_enable_bitmap & BIT(pattrib->priority))
- // pattrib->ampdu_en = _TRUE;
- //}
-
-exit:
-
- return res;
-}
-
-void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta)
-{
- struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
- struct sta_priv *pstapriv = &padapter->stapriv;
- _irqL irqL;
-
- //free peer sta_info
- _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
- if(ptdlsinfo->sta_cnt != 0)
- ptdlsinfo->sta_cnt--;
- _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
- if( ptdlsinfo->sta_cnt < (NUM_STA - 2) ) // -2: AP + BC/MC sta
- {
- ptdlsinfo->sta_maximum = _FALSE;
- _rtw_memset( &ptdlsinfo->ss_record, 0x00, sizeof(struct tdls_ss_record) );
- }
- //ready to clear cam
- if(ptdls_sta->mac_id!=0){
- ptdlsinfo->clear_cam=ptdls_sta->mac_id;
- rtw_setstakey_cmd(padapter, (u8 *)ptdls_sta, _TRUE);
- }
-
- if(ptdlsinfo->sta_cnt==0){
- rtw_tdls_cmd(padapter, myid(&(padapter->eeprompriv)), TDLS_RS_RCR);
- ptdlsinfo->setup_state=TDLS_STATE_NONE;
- }
- else
- DBG_871X("Remain tdls sta:%02x\n", ptdlsinfo->sta_cnt);
-
- rtw_free_stainfo(padapter, ptdls_sta);
-
-}
-
-// cam entry will be the same as mac_id
-void rtw_tdls_set_mac_id(struct tdls_info *ptdlsinfo, struct sta_info *ptdls_sta)
-{
- if(ptdls_sta->mac_id==0)
- {
- ptdls_sta->mac_id = ptdlsinfo->macid_index;
- if( (++ptdlsinfo->macid_index) > (NUM_STA -2) )
- ptdlsinfo->macid_index= TDLS_INI_MACID_ENTRY;
- }
-}
-
-//TDLS encryption(if needed) will always be CCMP
-void rtw_tdls_set_key(_adapter *adapter, struct rx_pkt_attrib *prx_pkt_attrib, struct sta_info *ptdls_sta)
-{
- if(prx_pkt_attrib->encrypt)
- {
- ptdls_sta->dot118021XPrivacy=_AES_;
- rtw_setstakey_cmd(adapter, (u8*)ptdls_sta, _TRUE);
- }
-}
-
-void rtw_tdls_process_ht_cap(_adapter *adapter, struct sta_info *ptdls_sta, u8 *data, u8 Length)
-{
- /* save HT capabilities in the sta object */
- _rtw_memset(&ptdls_sta->htpriv.ht_cap, 0, sizeof(struct rtw_ieee80211_ht_cap));
- if (data && Length >= sizeof(struct rtw_ieee80211_ht_cap) )
- {
- ptdls_sta->flags |= WLAN_STA_HT;
-
- ptdls_sta->flags |= WLAN_STA_WME;
-
- _rtw_memcpy(&ptdls_sta->htpriv.ht_cap, data, sizeof(struct rtw_ieee80211_ht_cap));
-
- } else
- ptdls_sta->flags &= ~WLAN_STA_HT;
-
- if(ptdls_sta->flags & WLAN_STA_HT)
- {
- if(adapter->registrypriv.ht_enable == _TRUE)
- {
- ptdls_sta->htpriv.ht_option = _TRUE;
- }
- else
- {
- ptdls_sta->htpriv.ht_option = _FALSE;
- ptdls_sta->stat_code = _STATS_FAILURE_;
- }
- }
-
- //HT related cap
- if(ptdls_sta->htpriv.ht_option)
- {
- //check if sta supports rx ampdu
- if(adapter->registrypriv.ampdu_enable==1)
- ptdls_sta->htpriv.ampdu_enable = _TRUE;
-
- //check if sta support s Short GI
- if(ptdls_sta->htpriv.ht_cap.cap_info & cpu_to_le16(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40))
- {
- ptdls_sta->htpriv.sgi = _TRUE;
- }
-
- // bwmode would still followed AP's setting
- if(ptdls_sta->htpriv.ht_cap.cap_info & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH))
- {
- ptdls_sta->htpriv.bwmode = adapter->mlmeextpriv.cur_bwmode;
- ptdls_sta->htpriv.ch_offset = adapter->mlmeextpriv.cur_ch_offset;
- }
- }
-}
-
-u8 *rtw_tdls_set_ht_cap(_adapter *padapter, u8 *pframe, struct pkt_attrib *pattrib)
-{
- struct rtw_ieee80211_ht_cap ht_capie;
- u8 rf_type;
-
- //HT capabilities
- _rtw_memset(&ht_capie, 0, sizeof(struct rtw_ieee80211_ht_cap));
-
- ht_capie.cap_info = IEEE80211_HT_CAP_SUP_WIDTH |IEEE80211_HT_CAP_SGI_20 |IEEE80211_HT_CAP_SM_PS |
- IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_TX_STBC |IEEE80211_HT_CAP_DSSSCCK40;
-
- {
- u32 rx_packet_offset, max_recvbuf_sz;
- padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
- padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
- if(max_recvbuf_sz-rx_packet_offset>(8191-256))
- ht_capie.cap_info = ht_capie.cap_info |IEEE80211_HT_CAP_MAX_AMSDU;
- }
-
- ht_capie.ampdu_params_info = (IEEE80211_HT_CAP_AMPDU_FACTOR&0x03);
-
- padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
- switch(rf_type)
- {
- case RF_1T1R:
- ht_capie.cap_info |= 0x0100;//RX STBC One spatial stream
- _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_1R, 16);
- break;
-
- case RF_2T2R:
- case RF_1T2R:
- default:
- ht_capie.cap_info|= 0x0200;//RX STBC two spatial stream
- _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_2R, 16);
- break;
- }
-
- return(rtw_set_ie(pframe, _HT_CAPABILITY_IE_,
- sizeof(struct rtw_ieee80211_ht_cap), (unsigned char*)&ht_capie, &(pattrib->pktlen)));
-}
-
-u8 *rtw_tdls_set_sup_ch(struct mlme_ext_priv *pmlmeext, u8 *pframe, struct pkt_attrib *pattrib)
-{
- u8 sup_ch[ 30 * 2 ] = { 0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
- do{
- if( pmlmeext->channel_set[sup_ch_idx].ChannelNum <= 14 )
- {
- sup_ch[0] = 1; //First channel number
- sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum; //Number of channel
- }
- else
- {
- sup_ch[idx_5g++] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;
- sup_ch[idx_5g++] = 1;
- }
-
- sup_ch_idx++;
- }
- while( pmlmeext->channel_set[sup_ch_idx].ChannelNum != 0 );
- return(rtw_set_ie(pframe, _SUPPORTED_CH_IE_, idx_5g, sup_ch, &(pattrib->pktlen)));
-}
-
-#ifdef CONFIG_WFD
-void rtw_tdls_process_wfd_ie(struct tdls_info *ptdlsinfo, u8 *ptr, u8 length)
-{
- u8 wfd_ie[ 128 ] = { 0x00 };
- u32 wfd_ielen = 0;
- u32 wfd_offset = 0;
- // Try to get the TCP port information when receiving the negotiation response.
- //
-
- wfd_offset = 0;
- wfd_offset = rtw_get_wfd_ie( ptr + wfd_offset, length - wfd_offset, wfd_ie, &wfd_ielen );
- while( wfd_offset )
- {
- u8 attr_content[ 10 ] = { 0x00 };
- u32 attr_contentlen = 0;
- int i;
-
- DBG_871X( "[%s] WFD IE Found!!\n", __FUNCTION__ );
- rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, attr_content, &attr_contentlen);
- if ( attr_contentlen )
- {
- ptdlsinfo->wfd_info->peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
- DBG_871X( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, ptdlsinfo->wfd_info->peer_rtsp_ctrlport );
- }
-
- _rtw_memset( attr_content, 0x00, 10);
- attr_contentlen = 0;
- rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_LOCAL_IP_ADDR, attr_content, &attr_contentlen);
- if ( attr_contentlen )
- {
- _rtw_memcpy(ptdlsinfo->wfd_info->peer_ip_address, ( attr_content + 1 ), 4);
- DBG_871X( "[%s] Peer IP = %02u.%02u.%02u.%02u \n", __FUNCTION__,
- ptdlsinfo->wfd_info->peer_ip_address[0], ptdlsinfo->wfd_info->peer_ip_address[1],
- ptdlsinfo->wfd_info->peer_ip_address[2], ptdlsinfo->wfd_info->peer_ip_address[3]
- );
- }
- wfd_offset = rtw_get_wfd_ie( ptr + wfd_offset, length - wfd_offset, wfd_ie, &wfd_ielen );
- }
-}
-
-void issue_tunneled_probe_req(_adapter *padapter)
-{
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
- u8 baddr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
- DBG_871X("[%s]\n", __FUNCTION__);
-
- if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
- {
- return;
- }
-
- //update attribute
- pattrib = &pmgntframe->attrib;
-
- pmgntframe->frame_tag = DATA_FRAMETAG;
- pattrib->ether_type = 0x890d;
- pattrib->pctrl =0;
-
- _rtw_memcpy(pattrib->dst, baddr, ETH_ALEN);
-
- _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
-
- _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
- _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
-
- update_tdls_attrib(padapter, pattrib);
- pattrib->qsel=pattrib->priority;
- if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TUNNELED_PROBE_REQ) != _SUCCESS) {
- rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- goto exit;
- }
- rtw_dump_xframe(padapter, pmgntframe);
-
-exit:
-
- return;
-}
-
-void issue_tunneled_probe_rsp(_adapter *padapter, union recv_frame *precv_frame)
-{
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
- struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
-
- DBG_871X("[%s]\n", __FUNCTION__);
-
- if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
- {
- return;
- }
-
- //update attribute
- pattrib = &pmgntframe->attrib;
-
- pmgntframe->frame_tag = DATA_FRAMETAG;
- pattrib->ether_type = 0x890d;
- pattrib->pctrl =0;
-
- _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
-
- _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
-
- _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
- _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
-
- update_tdls_attrib(padapter, pattrib);
- pattrib->qsel=pattrib->priority;
- if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TUNNELED_PROBE_RSP) != _SUCCESS) {
- rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- goto exit;
- }
- rtw_dump_xframe(padapter, pmgntframe);
-
-exit:
-
- return;
-}
-#endif //CONFIG_WFD
-
-void issue_tdls_setup_req(_adapter *padapter, u8 *mac_addr)
-{
- struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct sta_info *ptdls_sta= NULL;
- _irqL irqL;
- static u8 dialogtoken = 0;
- u32 timeout_interval= TPK_RESEND_COUNT * 1000; //retry timer should set at least 301 sec, using TPK_count counting 301 times.
-
- if(ptdlsinfo->ap_prohibited == _TRUE)
- goto exit;
-
- if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
- {
- return;
- }
-
- //update attribute
- pattrib = &pmgntframe->attrib;
-
- pmgntframe->frame_tag = DATA_FRAMETAG;
- pattrib->ether_type = 0x890d;
- pattrib->pctrl =0;
-
- _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
- _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
-
- _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
- _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
-
- update_tdls_attrib(padapter, pattrib);
-
- //init peer sta_info
- ptdls_sta = rtw_get_stainfo(pstapriv, mac_addr);
- if(ptdls_sta==NULL)
- {
- ptdls_sta = rtw_alloc_stainfo(pstapriv, mac_addr);
- if(ptdls_sta)
- {
- _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
- if(!(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE))
- ptdlsinfo->sta_cnt++;
- _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
- if( ptdlsinfo->sta_cnt == (NUM_STA - 2) ) // -2: AP + BC/MC sta
- {
- ptdlsinfo->sta_maximum = _TRUE;
- }
- }
- else
- {
- rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- goto exit;
- }
- }
-
- if(ptdls_sta){
- ptdls_sta->tdls_sta_state |= TDLS_RESPONDER_STATE;
- //for tdls; ptdls_sta->aid is used to fill dialogtoken
- ptdls_sta->dialog = dialogtoken;
- dialogtoken = (dialogtoken+1)%256;
- ptdls_sta->TDLS_PeerKey_Lifetime = timeout_interval;
- _set_timer( &ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME );
- }
-
- pattrib->qsel=pattrib->priority;
- if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_REQUEST) !=_SUCCESS ){
- rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- goto exit;
- }
- rtw_dump_xframe(padapter, pmgntframe);
-
-exit:
-
- return;
-}
-
-void issue_tdls_teardown(_adapter *padapter, u8 *mac_addr)
-{
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct sta_info *ptdls_sta=NULL;
- _irqL irqL;
-
- ptdls_sta = rtw_get_stainfo(pstapriv, mac_addr);
- if(ptdls_sta==NULL){
- DBG_871X("issue tdls teardown unsuccessful\n");
- return;
- }else{
- ptdls_sta->tdls_sta_state=TDLS_STATE_NONE;
- }
-
- if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
- {
- return;
- }
-
- //update attribute
- pattrib = &pmgntframe->attrib;
-
- pmgntframe->frame_tag = DATA_FRAMETAG;
- pattrib->ether_type = 0x890d;
- pattrib->pctrl =0;
-
- _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
- _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
-
- _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
- _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
-
- update_tdls_attrib(padapter, pattrib);
- pattrib->qsel=pattrib->priority;
- if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_TEARDOWN) != _SUCCESS) {
- rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- goto exit;
- }
- rtw_dump_xframe(padapter, pmgntframe);
-
- if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE){
- rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
- }
-
- if( ptdls_sta->timer_flag == 1 )
- {
- _enter_critical_bh(&(padapter->tdlsinfo.hdl_lock), &irqL);
- ptdls_sta->timer_flag = 2;
- _exit_critical_bh(&(padapter->tdlsinfo.hdl_lock), &irqL);
- }
- else
- rtw_tdls_cmd(padapter, mac_addr, TDLS_FREE_STA );
-
-
-exit:
-
- return;
-}
-
-void issue_tdls_dis_req(_adapter *padapter, u8 *mac_addr)
-{
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
- u8 baddr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
- if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
- {
- return;
- }
-
- //update attribute
- pattrib = &pmgntframe->attrib;
-
- pmgntframe->frame_tag = DATA_FRAMETAG;
- pattrib->ether_type = 0x890d;
- pattrib->pctrl =0;
-
- if(mac_addr == NULL)
- _rtw_memcpy(pattrib->dst, baddr, ETH_ALEN);
- else
- _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
-
- _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
-
- _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
- _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
-
- update_tdls_attrib(padapter, pattrib);
- pattrib->qsel=pattrib->priority;
- if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_DISCOVERY_REQUEST) != _SUCCESS) {
- rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- goto exit;
- }
- rtw_dump_xframe(padapter, pmgntframe);
- DBG_871X("issue tdls dis req\n");
-
-exit:
-
- return;
-}
-
-void issue_tdls_setup_rsp(_adapter *padapter, union recv_frame *precv_frame)
-{
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
- _irqL irqL;
-
- if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
- {
- return;
- }
-
- //update attribute
- pattrib = &pmgntframe->attrib;
-
- pmgntframe->frame_tag = DATA_FRAMETAG;
- pattrib->ether_type = 0x890d;
- pattrib->pctrl =0;
-
- _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
- _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
-
- _rtw_memcpy(pattrib->ra, rx_pkt_pattrib->bssid, ETH_ALEN);
- _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
-
- update_tdls_attrib(padapter, pattrib);
- pattrib->qsel=pattrib->priority;
- if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_RESPONSE) != _SUCCESS) {
- rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- goto exit;
- }
- rtw_dump_xframe(padapter, pmgntframe);
-
-exit:
-
- return;
-
-}
-
-void issue_tdls_setup_cfm(_adapter *padapter, union recv_frame *precv_frame)
-{
- struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
- struct sta_info *ptdls_sta=NULL;
- _irqL irqL;
-
- struct rx_pkt_attrib *rx_pkt_pattrib = & precv_frame->u.hdr.attrib;
-
- if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
- {
- return;
- }
-
- //update attribute
- pattrib = &pmgntframe->attrib;
-
- pmgntframe->frame_tag = DATA_FRAMETAG;
- pattrib->ether_type = 0x890d;
- pattrib->pctrl =0;
-
- _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
- _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
-
- _rtw_memcpy(pattrib->ra, rx_pkt_pattrib->bssid, ETH_ALEN);
- _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
-
- update_tdls_attrib(padapter, pattrib);
- pattrib->qsel=pattrib->priority;
- if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_CONFIRM) != _SUCCESS) {
- rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- goto exit;
- }
-
- rtw_dump_xframe(padapter, pmgntframe);
-
-exit:
-
- return;
-
-}
-
-//TDLS Discovery Response frame is a management action frame
-void issue_tdls_dis_rsp(_adapter *padapter, union recv_frame *precv_frame, u8 dialog)
-{
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- unsigned char *pframe;
- struct rtw_ieee80211_hdr *pwlanhdr;
- unsigned short *fctrl;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
-
- struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
-
- if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
- {
- return;
- }
-
- //update attribute
- pattrib = &pmgntframe->attrib;
- update_mgntframe_attrib(padapter, pattrib);
-
- _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
- pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
- pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
-
- fctrl = &(pwlanhdr->frame_ctl);
- *(fctrl) = 0;
-
- // unicast probe request frame
- _rtw_memcpy(pwlanhdr->addr1, rx_pkt_pattrib->src, ETH_ALEN);
- _rtw_memcpy(pattrib->dst, pwlanhdr->addr1, ETH_ALEN);
-
- _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
- _rtw_memcpy(pattrib->src, pwlanhdr->addr2, ETH_ALEN);
-
- _rtw_memcpy(pwlanhdr->addr3, rx_pkt_pattrib->bssid, ETH_ALEN);
- _rtw_memcpy(pattrib->ra, pwlanhdr->addr3, ETH_ALEN);
-
- SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
- pmlmeext->mgnt_seq++;
- SetFrameSubType(pframe, WIFI_ACTION);
-
- pframe += sizeof (struct rtw_ieee80211_hdr_3addr);
- pattrib->pktlen = sizeof (struct rtw_ieee80211_hdr_3addr);
-
- rtw_build_tdls_dis_rsp_ies(padapter, pmgntframe, pframe, dialog);
-
- pattrib->nr_frags = 1;
- pattrib->last_txcmdsz = pattrib->pktlen;
-
- dump_mgntframe(padapter, pmgntframe);
-
- return;
-}
-
-void issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *ptdls_sta)
-{
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
-
- static u8 dialogtoken=0;
-
- if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
- {
- return;
- }
-
- //update attribute
- pattrib = &pmgntframe->attrib;
-
- pmgntframe->frame_tag = DATA_FRAMETAG;
- pattrib->ether_type = 0x890d;
- pattrib->pctrl =0;
-
- _rtw_memcpy(pattrib->dst, ptdls_sta->hwaddr, ETH_ALEN);
- _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
-
- _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
- _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
-
- //for tdls; pattrib->nr_frags is used to fill dialogtoken
- ptdls_sta->dialog = dialogtoken;
- dialogtoken = (dialogtoken+1)%256;
- //PTI frame's priority should be AC_VO
- pattrib->priority = 7;
-
- update_tdls_attrib(padapter, pattrib);
- pattrib->qsel=pattrib->priority;
- if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_PEER_TRAFFIC_INDICATION) != _SUCCESS) {
- rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- goto exit;
- }
- rtw_dump_xframe(padapter, pmgntframe);
-
-exit:
-
- return;
-}
-
-void issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr)
-{
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
-
- if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
- {
- return;
- }
-
- //update attribute
- pattrib = &pmgntframe->attrib;
-
- pmgntframe->frame_tag = DATA_FRAMETAG;
- pattrib->ether_type = 0x890d;
- pattrib->pctrl =0;
-
- _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
- _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
-
- _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
- _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
-
- update_tdls_attrib(padapter, pattrib);
-
- pattrib->qsel=pattrib->priority;
- if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_CHANNEL_SWITCH_REQUEST) !=_SUCCESS ){
- rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- goto exit;
- }
- rtw_dump_xframe(padapter, pmgntframe);
-
-exit:
-
- return;
-}
-
-void issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr)
-{
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
-
- _irqL irqL;
-
- if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
- {
- return;
- }
-
- //update attribute
- pattrib = &pmgntframe->attrib;
-
- pmgntframe->frame_tag = DATA_FRAMETAG;
- pattrib->ether_type = 0x890d;
- pattrib->pctrl =0;
-
- _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
- _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
-
- _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
- _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
-
- update_tdls_attrib(padapter, pattrib);
-
- pattrib->qsel=pattrib->priority;
-/*
- _enter_critical_bh(&pxmitpriv->lock, &irqL);
- if(xmitframe_enqueue_for_tdls_sleeping_sta(padapter, pmgntframe)==_TRUE){
- _exit_critical_bh(&pxmitpriv->lock, &irqL);
- return _FALSE;
- }
-*/
- if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_CHANNEL_SWITCH_RESPONSE) !=_SUCCESS ){
- rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- goto exit;
- }
- rtw_dump_xframe(padapter, pmgntframe);
-
-exit:
-
- return;
-}
-
-sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame)
-{
- struct sta_info *ptdls_sta = NULL, *psta = rtw_get_stainfo(&(adapter->stapriv), get_bssid(&(adapter->mlmepriv)));
- struct recv_priv *precvpriv = &(adapter->recvpriv);
- u8 *ptr = precv_frame->u.hdr.rx_data, *psa;
- struct rx_pkt_attrib *pattrib = &(precv_frame->u.hdr.attrib);
- struct tdls_info *ptdlsinfo = &(adapter->tdlsinfo);
- u8 empty_addr[ETH_ALEN] = { 0x00 };
- int UndecoratedSmoothedPWDB;
-
-
- //WFDTDLS: for sigma test, not to setup direct link automatically
- ptdlsinfo->dev_discovered = 1;
-
-#ifdef CONFIG_TDLS_AUTOSETUP
- psa = get_sa(ptr);
- ptdls_sta = rtw_get_stainfo(&(adapter->stapriv), psa);
-
- if(ptdls_sta != NULL)
- {
- ptdls_sta->tdls_sta_state |= TDLS_ALIVE_STATE;
-
- //Record the tdls sta with lowest signal strength
- if( (ptdlsinfo->sta_maximum == _TRUE) && (ptdls_sta->alive_count >= 1) )
- {
- if( _rtw_memcmp(ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN) )
- {
- _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);
- ptdlsinfo->ss_record.RxPWDBAll = pattrib->RxPWDBAll;
- }
- else
- {
- if( ptdlsinfo->ss_record.RxPWDBAll < pattrib->RxPWDBAll )
- {
- _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);
- ptdlsinfo->ss_record.RxPWDBAll = pattrib->RxPWDBAll;
- }
- }
- }
-
- }
- else
- {
- if( ptdlsinfo->sta_maximum == _TRUE)
- {
- if( _rtw_memcmp( ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN ) )
- {
- //All traffics are busy, do not set up another direct link.
- return _FAIL;
- }
- else
- {
- if( pattrib->RxPWDBAll > ptdlsinfo->ss_record.RxPWDBAll )
- {
- issue_tdls_teardown(adapter, ptdlsinfo->ss_record.macaddr);
- }
- else
- {
- return _FAIL;
- }
- }
- }
-
- adapter->HalFunc.GetHalDefVarHandler(adapter, HAL_DEF_UNDERCORATEDSMOOTHEDPWDB, &UndecoratedSmoothedPWDB);
-
- if( pattrib->RxPWDBAll + TDLS_SIGNAL_THRESH >= UndecoratedSmoothedPWDB);
- {
- DBG_871X("pattrib->RxPWDBAll=%d, pdmpriv->UndecoratedSmoothedPWDB=%d\n", pattrib->RxPWDBAll, UndecoratedSmoothedPWDB);
- issue_tdls_setup_req(adapter, psa);
- }
- }
-#endif //CONFIG_TDLS_AUTOSETUP
-
- return _SUCCESS;
-}
-
-sint On_TDLS_Setup_Req(_adapter *adapter, union recv_frame *precv_frame)
-{
- struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
- u8 *psa, *pmyid;
- struct sta_info *ptdls_sta= NULL;
- struct sta_priv *pstapriv = &adapter->stapriv;
- u8 *ptr = precv_frame->u.hdr.rx_data;
- struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
- struct security_priv *psecuritypriv = &adapter->securitypriv;
- _irqL irqL;
- struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
- u8 *prsnie, *ppairwise_cipher;
- u8 i, k, pairwise_count;
- u8 ccmp_have=0, rsnie_have=0;
- u16 j;
- u8 SNonce[32];
- u32 *timeout_interval;
- sint parsing_length; //frame body length, without icv_len
- PNDIS_802_11_VARIABLE_IEs pIE;
- u8 FIXED_IE = 5;
- unsigned char supportRate[16];
- int supportRateNum = 0;
-
- psa = get_sa(ptr);
- ptdls_sta = rtw_get_stainfo(pstapriv, psa);
-
- pmyid=myid(&(adapter->eeprompriv));
- ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
- parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
- -prx_pkt_attrib->hdrlen
- -prx_pkt_attrib->iv_len
- -prx_pkt_attrib->icv_len
- -LLC_HEADER_SIZE
- -ETH_TYPE_LEN
- -PAYLOAD_TYPE_LEN
- -FIXED_IE;
-
- if(ptdlsinfo->ap_prohibited == _TRUE)
- {
- goto exit;
- }
-
- if(ptdls_sta==NULL){
- ptdls_sta = rtw_alloc_stainfo(pstapriv, psa);
- }else{
- if(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE){
- //If the direct link is already set up
- //Process as re-setup after tear down
- DBG_871X("re-setup a direct link\n");
- }
- //already receiving TDLS setup request
- else if(ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE){
- DBG_871X("receive duplicated TDLS setup request frame in handshaking\n");
- goto exit;
- }
- //When receiving and sending setup_req to the same link at the same time, STA with higher MAC_addr would be initiator
- //following is to check out MAC_addr
- else if(ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE){
- DBG_871X("receive setup_req after sending setup_req\n");
- for (i=0;i<6;i++){
- if(*(pmyid+i)==*(psa+i)){
- }
- else if(*(pmyid+i)>*(psa+i)){
- goto exit;
- }else if(*(pmyid+i)<*(psa+i)){
- ptdls_sta->tdls_sta_state=TDLS_INITIATOR_STATE;
- break;
- }
- }
- }
- }
-
- if(ptdls_sta)
- {
- ptdls_sta->dialog = *(ptr+2); //copy dialog token
- ptdls_sta->stat_code = 0;
-
- //parsing information element
- for(j=FIXED_IE; j<parsing_length;){
-
- pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
-
- switch (pIE->ElementID)
- {
- case _SUPPORTEDRATES_IE_:
- _rtw_memcpy(supportRate, pIE->data, pIE->Length);
- supportRateNum = pIE->Length;
- break;
- case _COUNTRY_IE_:
- break;
- case _EXT_SUPPORTEDRATES_IE_:
- if(supportRateNum<=sizeof(supportRate))
- {
- _rtw_memcpy(supportRate+supportRateNum, pIE->data, pIE->Length);
- supportRateNum += pIE->Length;
- }
- break;
- case _SUPPORTED_CH_IE_:
- break;
- case _RSN_IE_2_:
- rsnie_have=1;
- if(prx_pkt_attrib->encrypt){
- prsnie=(u8*)pIE;
- //check whether initiator STA has CCMP pairwise_cipher.
- ppairwise_cipher=prsnie+10;
- _rtw_memcpy(&pairwise_count, (u16*)(ppairwise_cipher-2), 1);
- for(k=0;k<pairwise_count;k++){
- if(_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4)==_TRUE)
- ccmp_have=1;
- }
- if(ccmp_have==0){
- //invalid contents of RSNIE
- ptdls_sta->stat_code=72;
- }
- }
- break;
- case _EXT_CAP_IE_:
- break;
- case _VENDOR_SPECIFIC_IE_:
- break;
- case _FTIE_:
- if(prx_pkt_attrib->encrypt)
- _rtw_memcpy(SNonce, (ptr+j+52), 32);
- break;
- case _TIMEOUT_ITVL_IE_:
- if(prx_pkt_attrib->encrypt)
- timeout_interval = (u32 *)(ptr+j+3);
- break;
- case _RIC_Descriptor_IE_:
- break;
- case _HT_CAPABILITY_IE_:
- rtw_tdls_process_ht_cap(adapter, ptdls_sta, pIE->data, pIE->Length);
- break;
- case EID_BSSCoexistence:
- break;
- case _LINK_ID_IE_:
- if(_rtw_memcmp(get_bssid(pmlmepriv), pIE->data, 6) == _FALSE)
- {
- //not in the same BSS
- ptdls_sta->stat_code=7;
- }
- break;
- default:
- break;
- }
-
- j += (pIE->Length + 2);
-
- }
-
- //update station supportRate
- ptdls_sta->bssratelen = supportRateNum;
- _rtw_memcpy(ptdls_sta->bssrateset, supportRate, supportRateNum);
-
- //check status code
- //if responder STA has/hasn't security on AP, but request hasn't/has RSNIE, it should reject
- if(ptdls_sta->stat_code == 0 )
- {
- if(rsnie_have && (prx_pkt_attrib->encrypt==0)){
- //security disabled
- ptdls_sta->stat_code = 5;
- }else if(rsnie_have==0 && (prx_pkt_attrib->encrypt)){
- //request haven't RSNIE
- ptdls_sta->stat_code = 38;
- }
-
-#ifdef CONFIG_WFD
- //WFD test plan version 0.18.2 test item 5.1.5
- //SoUT does not use TDLS if AP uses weak security
- if ( adapter->wdinfo.wfd_tdls_enable )
- {
- if(rsnie_have && (prx_pkt_attrib->encrypt != _AES_))
- {
- ptdls_sta->stat_code = 5;
- }
- }
-#endif //CONFIG_WFD
- }
-
- ptdls_sta->tdls_sta_state|= TDLS_INITIATOR_STATE;
- if(prx_pkt_attrib->encrypt){
- _rtw_memcpy(ptdls_sta->SNonce, SNonce, 32);
- _rtw_memcpy(&(ptdls_sta->TDLS_PeerKey_Lifetime), timeout_interval, 4);
- }
- _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
- if(!(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE))
- ptdlsinfo->sta_cnt++;
- _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
- if( ptdlsinfo->sta_cnt == (NUM_STA - 2) ) // -2: AP + BC/MC sta
- {
- ptdlsinfo->sta_maximum = _TRUE;
- }
-
-#ifdef CONFIG_WFD
- rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length - FIXED_IE);
-#endif // CONFIG_WFD
-
- }
- else
- {
- goto exit;
- }
-
- issue_tdls_setup_rsp(adapter, precv_frame);
-
- if(ptdls_sta->stat_code==0)
- {
- _set_timer( &ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME);
- }
- else //status code!=0 ; setup unsuccess
- {
- free_tdls_sta(adapter, ptdls_sta);
- }
-
-exit:
-
- return _FAIL;
-}
-
-sint On_TDLS_Setup_Rsp(_adapter *adapter, union recv_frame *precv_frame)
-{
- struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
- struct sta_info *ptdls_sta= NULL;
- struct sta_priv *pstapriv = &adapter->stapriv;
- u8 *ptr = precv_frame->u.hdr.rx_data;
- _irqL irqL;
- struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
- u8 *psa;
- u16 stat_code;
- sint parsing_length; //frame body length, without icv_len
- PNDIS_802_11_VARIABLE_IEs pIE;
- u8 FIXED_IE =7;
- u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic, *ppairwise_cipher;
- u16 pairwise_count, j, k;
- u8 verify_ccmp=0;
- unsigned char supportRate[16];
- int supportRateNum = 0;
-
- psa = get_sa(ptr);
- ptdls_sta = rtw_get_stainfo(pstapriv, psa);
-
- if ( NULL == ptdls_sta )
- {
- return _FAIL;
- }
-
- ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
- parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
- -prx_pkt_attrib->hdrlen
- -prx_pkt_attrib->iv_len
- -prx_pkt_attrib->icv_len
- -LLC_HEADER_SIZE
- -TYPE_LENGTH_FIELD_SIZE
- -1
- -FIXED_IE;
-
- _rtw_memcpy(&stat_code, ptr+2, 2);
-
- if(stat_code!=0)
- {
- DBG_871X( "[%s] status_code = %d, free_tdls_sta\n", __FUNCTION__, stat_code );
- free_tdls_sta(adapter, ptdls_sta);
- return _FAIL;
- }
-
- stat_code = 0;
-
- //parsing information element
- for(j=FIXED_IE; j<parsing_length;)
- {
- pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
-
- switch (pIE->ElementID)
- {
- case _SUPPORTEDRATES_IE_:
- _rtw_memcpy(supportRate, pIE->data, pIE->Length);
- supportRateNum = pIE->Length;
- break;
- case _COUNTRY_IE_:
- break;
- case _EXT_SUPPORTEDRATES_IE_:
- if(supportRateNum<=sizeof(supportRate))
- {
- _rtw_memcpy(supportRate+supportRateNum, pIE->data, pIE->Length);
- supportRateNum += pIE->Length;
- }
- break;
- case _SUPPORTED_CH_IE_:
- break;
- case _RSN_IE_2_:
- prsnie=(u8*)pIE;
- //check whether responder STA has CCMP pairwise_cipher.
- ppairwise_cipher=prsnie+10;
- _rtw_memcpy(&pairwise_count, (u16*)(ppairwise_cipher-2), 2);
- for(k=0;k<pairwise_count;k++){
- if(_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4)==_TRUE)
- verify_ccmp=1;
- }
- case _EXT_CAP_IE_:
- break;
- case _VENDOR_SPECIFIC_IE_:
- break;
- case _FTIE_:
- pftie=(u8*)pIE;
- _rtw_memcpy(ptdls_sta->ANonce, (ptr+j+20), 32);
- break;
- case _TIMEOUT_ITVL_IE_:
- ptimeout_ie=(u8*)pIE;
- break;
- case _RIC_Descriptor_IE_:
- break;
- case _HT_CAPABILITY_IE_:
- rtw_tdls_process_ht_cap(adapter, ptdls_sta, pIE->data, pIE->Length);
- break;
- case EID_BSSCoexistence:
- break;
- case _LINK_ID_IE_:
- plinkid_ie=(u8*)pIE;
- break;
- default:
- break;
- }
-
- j += (pIE->Length + 2);
-
- }
-
- //update station supportRate
- ptdls_sta->bssratelen = supportRateNum;
- _rtw_memcpy(ptdls_sta->bssrateset, supportRate, supportRateNum);
-
-#ifdef CONFIG_WFD
- rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length - FIXED_IE);
-#endif // CONFIG_WFD
-
- if(stat_code != 0)
- {
- ptdls_sta->stat_code = stat_code;
- }
- else
- {
- if(prx_pkt_attrib->encrypt)
- {
- if(verify_ccmp==1)
- {
- wpa_tdls_generate_tpk(adapter, ptdls_sta);
- ptdls_sta->stat_code=0;
- if(tdls_verify_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie)==0) //0: Invalid, 1: valid
- {
- free_tdls_sta(adapter, ptdls_sta);
- return _FAIL;
- }
- }
- else
- {
- ptdls_sta->stat_code=72; //invalide contents of RSNIE
- }
-
- }else{
- ptdls_sta->stat_code=0;
- }
- }
-
- DBG_871X("issue_tdls_setup_cfm\n");
- issue_tdls_setup_cfm(adapter, precv_frame);
-
- if(ptdls_sta->stat_code==0)
- {
- ptdlsinfo->setup_state = TDLS_LINKED_STATE;
-
- if( ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE )
- {
- ptdls_sta->tdls_sta_state |= TDLS_LINKED_STATE;
- _cancel_timer_ex( &ptdls_sta->handshake_timer);
-#ifdef CONFIG_TDLS_AUTOCHECKALIVE
- _set_timer( &ptdls_sta->alive_timer1, TDLS_ALIVE_TIMER_PH1);
-#endif //CONFIG_TDLS_AUTOSETUP
- }
-
- rtw_tdls_set_mac_id(ptdlsinfo, ptdls_sta);
- rtw_tdls_set_key(adapter, prx_pkt_attrib, ptdls_sta);
-
- rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_WRCR);
-
- }
- else //status code!=0 ; setup unsuccessful
- {
- free_tdls_sta(adapter, ptdls_sta);
- }
-
- return _FAIL;
-
-}
-
-sint On_TDLS_Setup_Cfm(_adapter *adapter, union recv_frame *precv_frame)
-{
- struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
- struct sta_info *ptdls_sta= NULL;
- struct sta_priv *pstapriv = &adapter->stapriv;
- u8 *ptr = precv_frame->u.hdr.rx_data;
- _irqL irqL;
- struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
- u8 *psa;
- u16 stat_code;
- sint parsing_length;
- PNDIS_802_11_VARIABLE_IEs pIE;
- u8 FIXED_IE =5;
- u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic, *ppairwise_cipher;
- u16 j, pairwise_count;
-
- psa = get_sa(ptr);
- ptdls_sta = rtw_get_stainfo(pstapriv, psa);
-
- ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
- parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
- -prx_pkt_attrib->hdrlen
- -prx_pkt_attrib->iv_len
- -prx_pkt_attrib->icv_len
- -LLC_HEADER_SIZE
- -ETH_TYPE_LEN
- -PAYLOAD_TYPE_LEN
- -FIXED_IE;
- _rtw_memcpy(&stat_code, ptr+2, 2);
-
- if(stat_code!=0){
- DBG_871X( "[%s] stat_code = %d\n, free_tdls_sta", __FUNCTION__, stat_code );
- free_tdls_sta(adapter, ptdls_sta);
- return _FAIL;
- }
-
- if(prx_pkt_attrib->encrypt){
- //parsing information element
- for(j=FIXED_IE; j<parsing_length;){
-
- pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
-
- switch (pIE->ElementID)
- {
- case _RSN_IE_2_:
- prsnie=(u8*)pIE;
- break;
- case _VENDOR_SPECIFIC_IE_:
- break;
- case _FTIE_:
- pftie=(u8*)pIE;
- break;
- case _TIMEOUT_ITVL_IE_:
- ptimeout_ie=(u8*)pIE;
- break;
- case _HT_EXTRA_INFO_IE_:
- break;
- case _LINK_ID_IE_:
- plinkid_ie=(u8*)pIE;
- break;
- default:
- break;
- }
-
- j += (pIE->Length + 2);
-
- }
-
- //verify mic in FTIE MIC field
- if(tdls_verify_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie)==0){ //0: Invalid, 1: Valid
- free_tdls_sta(adapter, ptdls_sta);
- return _FAIL;
- }
-
- }
-
- ptdlsinfo->setup_state = TDLS_LINKED_STATE;
- if( ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE )
- {
- ptdls_sta->tdls_sta_state|=TDLS_LINKED_STATE;
- _cancel_timer_ex( &ptdls_sta->handshake_timer);
-#ifdef CONFIG_TDLS_AUTOCHECKALIVE
- _set_timer( &ptdls_sta->alive_timer1, TDLS_ALIVE_TIMER_PH1);
-#endif //CONFIG_TDLS_AUTOCHECKALIVE
- }
-
- rtw_tdls_set_mac_id(ptdlsinfo, ptdls_sta);
- rtw_tdls_set_key(adapter, prx_pkt_attrib, ptdls_sta);
-
- rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_WRCR);
-
- return _FAIL;
-
-}
-
-sint On_TDLS_Dis_Req(_adapter *adapter, union recv_frame *precv_frame)
-{
- struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
- struct sta_priv *pstapriv = &adapter->stapriv;
- struct sta_info *psta_ap;
- u8 *ptr = precv_frame->u.hdr.rx_data;
- sint parsing_length; //frame body length, without icv_len
- PNDIS_802_11_VARIABLE_IEs pIE;
- u8 FIXED_IE = 3, *dst, *pdialog = NULL;
- u16 j;
-
- ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len + LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE + 1;
- pdialog=ptr+2;
-
- parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
- -prx_pkt_attrib->hdrlen
- -prx_pkt_attrib->iv_len
- -prx_pkt_attrib->icv_len
- -LLC_HEADER_SIZE
- -TYPE_LENGTH_FIELD_SIZE
- -1
- -FIXED_IE;
-
- //parsing information element
- for(j=FIXED_IE; j<parsing_length;){
-
- pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
-
- switch (pIE->ElementID)
- {
- case _LINK_ID_IE_:
- psta_ap = rtw_get_stainfo(pstapriv, pIE->data);
- if(psta_ap == NULL)
- {
- goto exit;
- }
- dst = pIE->data + 12;
- if( (MacAddr_isBcst(dst) == _FALSE) && (_rtw_memcmp(myid(&(adapter->eeprompriv)), dst, 6) == _FALSE) )
- {
- goto exit;
- }
- break;
- default:
- break;
- }
-
- j += (pIE->Length + 2);
-
- }
-
- //check frame contents
-
- issue_tdls_dis_rsp(adapter, precv_frame, *(pdialog) );
-
-exit:
-
- return _FAIL;
-
-}
-
-sint On_TDLS_Teardown(_adapter *adapter, union recv_frame *precv_frame)
-{
- u8 *psa;
- u8 *ptr = precv_frame->u.hdr.rx_data;
- struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
- struct mlme_ext_priv *pmlmeext = &(adapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- struct sta_priv *pstapriv = &adapter->stapriv;
- struct sta_info *ptdls_sta= NULL;
- _irqL irqL;
-
- psa = get_sa(ptr);
-
- ptdls_sta = rtw_get_stainfo(pstapriv, psa);
- if(ptdls_sta!=NULL){
- if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE){
- rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
- }
- free_tdls_sta(adapter, ptdls_sta);
- }
-
- return _FAIL;
-
-}
-
-u8 TDLS_check_ch_state(uint state){
- if( (state & TDLS_CH_SWITCH_ON_STATE) &&
- (state & TDLS_AT_OFF_CH_STATE) &&
- (state & TDLS_PEER_AT_OFF_STATE) ){
-
- if(state & TDLS_PEER_SLEEP_STATE)
- return 2; //U-APSD + ch. switch
- else
- return 1; //ch. switch
- }else
- return 0;
-}
-
-//we process buffered data for 1. U-APSD, 2. ch. switch, 3. U-APSD + ch. switch here
-sint On_TDLS_Peer_Traffic_Rsp(_adapter *adapter, union recv_frame *precv_frame)
-{
- struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
- struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
- struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
- struct sta_priv *pstapriv = &adapter->stapriv;
- //get peer sta infomation
- struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->src);
- u8 wmmps_ac=0, state=TDLS_check_ch_state(ptdls_sta->tdls_sta_state);
- int i;
-
- ptdls_sta->sta_stats.rx_data_pkts++;
-
- //receive peer traffic response frame, sleeping STA wakes up
- //ptdls_sta->tdls_sta_state &= ~(TDLS_PEER_SLEEP_STATE);
- process_wmmps_data( adapter, precv_frame);
-
- // if noticed peer STA wakes up by receiving peer traffic response
- // and we want to do channel swtiching, then we will transmit channel switch request first
- if(ptdls_sta->tdls_sta_state & TDLS_APSD_CHSW_STATE){
- issue_tdls_ch_switch_req(adapter, pattrib->src);
- ptdls_sta->tdls_sta_state &= ~(TDLS_APSD_CHSW_STATE);
- return _FAIL;
- }
-
- //check 4-AC queue bit
- if(ptdls_sta->uapsd_vo || ptdls_sta->uapsd_vi || ptdls_sta->uapsd_be || ptdls_sta->uapsd_bk)
- wmmps_ac=1;
-
- //if it's a direct link and have buffered frame
- if(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE){
- if(wmmps_ac && state)
- {
- _irqL irqL;
- _list *xmitframe_plist, *xmitframe_phead;
- struct xmit_frame *pxmitframe=NULL;
-
- _enter_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
-
- xmitframe_phead = get_list_head(&ptdls_sta->sleep_q);
- xmitframe_plist = get_next(xmitframe_phead);
-
- //transmit buffered frames
- while ((rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) == _FALSE)
- {
- pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list);
- xmitframe_plist = get_next(xmitframe_plist);
- rtw_list_delete(&pxmitframe->list);
-
- ptdls_sta->sleepq_len--;
- if(ptdls_sta->sleepq_len>0){
- pxmitframe->attrib.mdata = 1;
- pxmitframe->attrib.eosp = 0;
- }else{
- pxmitframe->attrib.mdata = 0;
- pxmitframe->attrib.eosp = 1;
- }
- //pxmitframe->attrib.triggered = 1; //maybe doesn't need in TDLS
- if(adapter->HalFunc.hal_xmit(adapter, pxmitframe) == _TRUE)
- {
- rtw_os_xmit_complete(adapter, pxmitframe);
- }
-
- }
-
- if(ptdls_sta->sleepq_len==0)
- {
- DBG_871X("no buffered packets for tdls to xmit\n");
- //on U-APSD + CH. switch state, when there is no buffered date to xmit,
- // we should go back to base channel
- if(state==2){
- rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
- }else if(ptdls_sta->tdls_sta_state&TDLS_SW_OFF_STATE){
- ptdls_sta->tdls_sta_state &= ~(TDLS_SW_OFF_STATE);
- ptdlsinfo->candidate_ch= pmlmeext->cur_channel;
- issue_tdls_ch_switch_req(adapter, pattrib->src);
- DBG_871X("issue tdls ch switch req back to base channel\n");
- }
-
- }
- else
- {
- DBG_871X("error!psta->sleepq_len=%d\n", ptdls_sta->sleepq_len);
- ptdls_sta->sleepq_len=0;
- }
-
- _exit_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
-
- }
-
- }
-
- return _FAIL;
-}
-
-sint On_TDLS_Ch_Switch_Req(_adapter *adapter, union recv_frame *precv_frame)
-{
- struct sta_info *ptdls_sta= NULL;
- struct sta_priv *pstapriv = &adapter->stapriv;
- u8 *ptr = precv_frame->u.hdr.rx_data;
- struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
- u8 *psa;
- sint parsing_length;
- PNDIS_802_11_VARIABLE_IEs pIE;
- u8 FIXED_IE =3;
- u16 j;
- struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
-
- psa = get_sa(ptr);
- ptdls_sta = rtw_get_stainfo(pstapriv, psa);
-
- ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
- parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
- -prx_pkt_attrib->hdrlen
- -prx_pkt_attrib->iv_len
- -prx_pkt_attrib->icv_len
- -LLC_HEADER_SIZE
- -ETH_TYPE_LEN
- -PAYLOAD_TYPE_LEN
- -FIXED_IE;
-
- ptdls_sta->off_ch = *(ptr+2);
-
- //parsing information element
- for(j=FIXED_IE; j<parsing_length;){
-
- pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
-
- switch (pIE->ElementID)
- {
- case _COUNTRY_IE_:
- break;
- case _CH_SWTICH_ANNOUNCE_:
- break;
- case _LINK_ID_IE_:
- break;
- case _CH_SWITCH_TIMING_:
- _rtw_memcpy(&ptdls_sta->ch_switch_time, pIE->data, 2);
- _rtw_memcpy(&ptdls_sta->ch_switch_timeout, pIE->data+2, 2);
- default:
- break;
- }
-
- j += (pIE->Length + 2);
-
- }
-
- //todo: check status
- ptdls_sta->stat_code=0;
- ptdls_sta->tdls_sta_state |= TDLS_CH_SWITCH_ON_STATE;
-
- issue_nulldata(adapter, NULL, 1, 0, 0);
-
- issue_tdls_ch_switch_rsp(adapter, psa);
-
- DBG_871X("issue tdls channel switch response\n");
-
- if((ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE) && ptdls_sta->off_ch==pmlmeext->cur_channel){
- DBG_871X("back to base channel %x\n", pmlmeext->cur_channel);
- ptdls_sta->option=7;
- rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_BASE_CH);
- }else{
- ptdls_sta->option=6;
- rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
- }
- return _FAIL;
-}
-
-sint On_TDLS_Ch_Switch_Rsp(_adapter *adapter, union recv_frame *precv_frame)
-{
- struct sta_info *ptdls_sta= NULL;
- struct sta_priv *pstapriv = &adapter->stapriv;
- u8 *ptr = precv_frame->u.hdr.rx_data;
- struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
- u8 *psa;
- sint parsing_length;
- PNDIS_802_11_VARIABLE_IEs pIE;
- u8 FIXED_IE =4;
- u16 stat_code, j, switch_time, switch_timeout;
- struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
-
- psa = get_sa(ptr);
- ptdls_sta = rtw_get_stainfo(pstapriv, psa);
-
- //if channel switch is running and receiving Unsolicited TDLS Channel Switch Response,
- //it will go back to base channel and terminate this channel switch procedure
- if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE ){
- if(pmlmeext->cur_channel==ptdls_sta->off_ch){
- DBG_871X("back to base channel %x\n", pmlmeext->cur_channel);
- ptdls_sta->option=7;
- rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
- }else{
- DBG_871X("receive unsolicited channel switch response \n");
- rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
- }
- return _FAIL;
- }
-
- //avoiding duplicated or unconditional ch. switch. rsp
- if((ptdls_sta->tdls_sta_state & TDLS_CH_SW_INITIATOR_STATE) != TDLS_CH_SW_INITIATOR_STATE)
- return _FAIL;
-
- ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
- parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
- -prx_pkt_attrib->hdrlen
- -prx_pkt_attrib->iv_len
- -prx_pkt_attrib->icv_len
- -LLC_HEADER_SIZE
- -ETH_TYPE_LEN
- -PAYLOAD_TYPE_LEN
- -FIXED_IE;
-
- _rtw_memcpy(&stat_code, ptr+2, 2);
-
- if(stat_code!=0){
- return _FAIL;
- }
-
- //parsing information element
- for(j=FIXED_IE; j<parsing_length;){
-
- pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
-
- switch (pIE->ElementID)
- {
- case _LINK_ID_IE_:
- break;
- case _CH_SWITCH_TIMING_:
- _rtw_memcpy(&switch_time, pIE->data, 2);
- if(switch_time > ptdls_sta->ch_switch_time)
- _rtw_memcpy(&ptdls_sta->ch_switch_time, &switch_time, 2);
-
- _rtw_memcpy(&switch_timeout, pIE->data+2, 2);
- if(switch_timeout > ptdls_sta->ch_switch_timeout)
- _rtw_memcpy(&ptdls_sta->ch_switch_timeout, &switch_timeout, 2);
-
- default:
- break;
- }
-
- j += (pIE->Length + 2);
-
- }
-
- ptdls_sta->tdls_sta_state &= ~(TDLS_CH_SW_INITIATOR_STATE);
- ptdls_sta->tdls_sta_state |=TDLS_CH_SWITCH_ON_STATE;
-
- //goto set_channel_workitem_callback()
- ptdls_sta->option=6;
- rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
-
- return _FAIL;
-}
-
-#ifdef CONFIG_WFD
-void wfd_ie_tdls(_adapter * padapter, u8 *pframe, u32 *pktlen )
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct wifi_display_info *pwfd_info = padapter->tdlsinfo.wfd_info;
- u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };
- u32 wfdielen = 0;
-
- // WFD OUI
- wfdielen = 0;
- wfdie[ wfdielen++ ] = 0x50;
- wfdie[ wfdielen++ ] = 0x6F;
- wfdie[ wfdielen++ ] = 0x9A;
- wfdie[ wfdielen++ ] = 0x0A; // WFA WFD v1.0
-
- // Commented by Albert 20110825
- // According to the WFD Specification, the negotiation request frame should contain 3 WFD attributes
- // 1. WFD Device Information
- // 2. Associated BSSID ( Optional )
- // 3. Local IP Adress ( Optional )
-
- // WFD Device Information ATTR
- // Type:
- wfdie[ wfdielen++ ] = WFD_ATTR_DEVICE_INFO;
-
- // Length:
- // Note: In the WFD specification, the size of length field is 2.
- RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
- wfdielen += 2;
-
- // Value1:
- // WFD device information
- // available for WFD session + Preferred TDLS + WSD ( WFD Service Discovery )
- RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL
- | WFD_DEVINFO_PC_TDLS | WFD_DEVINFO_WSD);
- wfdielen += 2;
-
- // Value2:
- // Session Management Control Port
- // Default TCP port for RTSP messages is 554
- RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->rtsp_ctrlport );
- wfdielen += 2;
-
- // Value3:
- // WFD Device Maximum Throughput
- // 300Mbps is the maximum throughput
- RTW_PUT_BE16(wfdie + wfdielen, 300);
- wfdielen += 2;
-
- // Associated BSSID ATTR
- // Type:
- wfdie[ wfdielen++ ] = WFD_ATTR_ASSOC_BSSID;
-
- // Length:
- // Note: In the WFD specification, the size of length field is 2.
- RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
- wfdielen += 2;
-
- // Value:
- // Associated BSSID
- if ( check_fwstate( pmlmepriv, _FW_LINKED) == _TRUE )
- {
- _rtw_memcpy( wfdie + wfdielen, &pmlmepriv->assoc_bssid[ 0 ], ETH_ALEN );
- }
- else
- {
- _rtw_memset( wfdie + wfdielen, 0x00, ETH_ALEN );
- }
-
- // Local IP Address ATTR
- wfdie[ wfdielen++ ] = WFD_ATTR_LOCAL_IP_ADDR;
-
- // Length:
- // Note: In the WFD specification, the size of length field is 2.
- RTW_PUT_BE16(wfdie + wfdielen, 0x0005);
- wfdielen += 2;
-
- // Version:
- // 0x01: Version1;IPv4
- wfdie[ wfdielen++ ] = 0x01;
-
- // IPv4 Address
- _rtw_memcpy( wfdie + wfdielen, pwfd_info->ip_address, 4 );
- wfdielen += 4;
-
- pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, pktlen);
-
-}
-#endif //CONFIG_WFD
-
-void rtw_build_tdls_setup_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
-{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
- struct registry_priv *pregistrypriv = &padapter->registrypriv;
- struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);
-
- u8 payload_type = 0x02;
- u8 category = RTW_WLAN_CATEGORY_TDLS;
- u8 action = TDLS_SETUP_REQUEST;
- u8 bssrate[NDIS_802_11_LENGTH_RATES_EX]; //Use NDIS_802_11_LENGTH_RATES_EX in order to call func.rtw_set_supported_rate
- int bssrate_len = 0, i = 0 ;
- u8 more_supportedrates = 0;
- unsigned int ie_len;
- u8 *p;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- u8 link_id_addr[18] = {0};
- u8 iedata=0;
- u8 sup_ch[ 30 * 2 ] = {0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
- u8 timeout_itvl[5]; //set timeout interval to maximum value
- u32 time;
-
- //SNonce
- if(pattrib->encrypt){
- for(i=0;i<8;i++){
- time=rtw_get_current_time();
- _rtw_memcpy(&ptdls_sta->SNonce[4*i], (u8 *)&time, 4);
- }
- }
-
- //payload type
- pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
- //category, action, dialog token
- pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
-
- //capability
- _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
-
- if(pattrib->encrypt)
- *pframe =*pframe | BIT(4);
- pframe += 2;
- pattrib->pktlen += 2;
-
- //supported rates
- rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
- bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
-
- if (bssrate_len > 8)
- {
- pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
- more_supportedrates = 1;
- }
- else
- {
- pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
- }
-
- //country(optional)
- //extended supported rates
- if(more_supportedrates==1){
- pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
- }
-
- //supported channels
- pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);
-
- // SRC IE
- pframe = rtw_set_ie( pframe, _SRC_IE_, 16, TDLS_SRC, &(pattrib->pktlen));
-
- //RSNIE
- if(pattrib->encrypt)
- pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
-
- //extended capabilities
- pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
-
- //QoS capability(WMM_IE)
- pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, 7, TDLS_WMMIE, &(pattrib->pktlen));
-
-
- if(pattrib->encrypt){
- //FTIE
- _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
- _rtw_memset(pframe, _FTIE_, 1); //version
- _rtw_memset((pframe+1), 82, 1); //length
- _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
- pframe += 84;
- pattrib->pktlen += 84;
-
- //Timeout interval
- timeout_itvl[0]=0x02;
- _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
- pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
- }
-
- //Sup_reg_classes(optional)
- //HT capabilities
- pframe = rtw_tdls_set_ht_cap(padapter, pframe, pattrib);
-
- //20/40 BSS coexistence
- if(pmlmepriv->num_FortyMHzIntolerant>0)
- iedata |= BIT(2);//20 MHz BSS Width Request
- pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
-
- //Link identifier
- _rtw_memcpy(link_id_addr, pattrib->ra, 6);
- _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
- _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
- pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
-
-#ifdef CONFIG_WFD
- wfd_ie_tdls( padapter, pframe, &(pattrib->pktlen) );
-#endif //CONFIG_WFD
-
-}
-
-void rtw_build_tdls_setup_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
-{
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
- struct sta_info *ptdls_sta;
- struct registry_priv *pregistrypriv = &padapter->registrypriv;
-
- u8 payload_type = 0x02;
- unsigned char category = RTW_WLAN_CATEGORY_TDLS;
- unsigned char action = TDLS_SETUP_RESPONSE;
- unsigned char bssrate[NDIS_802_11_LENGTH_RATES_EX];
- int bssrate_len = 0;
- u8 more_supportedrates = 0;
- unsigned int ie_len;
- unsigned char *p;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- u8 link_id_addr[18] = {0};
- u8 iedata=0;
- u8 timeout_itvl[5]; //setup response timeout interval will copy from request
- u8 ANonce[32]; //maybe it can put in ontdls_req
- u8 k; //for random ANonce
- u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic;
- u32 time;
-
- ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);
-
- if(ptdls_sta == NULL )
- {
- DBG_871X("[%s] %d\n", __FUNCTION__, __LINE__);
- return;
- }
-
- if(pattrib->encrypt){
- for(k=0;k<8;k++){
- time=rtw_get_current_time();
- _rtw_memcpy(&ptdls_sta->ANonce[4*k], (u8*)&time, 4);
- }
- }
-
- //payload type
- pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
- //category, action, status code
- pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
-
- if(ptdls_sta->stat_code!=0) //invalid setup request
- {
- DBG_871X("ptdls_sta->stat_code:%04x \n", ptdls_sta->stat_code);
- return;
- }
-
- //dialog token
- pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
-
- //capability
- _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
-
- if(pattrib->encrypt )
- *pframe =*pframe | BIT(4);
- pframe += 2;
- pattrib->pktlen += 2;
-
- //supported rates
- rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
- bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
-
- if (bssrate_len > 8)
- {
- pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
- more_supportedrates = 1;
- }
- else
- {
- pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
- }
-
- //country(optional)
- //extended supported rates
- if(more_supportedrates==1){
- pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
- }
-
- //supported channels
- pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);
-
- // SRC IE
- pframe = rtw_set_ie(pframe, _SRC_IE_ , 16, TDLS_SRC, &(pattrib->pktlen));
-
- //RSNIE
- if(pattrib->encrypt){
- prsnie = pframe;
- pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
- }
-
- //extended capabilities
- pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
-
- //QoS capability(WMM_IE)
- pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, 7, TDLS_WMMIE, &(pattrib->pktlen));
-
- if(pattrib->encrypt){
- wpa_tdls_generate_tpk(padapter, ptdls_sta);
-
- //FTIE
- pftie = pframe;
- pftie_mic = pframe+4;
- _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
- _rtw_memset(pframe, _FTIE_, 1); //version
- _rtw_memset((pframe+1), 82, 1); //length
- _rtw_memcpy((pframe+20), ptdls_sta->ANonce, 32);
- _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
- pframe += 84;
- pattrib->pktlen += 84;
-
- //Timeout interval
- ptimeout_ie = pframe;
- timeout_itvl[0]=0x02;
- _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
- pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
- }
-
- //Sup_reg_classes(optional)
- //HT capabilities
- pframe = rtw_tdls_set_ht_cap(padapter, pframe, pattrib);
-
- //20/40 BSS coexistence
- if(pmlmepriv->num_FortyMHzIntolerant>0)
- iedata |= BIT(2);//20 MHz BSS Width Request
- pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
-
- //Link identifier
- plinkid_ie = pframe;
- _rtw_memcpy(link_id_addr, pattrib->ra, 6);
- _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
- _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
- pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
-
- //fill FTIE mic
- if(pattrib->encrypt)
- wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);
-
-#ifdef CONFIG_WFD
- wfd_ie_tdls( padapter, pframe, &(pattrib->pktlen) );
-#endif //CONFIG_WFD
-
-}
-
-void rtw_build_tdls_setup_cfm_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
-{
-
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
- struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);
-
- u8 payload_type = 0x02;
- unsigned char category = RTW_WLAN_CATEGORY_TDLS;
- unsigned char action = TDLS_SETUP_CONFIRM;
- u8 more_supportedrates = 0;
- unsigned int ie_len;
- unsigned char *p;
- u8 timeout_itvl[5]; //set timeout interval to maximum value
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- u8 link_id_addr[18] = {0};
- u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic;
-
- //payload type
- pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
- //category, action, status code, dialog token
- pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
-
- if(ptdls_sta->stat_code!=0) //invalid setup request
- return;
-
- //RSNIE
- if(pattrib->encrypt){
- prsnie = pframe;
- pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
- }
-
- //EDCA param set; WMM param ele.
- if(pattrib->encrypt){
- //FTIE
- pftie = pframe;
- pftie_mic = pframe+4;
- _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
- _rtw_memset(pframe, _FTIE_, 1); //version
- _rtw_memset((pframe+1), 82, 1); //length
- _rtw_memcpy((pframe+20), ptdls_sta->ANonce, 32);
- _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
- pframe += 84;
- pattrib->pktlen += 84;
-
- //Timeout interval
- ptimeout_ie = pframe;
- timeout_itvl[0]=0x02;
- _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
- ptdls_sta->TPK_count=0;
- _set_timer(&ptdls_sta->TPK_timer, ptdls_sta->TDLS_PeerKey_Lifetime/TPK_RESEND_COUNT);
- pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
- }
-
- //HT operation; todo
- //Link identifier
- plinkid_ie = pframe;
- _rtw_memcpy(link_id_addr, pattrib->ra, 6);
- _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
- _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
- pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
-
- //fill FTIE mic
- if(pattrib->encrypt)
- wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);
-
-}
-
-void rtw_build_tdls_teardown_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
-{
-
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
- u8 payload_type = 0x02;
- unsigned char category = RTW_WLAN_CATEGORY_TDLS;
- unsigned char action = TDLS_TEARDOWN;
- u8 link_id_addr[18] = {0};
-
- struct sta_info *ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);
- struct sta_priv *pstapriv = &padapter->stapriv;
-
- //payload type
- pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
- //category, action, reason code
- pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
-
- //Link identifier
- if(ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE){
- _rtw_memcpy(link_id_addr, pattrib->ra, 6);
- _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
- _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
- }else if(ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE){
- _rtw_memcpy(link_id_addr, pattrib->ra, 6);
- _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
- _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
- }
- pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
-
-}
-
-void rtw_build_tdls_dis_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
-{
-
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
- u8 payload_type = 0x02;
- u8 category = RTW_WLAN_CATEGORY_TDLS;
- u8 action = TDLS_DISCOVERY_REQUEST;
- u8 link_id_addr[18] = {0};
- static u8 dialogtoken=0;
-
- //payload type
- pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
- //category, action, reason code
- pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(dialogtoken), &(pattrib->pktlen));
- dialogtoken = (dialogtoken+1)%256;
-
- //Link identifier
- _rtw_memcpy(link_id_addr, pattrib->ra, 6);
- _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
- _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
- pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
-
-}
-
-void rtw_build_tdls_dis_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 dialog)
-{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
- struct registry_priv *pregistrypriv = &padapter->registrypriv;
-
- u8 category = RTW_WLAN_CATEGORY_PUBLIC;
- u8 action = TDLS_DISCOVERY_RESPONSE;
- u8 bssrate[NDIS_802_11_LENGTH_RATES_EX];
- int bssrate_len = 0;
- u8 more_supportedrates = 0;
- u8 *p;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- u8 link_id_addr[18] = {0};
- u8 iedata=0;
- u8 timeout_itvl[5]; //set timeout interval to maximum value
- u32 timeout_interval= TPK_RESEND_COUNT * 1000;
-
- //category, action, dialog token
- pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(dialog), &(pattrib->pktlen));
-
- //capability
- _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
-
- if(pattrib->encrypt)
- *pframe =*pframe | BIT(4);
- pframe += 2;
- pattrib->pktlen += 2;
-
- //supported rates
- rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
- bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
-
- if (bssrate_len > 8)
- {
- pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
- more_supportedrates = 1;
- }
- else
- {
- pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
- }
-
- //extended supported rates
- if(more_supportedrates==1){
- pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
- }
-
- //supported channels
- pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);
-
- //RSNIE
- if(pattrib->encrypt)
- pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
-
- //extended capability
- pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
-
- if(pattrib->encrypt){
- //FTIE
- _rtw_memset(pframe, 0, 84); //All fields shall be set to 0
- _rtw_memset(pframe, _FTIE_, 1); //version
- _rtw_memset((pframe+1), 82, 1); //length
- pframe += 84;
- pattrib->pktlen += 84;
-
- //Timeout interval
- timeout_itvl[0]=0x02;
- _rtw_memcpy(timeout_itvl+1, &timeout_interval, 4);
- pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
- }
-
- //Sup_reg_classes(optional)
- //HT capabilities
- pframe = rtw_tdls_set_ht_cap(padapter, pframe, pattrib);
-
- //20/40 BSS coexistence
- if(pmlmepriv->num_FortyMHzIntolerant>0)
- iedata |= BIT(2);//20 MHz BSS Width Request
- pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
-
- //Link identifier
- _rtw_memcpy(link_id_addr, pattrib->ra, 6);
- _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
- _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
- pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
-
-}
-
-void rtw_build_tdls_peer_traffic_indication_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
-{
-
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
- u8 payload_type = 0x02;
- unsigned char category = RTW_WLAN_CATEGORY_TDLS;
- unsigned char action = TDLS_PEER_TRAFFIC_INDICATION;
-
- u8 link_id_addr[18] = {0};
- u8 AC_queue=0;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
-
- //payload type
- pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
- //category, action, reason code
- pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
-
- //Link identifier
- _rtw_memcpy(link_id_addr, pattrib->ra, 6);
- _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
- _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
- pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
-
- //PTI control
- //PU buffer status
- if(ptdls_sta->uapsd_bk&BIT(1))
- AC_queue=BIT(0);
- if(ptdls_sta->uapsd_be&BIT(1))
- AC_queue=BIT(1);
- if(ptdls_sta->uapsd_vi&BIT(1))
- AC_queue=BIT(2);
- if(ptdls_sta->uapsd_vo&BIT(1))
- AC_queue=BIT(3);
- pframe = rtw_set_ie(pframe, _PTI_BUFFER_STATUS_, 1, &AC_queue, &(pattrib->pktlen));
-
-}
-
-void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
-{
-
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
- struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
- u8 payload_type = 0x02;
- unsigned char category = RTW_WLAN_CATEGORY_TDLS;
- unsigned char action = TDLS_CHANNEL_SWITCH_REQUEST;
- u8 link_id_addr[18] = {0};
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
- u8 ch_switch_timing[4] = {0};
- u16 switch_time= CH_SWITCH_TIME, switch_timeout=CH_SWITCH_TIMEOUT;
-
- //payload type
- pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
- //category, action, target_ch
- pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(ptdlsinfo->candidate_ch), &(pattrib->pktlen));
-
- //Link identifier
- _rtw_memcpy(link_id_addr, pattrib->ra, 6);
- _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
- _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
- pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
-
- //ch switch timing
- _rtw_memcpy(ch_switch_timing, &switch_time, 2);
- _rtw_memcpy(ch_switch_timing+2, &switch_timeout, 2);
- pframe = rtw_set_ie(pframe, _CH_SWITCH_TIMING_, 4, ch_switch_timing, &(pattrib->pktlen));
-
- //update ch switch attrib to sta_info
- ptdls_sta->off_ch=ptdlsinfo->candidate_ch;
- ptdls_sta->ch_switch_time=switch_time;
- ptdls_sta->ch_switch_timeout=switch_timeout;
-
-}
-
-void rtw_build_tdls_ch_switch_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
-{
-
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
- u8 payload_type = 0x02;
- unsigned char category = RTW_WLAN_CATEGORY_TDLS;
- unsigned char action = TDLS_CHANNEL_SWITCH_RESPONSE;
- u8 link_id_addr[18] = {0};
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- u8 ch_switch_timing[4] = {0};
-
- //payload type
- pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
- //category, action, status_code
- pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
-
- //Link identifier
- _rtw_memcpy(link_id_addr, pattrib->ra, 6);
- _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
- _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
- pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
-
- //ch switch timing
- _rtw_memcpy(ch_switch_timing, &ptdls_sta->ch_switch_time, 2);
- _rtw_memcpy(ch_switch_timing+2, &ptdls_sta->ch_switch_timeout, 2);
- pframe = rtw_set_ie(pframe, _CH_SWITCH_TIMING_, 4, ch_switch_timing, &(pattrib->pktlen));
-
-}
-
-#ifdef CONFIG_WFD
-void rtw_build_tunneled_probe_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
-{
-
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
- struct wifidirect_info *pwdinfo = &padapter->wdinfo;
- struct wifidirect_info *pbuddy_wdinfo = &padapter->pbuddy_adapter->wdinfo;
- u8 payload_type = 0x02;
- u8 category = RTW_WLAN_CATEGORY_P2P;
- u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a};
- u8 probe_req = 4;
- u8 wfdielen = 0;
-
- //payload type
- pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
- //category, OUI, frame_body_type
- pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 3, WFA_OUI, &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(probe_req), &(pattrib->pktlen));
-
- if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
- {
- wfdielen = build_probe_req_wfd_ie(pwdinfo, pframe);
- pframe += wfdielen;
- pattrib->pktlen += wfdielen;
- }
- else if(!rtw_p2p_chk_state(pbuddy_wdinfo, P2P_STATE_NONE))
- {
- wfdielen = build_probe_req_wfd_ie(pbuddy_wdinfo, pframe);
- pframe += wfdielen;
- pattrib->pktlen += wfdielen;
- }
-
-}
-
-void rtw_build_tunneled_probe_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
-{
-
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
- struct wifidirect_info *pwdinfo = &padapter->wdinfo;
- struct wifidirect_info *pbuddy_wdinfo = &padapter->pbuddy_adapter->wdinfo;
- u8 payload_type = 0x02;
- u8 category = RTW_WLAN_CATEGORY_P2P;
- u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a};
- u8 probe_rsp = 5;
- u8 wfdielen = 0;
-
- //payload type
- pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
- //category, OUI, frame_body_type
- pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 3, WFA_OUI, &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(probe_rsp), &(pattrib->pktlen));
-
- if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
- {
- wfdielen = build_probe_resp_wfd_ie(pwdinfo, pframe, 1);
- pframe += wfdielen;
- pattrib->pktlen += wfdielen;
- }
- else if(!rtw_p2p_chk_state(pbuddy_wdinfo, P2P_STATE_NONE))
- {
- wfdielen = build_probe_resp_wfd_ie(pbuddy_wdinfo, pframe, 1);
- pframe += wfdielen;
- pattrib->pktlen += wfdielen;
- }
-
-}
-#endif //CONFIG_WFD
-
-void _TPK_timer_hdl(void *FunctionContext)
-{
- struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
-
- ptdls_sta->TPK_count++;
- //TPK_timer set 1000 as default
- //retry timer should set at least 301 sec.
- if(ptdls_sta->TPK_count==TPK_RESEND_COUNT){
- ptdls_sta->TPK_count=0;
- issue_tdls_setup_req(ptdls_sta->padapter, ptdls_sta->hwaddr);
- }
-
- _set_timer(&ptdls_sta->TPK_timer, ptdls_sta->TDLS_PeerKey_Lifetime/TPK_RESEND_COUNT);
-}
-
-void init_TPK_timer(_adapter *padapter, struct sta_info *psta)
-{
- psta->padapter=padapter;
-
- _init_timer(&psta->TPK_timer, padapter->pnetdev, _TPK_timer_hdl, psta);
-}
-
-// TDLS_DONE_CH_SEN: channel sensing and report candidate channel
-// TDLS_OFF_CH: first time set channel to off channel
-// TDLS_BASE_CH: when go back to the channel linked with AP, send null data to peer STA as an indication
-void _ch_switch_timer_hdl(void *FunctionContext)
-{
-
- struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
- _adapter *padapter = ptdls_sta->padapter;
-
- if( ptdls_sta->option == TDLS_DONE_CH_SEN ){
- rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_DONE_CH_SEN);
- }else if( ptdls_sta->option == TDLS_OFF_CH ){
- issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta, 0);
- _set_timer(&ptdls_sta->base_ch_timer, 500);
- }else if( ptdls_sta->option == TDLS_BASE_CH){
- issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta, 0);
- }
-}
-
-void init_ch_switch_timer(_adapter *padapter, struct sta_info *psta)
-{
- psta->padapter=padapter;
- _init_timer(&psta->option_timer, padapter->pnetdev, _ch_switch_timer_hdl, psta);
-}
-
-void _base_ch_timer_hdl(void *FunctionContext)
-{
- struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
- rtw_tdls_cmd(ptdls_sta->padapter, ptdls_sta->hwaddr, TDLS_P_OFF_CH);
-}
-
-void init_base_ch_timer(_adapter *padapter, struct sta_info *psta)
-{
- psta->padapter=padapter;
- _init_timer(&psta->base_ch_timer, padapter->pnetdev, _base_ch_timer_hdl, psta);
-}
-
-void _off_ch_timer_hdl(void *FunctionContext)
-{
- struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
- rtw_tdls_cmd(ptdls_sta->padapter, ptdls_sta->hwaddr, TDLS_P_BASE_CH );
-}
-
-void init_off_ch_timer(_adapter *padapter, struct sta_info *psta)
-{
- psta->padapter=padapter;
- _init_timer(&psta->off_ch_timer, padapter->pnetdev, _off_ch_timer_hdl, psta);
-}
-
-void _tdls_handshake_timer_hdl(void *FunctionContext)
-{
- struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
-
- if(ptdls_sta != NULL)
- {
- if( !(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) )
- {
- DBG_871X("tdls handshake time out\n");
- free_tdls_sta(ptdls_sta->padapter, ptdls_sta);
- }
- }
-}
-
-void init_handshake_timer(_adapter *padapter, struct sta_info *psta)
-{
- psta->padapter=padapter;
- _init_timer(&psta->handshake_timer, padapter->pnetdev, _tdls_handshake_timer_hdl, psta);
-}
-
-//Check tdls peer sta alive.
-void _tdls_alive_timer_phase1_hdl(void *FunctionContext)
-{
- _irqL irqL;
- struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
- _adapter *padapter = ptdls_sta->padapter;
- struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
-
- _enter_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
- ptdls_sta->timer_flag = 1;
- _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
-
- ptdls_sta->tdls_sta_state &= (~TDLS_ALIVE_STATE);
-
- DBG_871X("issue_tdls_dis_req to check alive\n");
- issue_tdls_dis_req( padapter, ptdls_sta->hwaddr);
- rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH1);
- sta_update_last_rx_pkts(ptdls_sta);
-
- if ( ptdls_sta->timer_flag == 2 )
- rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_FREE_STA);
- else
- {
- _enter_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
- ptdls_sta->timer_flag = 0;
- _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
- }
-
-}
-
-void _tdls_alive_timer_phase2_hdl(void *FunctionContext)
-{
- _irqL irqL;
- struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
- _adapter *padapter = ptdls_sta->padapter;
- struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
-
- _enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
- ptdls_sta->timer_flag = 1;
- _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
-
- if( (ptdls_sta->tdls_sta_state & TDLS_ALIVE_STATE) &&
- (sta_last_rx_pkts(ptdls_sta) + 3 <= sta_rx_pkts(ptdls_sta)) )
- {
- DBG_871X("TDLS STA ALIVE, ptdls_sta->sta_stats.last_rx_pkts:%llu, ptdls_sta->sta_stats.rx_pkts:%llu\n",
- sta_last_rx_pkts(ptdls_sta), sta_rx_pkts(ptdls_sta));
-
- ptdls_sta->alive_count = 0;
- rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH2);
- }
- else
- {
- if( !(ptdls_sta->tdls_sta_state & TDLS_ALIVE_STATE) )
- DBG_871X("TDLS STA TOO FAR\n");
- if( !(sta_last_rx_pkts(ptdls_sta) + 3 <= sta_rx_pkts(ptdls_sta)))
- DBG_871X("TDLS LINK WITH LOW TRAFFIC, ptdls_sta->sta_stats.last_rx_pkts:%llu, ptdls_sta->sta_stats.rx_pkts:%llu\n",
- sta_last_rx_pkts(ptdls_sta), sta_rx_pkts(ptdls_sta));
-
- ptdls_sta->alive_count++;
- if( ptdls_sta->alive_count == TDLS_ALIVE_COUNT )
- {
- ptdls_sta->stat_code = _RSON_TDLS_TEAR_TOOFAR_;
- issue_tdls_teardown(padapter, ptdls_sta->hwaddr);
- }
- else
- {
- rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH2);
- }
- }
-
- if ( ptdls_sta->timer_flag == 2 )
- rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_FREE_STA);
- else
- {
- _enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
- ptdls_sta->timer_flag = 0;
- _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
-}
-
-}
-
-void init_tdls_alive_timer(_adapter *padapter, struct sta_info *psta)
-{
- psta->padapter=padapter;
- _init_timer(&psta->alive_timer1, padapter->pnetdev, _tdls_alive_timer_phase1_hdl, psta);
- _init_timer(&psta->alive_timer2, padapter->pnetdev, _tdls_alive_timer_phase2_hdl, psta);
-}
-
-int update_sgi_tdls(_adapter *padapter, struct sta_info *psta)
-{
- struct ht_priv *psta_ht = NULL;
- psta_ht = &psta->htpriv;
-
- if(psta_ht->ht_option)
- {
- return psta_ht->sgi;
- }
- else
- return _FALSE;
-}
-
-u32 update_mask_tdls(_adapter *padapter, struct sta_info *psta)
-{
- int i;
- u8 rf_type, id;
- unsigned char sta_band = 0;
- unsigned char limit;
- unsigned int tx_ra_bitmap=0;
- struct ht_priv *psta_ht = NULL;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
-
- psta_ht = &psta->htpriv;
- //b/g mode ra_bitmap
- for (i=0; i<sizeof(psta->bssrateset); i++)
- {
- if (psta->bssrateset[i])
- tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
- }
-
- //n mode ra_bitmap
- if(psta_ht->ht_option)
- {
- padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
- if(rf_type == RF_2T2R)
- limit=16;// 2R
- else
- limit=8;// 1R
-
- for (i=0; i<limit; i++) {
- if (psta_ht->ht_cap.supp_mcs_set[i/8] & BIT(i%8))
- tx_ra_bitmap |= BIT(i+12);
- }
- }
-
- if ( pcur_network->Configuration.DSConfig > 14 ) {
- // 5G band
- if (tx_ra_bitmap & 0xffff000)
- sta_band |= WIRELESS_11_5N | WIRELESS_11A;
- else
- sta_band |= WIRELESS_11A;
- } else {
- if (tx_ra_bitmap & 0xffff000)
- sta_band |= WIRELESS_11_24N | WIRELESS_11G | WIRELESS_11B;
- else if (tx_ra_bitmap & 0xff0)
- sta_band |= WIRELESS_11G |WIRELESS_11B;
- else
- sta_band |= WIRELESS_11B;
- }
-
- id = networktype_to_raid(sta_band);
- tx_ra_bitmap |= ((id<<28)&0xf0000000);
- return tx_ra_bitmap;
-}
-
-#endif //CONFIG_TDLS
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#define _RTW_TDLS_C_
+
+#include <drv_types.h>
+#include <ethernet.h>
+#include <rtw_tdls.h>
+#include <wifi.h>
+
+#ifdef CONFIG_TDLS
+extern unsigned char MCS_rate_2R[16];
+extern unsigned char MCS_rate_1R[16];
+extern void process_wmmps_data(_adapter *padapter, union recv_frame *precv_frame);
+extern s32 rtw_dump_xframe(_adapter *padapter, struct xmit_frame *pxmitframe);
+
+void rtw_reset_tdls_info(_adapter* padapter)
+{
+ struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+
+ ptdlsinfo->ap_prohibited = _FALSE;
+ ptdlsinfo->setup_state = TDLS_STATE_NONE;
+ ptdlsinfo->sta_cnt = 0;
+ ptdlsinfo->sta_maximum = _FALSE;
+ ptdlsinfo->macid_index= 6;
+ ptdlsinfo->clear_cam= 0;
+ ptdlsinfo->ch_sensing = 0;
+ ptdlsinfo->cur_channel = 0;
+ ptdlsinfo->candidate_ch = 1; //when inplement channel switching, default candidate channel is 1
+ ptdlsinfo->watchdog_count = 0;
+ ptdlsinfo->dev_discovered = 0;
+
+#ifdef CONFIG_WFD
+ ptdlsinfo->wfd_info = &padapter->wfd_info;
+#endif //CONFIG_WFD
+}
+
+int rtw_init_tdls_info(_adapter* padapter)
+{
+ int res = _SUCCESS;
+ struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+
+ ptdlsinfo->enable = 1;
+ rtw_reset_tdls_info(padapter);
+
+ _rtw_spinlock_init(&ptdlsinfo->cmd_lock);
+ _rtw_spinlock_init(&ptdlsinfo->hdl_lock);
+
+ return res;
+
+}
+
+void rtw_free_tdls_info(struct tdls_info *ptdlsinfo)
+{
+ _rtw_spinlock_free(&ptdlsinfo->cmd_lock);
+ _rtw_spinlock_free(&ptdlsinfo->hdl_lock);
+
+ _rtw_memset(ptdlsinfo, 0, sizeof(struct tdls_info) );
+
+}
+
+void issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, struct sta_info *ptdls_sta, unsigned int power_mode)
+{
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ unsigned char *pframe;
+ struct rtw_ieee80211_hdr *pwlanhdr;
+ unsigned short *fctrl;
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ return;
+ }
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+ update_mgntframe_attrib(padapter, pattrib);
+
+ _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
+
+ pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
+ pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+
+ fctrl = &(pwlanhdr->frame_ctl);
+ *(fctrl) = 0;
+// SetToDs(fctrl);
+ if (power_mode)
+ {
+ SetPwrMgt(fctrl);
+ }
+
+ _rtw_memcpy(pwlanhdr->addr1, ptdls_sta->hwaddr, ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
+
+ ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
+ ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
+ pattrib->seqnum = ptdls_sta->sta_xmitpriv.txseq_tid[pattrib->priority];
+ SetSeqNum(pwlanhdr, pattrib->seqnum);
+
+ SetFrameSubType(pframe, WIFI_DATA_NULL);
+
+ pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
+ pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+
+ pattrib->last_txcmdsz = pattrib->pktlen;
+ dump_mgntframe(padapter, pmgntframe);
+
+ return;
+}
+
+s32 update_tdls_attrib(_adapter *padapter, struct pkt_attrib *pattrib)
+{
+
+ struct sta_info *psta = NULL;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct security_priv *psecuritypriv = &padapter->securitypriv;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct qos_priv *pqospriv= &pmlmepriv->qospriv;
+
+ s32 res=_SUCCESS;
+ sint bmcast;
+
+ bmcast = IS_MCAST(pattrib->ra);
+
+ psta = rtw_get_stainfo(pstapriv, pattrib->ra);
+ if (psta == NULL) {
+ res =_FAIL;
+ goto exit;
+ }
+
+ pattrib->mac_id = psta->mac_id;
+
+ pattrib->psta = psta;
+
+ pattrib->ack_policy = 0;
+ // get ether_hdr_len
+ pattrib->pkt_hdrlen = ETH_HLEN;//(pattrib->ether_type == 0x8100) ? (14 + 4 ): 14; //vlan tag
+
+ if (pqospriv->qos_option && psta->qos_option) {
+ pattrib->priority = 1; //tdls management frame should be AC_BK
+ pattrib->hdrlen = WLAN_HDR_A3_QOS_LEN;
+ pattrib->subtype = WIFI_QOS_DATA_TYPE;
+ } else {
+ pattrib->hdrlen = WLAN_HDR_A3_LEN;
+ pattrib->subtype = WIFI_DATA_TYPE;
+ pattrib->priority = 0;
+ }
+
+ if (psta->ieee8021x_blocked == _TRUE)
+ {
+ pattrib->encrypt = 0;
+ }
+ else
+ {
+ GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, bmcast);
+
+ switch(psecuritypriv->dot11AuthAlgrthm)
+ {
+ case dot11AuthAlgrthm_Open:
+ case dot11AuthAlgrthm_Shared:
+ case dot11AuthAlgrthm_Auto:
+ pattrib->key_idx = (u8)psecuritypriv->dot11PrivacyKeyIndex;
+ break;
+ case dot11AuthAlgrthm_8021X:
+ pattrib->key_idx = 0;
+ break;
+ default:
+ pattrib->key_idx = 0;
+ break;
+ }
+ }
+
+ switch (pattrib->encrypt)
+ {
+ case _WEP40_:
+ case _WEP104_:
+ pattrib->iv_len = 4;
+ pattrib->icv_len = 4;
+ break;
+ case _TKIP_:
+ pattrib->iv_len = 8;
+ pattrib->icv_len = 4;
+ if(padapter->securitypriv.busetkipkey==_FAIL)
+ {
+ res =_FAIL;
+ goto exit;
+ }
+ break;
+ case _AES_:
+ pattrib->iv_len = 8;
+ pattrib->icv_len = 8;
+ break;
+ default:
+ pattrib->iv_len = 0;
+ pattrib->icv_len = 0;
+ break;
+ }
+
+ if (pattrib->encrypt &&
+ ((padapter->securitypriv.sw_encrypt == _TRUE) || (psecuritypriv->hw_decrypted == _FALSE)))
+ {
+ pattrib->bswenc = _TRUE;
+ } else {
+ pattrib->bswenc = _FALSE;
+ }
+
+ //qos_en, ht_en, init rate, ,bw, ch_offset, sgi
+ pattrib->qos_en = psta->qos_option;
+ pattrib->ht_en = psta->htpriv.ht_option;
+ pattrib->raid = psta->raid;
+ pattrib->bwmode = psta->htpriv.bwmode;
+ pattrib->ch_offset = psta->htpriv.ch_offset;
+ pattrib->sgi= psta->htpriv.sgi;
+ pattrib->ampdu_en = _FALSE;
+
+ //if(pattrib->ht_en && psta->htpriv.ampdu_enable)
+ //{
+ // if(psta->htpriv.agg_enable_bitmap & BIT(pattrib->priority))
+ // pattrib->ampdu_en = _TRUE;
+ //}
+
+exit:
+
+ return res;
+}
+
+void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta)
+{
+ struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ _irqL irqL;
+
+ //free peer sta_info
+ _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
+ if(ptdlsinfo->sta_cnt != 0)
+ ptdlsinfo->sta_cnt--;
+ _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
+ if( ptdlsinfo->sta_cnt < (NUM_STA - 2) ) // -2: AP + BC/MC sta
+ {
+ ptdlsinfo->sta_maximum = _FALSE;
+ _rtw_memset( &ptdlsinfo->ss_record, 0x00, sizeof(struct tdls_ss_record) );
+ }
+ //ready to clear cam
+ if(ptdls_sta->mac_id!=0){
+ ptdlsinfo->clear_cam=ptdls_sta->mac_id;
+ rtw_setstakey_cmd(padapter, (u8 *)ptdls_sta, _TRUE, _TRUE);
+ }
+
+ if(ptdlsinfo->sta_cnt==0){
+ rtw_tdls_cmd(padapter, myid(&(padapter->eeprompriv)), TDLS_RS_RCR);
+ ptdlsinfo->setup_state=TDLS_STATE_NONE;
+ }
+ else
+ DBG_871X("Remain tdls sta:%02x\n", ptdlsinfo->sta_cnt);
+
+ rtw_free_stainfo(padapter, ptdls_sta);
+
+}
+
+// cam entry will be the same as mac_id
+void rtw_tdls_set_mac_id(struct tdls_info *ptdlsinfo, struct sta_info *ptdls_sta)
+{
+ if(ptdls_sta->mac_id==0)
+ {
+ ptdls_sta->mac_id = ptdlsinfo->macid_index;
+ if( (++ptdlsinfo->macid_index) > (NUM_STA -2) )
+ ptdlsinfo->macid_index= TDLS_INI_MACID_ENTRY;
+ }
+}
+
+//TDLS encryption(if needed) will always be CCMP
+void rtw_tdls_set_key(_adapter *adapter, struct rx_pkt_attrib *prx_pkt_attrib, struct sta_info *ptdls_sta)
+{
+ if(prx_pkt_attrib->encrypt)
+ {
+ ptdls_sta->dot118021XPrivacy=_AES_;
+ rtw_setstakey_cmd(adapter, (u8*)ptdls_sta, _TRUE, _TRUE);
+ }
+}
+
+void rtw_tdls_process_ht_cap(_adapter *adapter, struct sta_info *ptdls_sta, u8 *data, u8 Length)
+{
+ /* save HT capabilities in the sta object */
+ _rtw_memset(&ptdls_sta->htpriv.ht_cap, 0, sizeof(struct rtw_ieee80211_ht_cap));
+ if (data && Length >= sizeof(struct rtw_ieee80211_ht_cap) )
+ {
+ ptdls_sta->flags |= WLAN_STA_HT;
+
+ ptdls_sta->flags |= WLAN_STA_WME;
+
+ _rtw_memcpy(&ptdls_sta->htpriv.ht_cap, data, sizeof(struct rtw_ieee80211_ht_cap));
+
+ } else
+ ptdls_sta->flags &= ~WLAN_STA_HT;
+
+ if(ptdls_sta->flags & WLAN_STA_HT)
+ {
+ if(adapter->registrypriv.ht_enable == _TRUE)
+ {
+ ptdls_sta->htpriv.ht_option = _TRUE;
+ }
+ else
+ {
+ ptdls_sta->htpriv.ht_option = _FALSE;
+ ptdls_sta->stat_code = _STATS_FAILURE_;
+ }
+ }
+
+ //HT related cap
+ if(ptdls_sta->htpriv.ht_option)
+ {
+ //check if sta supports rx ampdu
+ if(adapter->registrypriv.ampdu_enable==1)
+ ptdls_sta->htpriv.ampdu_enable = _TRUE;
+
+ //check if sta support s Short GI
+ if(ptdls_sta->htpriv.ht_cap.cap_info & cpu_to_le16(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40))
+ {
+ ptdls_sta->htpriv.sgi = _TRUE;
+ }
+
+ // bwmode would still followed AP's setting
+ if(ptdls_sta->htpriv.ht_cap.cap_info & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH))
+ {
+ ptdls_sta->htpriv.bwmode = adapter->mlmeextpriv.cur_bwmode;
+ ptdls_sta->htpriv.ch_offset = adapter->mlmeextpriv.cur_ch_offset;
+ }
+ }
+}
+
+u8 *rtw_tdls_set_ht_cap(_adapter *padapter, u8 *pframe, struct pkt_attrib *pattrib)
+{
+ struct rtw_ieee80211_ht_cap ht_capie;
+ u8 rf_type;
+
+ //HT capabilities
+ _rtw_memset(&ht_capie, 0, sizeof(struct rtw_ieee80211_ht_cap));
+
+ ht_capie.cap_info = IEEE80211_HT_CAP_SUP_WIDTH |IEEE80211_HT_CAP_SGI_20 |IEEE80211_HT_CAP_SM_PS |
+ IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_TX_STBC |IEEE80211_HT_CAP_DSSSCCK40;
+
+ {
+ u32 rx_packet_offset, max_recvbuf_sz;
+ padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
+ padapter->HalFunc.GetHalDefVarHandler(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
+ if(max_recvbuf_sz-rx_packet_offset>(8191-256))
+ ht_capie.cap_info = ht_capie.cap_info |IEEE80211_HT_CAP_MAX_AMSDU;
+ }
+
+ ht_capie.ampdu_params_info = (IEEE80211_HT_CAP_AMPDU_FACTOR&0x03);
+
+ padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
+ switch(rf_type)
+ {
+ case RF_1T1R:
+ ht_capie.cap_info |= 0x0100;//RX STBC One spatial stream
+ _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_1R, 16);
+ break;
+
+ case RF_2T2R:
+ case RF_1T2R:
+ default:
+ ht_capie.cap_info|= 0x0200;//RX STBC two spatial stream
+ _rtw_memcpy(ht_capie.supp_mcs_set, MCS_rate_2R, 16);
+ break;
+ }
+
+ return(rtw_set_ie(pframe, _HT_CAPABILITY_IE_,
+ sizeof(struct rtw_ieee80211_ht_cap), (unsigned char*)&ht_capie, &(pattrib->pktlen)));
+}
+
+u8 *rtw_tdls_set_sup_ch(struct mlme_ext_priv *pmlmeext, u8 *pframe, struct pkt_attrib *pattrib)
+{
+ u8 sup_ch[ 30 * 2 ] = { 0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
+ do{
+ if( pmlmeext->channel_set[sup_ch_idx].ChannelNum <= 14 )
+ {
+ sup_ch[0] = 1; //First channel number
+ sup_ch[1] = pmlmeext->channel_set[sup_ch_idx].ChannelNum; //Number of channel
+ }
+ else
+ {
+ sup_ch[idx_5g++] = pmlmeext->channel_set[sup_ch_idx].ChannelNum;
+ sup_ch[idx_5g++] = 1;
+ }
+
+ sup_ch_idx++;
+ }
+ while( pmlmeext->channel_set[sup_ch_idx].ChannelNum != 0 );
+ return(rtw_set_ie(pframe, _SUPPORTED_CH_IE_, idx_5g, sup_ch, &(pattrib->pktlen)));
+}
+
+#ifdef CONFIG_WFD
+void rtw_tdls_process_wfd_ie(struct tdls_info *ptdlsinfo, u8 *ptr, u8 length)
+{
+ u8 wfd_ie[ 128 ] = { 0x00 };
+ u32 wfd_ielen = 0;
+ u32 wfd_offset = 0;
+ // Try to get the TCP port information when receiving the negotiation response.
+ //
+
+ wfd_offset = 0;
+ wfd_offset = rtw_get_wfd_ie( ptr + wfd_offset, length - wfd_offset, wfd_ie, &wfd_ielen );
+ while( wfd_offset )
+ {
+ u8 attr_content[ 10 ] = { 0x00 };
+ u32 attr_contentlen = 0;
+ int i;
+
+ DBG_871X( "[%s] WFD IE Found!!\n", __FUNCTION__ );
+ rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, attr_content, &attr_contentlen);
+ if ( attr_contentlen )
+ {
+ ptdlsinfo->wfd_info->peer_rtsp_ctrlport = RTW_GET_BE16( attr_content + 2 );
+ DBG_871X( "[%s] Peer PORT NUM = %d\n", __FUNCTION__, ptdlsinfo->wfd_info->peer_rtsp_ctrlport );
+ }
+
+ _rtw_memset( attr_content, 0x00, 10);
+ attr_contentlen = 0;
+ rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_LOCAL_IP_ADDR, attr_content, &attr_contentlen);
+ if ( attr_contentlen )
+ {
+ _rtw_memcpy(ptdlsinfo->wfd_info->peer_ip_address, ( attr_content + 1 ), 4);
+ DBG_871X( "[%s] Peer IP = %02u.%02u.%02u.%02u \n", __FUNCTION__,
+ ptdlsinfo->wfd_info->peer_ip_address[0], ptdlsinfo->wfd_info->peer_ip_address[1],
+ ptdlsinfo->wfd_info->peer_ip_address[2], ptdlsinfo->wfd_info->peer_ip_address[3]
+ );
+ }
+ wfd_offset = rtw_get_wfd_ie( ptr + wfd_offset, length - wfd_offset, wfd_ie, &wfd_ielen );
+ }
+}
+
+void issue_tunneled_probe_req(_adapter *padapter)
+{
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+ u8 baddr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+
+ DBG_871X("[%s]\n", __FUNCTION__);
+
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ return;
+ }
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+
+ pmgntframe->frame_tag = DATA_FRAMETAG;
+ pattrib->ether_type = 0x890d;
+ pattrib->pctrl =0;
+
+ _rtw_memcpy(pattrib->dst, baddr, ETH_ALEN);
+
+ _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
+
+ _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
+ _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
+
+ update_tdls_attrib(padapter, pattrib);
+ pattrib->qsel=pattrib->priority;
+ if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TUNNELED_PROBE_REQ) != _SUCCESS) {
+ rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
+ rtw_free_xmitframe(pxmitpriv, pmgntframe);
+ goto exit;
+ }
+ rtw_dump_xframe(padapter, pmgntframe);
+
+exit:
+
+ return;
+}
+
+void issue_tunneled_probe_rsp(_adapter *padapter, union recv_frame *precv_frame)
+{
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+ struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
+
+ DBG_871X("[%s]\n", __FUNCTION__);
+
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ return;
+ }
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+
+ pmgntframe->frame_tag = DATA_FRAMETAG;
+ pattrib->ether_type = 0x890d;
+ pattrib->pctrl =0;
+
+ _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
+
+ _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
+
+ _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
+ _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
+
+ update_tdls_attrib(padapter, pattrib);
+ pattrib->qsel=pattrib->priority;
+ if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TUNNELED_PROBE_RSP) != _SUCCESS) {
+ rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
+ rtw_free_xmitframe(pxmitpriv, pmgntframe);
+ goto exit;
+ }
+ rtw_dump_xframe(padapter, pmgntframe);
+
+exit:
+
+ return;
+}
+#endif //CONFIG_WFD
+
+void issue_tdls_setup_req(_adapter *padapter, u8 *mac_addr)
+{
+ struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct sta_info *ptdls_sta= NULL;
+ _irqL irqL;
+ static u8 dialogtoken = 0;
+ u32 timeout_interval= TPK_RESEND_COUNT * 1000; //retry timer should set at least 301 sec, using TPK_count counting 301 times.
+
+ if(ptdlsinfo->ap_prohibited == _TRUE)
+ goto exit;
+
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ return;
+ }
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+
+ pmgntframe->frame_tag = DATA_FRAMETAG;
+ pattrib->ether_type = 0x890d;
+ pattrib->pctrl =0;
+
+ _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
+ _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
+
+ _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
+ _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
+
+ update_tdls_attrib(padapter, pattrib);
+
+ //init peer sta_info
+ ptdls_sta = rtw_get_stainfo(pstapriv, mac_addr);
+ if(ptdls_sta==NULL)
+ {
+ ptdls_sta = rtw_alloc_stainfo(pstapriv, mac_addr);
+ if(ptdls_sta)
+ {
+ _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
+ if(!(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE))
+ ptdlsinfo->sta_cnt++;
+ _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
+ if( ptdlsinfo->sta_cnt == (NUM_STA - 2) ) // -2: AP + BC/MC sta
+ {
+ ptdlsinfo->sta_maximum = _TRUE;
+ }
+ }
+ else
+ {
+ rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
+ rtw_free_xmitframe(pxmitpriv, pmgntframe);
+ goto exit;
+ }
+ }
+
+ if(ptdls_sta){
+ ptdls_sta->tdls_sta_state |= TDLS_RESPONDER_STATE;
+ //for tdls; ptdls_sta->aid is used to fill dialogtoken
+ ptdls_sta->dialog = dialogtoken;
+ dialogtoken = (dialogtoken+1)%256;
+ ptdls_sta->TDLS_PeerKey_Lifetime = timeout_interval;
+ _set_timer( &ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME );
+ }
+
+ pattrib->qsel=pattrib->priority;
+ if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_REQUEST) !=_SUCCESS ){
+ rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
+ rtw_free_xmitframe(pxmitpriv, pmgntframe);
+ goto exit;
+ }
+ rtw_dump_xframe(padapter, pmgntframe);
+
+exit:
+
+ return;
+}
+
+void issue_tdls_teardown(_adapter *padapter, u8 *mac_addr)
+{
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct sta_info *ptdls_sta=NULL;
+ _irqL irqL;
+
+ ptdls_sta = rtw_get_stainfo(pstapriv, mac_addr);
+ if(ptdls_sta==NULL){
+ DBG_871X("issue tdls teardown unsuccessful\n");
+ return;
+ }else{
+ ptdls_sta->tdls_sta_state=TDLS_STATE_NONE;
+ }
+
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ return;
+ }
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+
+ pmgntframe->frame_tag = DATA_FRAMETAG;
+ pattrib->ether_type = 0x890d;
+ pattrib->pctrl =0;
+
+ _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
+ _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
+
+ _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
+ _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
+
+ update_tdls_attrib(padapter, pattrib);
+ pattrib->qsel=pattrib->priority;
+ if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_TEARDOWN) != _SUCCESS) {
+ rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
+ rtw_free_xmitframe(pxmitpriv, pmgntframe);
+ goto exit;
+ }
+ rtw_dump_xframe(padapter, pmgntframe);
+
+ if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE){
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
+ }
+
+ if( ptdls_sta->timer_flag == 1 )
+ {
+ _enter_critical_bh(&(padapter->tdlsinfo.hdl_lock), &irqL);
+ ptdls_sta->timer_flag = 2;
+ _exit_critical_bh(&(padapter->tdlsinfo.hdl_lock), &irqL);
+ }
+ else
+ rtw_tdls_cmd(padapter, mac_addr, TDLS_FREE_STA );
+
+
+exit:
+
+ return;
+}
+
+void issue_tdls_dis_req(_adapter *padapter, u8 *mac_addr)
+{
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+ u8 baddr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ return;
+ }
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+
+ pmgntframe->frame_tag = DATA_FRAMETAG;
+ pattrib->ether_type = 0x890d;
+ pattrib->pctrl =0;
+
+ if(mac_addr == NULL)
+ _rtw_memcpy(pattrib->dst, baddr, ETH_ALEN);
+ else
+ _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
+
+ _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
+
+ _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
+ _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
+
+ update_tdls_attrib(padapter, pattrib);
+ pattrib->qsel=pattrib->priority;
+ if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_DISCOVERY_REQUEST) != _SUCCESS) {
+ rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
+ rtw_free_xmitframe(pxmitpriv, pmgntframe);
+ goto exit;
+ }
+ rtw_dump_xframe(padapter, pmgntframe);
+ DBG_871X("issue tdls dis req\n");
+
+exit:
+
+ return;
+}
+
+void issue_tdls_setup_rsp(_adapter *padapter, union recv_frame *precv_frame)
+{
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
+ _irqL irqL;
+
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ return;
+ }
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+
+ pmgntframe->frame_tag = DATA_FRAMETAG;
+ pattrib->ether_type = 0x890d;
+ pattrib->pctrl =0;
+
+ _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
+ _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
+
+ _rtw_memcpy(pattrib->ra, rx_pkt_pattrib->bssid, ETH_ALEN);
+ _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
+
+ update_tdls_attrib(padapter, pattrib);
+ pattrib->qsel=pattrib->priority;
+ if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_RESPONSE) != _SUCCESS) {
+ rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
+ rtw_free_xmitframe(pxmitpriv, pmgntframe);
+ goto exit;
+ }
+ rtw_dump_xframe(padapter, pmgntframe);
+
+exit:
+
+ return;
+
+}
+
+void issue_tdls_setup_cfm(_adapter *padapter, union recv_frame *precv_frame)
+{
+ struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+ struct sta_info *ptdls_sta=NULL;
+ _irqL irqL;
+
+ struct rx_pkt_attrib *rx_pkt_pattrib = & precv_frame->u.hdr.attrib;
+
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ return;
+ }
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+
+ pmgntframe->frame_tag = DATA_FRAMETAG;
+ pattrib->ether_type = 0x890d;
+ pattrib->pctrl =0;
+
+ _rtw_memcpy(pattrib->dst, rx_pkt_pattrib->src, ETH_ALEN);
+ _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
+
+ _rtw_memcpy(pattrib->ra, rx_pkt_pattrib->bssid, ETH_ALEN);
+ _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
+
+ update_tdls_attrib(padapter, pattrib);
+ pattrib->qsel=pattrib->priority;
+ if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_SETUP_CONFIRM) != _SUCCESS) {
+ rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
+ rtw_free_xmitframe(pxmitpriv, pmgntframe);
+ goto exit;
+ }
+
+ rtw_dump_xframe(padapter, pmgntframe);
+
+exit:
+
+ return;
+
+}
+
+//TDLS Discovery Response frame is a management action frame
+void issue_tdls_dis_rsp(_adapter *padapter, union recv_frame *precv_frame, u8 dialog)
+{
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ unsigned char *pframe;
+ struct rtw_ieee80211_hdr *pwlanhdr;
+ unsigned short *fctrl;
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+
+ struct rx_pkt_attrib *rx_pkt_pattrib = &precv_frame->u.hdr.attrib;
+
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ return;
+ }
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+ update_mgntframe_attrib(padapter, pattrib);
+
+ _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
+
+ pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
+ pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+
+ fctrl = &(pwlanhdr->frame_ctl);
+ *(fctrl) = 0;
+
+ // unicast probe request frame
+ _rtw_memcpy(pwlanhdr->addr1, rx_pkt_pattrib->src, ETH_ALEN);
+ _rtw_memcpy(pattrib->dst, pwlanhdr->addr1, ETH_ALEN);
+
+ _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+ _rtw_memcpy(pattrib->src, pwlanhdr->addr2, ETH_ALEN);
+
+ _rtw_memcpy(pwlanhdr->addr3, rx_pkt_pattrib->bssid, ETH_ALEN);
+ _rtw_memcpy(pattrib->ra, pwlanhdr->addr3, ETH_ALEN);
+
+ SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
+ pmlmeext->mgnt_seq++;
+ SetFrameSubType(pframe, WIFI_ACTION);
+
+ pframe += sizeof (struct rtw_ieee80211_hdr_3addr);
+ pattrib->pktlen = sizeof (struct rtw_ieee80211_hdr_3addr);
+
+ rtw_build_tdls_dis_rsp_ies(padapter, pmgntframe, pframe, dialog);
+
+ pattrib->nr_frags = 1;
+ pattrib->last_txcmdsz = pattrib->pktlen;
+
+ dump_mgntframe(padapter, pmgntframe);
+
+ return;
+}
+
+void issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *ptdls_sta)
+{
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+
+ static u8 dialogtoken=0;
+
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ return;
+ }
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+
+ pmgntframe->frame_tag = DATA_FRAMETAG;
+ pattrib->ether_type = 0x890d;
+ pattrib->pctrl =0;
+
+ _rtw_memcpy(pattrib->dst, ptdls_sta->hwaddr, ETH_ALEN);
+ _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
+
+ _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
+ _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
+
+ //for tdls; pattrib->nr_frags is used to fill dialogtoken
+ ptdls_sta->dialog = dialogtoken;
+ dialogtoken = (dialogtoken+1)%256;
+ //PTI frame's priority should be AC_VO
+ pattrib->priority = 7;
+
+ update_tdls_attrib(padapter, pattrib);
+ pattrib->qsel=pattrib->priority;
+ if (rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_PEER_TRAFFIC_INDICATION) != _SUCCESS) {
+ rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
+ rtw_free_xmitframe(pxmitpriv, pmgntframe);
+ goto exit;
+ }
+ rtw_dump_xframe(padapter, pmgntframe);
+
+exit:
+
+ return;
+}
+
+void issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr)
+{
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ return;
+ }
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+
+ pmgntframe->frame_tag = DATA_FRAMETAG;
+ pattrib->ether_type = 0x890d;
+ pattrib->pctrl =0;
+
+ _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
+ _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
+
+ _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
+ _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
+
+ update_tdls_attrib(padapter, pattrib);
+
+ pattrib->qsel=pattrib->priority;
+ if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_CHANNEL_SWITCH_REQUEST) !=_SUCCESS ){
+ rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
+ rtw_free_xmitframe(pxmitpriv, pmgntframe);
+ goto exit;
+ }
+ rtw_dump_xframe(padapter, pmgntframe);
+
+exit:
+
+ return;
+}
+
+void issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr)
+{
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+
+ _irqL irqL;
+
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ return;
+ }
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+
+ pmgntframe->frame_tag = DATA_FRAMETAG;
+ pattrib->ether_type = 0x890d;
+ pattrib->pctrl =0;
+
+ _rtw_memcpy(pattrib->dst, mac_addr, ETH_ALEN);
+ _rtw_memcpy(pattrib->src, myid(&(padapter->eeprompriv)), ETH_ALEN);
+
+ _rtw_memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
+ _rtw_memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
+
+ update_tdls_attrib(padapter, pattrib);
+
+ pattrib->qsel=pattrib->priority;
+/*
+ _enter_critical_bh(&pxmitpriv->lock, &irqL);
+ if(xmitframe_enqueue_for_tdls_sleeping_sta(padapter, pmgntframe)==_TRUE){
+ _exit_critical_bh(&pxmitpriv->lock, &irqL);
+ return _FALSE;
+ }
+*/
+ if(rtw_xmit_tdls_coalesce(padapter, pmgntframe, TDLS_CHANNEL_SWITCH_RESPONSE) !=_SUCCESS ){
+ rtw_free_xmitbuf(pxmitpriv,pmgntframe->pxmitbuf);
+ rtw_free_xmitframe(pxmitpriv, pmgntframe);
+ goto exit;
+ }
+ rtw_dump_xframe(padapter, pmgntframe);
+
+exit:
+
+ return;
+}
+
+sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame)
+{
+ struct sta_info *ptdls_sta = NULL, *psta = rtw_get_stainfo(&(adapter->stapriv), get_bssid(&(adapter->mlmepriv)));
+ struct recv_priv *precvpriv = &(adapter->recvpriv);
+ u8 *ptr = precv_frame->u.hdr.rx_data, *psa;
+ struct rx_pkt_attrib *pattrib = &(precv_frame->u.hdr.attrib);
+ struct tdls_info *ptdlsinfo = &(adapter->tdlsinfo);
+ u8 empty_addr[ETH_ALEN] = { 0x00 };
+ int UndecoratedSmoothedPWDB;
+
+
+ //WFDTDLS: for sigma test, not to setup direct link automatically
+ ptdlsinfo->dev_discovered = 1;
+
+#ifdef CONFIG_TDLS_AUTOSETUP
+ psa = get_sa(ptr);
+ ptdls_sta = rtw_get_stainfo(&(adapter->stapriv), psa);
+
+ if(ptdls_sta != NULL)
+ {
+ ptdls_sta->tdls_sta_state |= TDLS_ALIVE_STATE;
+
+ //Record the tdls sta with lowest signal strength
+ if( (ptdlsinfo->sta_maximum == _TRUE) && (ptdls_sta->alive_count >= 1) )
+ {
+ if( _rtw_memcmp(ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN) )
+ {
+ _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);
+ ptdlsinfo->ss_record.RxPWDBAll = pattrib->RxPWDBAll;
+ }
+ else
+ {
+ if( ptdlsinfo->ss_record.RxPWDBAll < pattrib->RxPWDBAll )
+ {
+ _rtw_memcpy(ptdlsinfo->ss_record.macaddr, psa, ETH_ALEN);
+ ptdlsinfo->ss_record.RxPWDBAll = pattrib->RxPWDBAll;
+ }
+ }
+ }
+
+ }
+ else
+ {
+ if( ptdlsinfo->sta_maximum == _TRUE)
+ {
+ if( _rtw_memcmp( ptdlsinfo->ss_record.macaddr, empty_addr, ETH_ALEN ) )
+ {
+ //All traffics are busy, do not set up another direct link.
+ return _FAIL;
+ }
+ else
+ {
+ if( pattrib->RxPWDBAll > ptdlsinfo->ss_record.RxPWDBAll )
+ {
+ issue_tdls_teardown(adapter, ptdlsinfo->ss_record.macaddr);
+ }
+ else
+ {
+ return _FAIL;
+ }
+ }
+ }
+
+ adapter->HalFunc.GetHalDefVarHandler(adapter, HAL_DEF_UNDERCORATEDSMOOTHEDPWDB, &UndecoratedSmoothedPWDB);
+
+ if( pattrib->RxPWDBAll + TDLS_SIGNAL_THRESH >= UndecoratedSmoothedPWDB);
+ {
+ DBG_871X("pattrib->RxPWDBAll=%d, pdmpriv->UndecoratedSmoothedPWDB=%d\n", pattrib->RxPWDBAll, UndecoratedSmoothedPWDB);
+ issue_tdls_setup_req(adapter, psa);
+ }
+ }
+#endif //CONFIG_TDLS_AUTOSETUP
+
+ return _SUCCESS;
+}
+
+sint On_TDLS_Setup_Req(_adapter *adapter, union recv_frame *precv_frame)
+{
+ struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
+ u8 *psa, *pmyid;
+ struct sta_info *ptdls_sta= NULL;
+ struct sta_priv *pstapriv = &adapter->stapriv;
+ u8 *ptr = precv_frame->u.hdr.rx_data;
+ struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
+ struct security_priv *psecuritypriv = &adapter->securitypriv;
+ _irqL irqL;
+ struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
+ u8 *prsnie, *ppairwise_cipher;
+ u8 i, k, pairwise_count;
+ u8 ccmp_have=0, rsnie_have=0;
+ u16 j;
+ u8 SNonce[32];
+ u32 *timeout_interval;
+ sint parsing_length; //frame body length, without icv_len
+ PNDIS_802_11_VARIABLE_IEs pIE;
+ u8 FIXED_IE = 5;
+ unsigned char supportRate[16];
+ int supportRateNum = 0;
+
+ psa = get_sa(ptr);
+ ptdls_sta = rtw_get_stainfo(pstapriv, psa);
+
+ pmyid=myid(&(adapter->eeprompriv));
+ ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
+ parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
+ -prx_pkt_attrib->hdrlen
+ -prx_pkt_attrib->iv_len
+ -prx_pkt_attrib->icv_len
+ -LLC_HEADER_SIZE
+ -ETH_TYPE_LEN
+ -PAYLOAD_TYPE_LEN
+ -FIXED_IE;
+
+ if(ptdlsinfo->ap_prohibited == _TRUE)
+ {
+ goto exit;
+ }
+
+ if(ptdls_sta==NULL){
+ ptdls_sta = rtw_alloc_stainfo(pstapriv, psa);
+ }else{
+ if(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE){
+ //If the direct link is already set up
+ //Process as re-setup after tear down
+ DBG_871X("re-setup a direct link\n");
+ }
+ //already receiving TDLS setup request
+ else if(ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE){
+ DBG_871X("receive duplicated TDLS setup request frame in handshaking\n");
+ goto exit;
+ }
+ //When receiving and sending setup_req to the same link at the same time, STA with higher MAC_addr would be initiator
+ //following is to check out MAC_addr
+ else if(ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE){
+ DBG_871X("receive setup_req after sending setup_req\n");
+ for (i=0;i<6;i++){
+ if(*(pmyid+i)==*(psa+i)){
+ }
+ else if(*(pmyid+i)>*(psa+i)){
+ goto exit;
+ }else if(*(pmyid+i)<*(psa+i)){
+ ptdls_sta->tdls_sta_state=TDLS_INITIATOR_STATE;
+ break;
+ }
+ }
+ }
+ }
+
+ if(ptdls_sta)
+ {
+ ptdls_sta->dialog = *(ptr+2); //copy dialog token
+ ptdls_sta->stat_code = 0;
+
+ //parsing information element
+ for(j=FIXED_IE; j<parsing_length;){
+
+ pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
+
+ switch (pIE->ElementID)
+ {
+ case _SUPPORTEDRATES_IE_:
+ _rtw_memcpy(supportRate, pIE->data, pIE->Length);
+ supportRateNum = pIE->Length;
+ break;
+ case _COUNTRY_IE_:
+ break;
+ case _EXT_SUPPORTEDRATES_IE_:
+ if(supportRateNum<=sizeof(supportRate))
+ {
+ _rtw_memcpy(supportRate+supportRateNum, pIE->data, pIE->Length);
+ supportRateNum += pIE->Length;
+ }
+ break;
+ case _SUPPORTED_CH_IE_:
+ break;
+ case _RSN_IE_2_:
+ rsnie_have=1;
+ if(prx_pkt_attrib->encrypt){
+ prsnie=(u8*)pIE;
+ //check whether initiator STA has CCMP pairwise_cipher.
+ ppairwise_cipher=prsnie+10;
+ _rtw_memcpy(&pairwise_count, (u16*)(ppairwise_cipher-2), 1);
+ for(k=0;k<pairwise_count;k++){
+ if(_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4)==_TRUE)
+ ccmp_have=1;
+ }
+ if(ccmp_have==0){
+ //invalid contents of RSNIE
+ ptdls_sta->stat_code=72;
+ }
+ }
+ break;
+ case _EXT_CAP_IE_:
+ break;
+ case _VENDOR_SPECIFIC_IE_:
+ break;
+ case _FTIE_:
+ if(prx_pkt_attrib->encrypt)
+ _rtw_memcpy(SNonce, (ptr+j+52), 32);
+ break;
+ case _TIMEOUT_ITVL_IE_:
+ if(prx_pkt_attrib->encrypt)
+ timeout_interval = (u32 *)(ptr+j+3);
+ break;
+ case _RIC_Descriptor_IE_:
+ break;
+ case _HT_CAPABILITY_IE_:
+ rtw_tdls_process_ht_cap(adapter, ptdls_sta, pIE->data, pIE->Length);
+ break;
+ case EID_BSSCoexistence:
+ break;
+ case _LINK_ID_IE_:
+ if(_rtw_memcmp(get_bssid(pmlmepriv), pIE->data, 6) == _FALSE)
+ {
+ //not in the same BSS
+ ptdls_sta->stat_code=7;
+ }
+ break;
+ default:
+ break;
+ }
+
+ j += (pIE->Length + 2);
+
+ }
+
+ //update station supportRate
+ ptdls_sta->bssratelen = supportRateNum;
+ _rtw_memcpy(ptdls_sta->bssrateset, supportRate, supportRateNum);
+
+ //check status code
+ //if responder STA has/hasn't security on AP, but request hasn't/has RSNIE, it should reject
+ if(ptdls_sta->stat_code == 0 )
+ {
+ if(rsnie_have && (prx_pkt_attrib->encrypt==0)){
+ //security disabled
+ ptdls_sta->stat_code = 5;
+ }else if(rsnie_have==0 && (prx_pkt_attrib->encrypt)){
+ //request haven't RSNIE
+ ptdls_sta->stat_code = 38;
+ }
+
+#ifdef CONFIG_WFD
+ //WFD test plan version 0.18.2 test item 5.1.5
+ //SoUT does not use TDLS if AP uses weak security
+ if ( adapter->wdinfo.wfd_tdls_enable )
+ {
+ if(rsnie_have && (prx_pkt_attrib->encrypt != _AES_))
+ {
+ ptdls_sta->stat_code = 5;
+ }
+ }
+#endif //CONFIG_WFD
+ }
+
+ ptdls_sta->tdls_sta_state|= TDLS_INITIATOR_STATE;
+ if(prx_pkt_attrib->encrypt){
+ _rtw_memcpy(ptdls_sta->SNonce, SNonce, 32);
+ _rtw_memcpy(&(ptdls_sta->TDLS_PeerKey_Lifetime), timeout_interval, 4);
+ }
+ _enter_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
+ if(!(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE))
+ ptdlsinfo->sta_cnt++;
+ _exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
+ if( ptdlsinfo->sta_cnt == (NUM_STA - 2) ) // -2: AP + BC/MC sta
+ {
+ ptdlsinfo->sta_maximum = _TRUE;
+ }
+
+#ifdef CONFIG_WFD
+ rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length - FIXED_IE);
+#endif // CONFIG_WFD
+
+ }
+ else
+ {
+ goto exit;
+ }
+
+ issue_tdls_setup_rsp(adapter, precv_frame);
+
+ if(ptdls_sta->stat_code==0)
+ {
+ _set_timer( &ptdls_sta->handshake_timer, TDLS_HANDSHAKE_TIME);
+ }
+ else //status code!=0 ; setup unsuccess
+ {
+ free_tdls_sta(adapter, ptdls_sta);
+ }
+
+exit:
+
+ return _FAIL;
+}
+
+sint On_TDLS_Setup_Rsp(_adapter *adapter, union recv_frame *precv_frame)
+{
+ struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
+ struct sta_info *ptdls_sta= NULL;
+ struct sta_priv *pstapriv = &adapter->stapriv;
+ u8 *ptr = precv_frame->u.hdr.rx_data;
+ _irqL irqL;
+ struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
+ u8 *psa;
+ u16 stat_code;
+ sint parsing_length; //frame body length, without icv_len
+ PNDIS_802_11_VARIABLE_IEs pIE;
+ u8 FIXED_IE =7;
+ u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic, *ppairwise_cipher;
+ u16 pairwise_count, j, k;
+ u8 verify_ccmp=0;
+ unsigned char supportRate[16];
+ int supportRateNum = 0;
+
+ psa = get_sa(ptr);
+ ptdls_sta = rtw_get_stainfo(pstapriv, psa);
+
+ if ( NULL == ptdls_sta )
+ {
+ return _FAIL;
+ }
+
+ ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
+ parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
+ -prx_pkt_attrib->hdrlen
+ -prx_pkt_attrib->iv_len
+ -prx_pkt_attrib->icv_len
+ -LLC_HEADER_SIZE
+ -TYPE_LENGTH_FIELD_SIZE
+ -1
+ -FIXED_IE;
+
+ _rtw_memcpy(&stat_code, ptr+2, 2);
+
+ if(stat_code!=0)
+ {
+ DBG_871X( "[%s] status_code = %d, free_tdls_sta\n", __FUNCTION__, stat_code );
+ free_tdls_sta(adapter, ptdls_sta);
+ return _FAIL;
+ }
+
+ stat_code = 0;
+
+ //parsing information element
+ for(j=FIXED_IE; j<parsing_length;)
+ {
+ pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
+
+ switch (pIE->ElementID)
+ {
+ case _SUPPORTEDRATES_IE_:
+ _rtw_memcpy(supportRate, pIE->data, pIE->Length);
+ supportRateNum = pIE->Length;
+ break;
+ case _COUNTRY_IE_:
+ break;
+ case _EXT_SUPPORTEDRATES_IE_:
+ if(supportRateNum<=sizeof(supportRate))
+ {
+ _rtw_memcpy(supportRate+supportRateNum, pIE->data, pIE->Length);
+ supportRateNum += pIE->Length;
+ }
+ break;
+ case _SUPPORTED_CH_IE_:
+ break;
+ case _RSN_IE_2_:
+ prsnie=(u8*)pIE;
+ //check whether responder STA has CCMP pairwise_cipher.
+ ppairwise_cipher=prsnie+10;
+ _rtw_memcpy(&pairwise_count, (u16*)(ppairwise_cipher-2), 2);
+ for(k=0;k<pairwise_count;k++){
+ if(_rtw_memcmp( ppairwise_cipher+4*k, RSN_CIPHER_SUITE_CCMP, 4)==_TRUE)
+ verify_ccmp=1;
+ }
+ case _EXT_CAP_IE_:
+ break;
+ case _VENDOR_SPECIFIC_IE_:
+ break;
+ case _FTIE_:
+ pftie=(u8*)pIE;
+ _rtw_memcpy(ptdls_sta->ANonce, (ptr+j+20), 32);
+ break;
+ case _TIMEOUT_ITVL_IE_:
+ ptimeout_ie=(u8*)pIE;
+ break;
+ case _RIC_Descriptor_IE_:
+ break;
+ case _HT_CAPABILITY_IE_:
+ rtw_tdls_process_ht_cap(adapter, ptdls_sta, pIE->data, pIE->Length);
+ break;
+ case EID_BSSCoexistence:
+ break;
+ case _LINK_ID_IE_:
+ plinkid_ie=(u8*)pIE;
+ break;
+ default:
+ break;
+ }
+
+ j += (pIE->Length + 2);
+
+ }
+
+ //update station supportRate
+ ptdls_sta->bssratelen = supportRateNum;
+ _rtw_memcpy(ptdls_sta->bssrateset, supportRate, supportRateNum);
+
+#ifdef CONFIG_WFD
+ rtw_tdls_process_wfd_ie(ptdlsinfo, ptr + FIXED_IE, parsing_length - FIXED_IE);
+#endif // CONFIG_WFD
+
+ if(stat_code != 0)
+ {
+ ptdls_sta->stat_code = stat_code;
+ }
+ else
+ {
+ if(prx_pkt_attrib->encrypt)
+ {
+ if(verify_ccmp==1)
+ {
+ wpa_tdls_generate_tpk(adapter, ptdls_sta);
+ ptdls_sta->stat_code=0;
+ if(tdls_verify_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie)==0) //0: Invalid, 1: valid
+ {
+ free_tdls_sta(adapter, ptdls_sta);
+ return _FAIL;
+ }
+ }
+ else
+ {
+ ptdls_sta->stat_code=72; //invalide contents of RSNIE
+ }
+
+ }else{
+ ptdls_sta->stat_code=0;
+ }
+ }
+
+ DBG_871X("issue_tdls_setup_cfm\n");
+ issue_tdls_setup_cfm(adapter, precv_frame);
+
+ if(ptdls_sta->stat_code==0)
+ {
+ ptdlsinfo->setup_state = TDLS_LINKED_STATE;
+
+ if( ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE )
+ {
+ ptdls_sta->tdls_sta_state |= TDLS_LINKED_STATE;
+ _cancel_timer_ex( &ptdls_sta->handshake_timer);
+#ifdef CONFIG_TDLS_AUTOCHECKALIVE
+ _set_timer( &ptdls_sta->alive_timer1, TDLS_ALIVE_TIMER_PH1);
+#endif //CONFIG_TDLS_AUTOSETUP
+ }
+
+ rtw_tdls_set_mac_id(ptdlsinfo, ptdls_sta);
+ rtw_tdls_set_key(adapter, prx_pkt_attrib, ptdls_sta);
+
+ rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_WRCR);
+
+ }
+ else //status code!=0 ; setup unsuccessful
+ {
+ free_tdls_sta(adapter, ptdls_sta);
+ }
+
+ return _FAIL;
+
+}
+
+sint On_TDLS_Setup_Cfm(_adapter *adapter, union recv_frame *precv_frame)
+{
+ struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
+ struct sta_info *ptdls_sta= NULL;
+ struct sta_priv *pstapriv = &adapter->stapriv;
+ u8 *ptr = precv_frame->u.hdr.rx_data;
+ _irqL irqL;
+ struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
+ u8 *psa;
+ u16 stat_code;
+ sint parsing_length;
+ PNDIS_802_11_VARIABLE_IEs pIE;
+ u8 FIXED_IE =5;
+ u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic, *ppairwise_cipher;
+ u16 j, pairwise_count;
+
+ psa = get_sa(ptr);
+ ptdls_sta = rtw_get_stainfo(pstapriv, psa);
+
+ ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
+ parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
+ -prx_pkt_attrib->hdrlen
+ -prx_pkt_attrib->iv_len
+ -prx_pkt_attrib->icv_len
+ -LLC_HEADER_SIZE
+ -ETH_TYPE_LEN
+ -PAYLOAD_TYPE_LEN
+ -FIXED_IE;
+ _rtw_memcpy(&stat_code, ptr+2, 2);
+
+ if(stat_code!=0){
+ DBG_871X( "[%s] stat_code = %d\n, free_tdls_sta", __FUNCTION__, stat_code );
+ free_tdls_sta(adapter, ptdls_sta);
+ return _FAIL;
+ }
+
+ if(prx_pkt_attrib->encrypt){
+ //parsing information element
+ for(j=FIXED_IE; j<parsing_length;){
+
+ pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
+
+ switch (pIE->ElementID)
+ {
+ case _RSN_IE_2_:
+ prsnie=(u8*)pIE;
+ break;
+ case _VENDOR_SPECIFIC_IE_:
+ break;
+ case _FTIE_:
+ pftie=(u8*)pIE;
+ break;
+ case _TIMEOUT_ITVL_IE_:
+ ptimeout_ie=(u8*)pIE;
+ break;
+ case _HT_EXTRA_INFO_IE_:
+ break;
+ case _LINK_ID_IE_:
+ plinkid_ie=(u8*)pIE;
+ break;
+ default:
+ break;
+ }
+
+ j += (pIE->Length + 2);
+
+ }
+
+ //verify mic in FTIE MIC field
+ if(tdls_verify_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie)==0){ //0: Invalid, 1: Valid
+ free_tdls_sta(adapter, ptdls_sta);
+ return _FAIL;
+ }
+
+ }
+
+ ptdlsinfo->setup_state = TDLS_LINKED_STATE;
+ if( ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE )
+ {
+ ptdls_sta->tdls_sta_state|=TDLS_LINKED_STATE;
+ _cancel_timer_ex( &ptdls_sta->handshake_timer);
+#ifdef CONFIG_TDLS_AUTOCHECKALIVE
+ _set_timer( &ptdls_sta->alive_timer1, TDLS_ALIVE_TIMER_PH1);
+#endif //CONFIG_TDLS_AUTOCHECKALIVE
+ }
+
+ rtw_tdls_set_mac_id(ptdlsinfo, ptdls_sta);
+ rtw_tdls_set_key(adapter, prx_pkt_attrib, ptdls_sta);
+
+ rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_WRCR);
+
+ return _FAIL;
+
+}
+
+sint On_TDLS_Dis_Req(_adapter *adapter, union recv_frame *precv_frame)
+{
+ struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
+ struct sta_priv *pstapriv = &adapter->stapriv;
+ struct sta_info *psta_ap;
+ u8 *ptr = precv_frame->u.hdr.rx_data;
+ sint parsing_length; //frame body length, without icv_len
+ PNDIS_802_11_VARIABLE_IEs pIE;
+ u8 FIXED_IE = 3, *dst, *pdialog = NULL;
+ u16 j;
+
+ ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len + LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE + 1;
+ pdialog=ptr+2;
+
+ parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
+ -prx_pkt_attrib->hdrlen
+ -prx_pkt_attrib->iv_len
+ -prx_pkt_attrib->icv_len
+ -LLC_HEADER_SIZE
+ -TYPE_LENGTH_FIELD_SIZE
+ -1
+ -FIXED_IE;
+
+ //parsing information element
+ for(j=FIXED_IE; j<parsing_length;){
+
+ pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
+
+ switch (pIE->ElementID)
+ {
+ case _LINK_ID_IE_:
+ psta_ap = rtw_get_stainfo(pstapriv, pIE->data);
+ if(psta_ap == NULL)
+ {
+ goto exit;
+ }
+ dst = pIE->data + 12;
+ if( (MacAddr_isBcst(dst) == _FALSE) && (_rtw_memcmp(myid(&(adapter->eeprompriv)), dst, 6) == _FALSE) )
+ {
+ goto exit;
+ }
+ break;
+ default:
+ break;
+ }
+
+ j += (pIE->Length + 2);
+
+ }
+
+ //check frame contents
+
+ issue_tdls_dis_rsp(adapter, precv_frame, *(pdialog) );
+
+exit:
+
+ return _FAIL;
+
+}
+
+sint On_TDLS_Teardown(_adapter *adapter, union recv_frame *precv_frame)
+{
+ u8 *psa;
+ u8 *ptr = precv_frame->u.hdr.rx_data;
+ struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
+ struct mlme_ext_priv *pmlmeext = &(adapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ struct sta_priv *pstapriv = &adapter->stapriv;
+ struct sta_info *ptdls_sta= NULL;
+ _irqL irqL;
+
+ psa = get_sa(ptr);
+
+ ptdls_sta = rtw_get_stainfo(pstapriv, psa);
+ if(ptdls_sta!=NULL){
+ if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE){
+ rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
+ }
+ free_tdls_sta(adapter, ptdls_sta);
+ }
+
+ return _FAIL;
+
+}
+
+u8 TDLS_check_ch_state(uint state){
+ if( (state & TDLS_CH_SWITCH_ON_STATE) &&
+ (state & TDLS_AT_OFF_CH_STATE) &&
+ (state & TDLS_PEER_AT_OFF_STATE) ){
+
+ if(state & TDLS_PEER_SLEEP_STATE)
+ return 2; //U-APSD + ch. switch
+ else
+ return 1; //ch. switch
+ }else
+ return 0;
+}
+
+//we process buffered data for 1. U-APSD, 2. ch. switch, 3. U-APSD + ch. switch here
+sint On_TDLS_Peer_Traffic_Rsp(_adapter *adapter, union recv_frame *precv_frame)
+{
+ struct tdls_info *ptdlsinfo = &adapter->tdlsinfo;
+ struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
+ struct rx_pkt_attrib *pattrib = & precv_frame->u.hdr.attrib;
+ struct sta_priv *pstapriv = &adapter->stapriv;
+ //get peer sta infomation
+ struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->src);
+ u8 wmmps_ac=0, state=TDLS_check_ch_state(ptdls_sta->tdls_sta_state);
+ int i;
+
+ ptdls_sta->sta_stats.rx_data_pkts++;
+
+ //receive peer traffic response frame, sleeping STA wakes up
+ //ptdls_sta->tdls_sta_state &= ~(TDLS_PEER_SLEEP_STATE);
+ process_wmmps_data( adapter, precv_frame);
+
+ // if noticed peer STA wakes up by receiving peer traffic response
+ // and we want to do channel swtiching, then we will transmit channel switch request first
+ if(ptdls_sta->tdls_sta_state & TDLS_APSD_CHSW_STATE){
+ issue_tdls_ch_switch_req(adapter, pattrib->src);
+ ptdls_sta->tdls_sta_state &= ~(TDLS_APSD_CHSW_STATE);
+ return _FAIL;
+ }
+
+ //check 4-AC queue bit
+ if(ptdls_sta->uapsd_vo || ptdls_sta->uapsd_vi || ptdls_sta->uapsd_be || ptdls_sta->uapsd_bk)
+ wmmps_ac=1;
+
+ //if it's a direct link and have buffered frame
+ if(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE){
+ if(wmmps_ac && state)
+ {
+ _irqL irqL;
+ _list *xmitframe_plist, *xmitframe_phead;
+ struct xmit_frame *pxmitframe=NULL;
+
+ _enter_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
+
+ xmitframe_phead = get_list_head(&ptdls_sta->sleep_q);
+ xmitframe_plist = get_next(xmitframe_phead);
+
+ //transmit buffered frames
+ while ((rtw_end_of_queue_search(xmitframe_phead, xmitframe_plist)) == _FALSE)
+ {
+ pxmitframe = LIST_CONTAINOR(xmitframe_plist, struct xmit_frame, list);
+ xmitframe_plist = get_next(xmitframe_plist);
+ rtw_list_delete(&pxmitframe->list);
+
+ ptdls_sta->sleepq_len--;
+ if(ptdls_sta->sleepq_len>0){
+ pxmitframe->attrib.mdata = 1;
+ pxmitframe->attrib.eosp = 0;
+ }else{
+ pxmitframe->attrib.mdata = 0;
+ pxmitframe->attrib.eosp = 1;
+ }
+ //pxmitframe->attrib.triggered = 1; //maybe doesn't need in TDLS
+ if(adapter->HalFunc.hal_xmit(adapter, pxmitframe) == _TRUE)
+ {
+ rtw_os_xmit_complete(adapter, pxmitframe);
+ }
+
+ }
+
+ if(ptdls_sta->sleepq_len==0)
+ {
+ DBG_871X("no buffered packets for tdls to xmit\n");
+ //on U-APSD + CH. switch state, when there is no buffered date to xmit,
+ // we should go back to base channel
+ if(state==2){
+ rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
+ }else if(ptdls_sta->tdls_sta_state&TDLS_SW_OFF_STATE){
+ ptdls_sta->tdls_sta_state &= ~(TDLS_SW_OFF_STATE);
+ ptdlsinfo->candidate_ch= pmlmeext->cur_channel;
+ issue_tdls_ch_switch_req(adapter, pattrib->src);
+ DBG_871X("issue tdls ch switch req back to base channel\n");
+ }
+
+ }
+ else
+ {
+ DBG_871X("error!psta->sleepq_len=%d\n", ptdls_sta->sleepq_len);
+ ptdls_sta->sleepq_len=0;
+ }
+
+ _exit_critical_bh(&ptdls_sta->sleep_q.lock, &irqL);
+
+ }
+
+ }
+
+ return _FAIL;
+}
+
+sint On_TDLS_Ch_Switch_Req(_adapter *adapter, union recv_frame *precv_frame)
+{
+ struct sta_info *ptdls_sta= NULL;
+ struct sta_priv *pstapriv = &adapter->stapriv;
+ u8 *ptr = precv_frame->u.hdr.rx_data;
+ struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
+ u8 *psa;
+ sint parsing_length;
+ PNDIS_802_11_VARIABLE_IEs pIE;
+ u8 FIXED_IE =3;
+ u16 j;
+ struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
+
+ psa = get_sa(ptr);
+ ptdls_sta = rtw_get_stainfo(pstapriv, psa);
+
+ ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
+ parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
+ -prx_pkt_attrib->hdrlen
+ -prx_pkt_attrib->iv_len
+ -prx_pkt_attrib->icv_len
+ -LLC_HEADER_SIZE
+ -ETH_TYPE_LEN
+ -PAYLOAD_TYPE_LEN
+ -FIXED_IE;
+
+ ptdls_sta->off_ch = *(ptr+2);
+
+ //parsing information element
+ for(j=FIXED_IE; j<parsing_length;){
+
+ pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
+
+ switch (pIE->ElementID)
+ {
+ case _COUNTRY_IE_:
+ break;
+ case _CH_SWTICH_ANNOUNCE_:
+ break;
+ case _LINK_ID_IE_:
+ break;
+ case _CH_SWITCH_TIMING_:
+ _rtw_memcpy(&ptdls_sta->ch_switch_time, pIE->data, 2);
+ _rtw_memcpy(&ptdls_sta->ch_switch_timeout, pIE->data+2, 2);
+ default:
+ break;
+ }
+
+ j += (pIE->Length + 2);
+
+ }
+
+ //todo: check status
+ ptdls_sta->stat_code=0;
+ ptdls_sta->tdls_sta_state |= TDLS_CH_SWITCH_ON_STATE;
+
+ issue_nulldata(adapter, NULL, 1, 0, 0);
+
+ issue_tdls_ch_switch_rsp(adapter, psa);
+
+ DBG_871X("issue tdls channel switch response\n");
+
+ if((ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE) && ptdls_sta->off_ch==pmlmeext->cur_channel){
+ DBG_871X("back to base channel %x\n", pmlmeext->cur_channel);
+ ptdls_sta->option=7;
+ rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_BASE_CH);
+ }else{
+ ptdls_sta->option=6;
+ rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
+ }
+ return _FAIL;
+}
+
+sint On_TDLS_Ch_Switch_Rsp(_adapter *adapter, union recv_frame *precv_frame)
+{
+ struct sta_info *ptdls_sta= NULL;
+ struct sta_priv *pstapriv = &adapter->stapriv;
+ u8 *ptr = precv_frame->u.hdr.rx_data;
+ struct rx_pkt_attrib *prx_pkt_attrib = &precv_frame->u.hdr.attrib;
+ u8 *psa;
+ sint parsing_length;
+ PNDIS_802_11_VARIABLE_IEs pIE;
+ u8 FIXED_IE =4;
+ u16 stat_code, j, switch_time, switch_timeout;
+ struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
+
+ psa = get_sa(ptr);
+ ptdls_sta = rtw_get_stainfo(pstapriv, psa);
+
+ //if channel switch is running and receiving Unsolicited TDLS Channel Switch Response,
+ //it will go back to base channel and terminate this channel switch procedure
+ if(ptdls_sta->tdls_sta_state & TDLS_CH_SWITCH_ON_STATE ){
+ if(pmlmeext->cur_channel==ptdls_sta->off_ch){
+ DBG_871X("back to base channel %x\n", pmlmeext->cur_channel);
+ ptdls_sta->option=7;
+ rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
+ }else{
+ DBG_871X("receive unsolicited channel switch response \n");
+ rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_CS_OFF);
+ }
+ return _FAIL;
+ }
+
+ //avoiding duplicated or unconditional ch. switch. rsp
+ if((ptdls_sta->tdls_sta_state & TDLS_CH_SW_INITIATOR_STATE) != TDLS_CH_SW_INITIATOR_STATE)
+ return _FAIL;
+
+ ptr +=prx_pkt_attrib->hdrlen + prx_pkt_attrib->iv_len+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE+1;
+ parsing_length= ((union recv_frame *)precv_frame)->u.hdr.len
+ -prx_pkt_attrib->hdrlen
+ -prx_pkt_attrib->iv_len
+ -prx_pkt_attrib->icv_len
+ -LLC_HEADER_SIZE
+ -ETH_TYPE_LEN
+ -PAYLOAD_TYPE_LEN
+ -FIXED_IE;
+
+ _rtw_memcpy(&stat_code, ptr+2, 2);
+
+ if(stat_code!=0){
+ return _FAIL;
+ }
+
+ //parsing information element
+ for(j=FIXED_IE; j<parsing_length;){
+
+ pIE = (PNDIS_802_11_VARIABLE_IEs)(ptr+ j);
+
+ switch (pIE->ElementID)
+ {
+ case _LINK_ID_IE_:
+ break;
+ case _CH_SWITCH_TIMING_:
+ _rtw_memcpy(&switch_time, pIE->data, 2);
+ if(switch_time > ptdls_sta->ch_switch_time)
+ _rtw_memcpy(&ptdls_sta->ch_switch_time, &switch_time, 2);
+
+ _rtw_memcpy(&switch_timeout, pIE->data+2, 2);
+ if(switch_timeout > ptdls_sta->ch_switch_timeout)
+ _rtw_memcpy(&ptdls_sta->ch_switch_timeout, &switch_timeout, 2);
+
+ default:
+ break;
+ }
+
+ j += (pIE->Length + 2);
+
+ }
+
+ ptdls_sta->tdls_sta_state &= ~(TDLS_CH_SW_INITIATOR_STATE);
+ ptdls_sta->tdls_sta_state |=TDLS_CH_SWITCH_ON_STATE;
+
+ //goto set_channel_workitem_callback()
+ ptdls_sta->option=6;
+ rtw_tdls_cmd(adapter, ptdls_sta->hwaddr, TDLS_OFF_CH);
+
+ return _FAIL;
+}
+
+#ifdef CONFIG_WFD
+void wfd_ie_tdls(_adapter * padapter, u8 *pframe, u32 *pktlen )
+{
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct wifi_display_info *pwfd_info = padapter->tdlsinfo.wfd_info;
+ u8 wfdie[ MAX_WFD_IE_LEN] = { 0x00 };
+ u32 wfdielen = 0;
+
+ // WFD OUI
+ wfdielen = 0;
+ wfdie[ wfdielen++ ] = 0x50;
+ wfdie[ wfdielen++ ] = 0x6F;
+ wfdie[ wfdielen++ ] = 0x9A;
+ wfdie[ wfdielen++ ] = 0x0A; // WFA WFD v1.0
+
+ // Commented by Albert 20110825
+ // According to the WFD Specification, the negotiation request frame should contain 3 WFD attributes
+ // 1. WFD Device Information
+ // 2. Associated BSSID ( Optional )
+ // 3. Local IP Adress ( Optional )
+
+ // WFD Device Information ATTR
+ // Type:
+ wfdie[ wfdielen++ ] = WFD_ATTR_DEVICE_INFO;
+
+ // Length:
+ // Note: In the WFD specification, the size of length field is 2.
+ RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
+ wfdielen += 2;
+
+ // Value1:
+ // WFD device information
+ // available for WFD session + Preferred TDLS + WSD ( WFD Service Discovery )
+ RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->wfd_device_type | WFD_DEVINFO_SESSION_AVAIL
+ | WFD_DEVINFO_PC_TDLS | WFD_DEVINFO_WSD);
+ wfdielen += 2;
+
+ // Value2:
+ // Session Management Control Port
+ // Default TCP port for RTSP messages is 554
+ RTW_PUT_BE16(wfdie + wfdielen, pwfd_info->rtsp_ctrlport );
+ wfdielen += 2;
+
+ // Value3:
+ // WFD Device Maximum Throughput
+ // 300Mbps is the maximum throughput
+ RTW_PUT_BE16(wfdie + wfdielen, 300);
+ wfdielen += 2;
+
+ // Associated BSSID ATTR
+ // Type:
+ wfdie[ wfdielen++ ] = WFD_ATTR_ASSOC_BSSID;
+
+ // Length:
+ // Note: In the WFD specification, the size of length field is 2.
+ RTW_PUT_BE16(wfdie + wfdielen, 0x0006);
+ wfdielen += 2;
+
+ // Value:
+ // Associated BSSID
+ if ( check_fwstate( pmlmepriv, _FW_LINKED) == _TRUE )
+ {
+ _rtw_memcpy( wfdie + wfdielen, &pmlmepriv->assoc_bssid[ 0 ], ETH_ALEN );
+ }
+ else
+ {
+ _rtw_memset( wfdie + wfdielen, 0x00, ETH_ALEN );
+ }
+
+ // Local IP Address ATTR
+ wfdie[ wfdielen++ ] = WFD_ATTR_LOCAL_IP_ADDR;
+
+ // Length:
+ // Note: In the WFD specification, the size of length field is 2.
+ RTW_PUT_BE16(wfdie + wfdielen, 0x0005);
+ wfdielen += 2;
+
+ // Version:
+ // 0x01: Version1;IPv4
+ wfdie[ wfdielen++ ] = 0x01;
+
+ // IPv4 Address
+ _rtw_memcpy( wfdie + wfdielen, pwfd_info->ip_address, 4 );
+ wfdielen += 4;
+
+ pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wfdielen, (unsigned char *) wfdie, pktlen);
+
+}
+#endif //CONFIG_WFD
+
+void rtw_build_tdls_setup_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
+{
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
+ struct pkt_attrib *pattrib = &pxmitframe->attrib;
+ struct registry_priv *pregistrypriv = &padapter->registrypriv;
+ struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);
+
+ u8 payload_type = 0x02;
+ u8 category = RTW_WLAN_CATEGORY_TDLS;
+ u8 action = TDLS_SETUP_REQUEST;
+ u8 bssrate[NDIS_802_11_LENGTH_RATES_EX]; //Use NDIS_802_11_LENGTH_RATES_EX in order to call func.rtw_set_supported_rate
+ int bssrate_len = 0, i = 0 ;
+ u8 more_supportedrates = 0;
+ unsigned int ie_len;
+ u8 *p;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ u8 link_id_addr[18] = {0};
+ u8 iedata=0;
+ u8 sup_ch[ 30 * 2 ] = {0x00 }, sup_ch_idx = 0, idx_5g = 2; //For supported channel
+ u8 timeout_itvl[5]; //set timeout interval to maximum value
+ u32 time;
+
+ //SNonce
+ if(pattrib->encrypt){
+ for(i=0;i<8;i++){
+ time=rtw_get_current_time();
+ _rtw_memcpy(&ptdls_sta->SNonce[4*i], (u8 *)&time, 4);
+ }
+ }
+
+ //payload type
+ pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
+ //category, action, dialog token
+ pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
+
+ //capability
+ _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
+
+ if(pattrib->encrypt)
+ *pframe =*pframe | BIT(4);
+ pframe += 2;
+ pattrib->pktlen += 2;
+
+ //supported rates
+ rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
+ bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
+
+ if (bssrate_len > 8)
+ {
+ pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
+ more_supportedrates = 1;
+ }
+ else
+ {
+ pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
+ }
+
+ //country(optional)
+ //extended supported rates
+ if(more_supportedrates==1){
+ pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
+ }
+
+ //supported channels
+ pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);
+
+ // SRC IE
+ pframe = rtw_set_ie( pframe, _SRC_IE_, 16, TDLS_SRC, &(pattrib->pktlen));
+
+ //RSNIE
+ if(pattrib->encrypt)
+ pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
+
+ //extended capabilities
+ pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
+
+ //QoS capability(WMM_IE)
+ pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, 7, TDLS_WMMIE, &(pattrib->pktlen));
+
+
+ if(pattrib->encrypt){
+ //FTIE
+ _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
+ _rtw_memset(pframe, _FTIE_, 1); //version
+ _rtw_memset((pframe+1), 82, 1); //length
+ _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
+ pframe += 84;
+ pattrib->pktlen += 84;
+
+ //Timeout interval
+ timeout_itvl[0]=0x02;
+ _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
+ pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
+ }
+
+ //Sup_reg_classes(optional)
+ //HT capabilities
+ pframe = rtw_tdls_set_ht_cap(padapter, pframe, pattrib);
+
+ //20/40 BSS coexistence
+ if(pmlmepriv->num_FortyMHzIntolerant>0)
+ iedata |= BIT(2);//20 MHz BSS Width Request
+ pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
+
+ //Link identifier
+ _rtw_memcpy(link_id_addr, pattrib->ra, 6);
+ _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
+ _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
+ pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
+
+#ifdef CONFIG_WFD
+ wfd_ie_tdls( padapter, pframe, &(pattrib->pktlen) );
+#endif //CONFIG_WFD
+
+}
+
+void rtw_build_tdls_setup_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
+{
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ struct pkt_attrib *pattrib = &pxmitframe->attrib;
+ struct sta_info *ptdls_sta;
+ struct registry_priv *pregistrypriv = &padapter->registrypriv;
+
+ u8 payload_type = 0x02;
+ unsigned char category = RTW_WLAN_CATEGORY_TDLS;
+ unsigned char action = TDLS_SETUP_RESPONSE;
+ unsigned char bssrate[NDIS_802_11_LENGTH_RATES_EX];
+ int bssrate_len = 0;
+ u8 more_supportedrates = 0;
+ unsigned int ie_len;
+ unsigned char *p;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ u8 link_id_addr[18] = {0};
+ u8 iedata=0;
+ u8 timeout_itvl[5]; //setup response timeout interval will copy from request
+ u8 ANonce[32]; //maybe it can put in ontdls_req
+ u8 k; //for random ANonce
+ u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic;
+ u32 time;
+
+ ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);
+
+ if(ptdls_sta == NULL )
+ {
+ DBG_871X("[%s] %d\n", __FUNCTION__, __LINE__);
+ return;
+ }
+
+ if(pattrib->encrypt){
+ for(k=0;k<8;k++){
+ time=rtw_get_current_time();
+ _rtw_memcpy(&ptdls_sta->ANonce[4*k], (u8*)&time, 4);
+ }
+ }
+
+ //payload type
+ pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
+ //category, action, status code
+ pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
+
+ if(ptdls_sta->stat_code!=0) //invalid setup request
+ {
+ DBG_871X("ptdls_sta->stat_code:%04x \n", ptdls_sta->stat_code);
+ return;
+ }
+
+ //dialog token
+ pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
+
+ //capability
+ _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
+
+ if(pattrib->encrypt )
+ *pframe =*pframe | BIT(4);
+ pframe += 2;
+ pattrib->pktlen += 2;
+
+ //supported rates
+ rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
+ bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
+
+ if (bssrate_len > 8)
+ {
+ pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
+ more_supportedrates = 1;
+ }
+ else
+ {
+ pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
+ }
+
+ //country(optional)
+ //extended supported rates
+ if(more_supportedrates==1){
+ pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
+ }
+
+ //supported channels
+ pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);
+
+ // SRC IE
+ pframe = rtw_set_ie(pframe, _SRC_IE_ , 16, TDLS_SRC, &(pattrib->pktlen));
+
+ //RSNIE
+ if(pattrib->encrypt){
+ prsnie = pframe;
+ pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
+ }
+
+ //extended capabilities
+ pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
+
+ //QoS capability(WMM_IE)
+ pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, 7, TDLS_WMMIE, &(pattrib->pktlen));
+
+ if(pattrib->encrypt){
+ wpa_tdls_generate_tpk(padapter, ptdls_sta);
+
+ //FTIE
+ pftie = pframe;
+ pftie_mic = pframe+4;
+ _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
+ _rtw_memset(pframe, _FTIE_, 1); //version
+ _rtw_memset((pframe+1), 82, 1); //length
+ _rtw_memcpy((pframe+20), ptdls_sta->ANonce, 32);
+ _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
+ pframe += 84;
+ pattrib->pktlen += 84;
+
+ //Timeout interval
+ ptimeout_ie = pframe;
+ timeout_itvl[0]=0x02;
+ _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
+ pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
+ }
+
+ //Sup_reg_classes(optional)
+ //HT capabilities
+ pframe = rtw_tdls_set_ht_cap(padapter, pframe, pattrib);
+
+ //20/40 BSS coexistence
+ if(pmlmepriv->num_FortyMHzIntolerant>0)
+ iedata |= BIT(2);//20 MHz BSS Width Request
+ pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
+
+ //Link identifier
+ plinkid_ie = pframe;
+ _rtw_memcpy(link_id_addr, pattrib->ra, 6);
+ _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
+ _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
+ pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
+
+ //fill FTIE mic
+ if(pattrib->encrypt)
+ wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 2, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);
+
+#ifdef CONFIG_WFD
+ wfd_ie_tdls( padapter, pframe, &(pattrib->pktlen) );
+#endif //CONFIG_WFD
+
+}
+
+void rtw_build_tdls_setup_cfm_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
+{
+
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ struct pkt_attrib *pattrib = &pxmitframe->attrib;
+ struct sta_info *ptdls_sta=rtw_get_stainfo( (&padapter->stapriv) , pattrib->dst);
+
+ u8 payload_type = 0x02;
+ unsigned char category = RTW_WLAN_CATEGORY_TDLS;
+ unsigned char action = TDLS_SETUP_CONFIRM;
+ u8 more_supportedrates = 0;
+ unsigned int ie_len;
+ unsigned char *p;
+ u8 timeout_itvl[5]; //set timeout interval to maximum value
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ u8 link_id_addr[18] = {0};
+ u8 *pftie, *ptimeout_ie, *plinkid_ie, *prsnie, *pftie_mic;
+
+ //payload type
+ pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
+ //category, action, status code, dialog token
+ pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
+
+ if(ptdls_sta->stat_code!=0) //invalid setup request
+ return;
+
+ //RSNIE
+ if(pattrib->encrypt){
+ prsnie = pframe;
+ pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
+ }
+
+ //EDCA param set; WMM param ele.
+ if(pattrib->encrypt){
+ //FTIE
+ pftie = pframe;
+ pftie_mic = pframe+4;
+ _rtw_memset(pframe, 0, 84); //All fields except SNonce shall be set to 0
+ _rtw_memset(pframe, _FTIE_, 1); //version
+ _rtw_memset((pframe+1), 82, 1); //length
+ _rtw_memcpy((pframe+20), ptdls_sta->ANonce, 32);
+ _rtw_memcpy((pframe+52), ptdls_sta->SNonce, 32);
+ pframe += 84;
+ pattrib->pktlen += 84;
+
+ //Timeout interval
+ ptimeout_ie = pframe;
+ timeout_itvl[0]=0x02;
+ _rtw_memcpy(timeout_itvl+1, (u8 *)(&ptdls_sta->TDLS_PeerKey_Lifetime), 4);
+ ptdls_sta->TPK_count=0;
+ _set_timer(&ptdls_sta->TPK_timer, ptdls_sta->TDLS_PeerKey_Lifetime/TPK_RESEND_COUNT);
+ pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
+ }
+
+ //HT operation; todo
+ //Link identifier
+ plinkid_ie = pframe;
+ _rtw_memcpy(link_id_addr, pattrib->ra, 6);
+ _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
+ _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
+ pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
+
+ //fill FTIE mic
+ if(pattrib->encrypt)
+ wpa_tdls_ftie_mic(ptdls_sta->tpk.kck, 3, plinkid_ie, prsnie, ptimeout_ie, pftie, pftie_mic);
+
+}
+
+void rtw_build_tdls_teardown_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
+{
+
+ struct pkt_attrib *pattrib = &pxmitframe->attrib;
+ u8 payload_type = 0x02;
+ unsigned char category = RTW_WLAN_CATEGORY_TDLS;
+ unsigned char action = TDLS_TEARDOWN;
+ u8 link_id_addr[18] = {0};
+
+ struct sta_info *ptdls_sta = rtw_get_stainfo( &(padapter->stapriv) , pattrib->dst);
+ struct sta_priv *pstapriv = &padapter->stapriv;
+
+ //payload type
+ pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
+ //category, action, reason code
+ pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
+
+ //Link identifier
+ if(ptdls_sta->tdls_sta_state & TDLS_INITIATOR_STATE){
+ _rtw_memcpy(link_id_addr, pattrib->ra, 6);
+ _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
+ _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
+ }else if(ptdls_sta->tdls_sta_state & TDLS_RESPONDER_STATE){
+ _rtw_memcpy(link_id_addr, pattrib->ra, 6);
+ _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
+ _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
+ }
+ pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
+
+}
+
+void rtw_build_tdls_dis_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
+{
+
+ struct pkt_attrib *pattrib = &pxmitframe->attrib;
+ u8 payload_type = 0x02;
+ u8 category = RTW_WLAN_CATEGORY_TDLS;
+ u8 action = TDLS_DISCOVERY_REQUEST;
+ u8 link_id_addr[18] = {0};
+ static u8 dialogtoken=0;
+
+ //payload type
+ pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
+ //category, action, reason code
+ pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(dialogtoken), &(pattrib->pktlen));
+ dialogtoken = (dialogtoken+1)%256;
+
+ //Link identifier
+ _rtw_memcpy(link_id_addr, pattrib->ra, 6);
+ _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
+ _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
+ pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
+
+}
+
+void rtw_build_tdls_dis_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 dialog)
+{
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
+ struct pkt_attrib *pattrib = &pxmitframe->attrib;
+ struct registry_priv *pregistrypriv = &padapter->registrypriv;
+
+ u8 category = RTW_WLAN_CATEGORY_PUBLIC;
+ u8 action = TDLS_DISCOVERY_RESPONSE;
+ u8 bssrate[NDIS_802_11_LENGTH_RATES_EX];
+ int bssrate_len = 0;
+ u8 more_supportedrates = 0;
+ u8 *p;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ u8 link_id_addr[18] = {0};
+ u8 iedata=0;
+ u8 timeout_itvl[5]; //set timeout interval to maximum value
+ u32 timeout_interval= TPK_RESEND_COUNT * 1000;
+
+ //category, action, dialog token
+ pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(dialog), &(pattrib->pktlen));
+
+ //capability
+ _rtw_memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
+
+ if(pattrib->encrypt)
+ *pframe =*pframe | BIT(4);
+ pframe += 2;
+ pattrib->pktlen += 2;
+
+ //supported rates
+ rtw_set_supported_rate(bssrate, WIRELESS_11BG_24N);
+ bssrate_len = IEEE80211_CCK_RATE_LEN + IEEE80211_NUM_OFDM_RATESLEN;
+
+ if (bssrate_len > 8)
+ {
+ pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , 8, bssrate, &(pattrib->pktlen));
+ more_supportedrates = 1;
+ }
+ else
+ {
+ pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_ , bssrate_len , bssrate, &(pattrib->pktlen));
+ }
+
+ //extended supported rates
+ if(more_supportedrates==1){
+ pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_ , (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
+ }
+
+ //supported channels
+ pframe = rtw_tdls_set_sup_ch(pmlmeext, pframe, pattrib);
+
+ //RSNIE
+ if(pattrib->encrypt)
+ pframe = rtw_set_ie(pframe, _RSN_IE_2_, 20, TDLS_RSNIE, &(pattrib->pktlen));
+
+ //extended capability
+ pframe = rtw_set_ie(pframe, _EXT_CAP_IE_ , 5, TDLS_EXT_CAPIE, &(pattrib->pktlen));
+
+ if(pattrib->encrypt){
+ //FTIE
+ _rtw_memset(pframe, 0, 84); //All fields shall be set to 0
+ _rtw_memset(pframe, _FTIE_, 1); //version
+ _rtw_memset((pframe+1), 82, 1); //length
+ pframe += 84;
+ pattrib->pktlen += 84;
+
+ //Timeout interval
+ timeout_itvl[0]=0x02;
+ _rtw_memcpy(timeout_itvl+1, &timeout_interval, 4);
+ pframe = rtw_set_ie(pframe, _TIMEOUT_ITVL_IE_, 5, timeout_itvl, &(pattrib->pktlen));
+ }
+
+ //Sup_reg_classes(optional)
+ //HT capabilities
+ pframe = rtw_tdls_set_ht_cap(padapter, pframe, pattrib);
+
+ //20/40 BSS coexistence
+ if(pmlmepriv->num_FortyMHzIntolerant>0)
+ iedata |= BIT(2);//20 MHz BSS Width Request
+ pframe = rtw_set_ie(pframe, EID_BSSCoexistence, 1, &iedata, &(pattrib->pktlen));
+
+ //Link identifier
+ _rtw_memcpy(link_id_addr, pattrib->ra, 6);
+ _rtw_memcpy((link_id_addr+6), pattrib->dst, 6);
+ _rtw_memcpy((link_id_addr+12), pattrib->src, 6);
+ pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
+
+}
+
+void rtw_build_tdls_peer_traffic_indication_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
+{
+
+ struct pkt_attrib *pattrib = &pxmitframe->attrib;
+ u8 payload_type = 0x02;
+ unsigned char category = RTW_WLAN_CATEGORY_TDLS;
+ unsigned char action = TDLS_PEER_TRAFFIC_INDICATION;
+
+ u8 link_id_addr[18] = {0};
+ u8 AC_queue=0;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
+
+ //payload type
+ pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
+ //category, action, reason code
+ pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(ptdls_sta->dialog), &(pattrib->pktlen));
+
+ //Link identifier
+ _rtw_memcpy(link_id_addr, pattrib->ra, 6);
+ _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
+ _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
+ pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
+
+ //PTI control
+ //PU buffer status
+ if(ptdls_sta->uapsd_bk&BIT(1))
+ AC_queue=BIT(0);
+ if(ptdls_sta->uapsd_be&BIT(1))
+ AC_queue=BIT(1);
+ if(ptdls_sta->uapsd_vi&BIT(1))
+ AC_queue=BIT(2);
+ if(ptdls_sta->uapsd_vo&BIT(1))
+ AC_queue=BIT(3);
+ pframe = rtw_set_ie(pframe, _PTI_BUFFER_STATUS_, 1, &AC_queue, &(pattrib->pktlen));
+
+}
+
+void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
+{
+
+ struct pkt_attrib *pattrib = &pxmitframe->attrib;
+ struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+ u8 payload_type = 0x02;
+ unsigned char category = RTW_WLAN_CATEGORY_TDLS;
+ unsigned char action = TDLS_CHANNEL_SWITCH_REQUEST;
+ u8 link_id_addr[18] = {0};
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
+ u8 ch_switch_timing[4] = {0};
+ u16 switch_time= CH_SWITCH_TIME, switch_timeout=CH_SWITCH_TIMEOUT;
+
+ //payload type
+ pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
+ //category, action, target_ch
+ pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(ptdlsinfo->candidate_ch), &(pattrib->pktlen));
+
+ //Link identifier
+ _rtw_memcpy(link_id_addr, pattrib->ra, 6);
+ _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
+ _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
+ pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
+
+ //ch switch timing
+ _rtw_memcpy(ch_switch_timing, &switch_time, 2);
+ _rtw_memcpy(ch_switch_timing+2, &switch_timeout, 2);
+ pframe = rtw_set_ie(pframe, _CH_SWITCH_TIMING_, 4, ch_switch_timing, &(pattrib->pktlen));
+
+ //update ch switch attrib to sta_info
+ ptdls_sta->off_ch=ptdlsinfo->candidate_ch;
+ ptdls_sta->ch_switch_time=switch_time;
+ ptdls_sta->ch_switch_timeout=switch_timeout;
+
+}
+
+void rtw_build_tdls_ch_switch_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
+{
+
+ struct pkt_attrib *pattrib = &pxmitframe->attrib;
+ u8 payload_type = 0x02;
+ unsigned char category = RTW_WLAN_CATEGORY_TDLS;
+ unsigned char action = TDLS_CHANNEL_SWITCH_RESPONSE;
+ u8 link_id_addr[18] = {0};
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct sta_info *ptdls_sta = rtw_get_stainfo(pstapriv, pattrib->dst);
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
+ u8 ch_switch_timing[4] = {0};
+
+ //payload type
+ pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
+ //category, action, status_code
+ pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 2, (u8 *)&ptdls_sta->stat_code, &(pattrib->pktlen));
+
+ //Link identifier
+ _rtw_memcpy(link_id_addr, pattrib->ra, 6);
+ _rtw_memcpy((link_id_addr+6), pattrib->src, 6);
+ _rtw_memcpy((link_id_addr+12), pattrib->dst, 6);
+ pframe = rtw_set_ie(pframe, _LINK_ID_IE_, 18, link_id_addr, &(pattrib->pktlen));
+
+ //ch switch timing
+ _rtw_memcpy(ch_switch_timing, &ptdls_sta->ch_switch_time, 2);
+ _rtw_memcpy(ch_switch_timing+2, &ptdls_sta->ch_switch_timeout, 2);
+ pframe = rtw_set_ie(pframe, _CH_SWITCH_TIMING_, 4, ch_switch_timing, &(pattrib->pktlen));
+
+}
+
+#ifdef CONFIG_WFD
+void rtw_build_tunneled_probe_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
+{
+
+ struct pkt_attrib *pattrib = &pxmitframe->attrib;
+ struct wifidirect_info *pwdinfo = &padapter->wdinfo;
+ struct wifidirect_info *pbuddy_wdinfo = &padapter->pbuddy_adapter->wdinfo;
+ u8 payload_type = 0x02;
+ u8 category = RTW_WLAN_CATEGORY_P2P;
+ u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a};
+ u8 probe_req = 4;
+ u8 wfdielen = 0;
+
+ //payload type
+ pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
+ //category, OUI, frame_body_type
+ pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 3, WFA_OUI, &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(probe_req), &(pattrib->pktlen));
+
+ if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
+ {
+ wfdielen = build_probe_req_wfd_ie(pwdinfo, pframe);
+ pframe += wfdielen;
+ pattrib->pktlen += wfdielen;
+ }
+ else if(!rtw_p2p_chk_state(pbuddy_wdinfo, P2P_STATE_NONE))
+ {
+ wfdielen = build_probe_req_wfd_ie(pbuddy_wdinfo, pframe);
+ pframe += wfdielen;
+ pattrib->pktlen += wfdielen;
+ }
+
+}
+
+void rtw_build_tunneled_probe_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe)
+{
+
+ struct pkt_attrib *pattrib = &pxmitframe->attrib;
+ struct wifidirect_info *pwdinfo = &padapter->wdinfo;
+ struct wifidirect_info *pbuddy_wdinfo = &padapter->pbuddy_adapter->wdinfo;
+ u8 payload_type = 0x02;
+ u8 category = RTW_WLAN_CATEGORY_P2P;
+ u8 WFA_OUI[3] = { 0x50, 0x6f, 0x9a};
+ u8 probe_rsp = 5;
+ u8 wfdielen = 0;
+
+ //payload type
+ pframe = rtw_set_fixed_ie(pframe, 1, &(payload_type), &(pattrib->pktlen));
+ //category, OUI, frame_body_type
+ pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 3, WFA_OUI, &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(probe_rsp), &(pattrib->pktlen));
+
+ if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
+ {
+ wfdielen = build_probe_resp_wfd_ie(pwdinfo, pframe, 1);
+ pframe += wfdielen;
+ pattrib->pktlen += wfdielen;
+ }
+ else if(!rtw_p2p_chk_state(pbuddy_wdinfo, P2P_STATE_NONE))
+ {
+ wfdielen = build_probe_resp_wfd_ie(pbuddy_wdinfo, pframe, 1);
+ pframe += wfdielen;
+ pattrib->pktlen += wfdielen;
+ }
+
+}
+#endif //CONFIG_WFD
+
+void _TPK_timer_hdl(void *FunctionContext)
+{
+ struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
+
+ ptdls_sta->TPK_count++;
+ //TPK_timer set 1000 as default
+ //retry timer should set at least 301 sec.
+ if(ptdls_sta->TPK_count==TPK_RESEND_COUNT){
+ ptdls_sta->TPK_count=0;
+ issue_tdls_setup_req(ptdls_sta->padapter, ptdls_sta->hwaddr);
+ }
+
+ _set_timer(&ptdls_sta->TPK_timer, ptdls_sta->TDLS_PeerKey_Lifetime/TPK_RESEND_COUNT);
+}
+
+void init_TPK_timer(_adapter *padapter, struct sta_info *psta)
+{
+ psta->padapter=padapter;
+
+ _init_timer(&psta->TPK_timer, padapter->pnetdev, _TPK_timer_hdl, psta);
+}
+
+// TDLS_DONE_CH_SEN: channel sensing and report candidate channel
+// TDLS_OFF_CH: first time set channel to off channel
+// TDLS_BASE_CH: when go back to the channel linked with AP, send null data to peer STA as an indication
+void _ch_switch_timer_hdl(void *FunctionContext)
+{
+
+ struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
+ _adapter *padapter = ptdls_sta->padapter;
+
+ if( ptdls_sta->option == TDLS_DONE_CH_SEN ){
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_DONE_CH_SEN);
+ }else if( ptdls_sta->option == TDLS_OFF_CH ){
+ issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta, 0);
+ _set_timer(&ptdls_sta->base_ch_timer, 500);
+ }else if( ptdls_sta->option == TDLS_BASE_CH){
+ issue_nulldata_to_TDLS_peer_STA(ptdls_sta->padapter, ptdls_sta, 0);
+ }
+}
+
+void init_ch_switch_timer(_adapter *padapter, struct sta_info *psta)
+{
+ psta->padapter=padapter;
+ _init_timer(&psta->option_timer, padapter->pnetdev, _ch_switch_timer_hdl, psta);
+}
+
+void _base_ch_timer_hdl(void *FunctionContext)
+{
+ struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
+ rtw_tdls_cmd(ptdls_sta->padapter, ptdls_sta->hwaddr, TDLS_P_OFF_CH);
+}
+
+void init_base_ch_timer(_adapter *padapter, struct sta_info *psta)
+{
+ psta->padapter=padapter;
+ _init_timer(&psta->base_ch_timer, padapter->pnetdev, _base_ch_timer_hdl, psta);
+}
+
+void _off_ch_timer_hdl(void *FunctionContext)
+{
+ struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
+ rtw_tdls_cmd(ptdls_sta->padapter, ptdls_sta->hwaddr, TDLS_P_BASE_CH );
+}
+
+void init_off_ch_timer(_adapter *padapter, struct sta_info *psta)
+{
+ psta->padapter=padapter;
+ _init_timer(&psta->off_ch_timer, padapter->pnetdev, _off_ch_timer_hdl, psta);
+}
+
+void _tdls_handshake_timer_hdl(void *FunctionContext)
+{
+ struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
+
+ if(ptdls_sta != NULL)
+ {
+ if( !(ptdls_sta->tdls_sta_state & TDLS_LINKED_STATE) )
+ {
+ DBG_871X("tdls handshake time out\n");
+ free_tdls_sta(ptdls_sta->padapter, ptdls_sta);
+ }
+ }
+}
+
+void init_handshake_timer(_adapter *padapter, struct sta_info *psta)
+{
+ psta->padapter=padapter;
+ _init_timer(&psta->handshake_timer, padapter->pnetdev, _tdls_handshake_timer_hdl, psta);
+}
+
+//Check tdls peer sta alive.
+void _tdls_alive_timer_phase1_hdl(void *FunctionContext)
+{
+ _irqL irqL;
+ struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
+ _adapter *padapter = ptdls_sta->padapter;
+ struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+
+ _enter_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
+ ptdls_sta->timer_flag = 1;
+ _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
+
+ ptdls_sta->tdls_sta_state &= (~TDLS_ALIVE_STATE);
+
+ DBG_871X("issue_tdls_dis_req to check alive\n");
+ issue_tdls_dis_req( padapter, ptdls_sta->hwaddr);
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH1);
+ sta_update_last_rx_pkts(ptdls_sta);
+
+ if ( ptdls_sta->timer_flag == 2 )
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_FREE_STA);
+ else
+ {
+ _enter_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
+ ptdls_sta->timer_flag = 0;
+ _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
+ }
+
+}
+
+void _tdls_alive_timer_phase2_hdl(void *FunctionContext)
+{
+ _irqL irqL;
+ struct sta_info *ptdls_sta = (struct sta_info *)FunctionContext;
+ _adapter *padapter = ptdls_sta->padapter;
+ struct tdls_info *ptdlsinfo = &padapter->tdlsinfo;
+
+ _enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
+ ptdls_sta->timer_flag = 1;
+ _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
+
+ if( (ptdls_sta->tdls_sta_state & TDLS_ALIVE_STATE) &&
+ (sta_last_rx_pkts(ptdls_sta) + 3 <= sta_rx_pkts(ptdls_sta)) )
+ {
+ DBG_871X("TDLS STA ALIVE, ptdls_sta->sta_stats.last_rx_pkts:%llu, ptdls_sta->sta_stats.rx_pkts:%llu\n",
+ sta_last_rx_pkts(ptdls_sta), sta_rx_pkts(ptdls_sta));
+
+ ptdls_sta->alive_count = 0;
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH2);
+ }
+ else
+ {
+ if( !(ptdls_sta->tdls_sta_state & TDLS_ALIVE_STATE) )
+ DBG_871X("TDLS STA TOO FAR\n");
+ if( !(sta_last_rx_pkts(ptdls_sta) + 3 <= sta_rx_pkts(ptdls_sta)))
+ DBG_871X("TDLS LINK WITH LOW TRAFFIC, ptdls_sta->sta_stats.last_rx_pkts:%llu, ptdls_sta->sta_stats.rx_pkts:%llu\n",
+ sta_last_rx_pkts(ptdls_sta), sta_rx_pkts(ptdls_sta));
+
+ ptdls_sta->alive_count++;
+ if( ptdls_sta->alive_count == TDLS_ALIVE_COUNT )
+ {
+ ptdls_sta->stat_code = _RSON_TDLS_TEAR_TOOFAR_;
+ issue_tdls_teardown(padapter, ptdls_sta->hwaddr);
+ }
+ else
+ {
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_CKALV_PH2);
+ }
+ }
+
+ if ( ptdls_sta->timer_flag == 2 )
+ rtw_tdls_cmd(padapter, ptdls_sta->hwaddr, TDLS_FREE_STA);
+ else
+ {
+ _enter_critical_bh(&(ptdlsinfo->hdl_lock), &irqL);
+ ptdls_sta->timer_flag = 0;
+ _exit_critical_bh(&ptdlsinfo->hdl_lock, &irqL);
+}
+
+}
+
+void init_tdls_alive_timer(_adapter *padapter, struct sta_info *psta)
+{
+ psta->padapter=padapter;
+ _init_timer(&psta->alive_timer1, padapter->pnetdev, _tdls_alive_timer_phase1_hdl, psta);
+ _init_timer(&psta->alive_timer2, padapter->pnetdev, _tdls_alive_timer_phase2_hdl, psta);
+}
+
+int update_sgi_tdls(_adapter *padapter, struct sta_info *psta)
+{
+ struct ht_priv *psta_ht = NULL;
+ psta_ht = &psta->htpriv;
+
+ if(psta_ht->ht_option)
+ {
+ return psta_ht->sgi;
+ }
+ else
+ return _FALSE;
+}
+
+u32 update_mask_tdls(_adapter *padapter, struct sta_info *psta)
+{
+ int i;
+ u8 rf_type, id;
+ unsigned char sta_band = 0;
+ unsigned char limit;
+ unsigned int tx_ra_bitmap=0;
+ struct ht_priv *psta_ht = NULL;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ WLAN_BSSID_EX *pcur_network = (WLAN_BSSID_EX *)&pmlmepriv->cur_network.network;
+
+ psta_ht = &psta->htpriv;
+ //b/g mode ra_bitmap
+ for (i=0; i<sizeof(psta->bssrateset); i++)
+ {
+ if (psta->bssrateset[i])
+ tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
+ }
+
+ //n mode ra_bitmap
+ if(psta_ht->ht_option)
+ {
+ padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
+ if(rf_type == RF_2T2R)
+ limit=16;// 2R
+ else
+ limit=8;// 1R
+
+ for (i=0; i<limit; i++) {
+ if (psta_ht->ht_cap.supp_mcs_set[i/8] & BIT(i%8))
+ tx_ra_bitmap |= BIT(i+12);
+ }
+ }
+
+ if ( pcur_network->Configuration.DSConfig > 14 ) {
+ // 5G band
+ if (tx_ra_bitmap & 0xffff000)
+ sta_band |= WIRELESS_11_5N | WIRELESS_11A;
+ else
+ sta_band |= WIRELESS_11A;
+ } else {
+ if (tx_ra_bitmap & 0xffff000)
+ sta_band |= WIRELESS_11_24N | WIRELESS_11G | WIRELESS_11B;
+ else if (tx_ra_bitmap & 0xff0)
+ sta_band |= WIRELESS_11G |WIRELESS_11B;
+ else
+ sta_band |= WIRELESS_11B;
+ }
+
+ id = networktype_to_raid(sta_band);
+ tx_ra_bitmap |= ((id<<28)&0xf0000000);
+ return tx_ra_bitmap;
+}
+
+#endif //CONFIG_TDLS
+
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_wapi.c b/drivers/net/wireless/rtl8723as/core/rtw_wapi.c
index 1d4e197a85db..6c6268c0a56f 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_wapi.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_wapi.c
@@ -1,1326 +1,1326 @@
-#ifdef CONFIG_WAPI_SUPPORT
-
-#include <linux/unistd.h>
-#include <linux/etherdevice.h>
-#include <drv_types.h>
-#include <rtw_wapi.h>
-
-
-u32 wapi_debug_component =
-// WAPI_INIT |
-// WAPI_API |
-// WAPI_TX |
-// WAPI_RX |
- WAPI_ERR ; //always open err flags on
-
-void WapiFreeAllStaInfo(_adapter *padapter)
-{
- PRT_WAPI_T pWapiInfo;
- PRT_WAPI_STA_INFO pWapiStaInfo;
- PRT_WAPI_BKID pWapiBkid;
-
- WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__);
- pWapiInfo = &padapter->wapiInfo;
-
- //Pust to Idle List
- rtw_wapi_return_all_sta_info(padapter);
-
- //Sta Info List
- while(!list_empty(&(pWapiInfo->wapiSTAIdleList)))
- {
- pWapiStaInfo = (PRT_WAPI_STA_INFO)list_entry(pWapiInfo->wapiSTAIdleList.next, RT_WAPI_STA_INFO, list);
- list_del_init(&pWapiStaInfo->list);
- }
-
- //BKID List
- while(!list_empty(&(pWapiInfo->wapiBKIDIdleList)))
- {
- pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDIdleList.next, RT_WAPI_BKID, list);
- list_del_init(&pWapiBkid->list);
- }
- WAPI_TRACE(WAPI_INIT, "<=========== %s\n", __FUNCTION__);
- return;
-}
-
-void WapiSetIE(_adapter *padapter)
-{
- PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
- //PRT_WAPI_BKID pWapiBkid;
- u16 protocolVer = 1;
- u16 akmCnt = 1;
- u16 suiteCnt = 1;
- u16 capability = 0;
- u8 OUI[3];
-
- OUI[0] = 0x00;
- OUI[1] = 0x14;
- OUI[2] = 0x72;
-
- pWapiInfo->wapiIELength = 0;
-//protocol version
- memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &protocolVer, 2);
- pWapiInfo->wapiIELength +=2;
-//akm
- memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &akmCnt, 2);
- pWapiInfo->wapiIELength +=2;
-
- if(pWapiInfo->bWapiPSK){
- memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3);
- pWapiInfo->wapiIELength +=3;
- pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x2;
- pWapiInfo->wapiIELength +=1;
- }else{
- memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3);
- pWapiInfo->wapiIELength +=3;
- pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x1;
- pWapiInfo->wapiIELength +=1;
- }
-
-//usk
- memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &suiteCnt, 2);
- pWapiInfo->wapiIELength +=2;
- memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3);
- pWapiInfo->wapiIELength +=3;
- pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x1;
- pWapiInfo->wapiIELength +=1;
-
-//msk
- memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3);
- pWapiInfo->wapiIELength +=3;
- pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x1;
- pWapiInfo->wapiIELength +=1;
-
-//Capbility
- memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &capability, 2);
- pWapiInfo->wapiIELength +=2;
-}
-
-
-/* PN1 > PN2, return 1,
- * else return 0.
- */
-u32 WapiComparePN(u8 *PN1, u8 *PN2)
-{
- char i;
-
- if ((NULL == PN1) || (NULL == PN2))
- return 1;
-
- // overflow case
- if ((PN2[15] - PN1[15]) & 0x80)
- return 1;
-
- for (i=16; i>0; i--)
- {
- if(PN1[i-1] == PN2[i-1])
- continue;
- else if(PN1[i-1] > PN2[i-1])
- return 1;
- else
- return 0;
- }
-
- return 0;
-}
-
-u8
-WapiGetEntryForCamWrite(_adapter *padapter,u8 *pMacAddr,u8 KID,BOOLEAN IsMsk)
-{
- PRT_WAPI_T pWapiInfo=NULL;
- //PRT_WAPI_CAM_ENTRY pEntry=NULL;
- u8 i=0;
- u8 ret = 0xff;
-
- WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
-
- pWapiInfo = &padapter->wapiInfo;
-
- //exist?
- for(i=0;i<WAPI_CAM_ENTRY_NUM;i++)
- {
- if(pWapiInfo->wapiCamEntry[i].IsUsed
- && (_rtw_memcmp(pMacAddr, pWapiInfo->wapiCamEntry[i].PeerMacAddr, ETH_ALEN) == _TRUE)
- && pWapiInfo->wapiCamEntry[i].keyidx == KID
- && pWapiInfo->wapiCamEntry[i].type == IsMsk)
- {
- ret = pWapiInfo->wapiCamEntry[i].entry_idx; //cover it
- break;
- }
- }
-
- if(i == WAPI_CAM_ENTRY_NUM) //not found
- {
- for(i=0;i<WAPI_CAM_ENTRY_NUM;i++)
- {
- if(pWapiInfo->wapiCamEntry[i].IsUsed == 0)
- {
- pWapiInfo->wapiCamEntry[i].IsUsed = 1;
- pWapiInfo->wapiCamEntry[i].type = IsMsk;
- pWapiInfo->wapiCamEntry[i].keyidx = KID;
- _rtw_memcpy(pWapiInfo->wapiCamEntry[i].PeerMacAddr, pMacAddr,ETH_ALEN);
- ret = pWapiInfo->wapiCamEntry[i].entry_idx;
- break;
- }
- }
- }
-
- WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__);
- return ret;
-
-/*
- if(RTIsListEmpty(&pWapiInfo->wapiCamIdleList)){
- RT_TRACE(COMP_SEC,DBG_LOUD,("No Entry for wapi!!!\n"));
- return 0;
- }
-
- pEntry = (PRT_WAPI_CAM_ENTRY)RTRemoveHeadList(&pWapiInfo->wapiCamIdleList);
- RTInsertTailList(&pWapiInfo->wapiCamUsedList, &pEntry->list);
-
- RT_TRACE(COMP_SEC,DBG_LOUD,("<====WapiGetCamEntry(),Get Entry Idx:%d.but we just return 4 for test\n",pEntry->entry_idx));
-
- return pEntry->entry_idx;*/
-}
-
-u8 WapiGetEntryForCamClear(_adapter *padapter,u8 *pPeerMac,u8 keyid,u8 IsMsk)
-{
- PRT_WAPI_T pWapiInfo=NULL;
- u8 i=0;
-
- WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
-
- pWapiInfo = &padapter->wapiInfo;
-
- for(i=0;i<WAPI_CAM_ENTRY_NUM;i++)
- {
- if(pWapiInfo->wapiCamEntry[i].IsUsed
- && (_rtw_memcmp(pPeerMac, pWapiInfo->wapiCamEntry[i].PeerMacAddr, ETH_ALEN) == _TRUE)
- && pWapiInfo->wapiCamEntry[i].keyidx == keyid
- && pWapiInfo->wapiCamEntry[i].type == IsMsk)
- {
- pWapiInfo->wapiCamEntry[i].IsUsed = 0;
- pWapiInfo->wapiCamEntry[i].keyidx = 2;
- _rtw_memset(pWapiInfo->wapiCamEntry[i].PeerMacAddr,0,ETH_ALEN);
-
- WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__);
- return pWapiInfo->wapiCamEntry[i].entry_idx;
- }
- }
-
- WAPI_TRACE(WAPI_API,"<====WapiGetReturnCamEntry(), No this cam entry.\n");
- return 0xff;
-/*
- if(RTIsListEmpty(&pWapiInfo->wapiCamUsedList)){
- RT_TRACE(COMP_SEC,DBG_LOUD,("No Entry for wapi!!!\n"));
- return FALSE;
- }
-
- pList = &pWapiInfo->wapiCamUsedList;
- while(pList->Flink != &pWapiInfo->wapiCamUsedList)
- {
- pEntry = (PRT_WAPI_CAM_ENTRY)pList->Flink;
- if(PlatformCompareMemory(pPeerMac,pEntry->PeerMacAddr, ETHER_ADDRLEN)== 0
- && keyid == pEntry->keyidx)
- {
- RTRemoveEntryList(pList);
- RTInsertHeadList(&pWapiInfo->wapiCamIdleList, pList);
- return pEntry->entry_idx;
- }
- pList = pList->Flink;
- }
-
- return 0;
-*/
-}
-
-void
-WapiResetAllCamEntry(_adapter *padapter)
-{
- PRT_WAPI_T pWapiInfo;
- int i;
-
- WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
-
- pWapiInfo = &padapter->wapiInfo;
-
- for (i=0;i<WAPI_CAM_ENTRY_NUM;i++)
- {
- _rtw_memset(pWapiInfo->wapiCamEntry[i].PeerMacAddr, 0, ETH_ALEN);
- pWapiInfo->wapiCamEntry[i].IsUsed = 0;
- pWapiInfo->wapiCamEntry[i].keyidx = 2; //invalid
- pWapiInfo->wapiCamEntry[i].entry_idx = 4+i*2;
- }
-
- WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__);
-
- return;
-}
-
-u8 WapiWriteOneCamEntry(
- _adapter *padapter,
- u8 *pMacAddr,
- u8 KeyId,
- u8 EntryId,
- u8 EncAlg,
- u8 bGroupKey,
- u8 *pKey
-)
-{
- u8 retVal = 0;
- u16 usConfig = 0;
-
- WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
-
- if(EntryId >= 32)
- {
- WAPI_TRACE(WAPI_ERR, "<=== CamAddOneEntry(): ulKeyId exceed!\n");
- return retVal;
- }
-
- usConfig=usConfig|(0x01<<15)|((u16)(EncAlg)<<2)|(KeyId);
-
- if(EncAlg == _SMS4_ )
- {
- if(bGroupKey == 1)
- usConfig |= (0x01<<6);
- if((EntryId % 2)==1) // ==0 sec key; == 1mic key
- usConfig |= (0x01<<5);
- }
-
- write_cam(padapter, EntryId, usConfig, pMacAddr, pKey);
-
- WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
- return 1;
-}
-
-void rtw_wapi_init(_adapter *padapter)
-{
- PRT_WAPI_T pWapiInfo;
- int i;
-
- WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__);
- RT_ASSERT_RET(padapter);
-
- if (!padapter->WapiSupport)
- {
- WAPI_TRACE(WAPI_INIT, "<========== %s, WAPI not supported!\n", __FUNCTION__);
- return;
- }
-
- pWapiInfo = &padapter->wapiInfo;
- pWapiInfo->bWapiEnable = false;
-
- //Init BKID List
- INIT_LIST_HEAD(&pWapiInfo->wapiBKIDIdleList);
- INIT_LIST_HEAD(&pWapiInfo->wapiBKIDStoreList);
- for(i=0;i<WAPI_MAX_BKID_NUM;i++)
- {
- list_add_tail(&pWapiInfo->wapiBKID[i].list, &pWapiInfo->wapiBKIDIdleList);
- }
-
- //Init STA List
- INIT_LIST_HEAD(&pWapiInfo->wapiSTAIdleList);
- INIT_LIST_HEAD(&pWapiInfo->wapiSTAUsedList);
- for(i=0;i<WAPI_MAX_STAINFO_NUM;i++)
- {
- list_add_tail(&pWapiInfo->wapiSta[i].list, &pWapiInfo->wapiSTAIdleList);
- }
-
- for (i=0;i<WAPI_CAM_ENTRY_NUM;i++)
- {
- pWapiInfo->wapiCamEntry[i].IsUsed = 0;
- pWapiInfo->wapiCamEntry[i].keyidx = 2; //invalid
- pWapiInfo->wapiCamEntry[i].entry_idx = 4+i*2;
- }
-
- WAPI_TRACE(WAPI_INIT, "<========== %s\n", __FUNCTION__);
-}
-
-void rtw_wapi_free(_adapter *padapter)
-{
- WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__);
- RT_ASSERT_RET(padapter);
-
- if (!padapter->WapiSupport)
- {
- WAPI_TRACE(WAPI_INIT, "<========== %s, WAPI not supported!\n", __FUNCTION__);
- return;
- }
-
- WapiFreeAllStaInfo(padapter);
-
- WAPI_TRACE(WAPI_INIT, "<========== %s\n", __FUNCTION__);
-}
-
-void rtw_wapi_disable_tx(_adapter *padapter)
-{
- WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__);
- RT_ASSERT_RET(padapter);
-
- if (!padapter->WapiSupport)
- {
- WAPI_TRACE(WAPI_INIT, "<========== %s, WAPI not supported!\n", __FUNCTION__);
- return;
- }
-
- padapter->wapiInfo.wapiTxMsk.bTxEnable = false;
- padapter->wapiInfo.wapiTxMsk.bSet = false;
-
- WAPI_TRACE(WAPI_INIT, "<========== %s\n", __FUNCTION__);
-}
-
-u8 rtw_wapi_is_wai_packet(_adapter* padapter,u8 *pkt_data)
-{
- PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- PRT_WAPI_STA_INFO pWapiSta = NULL;
- u8 WaiPkt = 0, *pTaddr, bFind = false;
- u8 Offset_TypeWAI = 0 ; // (mac header len + llc length)
-
- WAPI_TRACE(WAPI_TX|WAPI_RX, "===========> %s\n", __FUNCTION__);
-
- if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
- {
- WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
- return 0;
- }
-
- Offset_TypeWAI = 24 + 6 ;
-
- //YJ,add,091103. Data frame may also have skb->data[30]=0x88 and skb->data[31]=0xb4.
- if ((pkt_data[1]&0x40) !=0)
- {
- DBG_871X("data is privacy \n");
- return 0;
- }
-
- pTaddr = GetAddr2Ptr(pkt_data);
- if(list_empty(&pWapiInfo->wapiSTAUsedList)){
- bFind = false;
- }else{
- list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list){
- if (_rtw_memcmp(pTaddr, pWapiSta->PeerMacAddr, 6) == _TRUE) {
- bFind = true;
- break;
- }
- }
- }
-
- WAPI_TRACE(WAPI_TX|WAPI_RX, "%s: bFind=%d pTaddr="MAC_FMT"\n", __FUNCTION__, bFind, MAC_ARG(pTaddr));
-
- if (pkt_data[0] == WIFI_QOS_DATA_TYPE)
- {
- Offset_TypeWAI += 2;
- }
-
- // 88b4?
- if( (pkt_data[Offset_TypeWAI]==0x88) && (pkt_data[Offset_TypeWAI+1]==0xb4) ){
- WaiPkt = pkt_data[Offset_TypeWAI+5];
-
- psecuritypriv->hw_decrypted = _TRUE;
- }else{
- WAPI_TRACE(WAPI_TX|WAPI_RX, "%s(): non wai packet\n",__FUNCTION__);
- }
-
- WAPI_TRACE(WAPI_TX|WAPI_RX, "%s(): Recvd WAI frame. IsWAIPkt(%d)\n",__FUNCTION__, WaiPkt);
-
- return WaiPkt;
-}
-
-
-void rtw_wapi_update_info(_adapter *padapter, union recv_frame *precv_frame)
-{
- PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
- struct recv_frame_hdr *precv_hdr;
- u8 *ptr;
- u8 *pTA;
- u8 *pRecvPN;
-
-
- WAPI_TRACE(WAPI_RX, "===========> %s\n", __FUNCTION__);
-
- if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
- {
- WAPI_TRACE(WAPI_RX, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
- return;
- }
-
- precv_hdr = &precv_frame->u.hdr;
- ptr = precv_hdr->rx_data;
-
- if (precv_hdr->attrib.qos == 1)
- {
- precv_hdr->UserPriority = GetTid(ptr);
- }
- else
- {
- precv_hdr->UserPriority = 0;
- }
-
- pTA = GetAddr2Ptr(ptr);
- _rtw_memcpy((u8 *)precv_hdr->WapiSrcAddr, pTA, 6);
- pRecvPN = ptr + precv_hdr->attrib.hdrlen + 2;
- _rtw_memcpy((u8 *)precv_hdr->WapiTempPN, pRecvPN, 16);
-
- WAPI_TRACE(WAPI_RX, "<========== %s\n", __FUNCTION__);
-}
-
-/****************************************************************************
-TRUE-----------------Drop
-FALSE---------------- handle
-add to support WAPI to N-mode
-*****************************************************************************/
-u8 rtw_wapi_check_for_drop(
- _adapter *padapter,
- union recv_frame *precv_frame
-)
-{
- PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
- u8 *pLastRecvPN = NULL;
- u8 bFind = false;
- PRT_WAPI_STA_INFO pWapiSta = NULL;
- u8 bDrop = false;
- struct recv_frame_hdr *precv_hdr = &precv_frame->u.hdr;
- u8 WapiAEPNInitialValueSrc[16] = {0x37,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
- u8 WapiAEMultiCastPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
- u8 *ptr = precv_frame->u.hdr.rx_data;
- int i;
-
- WAPI_TRACE(WAPI_RX, "===========> %s\n", __FUNCTION__);
-
- if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
- {
- WAPI_TRACE(WAPI_RX, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
- return false;
- }
-
- if(precv_hdr->bIsWaiPacket !=0)
- {
- if(precv_hdr->bIsWaiPacket== 0x8)
- {
-
- DBG_871X("rtw_wapi_check_for_drop: dump packet \n");
- for(i=0;i<50;i++)
- {
- DBG_871X("%02X ",ptr[i]);
- if((i+1) %8 ==0)
- DBG_871X("\n");
- }
- DBG_871X("\n rtw_wapi_check_for_drop: dump packet \n");
-
- for(i=0;i<16;i++)
- {
- if(ptr[i+27] !=0)
- break;
- }
-
- if(i== 16)
- {
- WAPI_TRACE(WAPI_RX,"rtw_wapi_check_for_drop: drop with zero BKID \n");
- return true;
- }
- else
- {
- return false;
- }
- }
- else
- return false;
- }
-
- if(list_empty(&pWapiInfo->wapiSTAUsedList)){
- bFind = false;
- }else{
- list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
- if (_rtw_memcmp(precv_hdr->WapiSrcAddr, pWapiSta->PeerMacAddr, ETH_ALEN) == _TRUE) {
- bFind = true;
- break;
- }
- }
- }
- WAPI_TRACE(WAPI_RX, "%s: bFind=%d prxb->WapiSrcAddr="MAC_FMT"\n", __FUNCTION__, bFind, MAC_ARG(precv_hdr->WapiSrcAddr));
-
- if(bFind)
- {
- if(IS_MCAST(precv_hdr->attrib.ra))
- {
- WAPI_TRACE(WAPI_RX,"rtw_wapi_check_for_drop: multicast case \n");
- pLastRecvPN = pWapiSta->lastRxMulticastPN;
- }
- else
- {
- WAPI_TRACE(WAPI_RX,"rtw_wapi_check_for_drop: unicast case \n");
- switch(precv_hdr->UserPriority)
- {
- case 0:
- case 3:
- pLastRecvPN = pWapiSta->lastRxUnicastPNBEQueue;
- break;
- case 1:
- case 2:
- pLastRecvPN = pWapiSta->lastRxUnicastPNBKQueue;
- break;
- case 4:
- case 5:
- pLastRecvPN = pWapiSta->lastRxUnicastPNVIQueue;
- break;
- case 6:
- case 7:
- pLastRecvPN = pWapiSta->lastRxUnicastPNVOQueue;
- break;
- default:
- WAPI_TRACE(WAPI_ERR,"%s: Unknown TID \n",__FUNCTION__);
- break;
- }
- }
-
- if(!WapiComparePN(precv_hdr->WapiTempPN,pLastRecvPN))
- {
- WAPI_TRACE(WAPI_RX,"%s: Equal PN!!\n",__FUNCTION__);
- if(IS_MCAST(precv_hdr->attrib.ra))
- _rtw_memcpy(pLastRecvPN,WapiAEMultiCastPNInitialValueSrc,16);
- else
- _rtw_memcpy(pLastRecvPN,WapiAEPNInitialValueSrc,16);
- bDrop = true;
- }
- else
- {
- _rtw_memcpy(pLastRecvPN,precv_hdr->WapiTempPN,16);
- }
- }
-
- WAPI_TRACE(WAPI_RX, "<========== %s\n", __FUNCTION__);
- return bDrop;
-}
-
-void rtw_build_probe_resp_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib)
-{
- PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
- u8 WapiIELength = 0;
-
- WAPI_TRACE(WAPI_MLME, "===========> %s\n", __FUNCTION__);
-
- if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
- {
- WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported!\n", __FUNCTION__);
- return;
- }
-
- WapiSetIE(padapter);
- WapiIELength = pWapiInfo->wapiIELength;
- pframe[0] = _WAPI_IE_;
- pframe[1] = WapiIELength;
- _rtw_memcpy(pframe+2, pWapiInfo->wapiIE, WapiIELength);
- pframe += WapiIELength+2;
- pattrib->pktlen += WapiIELength+2;
-
- WAPI_TRACE(WAPI_MLME, "<========== %s\n", __FUNCTION__);
-}
-
-void rtw_build_beacon_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib)
-{
- PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
- u8 WapiIELength = 0;
- WAPI_TRACE(WAPI_MLME, "===========> %s\n", __FUNCTION__);
-
- if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
- {
- WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported!\n", __FUNCTION__);
- return;
- }
-
- WapiSetIE(padapter);
- WapiIELength = pWapiInfo->wapiIELength;
- pframe[0] = _WAPI_IE_;
- pframe[1] = WapiIELength;
- _rtw_memcpy(pframe+2, pWapiInfo->wapiIE, WapiIELength);
- pframe += WapiIELength+2;
- pattrib->pktlen += WapiIELength+2;
-
- WAPI_TRACE(WAPI_MLME, "<========== %s\n", __FUNCTION__);
-}
-
-void rtw_build_assoc_req_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib)
-{
- PRT_WAPI_BKID pWapiBKID;
- u16 bkidNum;
- PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
- u8 WapiIELength = 0;
-
- WAPI_TRACE(WAPI_MLME, "===========> %s\n", __FUNCTION__);
-
- if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
- {
- WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported!\n", __FUNCTION__);
- return;
- }
-
- WapiSetIE(padapter);
- WapiIELength = pWapiInfo->wapiIELength;
- bkidNum = 0;
- if(!list_empty(&(pWapiInfo->wapiBKIDStoreList))){
- list_for_each_entry(pWapiBKID, &pWapiInfo->wapiBKIDStoreList, list) {
- bkidNum ++;
- _rtw_memcpy(pWapiInfo->wapiIE+WapiIELength+2, pWapiBKID->bkid,16);
- WapiIELength += 16;
- }
- }
- _rtw_memcpy(pWapiInfo->wapiIE+WapiIELength, &bkidNum, 2);
- WapiIELength += 2;
-
- pframe[0] = _WAPI_IE_;
- pframe[1] = WapiIELength;
- _rtw_memcpy(pframe+2, pWapiInfo->wapiIE, WapiIELength);
- pframe += WapiIELength+2;
- pattrib->pktlen += WapiIELength+2;
- WAPI_TRACE(WAPI_MLME, "<========== %s\n", __FUNCTION__);
-}
-
-void rtw_wapi_on_assoc_ok(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE)
-{
- PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
- PRT_WAPI_STA_INFO pWapiSta;
- u8 WapiAEPNInitialValueSrc[16] = {0x37,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
- //u8 WapiASUEPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
- u8 WapiAEMultiCastPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
-
- WAPI_TRACE(WAPI_MLME, "===========> %s\n", __FUNCTION__);
-
- if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
- {
- WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
- return;
- }
-
- pWapiSta =(PRT_WAPI_STA_INFO)list_entry(pWapiInfo->wapiSTAIdleList.next, RT_WAPI_STA_INFO, list);
- list_del_init(&pWapiSta->list);
- list_add_tail(&pWapiSta->list, &pWapiInfo->wapiSTAUsedList);
- _rtw_memcpy(pWapiSta->PeerMacAddr,padapter->mlmeextpriv.mlmext_info.network.MacAddress,6);
- _rtw_memcpy(pWapiSta->lastRxMulticastPN, WapiAEMultiCastPNInitialValueSrc, 16);
- _rtw_memcpy(pWapiSta->lastRxUnicastPN, WapiAEPNInitialValueSrc, 16);
-
- //For chenk PN error with Qos Data after s3: add by ylb 20111114
- _rtw_memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiAEPNInitialValueSrc,16);
- _rtw_memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiAEPNInitialValueSrc,16);
- _rtw_memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiAEPNInitialValueSrc,16);
- _rtw_memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiAEPNInitialValueSrc,16);
-
- WAPI_TRACE(WAPI_MLME, "<========== %s\n", __FUNCTION__);
-}
-
-
-void rtw_wapi_return_one_sta_info(_adapter *padapter, u8 *MacAddr)
-{
- PRT_WAPI_T pWapiInfo;
- PRT_WAPI_STA_INFO pWapiStaInfo = NULL;
- PRT_WAPI_BKID pWapiBkid = NULL;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
- pWapiInfo = &padapter->wapiInfo;
-
- WAPI_TRACE(WAPI_API, "==========> %s\n", __FUNCTION__);
-
- if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
- {
- WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
- return;
- }
-
- if(check_fwstate(pmlmepriv, WIFI_STATION_STATE))
- {
- while(!list_empty(&(pWapiInfo->wapiBKIDStoreList)))
- {
- pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDStoreList.next, RT_WAPI_BKID, list);
- list_del_init(&pWapiBkid->list);
- _rtw_memset(pWapiBkid->bkid,0,16);
- list_add_tail(&pWapiBkid->list, &pWapiInfo->wapiBKIDIdleList);
- }
- }
-
-
- WAPI_TRACE(WAPI_API, " %s: after clear bkid \n", __FUNCTION__);
-
-
- //Remove STA info
- if(list_empty(&(pWapiInfo->wapiSTAUsedList))){
- WAPI_TRACE(WAPI_API, " %s: wapiSTAUsedList is null \n", __FUNCTION__);
- return;
- }else{
-
- WAPI_TRACE(WAPI_API, " %s: wapiSTAUsedList is not null \n", __FUNCTION__);
-#if 0
- pWapiStaInfo=(PRT_WAPI_STA_INFO)list_entry((pWapiInfo->wapiSTAUsedList.next),RT_WAPI_STA_INFO,list);
-
- list_for_each_entry(pWapiStaInfo, &(pWapiInfo->wapiSTAUsedList), list) {
-
- DBG_871X("MAC Addr %02x-%02x-%02x-%02x-%02x-%02x \n",MacAddr[0],MacAddr[1],MacAddr[2],MacAddr[3],MacAddr[4],MacAddr[5]);
-
-
- DBG_871X("peer Addr %02x-%02x-%02x-%02x-%02x-%02x \n",pWapiStaInfo->PeerMacAddr[0],pWapiStaInfo->PeerMacAddr[1],pWapiStaInfo->PeerMacAddr[2],pWapiStaInfo->PeerMacAddr[3],pWapiStaInfo->PeerMacAddr[4],pWapiStaInfo->PeerMacAddr[5]);
-
- if(pWapiStaInfo == NULL)
- {
- WAPI_TRACE(WAPI_API, " %s: pWapiStaInfo == NULL Case \n", __FUNCTION__);
- return;
- }
-
- if(pWapiStaInfo->PeerMacAddr == NULL)
- {
- WAPI_TRACE(WAPI_API, " %s: pWapiStaInfo->PeerMacAddr == NULL Case \n", __FUNCTION__);
- return;
- }
-
- if(MacAddr == NULL)
- {
- WAPI_TRACE(WAPI_API, " %s: MacAddr == NULL Case \n", __FUNCTION__);
- return;
- }
-
- if (_rtw_memcmp(pWapiStaInfo->PeerMacAddr, MacAddr, ETH_ALEN) == _TRUE) {
- pWapiStaInfo->bAuthenticateInProgress = false;
- pWapiStaInfo->bSetkeyOk = false;
- _rtw_memset(pWapiStaInfo->PeerMacAddr,0,ETH_ALEN);
- list_del_init(&pWapiStaInfo->list);
- list_add_tail(&pWapiStaInfo->list, &pWapiInfo->wapiSTAIdleList);
- break;
- }
-
- }
-#endif
-
- while(!list_empty(&(pWapiInfo->wapiSTAUsedList)))
- {
- pWapiStaInfo = (PRT_WAPI_STA_INFO)list_entry(pWapiInfo->wapiSTAUsedList.next, RT_WAPI_STA_INFO, list);
-
- DBG_871X("peer Addr %02x-%02x-%02x-%02x-%02x-%02x \n",pWapiStaInfo->PeerMacAddr[0],pWapiStaInfo->PeerMacAddr[1],pWapiStaInfo->PeerMacAddr[2],pWapiStaInfo->PeerMacAddr[3],pWapiStaInfo->PeerMacAddr[4],pWapiStaInfo->PeerMacAddr[5]);
-
- list_del_init(&pWapiStaInfo->list);
- memset(pWapiStaInfo->PeerMacAddr,0,ETH_ALEN);
- pWapiStaInfo->bSetkeyOk = 0;
- list_add_tail(&pWapiStaInfo->list, &pWapiInfo->wapiSTAIdleList);
- }
-
- }
-
- WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__);
- return;
-}
-
-void rtw_wapi_return_all_sta_info(_adapter *padapter)
-{
- PRT_WAPI_T pWapiInfo;
- PRT_WAPI_STA_INFO pWapiStaInfo;
- PRT_WAPI_BKID pWapiBkid;
- WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
-
- pWapiInfo = &padapter->wapiInfo;
-
- if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
- {
- WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
- return;
- }
-
- //Sta Info List
- while(!list_empty(&(pWapiInfo->wapiSTAUsedList)))
- {
- pWapiStaInfo = (PRT_WAPI_STA_INFO)list_entry(pWapiInfo->wapiSTAUsedList.next, RT_WAPI_STA_INFO, list);
- list_del_init(&pWapiStaInfo->list);
- memset(pWapiStaInfo->PeerMacAddr,0,ETH_ALEN);
- pWapiStaInfo->bSetkeyOk = 0;
- list_add_tail(&pWapiStaInfo->list, &pWapiInfo->wapiSTAIdleList);
- }
-
- //BKID List
- while(!list_empty(&(pWapiInfo->wapiBKIDStoreList)))
- {
- pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDStoreList.next, RT_WAPI_BKID, list);
- list_del_init(&pWapiBkid->list);
- memset(pWapiBkid->bkid,0,16);
- list_add_tail(&pWapiBkid->list, &pWapiInfo->wapiBKIDIdleList);
- }
- WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__);
-}
-
-void rtw_wapi_clear_cam_entry(_adapter *padapter, u8 *pMacAddr)
-{
- u8 UcIndex = 0;
-
- WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
-
- if ((!padapter->WapiSupport) || (!padapter->wapiInfo.bWapiEnable))
- {
- WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
- return;
- }
-
- UcIndex = WapiGetEntryForCamClear(padapter, pMacAddr, 0, 0);
- if(UcIndex != 0xff){
- //CAM_mark_invalid(Adapter, UcIndex);
- CAM_empty_entry(padapter, UcIndex);
- }
-
- UcIndex = WapiGetEntryForCamClear(padapter, pMacAddr, 1, 0);
- if(UcIndex != 0xff){
- //CAM_mark_invalid(Adapter, UcIndex);
- CAM_empty_entry(padapter, UcIndex);
- }
-
- UcIndex = WapiGetEntryForCamClear(padapter, pMacAddr, 0, 1);
- if(UcIndex != 0xff){
- //CAM_mark_invalid(Adapter, UcIndex);
- CAM_empty_entry(padapter, UcIndex);
- }
-
- UcIndex = WapiGetEntryForCamClear(padapter, pMacAddr, 1, 1);
- if(UcIndex != 0xff){
- //CAM_mark_invalid(padapter, UcIndex);
- CAM_empty_entry(padapter, UcIndex);
- }
-
- WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__);
-}
-
-void rtw_wapi_clear_all_cam_entry(_adapter *padapter)
-{
- WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
-
- if ((!padapter->WapiSupport) || (!padapter->wapiInfo.bWapiEnable))
- {
- WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
- return;
- }
-
- invalidate_cam_all(padapter); // is this ok?
- WapiResetAllCamEntry(padapter);
-
- WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
-}
-
-void rtw_wapi_set_key(_adapter *padapter, RT_WAPI_KEY *pWapiKey, RT_WAPI_STA_INFO *pWapiSta, u8 bGroupKey, u8 bUseDefaultKey)
-{
- PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
- u8 *pMacAddr = pWapiSta->PeerMacAddr;
- u32 EntryId = 0;
- BOOLEAN IsPairWise = false ;
- u8 EncAlgo;
-
- WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
-
- if ((!padapter->WapiSupport) || (!padapter->wapiInfo.bWapiEnable))
- {
- WAPI_TRACE(WAPI_API, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
- return;
- }
-
- EncAlgo = _SMS4_;
-
- //For Tx bc/mc pkt,use defualt key entry
- if(bUseDefaultKey)
- {
- // when WAPI update key, keyid will be 0 or 1 by turns.
- if (pWapiKey->keyId == 0)
- EntryId = 0;
- else
- EntryId = 2;
- }
- else
- {
- // tx/rx unicast pkt, or rx broadcast, find the key entry by peer's MacAddr
- EntryId = WapiGetEntryForCamWrite(padapter,pMacAddr,pWapiKey->keyId,bGroupKey);
- }
-
- if(EntryId == 0xff){
- WAPI_TRACE(WAPI_API, "===>No entry for WAPI setkey! !!\n");
- return;
- }
-
- //EntryId is also used to diff Sec key and Mic key
- //Sec Key
- WapiWriteOneCamEntry(padapter,
- pMacAddr,
- pWapiKey->keyId, //keyid
- EntryId, //entry
- EncAlgo, //type
- bGroupKey, //pairwise or group key
- pWapiKey->dataKey);
- //MIC key
- WapiWriteOneCamEntry(padapter,
- pMacAddr,
- pWapiKey->keyId, //keyid
- EntryId+1, //entry
- EncAlgo, //type
- bGroupKey, //pairwise or group key
- pWapiKey->micKey);
-
- WAPI_TRACE(WAPI_API, "Set Wapi Key :KeyId:%d,EntryId:%d,PairwiseKey:%d.\n",pWapiKey->keyId,EntryId,!bGroupKey);
- WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
-
-}
-
-#if 0
-//YJ,test,091013
-void wapi_test_set_key(struct _adapter *padapter, u8* buf)
-{ /*Data: keyType(1) + bTxEnable(1) + bAuthenticator(1) + bUpdate(1) + PeerAddr(6) + DataKey(16) + MicKey(16) + KeyId(1)*/
- PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
- PRT_WAPI_BKID pWapiBkid;
- PRT_WAPI_STA_INFO pWapiSta;
- u8 data[43];
- bool bTxEnable;
- bool bUpdate;
- bool bAuthenticator;
- u8 PeerAddr[6];
- u8 WapiAEPNInitialValueSrc[16] = {0x37,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
- u8 WapiASUEPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
- u8 WapiAEMultiCastPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
-
- WAPI_TRACE(WAPI_INIT, "===========>%s\n", __FUNCTION__);
-
- if (!padapter->WapiSupport){
- return;
- }
-
- copy_from_user(data, buf, 43);
- bTxEnable = data[1];
- bAuthenticator = data[2];
- bUpdate = data[3];
- memcpy(PeerAddr,data+4,6);
-
- if(data[0] == 0x3){
- if(!list_empty(&(pWapiInfo->wapiBKIDIdleList))){
- pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDIdleList.next, RT_WAPI_BKID, list);
- list_del_init(&pWapiBkid->list);
- memcpy(pWapiBkid->bkid, data+10, 16);
- WAPI_DATA(WAPI_INIT, "SetKey - BKID", pWapiBkid->bkid, 16);
- list_add_tail(&pWapiBkid->list, &pWapiInfo->wapiBKIDStoreList);
- }
- }else{
- list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
- if(!memcmp(pWapiSta->PeerMacAddr,PeerAddr,6)){
- pWapiSta->bAuthenticatorInUpdata = false;
- switch(data[0]){
- case 1: //usk
- if(bAuthenticator){ //authenticator
- memcpy(pWapiSta->lastTxUnicastPN,WapiAEPNInitialValueSrc,16);
- if(!bUpdate) { //first
- WAPI_TRACE(WAPI_INIT,"AE fisrt set usk \n");
- pWapiSta->wapiUsk.bSet = true;
- memcpy(pWapiSta->wapiUsk.dataKey,data+10,16);
- memcpy(pWapiSta->wapiUsk.micKey,data+26,16);
- pWapiSta->wapiUsk.keyId = *(data+42);
- pWapiSta->wapiUsk.bTxEnable = true;
- WAPI_DATA(WAPI_INIT, "SetKey - AE USK Data Key", pWapiSta->wapiUsk.dataKey, 16);
- WAPI_DATA(WAPI_INIT, "SetKey - AE USK Mic Key", pWapiSta->wapiUsk.micKey, 16);
- }
- else //update
- {
- WAPI_TRACE(WAPI_INIT, "AE update usk \n");
- pWapiSta->wapiUskUpdate.bSet = true;
- pWapiSta->bAuthenticatorInUpdata = true;
- memcpy(pWapiSta->wapiUskUpdate.dataKey,data+10,16);
- memcpy(pWapiSta->wapiUskUpdate.micKey,data+26,16);
- memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiASUEPNInitialValueSrc,16);
- memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiASUEPNInitialValueSrc,16);
- memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiASUEPNInitialValueSrc,16);
- memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiASUEPNInitialValueSrc,16);
- memcpy(pWapiSta->lastRxUnicastPN,WapiASUEPNInitialValueSrc,16);
- pWapiSta->wapiUskUpdate.keyId = *(data+42);
- pWapiSta->wapiUskUpdate.bTxEnable = true;
- }
- }
- else{
- if(!bUpdate){
- WAPI_TRACE(WAPI_INIT,"ASUE fisrt set usk \n");
- if(bTxEnable){
- pWapiSta->wapiUsk.bTxEnable = true;
- memcpy(pWapiSta->lastTxUnicastPN,WapiASUEPNInitialValueSrc,16);
- }else{
- pWapiSta->wapiUsk.bSet = true;
- memcpy(pWapiSta->wapiUsk.dataKey,data+10,16);
- memcpy(pWapiSta->wapiUsk.micKey,data+26,16);
- pWapiSta->wapiUsk.keyId = *(data+42);
- pWapiSta->wapiUsk.bTxEnable = false;
- }
- }else{
- WAPI_TRACE(WAPI_INIT,"ASUE update usk \n");
- if(bTxEnable){
- pWapiSta->wapiUskUpdate.bTxEnable = true;
- if(pWapiSta->wapiUskUpdate.bSet){
- memcpy(pWapiSta->wapiUsk.dataKey,pWapiSta->wapiUskUpdate.dataKey,16);
- memcpy(pWapiSta->wapiUsk.micKey,pWapiSta->wapiUskUpdate.micKey,16);
- pWapiSta->wapiUsk.keyId=pWapiSta->wapiUskUpdate.keyId;
- memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiASUEPNInitialValueSrc,16);
- memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiASUEPNInitialValueSrc,16);
- memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiASUEPNInitialValueSrc,16);
- memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiASUEPNInitialValueSrc,16);
- memcpy(pWapiSta->lastRxUnicastPN,WapiASUEPNInitialValueSrc,16);
- pWapiSta->wapiUskUpdate.bTxEnable = false;
- pWapiSta->wapiUskUpdate.bSet = false;
- }
- memcpy(pWapiSta->lastTxUnicastPN,WapiASUEPNInitialValueSrc,16);
- }else{
- pWapiSta->wapiUskUpdate.bSet = true;
- memcpy(pWapiSta->wapiUskUpdate.dataKey,data+10,16);
- memcpy(pWapiSta->wapiUskUpdate.micKey,data+26,16);
- pWapiSta->wapiUskUpdate.keyId = *(data+42);
- pWapiSta->wapiUskUpdate.bTxEnable = false;
- }
- }
- }
- break;
- case 2: //msk
- if(bAuthenticator){ //authenticator
- pWapiInfo->wapiTxMsk.bSet = true;
- memcpy(pWapiInfo->wapiTxMsk.dataKey,data+10,16);
- memcpy(pWapiInfo->wapiTxMsk.micKey,data+26,16);
- pWapiInfo->wapiTxMsk.keyId = *(data+42);
- pWapiInfo->wapiTxMsk.bTxEnable = true;
- memcpy(pWapiInfo->lastTxMulticastPN,WapiAEMultiCastPNInitialValueSrc,16);
-
- if(!bUpdate){ //first
- WAPI_TRACE(WAPI_INIT, "AE fisrt set msk \n");
- if(!pWapiSta->bSetkeyOk)
- pWapiSta->bSetkeyOk = true;
- pWapiInfo->bFirstAuthentiateInProgress= false;
- }else{ //update
- WAPI_TRACE(WAPI_INIT,"AE update msk \n");
- }
-
- WAPI_DATA(WAPI_INIT, "SetKey - AE MSK Data Key", pWapiInfo->wapiTxMsk.dataKey, 16);
- WAPI_DATA(WAPI_INIT, "SetKey - AE MSK Mic Key", pWapiInfo->wapiTxMsk.micKey, 16);
- }
- else{
- if(!bUpdate){
- WAPI_TRACE(WAPI_INIT,"ASUE fisrt set msk \n");
- pWapiSta->wapiMsk.bSet = true;
- memcpy(pWapiSta->wapiMsk.dataKey,data+10,16);
- memcpy(pWapiSta->wapiMsk.micKey,data+26,16);
- pWapiSta->wapiMsk.keyId = *(data+42);
- pWapiSta->wapiMsk.bTxEnable = false;
- if(!pWapiSta->bSetkeyOk)
- pWapiSta->bSetkeyOk = true;
- pWapiInfo->bFirstAuthentiateInProgress= false;
- WAPI_DATA(WAPI_INIT, "SetKey - ASUE MSK Data Key", pWapiSta->wapiMsk.dataKey, 16);
- WAPI_DATA(WAPI_INIT, "SetKey - ASUE MSK Mic Key", pWapiSta->wapiMsk.micKey, 16);
- }else{
- WAPI_TRACE(WAPI_INIT,"ASUE update msk \n");
- pWapiSta->wapiMskUpdate.bSet = true;
- memcpy(pWapiSta->wapiMskUpdate.dataKey,data+10,16);
- memcpy(pWapiSta->wapiMskUpdate.micKey,data+26,16);
- pWapiSta->wapiMskUpdate.keyId = *(data+42);
- pWapiSta->wapiMskUpdate.bTxEnable = false;
- }
- }
- break;
- default:
- WAPI_TRACE(WAPI_ERR,"Unknown Flag \n");
- break;
- }
- }
- }
- }
- WAPI_TRACE(WAPI_INIT, "<===========%s\n", __FUNCTION__);
-}
-
-
-void wapi_test_init(struct _adapter *padapter)
-{
- u8 keybuf[100];
- u8 mac_addr[6]={0x00,0xe0,0x4c,0x72,0x04,0x70};
- u8 UskDataKey[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
- u8 UskMicKey[16]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f};
- u8 UskId = 0;
- u8 MskDataKey[16]={0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f};
- u8 MskMicKey[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f};
- u8 MskId = 0;
-
- WAPI_TRACE(WAPI_INIT, "===========>%s\n", __FUNCTION__);
-
- //Enable Wapi
- WAPI_TRACE(WAPI_INIT, "%s: Enable wapi!!!!\n", __FUNCTION__);
- padapter->wapiInfo.bWapiEnable = true;
- padapter->pairwise_key_type = KEY_TYPE_SMS4;
- ieee->group_key_type = KEY_TYPE_SMS4;
- padapter->wapiInfo.extra_prefix_len = WAPI_EXT_LEN;
- padapter->wapiInfo.extra_postfix_len = SMS4_MIC_LEN;
-
- //set usk
- WAPI_TRACE(WAPI_INIT, "%s: Set USK!!!!\n", __FUNCTION__);
- memset(keybuf,0,100);
- keybuf[0] = 1; //set usk
- keybuf[1] = 1; //enable tx
- keybuf[2] = 1; //AE
- keybuf[3] = 0; //not update
-
- memcpy(keybuf+4,mac_addr,6);
- memcpy(keybuf+10,UskDataKey,16);
- memcpy(keybuf+26,UskMicKey,16);
- keybuf[42]=UskId;
- wapi_test_set_key(padapter, keybuf);
-
- memset(keybuf,0,100);
- keybuf[0] = 1; //set usk
- keybuf[1] = 1; //enable tx
- keybuf[2] = 0; //AE
- keybuf[3] = 0; //not update
-
- memcpy(keybuf+4,mac_addr,6);
- memcpy(keybuf+10,UskDataKey,16);
- memcpy(keybuf+26,UskMicKey,16);
- keybuf[42]=UskId;
- wapi_test_set_key(padapter, keybuf);
-
- //set msk
- WAPI_TRACE(WAPI_INIT, "%s: Set MSK!!!!\n", __FUNCTION__);
- memset(keybuf,0,100);
- keybuf[0] = 2; //set msk
- keybuf[1] = 1; //Enable TX
- keybuf[2] = 1; //AE
- keybuf[3] = 0; //not update
- memcpy(keybuf+4,mac_addr,6);
- memcpy(keybuf+10,MskDataKey,16);
- memcpy(keybuf+26,MskMicKey,16);
- keybuf[42] = MskId;
- wapi_test_set_key(padapter, keybuf);
-
- memset(keybuf,0,100);
- keybuf[0] = 2; //set msk
- keybuf[1] = 1; //Enable TX
- keybuf[2] = 0; //AE
- keybuf[3] = 0; //not update
- memcpy(keybuf+4,mac_addr,6);
- memcpy(keybuf+10,MskDataKey,16);
- memcpy(keybuf+26,MskMicKey,16);
- keybuf[42] = MskId;
- wapi_test_set_key(padapter, keybuf);
- WAPI_TRACE(WAPI_INIT, "<===========%s\n", __FUNCTION__);
-}
-#endif
-
-void rtw_wapi_get_iv(_adapter *padapter,u8 *pRA, u8*IV)
-{
- PWLAN_HEADER_WAPI_EXTENSION pWapiExt = NULL;
- PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
- bool bPNOverflow = false;
- bool bFindMatchPeer = false;
- PRT_WAPI_STA_INFO pWapiSta = NULL;
-
- pWapiExt = (PWLAN_HEADER_WAPI_EXTENSION)IV;
-
- WAPI_DATA(WAPI_RX,"wapi_get_iv: pra",pRA,6);
-
- if(IS_MCAST(pRA)){
- if(!pWapiInfo->wapiTxMsk.bTxEnable){
- WAPI_TRACE(WAPI_ERR,"%s: bTxEnable = 0!!\n",__FUNCTION__);
- return;
- }
-
- if(pWapiInfo->wapiTxMsk.keyId <= 1){
- pWapiExt->KeyIdx = pWapiInfo->wapiTxMsk.keyId;
- pWapiExt->Reserved = 0;
- bPNOverflow = WapiIncreasePN(pWapiInfo->lastTxMulticastPN, 1);
- memcpy(pWapiExt->PN, pWapiInfo->lastTxMulticastPN, 16);
- }
- }
- else
- {
- if(list_empty(&pWapiInfo->wapiSTAUsedList)){
- WAPI_TRACE(WAPI_RX,"rtw_wapi_get_iv: list is empty \n");
- _rtw_memset(IV,10,18);
- return;
- }
- else{
- list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list){
- WAPI_DATA(WAPI_RX,"rtw_wapi_get_iv: peermacaddr ",pWapiSta->PeerMacAddr,6);
- if (_rtw_memcmp((u8*)pWapiSta->PeerMacAddr, pRA, 6) == _TRUE) {
- bFindMatchPeer = true;
- break;
- }
- }
-
- WAPI_TRACE(WAPI_RX,"bFindMatchPeer: %d \n",bFindMatchPeer);
- WAPI_DATA(WAPI_RX,"Addr",pRA,6);
-
- if (bFindMatchPeer){
- if((!pWapiSta->wapiUskUpdate.bTxEnable) && (!pWapiSta->wapiUsk.bTxEnable))
- return;
-
- if (pWapiSta->wapiUsk.keyId <= 1){
- if(pWapiSta->wapiUskUpdate.bTxEnable)
- pWapiExt->KeyIdx = pWapiSta->wapiUskUpdate.keyId;
- else
- pWapiExt->KeyIdx = pWapiSta->wapiUsk.keyId;
-
- pWapiExt->Reserved = 0;
- bPNOverflow = WapiIncreasePN(pWapiSta->lastTxUnicastPN, 2);
- _rtw_memcpy(pWapiExt->PN, pWapiSta->lastTxUnicastPN, 16);
-
- }
- }
- }
-
- }
-
-}
-
-bool rtw_wapi_drop_for_key_absent(_adapter *padapter,u8 *pRA)
-{
- PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
- bool bFindMatchPeer = false;
- bool bDrop = false;
- PRT_WAPI_STA_INFO pWapiSta = NULL;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
-
- WAPI_DATA(WAPI_RX,"rtw_wapi_drop_for_key_absent: ra ",pRA,6);
-
- if(psecuritypriv->dot11PrivacyAlgrthm == _SMS4_)
- {
- if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
- return true;
-
- if(IS_MCAST(pRA)){
- if(!pWapiInfo->wapiTxMsk.bTxEnable){
- bDrop = true;
- WAPI_TRACE(WAPI_RX,"rtw_wapi_drop_for_key_absent: multicast key is absent \n");
- return bDrop;
- }
- }
- else{
- if(!list_empty(&pWapiInfo->wapiSTAUsedList)){
- list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list){
- WAPI_DATA(WAPI_RX,"rtw_wapi_drop_for_key_absent: pWapiSta->PeerMacAddr ",pWapiSta->PeerMacAddr,6);
- if (_rtw_memcmp(pRA, pWapiSta->PeerMacAddr, 6) == _TRUE){
- bFindMatchPeer = true;
- break;
- }
- }
- if (bFindMatchPeer) {
- if (!pWapiSta->wapiUsk.bTxEnable){
- bDrop = true;
- WAPI_TRACE(WAPI_RX,"rtw_wapi_drop_for_key_absent: unicast key is absent \n");
- return bDrop;
- }
- }
- else{
- bDrop = true;
- WAPI_TRACE(WAPI_RX,"rtw_wapi_drop_for_key_absent: no peer find \n");
- return bDrop;
- }
-
- }
- else{
- bDrop = true;
- WAPI_TRACE(WAPI_RX,"rtw_wapi_drop_for_key_absent: no sta exist \n");
- return bDrop;
- }
- }
- }
- else
- {
- return bDrop;
- }
-
- return bDrop;
-}
-
-#endif
+#ifdef CONFIG_WAPI_SUPPORT
+
+#include <linux/unistd.h>
+#include <linux/etherdevice.h>
+#include <drv_types.h>
+#include <rtw_wapi.h>
+
+
+u32 wapi_debug_component =
+// WAPI_INIT |
+// WAPI_API |
+// WAPI_TX |
+// WAPI_RX |
+ WAPI_ERR ; //always open err flags on
+
+void WapiFreeAllStaInfo(_adapter *padapter)
+{
+ PRT_WAPI_T pWapiInfo;
+ PRT_WAPI_STA_INFO pWapiStaInfo;
+ PRT_WAPI_BKID pWapiBkid;
+
+ WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__);
+ pWapiInfo = &padapter->wapiInfo;
+
+ //Pust to Idle List
+ rtw_wapi_return_all_sta_info(padapter);
+
+ //Sta Info List
+ while(!list_empty(&(pWapiInfo->wapiSTAIdleList)))
+ {
+ pWapiStaInfo = (PRT_WAPI_STA_INFO)list_entry(pWapiInfo->wapiSTAIdleList.next, RT_WAPI_STA_INFO, list);
+ list_del_init(&pWapiStaInfo->list);
+ }
+
+ //BKID List
+ while(!list_empty(&(pWapiInfo->wapiBKIDIdleList)))
+ {
+ pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDIdleList.next, RT_WAPI_BKID, list);
+ list_del_init(&pWapiBkid->list);
+ }
+ WAPI_TRACE(WAPI_INIT, "<=========== %s\n", __FUNCTION__);
+ return;
+}
+
+void WapiSetIE(_adapter *padapter)
+{
+ PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
+ //PRT_WAPI_BKID pWapiBkid;
+ u16 protocolVer = 1;
+ u16 akmCnt = 1;
+ u16 suiteCnt = 1;
+ u16 capability = 0;
+ u8 OUI[3];
+
+ OUI[0] = 0x00;
+ OUI[1] = 0x14;
+ OUI[2] = 0x72;
+
+ pWapiInfo->wapiIELength = 0;
+//protocol version
+ memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &protocolVer, 2);
+ pWapiInfo->wapiIELength +=2;
+//akm
+ memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &akmCnt, 2);
+ pWapiInfo->wapiIELength +=2;
+
+ if(pWapiInfo->bWapiPSK){
+ memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3);
+ pWapiInfo->wapiIELength +=3;
+ pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x2;
+ pWapiInfo->wapiIELength +=1;
+ }else{
+ memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3);
+ pWapiInfo->wapiIELength +=3;
+ pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x1;
+ pWapiInfo->wapiIELength +=1;
+ }
+
+//usk
+ memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &suiteCnt, 2);
+ pWapiInfo->wapiIELength +=2;
+ memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3);
+ pWapiInfo->wapiIELength +=3;
+ pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x1;
+ pWapiInfo->wapiIELength +=1;
+
+//msk
+ memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength,OUI, 3);
+ pWapiInfo->wapiIELength +=3;
+ pWapiInfo->wapiIE[pWapiInfo->wapiIELength] = 0x1;
+ pWapiInfo->wapiIELength +=1;
+
+//Capbility
+ memcpy(pWapiInfo->wapiIE+pWapiInfo->wapiIELength, &capability, 2);
+ pWapiInfo->wapiIELength +=2;
+}
+
+
+/* PN1 > PN2, return 1,
+ * else return 0.
+ */
+u32 WapiComparePN(u8 *PN1, u8 *PN2)
+{
+ char i;
+
+ if ((NULL == PN1) || (NULL == PN2))
+ return 1;
+
+ // overflow case
+ if ((PN2[15] - PN1[15]) & 0x80)
+ return 1;
+
+ for (i=16; i>0; i--)
+ {
+ if(PN1[i-1] == PN2[i-1])
+ continue;
+ else if(PN1[i-1] > PN2[i-1])
+ return 1;
+ else
+ return 0;
+ }
+
+ return 0;
+}
+
+u8
+WapiGetEntryForCamWrite(_adapter *padapter,u8 *pMacAddr,u8 KID,BOOLEAN IsMsk)
+{
+ PRT_WAPI_T pWapiInfo=NULL;
+ //PRT_WAPI_CAM_ENTRY pEntry=NULL;
+ u8 i=0;
+ u8 ret = 0xff;
+
+ WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
+
+ pWapiInfo = &padapter->wapiInfo;
+
+ //exist?
+ for(i=0;i<WAPI_CAM_ENTRY_NUM;i++)
+ {
+ if(pWapiInfo->wapiCamEntry[i].IsUsed
+ && (_rtw_memcmp(pMacAddr, pWapiInfo->wapiCamEntry[i].PeerMacAddr, ETH_ALEN) == _TRUE)
+ && pWapiInfo->wapiCamEntry[i].keyidx == KID
+ && pWapiInfo->wapiCamEntry[i].type == IsMsk)
+ {
+ ret = pWapiInfo->wapiCamEntry[i].entry_idx; //cover it
+ break;
+ }
+ }
+
+ if(i == WAPI_CAM_ENTRY_NUM) //not found
+ {
+ for(i=0;i<WAPI_CAM_ENTRY_NUM;i++)
+ {
+ if(pWapiInfo->wapiCamEntry[i].IsUsed == 0)
+ {
+ pWapiInfo->wapiCamEntry[i].IsUsed = 1;
+ pWapiInfo->wapiCamEntry[i].type = IsMsk;
+ pWapiInfo->wapiCamEntry[i].keyidx = KID;
+ _rtw_memcpy(pWapiInfo->wapiCamEntry[i].PeerMacAddr, pMacAddr,ETH_ALEN);
+ ret = pWapiInfo->wapiCamEntry[i].entry_idx;
+ break;
+ }
+ }
+ }
+
+ WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__);
+ return ret;
+
+/*
+ if(RTIsListEmpty(&pWapiInfo->wapiCamIdleList)){
+ RT_TRACE(COMP_SEC,DBG_LOUD,("No Entry for wapi!!!\n"));
+ return 0;
+ }
+
+ pEntry = (PRT_WAPI_CAM_ENTRY)RTRemoveHeadList(&pWapiInfo->wapiCamIdleList);
+ RTInsertTailList(&pWapiInfo->wapiCamUsedList, &pEntry->list);
+
+ RT_TRACE(COMP_SEC,DBG_LOUD,("<====WapiGetCamEntry(),Get Entry Idx:%d.but we just return 4 for test\n",pEntry->entry_idx));
+
+ return pEntry->entry_idx;*/
+}
+
+u8 WapiGetEntryForCamClear(_adapter *padapter,u8 *pPeerMac,u8 keyid,u8 IsMsk)
+{
+ PRT_WAPI_T pWapiInfo=NULL;
+ u8 i=0;
+
+ WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
+
+ pWapiInfo = &padapter->wapiInfo;
+
+ for(i=0;i<WAPI_CAM_ENTRY_NUM;i++)
+ {
+ if(pWapiInfo->wapiCamEntry[i].IsUsed
+ && (_rtw_memcmp(pPeerMac, pWapiInfo->wapiCamEntry[i].PeerMacAddr, ETH_ALEN) == _TRUE)
+ && pWapiInfo->wapiCamEntry[i].keyidx == keyid
+ && pWapiInfo->wapiCamEntry[i].type == IsMsk)
+ {
+ pWapiInfo->wapiCamEntry[i].IsUsed = 0;
+ pWapiInfo->wapiCamEntry[i].keyidx = 2;
+ _rtw_memset(pWapiInfo->wapiCamEntry[i].PeerMacAddr,0,ETH_ALEN);
+
+ WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__);
+ return pWapiInfo->wapiCamEntry[i].entry_idx;
+ }
+ }
+
+ WAPI_TRACE(WAPI_API,"<====WapiGetReturnCamEntry(), No this cam entry.\n");
+ return 0xff;
+/*
+ if(RTIsListEmpty(&pWapiInfo->wapiCamUsedList)){
+ RT_TRACE(COMP_SEC,DBG_LOUD,("No Entry for wapi!!!\n"));
+ return FALSE;
+ }
+
+ pList = &pWapiInfo->wapiCamUsedList;
+ while(pList->Flink != &pWapiInfo->wapiCamUsedList)
+ {
+ pEntry = (PRT_WAPI_CAM_ENTRY)pList->Flink;
+ if(PlatformCompareMemory(pPeerMac,pEntry->PeerMacAddr, ETHER_ADDRLEN)== 0
+ && keyid == pEntry->keyidx)
+ {
+ RTRemoveEntryList(pList);
+ RTInsertHeadList(&pWapiInfo->wapiCamIdleList, pList);
+ return pEntry->entry_idx;
+ }
+ pList = pList->Flink;
+ }
+
+ return 0;
+*/
+}
+
+void
+WapiResetAllCamEntry(_adapter *padapter)
+{
+ PRT_WAPI_T pWapiInfo;
+ int i;
+
+ WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
+
+ pWapiInfo = &padapter->wapiInfo;
+
+ for (i=0;i<WAPI_CAM_ENTRY_NUM;i++)
+ {
+ _rtw_memset(pWapiInfo->wapiCamEntry[i].PeerMacAddr, 0, ETH_ALEN);
+ pWapiInfo->wapiCamEntry[i].IsUsed = 0;
+ pWapiInfo->wapiCamEntry[i].keyidx = 2; //invalid
+ pWapiInfo->wapiCamEntry[i].entry_idx = 4+i*2;
+ }
+
+ WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__);
+
+ return;
+}
+
+u8 WapiWriteOneCamEntry(
+ _adapter *padapter,
+ u8 *pMacAddr,
+ u8 KeyId,
+ u8 EntryId,
+ u8 EncAlg,
+ u8 bGroupKey,
+ u8 *pKey
+)
+{
+ u8 retVal = 0;
+ u16 usConfig = 0;
+
+ WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
+
+ if(EntryId >= 32)
+ {
+ WAPI_TRACE(WAPI_ERR, "<=== CamAddOneEntry(): ulKeyId exceed!\n");
+ return retVal;
+ }
+
+ usConfig=usConfig|(0x01<<15)|((u16)(EncAlg)<<2)|(KeyId);
+
+ if(EncAlg == _SMS4_ )
+ {
+ if(bGroupKey == 1)
+ usConfig |= (0x01<<6);
+ if((EntryId % 2)==1) // ==0 sec key; == 1mic key
+ usConfig |= (0x01<<5);
+ }
+
+ write_cam(padapter, EntryId, usConfig, pMacAddr, pKey);
+
+ WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
+ return 1;
+}
+
+void rtw_wapi_init(_adapter *padapter)
+{
+ PRT_WAPI_T pWapiInfo;
+ int i;
+
+ WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__);
+ RT_ASSERT_RET(padapter);
+
+ if (!padapter->WapiSupport)
+ {
+ WAPI_TRACE(WAPI_INIT, "<========== %s, WAPI not supported!\n", __FUNCTION__);
+ return;
+ }
+
+ pWapiInfo = &padapter->wapiInfo;
+ pWapiInfo->bWapiEnable = false;
+
+ //Init BKID List
+ INIT_LIST_HEAD(&pWapiInfo->wapiBKIDIdleList);
+ INIT_LIST_HEAD(&pWapiInfo->wapiBKIDStoreList);
+ for(i=0;i<WAPI_MAX_BKID_NUM;i++)
+ {
+ list_add_tail(&pWapiInfo->wapiBKID[i].list, &pWapiInfo->wapiBKIDIdleList);
+ }
+
+ //Init STA List
+ INIT_LIST_HEAD(&pWapiInfo->wapiSTAIdleList);
+ INIT_LIST_HEAD(&pWapiInfo->wapiSTAUsedList);
+ for(i=0;i<WAPI_MAX_STAINFO_NUM;i++)
+ {
+ list_add_tail(&pWapiInfo->wapiSta[i].list, &pWapiInfo->wapiSTAIdleList);
+ }
+
+ for (i=0;i<WAPI_CAM_ENTRY_NUM;i++)
+ {
+ pWapiInfo->wapiCamEntry[i].IsUsed = 0;
+ pWapiInfo->wapiCamEntry[i].keyidx = 2; //invalid
+ pWapiInfo->wapiCamEntry[i].entry_idx = 4+i*2;
+ }
+
+ WAPI_TRACE(WAPI_INIT, "<========== %s\n", __FUNCTION__);
+}
+
+void rtw_wapi_free(_adapter *padapter)
+{
+ WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__);
+ RT_ASSERT_RET(padapter);
+
+ if (!padapter->WapiSupport)
+ {
+ WAPI_TRACE(WAPI_INIT, "<========== %s, WAPI not supported!\n", __FUNCTION__);
+ return;
+ }
+
+ WapiFreeAllStaInfo(padapter);
+
+ WAPI_TRACE(WAPI_INIT, "<========== %s\n", __FUNCTION__);
+}
+
+void rtw_wapi_disable_tx(_adapter *padapter)
+{
+ WAPI_TRACE(WAPI_INIT, "===========> %s\n", __FUNCTION__);
+ RT_ASSERT_RET(padapter);
+
+ if (!padapter->WapiSupport)
+ {
+ WAPI_TRACE(WAPI_INIT, "<========== %s, WAPI not supported!\n", __FUNCTION__);
+ return;
+ }
+
+ padapter->wapiInfo.wapiTxMsk.bTxEnable = false;
+ padapter->wapiInfo.wapiTxMsk.bSet = false;
+
+ WAPI_TRACE(WAPI_INIT, "<========== %s\n", __FUNCTION__);
+}
+
+u8 rtw_wapi_is_wai_packet(_adapter* padapter,u8 *pkt_data)
+{
+ PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct security_priv *psecuritypriv = &padapter->securitypriv;
+ PRT_WAPI_STA_INFO pWapiSta = NULL;
+ u8 WaiPkt = 0, *pTaddr, bFind = false;
+ u8 Offset_TypeWAI = 0 ; // (mac header len + llc length)
+
+ WAPI_TRACE(WAPI_TX|WAPI_RX, "===========> %s\n", __FUNCTION__);
+
+ if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
+ {
+ WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
+ return 0;
+ }
+
+ Offset_TypeWAI = 24 + 6 ;
+
+ //YJ,add,091103. Data frame may also have skb->data[30]=0x88 and skb->data[31]=0xb4.
+ if ((pkt_data[1]&0x40) !=0)
+ {
+ DBG_871X("data is privacy \n");
+ return 0;
+ }
+
+ pTaddr = GetAddr2Ptr(pkt_data);
+ if(list_empty(&pWapiInfo->wapiSTAUsedList)){
+ bFind = false;
+ }else{
+ list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list){
+ if (_rtw_memcmp(pTaddr, pWapiSta->PeerMacAddr, 6) == _TRUE) {
+ bFind = true;
+ break;
+ }
+ }
+ }
+
+ WAPI_TRACE(WAPI_TX|WAPI_RX, "%s: bFind=%d pTaddr="MAC_FMT"\n", __FUNCTION__, bFind, MAC_ARG(pTaddr));
+
+ if (pkt_data[0] == WIFI_QOS_DATA_TYPE)
+ {
+ Offset_TypeWAI += 2;
+ }
+
+ // 88b4?
+ if( (pkt_data[Offset_TypeWAI]==0x88) && (pkt_data[Offset_TypeWAI+1]==0xb4) ){
+ WaiPkt = pkt_data[Offset_TypeWAI+5];
+
+ psecuritypriv->hw_decrypted = _TRUE;
+ }else{
+ WAPI_TRACE(WAPI_TX|WAPI_RX, "%s(): non wai packet\n",__FUNCTION__);
+ }
+
+ WAPI_TRACE(WAPI_TX|WAPI_RX, "%s(): Recvd WAI frame. IsWAIPkt(%d)\n",__FUNCTION__, WaiPkt);
+
+ return WaiPkt;
+}
+
+
+void rtw_wapi_update_info(_adapter *padapter, union recv_frame *precv_frame)
+{
+ PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
+ struct recv_frame_hdr *precv_hdr;
+ u8 *ptr;
+ u8 *pTA;
+ u8 *pRecvPN;
+
+
+ WAPI_TRACE(WAPI_RX, "===========> %s\n", __FUNCTION__);
+
+ if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
+ {
+ WAPI_TRACE(WAPI_RX, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
+ return;
+ }
+
+ precv_hdr = &precv_frame->u.hdr;
+ ptr = precv_hdr->rx_data;
+
+ if (precv_hdr->attrib.qos == 1)
+ {
+ precv_hdr->UserPriority = GetTid(ptr);
+ }
+ else
+ {
+ precv_hdr->UserPriority = 0;
+ }
+
+ pTA = GetAddr2Ptr(ptr);
+ _rtw_memcpy((u8 *)precv_hdr->WapiSrcAddr, pTA, 6);
+ pRecvPN = ptr + precv_hdr->attrib.hdrlen + 2;
+ _rtw_memcpy((u8 *)precv_hdr->WapiTempPN, pRecvPN, 16);
+
+ WAPI_TRACE(WAPI_RX, "<========== %s\n", __FUNCTION__);
+}
+
+/****************************************************************************
+TRUE-----------------Drop
+FALSE---------------- handle
+add to support WAPI to N-mode
+*****************************************************************************/
+u8 rtw_wapi_check_for_drop(
+ _adapter *padapter,
+ union recv_frame *precv_frame
+)
+{
+ PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
+ u8 *pLastRecvPN = NULL;
+ u8 bFind = false;
+ PRT_WAPI_STA_INFO pWapiSta = NULL;
+ u8 bDrop = false;
+ struct recv_frame_hdr *precv_hdr = &precv_frame->u.hdr;
+ u8 WapiAEPNInitialValueSrc[16] = {0x37,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
+ u8 WapiAEMultiCastPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
+ u8 *ptr = precv_frame->u.hdr.rx_data;
+ int i;
+
+ WAPI_TRACE(WAPI_RX, "===========> %s\n", __FUNCTION__);
+
+ if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
+ {
+ WAPI_TRACE(WAPI_RX, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
+ return false;
+ }
+
+ if(precv_hdr->bIsWaiPacket !=0)
+ {
+ if(precv_hdr->bIsWaiPacket== 0x8)
+ {
+
+ DBG_871X("rtw_wapi_check_for_drop: dump packet \n");
+ for(i=0;i<50;i++)
+ {
+ DBG_871X("%02X ",ptr[i]);
+ if((i+1) %8 ==0)
+ DBG_871X("\n");
+ }
+ DBG_871X("\n rtw_wapi_check_for_drop: dump packet \n");
+
+ for(i=0;i<16;i++)
+ {
+ if(ptr[i+27] !=0)
+ break;
+ }
+
+ if(i== 16)
+ {
+ WAPI_TRACE(WAPI_RX,"rtw_wapi_check_for_drop: drop with zero BKID \n");
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ else
+ return false;
+ }
+
+ if(list_empty(&pWapiInfo->wapiSTAUsedList)){
+ bFind = false;
+ }else{
+ list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
+ if (_rtw_memcmp(precv_hdr->WapiSrcAddr, pWapiSta->PeerMacAddr, ETH_ALEN) == _TRUE) {
+ bFind = true;
+ break;
+ }
+ }
+ }
+ WAPI_TRACE(WAPI_RX, "%s: bFind=%d prxb->WapiSrcAddr="MAC_FMT"\n", __FUNCTION__, bFind, MAC_ARG(precv_hdr->WapiSrcAddr));
+
+ if(bFind)
+ {
+ if(IS_MCAST(precv_hdr->attrib.ra))
+ {
+ WAPI_TRACE(WAPI_RX,"rtw_wapi_check_for_drop: multicast case \n");
+ pLastRecvPN = pWapiSta->lastRxMulticastPN;
+ }
+ else
+ {
+ WAPI_TRACE(WAPI_RX,"rtw_wapi_check_for_drop: unicast case \n");
+ switch(precv_hdr->UserPriority)
+ {
+ case 0:
+ case 3:
+ pLastRecvPN = pWapiSta->lastRxUnicastPNBEQueue;
+ break;
+ case 1:
+ case 2:
+ pLastRecvPN = pWapiSta->lastRxUnicastPNBKQueue;
+ break;
+ case 4:
+ case 5:
+ pLastRecvPN = pWapiSta->lastRxUnicastPNVIQueue;
+ break;
+ case 6:
+ case 7:
+ pLastRecvPN = pWapiSta->lastRxUnicastPNVOQueue;
+ break;
+ default:
+ WAPI_TRACE(WAPI_ERR,"%s: Unknown TID \n",__FUNCTION__);
+ break;
+ }
+ }
+
+ if(!WapiComparePN(precv_hdr->WapiTempPN,pLastRecvPN))
+ {
+ WAPI_TRACE(WAPI_RX,"%s: Equal PN!!\n",__FUNCTION__);
+ if(IS_MCAST(precv_hdr->attrib.ra))
+ _rtw_memcpy(pLastRecvPN,WapiAEMultiCastPNInitialValueSrc,16);
+ else
+ _rtw_memcpy(pLastRecvPN,WapiAEPNInitialValueSrc,16);
+ bDrop = true;
+ }
+ else
+ {
+ _rtw_memcpy(pLastRecvPN,precv_hdr->WapiTempPN,16);
+ }
+ }
+
+ WAPI_TRACE(WAPI_RX, "<========== %s\n", __FUNCTION__);
+ return bDrop;
+}
+
+void rtw_build_probe_resp_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib)
+{
+ PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
+ u8 WapiIELength = 0;
+
+ WAPI_TRACE(WAPI_MLME, "===========> %s\n", __FUNCTION__);
+
+ if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
+ {
+ WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported!\n", __FUNCTION__);
+ return;
+ }
+
+ WapiSetIE(padapter);
+ WapiIELength = pWapiInfo->wapiIELength;
+ pframe[0] = _WAPI_IE_;
+ pframe[1] = WapiIELength;
+ _rtw_memcpy(pframe+2, pWapiInfo->wapiIE, WapiIELength);
+ pframe += WapiIELength+2;
+ pattrib->pktlen += WapiIELength+2;
+
+ WAPI_TRACE(WAPI_MLME, "<========== %s\n", __FUNCTION__);
+}
+
+void rtw_build_beacon_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib)
+{
+ PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
+ u8 WapiIELength = 0;
+ WAPI_TRACE(WAPI_MLME, "===========> %s\n", __FUNCTION__);
+
+ if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
+ {
+ WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported!\n", __FUNCTION__);
+ return;
+ }
+
+ WapiSetIE(padapter);
+ WapiIELength = pWapiInfo->wapiIELength;
+ pframe[0] = _WAPI_IE_;
+ pframe[1] = WapiIELength;
+ _rtw_memcpy(pframe+2, pWapiInfo->wapiIE, WapiIELength);
+ pframe += WapiIELength+2;
+ pattrib->pktlen += WapiIELength+2;
+
+ WAPI_TRACE(WAPI_MLME, "<========== %s\n", __FUNCTION__);
+}
+
+void rtw_build_assoc_req_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib)
+{
+ PRT_WAPI_BKID pWapiBKID;
+ u16 bkidNum;
+ PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
+ u8 WapiIELength = 0;
+
+ WAPI_TRACE(WAPI_MLME, "===========> %s\n", __FUNCTION__);
+
+ if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
+ {
+ WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported!\n", __FUNCTION__);
+ return;
+ }
+
+ WapiSetIE(padapter);
+ WapiIELength = pWapiInfo->wapiIELength;
+ bkidNum = 0;
+ if(!list_empty(&(pWapiInfo->wapiBKIDStoreList))){
+ list_for_each_entry(pWapiBKID, &pWapiInfo->wapiBKIDStoreList, list) {
+ bkidNum ++;
+ _rtw_memcpy(pWapiInfo->wapiIE+WapiIELength+2, pWapiBKID->bkid,16);
+ WapiIELength += 16;
+ }
+ }
+ _rtw_memcpy(pWapiInfo->wapiIE+WapiIELength, &bkidNum, 2);
+ WapiIELength += 2;
+
+ pframe[0] = _WAPI_IE_;
+ pframe[1] = WapiIELength;
+ _rtw_memcpy(pframe+2, pWapiInfo->wapiIE, WapiIELength);
+ pframe += WapiIELength+2;
+ pattrib->pktlen += WapiIELength+2;
+ WAPI_TRACE(WAPI_MLME, "<========== %s\n", __FUNCTION__);
+}
+
+void rtw_wapi_on_assoc_ok(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE)
+{
+ PRT_WAPI_T pWapiInfo = &(padapter->wapiInfo);
+ PRT_WAPI_STA_INFO pWapiSta;
+ u8 WapiAEPNInitialValueSrc[16] = {0x37,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
+ //u8 WapiASUEPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
+ u8 WapiAEMultiCastPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
+
+ WAPI_TRACE(WAPI_MLME, "===========> %s\n", __FUNCTION__);
+
+ if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
+ {
+ WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
+ return;
+ }
+
+ pWapiSta =(PRT_WAPI_STA_INFO)list_entry(pWapiInfo->wapiSTAIdleList.next, RT_WAPI_STA_INFO, list);
+ list_del_init(&pWapiSta->list);
+ list_add_tail(&pWapiSta->list, &pWapiInfo->wapiSTAUsedList);
+ _rtw_memcpy(pWapiSta->PeerMacAddr,padapter->mlmeextpriv.mlmext_info.network.MacAddress,6);
+ _rtw_memcpy(pWapiSta->lastRxMulticastPN, WapiAEMultiCastPNInitialValueSrc, 16);
+ _rtw_memcpy(pWapiSta->lastRxUnicastPN, WapiAEPNInitialValueSrc, 16);
+
+ //For chenk PN error with Qos Data after s3: add by ylb 20111114
+ _rtw_memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiAEPNInitialValueSrc,16);
+ _rtw_memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiAEPNInitialValueSrc,16);
+ _rtw_memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiAEPNInitialValueSrc,16);
+ _rtw_memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiAEPNInitialValueSrc,16);
+
+ WAPI_TRACE(WAPI_MLME, "<========== %s\n", __FUNCTION__);
+}
+
+
+void rtw_wapi_return_one_sta_info(_adapter *padapter, u8 *MacAddr)
+{
+ PRT_WAPI_T pWapiInfo;
+ PRT_WAPI_STA_INFO pWapiStaInfo = NULL;
+ PRT_WAPI_BKID pWapiBkid = NULL;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+
+ pWapiInfo = &padapter->wapiInfo;
+
+ WAPI_TRACE(WAPI_API, "==========> %s\n", __FUNCTION__);
+
+ if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
+ {
+ WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
+ return;
+ }
+
+ if(check_fwstate(pmlmepriv, WIFI_STATION_STATE))
+ {
+ while(!list_empty(&(pWapiInfo->wapiBKIDStoreList)))
+ {
+ pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDStoreList.next, RT_WAPI_BKID, list);
+ list_del_init(&pWapiBkid->list);
+ _rtw_memset(pWapiBkid->bkid,0,16);
+ list_add_tail(&pWapiBkid->list, &pWapiInfo->wapiBKIDIdleList);
+ }
+ }
+
+
+ WAPI_TRACE(WAPI_API, " %s: after clear bkid \n", __FUNCTION__);
+
+
+ //Remove STA info
+ if(list_empty(&(pWapiInfo->wapiSTAUsedList))){
+ WAPI_TRACE(WAPI_API, " %s: wapiSTAUsedList is null \n", __FUNCTION__);
+ return;
+ }else{
+
+ WAPI_TRACE(WAPI_API, " %s: wapiSTAUsedList is not null \n", __FUNCTION__);
+#if 0
+ pWapiStaInfo=(PRT_WAPI_STA_INFO)list_entry((pWapiInfo->wapiSTAUsedList.next),RT_WAPI_STA_INFO,list);
+
+ list_for_each_entry(pWapiStaInfo, &(pWapiInfo->wapiSTAUsedList), list) {
+
+ DBG_871X("MAC Addr %02x-%02x-%02x-%02x-%02x-%02x \n",MacAddr[0],MacAddr[1],MacAddr[2],MacAddr[3],MacAddr[4],MacAddr[5]);
+
+
+ DBG_871X("peer Addr %02x-%02x-%02x-%02x-%02x-%02x \n",pWapiStaInfo->PeerMacAddr[0],pWapiStaInfo->PeerMacAddr[1],pWapiStaInfo->PeerMacAddr[2],pWapiStaInfo->PeerMacAddr[3],pWapiStaInfo->PeerMacAddr[4],pWapiStaInfo->PeerMacAddr[5]);
+
+ if(pWapiStaInfo == NULL)
+ {
+ WAPI_TRACE(WAPI_API, " %s: pWapiStaInfo == NULL Case \n", __FUNCTION__);
+ return;
+ }
+
+ if(pWapiStaInfo->PeerMacAddr == NULL)
+ {
+ WAPI_TRACE(WAPI_API, " %s: pWapiStaInfo->PeerMacAddr == NULL Case \n", __FUNCTION__);
+ return;
+ }
+
+ if(MacAddr == NULL)
+ {
+ WAPI_TRACE(WAPI_API, " %s: MacAddr == NULL Case \n", __FUNCTION__);
+ return;
+ }
+
+ if (_rtw_memcmp(pWapiStaInfo->PeerMacAddr, MacAddr, ETH_ALEN) == _TRUE) {
+ pWapiStaInfo->bAuthenticateInProgress = false;
+ pWapiStaInfo->bSetkeyOk = false;
+ _rtw_memset(pWapiStaInfo->PeerMacAddr,0,ETH_ALEN);
+ list_del_init(&pWapiStaInfo->list);
+ list_add_tail(&pWapiStaInfo->list, &pWapiInfo->wapiSTAIdleList);
+ break;
+ }
+
+ }
+#endif
+
+ while(!list_empty(&(pWapiInfo->wapiSTAUsedList)))
+ {
+ pWapiStaInfo = (PRT_WAPI_STA_INFO)list_entry(pWapiInfo->wapiSTAUsedList.next, RT_WAPI_STA_INFO, list);
+
+ DBG_871X("peer Addr %02x-%02x-%02x-%02x-%02x-%02x \n",pWapiStaInfo->PeerMacAddr[0],pWapiStaInfo->PeerMacAddr[1],pWapiStaInfo->PeerMacAddr[2],pWapiStaInfo->PeerMacAddr[3],pWapiStaInfo->PeerMacAddr[4],pWapiStaInfo->PeerMacAddr[5]);
+
+ list_del_init(&pWapiStaInfo->list);
+ memset(pWapiStaInfo->PeerMacAddr,0,ETH_ALEN);
+ pWapiStaInfo->bSetkeyOk = 0;
+ list_add_tail(&pWapiStaInfo->list, &pWapiInfo->wapiSTAIdleList);
+ }
+
+ }
+
+ WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__);
+ return;
+}
+
+void rtw_wapi_return_all_sta_info(_adapter *padapter)
+{
+ PRT_WAPI_T pWapiInfo;
+ PRT_WAPI_STA_INFO pWapiStaInfo;
+ PRT_WAPI_BKID pWapiBkid;
+ WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
+
+ pWapiInfo = &padapter->wapiInfo;
+
+ if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
+ {
+ WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
+ return;
+ }
+
+ //Sta Info List
+ while(!list_empty(&(pWapiInfo->wapiSTAUsedList)))
+ {
+ pWapiStaInfo = (PRT_WAPI_STA_INFO)list_entry(pWapiInfo->wapiSTAUsedList.next, RT_WAPI_STA_INFO, list);
+ list_del_init(&pWapiStaInfo->list);
+ memset(pWapiStaInfo->PeerMacAddr,0,ETH_ALEN);
+ pWapiStaInfo->bSetkeyOk = 0;
+ list_add_tail(&pWapiStaInfo->list, &pWapiInfo->wapiSTAIdleList);
+ }
+
+ //BKID List
+ while(!list_empty(&(pWapiInfo->wapiBKIDStoreList)))
+ {
+ pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDStoreList.next, RT_WAPI_BKID, list);
+ list_del_init(&pWapiBkid->list);
+ memset(pWapiBkid->bkid,0,16);
+ list_add_tail(&pWapiBkid->list, &pWapiInfo->wapiBKIDIdleList);
+ }
+ WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__);
+}
+
+void rtw_wapi_clear_cam_entry(_adapter *padapter, u8 *pMacAddr)
+{
+ u8 UcIndex = 0;
+
+ WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
+
+ if ((!padapter->WapiSupport) || (!padapter->wapiInfo.bWapiEnable))
+ {
+ WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
+ return;
+ }
+
+ UcIndex = WapiGetEntryForCamClear(padapter, pMacAddr, 0, 0);
+ if(UcIndex != 0xff){
+ //CAM_mark_invalid(Adapter, UcIndex);
+ CAM_empty_entry(padapter, UcIndex);
+ }
+
+ UcIndex = WapiGetEntryForCamClear(padapter, pMacAddr, 1, 0);
+ if(UcIndex != 0xff){
+ //CAM_mark_invalid(Adapter, UcIndex);
+ CAM_empty_entry(padapter, UcIndex);
+ }
+
+ UcIndex = WapiGetEntryForCamClear(padapter, pMacAddr, 0, 1);
+ if(UcIndex != 0xff){
+ //CAM_mark_invalid(Adapter, UcIndex);
+ CAM_empty_entry(padapter, UcIndex);
+ }
+
+ UcIndex = WapiGetEntryForCamClear(padapter, pMacAddr, 1, 1);
+ if(UcIndex != 0xff){
+ //CAM_mark_invalid(padapter, UcIndex);
+ CAM_empty_entry(padapter, UcIndex);
+ }
+
+ WAPI_TRACE(WAPI_API, "<========== %s\n", __FUNCTION__);
+}
+
+void rtw_wapi_clear_all_cam_entry(_adapter *padapter)
+{
+ WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
+
+ if ((!padapter->WapiSupport) || (!padapter->wapiInfo.bWapiEnable))
+ {
+ WAPI_TRACE(WAPI_MLME, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
+ return;
+ }
+
+ invalidate_cam_all(padapter); // is this ok?
+ WapiResetAllCamEntry(padapter);
+
+ WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
+}
+
+void rtw_wapi_set_key(_adapter *padapter, RT_WAPI_KEY *pWapiKey, RT_WAPI_STA_INFO *pWapiSta, u8 bGroupKey, u8 bUseDefaultKey)
+{
+ PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
+ u8 *pMacAddr = pWapiSta->PeerMacAddr;
+ u32 EntryId = 0;
+ BOOLEAN IsPairWise = false ;
+ u8 EncAlgo;
+
+ WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
+
+ if ((!padapter->WapiSupport) || (!padapter->wapiInfo.bWapiEnable))
+ {
+ WAPI_TRACE(WAPI_API, "<========== %s, WAPI not supported or not enabled!\n", __FUNCTION__);
+ return;
+ }
+
+ EncAlgo = _SMS4_;
+
+ //For Tx bc/mc pkt,use defualt key entry
+ if(bUseDefaultKey)
+ {
+ // when WAPI update key, keyid will be 0 or 1 by turns.
+ if (pWapiKey->keyId == 0)
+ EntryId = 0;
+ else
+ EntryId = 2;
+ }
+ else
+ {
+ // tx/rx unicast pkt, or rx broadcast, find the key entry by peer's MacAddr
+ EntryId = WapiGetEntryForCamWrite(padapter,pMacAddr,pWapiKey->keyId,bGroupKey);
+ }
+
+ if(EntryId == 0xff){
+ WAPI_TRACE(WAPI_API, "===>No entry for WAPI setkey! !!\n");
+ return;
+ }
+
+ //EntryId is also used to diff Sec key and Mic key
+ //Sec Key
+ WapiWriteOneCamEntry(padapter,
+ pMacAddr,
+ pWapiKey->keyId, //keyid
+ EntryId, //entry
+ EncAlgo, //type
+ bGroupKey, //pairwise or group key
+ pWapiKey->dataKey);
+ //MIC key
+ WapiWriteOneCamEntry(padapter,
+ pMacAddr,
+ pWapiKey->keyId, //keyid
+ EntryId+1, //entry
+ EncAlgo, //type
+ bGroupKey, //pairwise or group key
+ pWapiKey->micKey);
+
+ WAPI_TRACE(WAPI_API, "Set Wapi Key :KeyId:%d,EntryId:%d,PairwiseKey:%d.\n",pWapiKey->keyId,EntryId,!bGroupKey);
+ WAPI_TRACE(WAPI_API, "===========> %s\n", __FUNCTION__);
+
+}
+
+#if 0
+//YJ,test,091013
+void wapi_test_set_key(struct _adapter *padapter, u8* buf)
+{ /*Data: keyType(1) + bTxEnable(1) + bAuthenticator(1) + bUpdate(1) + PeerAddr(6) + DataKey(16) + MicKey(16) + KeyId(1)*/
+ PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
+ PRT_WAPI_BKID pWapiBkid;
+ PRT_WAPI_STA_INFO pWapiSta;
+ u8 data[43];
+ bool bTxEnable;
+ bool bUpdate;
+ bool bAuthenticator;
+ u8 PeerAddr[6];
+ u8 WapiAEPNInitialValueSrc[16] = {0x37,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
+ u8 WapiASUEPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
+ u8 WapiAEMultiCastPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
+
+ WAPI_TRACE(WAPI_INIT, "===========>%s\n", __FUNCTION__);
+
+ if (!padapter->WapiSupport){
+ return;
+ }
+
+ copy_from_user(data, buf, 43);
+ bTxEnable = data[1];
+ bAuthenticator = data[2];
+ bUpdate = data[3];
+ memcpy(PeerAddr,data+4,6);
+
+ if(data[0] == 0x3){
+ if(!list_empty(&(pWapiInfo->wapiBKIDIdleList))){
+ pWapiBkid = (PRT_WAPI_BKID)list_entry(pWapiInfo->wapiBKIDIdleList.next, RT_WAPI_BKID, list);
+ list_del_init(&pWapiBkid->list);
+ memcpy(pWapiBkid->bkid, data+10, 16);
+ WAPI_DATA(WAPI_INIT, "SetKey - BKID", pWapiBkid->bkid, 16);
+ list_add_tail(&pWapiBkid->list, &pWapiInfo->wapiBKIDStoreList);
+ }
+ }else{
+ list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
+ if(!memcmp(pWapiSta->PeerMacAddr,PeerAddr,6)){
+ pWapiSta->bAuthenticatorInUpdata = false;
+ switch(data[0]){
+ case 1: //usk
+ if(bAuthenticator){ //authenticator
+ memcpy(pWapiSta->lastTxUnicastPN,WapiAEPNInitialValueSrc,16);
+ if(!bUpdate) { //first
+ WAPI_TRACE(WAPI_INIT,"AE fisrt set usk \n");
+ pWapiSta->wapiUsk.bSet = true;
+ memcpy(pWapiSta->wapiUsk.dataKey,data+10,16);
+ memcpy(pWapiSta->wapiUsk.micKey,data+26,16);
+ pWapiSta->wapiUsk.keyId = *(data+42);
+ pWapiSta->wapiUsk.bTxEnable = true;
+ WAPI_DATA(WAPI_INIT, "SetKey - AE USK Data Key", pWapiSta->wapiUsk.dataKey, 16);
+ WAPI_DATA(WAPI_INIT, "SetKey - AE USK Mic Key", pWapiSta->wapiUsk.micKey, 16);
+ }
+ else //update
+ {
+ WAPI_TRACE(WAPI_INIT, "AE update usk \n");
+ pWapiSta->wapiUskUpdate.bSet = true;
+ pWapiSta->bAuthenticatorInUpdata = true;
+ memcpy(pWapiSta->wapiUskUpdate.dataKey,data+10,16);
+ memcpy(pWapiSta->wapiUskUpdate.micKey,data+26,16);
+ memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiASUEPNInitialValueSrc,16);
+ memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiASUEPNInitialValueSrc,16);
+ memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiASUEPNInitialValueSrc,16);
+ memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiASUEPNInitialValueSrc,16);
+ memcpy(pWapiSta->lastRxUnicastPN,WapiASUEPNInitialValueSrc,16);
+ pWapiSta->wapiUskUpdate.keyId = *(data+42);
+ pWapiSta->wapiUskUpdate.bTxEnable = true;
+ }
+ }
+ else{
+ if(!bUpdate){
+ WAPI_TRACE(WAPI_INIT,"ASUE fisrt set usk \n");
+ if(bTxEnable){
+ pWapiSta->wapiUsk.bTxEnable = true;
+ memcpy(pWapiSta->lastTxUnicastPN,WapiASUEPNInitialValueSrc,16);
+ }else{
+ pWapiSta->wapiUsk.bSet = true;
+ memcpy(pWapiSta->wapiUsk.dataKey,data+10,16);
+ memcpy(pWapiSta->wapiUsk.micKey,data+26,16);
+ pWapiSta->wapiUsk.keyId = *(data+42);
+ pWapiSta->wapiUsk.bTxEnable = false;
+ }
+ }else{
+ WAPI_TRACE(WAPI_INIT,"ASUE update usk \n");
+ if(bTxEnable){
+ pWapiSta->wapiUskUpdate.bTxEnable = true;
+ if(pWapiSta->wapiUskUpdate.bSet){
+ memcpy(pWapiSta->wapiUsk.dataKey,pWapiSta->wapiUskUpdate.dataKey,16);
+ memcpy(pWapiSta->wapiUsk.micKey,pWapiSta->wapiUskUpdate.micKey,16);
+ pWapiSta->wapiUsk.keyId=pWapiSta->wapiUskUpdate.keyId;
+ memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiASUEPNInitialValueSrc,16);
+ memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiASUEPNInitialValueSrc,16);
+ memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiASUEPNInitialValueSrc,16);
+ memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiASUEPNInitialValueSrc,16);
+ memcpy(pWapiSta->lastRxUnicastPN,WapiASUEPNInitialValueSrc,16);
+ pWapiSta->wapiUskUpdate.bTxEnable = false;
+ pWapiSta->wapiUskUpdate.bSet = false;
+ }
+ memcpy(pWapiSta->lastTxUnicastPN,WapiASUEPNInitialValueSrc,16);
+ }else{
+ pWapiSta->wapiUskUpdate.bSet = true;
+ memcpy(pWapiSta->wapiUskUpdate.dataKey,data+10,16);
+ memcpy(pWapiSta->wapiUskUpdate.micKey,data+26,16);
+ pWapiSta->wapiUskUpdate.keyId = *(data+42);
+ pWapiSta->wapiUskUpdate.bTxEnable = false;
+ }
+ }
+ }
+ break;
+ case 2: //msk
+ if(bAuthenticator){ //authenticator
+ pWapiInfo->wapiTxMsk.bSet = true;
+ memcpy(pWapiInfo->wapiTxMsk.dataKey,data+10,16);
+ memcpy(pWapiInfo->wapiTxMsk.micKey,data+26,16);
+ pWapiInfo->wapiTxMsk.keyId = *(data+42);
+ pWapiInfo->wapiTxMsk.bTxEnable = true;
+ memcpy(pWapiInfo->lastTxMulticastPN,WapiAEMultiCastPNInitialValueSrc,16);
+
+ if(!bUpdate){ //first
+ WAPI_TRACE(WAPI_INIT, "AE fisrt set msk \n");
+ if(!pWapiSta->bSetkeyOk)
+ pWapiSta->bSetkeyOk = true;
+ pWapiInfo->bFirstAuthentiateInProgress= false;
+ }else{ //update
+ WAPI_TRACE(WAPI_INIT,"AE update msk \n");
+ }
+
+ WAPI_DATA(WAPI_INIT, "SetKey - AE MSK Data Key", pWapiInfo->wapiTxMsk.dataKey, 16);
+ WAPI_DATA(WAPI_INIT, "SetKey - AE MSK Mic Key", pWapiInfo->wapiTxMsk.micKey, 16);
+ }
+ else{
+ if(!bUpdate){
+ WAPI_TRACE(WAPI_INIT,"ASUE fisrt set msk \n");
+ pWapiSta->wapiMsk.bSet = true;
+ memcpy(pWapiSta->wapiMsk.dataKey,data+10,16);
+ memcpy(pWapiSta->wapiMsk.micKey,data+26,16);
+ pWapiSta->wapiMsk.keyId = *(data+42);
+ pWapiSta->wapiMsk.bTxEnable = false;
+ if(!pWapiSta->bSetkeyOk)
+ pWapiSta->bSetkeyOk = true;
+ pWapiInfo->bFirstAuthentiateInProgress= false;
+ WAPI_DATA(WAPI_INIT, "SetKey - ASUE MSK Data Key", pWapiSta->wapiMsk.dataKey, 16);
+ WAPI_DATA(WAPI_INIT, "SetKey - ASUE MSK Mic Key", pWapiSta->wapiMsk.micKey, 16);
+ }else{
+ WAPI_TRACE(WAPI_INIT,"ASUE update msk \n");
+ pWapiSta->wapiMskUpdate.bSet = true;
+ memcpy(pWapiSta->wapiMskUpdate.dataKey,data+10,16);
+ memcpy(pWapiSta->wapiMskUpdate.micKey,data+26,16);
+ pWapiSta->wapiMskUpdate.keyId = *(data+42);
+ pWapiSta->wapiMskUpdate.bTxEnable = false;
+ }
+ }
+ break;
+ default:
+ WAPI_TRACE(WAPI_ERR,"Unknown Flag \n");
+ break;
+ }
+ }
+ }
+ }
+ WAPI_TRACE(WAPI_INIT, "<===========%s\n", __FUNCTION__);
+}
+
+
+void wapi_test_init(struct _adapter *padapter)
+{
+ u8 keybuf[100];
+ u8 mac_addr[6]={0x00,0xe0,0x4c,0x72,0x04,0x70};
+ u8 UskDataKey[16]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
+ u8 UskMicKey[16]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f};
+ u8 UskId = 0;
+ u8 MskDataKey[16]={0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f};
+ u8 MskMicKey[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f};
+ u8 MskId = 0;
+
+ WAPI_TRACE(WAPI_INIT, "===========>%s\n", __FUNCTION__);
+
+ //Enable Wapi
+ WAPI_TRACE(WAPI_INIT, "%s: Enable wapi!!!!\n", __FUNCTION__);
+ padapter->wapiInfo.bWapiEnable = true;
+ padapter->pairwise_key_type = KEY_TYPE_SMS4;
+ ieee->group_key_type = KEY_TYPE_SMS4;
+ padapter->wapiInfo.extra_prefix_len = WAPI_EXT_LEN;
+ padapter->wapiInfo.extra_postfix_len = SMS4_MIC_LEN;
+
+ //set usk
+ WAPI_TRACE(WAPI_INIT, "%s: Set USK!!!!\n", __FUNCTION__);
+ memset(keybuf,0,100);
+ keybuf[0] = 1; //set usk
+ keybuf[1] = 1; //enable tx
+ keybuf[2] = 1; //AE
+ keybuf[3] = 0; //not update
+
+ memcpy(keybuf+4,mac_addr,6);
+ memcpy(keybuf+10,UskDataKey,16);
+ memcpy(keybuf+26,UskMicKey,16);
+ keybuf[42]=UskId;
+ wapi_test_set_key(padapter, keybuf);
+
+ memset(keybuf,0,100);
+ keybuf[0] = 1; //set usk
+ keybuf[1] = 1; //enable tx
+ keybuf[2] = 0; //AE
+ keybuf[3] = 0; //not update
+
+ memcpy(keybuf+4,mac_addr,6);
+ memcpy(keybuf+10,UskDataKey,16);
+ memcpy(keybuf+26,UskMicKey,16);
+ keybuf[42]=UskId;
+ wapi_test_set_key(padapter, keybuf);
+
+ //set msk
+ WAPI_TRACE(WAPI_INIT, "%s: Set MSK!!!!\n", __FUNCTION__);
+ memset(keybuf,0,100);
+ keybuf[0] = 2; //set msk
+ keybuf[1] = 1; //Enable TX
+ keybuf[2] = 1; //AE
+ keybuf[3] = 0; //not update
+ memcpy(keybuf+4,mac_addr,6);
+ memcpy(keybuf+10,MskDataKey,16);
+ memcpy(keybuf+26,MskMicKey,16);
+ keybuf[42] = MskId;
+ wapi_test_set_key(padapter, keybuf);
+
+ memset(keybuf,0,100);
+ keybuf[0] = 2; //set msk
+ keybuf[1] = 1; //Enable TX
+ keybuf[2] = 0; //AE
+ keybuf[3] = 0; //not update
+ memcpy(keybuf+4,mac_addr,6);
+ memcpy(keybuf+10,MskDataKey,16);
+ memcpy(keybuf+26,MskMicKey,16);
+ keybuf[42] = MskId;
+ wapi_test_set_key(padapter, keybuf);
+ WAPI_TRACE(WAPI_INIT, "<===========%s\n", __FUNCTION__);
+}
+#endif
+
+void rtw_wapi_get_iv(_adapter *padapter,u8 *pRA, u8*IV)
+{
+ PWLAN_HEADER_WAPI_EXTENSION pWapiExt = NULL;
+ PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
+ bool bPNOverflow = false;
+ bool bFindMatchPeer = false;
+ PRT_WAPI_STA_INFO pWapiSta = NULL;
+
+ pWapiExt = (PWLAN_HEADER_WAPI_EXTENSION)IV;
+
+ WAPI_DATA(WAPI_RX,"wapi_get_iv: pra",pRA,6);
+
+ if(IS_MCAST(pRA)){
+ if(!pWapiInfo->wapiTxMsk.bTxEnable){
+ WAPI_TRACE(WAPI_ERR,"%s: bTxEnable = 0!!\n",__FUNCTION__);
+ return;
+ }
+
+ if(pWapiInfo->wapiTxMsk.keyId <= 1){
+ pWapiExt->KeyIdx = pWapiInfo->wapiTxMsk.keyId;
+ pWapiExt->Reserved = 0;
+ bPNOverflow = WapiIncreasePN(pWapiInfo->lastTxMulticastPN, 1);
+ memcpy(pWapiExt->PN, pWapiInfo->lastTxMulticastPN, 16);
+ }
+ }
+ else
+ {
+ if(list_empty(&pWapiInfo->wapiSTAUsedList)){
+ WAPI_TRACE(WAPI_RX,"rtw_wapi_get_iv: list is empty \n");
+ _rtw_memset(IV,10,18);
+ return;
+ }
+ else{
+ list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list){
+ WAPI_DATA(WAPI_RX,"rtw_wapi_get_iv: peermacaddr ",pWapiSta->PeerMacAddr,6);
+ if (_rtw_memcmp((u8*)pWapiSta->PeerMacAddr, pRA, 6) == _TRUE) {
+ bFindMatchPeer = true;
+ break;
+ }
+ }
+
+ WAPI_TRACE(WAPI_RX,"bFindMatchPeer: %d \n",bFindMatchPeer);
+ WAPI_DATA(WAPI_RX,"Addr",pRA,6);
+
+ if (bFindMatchPeer){
+ if((!pWapiSta->wapiUskUpdate.bTxEnable) && (!pWapiSta->wapiUsk.bTxEnable))
+ return;
+
+ if (pWapiSta->wapiUsk.keyId <= 1){
+ if(pWapiSta->wapiUskUpdate.bTxEnable)
+ pWapiExt->KeyIdx = pWapiSta->wapiUskUpdate.keyId;
+ else
+ pWapiExt->KeyIdx = pWapiSta->wapiUsk.keyId;
+
+ pWapiExt->Reserved = 0;
+ bPNOverflow = WapiIncreasePN(pWapiSta->lastTxUnicastPN, 2);
+ _rtw_memcpy(pWapiExt->PN, pWapiSta->lastTxUnicastPN, 16);
+
+ }
+ }
+ }
+
+ }
+
+}
+
+bool rtw_wapi_drop_for_key_absent(_adapter *padapter,u8 *pRA)
+{
+ PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
+ bool bFindMatchPeer = false;
+ bool bDrop = false;
+ PRT_WAPI_STA_INFO pWapiSta = NULL;
+ struct security_priv *psecuritypriv = &padapter->securitypriv;
+
+ WAPI_DATA(WAPI_RX,"rtw_wapi_drop_for_key_absent: ra ",pRA,6);
+
+ if(psecuritypriv->dot11PrivacyAlgrthm == _SMS4_)
+ {
+ if ((!padapter->WapiSupport) || (!pWapiInfo->bWapiEnable))
+ return true;
+
+ if(IS_MCAST(pRA)){
+ if(!pWapiInfo->wapiTxMsk.bTxEnable){
+ bDrop = true;
+ WAPI_TRACE(WAPI_RX,"rtw_wapi_drop_for_key_absent: multicast key is absent \n");
+ return bDrop;
+ }
+ }
+ else{
+ if(!list_empty(&pWapiInfo->wapiSTAUsedList)){
+ list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list){
+ WAPI_DATA(WAPI_RX,"rtw_wapi_drop_for_key_absent: pWapiSta->PeerMacAddr ",pWapiSta->PeerMacAddr,6);
+ if (_rtw_memcmp(pRA, pWapiSta->PeerMacAddr, 6) == _TRUE){
+ bFindMatchPeer = true;
+ break;
+ }
+ }
+ if (bFindMatchPeer) {
+ if (!pWapiSta->wapiUsk.bTxEnable){
+ bDrop = true;
+ WAPI_TRACE(WAPI_RX,"rtw_wapi_drop_for_key_absent: unicast key is absent \n");
+ return bDrop;
+ }
+ }
+ else{
+ bDrop = true;
+ WAPI_TRACE(WAPI_RX,"rtw_wapi_drop_for_key_absent: no peer find \n");
+ return bDrop;
+ }
+
+ }
+ else{
+ bDrop = true;
+ WAPI_TRACE(WAPI_RX,"rtw_wapi_drop_for_key_absent: no sta exist \n");
+ return bDrop;
+ }
+ }
+ }
+ else
+ {
+ return bDrop;
+ }
+
+ return bDrop;
+}
+
+#endif
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_wapi_sms4.c b/drivers/net/wireless/rtl8723as/core/rtw_wapi_sms4.c
index aa6419390673..6126ed9a00c6 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_wapi_sms4.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_wapi_sms4.c
@@ -1,923 +1,923 @@
-#ifdef CONFIG_WAPI_SUPPORT
-
-#include <linux/unistd.h>
-#include <linux/etherdevice.h>
-#include <drv_types.h>
-#include <rtw_wapi.h>
-
-
-#ifdef CONFIG_WAPI_SW_SMS4
-
-#define WAPI_LITTLE_ENDIAN
-//#define BIG_ENDIAN
-#define ENCRYPT 0
-#define DECRYPT 1
-
-
-/**********************************************************
- **********************************************************/
-const u8 Sbox[256] = {
-0xd6,0x90,0xe9,0xfe,0xcc,0xe1,0x3d,0xb7,0x16,0xb6,0x14,0xc2,0x28,0xfb,0x2c,0x05,
-0x2b,0x67,0x9a,0x76,0x2a,0xbe,0x04,0xc3,0xaa,0x44,0x13,0x26,0x49,0x86,0x06,0x99,
-0x9c,0x42,0x50,0xf4,0x91,0xef,0x98,0x7a,0x33,0x54,0x0b,0x43,0xed,0xcf,0xac,0x62,
-0xe4,0xb3,0x1c,0xa9,0xc9,0x08,0xe8,0x95,0x80,0xdf,0x94,0xfa,0x75,0x8f,0x3f,0xa6,
-0x47,0x07,0xa7,0xfc,0xf3,0x73,0x17,0xba,0x83,0x59,0x3c,0x19,0xe6,0x85,0x4f,0xa8,
-0x68,0x6b,0x81,0xb2,0x71,0x64,0xda,0x8b,0xf8,0xeb,0x0f,0x4b,0x70,0x56,0x9d,0x35,
-0x1e,0x24,0x0e,0x5e,0x63,0x58,0xd1,0xa2,0x25,0x22,0x7c,0x3b,0x01,0x21,0x78,0x87,
-0xd4,0x00,0x46,0x57,0x9f,0xd3,0x27,0x52,0x4c,0x36,0x02,0xe7,0xa0,0xc4,0xc8,0x9e,
-0xea,0xbf,0x8a,0xd2,0x40,0xc7,0x38,0xb5,0xa3,0xf7,0xf2,0xce,0xf9,0x61,0x15,0xa1,
-0xe0,0xae,0x5d,0xa4,0x9b,0x34,0x1a,0x55,0xad,0x93,0x32,0x30,0xf5,0x8c,0xb1,0xe3,
-0x1d,0xf6,0xe2,0x2e,0x82,0x66,0xca,0x60,0xc0,0x29,0x23,0xab,0x0d,0x53,0x4e,0x6f,
-0xd5,0xdb,0x37,0x45,0xde,0xfd,0x8e,0x2f,0x03,0xff,0x6a,0x72,0x6d,0x6c,0x5b,0x51,
-0x8d,0x1b,0xaf,0x92,0xbb,0xdd,0xbc,0x7f,0x11,0xd9,0x5c,0x41,0x1f,0x10,0x5a,0xd8,
-0x0a,0xc1,0x31,0x88,0xa5,0xcd,0x7b,0xbd,0x2d,0x74,0xd0,0x12,0xb8,0xe5,0xb4,0xb0,
-0x89,0x69,0x97,0x4a,0x0c,0x96,0x77,0x7e,0x65,0xb9,0xf1,0x09,0xc5,0x6e,0xc6,0x84,
-0x18,0xf0,0x7d,0xec,0x3a,0xdc,0x4d,0x20,0x79,0xee,0x5f,0x3e,0xd7,0xcb,0x39,0x48
-};
-
-const u32 CK[32] = {
- 0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269,
- 0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9,
- 0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249,
- 0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9,
- 0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229,
- 0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299,
- 0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209,
- 0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279 };
-
-#define Rotl(_x, _y) (((_x) << (_y)) | ((_x) >> (32 - (_y))))
-
-#define ByteSub(_A) (Sbox[(_A) >> 24 & 0xFF] << 24 | \
- Sbox[(_A) >> 16 & 0xFF] << 16 | \
- Sbox[(_A) >> 8 & 0xFF] << 8 | \
- Sbox[(_A) & 0xFF])
-
-#define L1(_B) ((_B) ^ Rotl(_B, 2) ^ Rotl(_B, 10) ^ Rotl(_B, 18) ^ Rotl(_B, 24))
-#define L2(_B) ((_B) ^ Rotl(_B, 13) ^ Rotl(_B, 23))
-
-static void
-xor_block(void *dst, void *src1, void *src2)
-/* 128-bit xor: *dst = *src1 xor *src2. Pointers must be 32-bit aligned */
-{
- ((u32 *)dst)[0] = ((u32 *)src1)[0] ^ ((u32 *)src2)[0];
- ((u32 *)dst)[1] = ((u32 *)src1)[1] ^ ((u32 *)src2)[1];
- ((u32 *)dst)[2] = ((u32 *)src1)[2] ^ ((u32 *)src2)[2];
- ((u32 *)dst)[3] = ((u32 *)src1)[3] ^ ((u32 *)src2)[3];
-}
-
-
-void SMS4Crypt(u8 *Input, u8 *Output, u32 *rk)
-{
- u32 r, mid, x0, x1, x2, x3, *p;
- p = (u32 *)Input;
- x0 = p[0];
- x1 = p[1];
- x2 = p[2];
- x3 = p[3];
-#ifdef WAPI_LITTLE_ENDIAN
- x0 = Rotl(x0, 16); x0 = ((x0 & 0x00FF00FF) << 8) | ((x0 & 0xFF00FF00) >> 8);
- x1 = Rotl(x1, 16); x1 = ((x1 & 0x00FF00FF) << 8) | ((x1 & 0xFF00FF00) >> 8);
- x2 = Rotl(x2, 16); x2 = ((x2 & 0x00FF00FF) << 8) | ((x2 & 0xFF00FF00) >> 8);
- x3 = Rotl(x3, 16); x3 = ((x3 & 0x00FF00FF) << 8) | ((x3 & 0xFF00FF00) >> 8);
-#endif
- for (r = 0; r < 32; r += 4)
- {
- mid = x1 ^ x2 ^ x3 ^ rk[r + 0];
- mid = ByteSub(mid);
- x0 ^= L1(mid);
- mid = x2 ^ x3 ^ x0 ^ rk[r + 1];
- mid = ByteSub(mid);
- x1 ^= L1(mid);
- mid = x3 ^ x0 ^ x1 ^ rk[r + 2];
- mid = ByteSub(mid);
- x2 ^= L1(mid);
- mid = x0 ^ x1 ^ x2 ^ rk[r + 3];
- mid = ByteSub(mid);
- x3 ^= L1(mid);
- }
-#ifdef WAPI_LITTLE_ENDIAN
- x0 = Rotl(x0, 16); x0 = ((x0 & 0x00FF00FF) << 8) | ((x0 & 0xFF00FF00) >> 8);
- x1 = Rotl(x1, 16); x1 = ((x1 & 0x00FF00FF) << 8) | ((x1 & 0xFF00FF00) >> 8);
- x2 = Rotl(x2, 16); x2 = ((x2 & 0x00FF00FF) << 8) | ((x2 & 0xFF00FF00) >> 8);
- x3 = Rotl(x3, 16); x3 = ((x3 & 0x00FF00FF) << 8) | ((x3 & 0xFF00FF00) >> 8);
-#endif
- p = (u32 *)Output;
- p[0] = x3;
- p[1] = x2;
- p[2] = x1;
- p[3] = x0;
-}
-
-
-
-void SMS4KeyExt(u8 *Key, u32 *rk, u32 CryptFlag)
-{
- u32 r, mid, x0, x1, x2, x3, *p;
-
- p = (u32 *)Key;
- x0 = p[0];
- x1 = p[1];
- x2 = p[2];
- x3 = p[3];
-#ifdef WAPI_LITTLE_ENDIAN
- x0 = Rotl(x0, 16); x0 = ((x0 & 0xFF00FF) << 8) | ((x0 & 0xFF00FF00) >> 8);
- x1 = Rotl(x1, 16); x1 = ((x1 & 0xFF00FF) << 8) | ((x1 & 0xFF00FF00) >> 8);
- x2 = Rotl(x2, 16); x2 = ((x2 & 0xFF00FF) << 8) | ((x2 & 0xFF00FF00) >> 8);
- x3 = Rotl(x3, 16); x3 = ((x3 & 0xFF00FF) << 8) | ((x3 & 0xFF00FF00) >> 8);
-#endif
-
- x0 ^= 0xa3b1bac6;
- x1 ^= 0x56aa3350;
- x2 ^= 0x677d9197;
- x3 ^= 0xb27022dc;
- for (r = 0; r < 32; r += 4)
- {
- mid = x1 ^ x2 ^ x3 ^ CK[r + 0];
- mid = ByteSub(mid);
- rk[r + 0] = x0 ^= L2(mid);
- mid = x2 ^ x3 ^ x0 ^ CK[r + 1];
- mid = ByteSub(mid);
- rk[r + 1] = x1 ^= L2(mid);
- mid = x3 ^ x0 ^ x1 ^ CK[r + 2];
- mid = ByteSub(mid);
- rk[r + 2] = x2 ^= L2(mid);
- mid = x0 ^ x1 ^ x2 ^ CK[r + 3];
- mid = ByteSub(mid);
- rk[r + 3] = x3 ^= L2(mid);
- }
- if (CryptFlag == DECRYPT)
- {
- for (r = 0; r < 16; r++)
- mid = rk[r], rk[r] = rk[31 - r], rk[31 - r] = mid;
- }
-}
-
-
-void WapiSMS4Cryption(u8 *Key, u8 *IV, u8 *Input, u16 InputLength,
- u8 *Output, u16 *OutputLength, u32 CryptFlag)
-{
- u32 blockNum,i,j, rk[32];
- u16 remainder;
- u8 blockIn[16],blockOut[16], tempIV[16], k;
-
- *OutputLength = 0;
- remainder = InputLength & 0x0F;
- blockNum = InputLength >> 4;
- if(remainder !=0)
- blockNum++;
- else
- remainder = 16;
-
- for(k=0;k<16;k++)
- tempIV[k] = IV[15-k];
-
- memcpy(blockIn, tempIV, 16);
-
- SMS4KeyExt((u8 *)Key, rk,CryptFlag);
-
- for(i=0; i<blockNum-1; i++)
- {
- SMS4Crypt((u8 *)blockIn, blockOut, rk);
- xor_block(&Output[i*16], &Input[i*16], blockOut);
- memcpy(blockIn,blockOut,16);
- }
-
- *OutputLength = i*16;
-
- SMS4Crypt((u8 *)blockIn, blockOut, rk);
-
- for(j=0; j<remainder; j++)
- {
- Output[i*16+j] = Input[i*16+j] ^ blockOut[j];
- }
- *OutputLength += remainder;
-
-}
-
-void WapiSMS4Encryption(u8 *Key, u8 *IV, u8 *Input, u16 InputLength,
- u8 *Output, u16 *OutputLength)
-{
-
- WapiSMS4Cryption(Key, IV, Input, InputLength, Output, OutputLength, ENCRYPT);
-}
-
-void WapiSMS4Decryption(u8 *Key, u8 *IV, u8 *Input, u16 InputLength,
- u8 *Output, u16 *OutputLength)
-{
- // OFB mode: is also ENCRYPT flag
- WapiSMS4Cryption(Key, IV, Input, InputLength, Output, OutputLength, ENCRYPT);
-}
-
-void WapiSMS4CalculateMic(u8 *Key, u8 *IV, u8 *Input1, u8 Input1Length,
- u8 *Input2, u16 Input2Length, u8 *Output, u8 *OutputLength)
-{
- u32 blockNum, i, remainder, rk[32];
- u8 BlockIn[16], BlockOut[16], TempBlock[16], tempIV[16], k;
-
- *OutputLength = 0;
- remainder = Input1Length & 0x0F;
- blockNum = Input1Length >> 4;
-
- for(k=0;k<16;k++)
- tempIV[k] = IV[15-k];
-
- memcpy(BlockIn, tempIV, 16);
-
- SMS4KeyExt((u8 *)Key, rk, ENCRYPT);
-
- SMS4Crypt((u8 *)BlockIn, BlockOut, rk);
-
- for(i=0; i<blockNum; i++){
- xor_block(BlockIn, (Input1+i*16), BlockOut);
- SMS4Crypt((u8 *)BlockIn, BlockOut, rk);
- }
-
- if(remainder !=0){
- memset(TempBlock, 0, 16);
- memcpy(TempBlock, (Input1+blockNum*16), remainder);
-
- xor_block(BlockIn, TempBlock, BlockOut);
- SMS4Crypt((u8 *)BlockIn, BlockOut, rk);
- }
-
- remainder = Input2Length & 0x0F;
- blockNum = Input2Length >> 4;
-
- for(i=0; i<blockNum; i++){
- xor_block(BlockIn, (Input2+i*16), BlockOut);
- SMS4Crypt((u8 *)BlockIn, BlockOut, rk);
- }
-
- if(remainder !=0){
- memset(TempBlock, 0, 16);
- memcpy(TempBlock, (Input2+blockNum*16), remainder);
-
- xor_block(BlockIn, TempBlock, BlockOut);
- SMS4Crypt((u8 *)BlockIn, BlockOut, rk);
- }
-
- memcpy(Output, BlockOut, 16);
- *OutputLength = 16;
-}
-
-void SecCalculateMicSMS4(
- u8 KeyIdx,
- u8 *MicKey,
- u8 *pHeader,
- u8 *pData,
- u16 DataLen,
- u8 *MicBuffer
- )
-{
-#if 0
- struct ieee80211_hdr_3addr_qos *header;
- u8 TempBuf[34], TempLen = 32, MicLen, QosOffset, *IV;
- u16 *pTemp, fc;
-
- WAPI_TRACE(WAPI_TX|WAPI_RX, "=========>%s\n", __FUNCTION__);
-
- header = (struct ieee80211_hdr_3addr_qos *)pHeader;
- memset(TempBuf, 0, 34);
- memcpy(TempBuf, pHeader, 2); //FrameCtrl
- pTemp = (u16*)TempBuf;
- *pTemp &= 0xc78f; //bit4,5,6,11,12,13
-
- memcpy((TempBuf+2), (pHeader+4), 12); //Addr1, Addr2
- memcpy((TempBuf+14), (pHeader+22), 2); // SeqCtrl
- pTemp = (u16*)(TempBuf + 14);
- *pTemp &= 0x000f;
-
- memcpy((TempBuf+16), (pHeader+16), 6); //Addr3
-
- fc = le16_to_cpu(header->frame_ctl);
-
-
-
- if (GetFrDs((u16*)&fc) && GetToDs((u16 *)&fc))
- {
- memcpy((TempBuf+22), (pHeader+24), 6);
- QosOffset = 30;
- }else{
- memset((TempBuf+22), 0, 6);
- QosOffset = 24;
- }
-
- if((fc & 0x0088) == 0x0088){
- memcpy((TempBuf+28), (pHeader+QosOffset), 2);
- TempLen += 2;
- //IV = pHeader + QosOffset + 2 + SNAP_SIZE + sizeof(u16) + 2;
- IV = pHeader + QosOffset + 2 + 2;
- }else{
- IV = pHeader + QosOffset + 2;
- //IV = pHeader + QosOffset + SNAP_SIZE + sizeof(u16) + 2;
- }
-
- TempBuf[TempLen-1] = (u8)(DataLen & 0xff);
- TempBuf[TempLen-2] = (u8)((DataLen & 0xff00)>>8);
- TempBuf[TempLen-4] = KeyIdx;
-
- WAPI_DATA(WAPI_TX, "CalculateMic - KEY", MicKey, 16);
- WAPI_DATA(WAPI_TX, "CalculateMic - IV", IV, 16);
- WAPI_DATA(WAPI_TX, "CalculateMic - TempBuf", TempBuf, TempLen);
- WAPI_DATA(WAPI_TX, "CalculateMic - pData", pData, DataLen);
-
- WapiSMS4CalculateMic(MicKey, IV, TempBuf, TempLen,
- pData, DataLen, MicBuffer, &MicLen);
-
- if (MicLen != 16)
- WAPI_TRACE(WAPI_ERR,"%s: MIC Length Error!!\n",__FUNCTION__);
-
- WAPI_TRACE(WAPI_TX|WAPI_RX, "<=========%s\n", __FUNCTION__);
-#endif
-}
-
-/* AddCount: 1 or 2.
- * If overflow, return 1,
- * else return 0.
- */
-u8 WapiIncreasePN(u8 *PN, u8 AddCount)
-{
- u8 i;
-
- if (NULL == PN)
- return 1;
- //YJ,test,091102
- /*
- if(AddCount == 2){
- DBG_8192C("############################%s(): PN[0]=0x%x\n", __FUNCTION__, PN[0]);
- if(PN[0] == 0x48){
- PN[0] += AddCount;
- return 1;
- }else{
- PN[0] += AddCount;
- return 0;
- }
- }
- */
- //YJ,test,091102,end
-
- for (i=0; i<16; i++)
- {
- if (PN[i] + AddCount <= 0xff)
- {
- PN[i] += AddCount;
- return 0;
- }
- else
- {
- PN[i] += AddCount;
- AddCount = 1;
- }
- }
- return 1;
-}
-
-
-void WapiGetLastRxUnicastPNForQoSData(
- u8 UserPriority,
- PRT_WAPI_STA_INFO pWapiStaInfo,
- u8 *PNOut
-)
-{
- WAPI_TRACE(WAPI_RX, "===========> %s\n", __FUNCTION__);
- switch(UserPriority)
- {
- case 0:
- case 3:
- memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNBEQueue,16);
- break;
- case 1:
- case 2:
- memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNBKQueue,16);
- break;
- case 4:
- case 5:
- memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNVIQueue,16);
- break;
- case 6:
- case 7:
- memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNVOQueue,16);
- break;
- default:
- WAPI_TRACE(WAPI_ERR, "%s: Unknown TID \n", __FUNCTION__);
- break;
- }
- WAPI_TRACE(WAPI_RX, "<=========== %s\n", __FUNCTION__);
-}
-
-
-void WapiSetLastRxUnicastPNForQoSData(
- u8 UserPriority,
- u8 *PNIn,
- PRT_WAPI_STA_INFO pWapiStaInfo
-)
-{
- WAPI_TRACE(WAPI_RX, "===========> %s\n", __FUNCTION__);
- switch(UserPriority)
- {
- case 0:
- case 3:
- memcpy(pWapiStaInfo->lastRxUnicastPNBEQueue,PNIn,16);
- break;
- case 1:
- case 2:
- memcpy(pWapiStaInfo->lastRxUnicastPNBKQueue,PNIn,16);
- break;
- case 4:
- case 5:
- memcpy(pWapiStaInfo->lastRxUnicastPNVIQueue,PNIn,16);
- break;
- case 6:
- case 7:
- memcpy(pWapiStaInfo->lastRxUnicastPNVOQueue,PNIn,16);
- break;
- default:
- WAPI_TRACE(WAPI_ERR, "%s: Unknown TID \n", __FUNCTION__);
- break;
- }
- WAPI_TRACE(WAPI_RX, "<=========== %s\n", __FUNCTION__);
-}
-
-
-/****************************************************************************
- FALSE not RX-Reorder
- TRUE do RX Reorder
-add to support WAPI to N-mode
-*****************************************************************************/
-u8 WapiCheckPnInSwDecrypt(
- _adapter *padapter,
- struct sk_buff *pskb
-)
-{
- u8 ret = false;
-
-#if 0
- struct ieee80211_hdr_3addr_qos *header;
- u16 fc;
- u8 *pDaddr, *pTaddr, *pRaddr;
-
- header = (struct ieee80211_hdr_3addr_qos *)pskb->data;
- pTaddr = header->addr2;
- pRaddr = header->addr1;
- fc = le16_to_cpu(header->frame_ctl);
-
- if(GetToDs(&fc))
- pDaddr = header->addr3;
- else
- pDaddr = header->addr1;
-
- if ((_rtw_memcmp(pRaddr, padapter->pnetdev->dev_addr, ETH_ALEN) == 0)
- && ! (pDaddr)
- && (GetFrameType(&fc) == WIFI_QOS_DATA_TYPE))
- //&& ieee->pHTInfo->bCurrentHTSupport &&
- //ieee->pHTInfo->bCurRxReorderEnable)
- ret = false;
- else
- ret = true;
-#endif
- WAPI_TRACE(WAPI_RX, "%s: return %d\n", __FUNCTION__, ret);
- return ret;
-}
-
-int SecSMS4HeaderFillIV(_adapter *padapter, u8 *pxmitframe)
-{
- struct pkt_attrib *pattrib = &((struct xmit_frame*)pxmitframe)->attrib;
- u8 * frame = ((struct xmit_frame *)pxmitframe)->buf_addr + TXDESC_OFFSET;
- u8 *pSecHeader = NULL, *pos = NULL, *pRA = NULL;
- u8 bPNOverflow = false, bFindMatchPeer = false, hdr_len = 0;
- PWLAN_HEADER_WAPI_EXTENSION pWapiExt = NULL;
- PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
- PRT_WAPI_STA_INFO pWapiSta = NULL;
- int ret = 0;
-
- WAPI_TRACE(WAPI_TX, "=========>%s\n", __FUNCTION__);
-
- return ret;
-#if 0
- hdr_len = sMacHdrLng;
- if (GetFrameType(pskb->data) == WIFI_QOS_DATA_TYPE)
- {
- hdr_len += 2;
- }
- //hdr_len += SNAP_SIZE + sizeof(u16);
-
- pos = skb_push(pskb, padapter->wapiInfo.extra_prefix_len);
- memmove(pos, pos+padapter->wapiInfo.extra_prefix_len, hdr_len);
-
- pSecHeader = pskb->data + hdr_len;
- pWapiExt = (PWLAN_HEADER_WAPI_EXTENSION)pSecHeader;
- pRA = pskb->data + 4;
-
- WAPI_DATA(WAPI_TX, "FillIV - Before Fill IV", pskb->data, pskb->len);
-
- //Address 1 is always receiver's address
- if( IS_MCAST(pRA) ){
- if(!pWapiInfo->wapiTxMsk.bTxEnable){
- WAPI_TRACE(WAPI_ERR,"%s: bTxEnable = 0!!\n",__FUNCTION__);
- return -2;
- }
- if(pWapiInfo->wapiTxMsk.keyId <= 1){
- pWapiExt->KeyIdx = pWapiInfo->wapiTxMsk.keyId;
- pWapiExt->Reserved = 0;
- bPNOverflow = WapiIncreasePN(pWapiInfo->lastTxMulticastPN, 1);
- memcpy(pWapiExt->PN, pWapiInfo->lastTxMulticastPN, 16);
- if (bPNOverflow){
- // Update MSK Notification.
- WAPI_TRACE(WAPI_ERR,"===============>%s():multicast PN overflow\n",__FUNCTION__);
- rtw_wapi_app_event_handler(padapter,NULL,0,pRA, false, false, true, 0, false);
- }
- }else{
- WAPI_TRACE(WAPI_ERR,"%s: Invalid Wapi Multicast KeyIdx!!\n",__FUNCTION__);
- ret = -3;
- }
- }
- else{
- list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
- if(!memcmp(pWapiSta->PeerMacAddr,pRA,6)){
- bFindMatchPeer = true;
- break;
- }
- }
- if (bFindMatchPeer){
- if((!pWapiSta->wapiUskUpdate.bTxEnable) && (!pWapiSta->wapiUsk.bTxEnable)){
- WAPI_TRACE(WAPI_ERR,"%s: bTxEnable = 0!!\n",__FUNCTION__);
- return -4;
- }
- if (pWapiSta->wapiUsk.keyId <= 1){
- if(pWapiSta->wapiUskUpdate.bTxEnable)
- pWapiExt->KeyIdx = pWapiSta->wapiUskUpdate.keyId;
- else
- pWapiExt->KeyIdx = pWapiSta->wapiUsk.keyId;
-
- pWapiExt->Reserved = 0;
- bPNOverflow = WapiIncreasePN(pWapiSta->lastTxUnicastPN, 2);
- memcpy(pWapiExt->PN, pWapiSta->lastTxUnicastPN, 16);
- if (bPNOverflow){
- // Update USK Notification.
- WAPI_TRACE(WAPI_ERR,"===============>%s():unicast PN overflow\n",__FUNCTION__);
- rtw_wapi_app_event_handler(padapter,NULL,0,pWapiSta->PeerMacAddr, false, true, false, 0, false);
- }
- }else{
- WAPI_TRACE(WAPI_ERR,"%s: Invalid Wapi Unicast KeyIdx!!\n",__FUNCTION__);
- ret = -5;
- }
- }
- else{
- WAPI_TRACE(WAPI_ERR,"%s: Can not find Peer Sta "MAC_FMT"!!\n",__FUNCTION__, MAC_ARG(pRA));
- ret = -6;
- }
- }
-
- WAPI_DATA(WAPI_TX, "FillIV - After Fill IV", pskb->data, pskb->len);
- WAPI_TRACE(WAPI_TX, "<=========%s\n", __FUNCTION__);
- return ret;
-#endif
-}
-
-// WAPI SW Enc: must have done Coalesce!
-void SecSWSMS4Encryption(
- _adapter *padapter,
- u8 * pxmitframe
- )
-{
- PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
- PRT_WAPI_STA_INFO pWapiSta = NULL;
- u8 *pframe = ((struct xmit_frame*)pxmitframe)->buf_addr + TXDESC_SIZE;
- struct pkt_attrib *pattrib = &((struct xmit_frame*)pxmitframe)->attrib;
-
- u8 *SecPtr = NULL, *pRA, *pMicKey = NULL, *pDataKey = NULL, *pIV = NULL;
- u8 IVOffset, DataOffset, bFindMatchPeer = false, KeyIdx = 0, MicBuffer[16];
- u16 OutputLength;
-
- WAPI_TRACE(WAPI_TX, "=========>%s\n", __FUNCTION__);
-
- WAPI_TRACE(WAPI_TX,"hdrlen: %d \n",pattrib->hdrlen);
-
- return;
-
- DataOffset = pattrib->hdrlen + pattrib->iv_len;
-
- pRA = pframe + 4;
-
-
- if( IS_MCAST(pRA) ){
- KeyIdx = pWapiInfo->wapiTxMsk.keyId;
- pIV = pWapiInfo->lastTxMulticastPN;
- pMicKey = pWapiInfo->wapiTxMsk.micKey;
- pDataKey = pWapiInfo->wapiTxMsk.dataKey;
- }else{
- if (!list_empty(&(pWapiInfo->wapiSTAUsedList))){
- list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
- if (0 == memcmp(pWapiSta->PeerMacAddr, pRA, 6)){
- bFindMatchPeer = true;
- break;
- }
- }
-
- if (bFindMatchPeer){
- if (pWapiSta->wapiUskUpdate.bTxEnable){
- KeyIdx = pWapiSta->wapiUskUpdate.keyId;
- WAPI_TRACE(WAPI_TX, "%s(): Use update USK!! KeyIdx=%d\n", __FUNCTION__, KeyIdx);
- pIV = pWapiSta->lastTxUnicastPN;
- pMicKey = pWapiSta->wapiUskUpdate.micKey;
- pDataKey = pWapiSta->wapiUskUpdate.dataKey;
- }else{
- KeyIdx = pWapiSta->wapiUsk.keyId;
- WAPI_TRACE(WAPI_TX, "%s(): Use USK!! KeyIdx=%d\n", __FUNCTION__, KeyIdx);
- pIV = pWapiSta->lastTxUnicastPN;
- pMicKey = pWapiSta->wapiUsk.micKey;
- pDataKey = pWapiSta->wapiUsk.dataKey;
- }
- }else{
- WAPI_TRACE(WAPI_ERR,"%s: Can not find Peer Sta!!\n",__FUNCTION__);
- return;
- }
- }else{
- WAPI_TRACE(WAPI_ERR,"%s: wapiSTAUsedList is empty!!\n",__FUNCTION__);
- return;
- }
- }
-
- SecPtr = pframe;
- SecCalculateMicSMS4(KeyIdx, pMicKey, SecPtr, (SecPtr+DataOffset), pattrib->pktlen, MicBuffer);
-
- WAPI_DATA(WAPI_TX, "Encryption - MIC", MicBuffer, padapter->wapiInfo.extra_postfix_len);
-
- memcpy(pframe+pattrib->hdrlen+pattrib->iv_len+pattrib->pktlen-pattrib->icv_len,
- (u8 *)MicBuffer,
- padapter->wapiInfo.extra_postfix_len
- );
-
-
- WapiSMS4Encryption(pDataKey, pIV, (SecPtr+DataOffset),pattrib->pktlen+pattrib->icv_len, (SecPtr+DataOffset), &OutputLength);
-
- WAPI_DATA(WAPI_TX, "Encryption - After SMS4 encryption",pframe,pattrib->hdrlen+pattrib->iv_len+pattrib->pktlen);
-
- WAPI_TRACE(WAPI_TX, "<=========%s\n", __FUNCTION__);
-}
-
-u8 SecSWSMS4Decryption(
- _adapter *padapter,
- u8 *precv_frame,
- struct recv_priv *precv_priv
- )
-{
- PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
- struct recv_frame_hdr *precv_hdr;
- PRT_WAPI_STA_INFO pWapiSta = NULL;
- u8 IVOffset, DataOffset, bFindMatchPeer = false, bUseUpdatedKey = false;
- u8 KeyIdx, MicBuffer[16], lastRxPNforQoS[16];
- u8 *pRA, *pTA, *pMicKey, *pDataKey, *pLastRxPN, *pRecvPN, *pSecData, *pRecvMic, *pos;
- u8 TID = 0;
- u16 OutputLength, DataLen;
- u8 bQosData;
- struct sk_buff * pskb;
-
- WAPI_TRACE(WAPI_RX, "=========>%s\n", __FUNCTION__);
-
- return 0;
-
- precv_hdr = &((union recv_frame*)precv_frame)->u.hdr;
- pskb = (struct sk_buff *)(precv_hdr->rx_data);
- precv_hdr->bWapiCheckPNInDecrypt = WapiCheckPnInSwDecrypt(padapter, pskb);
- WAPI_TRACE(WAPI_RX, "=========>%s: check PN %d\n", __FUNCTION__,precv_hdr->bWapiCheckPNInDecrypt);
- WAPI_DATA(WAPI_RX, "Decryption - Before decryption", pskb->data, pskb->len);
-
- IVOffset = sMacHdrLng;
- bQosData = GetFrameType(pskb->data) == WIFI_QOS_DATA_TYPE;
- if (bQosData){
- IVOffset += 2;
- }
-
- //if(GetHTC())
- // IVOffset += 4;
-
- //IVOffset += SNAP_SIZE + sizeof(u16);
-
- DataOffset = IVOffset + padapter->wapiInfo.extra_prefix_len;
-
- pRA = pskb->data + 4;
- pTA = pskb->data + 10;
- KeyIdx = *(pskb->data + IVOffset);
- pRecvPN = pskb->data + IVOffset + 2;
- pSecData = pskb->data + DataOffset;
- DataLen = pskb->len - DataOffset;
- pRecvMic = pskb->data + pskb->len - padapter->wapiInfo.extra_postfix_len;
- TID = GetTid(pskb->data);
-
- if (!list_empty(&(pWapiInfo->wapiSTAUsedList))){
- list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
- if (0 == memcmp(pWapiSta->PeerMacAddr, pTA, 6)){
- bFindMatchPeer = true;
- break;
- }
- }
- }
-
- if (!bFindMatchPeer){
- WAPI_TRACE(WAPI_ERR, "%s: Can not find Peer Sta "MAC_FMT" for Key Info!!!\n", __FUNCTION__, MAC_ARG(pTA));
- return false;
- }
-
- if( IS_MCAST(pRA) ){
- WAPI_TRACE(WAPI_RX, "%s: Multicast decryption !!!\n", __FUNCTION__);
- if (pWapiSta->wapiMsk.keyId == KeyIdx && pWapiSta->wapiMsk.bSet){
- pLastRxPN = pWapiSta->lastRxMulticastPN;
- if (!WapiComparePN(pRecvPN, pLastRxPN)){
- WAPI_TRACE(WAPI_ERR, "%s: MSK PN is not larger than last, Dropped!!!\n", __FUNCTION__);
- WAPI_DATA(WAPI_ERR, "pRecvPN:", pRecvPN, 16);
- WAPI_DATA(WAPI_ERR, "pLastRxPN:", pLastRxPN, 16);
- return false;
- }
-
- memcpy(pLastRxPN, pRecvPN, 16);
- pMicKey = pWapiSta->wapiMsk.micKey;
- pDataKey = pWapiSta->wapiMsk.dataKey;
- }else if (pWapiSta->wapiMskUpdate.keyId == KeyIdx && pWapiSta->wapiMskUpdate.bSet){
- WAPI_TRACE(WAPI_RX, "%s: Use Updated MSK for Decryption !!!\n", __FUNCTION__);
- bUseUpdatedKey = true;
- memcpy(pWapiSta->lastRxMulticastPN, pRecvPN, 16);
- pMicKey = pWapiSta->wapiMskUpdate.micKey;
- pDataKey = pWapiSta->wapiMskUpdate.dataKey;
- }else{
- WAPI_TRACE(WAPI_ERR, "%s: Can not find MSK with matched KeyIdx(%d), Dropped !!!\n", __FUNCTION__,KeyIdx);
- return false;
- }
- }
- else{
- WAPI_TRACE(WAPI_RX, "%s: Unicast decryption !!!\n", __FUNCTION__);
- if (pWapiSta->wapiUsk.keyId == KeyIdx && pWapiSta->wapiUsk.bSet){
- WAPI_TRACE(WAPI_RX, "%s: Use USK for Decryption!!!\n", __FUNCTION__);
- if(precv_hdr->bWapiCheckPNInDecrypt){
- if(GetFrameType(pskb->data) == WIFI_QOS_DATA_TYPE){
- WapiGetLastRxUnicastPNForQoSData(TID, pWapiSta, lastRxPNforQoS);
- pLastRxPN = lastRxPNforQoS;
- }else{
- pLastRxPN = pWapiSta->lastRxUnicastPN;
- }
- if (!WapiComparePN(pRecvPN, pLastRxPN)){
- return false;
- }
- if(bQosData){
- WapiSetLastRxUnicastPNForQoSData(TID, pRecvPN, pWapiSta);
- }else{
- memcpy(pWapiSta->lastRxUnicastPN, pRecvPN, 16);
- }
- }else{
- memcpy(precv_hdr->WapiTempPN,pRecvPN,16);
- }
-
- if (check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE))
- {
- if ((pRecvPN[0] & 0x1) == 0){
- WAPI_TRACE(WAPI_ERR, "%s: Rx USK PN is not odd when Infra STA mode, Dropped !!!\n", __FUNCTION__);
- return false;
- }
- }
-
- pMicKey = pWapiSta->wapiUsk.micKey;
- pDataKey = pWapiSta->wapiUsk.dataKey;
- }
- else if (pWapiSta->wapiUskUpdate.keyId == KeyIdx && pWapiSta->wapiUskUpdate.bSet ){
- WAPI_TRACE(WAPI_RX, "%s: Use Updated USK for Decryption!!!\n", __FUNCTION__);
- if(pWapiSta->bAuthenticatorInUpdata)
- bUseUpdatedKey = true;
- else
- bUseUpdatedKey = false;
-
- if(bQosData){
- WapiSetLastRxUnicastPNForQoSData(TID, pRecvPN, pWapiSta);
- }else{
- memcpy(pWapiSta->lastRxUnicastPN, pRecvPN, 16);
- }
- pMicKey = pWapiSta->wapiUskUpdate.micKey;
- pDataKey = pWapiSta->wapiUskUpdate.dataKey;
- }else{
- WAPI_TRACE(WAPI_ERR, "%s: No valid USK!!!KeyIdx=%d pWapiSta->wapiUsk.keyId=%d pWapiSta->wapiUskUpdate.keyId=%d\n", __FUNCTION__, KeyIdx, pWapiSta->wapiUsk.keyId, pWapiSta->wapiUskUpdate.keyId);
- //dump_buf(pskb->data,pskb->len);
- return false;
- }
- }
-
- WAPI_DATA(WAPI_RX, "Decryption - DataKey", pDataKey, 16);
- WAPI_DATA(WAPI_RX, "Decryption - IV", pRecvPN, 16);
- WapiSMS4Decryption(pDataKey, pRecvPN, pSecData, DataLen, pSecData, &OutputLength);
-
- if (OutputLength != DataLen)
- WAPI_TRACE(WAPI_ERR, "%s: Output Length Error!!!!\n", __FUNCTION__);
-
- WAPI_DATA(WAPI_RX, "Decryption - After decryption", pskb->data, pskb->len);
-
- DataLen -= padapter->wapiInfo.extra_postfix_len;
-
- SecCalculateMicSMS4(KeyIdx, pMicKey, pskb->data, pSecData, DataLen, MicBuffer);
-
- WAPI_DATA(WAPI_RX, "Decryption - MIC received", pRecvMic, SMS4_MIC_LEN);
- WAPI_DATA(WAPI_RX, "Decryption - MIC calculated", MicBuffer, SMS4_MIC_LEN);
-
- if (0 == memcmp(MicBuffer, pRecvMic, padapter->wapiInfo.extra_postfix_len)){
- WAPI_TRACE(WAPI_RX, "%s: Check MIC OK!!\n", __FUNCTION__);
- if (bUseUpdatedKey){
- // delete the old key
- if ( IS_MCAST(pRA) ){
- WAPI_TRACE(WAPI_API, "%s(): AE use new update MSK!!\n", __FUNCTION__);
- pWapiSta->wapiMsk.keyId = pWapiSta->wapiMskUpdate.keyId;
- memcpy(pWapiSta->wapiMsk.dataKey, pWapiSta->wapiMskUpdate.dataKey, 16);
- memcpy(pWapiSta->wapiMsk.micKey, pWapiSta->wapiMskUpdate.micKey, 16);
- pWapiSta->wapiMskUpdate.bTxEnable = pWapiSta->wapiMskUpdate.bSet = false;
- }else{
- WAPI_TRACE(WAPI_API, "%s(): AE use new update USK!!\n", __FUNCTION__);
- pWapiSta->wapiUsk.keyId = pWapiSta->wapiUskUpdate.keyId;
- memcpy(pWapiSta->wapiUsk.dataKey, pWapiSta->wapiUskUpdate.dataKey, 16);
- memcpy(pWapiSta->wapiUsk.micKey, pWapiSta->wapiUskUpdate.micKey, 16);
- pWapiSta->wapiUskUpdate.bTxEnable = pWapiSta->wapiUskUpdate.bSet = false;
- }
- }
- }else{
- WAPI_TRACE(WAPI_ERR, "%s: Check MIC Error, Dropped !!!!\n", __FUNCTION__);
- return false;
- }
-
- pos = pskb->data;
- memmove(pos+padapter->wapiInfo.extra_prefix_len, pos, IVOffset);
- skb_pull(pskb, padapter->wapiInfo.extra_prefix_len);
-
- WAPI_TRACE(WAPI_RX, "<=========%s\n", __FUNCTION__);
-
- return true;
-}
-
-u32 rtw_sms4_encrypt(_adapter *padapter, u8 *pxmitframe)
-{
-
- u8 *pframe;
- u32 res = _SUCCESS;
-
- WAPI_TRACE(WAPI_TX, "=========>%s\n", __FUNCTION__);
-
- if ((!padapter->WapiSupport) || (!padapter->wapiInfo.bWapiEnable))
- {
- WAPI_TRACE(WAPI_TX, "<========== %s, WAPI not supported or enabled!\n", __FUNCTION__);
- return _FAIL;
- }
-
- if(((struct xmit_frame*)pxmitframe)->buf_addr==NULL)
- return _FAIL;
-
- pframe = ((struct xmit_frame*)pxmitframe)->buf_addr + TXDESC_OFFSET;
-
- SecSWSMS4Encryption(padapter, pxmitframe);
-
- WAPI_TRACE(WAPI_TX, "<=========%s\n", __FUNCTION__);
- return res;
-}
-
-u32 rtw_sms4_decrypt(_adapter *padapter, u8 *precvframe)
-{
- u8 *pframe;
- u32 res = _SUCCESS;
-
- WAPI_TRACE(WAPI_RX, "=========>%s\n", __FUNCTION__);
-
- if ((!padapter->WapiSupport) || (!padapter->wapiInfo.bWapiEnable))
- {
- WAPI_TRACE(WAPI_RX, "<========== %s, WAPI not supported or enabled!\n", __FUNCTION__);
- return _FAIL;
- }
-
-
- //drop packet when hw decrypt fail
- //return tempraily
- return _FAIL;
-
- //pframe=(unsigned char *)((union recv_frame*)precvframe)->u.hdr.rx_data;
-
- if (false == SecSWSMS4Decryption(padapter, precvframe, &padapter->recvpriv))
- {
- WAPI_TRACE(WAPI_ERR, "%s():SMS4 decrypt frame error\n",__FUNCTION__);
- return _FAIL;
- }
-
- WAPI_TRACE(WAPI_RX, "<=========%s\n", __FUNCTION__);
- return res;
-}
-
-#else
-
-u32 rtw_sms4_encrypt(_adapter *padapter, u8 *pxmitframe)
-{
- WAPI_TRACE(WAPI_TX, "=========>Dummy %s\n", __FUNCTION__);
- WAPI_TRACE(WAPI_TX, "<=========Dummy %s\n", __FUNCTION__);
- return _SUCCESS;
-}
-
-u32 rtw_sms4_decrypt(_adapter *padapter, u8 *precvframe)
-{
- WAPI_TRACE(WAPI_RX, "=========>Dummy %s\n", __FUNCTION__);
- WAPI_TRACE(WAPI_RX, "<=========Dummy %s\n", __FUNCTION__);
- return _SUCCESS;
-}
-
-#endif
-
-#endif
+#ifdef CONFIG_WAPI_SUPPORT
+
+#include <linux/unistd.h>
+#include <linux/etherdevice.h>
+#include <drv_types.h>
+#include <rtw_wapi.h>
+
+
+#ifdef CONFIG_WAPI_SW_SMS4
+
+#define WAPI_LITTLE_ENDIAN
+//#define BIG_ENDIAN
+#define ENCRYPT 0
+#define DECRYPT 1
+
+
+/**********************************************************
+ **********************************************************/
+const u8 Sbox[256] = {
+0xd6,0x90,0xe9,0xfe,0xcc,0xe1,0x3d,0xb7,0x16,0xb6,0x14,0xc2,0x28,0xfb,0x2c,0x05,
+0x2b,0x67,0x9a,0x76,0x2a,0xbe,0x04,0xc3,0xaa,0x44,0x13,0x26,0x49,0x86,0x06,0x99,
+0x9c,0x42,0x50,0xf4,0x91,0xef,0x98,0x7a,0x33,0x54,0x0b,0x43,0xed,0xcf,0xac,0x62,
+0xe4,0xb3,0x1c,0xa9,0xc9,0x08,0xe8,0x95,0x80,0xdf,0x94,0xfa,0x75,0x8f,0x3f,0xa6,
+0x47,0x07,0xa7,0xfc,0xf3,0x73,0x17,0xba,0x83,0x59,0x3c,0x19,0xe6,0x85,0x4f,0xa8,
+0x68,0x6b,0x81,0xb2,0x71,0x64,0xda,0x8b,0xf8,0xeb,0x0f,0x4b,0x70,0x56,0x9d,0x35,
+0x1e,0x24,0x0e,0x5e,0x63,0x58,0xd1,0xa2,0x25,0x22,0x7c,0x3b,0x01,0x21,0x78,0x87,
+0xd4,0x00,0x46,0x57,0x9f,0xd3,0x27,0x52,0x4c,0x36,0x02,0xe7,0xa0,0xc4,0xc8,0x9e,
+0xea,0xbf,0x8a,0xd2,0x40,0xc7,0x38,0xb5,0xa3,0xf7,0xf2,0xce,0xf9,0x61,0x15,0xa1,
+0xe0,0xae,0x5d,0xa4,0x9b,0x34,0x1a,0x55,0xad,0x93,0x32,0x30,0xf5,0x8c,0xb1,0xe3,
+0x1d,0xf6,0xe2,0x2e,0x82,0x66,0xca,0x60,0xc0,0x29,0x23,0xab,0x0d,0x53,0x4e,0x6f,
+0xd5,0xdb,0x37,0x45,0xde,0xfd,0x8e,0x2f,0x03,0xff,0x6a,0x72,0x6d,0x6c,0x5b,0x51,
+0x8d,0x1b,0xaf,0x92,0xbb,0xdd,0xbc,0x7f,0x11,0xd9,0x5c,0x41,0x1f,0x10,0x5a,0xd8,
+0x0a,0xc1,0x31,0x88,0xa5,0xcd,0x7b,0xbd,0x2d,0x74,0xd0,0x12,0xb8,0xe5,0xb4,0xb0,
+0x89,0x69,0x97,0x4a,0x0c,0x96,0x77,0x7e,0x65,0xb9,0xf1,0x09,0xc5,0x6e,0xc6,0x84,
+0x18,0xf0,0x7d,0xec,0x3a,0xdc,0x4d,0x20,0x79,0xee,0x5f,0x3e,0xd7,0xcb,0x39,0x48
+};
+
+const u32 CK[32] = {
+ 0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269,
+ 0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9,
+ 0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249,
+ 0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9,
+ 0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229,
+ 0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299,
+ 0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209,
+ 0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279 };
+
+#define Rotl(_x, _y) (((_x) << (_y)) | ((_x) >> (32 - (_y))))
+
+#define ByteSub(_A) (Sbox[(_A) >> 24 & 0xFF] << 24 | \
+ Sbox[(_A) >> 16 & 0xFF] << 16 | \
+ Sbox[(_A) >> 8 & 0xFF] << 8 | \
+ Sbox[(_A) & 0xFF])
+
+#define L1(_B) ((_B) ^ Rotl(_B, 2) ^ Rotl(_B, 10) ^ Rotl(_B, 18) ^ Rotl(_B, 24))
+#define L2(_B) ((_B) ^ Rotl(_B, 13) ^ Rotl(_B, 23))
+
+static void
+xor_block(void *dst, void *src1, void *src2)
+/* 128-bit xor: *dst = *src1 xor *src2. Pointers must be 32-bit aligned */
+{
+ ((u32 *)dst)[0] = ((u32 *)src1)[0] ^ ((u32 *)src2)[0];
+ ((u32 *)dst)[1] = ((u32 *)src1)[1] ^ ((u32 *)src2)[1];
+ ((u32 *)dst)[2] = ((u32 *)src1)[2] ^ ((u32 *)src2)[2];
+ ((u32 *)dst)[3] = ((u32 *)src1)[3] ^ ((u32 *)src2)[3];
+}
+
+
+void SMS4Crypt(u8 *Input, u8 *Output, u32 *rk)
+{
+ u32 r, mid, x0, x1, x2, x3, *p;
+ p = (u32 *)Input;
+ x0 = p[0];
+ x1 = p[1];
+ x2 = p[2];
+ x3 = p[3];
+#ifdef WAPI_LITTLE_ENDIAN
+ x0 = Rotl(x0, 16); x0 = ((x0 & 0x00FF00FF) << 8) | ((x0 & 0xFF00FF00) >> 8);
+ x1 = Rotl(x1, 16); x1 = ((x1 & 0x00FF00FF) << 8) | ((x1 & 0xFF00FF00) >> 8);
+ x2 = Rotl(x2, 16); x2 = ((x2 & 0x00FF00FF) << 8) | ((x2 & 0xFF00FF00) >> 8);
+ x3 = Rotl(x3, 16); x3 = ((x3 & 0x00FF00FF) << 8) | ((x3 & 0xFF00FF00) >> 8);
+#endif
+ for (r = 0; r < 32; r += 4)
+ {
+ mid = x1 ^ x2 ^ x3 ^ rk[r + 0];
+ mid = ByteSub(mid);
+ x0 ^= L1(mid);
+ mid = x2 ^ x3 ^ x0 ^ rk[r + 1];
+ mid = ByteSub(mid);
+ x1 ^= L1(mid);
+ mid = x3 ^ x0 ^ x1 ^ rk[r + 2];
+ mid = ByteSub(mid);
+ x2 ^= L1(mid);
+ mid = x0 ^ x1 ^ x2 ^ rk[r + 3];
+ mid = ByteSub(mid);
+ x3 ^= L1(mid);
+ }
+#ifdef WAPI_LITTLE_ENDIAN
+ x0 = Rotl(x0, 16); x0 = ((x0 & 0x00FF00FF) << 8) | ((x0 & 0xFF00FF00) >> 8);
+ x1 = Rotl(x1, 16); x1 = ((x1 & 0x00FF00FF) << 8) | ((x1 & 0xFF00FF00) >> 8);
+ x2 = Rotl(x2, 16); x2 = ((x2 & 0x00FF00FF) << 8) | ((x2 & 0xFF00FF00) >> 8);
+ x3 = Rotl(x3, 16); x3 = ((x3 & 0x00FF00FF) << 8) | ((x3 & 0xFF00FF00) >> 8);
+#endif
+ p = (u32 *)Output;
+ p[0] = x3;
+ p[1] = x2;
+ p[2] = x1;
+ p[3] = x0;
+}
+
+
+
+void SMS4KeyExt(u8 *Key, u32 *rk, u32 CryptFlag)
+{
+ u32 r, mid, x0, x1, x2, x3, *p;
+
+ p = (u32 *)Key;
+ x0 = p[0];
+ x1 = p[1];
+ x2 = p[2];
+ x3 = p[3];
+#ifdef WAPI_LITTLE_ENDIAN
+ x0 = Rotl(x0, 16); x0 = ((x0 & 0xFF00FF) << 8) | ((x0 & 0xFF00FF00) >> 8);
+ x1 = Rotl(x1, 16); x1 = ((x1 & 0xFF00FF) << 8) | ((x1 & 0xFF00FF00) >> 8);
+ x2 = Rotl(x2, 16); x2 = ((x2 & 0xFF00FF) << 8) | ((x2 & 0xFF00FF00) >> 8);
+ x3 = Rotl(x3, 16); x3 = ((x3 & 0xFF00FF) << 8) | ((x3 & 0xFF00FF00) >> 8);
+#endif
+
+ x0 ^= 0xa3b1bac6;
+ x1 ^= 0x56aa3350;
+ x2 ^= 0x677d9197;
+ x3 ^= 0xb27022dc;
+ for (r = 0; r < 32; r += 4)
+ {
+ mid = x1 ^ x2 ^ x3 ^ CK[r + 0];
+ mid = ByteSub(mid);
+ rk[r + 0] = x0 ^= L2(mid);
+ mid = x2 ^ x3 ^ x0 ^ CK[r + 1];
+ mid = ByteSub(mid);
+ rk[r + 1] = x1 ^= L2(mid);
+ mid = x3 ^ x0 ^ x1 ^ CK[r + 2];
+ mid = ByteSub(mid);
+ rk[r + 2] = x2 ^= L2(mid);
+ mid = x0 ^ x1 ^ x2 ^ CK[r + 3];
+ mid = ByteSub(mid);
+ rk[r + 3] = x3 ^= L2(mid);
+ }
+ if (CryptFlag == DECRYPT)
+ {
+ for (r = 0; r < 16; r++)
+ mid = rk[r], rk[r] = rk[31 - r], rk[31 - r] = mid;
+ }
+}
+
+
+void WapiSMS4Cryption(u8 *Key, u8 *IV, u8 *Input, u16 InputLength,
+ u8 *Output, u16 *OutputLength, u32 CryptFlag)
+{
+ u32 blockNum,i,j, rk[32];
+ u16 remainder;
+ u8 blockIn[16],blockOut[16], tempIV[16], k;
+
+ *OutputLength = 0;
+ remainder = InputLength & 0x0F;
+ blockNum = InputLength >> 4;
+ if(remainder !=0)
+ blockNum++;
+ else
+ remainder = 16;
+
+ for(k=0;k<16;k++)
+ tempIV[k] = IV[15-k];
+
+ memcpy(blockIn, tempIV, 16);
+
+ SMS4KeyExt((u8 *)Key, rk,CryptFlag);
+
+ for(i=0; i<blockNum-1; i++)
+ {
+ SMS4Crypt((u8 *)blockIn, blockOut, rk);
+ xor_block(&Output[i*16], &Input[i*16], blockOut);
+ memcpy(blockIn,blockOut,16);
+ }
+
+ *OutputLength = i*16;
+
+ SMS4Crypt((u8 *)blockIn, blockOut, rk);
+
+ for(j=0; j<remainder; j++)
+ {
+ Output[i*16+j] = Input[i*16+j] ^ blockOut[j];
+ }
+ *OutputLength += remainder;
+
+}
+
+void WapiSMS4Encryption(u8 *Key, u8 *IV, u8 *Input, u16 InputLength,
+ u8 *Output, u16 *OutputLength)
+{
+
+ WapiSMS4Cryption(Key, IV, Input, InputLength, Output, OutputLength, ENCRYPT);
+}
+
+void WapiSMS4Decryption(u8 *Key, u8 *IV, u8 *Input, u16 InputLength,
+ u8 *Output, u16 *OutputLength)
+{
+ // OFB mode: is also ENCRYPT flag
+ WapiSMS4Cryption(Key, IV, Input, InputLength, Output, OutputLength, ENCRYPT);
+}
+
+void WapiSMS4CalculateMic(u8 *Key, u8 *IV, u8 *Input1, u8 Input1Length,
+ u8 *Input2, u16 Input2Length, u8 *Output, u8 *OutputLength)
+{
+ u32 blockNum, i, remainder, rk[32];
+ u8 BlockIn[16], BlockOut[16], TempBlock[16], tempIV[16], k;
+
+ *OutputLength = 0;
+ remainder = Input1Length & 0x0F;
+ blockNum = Input1Length >> 4;
+
+ for(k=0;k<16;k++)
+ tempIV[k] = IV[15-k];
+
+ memcpy(BlockIn, tempIV, 16);
+
+ SMS4KeyExt((u8 *)Key, rk, ENCRYPT);
+
+ SMS4Crypt((u8 *)BlockIn, BlockOut, rk);
+
+ for(i=0; i<blockNum; i++){
+ xor_block(BlockIn, (Input1+i*16), BlockOut);
+ SMS4Crypt((u8 *)BlockIn, BlockOut, rk);
+ }
+
+ if(remainder !=0){
+ memset(TempBlock, 0, 16);
+ memcpy(TempBlock, (Input1+blockNum*16), remainder);
+
+ xor_block(BlockIn, TempBlock, BlockOut);
+ SMS4Crypt((u8 *)BlockIn, BlockOut, rk);
+ }
+
+ remainder = Input2Length & 0x0F;
+ blockNum = Input2Length >> 4;
+
+ for(i=0; i<blockNum; i++){
+ xor_block(BlockIn, (Input2+i*16), BlockOut);
+ SMS4Crypt((u8 *)BlockIn, BlockOut, rk);
+ }
+
+ if(remainder !=0){
+ memset(TempBlock, 0, 16);
+ memcpy(TempBlock, (Input2+blockNum*16), remainder);
+
+ xor_block(BlockIn, TempBlock, BlockOut);
+ SMS4Crypt((u8 *)BlockIn, BlockOut, rk);
+ }
+
+ memcpy(Output, BlockOut, 16);
+ *OutputLength = 16;
+}
+
+void SecCalculateMicSMS4(
+ u8 KeyIdx,
+ u8 *MicKey,
+ u8 *pHeader,
+ u8 *pData,
+ u16 DataLen,
+ u8 *MicBuffer
+ )
+{
+#if 0
+ struct ieee80211_hdr_3addr_qos *header;
+ u8 TempBuf[34], TempLen = 32, MicLen, QosOffset, *IV;
+ u16 *pTemp, fc;
+
+ WAPI_TRACE(WAPI_TX|WAPI_RX, "=========>%s\n", __FUNCTION__);
+
+ header = (struct ieee80211_hdr_3addr_qos *)pHeader;
+ memset(TempBuf, 0, 34);
+ memcpy(TempBuf, pHeader, 2); //FrameCtrl
+ pTemp = (u16*)TempBuf;
+ *pTemp &= 0xc78f; //bit4,5,6,11,12,13
+
+ memcpy((TempBuf+2), (pHeader+4), 12); //Addr1, Addr2
+ memcpy((TempBuf+14), (pHeader+22), 2); // SeqCtrl
+ pTemp = (u16*)(TempBuf + 14);
+ *pTemp &= 0x000f;
+
+ memcpy((TempBuf+16), (pHeader+16), 6); //Addr3
+
+ fc = le16_to_cpu(header->frame_ctl);
+
+
+
+ if (GetFrDs((u16*)&fc) && GetToDs((u16 *)&fc))
+ {
+ memcpy((TempBuf+22), (pHeader+24), 6);
+ QosOffset = 30;
+ }else{
+ memset((TempBuf+22), 0, 6);
+ QosOffset = 24;
+ }
+
+ if((fc & 0x0088) == 0x0088){
+ memcpy((TempBuf+28), (pHeader+QosOffset), 2);
+ TempLen += 2;
+ //IV = pHeader + QosOffset + 2 + SNAP_SIZE + sizeof(u16) + 2;
+ IV = pHeader + QosOffset + 2 + 2;
+ }else{
+ IV = pHeader + QosOffset + 2;
+ //IV = pHeader + QosOffset + SNAP_SIZE + sizeof(u16) + 2;
+ }
+
+ TempBuf[TempLen-1] = (u8)(DataLen & 0xff);
+ TempBuf[TempLen-2] = (u8)((DataLen & 0xff00)>>8);
+ TempBuf[TempLen-4] = KeyIdx;
+
+ WAPI_DATA(WAPI_TX, "CalculateMic - KEY", MicKey, 16);
+ WAPI_DATA(WAPI_TX, "CalculateMic - IV", IV, 16);
+ WAPI_DATA(WAPI_TX, "CalculateMic - TempBuf", TempBuf, TempLen);
+ WAPI_DATA(WAPI_TX, "CalculateMic - pData", pData, DataLen);
+
+ WapiSMS4CalculateMic(MicKey, IV, TempBuf, TempLen,
+ pData, DataLen, MicBuffer, &MicLen);
+
+ if (MicLen != 16)
+ WAPI_TRACE(WAPI_ERR,"%s: MIC Length Error!!\n",__FUNCTION__);
+
+ WAPI_TRACE(WAPI_TX|WAPI_RX, "<=========%s\n", __FUNCTION__);
+#endif
+}
+
+/* AddCount: 1 or 2.
+ * If overflow, return 1,
+ * else return 0.
+ */
+u8 WapiIncreasePN(u8 *PN, u8 AddCount)
+{
+ u8 i;
+
+ if (NULL == PN)
+ return 1;
+ //YJ,test,091102
+ /*
+ if(AddCount == 2){
+ DBG_8192C("############################%s(): PN[0]=0x%x\n", __FUNCTION__, PN[0]);
+ if(PN[0] == 0x48){
+ PN[0] += AddCount;
+ return 1;
+ }else{
+ PN[0] += AddCount;
+ return 0;
+ }
+ }
+ */
+ //YJ,test,091102,end
+
+ for (i=0; i<16; i++)
+ {
+ if (PN[i] + AddCount <= 0xff)
+ {
+ PN[i] += AddCount;
+ return 0;
+ }
+ else
+ {
+ PN[i] += AddCount;
+ AddCount = 1;
+ }
+ }
+ return 1;
+}
+
+
+void WapiGetLastRxUnicastPNForQoSData(
+ u8 UserPriority,
+ PRT_WAPI_STA_INFO pWapiStaInfo,
+ u8 *PNOut
+)
+{
+ WAPI_TRACE(WAPI_RX, "===========> %s\n", __FUNCTION__);
+ switch(UserPriority)
+ {
+ case 0:
+ case 3:
+ memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNBEQueue,16);
+ break;
+ case 1:
+ case 2:
+ memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNBKQueue,16);
+ break;
+ case 4:
+ case 5:
+ memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNVIQueue,16);
+ break;
+ case 6:
+ case 7:
+ memcpy(PNOut,pWapiStaInfo->lastRxUnicastPNVOQueue,16);
+ break;
+ default:
+ WAPI_TRACE(WAPI_ERR, "%s: Unknown TID \n", __FUNCTION__);
+ break;
+ }
+ WAPI_TRACE(WAPI_RX, "<=========== %s\n", __FUNCTION__);
+}
+
+
+void WapiSetLastRxUnicastPNForQoSData(
+ u8 UserPriority,
+ u8 *PNIn,
+ PRT_WAPI_STA_INFO pWapiStaInfo
+)
+{
+ WAPI_TRACE(WAPI_RX, "===========> %s\n", __FUNCTION__);
+ switch(UserPriority)
+ {
+ case 0:
+ case 3:
+ memcpy(pWapiStaInfo->lastRxUnicastPNBEQueue,PNIn,16);
+ break;
+ case 1:
+ case 2:
+ memcpy(pWapiStaInfo->lastRxUnicastPNBKQueue,PNIn,16);
+ break;
+ case 4:
+ case 5:
+ memcpy(pWapiStaInfo->lastRxUnicastPNVIQueue,PNIn,16);
+ break;
+ case 6:
+ case 7:
+ memcpy(pWapiStaInfo->lastRxUnicastPNVOQueue,PNIn,16);
+ break;
+ default:
+ WAPI_TRACE(WAPI_ERR, "%s: Unknown TID \n", __FUNCTION__);
+ break;
+ }
+ WAPI_TRACE(WAPI_RX, "<=========== %s\n", __FUNCTION__);
+}
+
+
+/****************************************************************************
+ FALSE not RX-Reorder
+ TRUE do RX Reorder
+add to support WAPI to N-mode
+*****************************************************************************/
+u8 WapiCheckPnInSwDecrypt(
+ _adapter *padapter,
+ struct sk_buff *pskb
+)
+{
+ u8 ret = false;
+
+#if 0
+ struct ieee80211_hdr_3addr_qos *header;
+ u16 fc;
+ u8 *pDaddr, *pTaddr, *pRaddr;
+
+ header = (struct ieee80211_hdr_3addr_qos *)pskb->data;
+ pTaddr = header->addr2;
+ pRaddr = header->addr1;
+ fc = le16_to_cpu(header->frame_ctl);
+
+ if(GetToDs(&fc))
+ pDaddr = header->addr3;
+ else
+ pDaddr = header->addr1;
+
+ if ((_rtw_memcmp(pRaddr, padapter->pnetdev->dev_addr, ETH_ALEN) == 0)
+ && ! (pDaddr)
+ && (GetFrameType(&fc) == WIFI_QOS_DATA_TYPE))
+ //&& ieee->pHTInfo->bCurrentHTSupport &&
+ //ieee->pHTInfo->bCurRxReorderEnable)
+ ret = false;
+ else
+ ret = true;
+#endif
+ WAPI_TRACE(WAPI_RX, "%s: return %d\n", __FUNCTION__, ret);
+ return ret;
+}
+
+int SecSMS4HeaderFillIV(_adapter *padapter, u8 *pxmitframe)
+{
+ struct pkt_attrib *pattrib = &((struct xmit_frame*)pxmitframe)->attrib;
+ u8 * frame = ((struct xmit_frame *)pxmitframe)->buf_addr + TXDESC_OFFSET;
+ u8 *pSecHeader = NULL, *pos = NULL, *pRA = NULL;
+ u8 bPNOverflow = false, bFindMatchPeer = false, hdr_len = 0;
+ PWLAN_HEADER_WAPI_EXTENSION pWapiExt = NULL;
+ PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
+ PRT_WAPI_STA_INFO pWapiSta = NULL;
+ int ret = 0;
+
+ WAPI_TRACE(WAPI_TX, "=========>%s\n", __FUNCTION__);
+
+ return ret;
+#if 0
+ hdr_len = sMacHdrLng;
+ if (GetFrameType(pskb->data) == WIFI_QOS_DATA_TYPE)
+ {
+ hdr_len += 2;
+ }
+ //hdr_len += SNAP_SIZE + sizeof(u16);
+
+ pos = skb_push(pskb, padapter->wapiInfo.extra_prefix_len);
+ memmove(pos, pos+padapter->wapiInfo.extra_prefix_len, hdr_len);
+
+ pSecHeader = pskb->data + hdr_len;
+ pWapiExt = (PWLAN_HEADER_WAPI_EXTENSION)pSecHeader;
+ pRA = pskb->data + 4;
+
+ WAPI_DATA(WAPI_TX, "FillIV - Before Fill IV", pskb->data, pskb->len);
+
+ //Address 1 is always receiver's address
+ if( IS_MCAST(pRA) ){
+ if(!pWapiInfo->wapiTxMsk.bTxEnable){
+ WAPI_TRACE(WAPI_ERR,"%s: bTxEnable = 0!!\n",__FUNCTION__);
+ return -2;
+ }
+ if(pWapiInfo->wapiTxMsk.keyId <= 1){
+ pWapiExt->KeyIdx = pWapiInfo->wapiTxMsk.keyId;
+ pWapiExt->Reserved = 0;
+ bPNOverflow = WapiIncreasePN(pWapiInfo->lastTxMulticastPN, 1);
+ memcpy(pWapiExt->PN, pWapiInfo->lastTxMulticastPN, 16);
+ if (bPNOverflow){
+ // Update MSK Notification.
+ WAPI_TRACE(WAPI_ERR,"===============>%s():multicast PN overflow\n",__FUNCTION__);
+ rtw_wapi_app_event_handler(padapter,NULL,0,pRA, false, false, true, 0, false);
+ }
+ }else{
+ WAPI_TRACE(WAPI_ERR,"%s: Invalid Wapi Multicast KeyIdx!!\n",__FUNCTION__);
+ ret = -3;
+ }
+ }
+ else{
+ list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
+ if(!memcmp(pWapiSta->PeerMacAddr,pRA,6)){
+ bFindMatchPeer = true;
+ break;
+ }
+ }
+ if (bFindMatchPeer){
+ if((!pWapiSta->wapiUskUpdate.bTxEnable) && (!pWapiSta->wapiUsk.bTxEnable)){
+ WAPI_TRACE(WAPI_ERR,"%s: bTxEnable = 0!!\n",__FUNCTION__);
+ return -4;
+ }
+ if (pWapiSta->wapiUsk.keyId <= 1){
+ if(pWapiSta->wapiUskUpdate.bTxEnable)
+ pWapiExt->KeyIdx = pWapiSta->wapiUskUpdate.keyId;
+ else
+ pWapiExt->KeyIdx = pWapiSta->wapiUsk.keyId;
+
+ pWapiExt->Reserved = 0;
+ bPNOverflow = WapiIncreasePN(pWapiSta->lastTxUnicastPN, 2);
+ memcpy(pWapiExt->PN, pWapiSta->lastTxUnicastPN, 16);
+ if (bPNOverflow){
+ // Update USK Notification.
+ WAPI_TRACE(WAPI_ERR,"===============>%s():unicast PN overflow\n",__FUNCTION__);
+ rtw_wapi_app_event_handler(padapter,NULL,0,pWapiSta->PeerMacAddr, false, true, false, 0, false);
+ }
+ }else{
+ WAPI_TRACE(WAPI_ERR,"%s: Invalid Wapi Unicast KeyIdx!!\n",__FUNCTION__);
+ ret = -5;
+ }
+ }
+ else{
+ WAPI_TRACE(WAPI_ERR,"%s: Can not find Peer Sta "MAC_FMT"!!\n",__FUNCTION__, MAC_ARG(pRA));
+ ret = -6;
+ }
+ }
+
+ WAPI_DATA(WAPI_TX, "FillIV - After Fill IV", pskb->data, pskb->len);
+ WAPI_TRACE(WAPI_TX, "<=========%s\n", __FUNCTION__);
+ return ret;
+#endif
+}
+
+// WAPI SW Enc: must have done Coalesce!
+void SecSWSMS4Encryption(
+ _adapter *padapter,
+ u8 * pxmitframe
+ )
+{
+ PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
+ PRT_WAPI_STA_INFO pWapiSta = NULL;
+ u8 *pframe = ((struct xmit_frame*)pxmitframe)->buf_addr + TXDESC_SIZE;
+ struct pkt_attrib *pattrib = &((struct xmit_frame*)pxmitframe)->attrib;
+
+ u8 *SecPtr = NULL, *pRA, *pMicKey = NULL, *pDataKey = NULL, *pIV = NULL;
+ u8 IVOffset, DataOffset, bFindMatchPeer = false, KeyIdx = 0, MicBuffer[16];
+ u16 OutputLength;
+
+ WAPI_TRACE(WAPI_TX, "=========>%s\n", __FUNCTION__);
+
+ WAPI_TRACE(WAPI_TX,"hdrlen: %d \n",pattrib->hdrlen);
+
+ return;
+
+ DataOffset = pattrib->hdrlen + pattrib->iv_len;
+
+ pRA = pframe + 4;
+
+
+ if( IS_MCAST(pRA) ){
+ KeyIdx = pWapiInfo->wapiTxMsk.keyId;
+ pIV = pWapiInfo->lastTxMulticastPN;
+ pMicKey = pWapiInfo->wapiTxMsk.micKey;
+ pDataKey = pWapiInfo->wapiTxMsk.dataKey;
+ }else{
+ if (!list_empty(&(pWapiInfo->wapiSTAUsedList))){
+ list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
+ if (0 == memcmp(pWapiSta->PeerMacAddr, pRA, 6)){
+ bFindMatchPeer = true;
+ break;
+ }
+ }
+
+ if (bFindMatchPeer){
+ if (pWapiSta->wapiUskUpdate.bTxEnable){
+ KeyIdx = pWapiSta->wapiUskUpdate.keyId;
+ WAPI_TRACE(WAPI_TX, "%s(): Use update USK!! KeyIdx=%d\n", __FUNCTION__, KeyIdx);
+ pIV = pWapiSta->lastTxUnicastPN;
+ pMicKey = pWapiSta->wapiUskUpdate.micKey;
+ pDataKey = pWapiSta->wapiUskUpdate.dataKey;
+ }else{
+ KeyIdx = pWapiSta->wapiUsk.keyId;
+ WAPI_TRACE(WAPI_TX, "%s(): Use USK!! KeyIdx=%d\n", __FUNCTION__, KeyIdx);
+ pIV = pWapiSta->lastTxUnicastPN;
+ pMicKey = pWapiSta->wapiUsk.micKey;
+ pDataKey = pWapiSta->wapiUsk.dataKey;
+ }
+ }else{
+ WAPI_TRACE(WAPI_ERR,"%s: Can not find Peer Sta!!\n",__FUNCTION__);
+ return;
+ }
+ }else{
+ WAPI_TRACE(WAPI_ERR,"%s: wapiSTAUsedList is empty!!\n",__FUNCTION__);
+ return;
+ }
+ }
+
+ SecPtr = pframe;
+ SecCalculateMicSMS4(KeyIdx, pMicKey, SecPtr, (SecPtr+DataOffset), pattrib->pktlen, MicBuffer);
+
+ WAPI_DATA(WAPI_TX, "Encryption - MIC", MicBuffer, padapter->wapiInfo.extra_postfix_len);
+
+ memcpy(pframe+pattrib->hdrlen+pattrib->iv_len+pattrib->pktlen-pattrib->icv_len,
+ (u8 *)MicBuffer,
+ padapter->wapiInfo.extra_postfix_len
+ );
+
+
+ WapiSMS4Encryption(pDataKey, pIV, (SecPtr+DataOffset),pattrib->pktlen+pattrib->icv_len, (SecPtr+DataOffset), &OutputLength);
+
+ WAPI_DATA(WAPI_TX, "Encryption - After SMS4 encryption",pframe,pattrib->hdrlen+pattrib->iv_len+pattrib->pktlen);
+
+ WAPI_TRACE(WAPI_TX, "<=========%s\n", __FUNCTION__);
+}
+
+u8 SecSWSMS4Decryption(
+ _adapter *padapter,
+ u8 *precv_frame,
+ struct recv_priv *precv_priv
+ )
+{
+ PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
+ struct recv_frame_hdr *precv_hdr;
+ PRT_WAPI_STA_INFO pWapiSta = NULL;
+ u8 IVOffset, DataOffset, bFindMatchPeer = false, bUseUpdatedKey = false;
+ u8 KeyIdx, MicBuffer[16], lastRxPNforQoS[16];
+ u8 *pRA, *pTA, *pMicKey, *pDataKey, *pLastRxPN, *pRecvPN, *pSecData, *pRecvMic, *pos;
+ u8 TID = 0;
+ u16 OutputLength, DataLen;
+ u8 bQosData;
+ struct sk_buff * pskb;
+
+ WAPI_TRACE(WAPI_RX, "=========>%s\n", __FUNCTION__);
+
+ return 0;
+
+ precv_hdr = &((union recv_frame*)precv_frame)->u.hdr;
+ pskb = (struct sk_buff *)(precv_hdr->rx_data);
+ precv_hdr->bWapiCheckPNInDecrypt = WapiCheckPnInSwDecrypt(padapter, pskb);
+ WAPI_TRACE(WAPI_RX, "=========>%s: check PN %d\n", __FUNCTION__,precv_hdr->bWapiCheckPNInDecrypt);
+ WAPI_DATA(WAPI_RX, "Decryption - Before decryption", pskb->data, pskb->len);
+
+ IVOffset = sMacHdrLng;
+ bQosData = GetFrameType(pskb->data) == WIFI_QOS_DATA_TYPE;
+ if (bQosData){
+ IVOffset += 2;
+ }
+
+ //if(GetHTC())
+ // IVOffset += 4;
+
+ //IVOffset += SNAP_SIZE + sizeof(u16);
+
+ DataOffset = IVOffset + padapter->wapiInfo.extra_prefix_len;
+
+ pRA = pskb->data + 4;
+ pTA = pskb->data + 10;
+ KeyIdx = *(pskb->data + IVOffset);
+ pRecvPN = pskb->data + IVOffset + 2;
+ pSecData = pskb->data + DataOffset;
+ DataLen = pskb->len - DataOffset;
+ pRecvMic = pskb->data + pskb->len - padapter->wapiInfo.extra_postfix_len;
+ TID = GetTid(pskb->data);
+
+ if (!list_empty(&(pWapiInfo->wapiSTAUsedList))){
+ list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
+ if (0 == memcmp(pWapiSta->PeerMacAddr, pTA, 6)){
+ bFindMatchPeer = true;
+ break;
+ }
+ }
+ }
+
+ if (!bFindMatchPeer){
+ WAPI_TRACE(WAPI_ERR, "%s: Can not find Peer Sta "MAC_FMT" for Key Info!!!\n", __FUNCTION__, MAC_ARG(pTA));
+ return false;
+ }
+
+ if( IS_MCAST(pRA) ){
+ WAPI_TRACE(WAPI_RX, "%s: Multicast decryption !!!\n", __FUNCTION__);
+ if (pWapiSta->wapiMsk.keyId == KeyIdx && pWapiSta->wapiMsk.bSet){
+ pLastRxPN = pWapiSta->lastRxMulticastPN;
+ if (!WapiComparePN(pRecvPN, pLastRxPN)){
+ WAPI_TRACE(WAPI_ERR, "%s: MSK PN is not larger than last, Dropped!!!\n", __FUNCTION__);
+ WAPI_DATA(WAPI_ERR, "pRecvPN:", pRecvPN, 16);
+ WAPI_DATA(WAPI_ERR, "pLastRxPN:", pLastRxPN, 16);
+ return false;
+ }
+
+ memcpy(pLastRxPN, pRecvPN, 16);
+ pMicKey = pWapiSta->wapiMsk.micKey;
+ pDataKey = pWapiSta->wapiMsk.dataKey;
+ }else if (pWapiSta->wapiMskUpdate.keyId == KeyIdx && pWapiSta->wapiMskUpdate.bSet){
+ WAPI_TRACE(WAPI_RX, "%s: Use Updated MSK for Decryption !!!\n", __FUNCTION__);
+ bUseUpdatedKey = true;
+ memcpy(pWapiSta->lastRxMulticastPN, pRecvPN, 16);
+ pMicKey = pWapiSta->wapiMskUpdate.micKey;
+ pDataKey = pWapiSta->wapiMskUpdate.dataKey;
+ }else{
+ WAPI_TRACE(WAPI_ERR, "%s: Can not find MSK with matched KeyIdx(%d), Dropped !!!\n", __FUNCTION__,KeyIdx);
+ return false;
+ }
+ }
+ else{
+ WAPI_TRACE(WAPI_RX, "%s: Unicast decryption !!!\n", __FUNCTION__);
+ if (pWapiSta->wapiUsk.keyId == KeyIdx && pWapiSta->wapiUsk.bSet){
+ WAPI_TRACE(WAPI_RX, "%s: Use USK for Decryption!!!\n", __FUNCTION__);
+ if(precv_hdr->bWapiCheckPNInDecrypt){
+ if(GetFrameType(pskb->data) == WIFI_QOS_DATA_TYPE){
+ WapiGetLastRxUnicastPNForQoSData(TID, pWapiSta, lastRxPNforQoS);
+ pLastRxPN = lastRxPNforQoS;
+ }else{
+ pLastRxPN = pWapiSta->lastRxUnicastPN;
+ }
+ if (!WapiComparePN(pRecvPN, pLastRxPN)){
+ return false;
+ }
+ if(bQosData){
+ WapiSetLastRxUnicastPNForQoSData(TID, pRecvPN, pWapiSta);
+ }else{
+ memcpy(pWapiSta->lastRxUnicastPN, pRecvPN, 16);
+ }
+ }else{
+ memcpy(precv_hdr->WapiTempPN,pRecvPN,16);
+ }
+
+ if (check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE))
+ {
+ if ((pRecvPN[0] & 0x1) == 0){
+ WAPI_TRACE(WAPI_ERR, "%s: Rx USK PN is not odd when Infra STA mode, Dropped !!!\n", __FUNCTION__);
+ return false;
+ }
+ }
+
+ pMicKey = pWapiSta->wapiUsk.micKey;
+ pDataKey = pWapiSta->wapiUsk.dataKey;
+ }
+ else if (pWapiSta->wapiUskUpdate.keyId == KeyIdx && pWapiSta->wapiUskUpdate.bSet ){
+ WAPI_TRACE(WAPI_RX, "%s: Use Updated USK for Decryption!!!\n", __FUNCTION__);
+ if(pWapiSta->bAuthenticatorInUpdata)
+ bUseUpdatedKey = true;
+ else
+ bUseUpdatedKey = false;
+
+ if(bQosData){
+ WapiSetLastRxUnicastPNForQoSData(TID, pRecvPN, pWapiSta);
+ }else{
+ memcpy(pWapiSta->lastRxUnicastPN, pRecvPN, 16);
+ }
+ pMicKey = pWapiSta->wapiUskUpdate.micKey;
+ pDataKey = pWapiSta->wapiUskUpdate.dataKey;
+ }else{
+ WAPI_TRACE(WAPI_ERR, "%s: No valid USK!!!KeyIdx=%d pWapiSta->wapiUsk.keyId=%d pWapiSta->wapiUskUpdate.keyId=%d\n", __FUNCTION__, KeyIdx, pWapiSta->wapiUsk.keyId, pWapiSta->wapiUskUpdate.keyId);
+ //dump_buf(pskb->data,pskb->len);
+ return false;
+ }
+ }
+
+ WAPI_DATA(WAPI_RX, "Decryption - DataKey", pDataKey, 16);
+ WAPI_DATA(WAPI_RX, "Decryption - IV", pRecvPN, 16);
+ WapiSMS4Decryption(pDataKey, pRecvPN, pSecData, DataLen, pSecData, &OutputLength);
+
+ if (OutputLength != DataLen)
+ WAPI_TRACE(WAPI_ERR, "%s: Output Length Error!!!!\n", __FUNCTION__);
+
+ WAPI_DATA(WAPI_RX, "Decryption - After decryption", pskb->data, pskb->len);
+
+ DataLen -= padapter->wapiInfo.extra_postfix_len;
+
+ SecCalculateMicSMS4(KeyIdx, pMicKey, pskb->data, pSecData, DataLen, MicBuffer);
+
+ WAPI_DATA(WAPI_RX, "Decryption - MIC received", pRecvMic, SMS4_MIC_LEN);
+ WAPI_DATA(WAPI_RX, "Decryption - MIC calculated", MicBuffer, SMS4_MIC_LEN);
+
+ if (0 == memcmp(MicBuffer, pRecvMic, padapter->wapiInfo.extra_postfix_len)){
+ WAPI_TRACE(WAPI_RX, "%s: Check MIC OK!!\n", __FUNCTION__);
+ if (bUseUpdatedKey){
+ // delete the old key
+ if ( IS_MCAST(pRA) ){
+ WAPI_TRACE(WAPI_API, "%s(): AE use new update MSK!!\n", __FUNCTION__);
+ pWapiSta->wapiMsk.keyId = pWapiSta->wapiMskUpdate.keyId;
+ memcpy(pWapiSta->wapiMsk.dataKey, pWapiSta->wapiMskUpdate.dataKey, 16);
+ memcpy(pWapiSta->wapiMsk.micKey, pWapiSta->wapiMskUpdate.micKey, 16);
+ pWapiSta->wapiMskUpdate.bTxEnable = pWapiSta->wapiMskUpdate.bSet = false;
+ }else{
+ WAPI_TRACE(WAPI_API, "%s(): AE use new update USK!!\n", __FUNCTION__);
+ pWapiSta->wapiUsk.keyId = pWapiSta->wapiUskUpdate.keyId;
+ memcpy(pWapiSta->wapiUsk.dataKey, pWapiSta->wapiUskUpdate.dataKey, 16);
+ memcpy(pWapiSta->wapiUsk.micKey, pWapiSta->wapiUskUpdate.micKey, 16);
+ pWapiSta->wapiUskUpdate.bTxEnable = pWapiSta->wapiUskUpdate.bSet = false;
+ }
+ }
+ }else{
+ WAPI_TRACE(WAPI_ERR, "%s: Check MIC Error, Dropped !!!!\n", __FUNCTION__);
+ return false;
+ }
+
+ pos = pskb->data;
+ memmove(pos+padapter->wapiInfo.extra_prefix_len, pos, IVOffset);
+ skb_pull(pskb, padapter->wapiInfo.extra_prefix_len);
+
+ WAPI_TRACE(WAPI_RX, "<=========%s\n", __FUNCTION__);
+
+ return true;
+}
+
+u32 rtw_sms4_encrypt(_adapter *padapter, u8 *pxmitframe)
+{
+
+ u8 *pframe;
+ u32 res = _SUCCESS;
+
+ WAPI_TRACE(WAPI_TX, "=========>%s\n", __FUNCTION__);
+
+ if ((!padapter->WapiSupport) || (!padapter->wapiInfo.bWapiEnable))
+ {
+ WAPI_TRACE(WAPI_TX, "<========== %s, WAPI not supported or enabled!\n", __FUNCTION__);
+ return _FAIL;
+ }
+
+ if(((struct xmit_frame*)pxmitframe)->buf_addr==NULL)
+ return _FAIL;
+
+ pframe = ((struct xmit_frame*)pxmitframe)->buf_addr + TXDESC_OFFSET;
+
+ SecSWSMS4Encryption(padapter, pxmitframe);
+
+ WAPI_TRACE(WAPI_TX, "<=========%s\n", __FUNCTION__);
+ return res;
+}
+
+u32 rtw_sms4_decrypt(_adapter *padapter, u8 *precvframe)
+{
+ u8 *pframe;
+ u32 res = _SUCCESS;
+
+ WAPI_TRACE(WAPI_RX, "=========>%s\n", __FUNCTION__);
+
+ if ((!padapter->WapiSupport) || (!padapter->wapiInfo.bWapiEnable))
+ {
+ WAPI_TRACE(WAPI_RX, "<========== %s, WAPI not supported or enabled!\n", __FUNCTION__);
+ return _FAIL;
+ }
+
+
+ //drop packet when hw decrypt fail
+ //return tempraily
+ return _FAIL;
+
+ //pframe=(unsigned char *)((union recv_frame*)precvframe)->u.hdr.rx_data;
+
+ if (false == SecSWSMS4Decryption(padapter, precvframe, &padapter->recvpriv))
+ {
+ WAPI_TRACE(WAPI_ERR, "%s():SMS4 decrypt frame error\n",__FUNCTION__);
+ return _FAIL;
+ }
+
+ WAPI_TRACE(WAPI_RX, "<=========%s\n", __FUNCTION__);
+ return res;
+}
+
+#else
+
+u32 rtw_sms4_encrypt(_adapter *padapter, u8 *pxmitframe)
+{
+ WAPI_TRACE(WAPI_TX, "=========>Dummy %s\n", __FUNCTION__);
+ WAPI_TRACE(WAPI_TX, "<=========Dummy %s\n", __FUNCTION__);
+ return _SUCCESS;
+}
+
+u32 rtw_sms4_decrypt(_adapter *padapter, u8 *precvframe)
+{
+ WAPI_TRACE(WAPI_RX, "=========>Dummy %s\n", __FUNCTION__);
+ WAPI_TRACE(WAPI_RX, "<=========Dummy %s\n", __FUNCTION__);
+ return _SUCCESS;
+}
+
+#endif
+
+#endif
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_wlan_util.c b/drivers/net/wireless/rtl8723as/core/rtw_wlan_util.c
index 182865daaab0..8615468f2648 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_wlan_util.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_wlan_util.c
@@ -24,6 +24,9 @@
#include <drv_types.h>
#include <wifi.h>
+#ifdef CONFIG_WOWLAN
+#include <linux/inetdevice.h>
+#endif
unsigned char ARTHEROS_OUI1[] = {0x00, 0x03, 0x7f};
unsigned char ARTHEROS_OUI2[] = {0x00, 0x13, 0x74};
@@ -361,66 +364,21 @@ void UpdateBrateTblForSoftAP(u8 *bssrateset, u32 bssratelen)
void Save_DM_Func_Flag(_adapter *padapter)
{
u8 bSaveFlag = _TRUE;
-
-#ifdef CONFIG_CONCURRENT_MODE
- _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
- if(pbuddy_adapter)
- rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
-#endif
-
rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
-
}
void Restore_DM_Func_Flag(_adapter *padapter)
{
u8 bSaveFlag = _FALSE;
-#ifdef CONFIG_CONCURRENT_MODE
- _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
- if(pbuddy_adapter)
- rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
-#endif
rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
}
void Switch_DM_Func(_adapter *padapter, u32 mode, u8 enable)
{
-#ifdef CONFIG_CONCURRENT_MODE
- _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
-#endif
-
if(enable == _TRUE)
- {
-#ifdef CONFIG_CONCURRENT_MODE
- if(pbuddy_adapter)
- rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_DM_FUNC_SET, (u8 *)(&mode));
-#endif
rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_SET, (u8 *)(&mode));
- }
else
- {
-#ifdef CONFIG_CONCURRENT_MODE
- if(pbuddy_adapter)
- rtw_hal_set_hwreg(pbuddy_adapter, HW_VAR_DM_FUNC_CLR, (u8 *)(&mode));
-#endif
rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_CLR, (u8 *)(&mode));
- }
-
-#if 0
- u8 val8;
-
- val8 = rtw_read8(padapter, FW_DYNAMIC_FUN_SWITCH);
-
- if(enable == _TRUE)
- {
- rtw_write8(padapter, FW_DYNAMIC_FUN_SWITCH, (val8 | mode));
- }
- else
- {
- rtw_write8(padapter, FW_DYNAMIC_FUN_SWITCH, (val8 & mode));
- }
-#endif
-
}
static void Set_NETYPE1_MSR(_adapter *padapter, u8 type)
@@ -454,6 +412,9 @@ inline u8 rtw_get_oper_ch(_adapter *adapter)
inline void rtw_set_oper_ch(_adapter *adapter, u8 ch)
{
+ if (adapter_to_dvobj(adapter)->oper_channel != ch)
+ adapter_to_dvobj(adapter)->on_oper_ch_time = rtw_get_current_time();
+
adapter_to_dvobj(adapter)->oper_channel = ch;
}
@@ -477,6 +438,19 @@ inline void rtw_set_oper_choffset(_adapter *adapter, u8 offset)
adapter_to_dvobj(adapter)->oper_ch_offset = offset;
}
+inline u32 rtw_get_on_oper_ch_time(_adapter *adapter)
+{
+ return adapter_to_dvobj(adapter)->on_oper_ch_time;
+}
+
+inline u32 rtw_get_on_cur_ch_time(_adapter *adapter)
+{
+ if (adapter->mlmeextpriv.cur_channel == adapter_to_dvobj(adapter)->oper_channel)
+ return adapter_to_dvobj(adapter)->on_oper_ch_time;
+ else
+ return 0;
+}
+
void SelectChannel(_adapter *padapter, unsigned char channel)
{
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
@@ -707,20 +681,25 @@ static u32 _ReadCAM(_adapter *padapter ,u32 addr)
return rtw_read32(padapter,REG_CAMREAD);
}
+#endif
void read_cam(_adapter *padapter ,u8 entry)
{
- u32 j,count = 0, addr, cmd;
+ u32 j,count = 0, addr;
+ u32 cam_val[2]; //cam_val[0] is read_val, cam_val[1] is the address
addr = entry << 3;
DBG_8192C("********* DUMP CAM Entry_#%02d***************\n",entry);
for (j = 0; j < 6; j++)
{
- cmd = _ReadCAM(padapter ,addr+j);
- DBG_8192C("offset:0x%02x => 0x%08x \n",addr+j,cmd);
+ //cmd = _ReadCAM(padapter ,addr+j);
+ //HW_VAR_CAM_READ
+ cam_val[1]=addr+j;
+ rtw_hal_get_hwreg(padapter, HW_VAR_CAM_READ, (u8 *)cam_val);
+ DBG_8192C("offset:0x%02x => 0x%08x \n",addr+j,cam_val[0]);
}
DBG_8192C("*********************************\n");
}
-#endif
+
void write_cam(_adapter *padapter, u8 entry, u16 ctrl, u8 *mac, u8 *key)
{
@@ -2612,4 +2591,72 @@ int rtw_handle_dualmac(_adapter *adapter, bool init)
exit:
return status;
}
+#ifdef CONFIG_WOWLAN
+void rtw_get_current_ip_address(PADAPTER padapter, u8 *pcurrentip)
+{
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ struct in_device *my_ip_ptr = padapter->pnetdev->ip_ptr;
+ u8 ipaddress[4];
+
+ if ( (pmlmeinfo->state & WIFI_FW_LINKING_STATE) ) {
+ if ( my_ip_ptr != NULL ) {
+ struct in_ifaddr *my_ifa_list = my_ip_ptr->ifa_list ;
+ if ( my_ifa_list != NULL ) {
+ ipaddress[0] = my_ifa_list->ifa_address & 0xFF;
+ ipaddress[1] = (my_ifa_list->ifa_address >> 8) & 0xFF;
+ ipaddress[2] = (my_ifa_list->ifa_address >> 16) & 0xFF;
+ ipaddress[3] = my_ifa_list->ifa_address >> 24;
+ DBG_871X("%s: %d.%d.%d.%d ==========\n", __func__,
+ ipaddress[0], ipaddress[1], ipaddress[2], ipaddress[3]);
+ _rtw_memcpy(pcurrentip, ipaddress, 4);
+ }
+ }
+ }
+}
+void rtw_get_sec_iv(PADAPTER padapter, u8*pcur_dot11txpn, u8 *StaAddr)
+{
+ struct sta_info *psta;
+ struct security_priv *psecpriv = &padapter->securitypriv;
+
+ _rtw_memset(pcur_dot11txpn, 0, 8);
+ if(NULL == StaAddr)
+ return;
+ psta = rtw_get_stainfo(&padapter->stapriv, StaAddr);
+ DBG_871X("%s(): StaAddr: %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n",
+ __func__, StaAddr[0], StaAddr[1], StaAddr[2], StaAddr[3], StaAddr[4], StaAddr[5]);
+ if(psta)
+ {
+ if (psecpriv->dot11PrivacyAlgrthm != _NO_PRIVACY_ && psta->dot11txpn.val > 0)
+ psta->dot11txpn.val--;
+
+ _rtw_memcpy(pcur_dot11txpn, (u8*)&psta->dot11txpn, 8);
+
+ DBG_871X("%s(): CurrentIV: 0x%016llx\n", __func__, psta->dot11txpn.val);
+ }
+}
+void rtw_set_sec_iv(PADAPTER padapter)
+{
+ struct sta_info *psta;
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
+ struct security_priv *psecpriv = &padapter->securitypriv;
+
+ psta = rtw_get_stainfo(&padapter->stapriv, get_my_bssid(&pmlmeinfo->network));
+
+ if(psta)
+ {
+ if (pwrpriv->wowlan_fw_iv > psta->dot11txpn.val)
+ {
+ if (psecpriv->dot11PrivacyAlgrthm != _NO_PRIVACY_)
+ psta->dot11txpn.val = pwrpriv->wowlan_fw_iv + 2;
+ } else {
+ DBG_871X("%s(): FW IV is smaller than driver\n", __func__);
+ psta->dot11txpn.val += 2;
+ }
+ DBG_871X("%s: dot11txpn: 0x%016llx\n", __func__ ,psta->dot11txpn.val);
+ }
+}
+#endif //CONFIG_WOWLAN
diff --git a/drivers/net/wireless/rtl8723as/core/rtw_xmit.c b/drivers/net/wireless/rtl8723as/core/rtw_xmit.c
index 0ba3bce864fb..73043534f56c 100755
--- a/drivers/net/wireless/rtl8723as/core/rtw_xmit.c
+++ b/drivers/net/wireless/rtl8723as/core/rtw_xmit.c
@@ -1960,6 +1960,244 @@ _func_exit_;
return res;
}
+#ifdef CONFIG_IEEE80211W
+//broadcast or multicast management pkt use BIP, unicast management pkt use CCMP encryption
+s32 rtw_mgmt_xmitframe_coalesce(_adapter *padapter, _pkt *pkt, struct xmit_frame *pxmitframe)
+{
+ struct pkt_file pktfile;
+ s32 frg_inx, frg_len, mpdu_len, llc_sz, mem_sz;
+ SIZE_PTR addr;
+ u8 *pframe, *mem_start = NULL, *tmp_buf=NULL;
+ u8 hw_hdr_offset, subtype ;
+ struct sta_info *psta = NULL;
+ struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
+ struct pkt_attrib *pattrib = &pxmitframe->attrib;
+ u8 *pbuf_start;
+ s32 bmcst = IS_MCAST(pattrib->ra);
+ s32 res = _FAIL;
+ u8 *BIP_AAD;
+ u8 *MGMT_body=NULL;
+
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct rtw_ieee80211_hdr *pwlanhdr;
+ u8 MME[_MME_IE_LENGTH_];
+
+ _irqL irqL;
+ u32 ori_len;
+ mem_start = pframe = (u8 *)(pxmitframe->buf_addr) + TXDESC_OFFSET;
+ pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+ tmp_buf = BIP_AAD;
+
+_func_enter_;
+ ori_len = BIP_AAD_SIZE+pattrib->pktlen;
+ tmp_buf = BIP_AAD = rtw_zmalloc(ori_len);
+ subtype = GetFrameSubType(pframe); //bit(7)~bit(2)
+
+ if(BIP_AAD == NULL)
+ return _FAIL;
+
+ _enter_critical_bh(&padapter->security_key_mutex, &irqL);
+
+ //only support station mode
+ if(!check_fwstate(pmlmepriv, WIFI_STATION_STATE) || !check_fwstate(pmlmepriv, _FW_LINKED))
+ goto xmitframe_coalesce_success;
+
+ //IGTK key is not install, it may not support 802.11w
+ if(padapter->securitypriv.binstallBIPkey != _TRUE)
+ {
+ DBG_871X("no instll BIP key\n");
+ goto xmitframe_coalesce_success;
+ }
+ //station mode doesn't need TX BIP, just ready the code
+ if(bmcst)
+ {
+ int frame_body_len;
+ u8 mic[16];
+
+ _rtw_memset(MME, 0, 18);
+
+ //other types doesn't need the BIP
+ if(GetFrameSubType(pframe) != WIFI_DEAUTH && GetFrameSubType(pframe) != WIFI_DISASSOC)
+ goto xmitframe_coalesce_fail;
+
+ MGMT_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
+ pframe += pattrib->pktlen;
+
+ //octent 0 and 1 is key index ,BIP keyid is 4 or 5, LSB only need octent 0
+ MME[0]=padapter->securitypriv.dot11wBIPKeyid;
+ //copy packet number
+ _rtw_memcpy(&MME[2], &pmlmeext->mgnt_80211w_IPN, 6);
+ //increase the packet number
+ pmlmeext->mgnt_80211w_IPN++;
+
+ //add MME IE with MIC all zero, MME string doesn't include element id and length
+ pframe = rtw_set_ie(pframe, _MME_IE_ , 16 , MME, &(pattrib->pktlen));
+ pattrib->last_txcmdsz = pattrib->pktlen;
+ // total frame length - header length
+ frame_body_len = pattrib->pktlen - sizeof(struct rtw_ieee80211_hdr_3addr);
+
+ //conscruct AAD, copy frame control field
+ _rtw_memcpy(BIP_AAD, &pwlanhdr->frame_ctl, 2);
+ ClearRetry(BIP_AAD);
+ ClearPwrMgt(BIP_AAD);
+ ClearMData(BIP_AAD);
+ //conscruct AAD, copy address 1 to address 3
+ _rtw_memcpy(BIP_AAD+2, pwlanhdr->addr1, 18);
+ //copy management fram body
+ _rtw_memcpy(BIP_AAD+BIP_AAD_SIZE, MGMT_body, frame_body_len);
+ /*//dump total packet include MME with zero MIC
+ {
+ int i;
+ printk("Total packet: ");
+ for(i=0; i < BIP_AAD_SIZE+frame_body_len; i++)
+ printk(" %02x ", BIP_AAD[i]);
+ printk("\n");
+ }*/
+ //calculate mic
+ if(omac1_aes_128(padapter->securitypriv.dot11wBIPKey[padapter->securitypriv.dot11wBIPKeyid].skey
+ , BIP_AAD, BIP_AAD_SIZE+frame_body_len, mic))
+ goto xmitframe_coalesce_fail;
+
+ /*//dump calculated mic result
+ {
+ int i;
+ printk("Calculated mic result: ");
+ for(i=0; i<16; i++)
+ printk(" %02x ", mic[i]);
+ printk("\n");
+ }*/
+ //copy right BIP mic value, total is 128bits, we use the 0~63 bits
+ _rtw_memcpy(pframe-8, mic, 8);
+ /*/dump all packet after mic ok
+ {
+ int pp;
+ printk("pattrib->pktlen = %d \n", pattrib->pktlen);
+ for(pp=0;pp< pattrib->pktlen; pp++)
+ printk(" %02x ", mem_start[pp]);
+ printk("\n");
+ }*/
+ }
+ else //unicast mgmt frame TX
+ {
+ //start to encrypt mgmt frame
+ if(subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC ||
+ subtype == WIFI_REASSOCREQ || subtype == WIFI_ACTION)
+ {
+ if (pattrib->psta)
+ psta = pattrib->psta;
+ else
+ {
+ psta = rtw_get_stainfo(&padapter->stapriv, pattrib->ra);
+ }
+
+ if(psta==NULL)
+ {
+
+ DBG_871X("%s, psta==NUL\n", __func__);
+ goto xmitframe_coalesce_fail;
+ }
+
+ if(!(psta->state & _FW_LINKED) || pxmitframe->buf_addr==NULL)
+ {
+ DBG_871X("%s, not _FW_LINKED or addr null\n", __func__);
+ goto xmitframe_coalesce_fail;
+ }
+
+ //DBG_871X("%s, action frame category=%d \n", __func__, pframe[WLAN_HDR_A3_LEN]);
+ //according 802.11-2012 standard, these five types are not robust types
+ if(subtype == WIFI_ACTION &&
+ (pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_PUBLIC ||
+ pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_HT ||
+ pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_UNPROTECTED_WNM ||
+ pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_SELF_PROTECTED ||
+ pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_P2P))
+ goto xmitframe_coalesce_fail;
+ /*//before encrypt dump the management packet content
+ {
+ int i;
+ printk("Management pkt: ");
+ for(i=0; i<pattrib->pktlen; i++)
+ printk(" %02x ", pframe[i]);
+ printk("=======\n");
+ }*/
+
+ //bakeup original management packet
+ _rtw_memcpy(tmp_buf, pframe, pattrib->pktlen);
+ //move to data portion
+ pframe += pattrib->hdrlen;
+
+ //802.11w unicast management packet must be _AES_
+ pattrib->iv_len = 8;
+ //it's MIC of AES
+ pattrib->icv_len = 8;
+
+ switch(pattrib->encrypt)
+ {
+ case _AES_:
+ //set AES IV header
+ AES_IV(pattrib->iv, psta->dot11wtxpn, 0);
+ break;
+ default:
+ goto xmitframe_coalesce_fail;
+ }
+ //insert iv header into management frame
+ _rtw_memcpy(pframe, pattrib->iv, pattrib->iv_len);
+ pframe += pattrib->iv_len;
+ //copy mgmt data portion after CCMP header
+ _rtw_memcpy(pframe, tmp_buf+pattrib->hdrlen, pattrib->pktlen-pattrib->hdrlen);
+ //move pframe to end of mgmt pkt
+ pframe += pattrib->pktlen-pattrib->hdrlen;
+ //add 8 bytes CCMP IV header to length
+ pattrib->pktlen += pattrib->iv_len;
+ /*//dump management packet include AES IV header
+ {
+ int i;
+ printk("Management pkt + IV: ");
+ //for(i=0; i<pattrib->pktlen; i++)
+ //printk(" %02x ", mem_start[i]);
+ printk("@@@@@@@@@@@@@\n");
+ }*/
+
+ if ((pattrib->icv_len >0 )&& (pattrib->bswenc)) {
+ _rtw_memcpy(pframe, pattrib->icv, pattrib->icv_len);
+ pframe += pattrib->icv_len;
+ }
+ //add 8 bytes MIC
+ pattrib->pktlen += pattrib->icv_len;
+ //set final tx command size
+ pattrib->last_txcmdsz = pattrib->pktlen;
+
+ //set protected bit must be beofre SW encrypt
+ SetPrivacy(mem_start);
+ /*//dump management packet include AES header
+ {
+ int i;
+ printk("prepare to enc Management pkt + IV: ");
+ for(i=0; i<pattrib->pktlen; i++)
+ printk(" %02x ", mem_start[i]);
+ printk("@@@@@@@@@@@@@\n");
+ }*/
+ //software encrypt
+ xmitframe_swencrypt(padapter, pxmitframe);
+ }
+ }
+
+xmitframe_coalesce_success:
+ _exit_critical_bh(&padapter->security_key_mutex, &irqL);
+ rtw_mfree(BIP_AAD, ori_len);
+_func_exit_;
+ return _SUCCESS;
+
+xmitframe_coalesce_fail:
+ _exit_critical_bh(&padapter->security_key_mutex, &irqL);
+ rtw_mfree(BIP_AAD, ori_len);
+_func_exit_;
+
+ return _FAIL;
+}
+#endif //CONFIG_IEEE80211W
+
/* Logical Link Control(LLC) SubNetwork Attachment Point(SNAP) header
* IEEE LLC/SNAP header contains 8 octets
* First 3 octets comprise the LLC portion
@@ -2996,14 +3234,14 @@ int rtw_br_client_tx(_adapter *padapter, struct sk_buff **pskb)
*((unsigned short *)(skb->data+MACADDRLEN*2+2)) = vlan_hdr;
}
- newskb = skb_copy(skb, GFP_ATOMIC);
+ newskb = rtw_skb_copy(skb);
if (newskb == NULL) {
//priv->ext_stats.tx_drops++;
- DEBUG_ERR("TX DROP: skb_copy fail!\n");
+ DEBUG_ERR("TX DROP: rtw_skb_copy fail!\n");
//goto stop_proc;
return -1;
}
- dev_kfree_skb_any(skb);
+ rtw_skb_free(skb);
*pskb = skb = newskb;
if (is_vlan_tag) {
@@ -3606,10 +3844,12 @@ void wakeup_sta_to_xmit(_adapter *padapter, struct sta_info *psta)
struct sta_priv *pstapriv = &padapter->stapriv;
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
+ psta_bmc = rtw_get_bcmc_stainfo(padapter);
+
+
//_enter_critical_bh(&psta->sleep_q.lock, &irqL);
_enter_critical_bh(&pxmitpriv->lock, &irqL);
-
xmitframe_phead = get_list_head(&psta->sleep_q);
xmitframe_plist = get_next(xmitframe_phead);
@@ -3678,52 +3918,12 @@ void wakeup_sta_to_xmit(_adapter *padapter, struct sta_info *psta)
}
- if(psta->sleepq_len==0)
- {
-#ifdef CONFIG_TDLS
- if( psta->tdls_sta_state & TDLS_LINKED_STATE )
- {
- if(psta->state&WIFI_SLEEP_STATE)
- psta->state ^= WIFI_SLEEP_STATE;
-
- //_exit_critical_bh(&psta->sleep_q.lock, &irqL);
- _exit_critical_bh(&pxmitpriv->lock, &irqL);
- return;
- }
-#endif //CONFIG_TDLS
- pstapriv->tim_bitmap &= ~BIT(psta->aid);
-
- //DBG_871X("wakeup to xmit, qlen==0, update_BCNTIM, tim=%x\n", pstapriv->tim_bitmap);
- //upate BCN for TIM IE
- //update_BCNTIM(padapter);
- update_mask = BIT(0);
-
- if(psta->state&WIFI_SLEEP_STATE)
- psta->state ^= WIFI_SLEEP_STATE;
-
- if(psta->state & WIFI_STA_ALIVE_CHK_STATE)
- {
- psta->expire_to = pstapriv->expire_to;
- psta->state ^= WIFI_STA_ALIVE_CHK_STATE;
- }
-
- pstapriv->sta_dz_bitmap &= ~BIT(psta->aid);
- }
-
- //_exit_critical_bh(&psta->sleep_q.lock, &irqL);
- _exit_critical_bh(&pxmitpriv->lock, &irqL);
-
-
//for BC/MC Frames
- psta_bmc = rtw_get_bcmc_stainfo(padapter);
if(!psta_bmc)
- return;
+ goto _exit;
if((pstapriv->sta_dz_bitmap&0xfffe) == 0x0)//no any sta in ps mode
{
- //_enter_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
- _enter_critical_bh(&pxmitpriv->lock, &irqL);
-
xmitframe_phead = get_list_head(&psta_bmc->sleep_q);
xmitframe_plist = get_next(xmitframe_phead);
@@ -3767,11 +3967,42 @@ void wakeup_sta_to_xmit(_adapter *padapter, struct sta_info *psta)
update_mask |= BIT(1);
}
- //_exit_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
- _exit_critical_bh(&pxmitpriv->lock, &irqL);
-
}
+ if(psta->sleepq_len==0)
+ {
+#ifdef CONFIG_TDLS
+ if( psta->tdls_sta_state & TDLS_LINKED_STATE )
+ {
+ if(psta->state&WIFI_SLEEP_STATE)
+ psta->state ^= WIFI_SLEEP_STATE;
+
+ goto _exit;
+ }
+#endif //CONFIG_TDLS
+ pstapriv->tim_bitmap &= ~BIT(psta->aid);
+
+ //DBG_871X("wakeup to xmit, qlen==0, update_BCNTIM, tim=%x\n", pstapriv->tim_bitmap);
+ //upate BCN for TIM IE
+ //update_BCNTIM(padapter);
+ update_mask = BIT(0);
+
+ if(psta->state&WIFI_SLEEP_STATE)
+ psta->state ^= WIFI_SLEEP_STATE;
+
+ if(psta->state & WIFI_STA_ALIVE_CHK_STATE)
+ {
+ psta->expire_to = pstapriv->expire_to;
+ psta->state ^= WIFI_STA_ALIVE_CHK_STATE;
+ }
+
+ pstapriv->sta_dz_bitmap &= ~BIT(psta->aid);
+ }
+
+_exit:
+
+ //_exit_critical_bh(&psta_bmc->sleep_q.lock, &irqL);
+ _exit_critical_bh(&pxmitpriv->lock, &irqL);
if(update_mask)
{
@@ -4150,8 +4381,66 @@ int rtw_ack_tx_polling(struct xmit_priv *pxmitpriv, u32 timeout_ms)
}
#endif
+#ifdef CONFIG_DETECT_C2H_BY_POLLING
+s32 c2h_evt_hdl(_adapter *adapter, struct c2h_evt_hdr *c2h_evt, c2h_id_filter filter);
+#endif
+
int rtw_ack_tx_wait(struct xmit_priv *pxmitpriv, u32 timeout_ms)
{
+#ifdef CONFIG_DETECT_C2H_BY_POLLING
+ _adapter *adapter = container_of(pxmitpriv, _adapter, xmitpriv);
+ c2h_id_filter ccx_id_filter = rtw_hal_c2h_id_filter_ccx(adapter);
+ struct submit_ctx *pack_tx_ops = &pxmitpriv->ack_tx_ops;
+ u8 check_c2hcmd;
+ u8 check_ccx;
+ int ret = _FAIL;
+
+ pack_tx_ops->submit_time = rtw_get_current_time();
+ pack_tx_ops->timeout_ms = timeout_ms;
+ pack_tx_ops->status = RTW_SCTX_SUBMITTED;
+
+ do {
+ rtw_msleep_os(10);
+ //check_c2hcmd = rtw_read8(adapter, 0x1AF);
+ //check_ccx = rtw_read8(adapter, 0x1A0);
+ rtw_hal_get_hwreg(adapter, HW_VAR_C2HEVT_CLEAR, (u8 *)(&check_c2hcmd));
+ rtw_hal_get_hwreg(adapter, HW_VAR_C2HEVT_MSG_NORMAL, (u8 *)(&check_ccx));
+
+
+ if (check_c2hcmd != 0)
+ {
+ if (check_c2hcmd != 0xFF)
+ {
+ c2h_evt_clear(adapter);
+ }
+ else if (ccx_id_filter(check_ccx & 0x0F) == _TRUE)
+ {
+ c2h_evt_hdl(adapter, NULL, ccx_id_filter);
+ if (pack_tx_ops->status != RTW_SCTX_SUBMITTED)
+ break;
+
+ if (adapter->bDriverStopped) {
+ pack_tx_ops->status = RTW_SCTX_DONE_DRV_STOP;
+ break;
+ }
+ if (adapter->bSurpriseRemoved) {
+ pack_tx_ops->status = RTW_SCTX_DONE_DEV_REMOVE;
+ break;
+ }
+ }
+ }
+ } while (rtw_get_passing_time_ms(pack_tx_ops->submit_time) < timeout_ms);
+
+ if (pack_tx_ops->status == RTW_SCTX_SUBMITTED) {
+ pack_tx_ops->status = RTW_SCTX_DONE_TIMEOUT;
+ DBG_871X("%s timeout\n", __func__);
+ }
+
+ if (pack_tx_ops->status == RTW_SCTX_DONE_SUCCESS)
+ ret = _SUCCESS;
+
+ return ret;
+#else
#ifdef CONFIG_XMIT_ACK_POLLING
return rtw_ack_tx_polling(pxmitpriv, timeout_ms);
#else
@@ -4163,6 +4452,7 @@ int rtw_ack_tx_wait(struct xmit_priv *pxmitpriv, u32 timeout_ms)
return rtw_sctx_wait(pack_tx_ops);
#endif
+#endif
}
void rtw_ack_tx_done(struct xmit_priv *pxmitpriv, int status)
diff --git a/drivers/net/wireless/rtl8723as/hal/HalPwrSeqCmd.c b/drivers/net/wireless/rtl8723as/hal/HalPwrSeqCmd.c
index 1a7fc94cb49d..2948242cab68 100755
--- a/drivers/net/wireless/rtl8723as/hal/HalPwrSeqCmd.c
+++ b/drivers/net/wireless/rtl8723as/hal/HalPwrSeqCmd.c
@@ -1,187 +1,187 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-/*++
-Copyright (c) Realtek Semiconductor Corp. All rights reserved.
-
-Module Name:
- HalPwrSeqCmd.c
-
-Abstract:
- Implement HW Power sequence configuration CMD handling routine for Realtek devices.
-
-Major Change History:
- When Who What
- ---------- --------------- -------------------------------
- 2011-10-26 Lucas Modify to be compatible with SD4-CE driver.
- 2011-07-07 Roger Create.
-
---*/
-#include <HalPwrSeqCmd.h>
-#ifdef CONFIG_SDIO_HCI
-#include <sdio_ops.h>
-#elif defined(CONFIG_GSPI_HCI)
-#include <gspi_ops.h>
-#endif
-
-//
-// Description:
-// This routine deal with the Power Configuration CMDs parsing for RTL8723/RTL8188E Series IC.
-//
-// Assumption:
-// We should follow specific format which was released from HW SD.
-//
-// 2011.07.07, added by Roger.
-//
-u8 HalPwrSeqCmdParsing(
- PADAPTER padapter,
- u8 CutVersion,
- u8 FabVersion,
- u8 InterfaceType,
- WLAN_PWR_CFG PwrSeqCmd[])
-{
- WLAN_PWR_CFG PwrCfgCmd = {0};
- u8 bPollingBit = _FALSE;
- u32 AryIdx = 0;
- u8 value = 0;
- u32 offset = 0;
- u32 pollingCount = 0; // polling autoload done.
- u32 maxPollingCnt = 5000;
-
- do {
- PwrCfgCmd = PwrSeqCmd[AryIdx];
-
- RT_TRACE(_module_hal_init_c_ , _drv_info_,
- ("HalPwrSeqCmdParsing: offset(%#x) cut_msk(%#x) fab_msk(%#x) interface_msk(%#x) base(%#x) cmd(%#x) msk(%#x) value(%#x)\n",
- GET_PWR_CFG_OFFSET(PwrCfgCmd),
- GET_PWR_CFG_CUT_MASK(PwrCfgCmd),
- GET_PWR_CFG_FAB_MASK(PwrCfgCmd),
- GET_PWR_CFG_INTF_MASK(PwrCfgCmd),
- GET_PWR_CFG_BASE(PwrCfgCmd),
- GET_PWR_CFG_CMD(PwrCfgCmd),
- GET_PWR_CFG_MASK(PwrCfgCmd),
- GET_PWR_CFG_VALUE(PwrCfgCmd)));
-
- //2 Only Handle the command whose FAB, CUT, and Interface are matched
- if ((GET_PWR_CFG_FAB_MASK(PwrCfgCmd) & FabVersion) &&
- (GET_PWR_CFG_CUT_MASK(PwrCfgCmd) & CutVersion) &&
- (GET_PWR_CFG_INTF_MASK(PwrCfgCmd) & InterfaceType))
- {
- switch (GET_PWR_CFG_CMD(PwrCfgCmd))
- {
- case PWR_CMD_READ:
- RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_READ\n"));
- break;
-
- case PWR_CMD_WRITE:
- RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_WRITE\n"));
- offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
-
-#ifdef CONFIG_SDIO_HCI
- //
- // <Roger_Notes> We should deal with interface specific address mapping for some interfaces, e.g., SDIO interface
- // 2011.07.07.
- //
- if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
- {
- // Read Back SDIO Local value
- value = SdioLocalCmd52Read1Byte(padapter, offset);
-
- value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
- value |= (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd));
-
- // Write Back SDIO Local value
- SdioLocalCmd52Write1Byte(padapter, offset, value);
- }
- else
-#endif
- {
-#ifdef CONFIG_GSPI_HCI
- if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
- offset = SPI_LOCAL_OFFSET | offset;
-#endif
- // Read the value from system register
- value = rtw_read8(padapter, offset);
-
- value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
- value |= (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd));
-
- // Write the value back to sytem register
- rtw_write8(padapter, offset, value);
- }
- break;
-
- case PWR_CMD_POLLING:
- RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_POLLING\n"));
-
- bPollingBit = _FALSE;
- offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
-#ifdef CONFIG_GSPI_HCI
- if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
- offset = SPI_LOCAL_OFFSET | offset;
-#endif
- do {
-#ifdef CONFIG_SDIO_HCI
- if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
- value = SdioLocalCmd52Read1Byte(padapter, offset);
- else
-#endif
- value = rtw_read8(padapter, offset);
-
- value &= GET_PWR_CFG_MASK(PwrCfgCmd);
- if (value == (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd)))
- bPollingBit = _TRUE;
- else
- rtw_udelay_os(10);
-
- if (pollingCount++ > maxPollingCnt) {
- DBG_871X("Fail to polling Offset[%#x]\n", offset);
- return _FALSE;
- }
- } while (!bPollingBit);
-
- break;
-
- case PWR_CMD_DELAY:
- RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_DELAY\n"));
- if (GET_PWR_CFG_VALUE(PwrCfgCmd) == PWRSEQ_DELAY_US)
- rtw_udelay_os(GET_PWR_CFG_OFFSET(PwrCfgCmd));
- else
- rtw_udelay_os(GET_PWR_CFG_OFFSET(PwrCfgCmd)*1000);
- break;
-
- case PWR_CMD_END:
- // When this command is parsed, end the process
- RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_END\n"));
- return _TRUE;
- break;
-
- default:
- RT_TRACE(_module_hal_init_c_ , _drv_err_, ("HalPwrSeqCmdParsing: Unknown CMD!!\n"));
- break;
- }
- }
-
- AryIdx++;//Add Array Index
- }while(1);
-
- return _TRUE;
-}
-
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+/*++
+Copyright (c) Realtek Semiconductor Corp. All rights reserved.
+
+Module Name:
+ HalPwrSeqCmd.c
+
+Abstract:
+ Implement HW Power sequence configuration CMD handling routine for Realtek devices.
+
+Major Change History:
+ When Who What
+ ---------- --------------- -------------------------------
+ 2011-10-26 Lucas Modify to be compatible with SD4-CE driver.
+ 2011-07-07 Roger Create.
+
+--*/
+#include <HalPwrSeqCmd.h>
+#ifdef CONFIG_SDIO_HCI
+#include <sdio_ops.h>
+#elif defined(CONFIG_GSPI_HCI)
+#include <gspi_ops.h>
+#endif
+
+//
+// Description:
+// This routine deal with the Power Configuration CMDs parsing for RTL8723/RTL8188E Series IC.
+//
+// Assumption:
+// We should follow specific format which was released from HW SD.
+//
+// 2011.07.07, added by Roger.
+//
+u8 HalPwrSeqCmdParsing(
+ PADAPTER padapter,
+ u8 CutVersion,
+ u8 FabVersion,
+ u8 InterfaceType,
+ WLAN_PWR_CFG PwrSeqCmd[])
+{
+ WLAN_PWR_CFG PwrCfgCmd = {0};
+ u8 bPollingBit = _FALSE;
+ u32 AryIdx = 0;
+ u8 value = 0;
+ u32 offset = 0;
+ u32 pollingCount = 0; // polling autoload done.
+ u32 maxPollingCnt = 5000;
+
+ do {
+ PwrCfgCmd = PwrSeqCmd[AryIdx];
+
+ RT_TRACE(_module_hal_init_c_ , _drv_info_,
+ ("HalPwrSeqCmdParsing: offset(%#x) cut_msk(%#x) fab_msk(%#x) interface_msk(%#x) base(%#x) cmd(%#x) msk(%#x) value(%#x)\n",
+ GET_PWR_CFG_OFFSET(PwrCfgCmd),
+ GET_PWR_CFG_CUT_MASK(PwrCfgCmd),
+ GET_PWR_CFG_FAB_MASK(PwrCfgCmd),
+ GET_PWR_CFG_INTF_MASK(PwrCfgCmd),
+ GET_PWR_CFG_BASE(PwrCfgCmd),
+ GET_PWR_CFG_CMD(PwrCfgCmd),
+ GET_PWR_CFG_MASK(PwrCfgCmd),
+ GET_PWR_CFG_VALUE(PwrCfgCmd)));
+
+ //2 Only Handle the command whose FAB, CUT, and Interface are matched
+ if ((GET_PWR_CFG_FAB_MASK(PwrCfgCmd) & FabVersion) &&
+ (GET_PWR_CFG_CUT_MASK(PwrCfgCmd) & CutVersion) &&
+ (GET_PWR_CFG_INTF_MASK(PwrCfgCmd) & InterfaceType))
+ {
+ switch (GET_PWR_CFG_CMD(PwrCfgCmd))
+ {
+ case PWR_CMD_READ:
+ RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_READ\n"));
+ break;
+
+ case PWR_CMD_WRITE:
+ RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_WRITE\n"));
+ offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
+
+#ifdef CONFIG_SDIO_HCI
+ //
+ // <Roger_Notes> We should deal with interface specific address mapping for some interfaces, e.g., SDIO interface
+ // 2011.07.07.
+ //
+ if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
+ {
+ // Read Back SDIO Local value
+ value = SdioLocalCmd52Read1Byte(padapter, offset);
+
+ value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
+ value |= (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd));
+
+ // Write Back SDIO Local value
+ SdioLocalCmd52Write1Byte(padapter, offset, value);
+ }
+ else
+#endif
+ {
+#ifdef CONFIG_GSPI_HCI
+ if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
+ offset = SPI_LOCAL_OFFSET | offset;
+#endif
+ // Read the value from system register
+ value = rtw_read8(padapter, offset);
+
+ value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
+ value |= (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd));
+
+ // Write the value back to sytem register
+ rtw_write8(padapter, offset, value);
+ }
+ break;
+
+ case PWR_CMD_POLLING:
+ RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_POLLING\n"));
+
+ bPollingBit = _FALSE;
+ offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
+#ifdef CONFIG_GSPI_HCI
+ if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
+ offset = SPI_LOCAL_OFFSET | offset;
+#endif
+ do {
+#ifdef CONFIG_SDIO_HCI
+ if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
+ value = SdioLocalCmd52Read1Byte(padapter, offset);
+ else
+#endif
+ value = rtw_read8(padapter, offset);
+
+ value &= GET_PWR_CFG_MASK(PwrCfgCmd);
+ if (value == (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd)))
+ bPollingBit = _TRUE;
+ else
+ rtw_udelay_os(10);
+
+ if (pollingCount++ > maxPollingCnt) {
+ DBG_871X("Fail to polling Offset[%#x]\n", offset);
+ return _FALSE;
+ }
+ } while (!bPollingBit);
+
+ break;
+
+ case PWR_CMD_DELAY:
+ RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_DELAY\n"));
+ if (GET_PWR_CFG_VALUE(PwrCfgCmd) == PWRSEQ_DELAY_US)
+ rtw_udelay_os(GET_PWR_CFG_OFFSET(PwrCfgCmd));
+ else
+ rtw_udelay_os(GET_PWR_CFG_OFFSET(PwrCfgCmd)*1000);
+ break;
+
+ case PWR_CMD_END:
+ // When this command is parsed, end the process
+ RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_END\n"));
+ return _TRUE;
+ break;
+
+ default:
+ RT_TRACE(_module_hal_init_c_ , _drv_err_, ("HalPwrSeqCmdParsing: Unknown CMD!!\n"));
+ break;
+ }
+ }
+
+ AryIdx++;//Add Array Index
+ }while(1);
+
+ return _TRUE;
+}
+
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm.c
index c28dcdfe241d..a6353905bad0 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm.c
@@ -352,6 +352,16 @@ VOID
odm_1R_CCA(
IN PDM_ODM_T pDM_Odm
);
+VOID
+odm_AdaptivityInit(
+ IN PDM_ODM_T pDM_Odm
+);
+
+VOID
+odm_Adaptivity(
+ IN PDM_ODM_T pDM_Odm,
+ IN u1Byte IGI
+);
//END---------BB POWER SAVE-----------------------//
//START-----------------PSD-----------------------//
@@ -775,6 +785,7 @@ ODM_DMInit(
odm_CommonInfoSelfInit(pDM_Odm);
odm_CmnInfoInit_Debug(pDM_Odm);
odm_DIGInit(pDM_Odm);
+ odm_AdaptivityInit(pDM_Odm);
odm_RateAdaptiveMaskInit(pDM_Odm);
if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
@@ -835,12 +846,11 @@ ODM_DMWatchdog(
//8723A or 8189ES platform
//NeilChen--2012--08--24--
//Fix Leave LPS issue
- if( (pDM_Odm->Adapter->pwrctrlpriv.pwr_mode != PS_MODE_ACTIVE) &&// in LPS mode
+ if( (adapter_to_pwrctl(pDM_Odm->Adapter)->pwr_mode != PS_MODE_ACTIVE) &&// in LPS mode
(
(pDM_Odm->SupportICType & (ODM_RTL8723A ) )||
- (pDM_Odm->SupportICType & (ODM_RTL8188E) &&((pDM_Odm->SupportInterface == ODM_ITRF_SDIO)) )
-
- //&&((pDM_Odm->SupportInterface == ODM_ITRF_SDIO))
+ (pDM_Odm->SupportICType & (ODM_RTL8188E) )//&&((pDM_Odm->SupportInterface == ODM_ITRF_SDIO)) )
+
)
)
{
@@ -860,6 +870,9 @@ ODM_DMWatchdog(
if(*(pDM_Odm->pbPowerSaving)==TRUE)
return;
+
+ odm_Adaptivity(pDM_Odm, pDM_Odm->DM_DigTable.CurIGValue);
+
odm_RefreshRateAdaptiveMask(pDM_Odm);
@@ -992,13 +1005,6 @@ ODM_CmnInfoInit(
}
- //
- // Tx power tracking BB swing table.
- // The base index = 12. +((12-n)/2)dB 13~?? = decrease tx pwr by -((n-12)/2)dB
- //
- pDM_Odm->BbSwingIdxOfdm = 12; // Set defalut value as index 12.
- pDM_Odm->BbSwingIdxOfdmCurrent = 12;
- pDM_Odm->BbSwingFlagOfdm = FALSE;
}
@@ -1744,10 +1750,10 @@ odm_DIGbyRSSI_LPS(
CurrentIGI=CurrentIGI+RSSI_OFFSET_DIG;
#ifdef CONFIG_LPS
- bFwCurrentInPSMode = pAdapter->pwrctrlpriv.bFwCurrentInPSMode;
+ bFwCurrentInPSMode = adapter_to_pwrctl(pAdapter)->bFwCurrentInPSMode;
#endif
- //ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG_LPS, ODM_DBG_LOUD, ("odm_DIG()==>\n"));
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("==>pDM_Odm->RSSI_Min=%d ()\n",pDM_Odm->RSSI_Min));
// Using FW PS mode to make IGI
if(bFwCurrentInPSMode)
@@ -1785,7 +1791,913 @@ odm_DIGbyRSSI_LPS(
}
#endif
+VOID
+odm_AdaptivityInit(
+IN PDM_ODM_T pDM_Odm
+)
+{
+ if(pDM_Odm->SupportICType == ODM_RTL8723B)
+ {
+ pDM_Odm->TH_L2H_ini = 0xf8; // -8
+ }
+ if((pDM_Odm->SupportICType == ODM_RTL8192E)&&(pDM_Odm->SupportInterface == ODM_ITRF_PCIE))
+ {
+ pDM_Odm->TH_L2H_ini = 0xf0; // -16
+ }
+ else
+ {
+ pDM_Odm->TH_L2H_ini = 0xf9; // -7
+ }
+
+ pDM_Odm->TH_EDCCA_HL_diff = 7;
+ pDM_Odm->IGI_Base = 0x32;
+ pDM_Odm->IGI_target = 0x1c;
+ pDM_Odm->ForceEDCCA = 0;
+ pDM_Odm->AdapEn_RSSI = 20;
+
+ //Reg524[11]=0 is easily to transmit packets during adaptivity test
+
+ //ODM_SetBBReg(pDM_Odm, 0x524, BIT11, 1);// stop counting if EDCCA is asserted
+}
+
+
+VOID
+odm_Adaptivity(
+ IN PDM_ODM_T pDM_Odm,
+ IN u1Byte IGI
+)
+{
+ s1Byte TH_L2H_dmc, TH_H2L_dmc;
+ s1Byte TH_L2H, TH_H2L, Diff, IGI_target;
+ u4Byte value32;
+ BOOLEAN EDCCA_State = 0;
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+ PADAPTER pAdapter = pDM_Odm->Adapter;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ BOOLEAN bFwCurrentInPSMode=FALSE;
+ PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo);
+
+ pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_FW_PSMODE_STATUS, (pu1Byte)(&bFwCurrentInPSMode));
+
+ // Disable EDCCA mode while under LPS mode, added by Roger, 2012.09.14.
+ if(bFwCurrentInPSMode)
+ return;
+#endif
+
+ if(!(pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY))
+ {
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("Go to odm_DynamicEDCCA() \n"));
+ // Add by Neil Chen to enable edcca to MP Platform
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+ // Adjust EDCCA.
+ if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
+ odm_DynamicEDCCA(pDM_Odm);
+#endif
+ return;
+ }
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_Adaptivity() =====> \n"));
+
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("ForceEDCCA=%d, IGI_Base=0x%x, TH_L2H_ini = %d, TH_EDCCA_HL_diff = %d, AdapEn_RSSI = %d\n",
+ pDM_Odm->ForceEDCCA, pDM_Odm->IGI_Base, pDM_Odm->TH_L2H_ini, pDM_Odm->TH_EDCCA_HL_diff, pDM_Odm->AdapEn_RSSI));
+
+ if(pDM_Odm->SupportICType & ODM_IC_11AC_SERIES)
+ ODM_SetBBReg(pDM_Odm, 0x800, BIT10, 0); //ADC_mask enable
+
+ if((!pDM_Odm->bLinked)||(*pDM_Odm->pChannel > 149)) // Band4 doesn't need adaptivity
+ {
+ if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
+ {
+ ODM_SetBBReg(pDM_Odm,rOFDM0_ECCAThreshold, bMaskByte0, 0x7f);
+ ODM_SetBBReg(pDM_Odm,rOFDM0_ECCAThreshold, bMaskByte2, 0x7f);
+ }
+ else
+ ODM_SetBBReg(pDM_Odm, rFPGA0_XB_LSSIReadBack, 0xFFFF, (0x7f<<8) | 0x7f);
+ return;
+ }
+
+#if (DM_ODM_SUPPORT_TYPE==ODM_MP)
+ if(pMgntInfo->IOTPeer == HT_IOT_PEER_BROADCOM)
+ ODM_Write1Byte(pDM_Odm, REG_TRX_SIFS_OFDM, 0x0a);
+ else
+ ODM_Write1Byte(pDM_Odm, REG_TRX_SIFS_OFDM, 0x0e);
+#endif
+ if(!pDM_Odm->ForceEDCCA)
+ {
+ if(pDM_Odm->RSSI_Min > pDM_Odm->AdapEn_RSSI)
+ EDCCA_State = 1;
+ else if(pDM_Odm->RSSI_Min < (pDM_Odm->AdapEn_RSSI - 5))
+ EDCCA_State = 0;
+ }
+ else
+ EDCCA_State = 1;
+ //if((pDM_Odm->SupportICType & ODM_IC_11AC_SERIES) && (*pDM_Odm->pBandType == BAND_ON_5G))
+ //IGI_target = pDM_Odm->IGI_Base;
+ //else
+ {
+
+ if(*pDM_Odm->pBandWidth == ODM_BW20M) //CHANNEL_WIDTH_20
+ IGI_target = pDM_Odm->IGI_Base;
+ else if(*pDM_Odm->pBandWidth == ODM_BW40M)
+ IGI_target = pDM_Odm->IGI_Base + 2;
+ else if(*pDM_Odm->pBandWidth == ODM_BW80M)
+ IGI_target = pDM_Odm->IGI_Base + 6;
+ else
+ IGI_target = pDM_Odm->IGI_Base;
+ }
+
+ pDM_Odm->IGI_target = (u1Byte) IGI_target;
+
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("BandWidth=%s, IGI_target=0x%x, EDCCA_State=%d\n",
+ (*pDM_Odm->pBandWidth==ODM_BW80M)?"80M":((*pDM_Odm->pBandWidth==ODM_BW40M)?"40M":"20M"), IGI_target, EDCCA_State));
+
+ if(EDCCA_State == 1)
+ {
+ Diff = IGI_target -(s1Byte)IGI;
+ TH_L2H_dmc = pDM_Odm->TH_L2H_ini + Diff;
+ if(TH_L2H_dmc > 10) TH_L2H_dmc = 10;
+ TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;
+ }
+ else
+ {
+ TH_L2H_dmc = 0x7f;
+ TH_H2L_dmc = 0x7f;
+ }
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("IGI=0x%x, TH_L2H_dmc = %d, TH_H2L_dmc = %d\n",
+ IGI, TH_L2H_dmc, TH_H2L_dmc));
+
+ if(pDM_Odm->SupportICType & ODM_IC_11N_SERIES)
+ {
+ ODM_SetBBReg(pDM_Odm,rOFDM0_ECCAThreshold, bMaskByte0, (u1Byte)TH_L2H_dmc);
+ ODM_SetBBReg(pDM_Odm,rOFDM0_ECCAThreshold, bMaskByte2, (u1Byte)TH_H2L_dmc);
+ }
+ else
+ ODM_SetBBReg(pDM_Odm, rFPGA0_XB_LSSIReadBack, 0xFFFF, ((u1Byte)TH_H2L_dmc<<8) | (u1Byte)TH_L2H_dmc);
+}
+
+#if 1
+VOID
+odm_DIGInit(
+ IN PDM_ODM_T pDM_Odm
+ )
+{
+ pDIG_T pDM_DigTable = &pDM_Odm->DM_DigTable;
+
+ //pDM_DigTable->Dig_Enable_Flag = TRUE;
+ //pDM_DigTable->Dig_Ext_Port_Stage = DIG_EXT_PORT_STAGE_MAX;
+ pDM_DigTable->CurIGValue = (u1Byte) ODM_GetBBReg(pDM_Odm, ODM_REG(IGI_A,pDM_Odm), ODM_BIT(IGI,pDM_Odm));
+ //pDM_DigTable->PreIGValue = 0x0;
+ //pDM_DigTable->CurSTAConnectState = pDM_DigTable->PreSTAConnectState = DIG_STA_DISCONNECT;
+ //pDM_DigTable->CurMultiSTAConnectState = DIG_MultiSTA_DISCONNECT;
+ pDM_DigTable->RssiLowThresh = DM_DIG_THRESH_LOW;
+ pDM_DigTable->RssiHighThresh = DM_DIG_THRESH_HIGH;
+ pDM_DigTable->FALowThresh = DM_FALSEALARM_THRESH_LOW;
+ pDM_DigTable->FAHighThresh = DM_FALSEALARM_THRESH_HIGH;
+ if(pDM_Odm->BoardType & (ODM_BOARD_EXT_PA|ODM_BOARD_EXT_LNA))
+ {
+ pDM_DigTable->rx_gain_range_max = DM_DIG_MAX_NIC;
+ pDM_DigTable->rx_gain_range_min = DM_DIG_MIN_NIC;
+ }
+ else
+ {
+ pDM_DigTable->rx_gain_range_max = DM_DIG_MAX_NIC;
+ pDM_DigTable->rx_gain_range_min = DM_DIG_MIN_NIC;
+ }
+ pDM_DigTable->BackoffVal = DM_DIG_BACKOFF_DEFAULT;
+ pDM_DigTable->BackoffVal_range_max = DM_DIG_BACKOFF_MAX;
+ pDM_DigTable->BackoffVal_range_min = DM_DIG_BACKOFF_MIN;
+ pDM_DigTable->PreCCK_CCAThres = 0xFF;
+ pDM_DigTable->CurCCK_CCAThres = 0x83;
+ pDM_DigTable->ForbiddenIGI = DM_DIG_MIN_NIC;
+ pDM_DigTable->LargeFAHit = 0;
+ pDM_DigTable->Recover_cnt = 0;
+ pDM_DigTable->DIG_Dynamic_MIN_0 = DM_DIG_MIN_NIC;
+ pDM_DigTable->DIG_Dynamic_MIN_1 = DM_DIG_MIN_NIC;
+ pDM_DigTable->bMediaConnect_0 = FALSE;
+ pDM_DigTable->bMediaConnect_1 = FALSE;
+
+ //To Initialize pDM_Odm->bDMInitialGainEnable == FALSE to avoid DIG error
+ pDM_Odm->bDMInitialGainEnable = TRUE;
+
+ //To Initi BT30 IGI
+ pDM_DigTable->BT30_CurIGI=0x32;
+
+}
+
+VOID
+odm_DigForBtHsMode(
+ IN PDM_ODM_T pDM_Odm
+ )
+{
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+ pDIG_T pDM_DigTable=&pDM_Odm->DM_DigTable;
+ u1Byte digForBtHs=0;
+ u1Byte digUpBound=0x5a;
+
+ if(pDM_Odm->bBtConnectProcess)
+ {
+ if(pDM_Odm->SupportICType&(ODM_RTL8723A))
+ digForBtHs = 0x28;
+ else
+ digForBtHs = 0x22;
+ }
+ else
+ {
+ //
+ // Decide DIG value by BT HS RSSI.
+ //
+ digForBtHs = pDM_Odm->btHsRssi+4;
+
+ //DIG Bound
+ if(pDM_Odm->SupportICType&(ODM_RTL8723A))
+ digUpBound = 0x3e;
+
+ if(digForBtHs > digUpBound)
+ digForBtHs = digUpBound;
+ if(digForBtHs < 0x1c)
+ digForBtHs = 0x1c;
+
+ // update Current IGI
+ pDM_DigTable->BT30_CurIGI = digForBtHs;
+ }
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DigForBtHsMode() : set DigValue=0x%x\n", digForBtHs));
+#endif
+}
+
+VOID
+odm_DIG(
+ IN PDM_ODM_T pDM_Odm
+ )
+{
+ pDIG_T pDM_DigTable = &pDM_Odm->DM_DigTable;
+ PFALSE_ALARM_STATISTICS pFalseAlmCnt = &pDM_Odm->FalseAlmCnt;
+ pRXHP_T pRX_HP_Table = &pDM_Odm->DM_RXHP_Table;
+ u1Byte DIG_Dynamic_MIN;
+ u1Byte DIG_MaxOfMin;
+ BOOLEAN FirstConnect, FirstDisConnect;
+ u1Byte dm_dig_max, dm_dig_min, offset;
+ u1Byte CurrentIGI = pDM_DigTable->CurIGValue;
+ u1Byte Adap_IGI_Upper = pDM_Odm->IGI_target + 30 + (u1Byte) pDM_Odm->TH_L2H_ini -(u1Byte) pDM_Odm->TH_EDCCA_HL_diff;
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+// This should be moved out of OUTSRC
+ PADAPTER pAdapter = pDM_Odm->Adapter;
+#if OS_WIN_FROM_WIN7(OS_VERSION)
+ if(IsAPModeExist( pAdapter) && pAdapter->bInHctTest)
+ {
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: Is AP mode or In HCT Test \n"));
+ return;
+ }
+#endif
+/*
+ if (pDM_Odm->SupportICType==ODM_RTL8723B)
+ return;
+*/
+#if(BT_30_SUPPORT == 1)
+ if(pDM_Odm->bBtHsOperation)
+ {
+ odm_DigForBtHsMode(pDM_Odm);
+ }
+#endif
+ if(!(pDM_Odm->SupportICType &(ODM_RTL8723A|ODM_RTL8188E)))
+ {
+ if(pRX_HP_Table->RXHP_flag == 1)
+ {
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: In RXHP Operation \n"));
+ return;
+ }
+ }
+#endif
+#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
+#ifdef CONFIG_SPECIAL_SETTING_FOR_FUNAI_TV
+ if((pDM_Odm->bLinked) && (pDM_Odm->Adapter->registrypriv.force_igi !=0))
+ {
+ printk("pDM_Odm->RSSI_Min=%d \n",pDM_Odm->RSSI_Min);
+ ODM_Write_DIG(pDM_Odm,pDM_Odm->Adapter->registrypriv.force_igi);
+ return;
+ }
+#endif
+#endif
+#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ prtl8192cd_priv priv = pDM_Odm->priv;
+ if (!((priv->up_time > 5) && (priv->up_time % 2)) )
+ {
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: Not In DIG Operation Period \n"));
+ return;
+ }
+#endif
+
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG()==>\n"));
+ //if(!(pDM_Odm->SupportAbility & (ODM_BB_DIG|ODM_BB_FA_CNT)))
+ if((!(pDM_Odm->SupportAbility&ODM_BB_DIG)) ||(!(pDM_Odm->SupportAbility&ODM_BB_FA_CNT)))
+ {
+#if 0
+ if(pDM_Odm->SupportPlatform & (ODM_AP|ODM_ADSL))
+ {
+ if ((pDM_Odm->SupportICType == ODM_RTL8192C) && (pDM_Odm->ExtLNA == 1))
+ CurrentIGI = 0x30; //pDM_DigTable->CurIGValue = 0x30;
+ else
+ CurrentIGI = 0x20; //pDM_DigTable->CurIGValue = 0x20;
+ ODM_Write_DIG(pDM_Odm, CurrentIGI);//ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue);
+ }
+#endif
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: SupportAbility ODM_BB_DIG or ODM_BB_FA_CNT is disabled\n"));
+ return;
+ }
+
+ if(*(pDM_Odm->pbScanInProcess))
+ {
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: In Scan Progress \n"));
+ return;
+ }
+
+ //add by Neil Chen to avoid PSD is processing
+ if(pDM_Odm->SupportICType==ODM_RTL8723A)
+ {
+ if(pDM_Odm->bDMInitialGainEnable == FALSE)
+ {
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: PSD is Processing \n"));
+ return;
+ }
+ }
+
+ if(pDM_Odm->SupportICType == ODM_RTL8192D)
+ {
+ if(*(pDM_Odm->pMacPhyMode) == ODM_DMSP)
+ {
+ if(*(pDM_Odm->pbMasterOfDMSP))
+ {
+ DIG_Dynamic_MIN = pDM_DigTable->DIG_Dynamic_MIN_0;
+ FirstConnect = (pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == FALSE);
+ FirstDisConnect = (!pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == TRUE);
+ }
+ else
+ {
+ DIG_Dynamic_MIN = pDM_DigTable->DIG_Dynamic_MIN_1;
+ FirstConnect = (pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_1 == FALSE);
+ FirstDisConnect = (!pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_1 == TRUE);
+ }
+ }
+ else
+ {
+ if(*(pDM_Odm->pBandType) == ODM_BAND_5G)
+ {
+ DIG_Dynamic_MIN = pDM_DigTable->DIG_Dynamic_MIN_0;
+ FirstConnect = (pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == FALSE);
+ FirstDisConnect = (!pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == TRUE);
+ }
+ else
+ {
+ DIG_Dynamic_MIN = pDM_DigTable->DIG_Dynamic_MIN_1;
+ FirstConnect = (pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_1 == FALSE);
+ FirstDisConnect = (!pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_1 == TRUE);
+ }
+ }
+ }
+ else
+ {
+ DIG_Dynamic_MIN = pDM_DigTable->DIG_Dynamic_MIN_0;
+ FirstConnect = (pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == FALSE);
+ FirstDisConnect = (!pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0 == TRUE);
+ }
+
+ //1 Boundary Decision
+ if(pDM_Odm->SupportICType & (ODM_RTL8192C) &&(pDM_Odm->BoardType & (ODM_BOARD_EXT_LNA | ODM_BOARD_EXT_PA)))
+ {
+ if(pDM_Odm->SupportPlatform & (ODM_AP|ODM_ADSL))
+ {
+
+ dm_dig_max = DM_DIG_MAX_AP_HP;
+ dm_dig_min = DM_DIG_MIN_AP_HP;
+ }
+ else
+ {
+ dm_dig_max = DM_DIG_MAX_NIC_HP;
+ dm_dig_min = DM_DIG_MIN_NIC_HP;
+ }
+ DIG_MaxOfMin = DM_DIG_MAX_AP_HP;
+ }
+ else
+ {
+ if(pDM_Odm->SupportPlatform & (ODM_AP|ODM_ADSL))
+ {
+#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+#ifdef DFS
+ if (!priv->pmib->dot11DFSEntry.disable_DFS &&
+ (OPMODE & WIFI_AP_STATE) &&
+ (((pDM_Odm->ControlChannel >= 52) &&
+ (pDM_Odm->ControlChannel <= 64)) ||
+ ((pDM_Odm->ControlChannel >= 100) &&
+ (pDM_Odm->ControlChannel <= 140))))
+ dm_dig_max = 0x24;
+ else
+#endif
+ if (priv->pmib->dot11RFEntry.tx2path) {
+ if (*(pDM_Odm->pWirelessMode) == ODM_WM_B)//(priv->pmib->dot11BssType.net_work_type == WIRELESS_11B)
+ dm_dig_max = 0x2A;
+ else
+ dm_dig_max = 0x32;
+ }
+ else
+#endif
+ dm_dig_max = DM_DIG_MAX_AP;
+ dm_dig_min = DM_DIG_MIN_AP;
+ DIG_MaxOfMin = dm_dig_max;
+ }
+ else
+ {
+ if((pDM_Odm->SupportICType >= ODM_RTL8188E) && (pDM_Odm->SupportPlatform & (ODM_MP|ODM_CE)))
+ dm_dig_max = 0x5A;
+ else
+ dm_dig_max = DM_DIG_MAX_NIC;
+
+ if(pDM_Odm->SupportICType != ODM_RTL8821)
+ dm_dig_min = DM_DIG_MIN_NIC;
+ else
+ dm_dig_min = 0x1C;
+
+ DIG_MaxOfMin = DM_DIG_MAX_AP;
+ }
+ }
+
+
+ if(pDM_Odm->bLinked)
+ {
+ if(pDM_Odm->SupportICType&(ODM_RTL8723A/*|ODM_RTL8821*/))
+ {
+ //2 Upper Bound
+ if(( pDM_Odm->RSSI_Min + 10) > DM_DIG_MAX_NIC )
+ pDM_DigTable->rx_gain_range_max = DM_DIG_MAX_NIC;
+ else if(( pDM_Odm->RSSI_Min + 10) < DM_DIG_MIN_NIC )
+ pDM_DigTable->rx_gain_range_max = DM_DIG_MIN_NIC;
+ else
+ pDM_DigTable->rx_gain_range_max = pDM_Odm->RSSI_Min + 10;
+
+ //BT is Concurrent
+
+ if(pDM_Odm->bBtLimitedDig)
+ {
+ if(pDM_Odm->RSSI_Min>10)
+ {
+ if((pDM_Odm->RSSI_Min - 10) > DM_DIG_MAX_NIC)
+ DIG_Dynamic_MIN = DM_DIG_MAX_NIC;
+ else if((pDM_Odm->RSSI_Min - 10) < DM_DIG_MIN_NIC)
+ DIG_Dynamic_MIN = DM_DIG_MIN_NIC;
+ else
+ DIG_Dynamic_MIN = pDM_Odm->RSSI_Min - 10;
+ }
+ else
+ DIG_Dynamic_MIN=DM_DIG_MIN_NIC;
+ }
+ else
+ {
+ if((pDM_Odm->RSSI_Min + 20) > dm_dig_max )
+ pDM_DigTable->rx_gain_range_max = dm_dig_max;
+ else if((pDM_Odm->RSSI_Min + 20) < dm_dig_min )
+ pDM_DigTable->rx_gain_range_max = dm_dig_min;
+ else
+ pDM_DigTable->rx_gain_range_max = pDM_Odm->RSSI_Min + 20;
+
+ }
+ }
+ else
+ {
+ if((pDM_Odm->SupportICType & (ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8812|ODM_RTL8821)) && (pDM_Odm->bBtLimitedDig==1)){
+ //2 Modify DIG upper bound for 92E, 8723B, 8821 & 8812 BT
+ if((pDM_Odm->RSSI_Min + 10) > dm_dig_max )
+ pDM_DigTable->rx_gain_range_max = dm_dig_max;
+ else if((pDM_Odm->RSSI_Min + 10) < dm_dig_min )
+ pDM_DigTable->rx_gain_range_max = dm_dig_min;
+ else
+ pDM_DigTable->rx_gain_range_max = pDM_Odm->RSSI_Min + 10;
+ }
+ else{
+
+ //2 Modify DIG upper bound
+ //2013.03.19 Luke: Modified upper bound for Netgear rental house test
+ if(pDM_Odm->SupportICType != ODM_RTL8821)
+ offset = 20;
+ else
+ offset = 10;
+
+ if((pDM_Odm->RSSI_Min + offset) > dm_dig_max )
+ pDM_DigTable->rx_gain_range_max = dm_dig_max;
+ else if((pDM_Odm->RSSI_Min + offset) < dm_dig_min )
+ pDM_DigTable->rx_gain_range_max = dm_dig_min;
+ else
+ pDM_DigTable->rx_gain_range_max = pDM_Odm->RSSI_Min + offset;
+
+ }
+
+ //2 Modify DIG lower bound
+ /*
+ if((pFalseAlmCnt->Cnt_all > 500)&&(DIG_Dynamic_MIN < 0x25))
+ DIG_Dynamic_MIN++;
+ else if(((pFalseAlmCnt->Cnt_all < 500)||(pDM_Odm->RSSI_Min < 8))&&(DIG_Dynamic_MIN > dm_dig_min))
+ DIG_Dynamic_MIN--;
+ */
+
+
+ //1 Lower Bound for 88E AntDiv
+#if (RTL8188E_SUPPORT == 1)
+ if((pDM_Odm->SupportICType == ODM_RTL8188E)&&(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV))
+ {
+ if((pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV) ||(pDM_Odm->AntDivType == CGCS_RX_HW_ANTDIV))
+ {
+ DIG_Dynamic_MIN = (u1Byte) pDM_DigTable->AntDiv_RSSI_max;
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("odm_DIG(): pDM_DigTable->AntDiv_RSSI_max=%d \n",pDM_DigTable->AntDiv_RSSI_max));
+ }
+ }
+ else
+#endif
+ {
+ if(pDM_Odm->SupportICType != ODM_RTL8723B)
+ offset = 0;
+ else
+ offset = 12;
+
+ if(pDM_Odm->RSSI_Min - offset < dm_dig_min)
+ DIG_Dynamic_MIN = dm_dig_min;
+ else if (pDM_Odm->RSSI_Min - offset > DIG_MaxOfMin)
+ DIG_Dynamic_MIN = DIG_MaxOfMin;
+ else
+ DIG_Dynamic_MIN = pDM_Odm->RSSI_Min - offset;
+
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() : bOneEntryOnly=TRUE, DIG_Dynamic_MIN=0x%x\n",DIG_Dynamic_MIN));
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() : pDM_Odm->RSSI_Min=%d\n",pDM_Odm->RSSI_Min));
+ }
+
+
+ }
+ }
+ else
+ {
+ pDM_DigTable->rx_gain_range_max = dm_dig_max;
+ DIG_Dynamic_MIN = dm_dig_min;
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() : No Link\n"));
+ }
+
+ //1 Modify DIG lower bound, deal with abnorally large false alarm
+ if(pFalseAlmCnt->Cnt_all > 10000)
+ {
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("dm_DIG(): Abnornally false alarm case. \n"));
+
+ if(pDM_DigTable->LargeFAHit != 3)
+ pDM_DigTable->LargeFAHit++;
+ if(pDM_DigTable->ForbiddenIGI < CurrentIGI)//if(pDM_DigTable->ForbiddenIGI < pDM_DigTable->CurIGValue)
+ {
+ pDM_DigTable->ForbiddenIGI = (u1Byte)CurrentIGI;//pDM_DigTable->ForbiddenIGI = pDM_DigTable->CurIGValue;
+ pDM_DigTable->LargeFAHit = 1;
+ }
+
+ if(pDM_DigTable->LargeFAHit >= 3)
+ {
+ if((pDM_DigTable->ForbiddenIGI+1) >pDM_DigTable->rx_gain_range_max)
+ pDM_DigTable->rx_gain_range_min = pDM_DigTable->rx_gain_range_max;
+ else
+ pDM_DigTable->rx_gain_range_min = (pDM_DigTable->ForbiddenIGI + 1);
+ pDM_DigTable->Recover_cnt = 3600; //3600=2hr
+ }
+
+ }
+ else
+ {
+ //Recovery mechanism for IGI lower bound
+ if(pDM_DigTable->Recover_cnt != 0)
+ pDM_DigTable->Recover_cnt --;
+ else
+ {
+ if(pDM_DigTable->LargeFAHit < 3)
+ {
+ if((pDM_DigTable->ForbiddenIGI -1) < DIG_Dynamic_MIN) //DM_DIG_MIN)
+ {
+ pDM_DigTable->ForbiddenIGI = DIG_Dynamic_MIN; //DM_DIG_MIN;
+ pDM_DigTable->rx_gain_range_min = DIG_Dynamic_MIN; //DM_DIG_MIN;
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Normal Case: At Lower Bound\n"));
+ }
+ else
+ {
+ pDM_DigTable->ForbiddenIGI --;
+ pDM_DigTable->rx_gain_range_min = (pDM_DigTable->ForbiddenIGI + 1);
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Normal Case: Approach Lower Bound\n"));
+ }
+ }
+ else
+ {
+ pDM_DigTable->LargeFAHit = 0;
+ }
+ }
+ }
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): pDM_DigTable->LargeFAHit=%d\n",pDM_DigTable->LargeFAHit));
+
+ if((pDM_Odm->SupportPlatform&(ODM_MP|ODM_CE))&&(pDM_Odm->PhyDbgInfo.NumQryBeaconPkt < 10))
+ pDM_DigTable->rx_gain_range_min = dm_dig_min;
+
+ if(pDM_DigTable->rx_gain_range_min > pDM_DigTable->rx_gain_range_max)
+ pDM_DigTable->rx_gain_range_min = pDM_DigTable->rx_gain_range_max;
+
+ //1 Adjust initial gain by false alarm
+ if(pDM_Odm->bLinked)
+ {
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): DIG AfterLink\n"));
+ if(FirstConnect)
+ {
+ if(pDM_Odm->RSSI_Min <= DIG_MaxOfMin)
+ CurrentIGI = pDM_Odm->RSSI_Min;
+ else
+ CurrentIGI = DIG_MaxOfMin;
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("DIG: First Connect\n"));
+
+ //ODM_ConfigBBWithHeaderFile(pDM_Odm, CONFIG_BB_AGC_TAB_DIFF);
+ }
+ else
+ {
+ if(pDM_Odm->SupportICType == ODM_RTL8192D)
+ {
+ if(pFalseAlmCnt->Cnt_all > DM_DIG_FA_TH2_92D)
+ CurrentIGI = CurrentIGI + 4;//pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+2;
+ else if (pFalseAlmCnt->Cnt_all > DM_DIG_FA_TH1_92D)
+ CurrentIGI = CurrentIGI + 2; //pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+1;
+ else if(pFalseAlmCnt->Cnt_all < DM_DIG_FA_TH0_92D)
+ CurrentIGI = CurrentIGI - 2;//pDM_DigTable->CurIGValue =pDM_DigTable->PreIGValue-1;
+ }
+ else
+ {
+ //FA for Combo IC--NeilChen--2012--09--28
+ if(pDM_Odm->SupportICType == ODM_RTL8723A)
+ {
+ //WLAN and BT ConCurrent
+ if(pDM_Odm->bBtLimitedDig)
+ {
+ if(pFalseAlmCnt->Cnt_all > 0x300)
+ CurrentIGI = CurrentIGI + 4;
+ else if (pFalseAlmCnt->Cnt_all > 0x250)
+ CurrentIGI = CurrentIGI + 2;
+ else if(pFalseAlmCnt->Cnt_all < DM_DIG_FA_TH0)
+ CurrentIGI = CurrentIGI -2;
+ }
+ else //Not Concurrent
+ {
+ if(pFalseAlmCnt->Cnt_all > DM_DIG_FA_TH2)
+ CurrentIGI = CurrentIGI + 4;//pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+2;
+ else if (pFalseAlmCnt->Cnt_all > DM_DIG_FA_TH1)
+ CurrentIGI = CurrentIGI + 2;//pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+1;
+ else if(pFalseAlmCnt->Cnt_all < DM_DIG_FA_TH0)
+ CurrentIGI = CurrentIGI - 2;//pDM_DigTable->CurIGValue =pDM_DigTable->PreIGValue-1;
+ }
+ }
+ else
+ {
+ if(pFalseAlmCnt->Cnt_all > DM_DIG_FA_TH2)
+ CurrentIGI = CurrentIGI + 4;//pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+2;
+ else if (pFalseAlmCnt->Cnt_all > DM_DIG_FA_TH1)
+ CurrentIGI = CurrentIGI + 2;//pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+1;
+ else if(pFalseAlmCnt->Cnt_all < DM_DIG_FA_TH0)
+ CurrentIGI = CurrentIGI - 2;//pDM_DigTable->CurIGValue =pDM_DigTable->PreIGValue-1;
+
+ if((pDM_Odm->SupportPlatform&(ODM_MP|ODM_CE))&&(pDM_Odm->PhyDbgInfo.NumQryBeaconPkt < 10)
+ &&(pFalseAlmCnt->Cnt_all < DM_DIG_FA_TH1))
+ {
+ CurrentIGI = pDM_DigTable->rx_gain_range_min;
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): Beacon is less than 10 and FA is less than 768, IGI GOES TO 0x1E!!!!!!!!!!!!\n"));
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ //CurrentIGI = pDM_DigTable->rx_gain_range_min;//pDM_DigTable->CurIGValue = pDM_DigTable->rx_gain_range_min
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): DIG BeforeLink\n"));
+ if(FirstDisConnect)
+ {
+ CurrentIGI = pDM_DigTable->rx_gain_range_min;
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): First DisConnect \n"));
+ }
+ else
+ {
+ //2012.03.30 LukeLee: enable DIG before link but with very high thresholds
+ if(pFalseAlmCnt->Cnt_all > 10000)
+ CurrentIGI = CurrentIGI + 4;
+ else if (pFalseAlmCnt->Cnt_all > 8000)
+ CurrentIGI = CurrentIGI + 2;
+ else if(pFalseAlmCnt->Cnt_all < 500)
+ CurrentIGI = CurrentIGI - 2;
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): England DIG \n"));
+ }
+ }
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): DIG End Adjust IGI\n"));
+ //1 Check initial gain by upper/lower bound
+
+ if(CurrentIGI > pDM_DigTable->rx_gain_range_max)
+ CurrentIGI = pDM_DigTable->rx_gain_range_max;
+ if(CurrentIGI < pDM_DigTable->rx_gain_range_min)
+ CurrentIGI = pDM_DigTable->rx_gain_range_min;
+
+ if(pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY)
+ {
+ if(CurrentIGI > Adap_IGI_Upper)
+ CurrentIGI = Adap_IGI_Upper;
+
+ if(CurrentIGI > (pDM_Odm->IGI_target + 4))
+ CurrentIGI = (u1Byte)pDM_Odm->IGI_target + 4;
+ }
+
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): rx_gain_range_max=0x%x, rx_gain_range_min=0x%x\n",
+ pDM_DigTable->rx_gain_range_max, pDM_DigTable->rx_gain_range_min));
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): TotalFA=%d\n", pFalseAlmCnt->Cnt_all));
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): CurIGValue=0x%x\n", CurrentIGI));
+
+ //2 High power RSSI threshold
+#if (DM_ODM_SUPPORT_TYPE & ODM_MP)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pDM_Odm->Adapter);
+ //PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo);
+ // for LC issue to dymanic modify DIG lower bound----------LC Mocca Issue
+ u8Byte curTxOkCnt=0, curRxOkCnt=0;
+ static u8Byte lastTxOkCnt=0, lastRxOkCnt=0;
+
+ //u8Byte OKCntAll=0;
+ //static u8Byte TXByteCnt_A=0, TXByteCnt_B=0, RXByteCnt_A=0, RXByteCnt_B=0;
+ //u8Byte CurByteCnt=0, PreByteCnt=0;
+
+ curTxOkCnt = pAdapter->TxStats.NumTxBytesUnicast - lastTxOkCnt;
+ curRxOkCnt =pAdapter->RxStats.NumRxBytesUnicast - lastRxOkCnt;
+ lastTxOkCnt = pAdapter->TxStats.NumTxBytesUnicast;
+ lastRxOkCnt = pAdapter->RxStats.NumRxBytesUnicast;
+ //----------------------------------------------------------end for LC Mocca issue
+ if((pDM_Odm->SupportICType == ODM_RTL8723A)&& (pHalData->UndecoratedSmoothedPWDB > DM_DIG_HIGH_PWR_THRESHOLD))
+ {
+ // High power IGI lower bound
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): UndecoratedSmoothedPWDB(%#x)\n", pHalData->UndecoratedSmoothedPWDB));
+ if(CurrentIGI < DM_DIG_HIGH_PWR_IGI_LOWER_BOUND)
+ {
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): CurIGValue(%#x)\n", pDM_DigTable->CurIGValue));
+ //pDM_DigTable->CurIGValue = DM_DIG_HIGH_PWR_IGI_LOWER_BOUND;
+ CurrentIGI=DM_DIG_HIGH_PWR_IGI_LOWER_BOUND;
+ }
+ }
+ if((pDM_Odm->SupportICType & ODM_RTL8723A) &&
+ IS_WIRELESS_MODE_G(pAdapter))
+ {
+ if(pHalData->UndecoratedSmoothedPWDB > 0x28)
+ {
+ if(CurrentIGI < DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND)
+ {
+ //pDM_DigTable->CurIGValue = DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND;
+ CurrentIGI = DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND;
+ }
+ }
+ }
+#if 0
+ if((pDM_Odm->SupportICType & ODM_RTL8723A)&&(pMgntInfo->CustomerID = RT_CID_LENOVO_CHINA))
+ {
+ OKCntAll = (curTxOkCnt+curRxOkCnt);
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): CurIGValue(%#x)\n", CurrentIGI));
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): UndecoratedSmoothedPWDB(%#x)\n", pHalData->UndecoratedSmoothedPWDB));
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG(): OKCntAll(%#x)\n", OKCntAll));
+ //8723AS_VAU
+ if(pDM_Odm->SupportInterface==ODM_ITRF_USB)
+ {
+ if(pHalData->UndecoratedSmoothedPWDB < 12)
+ {
+ if(CurrentIGI > DM_DIG_MIN_NIC)
+ {
+ if(OKCntAll >= 1500000) // >=6Mbps
+ CurrentIGI=0x1B;
+ else if(OKCntAll >= 1000000) //4Mbps
+ CurrentIGI=0x1A;
+ else if(OKCntAll >= 500000) //2Mbps
+ CurrentIGI=0x19;
+ else if(OKCntAll >= 250000) //1Mbps
+ CurrentIGI=0x18;
+ else
+ {
+ CurrentIGI=0x17; //SCAN mode
+ }
+ }
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("Modify---->CurIGValue(%#x)\n", CurrentIGI));
+ }
+ }
+ }
+#endif
+}
+#endif
+
+#if (RTL8192D_SUPPORT==1)
+ if(pDM_Odm->SupportICType == ODM_RTL8192D)
+ {
+ //sherry delete DualMacSmartConncurrent 20110517
+ if(*(pDM_Odm->pMacPhyMode) == ODM_DMSP)
+ {
+ ODM_Write_DIG_DMSP(pDM_Odm, (u1Byte)CurrentIGI);//ODM_Write_DIG_DMSP(pDM_Odm, pDM_DigTable->CurIGValue);
+ if(*(pDM_Odm->pbMasterOfDMSP))
+ {
+ pDM_DigTable->bMediaConnect_0 = pDM_Odm->bLinked;
+ pDM_DigTable->DIG_Dynamic_MIN_0 = DIG_Dynamic_MIN;
+ }
+ else
+ {
+ pDM_DigTable->bMediaConnect_1 = pDM_Odm->bLinked;
+ pDM_DigTable->DIG_Dynamic_MIN_1 = DIG_Dynamic_MIN;
+ }
+ }
+ else
+ {
+ ODM_Write_DIG(pDM_Odm, CurrentIGI);//ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue);
+ if(*(pDM_Odm->pBandType) == ODM_BAND_5G)
+ {
+ pDM_DigTable->bMediaConnect_0 = pDM_Odm->bLinked;
+ pDM_DigTable->DIG_Dynamic_MIN_0 = DIG_Dynamic_MIN;
+ }
+ else
+ {
+ pDM_DigTable->bMediaConnect_1 = pDM_Odm->bLinked;
+ pDM_DigTable->DIG_Dynamic_MIN_1 = DIG_Dynamic_MIN;
+ }
+ }
+ }
+ else
+#endif
+ {
+ #if(BT_30_SUPPORT == 1)
+ if(pDM_Odm->bBtHsOperation)
+ {
+ if(pDM_Odm->bLinked)
+ {
+ if(pDM_DigTable->BT30_CurIGI > (CurrentIGI))
+ {
+ ODM_Write_DIG(pDM_Odm, CurrentIGI);
+
+ }
+ else
+ {
+ ODM_Write_DIG(pDM_Odm, pDM_DigTable->BT30_CurIGI);
+ }
+ pDM_DigTable->bMediaConnect_0 = pDM_Odm->bLinked;
+ pDM_DigTable->DIG_Dynamic_MIN_0 = DIG_Dynamic_MIN;
+ }
+ else
+ {
+ if(pDM_Odm->bLinkInProcess)
+ {
+ ODM_Write_DIG(pDM_Odm, 0x1c);
+ }
+ else if(pDM_Odm->bBtConnectProcess)
+ {
+ ODM_Write_DIG(pDM_Odm, 0x28);
+ }
+ else
+ {
+ ODM_Write_DIG(pDM_Odm, pDM_DigTable->BT30_CurIGI);//ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue);
+ }
+ }
+ }
+ else // BT is not using
+ #endif
+ {
+ ODM_Write_DIG(pDM_Odm, CurrentIGI);//ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue);
+ pDM_DigTable->bMediaConnect_0 = pDM_Odm->bLinked;
+ pDM_DigTable->DIG_Dynamic_MIN_0 = DIG_Dynamic_MIN;
+ }
+ }
+}
+
+
+BOOLEAN
+odm_DigAbort(
+ IN PDM_ODM_T pDM_Odm
+ )
+{
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+// This should be moved out of OUTSRC
+ PADAPTER pAdapter = pDM_Odm->Adapter;
+ pRXHP_T pRX_HP_Table = &pDM_Odm->DM_RXHP_Table;
+
+#if OS_WIN_FROM_WIN7(OS_VERSION)
+ if(IsAPModeExist( pAdapter) && pAdapter->bInHctTest)
+ {
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: Is AP mode or In HCT Test \n"));
+ return TRUE;
+ }
+#endif
+
+ if(pRX_HP_Table->RXHP_flag == 1)
+ {
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG() Return: In RXHP Operation \n"));
+ return TRUE;
+ }
+
+ return FALSE;
+#else // For Other team any special case for DIG?
+ return FALSE;
+#endif
+
+
+}
+
+#else
VOID
odm_DIGInit(
IN PDM_ODM_T pDM_Odm
@@ -1803,7 +2715,7 @@ odm_DIGInit(
pDM_DigTable->RssiHighThresh = DM_DIG_THRESH_HIGH;
pDM_DigTable->FALowThresh = DM_FALSEALARM_THRESH_LOW;
pDM_DigTable->FAHighThresh = DM_FALSEALARM_THRESH_HIGH;
- if(pDM_Odm->BoardType == ODM_BOARD_HIGHPWR)
+ if(pDM_Odm->BoardType & (ODM_BOARD_EXT_LNA | ODM_BOARD_EXT_PA))
{
pDM_DigTable->rx_gain_range_max = DM_DIG_MAX_NIC;
pDM_DigTable->rx_gain_range_min = DM_DIG_MIN_NIC;
@@ -1964,7 +2876,7 @@ odm_DIG(
//1 Boundary Decision
if((pDM_Odm->SupportICType & (ODM_RTL8192C|ODM_RTL8723A)) &&
- ((pDM_Odm->BoardType == ODM_BOARD_HIGHPWR) || pDM_Odm->ExtLNA))
+ ((if(pDM_Odm->BoardType & (ODM_BOARD_EXT_LNA | ODM_BOARD_EXT_PA))) || pDM_Odm->ExtLNA))
{
if(pDM_Odm->SupportPlatform & (ODM_AP|ODM_ADSL))
{
@@ -2328,7 +3240,7 @@ odm_DIG(
}
}
-
+#endif
//3============================================================
//3 FASLE ALARM CHECK
//3============================================================
@@ -2851,7 +3763,8 @@ u4Byte ODM_Get_Rate_Bitmap(
else
rate_bitmap = 0x00000ff5;
break;
-
+
+ case (ODM_WM_G|ODM_WM_N24G) :
case (ODM_WM_B|ODM_WM_G|ODM_WM_N24G) :
case (ODM_WM_A|ODM_WM_B|ODM_WM_G|ODM_WM_N24G) :
{
@@ -3100,6 +4013,8 @@ odm_RefreshRateAdaptiveMaskCE(
for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++){
PSTA_INFO_T pstat = pDM_Odm->pODM_StaInfo[i];
if(IS_STA_VALID(pstat) ) {
+ if(IS_MCAST( pstat->hwaddr)) //if(psta->mac_id ==1)
+ continue;
if( TRUE == ODM_RAStateCheck(pDM_Odm, pstat->rssi_stat.UndecoratedSmoothedPWDB, FALSE , &pstat->rssi_level) )
{
ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI:%d, RSSI_LEVEL:%d\n", pstat->rssi_stat.UndecoratedSmoothedPWDB, pstat->rssi_level));
@@ -4258,9 +5173,13 @@ odm_RSSIMonitorCheckCE(
#if 1
struct sta_info *psta;
- for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++) {
+ for(i=0; i<ODM_ASSOCIATE_ENTRY_NUM; i++) {
+
if (IS_STA_VALID(psta = pDM_Odm->pODM_StaInfo[i]))
{
+ if(IS_MCAST( psta->hwaddr)) //if(psta->mac_id ==1)
+ continue;
+
if(psta->rssi_stat.UndecoratedSmoothedPWDB < tmpEntryMinPWDB)
tmpEntryMinPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;
@@ -4377,8 +5296,8 @@ odm_RSSIMonitorCheckCE(
#if(RTL8192D_SUPPORT==1)
FindMinimumRSSI_Dmsp(Adapter);
#endif
-
- ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_RSSI_MIN, pdmpriv->MinUndecoratedPWDBForDM);
+ pDM_Odm->RSSI_Min = pdmpriv->MinUndecoratedPWDBForDM;
+ //ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_RSSI_MIN, pdmpriv->MinUndecoratedPWDBForDM);
#endif//if (DM_ODM_SUPPORT_TYPE == ODM_CE)
}
VOID
@@ -4583,7 +5502,22 @@ odm_TXPowerTrackingThermalMeterInit(
#endif
#endif
- pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = TRUE;
+ pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = TRUE;
+ pDM_Odm->RFCalibrateInfo.DeltaPowerIndex = 0;
+ pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast = 0;
+ pDM_Odm->RFCalibrateInfo.PowerIndexOffset = 0;
+ pDM_Odm->RFCalibrateInfo.ThermalValue = 0;
+ pDM_Odm->DefaultOfdmIndex = 12;
+ pDM_Odm->DefaultCckIndex = 12;
+ pDM_Odm->BbSwingIdxOfdmBase = pDM_Odm->DefaultOfdmIndex;
+ pDM_Odm->BbSwingIdxCckBase = pDM_Odm->DefaultCckIndex;
+ pDM_Odm->BbSwingIdxOfdm = pDM_Odm->DefaultOfdmIndex;
+ pDM_Odm->BbSwingIdxCck = pDM_Odm->DefaultCckIndex;
+
+ pDM_Odm->RFCalibrateInfo.CCK_index = pDM_Odm->DefaultCckIndex;
+ pDM_Odm->RFCalibrateInfo.OFDM_index[RF_PATH_A] = pDM_Odm->DefaultOfdmIndex;
+ pDM_Odm->RFCalibrateInfo.OFDM_index[RF_PATH_B] = pDM_Odm->DefaultOfdmIndex;
+
}
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm.h
index 84d288065b24..4ceb6afbfdd0 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm.h
@@ -1,1985 +1,2061 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-
-#ifndef __HALDMOUTSRC_H__
-#define __HALDMOUTSRC_H__
-
-//============================================================
-// Definition
-//============================================================
-//
-// 2011/09/22 MH Define all team supprt ability.
-//
-
-//
-// 2011/09/22 MH Define for all teams. Please Define the constan in your precomp header.
-//
-//#define DM_ODM_SUPPORT_AP 0
-//#define DM_ODM_SUPPORT_ADSL 0
-//#define DM_ODM_SUPPORT_CE 0
-//#define DM_ODM_SUPPORT_MP 1
-
-//
-// 2011/09/28 MH Define ODM SW team support flag.
-//
-
-
-
-//
-// Antenna Switch Relative Definition.
-//
-
-//
-// 20100503 Joseph:
-// Add new function SwAntDivCheck8192C().
-// This is the main function of Antenna diversity function before link.
-// Mainly, it just retains last scan result and scan again.
-// After that, it compares the scan result to see which one gets better RSSI.
-// It selects antenna with better receiving power and returns better scan result.
-//
-#define TP_MODE 0
-#define RSSI_MODE 1
-#define TRAFFIC_LOW 0
-#define TRAFFIC_HIGH 1
-
-
-//============================================================
-//3 Tx Power Tracking
-//3============================================================
-#define DPK_DELTA_MAPPING_NUM 13
-#define index_mapping_HP_NUM 15
-
-
-//============================================================
-//3 PSD Handler
-//3============================================================
-
-#define AFH_PSD 1 //0:normal PSD scan, 1: only do 20 pts PSD
-#define MODE_40M 0 //0:20M, 1:40M
-#define PSD_TH2 3
-#define PSD_CHMIN 20 // Minimum channel number for BT AFH
-#define SIR_STEP_SIZE 3
-#define Smooth_Size_1 5
-#define Smooth_TH_1 3
-#define Smooth_Size_2 10
-#define Smooth_TH_2 4
-#define Smooth_Size_3 20
-#define Smooth_TH_3 4
-#define Smooth_Step_Size 5
-#define Adaptive_SIR 1
-#if(RTL8723_FPGA_VERIFICATION == 1)
-#define PSD_RESCAN 1
-#else
-#define PSD_RESCAN 4
-#endif
-#define PSD_SCAN_INTERVAL 700 //ms
-
-
-
-//8723A High Power IGI Setting
-#define DM_DIG_HIGH_PWR_IGI_LOWER_BOUND 0x22
-#define DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND 0x28
-#define DM_DIG_HIGH_PWR_THRESHOLD 0x3a
-
-// LPS define
-#define DM_DIG_FA_TH0_LPS 4 //-> 4 in lps
-#define DM_DIG_FA_TH1_LPS 15 //-> 15 lps
-#define DM_DIG_FA_TH2_LPS 30 //-> 30 lps
-#define RSSI_OFFSET_DIG 0x05;
-
-//ANT Test
-#define ANTTESTALL 0x00 //Ant A or B will be Testing
-#define ANTTESTA 0x01 //Ant A will be Testing
-#define ANTTESTB 0x02 //Ant B will be testing
-
-
-//============================================================
-// structure and define
-//============================================================
-
-//
-// 2011/09/20 MH Add for AP/ADSLpseudo DM structuer requirement.
-// We need to remove to other position???
-//
-#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
-typedef struct rtl8192cd_priv {
- u1Byte temp;
-
-}rtl8192cd_priv, *prtl8192cd_priv;
-#endif
-
-
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-typedef struct _ADAPTER{
- u1Byte temp;
- #ifdef AP_BUILD_WORKAROUND
- HAL_DATA_TYPE* temp2;
- prtl8192cd_priv priv;
- #endif
-}ADAPTER, *PADAPTER;
-#endif
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
-
-typedef struct _WLAN_STA{
- u1Byte temp;
-} WLAN_STA, *PRT_WLAN_STA;
-
-#endif
-
-typedef struct _Dynamic_Initial_Gain_Threshold_
-{
- u1Byte Dig_Enable_Flag;
- u1Byte Dig_Ext_Port_Stage;
-
- int RssiLowThresh;
- int RssiHighThresh;
-
- u4Byte FALowThresh;
- u4Byte FAHighThresh;
-
- u1Byte CurSTAConnectState;
- u1Byte PreSTAConnectState;
- u1Byte CurMultiSTAConnectState;
-
- u1Byte PreIGValue;
- u1Byte CurIGValue;
- u1Byte BackupIGValue;
-
- s1Byte BackoffVal;
- s1Byte BackoffVal_range_max;
- s1Byte BackoffVal_range_min;
- u1Byte rx_gain_range_max;
- u1Byte rx_gain_range_min;
- u1Byte Rssi_val_min;
-
- u1Byte PreCCK_CCAThres;
- u1Byte CurCCK_CCAThres;
- u1Byte PreCCKPDState;
- u1Byte CurCCKPDState;
-
- u1Byte LargeFAHit;
- u1Byte ForbiddenIGI;
- u4Byte Recover_cnt;
-
- u1Byte DIG_Dynamic_MIN_0;
- u1Byte DIG_Dynamic_MIN_1;
- BOOLEAN bMediaConnect_0;
- BOOLEAN bMediaConnect_1;
-
- u4Byte AntDiv_RSSI_max;
- u4Byte RSSI_max;
-}DIG_T,*pDIG_T;
-
-typedef struct _Dynamic_Power_Saving_
-{
- u1Byte PreCCAState;
- u1Byte CurCCAState;
-
- u1Byte PreRFState;
- u1Byte CurRFState;
-
- int Rssi_val_min;
-
- u1Byte initialize;
- u4Byte Reg874,RegC70,Reg85C,RegA74;
-
-}PS_T,*pPS_T;
-
-typedef struct _FALSE_ALARM_STATISTICS{
- u4Byte Cnt_Parity_Fail;
- u4Byte Cnt_Rate_Illegal;
- u4Byte Cnt_Crc8_fail;
- u4Byte Cnt_Mcs_fail;
- u4Byte Cnt_Ofdm_fail;
- u4Byte Cnt_Cck_fail;
- u4Byte Cnt_all;
- u4Byte Cnt_Fast_Fsync;
- u4Byte Cnt_SB_Search_fail;
- u4Byte Cnt_OFDM_CCA;
- u4Byte Cnt_CCK_CCA;
- u4Byte Cnt_CCA_all;
- u4Byte Cnt_BW_USC; //Gary
- u4Byte Cnt_BW_LSC; //Gary
-}FALSE_ALARM_STATISTICS, *PFALSE_ALARM_STATISTICS;
-
-typedef struct _Dynamic_Primary_CCA{
- u1Byte PriCCA_flag;
- u1Byte intf_flag;
- u1Byte intf_type;
- u1Byte DupRTS_flag;
- u1Byte Monitor_flag;
-}Pri_CCA_T, *pPri_CCA_T;
-
-typedef struct _RX_High_Power_
-{
- u1Byte RXHP_flag;
- u1Byte PSD_func_trigger;
- u1Byte PSD_bitmap_RXHP[80];
- u1Byte Pre_IGI;
- u1Byte Cur_IGI;
- u1Byte Pre_pw_th;
- u1Byte Cur_pw_th;
- BOOLEAN First_time_enter;
- BOOLEAN RXHP_enable;
- u1Byte TP_Mode;
- RT_TIMER PSDTimer;
-#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
- #if USE_WORKITEM
- RT_WORK_ITEM PSDTimeWorkitem;
- #endif
-#endif
-
-}RXHP_T, *pRXHP_T;
-
-#if(DM_ODM_SUPPORT_TYPE & (ODM_CE))
-#define ASSOCIATE_ENTRY_NUM 32 // Max size of AsocEntry[].
-#define ODM_ASSOCIATE_ENTRY_NUM ASSOCIATE_ENTRY_NUM
-
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-#define ASSOCIATE_ENTRY_NUM NUM_STAT
-#define ODM_ASSOCIATE_ENTRY_NUM ASSOCIATE_ENTRY_NUM+1
-
-#else
-//
-// 2012/01/12 MH Revise for compatiable with other SW team.
-// 0 is for STA 1-n is for AP clients.
-//
-#define ODM_ASSOCIATE_ENTRY_NUM ASSOCIATE_ENTRY_NUM+1// Default port only one
-#endif
-
-//#ifdef CONFIG_ANTENNA_DIVERSITY
-// This indicates two different the steps.
-// In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air.
-// In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK
-// with original RSSI to determine if it is necessary to switch antenna.
-#define SWAW_STEP_PEAK 0
-#define SWAW_STEP_DETERMINE 1
-
-#define TP_MODE 0
-#define RSSI_MODE 1
-#define TRAFFIC_LOW 0
-#define TRAFFIC_HIGH 1
-
-typedef struct _SW_Antenna_Switch_
-{
- u1Byte try_flag;
- s4Byte PreRSSI;
- u1Byte CurAntenna;
- u1Byte PreAntenna;
- u1Byte RSSI_Trying;
- u1Byte TestMode;
- u1Byte bTriggerAntennaSwitch;
- u1Byte SelectAntennaMap;
- u1Byte RSSI_target;
-
- // Before link Antenna Switch check
- u1Byte SWAS_NoLink_State;
- u4Byte SWAS_NoLink_BK_Reg860;
- BOOLEAN ANTA_ON; //To indicate Ant A is or not
- BOOLEAN ANTB_ON; //To indicate Ant B is on or not
-
- s4Byte RSSI_sum_A;
- s4Byte RSSI_sum_B;
- s4Byte RSSI_cnt_A;
- s4Byte RSSI_cnt_B;
-
- u8Byte lastTxOkCnt;
- u8Byte lastRxOkCnt;
- u8Byte TXByteCnt_A;
- u8Byte TXByteCnt_B;
- u8Byte RXByteCnt_A;
- u8Byte RXByteCnt_B;
- u1Byte TrafficLoad;
- RT_TIMER SwAntennaSwitchTimer;
-#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
- #if USE_WORKITEM
- RT_WORK_ITEM SwAntennaSwitchWorkitem;
- #endif
-#endif
-/* CE Platform use
-#ifdef CONFIG_SW_ANTENNA_DIVERSITY
- _timer SwAntennaSwitchTimer;
- u8Byte lastTxOkCnt;
- u8Byte lastRxOkCnt;
- u8Byte TXByteCnt_A;
- u8Byte TXByteCnt_B;
- u8Byte RXByteCnt_A;
- u8Byte RXByteCnt_B;
- u1Byte DoubleComfirm;
- u1Byte TrafficLoad;
- //SW Antenna Switch
-
-
-#endif
-*/
-#ifdef CONFIG_HW_ANTENNA_DIVERSITY
- //Hybrid Antenna Diversity
- u4Byte CCK_Ant1_Cnt[ASSOCIATE_ENTRY_NUM];
- u4Byte CCK_Ant2_Cnt[ASSOCIATE_ENTRY_NUM];
- u4Byte OFDM_Ant1_Cnt[ASSOCIATE_ENTRY_NUM];
- u4Byte OFDM_Ant2_Cnt[ASSOCIATE_ENTRY_NUM];
- u4Byte RSSI_Ant1_Sum[ASSOCIATE_ENTRY_NUM];
- u4Byte RSSI_Ant2_Sum[ASSOCIATE_ENTRY_NUM];
- u1Byte TxAnt[ASSOCIATE_ENTRY_NUM];
- u1Byte TargetSTA;
- u1Byte antsel;
- u1Byte RxIdleAnt;
-
-#endif
-
-}SWAT_T, *pSWAT_T;
-//#endif
-
-typedef struct _EDCA_TURBO_
-{
- BOOLEAN bCurrentTurboEDCA;
- BOOLEAN bIsCurRDLState;
- #if(DM_ODM_SUPPORT_TYPE == ODM_CE )
- u4Byte prv_traffic_idx; // edca turbo
- #endif
-
-}EDCA_T,*pEDCA_T;
-
-typedef struct _ODM_RATE_ADAPTIVE
-{
- u1Byte Type; // DM_Type_ByFW/DM_Type_ByDriver
- u1Byte HighRSSIThresh; // if RSSI > HighRSSIThresh => RATRState is DM_RATR_STA_HIGH
- u1Byte LowRSSIThresh; // if RSSI <= LowRSSIThresh => RATRState is DM_RATR_STA_LOW
- u1Byte RATRState; // Current RSSI level, DM_RATR_STA_HIGH/DM_RATR_STA_MIDDLE/DM_RATR_STA_LOW
- u4Byte LastRATR; // RATR Register Content
-
-} ODM_RATE_ADAPTIVE, *PODM_RATE_ADAPTIVE;
-
-
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-
-#ifdef ADSL_AP_BUILD_WORKAROUND
-#define MAX_TOLERANCE 5
-#define IQK_DELAY_TIME 1 //ms
-#endif
-
-//
-// Indicate different AP vendor for IOT issue.
-//
-typedef enum _HT_IOT_PEER
-{
- HT_IOT_PEER_UNKNOWN = 0,
- HT_IOT_PEER_REALTEK = 1,
- HT_IOT_PEER_REALTEK_92SE = 2,
- HT_IOT_PEER_BROADCOM = 3,
- HT_IOT_PEER_RALINK = 4,
- HT_IOT_PEER_ATHEROS = 5,
- HT_IOT_PEER_CISCO = 6,
- HT_IOT_PEER_MERU = 7,
- HT_IOT_PEER_MARVELL = 8,
- HT_IOT_PEER_REALTEK_SOFTAP = 9,// peer is RealTek SOFT_AP, by Bohn, 2009.12.17
- HT_IOT_PEER_SELF_SOFTAP = 10, // Self is SoftAP
- HT_IOT_PEER_AIRGO = 11,
- HT_IOT_PEER_INTEL = 12,
- HT_IOT_PEER_RTK_APCLIENT = 13,
- HT_IOT_PEER_REALTEK_81XX = 14,
- HT_IOT_PEER_REALTEK_WOW = 15,
- HT_IOT_PEER_MAX = 16
-}HT_IOT_PEER_E, *PHTIOT_PEER_E;
-#endif//#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-
-
-#define IQK_MAC_REG_NUM 4
-#define IQK_ADDA_REG_NUM 16
-#define IQK_BB_REG_NUM_MAX 10
-#if (RTL8192D_SUPPORT==1)
-#define IQK_BB_REG_NUM 10
-#else
-#define IQK_BB_REG_NUM 9
-#endif
-#define HP_THERMAL_NUM 8
-
-#define AVG_THERMAL_NUM 8
-#define IQK_Matrix_REG_NUM 8
-#define IQK_Matrix_Settings_NUM 1+24+21
-
-#define DM_Type_ByFW 0
-#define DM_Type_ByDriver 1
-
-//
-// Declare for common info
-//
-// Declare for common info
-//
-#define MAX_PATH_NUM_92CS 2
-
-typedef struct _ODM_Phy_Status_Info_
-{
- u1Byte RxPWDBAll;
- u1Byte SignalQuality; // in 0-100 index.
- u1Byte RxMIMOSignalQuality[MAX_PATH_NUM_92CS]; //EVM
- u1Byte RxMIMOSignalStrength[MAX_PATH_NUM_92CS];// in 0~100 index
-#if (DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_CE))
- s1Byte RxPower; // in dBm Translate from PWdB
- s1Byte RecvSignalPower;// Real power in dBm for this packet, no beautification and aggregation. Keep this raw info to be used for the other procedures.
- u1Byte BTRxRSSIPercentage;
- u1Byte SignalStrength; // in 0-100 index.
- u1Byte RxPwr[MAX_PATH_NUM_92CS];//per-path's pwdb
-#endif
- u1Byte RxSNR[MAX_PATH_NUM_92CS];//per-path's SNR
-}ODM_PHY_INFO_T,*PODM_PHY_INFO_T;
-
-
-typedef struct _ODM_Phy_Dbg_Info_
-{
- //ODM Write,debug info
- s1Byte RxSNRdB[MAX_PATH_NUM_92CS];
- u8Byte NumQryPhyStatus;
- u8Byte NumQryPhyStatusCCK;
- u8Byte NumQryPhyStatusOFDM;
- //Others
- s4Byte RxEVM[MAX_PATH_NUM_92CS];
-
-}ODM_PHY_DBG_INFO_T;
-
-typedef struct _ODM_Per_Pkt_Info_
-{
- u1Byte Rate;
- u1Byte StationID;
- BOOLEAN bPacketMatchBSSID;
- BOOLEAN bPacketToSelf;
- BOOLEAN bPacketBeacon;
-}ODM_PACKET_INFO_T,*PODM_PACKET_INFO_T;
-
-typedef struct _ODM_Mac_Status_Info_
-{
- u1Byte test;
-
-}ODM_MAC_INFO;
-
-
-typedef enum tag_Dynamic_ODM_Support_Ability_Type
-{
- // BB Team
- ODM_DIG = 0x00000001,
- ODM_HIGH_POWER = 0x00000002,
- ODM_CCK_CCA_TH = 0x00000004,
- ODM_FA_STATISTICS = 0x00000008,
- ODM_RAMASK = 0x00000010,
- ODM_RSSI_MONITOR = 0x00000020,
- ODM_SW_ANTDIV = 0x00000040,
- ODM_HW_ANTDIV = 0x00000080,
- ODM_BB_PWRSV = 0x00000100,
- ODM_2TPATHDIV = 0x00000200,
- ODM_1TPATHDIV = 0x00000400,
- ODM_PSD2AFH = 0x00000800
-}ODM_Ability_E;
-
-//
-// 2011/20/20 MH For MP driver RT_WLAN_STA = STA_INFO_T
-// Please declare below ODM relative info in your STA info structure.
-//
-#if 1
-typedef struct _ODM_STA_INFO{
- // Driver Write
- BOOLEAN bUsed; // record the sta status link or not?
- //u1Byte WirelessMode; //
- u1Byte IOTPeer; // Enum value. HT_IOT_PEER_E
-
- // ODM Write
- //1 PHY_STATUS_INFO
- u1Byte RSSI_Path[4]; //
- u1Byte RSSI_Ave;
- u1Byte RXEVM[4];
- u1Byte RXSNR[4];
-
- // ODM Write
- //1 TX_INFO (may changed by IC)
- //TX_INFO_T pTxInfo; // Define in IC folder. Move lower layer.
-#if 0
- u1Byte ANTSEL_A; //in Jagar: 4bit; others: 2bit
- u1Byte ANTSEL_B; //in Jagar: 4bit; others: 2bit
- u1Byte ANTSEL_C; //only in Jagar: 4bit
- u1Byte ANTSEL_D; //only in Jagar: 4bit
- u1Byte TX_ANTL; //not in Jagar: 2bit
- u1Byte TX_ANT_HT; //not in Jagar: 2bit
- u1Byte TX_ANT_CCK; //not in Jagar: 2bit
- u1Byte TXAGC_A; //not in Jagar: 4bit
- u1Byte TXAGC_B; //not in Jagar: 4bit
- u1Byte TXPWR_OFFSET; //only in Jagar: 3bit
- u1Byte TX_ANT; //only in Jagar: 4bit for TX_ANTL/TX_ANTHT/TX_ANT_CCK
-#endif
-
- //
- // Please use compile flag to disabe the strcutrue for other IC except 88E.
- // Move To lower layer.
- //
- // ODM Write Wilson will handle this part(said by Luke.Lee)
- //TX_RPT_T pTxRpt; // Define in IC folder. Move lower layer.
-#if 0
- //1 For 88E RA (don't redefine the naming)
- u1Byte rate_id;
- u1Byte rate_SGI;
- u1Byte rssi_sta_ra;
- u1Byte SGI_enable;
- u1Byte Decision_rate;
- u1Byte Pre_rate;
- u1Byte Active;
-
- // Driver write Wilson handle.
- //1 TX_RPT (don't redefine the naming)
- u2Byte RTY[4]; // ???
- u2Byte TOTAL; // ???
- u2Byte DROP; // ???
- //
- // Please use compile flag to disabe the strcutrue for other IC except 88E.
- //
-#endif
-
-}ODM_STA_INFO_T, *PODM_STA_INFO_T;
-#endif
-
-//
-// 2011/10/20 MH Define Common info enum for all team.
-//
-typedef enum _ODM_Common_Info_Definition
-{
-//-------------REMOVED CASE-----------//
- //ODM_CMNINFO_CCK_HP,
- //ODM_CMNINFO_RFPATH_ENABLE, // Define as ODM write???
- //ODM_CMNINFO_BT_COEXIST, // ODM_BT_COEXIST_E
- //ODM_CMNINFO_OP_MODE, // ODM_OPERATION_MODE_E
-//-------------REMOVED CASE-----------//
-
- //
- // Fixed value:
- //
-
- //-----------HOOK BEFORE REG INIT-----------//
- ODM_CMNINFO_PLATFORM = 0,
- ODM_CMNINFO_ABILITY, // ODM_ABILITY_E
- ODM_CMNINFO_INTERFACE, // ODM_INTERFACE_E
- ODM_CMNINFO_MP_TEST_CHIP,
- ODM_CMNINFO_IC_TYPE, // ODM_IC_TYPE_E
- ODM_CMNINFO_CUT_VER, // ODM_CUT_VERSION_E
- ODM_CMNINFO_FAB_VER, // ODM_FAB_E
- ODM_CMNINFO_RF_TYPE, // ODM_RF_PATH_E or ODM_RF_TYPE_E?
- ODM_CMNINFO_BOARD_TYPE, // ODM_BOARD_TYPE_E
- ODM_CMNINFO_EXT_LNA, // TRUE
- ODM_CMNINFO_EXT_PA,
- ODM_CMNINFO_EXT_TRSW,
- ODM_CMNINFO_PATCH_ID, //CUSTOMER ID
- ODM_CMNINFO_BINHCT_TEST,
- ODM_CMNINFO_BWIFI_TEST,
- ODM_CMNINFO_SMART_CONCURRENT,
- //-----------HOOK BEFORE REG INIT-----------//
-
-
- //
- // Dynamic value:
- //
-//--------- POINTER REFERENCE-----------//
- ODM_CMNINFO_MAC_PHY_MODE, // ODM_MAC_PHY_MODE_E
- ODM_CMNINFO_TX_UNI,
- ODM_CMNINFO_RX_UNI,
- ODM_CMNINFO_WM_MODE, // ODM_WIRELESS_MODE_E
- ODM_CMNINFO_BAND, // ODM_BAND_TYPE_E
- ODM_CMNINFO_SEC_CHNL_OFFSET, // ODM_SEC_CHNL_OFFSET_E
- ODM_CMNINFO_SEC_MODE, // ODM_SECURITY_E
- ODM_CMNINFO_BW, // ODM_BW_E
- ODM_CMNINFO_CHNL,
-
- ODM_CMNINFO_DMSP_GET_VALUE,
- ODM_CMNINFO_BUDDY_ADAPTOR,
- ODM_CMNINFO_DMSP_IS_MASTER,
- ODM_CMNINFO_SCAN,
- ODM_CMNINFO_POWER_SAVING,
- ODM_CMNINFO_ONE_PATH_CCA, // ODM_CCA_PATH_E
- ODM_CMNINFO_DRV_STOP,
- ODM_CMNINFO_PNP_IN,
- ODM_CMNINFO_INIT_ON,
- ODM_CMNINFO_ANT_TEST,
- ODM_CMNINFO_NET_CLOSED,
- ODM_CMNINFO_MP_MODE,
-//--------- POINTER REFERENCE-----------//
-
-//------------CALL BY VALUE-------------//
- ODM_CMNINFO_WIFI_DIRECT,
- ODM_CMNINFO_WIFI_DISPLAY,
- ODM_CMNINFO_LINK,
- ODM_CMNINFO_RSSI_MIN,
- ODM_CMNINFO_DBG_COMP, // u8Byte
- ODM_CMNINFO_DBG_LEVEL, // u4Byte
- ODM_CMNINFO_RA_THRESHOLD_HIGH, // u1Byte
- ODM_CMNINFO_RA_THRESHOLD_LOW, // u1Byte
- ODM_CMNINFO_RF_ANTENNA_TYPE, // u1Byte
- ODM_CMNINFO_BT_DISABLED,
- ODM_CMNINFO_BT_OPERATION,
- ODM_CMNINFO_BT_DIG,
- ODM_CMNINFO_BT_BUSY, //Check Bt is using or not//neil
- ODM_CMNINFO_BT_DISABLE_EDCA,
-//------------CALL BY VALUE-------------//
-
- //
- // Dynamic ptr array hook itms.
- //
- ODM_CMNINFO_STA_STATUS,
- ODM_CMNINFO_PHY_STATUS,
- ODM_CMNINFO_MAC_STATUS,
-
- ODM_CMNINFO_MAX,
-
-
-}ODM_CMNINFO_E;
-
-//
-// 2011/10/20 MH Define ODM support ability. ODM_CMNINFO_ABILITY
-//
-typedef enum _ODM_Support_Ability_Definition
-{
- //
- // BB ODM section BIT 0-15
- //
- ODM_BB_DIG = BIT0,
- ODM_BB_RA_MASK = BIT1,
- ODM_BB_DYNAMIC_TXPWR = BIT2,
- ODM_BB_FA_CNT = BIT3,
- ODM_BB_RSSI_MONITOR = BIT4,
- ODM_BB_CCK_PD = BIT5,
- ODM_BB_ANT_DIV = BIT6,
- ODM_BB_PWR_SAVE = BIT7,
- ODM_BB_PWR_TRAIN = BIT8,
- ODM_BB_RATE_ADAPTIVE = BIT9,
- ODM_BB_PATH_DIV = BIT10,
- ODM_BB_PSD = BIT11,
- ODM_BB_RXHP = BIT12,
-
- //
- // MAC DM section BIT 16-23
- //
- ODM_MAC_EDCA_TURBO = BIT16,
- ODM_MAC_EARLY_MODE = BIT17,
-
- //
- // RF ODM section BIT 24-31
- //
- ODM_RF_TX_PWR_TRACK = BIT24,
- ODM_RF_RX_GAIN_TRACK = BIT25,
- ODM_RF_CALIBRATION = BIT26,
-
-}ODM_ABILITY_E;
-
-// ODM_CMNINFO_INTERFACE
-typedef enum tag_ODM_Support_Interface_Definition
-{
- ODM_ITRF_PCIE = 0x1,
- ODM_ITRF_USB = 0x2,
- ODM_ITRF_SDIO = 0x4,
- ODM_ITRF_ALL = 0x7,
-}ODM_INTERFACE_E;
-
-// ODM_CMNINFO_IC_TYPE
-typedef enum tag_ODM_Support_IC_Type_Definition
-{
- ODM_RTL8192S = BIT0,
- ODM_RTL8192C = BIT1,
- ODM_RTL8192D = BIT2,
- ODM_RTL8723A = BIT3,
- ODM_RTL8188E = BIT4,
- ODM_RTL8812 = BIT5,
- ODM_RTL8821 = BIT6,
-}ODM_IC_TYPE_E;
-
-#define ODM_IC_11N_SERIES (ODM_RTL8192S|ODM_RTL8192C|ODM_RTL8192D|ODM_RTL8723A|ODM_RTL8188E)
-#define ODM_IC_11AC_SERIES (ODM_RTL8812)
-
-//ODM_CMNINFO_CUT_VER
-typedef enum tag_ODM_Cut_Version_Definition
-{
- ODM_CUT_A = 1,
- ODM_CUT_B = 2,
- ODM_CUT_C = 3,
- ODM_CUT_D = 4,
- ODM_CUT_E = 5,
- ODM_CUT_F = 6,
- ODM_CUT_TEST = 7,
-}ODM_CUT_VERSION_E;
-
-// ODM_CMNINFO_FAB_VER
-typedef enum tag_ODM_Fab_Version_Definition
-{
- ODM_TSMC = 0,
- ODM_UMC = 1,
-}ODM_FAB_E;
-
-// ODM_CMNINFO_RF_TYPE
-//
-// For example 1T2R (A+AB = BIT0|BIT4|BIT5)
-//
-typedef enum tag_ODM_RF_Path_Bit_Definition
-{
- ODM_RF_TX_A = BIT0,
- ODM_RF_TX_B = BIT1,
- ODM_RF_TX_C = BIT2,
- ODM_RF_TX_D = BIT3,
- ODM_RF_RX_A = BIT4,
- ODM_RF_RX_B = BIT5,
- ODM_RF_RX_C = BIT6,
- ODM_RF_RX_D = BIT7,
-}ODM_RF_PATH_E;
-
-
-typedef enum tag_ODM_RF_Type_Definition
-{
- ODM_1T1R = 0,
- ODM_1T2R = 1,
- ODM_2T2R = 2,
- ODM_2T3R = 3,
- ODM_2T4R = 4,
- ODM_3T3R = 5,
- ODM_3T4R = 6,
- ODM_4T4R = 7,
-}ODM_RF_TYPE_E;
-
-
-//
-// ODM Dynamic common info value definition
-//
-
-//typedef enum _MACPHY_MODE_8192D{
-// SINGLEMAC_SINGLEPHY,
-// DUALMAC_DUALPHY,
-// DUALMAC_SINGLEPHY,
-//}MACPHY_MODE_8192D,*PMACPHY_MODE_8192D;
-// Above is the original define in MP driver. Please use the same define. THX.
-typedef enum tag_ODM_MAC_PHY_Mode_Definition
-{
- ODM_SMSP = 0,
- ODM_DMSP = 1,
- ODM_DMDP = 2,
-}ODM_MAC_PHY_MODE_E;
-
-
-typedef enum tag_BT_Coexist_Definition
-{
- ODM_BT_BUSY = 1,
- ODM_BT_ON = 2,
- ODM_BT_OFF = 3,
- ODM_BT_NONE = 4,
-}ODM_BT_COEXIST_E;
-
-// ODM_CMNINFO_OP_MODE
-typedef enum tag_Operation_Mode_Definition
-{
- ODM_NO_LINK = BIT0,
- ODM_LINK = BIT1,
- ODM_SCAN = BIT2,
- ODM_POWERSAVE = BIT3,
- ODM_AP_MODE = BIT4,
- ODM_CLIENT_MODE = BIT5,
- ODM_AD_HOC = BIT6,
- ODM_WIFI_DIRECT = BIT7,
- ODM_WIFI_DISPLAY = BIT8,
-}ODM_OPERATION_MODE_E;
-
-// ODM_CMNINFO_WM_MODE
-typedef enum tag_Wireless_Mode_Definition
-{
- ODM_WM_UNKNOW = 0x0,
- ODM_WM_B = BIT0,
- ODM_WM_G = BIT1,
- ODM_WM_A = BIT2,
- ODM_WM_N24G = BIT3,
- ODM_WM_N5G = BIT4,
- ODM_WM_AUTO = BIT5,
- ODM_WM_AC = BIT6,
-}ODM_WIRELESS_MODE_E;
-
-// ODM_CMNINFO_BAND
-typedef enum tag_Band_Type_Definition
-{
- ODM_BAND_2_4G = BIT0,
- ODM_BAND_5G = BIT1,
-
-}ODM_BAND_TYPE_E;
-
-// ODM_CMNINFO_SEC_CHNL_OFFSET
-typedef enum tag_Secondary_Channel_Offset_Definition
-{
- ODM_DONT_CARE = 0,
- ODM_BELOW = 1,
- ODM_ABOVE = 2
-}ODM_SEC_CHNL_OFFSET_E;
-
-// ODM_CMNINFO_SEC_MODE
-typedef enum tag_Security_Definition
-{
- ODM_SEC_OPEN = 0,
- ODM_SEC_WEP40 = 1,
- ODM_SEC_TKIP = 2,
- ODM_SEC_RESERVE = 3,
- ODM_SEC_AESCCMP = 4,
- ODM_SEC_WEP104 = 5,
- ODM_WEP_WPA_MIXED = 6, // WEP + WPA
- ODM_SEC_SMS4 = 7,
-}ODM_SECURITY_E;
-
-// ODM_CMNINFO_BW
-typedef enum tag_Bandwidth_Definition
-{
- ODM_BW20M = 0,
- ODM_BW40M = 1,
- ODM_BW80M = 2,
- ODM_BW160M = 3,
- ODM_BW10M = 4,
-}ODM_BW_E;
-
-// ODM_CMNINFO_CHNL
-
-// ODM_CMNINFO_BOARD_TYPE
-typedef enum tag_Board_Definition
-{
- ODM_BOARD_NORMAL = 0,
- ODM_BOARD_HIGHPWR = 1,
- ODM_BOARD_MINICARD = 2,
- ODM_BOARD_SLIM = 3,
- ODM_BOARD_COMBO = 4,
-
-}ODM_BOARD_TYPE_E;
-
-// ODM_CMNINFO_ONE_PATH_CCA
-typedef enum tag_CCA_Path
-{
- ODM_CCA_2R = 0,
- ODM_CCA_1R_A = 1,
- ODM_CCA_1R_B = 2,
-}ODM_CCA_PATH_E;
-
-
-typedef struct _ODM_RA_Info_
-{
- u1Byte RateID;
- u4Byte RateMask;
- u4Byte RAUseRate;
- u1Byte RateSGI;
- u1Byte RssiStaRA;
- u1Byte PreRssiStaRA;
- u1Byte SGIEnable;
- u1Byte DecisionRate;
- u1Byte PreRate;
- u1Byte HighestRate;
- u1Byte LowestRate;
- u4Byte NscUp;
- u4Byte NscDown;
- u2Byte RTY[5];
- u4Byte TOTAL;
- u2Byte DROP;
- u1Byte Active;
- u2Byte RptTime;
- u1Byte RAWaitingCounter;
- u1Byte RAPendingCounter;
-#if 1 //POWER_TRAINING_ACTIVE == 1 // For compile pass only~!
- u1Byte PTActive; // on or off
- u1Byte PTTryState; // 0 trying state, 1 for decision state
- u1Byte PTStage; // 0~6
- u1Byte PTStopCount; //Stop PT counter
- u1Byte PTPreRate; // if rate change do PT
- u1Byte PTPreRssi; // if RSSI change 5% do PT
- u1Byte PTModeSS; // decide whitch rate should do PT
- u1Byte RAstage; // StageRA, decide how many times RA will be done between PT
- u1Byte PTSmoothFactor;
-#endif
-} ODM_RA_INFO_T,*PODM_RA_INFO_T;
-
-typedef struct _IQK_MATRIX_REGS_SETTING{
- BOOLEAN bIQKDone;
- s4Byte Value[1][IQK_Matrix_REG_NUM];
-}IQK_MATRIX_REGS_SETTING,*PIQK_MATRIX_REGS_SETTING;
-
-#if (DM_ODM_SUPPORT_TYPE & ODM_MP)
-typedef struct _PathDiv_Parameter_define_
-{
- u4Byte org_5g_RegE30;
- u4Byte org_5g_RegC14;
- u4Byte org_5g_RegCA0;
- u4Byte swt_5g_RegE30;
- u4Byte swt_5g_RegC14;
- u4Byte swt_5g_RegCA0;
- //for 2G IQK information
- u4Byte org_2g_RegC80;
- u4Byte org_2g_RegC4C;
- u4Byte org_2g_RegC94;
- u4Byte org_2g_RegC14;
- u4Byte org_2g_RegCA0;
-
- u4Byte swt_2g_RegC80;
- u4Byte swt_2g_RegC4C;
- u4Byte swt_2g_RegC94;
- u4Byte swt_2g_RegC14;
- u4Byte swt_2g_RegCA0;
-}PATHDIV_PARA,*pPATHDIV_PARA;
-#endif
-
-
-typedef struct ODM_RF_Calibration_Structure
-{
- //for tx power tracking
-
- u4Byte RegA24; // for TempCCK
- s4Byte RegE94;
- s4Byte RegE9C;
- s4Byte RegEB4;
- s4Byte RegEBC;
-
- //u1Byte bTXPowerTracking;
- u1Byte TXPowercount;
- BOOLEAN bTXPowerTrackingInit;
- BOOLEAN bTXPowerTracking;
- u1Byte TxPowerTrackControl; //for mp mode, turn off txpwrtracking as default
- u1Byte TM_Trigger;
- u1Byte InternalPA5G[2]; //pathA / pathB
-
- u1Byte ThermalMeter[2]; // ThermalMeter, index 0 for RFIC0, and 1 for RFIC1
- u1Byte ThermalValue;
- u1Byte ThermalValue_LCK;
- u1Byte ThermalValue_IQK;
- u1Byte ThermalValue_DPK;
- u1Byte ThermalValue_AVG[AVG_THERMAL_NUM];
- u1Byte ThermalValue_AVG_index;
- u1Byte ThermalValue_RxGain;
- u1Byte ThermalValue_Crystal;
- u1Byte ThermalValue_DPKstore;
- u1Byte ThermalValue_DPKtrack;
- BOOLEAN TxPowerTrackingInProgress;
- BOOLEAN bDPKenable;
-
- BOOLEAN bReloadtxpowerindex;
- u1Byte bRfPiEnable;
- u4Byte TXPowerTrackingCallbackCnt; //cosa add for debug
-
- u1Byte bCCKinCH14;
- u1Byte CCK_index;
- u1Byte OFDM_index[2];
- BOOLEAN bDoneTxpower;
-
- u1Byte ThermalValue_HP[HP_THERMAL_NUM];
- u1Byte ThermalValue_HP_index;
- IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];
-
- u1Byte Delta_IQK;
- u1Byte Delta_LCK;
-
- //for IQK
- u4Byte RegC04;
- u4Byte Reg874;
- u4Byte RegC08;
- u4Byte RegB68;
- u4Byte RegB6C;
- u4Byte Reg870;
- u4Byte Reg860;
- u4Byte Reg864;
-
- BOOLEAN bIQKInitialized;
- BOOLEAN bLCKInProgress;
- BOOLEAN bAntennaDetected;
- u4Byte ADDA_backup[IQK_ADDA_REG_NUM];
- u4Byte IQK_MAC_backup[IQK_MAC_REG_NUM];
- u4Byte IQK_BB_backup_recover[9];
- u4Byte IQK_BB_backup[IQK_BB_REG_NUM];
-
- //for APK
- u4Byte APKoutput[2][2]; //path A/B; output1_1a/output1_2a
- u1Byte bAPKdone;
- u1Byte bAPKThermalMeterIgnore;
- u1Byte bDPdone;
- u1Byte bDPPathAOK;
- u1Byte bDPPathBOK;
-}ODM_RF_CAL_T,*PODM_RF_CAL_T;
-//
-// ODM Dynamic common info value definition
-//
-
-typedef struct _FAST_ANTENNA_TRAINNING_
-{
- u1Byte Bssid[6];
- u1Byte antsel_rx_keep_0;
- u1Byte antsel_rx_keep_1;
- u1Byte antsel_rx_keep_2;
- u4Byte antSumRSSI[7];
- u4Byte antRSSIcnt[7];
- u4Byte antAveRSSI[7];
- u1Byte FAT_State;
- u4Byte TrainIdx;
- u1Byte antsel_a[ODM_ASSOCIATE_ENTRY_NUM];
- u1Byte antsel_b[ODM_ASSOCIATE_ENTRY_NUM];
- u1Byte antsel_c[ODM_ASSOCIATE_ENTRY_NUM];
- u4Byte MainAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];
- u4Byte AuxAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];
- u4Byte MainAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];
- u4Byte AuxAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];
- u1Byte RxIdleAnt;
- BOOLEAN bBecomeLinked;
-
-}FAT_T,*pFAT_T;
-
-typedef enum _FAT_STATE
-{
- FAT_NORMAL_STATE = 0,
- FAT_TRAINING_STATE = 1,
-}FAT_STATE_E, *PFAT_STATE_E;
-
-typedef enum _ANT_DIV_TYPE
-{
- NO_ANTDIV = 0xFF,
- CG_TRX_HW_ANTDIV = 0x01,
- CGCS_RX_HW_ANTDIV = 0x02,
- FIXED_HW_ANTDIV = 0x03,
- CG_TRX_SMART_ANTDIV = 0x04,
- CGCS_RX_SW_ANTDIV = 0x05,
-
-}ANT_DIV_TYPE_E, *PANT_DIV_TYPE_E;
-
-
-
-
-
-
-
-
-
-
-
-
-
-//
-// 2011/09/22 MH Copy from SD4 defined structure. We use to support PHY DM integration.
-//
-#if(DM_ODM_SUPPORT_TYPE & ODM_MP)
-#if (RT_PLATFORM != PLATFORM_LINUX)
-typedef
-#endif
-struct DM_Out_Source_Dynamic_Mechanism_Structure
-#else// for AP,ADSL,CE Team
-typedef struct DM_Out_Source_Dynamic_Mechanism_Structure
-#endif
-{
- //RT_TIMER FastAntTrainingTimer;
- //
- // Add for different team use temporarily
- //
- PADAPTER Adapter; // For CE/NIC team
- prtl8192cd_priv priv; // For AP/ADSL team
- // WHen you use Adapter or priv pointer, you must make sure the pointer is ready.
- BOOLEAN odm_ready;
-
-#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
- rtl8192cd_priv fake_priv;
-#endif
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- // ADSL_AP_BUILD_WORKAROUND
- ADAPTER fake_adapter;
-#endif
-
- u8Byte DebugComponents;
- u4Byte DebugLevel;
-
-//------ ODM HANDLE, DRIVER NEEDS NOT TO HOOK------//
- BOOLEAN bCckHighPower;
- u1Byte RFPathRxEnable; // ODM_CMNINFO_RFPATH_ENABLE
- u1Byte ControlChannel;
-//------ ODM HANDLE, DRIVER NEEDS NOT TO HOOK------//
-
-//--------REMOVED COMMON INFO----------//
- //u1Byte PseudoMacPhyMode;
- //BOOLEAN *BTCoexist;
- //BOOLEAN PseudoBtCoexist;
- //u1Byte OPMode;
- //BOOLEAN bAPMode;
- //BOOLEAN bClientMode;
- //BOOLEAN bAdHocMode;
- //BOOLEAN bSlaveOfDMSP;
-//--------REMOVED COMMON INFO----------//
-
-
-//1 COMMON INFORMATION
-
- //
- // Init Value
- //
-//-----------HOOK BEFORE REG INIT-----------//
- // ODM Platform info AP/ADSL/CE/MP = 1/2/3/4
- u1Byte SupportPlatform;
- // ODM Support Ability DIG/RATR/TX_PWR_TRACK/ ¡K¡K = 1/2/3/¡K
- u4Byte SupportAbility;
- // ODM PCIE/USB/SDIO/GSPI = 0/1/2/3
- u1Byte SupportInterface;
- // ODM composite or independent. Bit oriented/ 92C+92D+ .... or any other type = 1/2/3/...
- u4Byte SupportICType;
- // Cut Version TestChip/A-cut/B-cut... = 0/1/2/3/...
- u1Byte CutVersion;
- // Fab Version TSMC/UMC = 0/1
- u1Byte FabVersion;
- // RF Type 4T4R/3T3R/2T2R/1T2R/1T1R/...
- u1Byte RFType;
- // Board Type Normal/HighPower/MiniCard/SLIM/Combo/... = 0/1/2/3/4/...
- u1Byte BoardType;
- // with external LNA NO/Yes = 0/1
- u1Byte ExtLNA;
- // with external PA NO/Yes = 0/1
- u1Byte ExtPA;
- // with external TRSW NO/Yes = 0/1
- u1Byte ExtTRSW;
- u1Byte PatchID; //Customer ID
- BOOLEAN bInHctTest;
- BOOLEAN bWIFITest;
-
- BOOLEAN bDualMacSmartConcurrent;
- u4Byte BK_SupportAbility;
- u1Byte AntDivType;
-//-----------HOOK BEFORE REG INIT-----------//
-
- //
- // Dynamic Value
- //
-//--------- POINTER REFERENCE-----------//
-
- u1Byte u1Byte_temp;
- BOOLEAN BOOLEAN_temp;
- PADAPTER PADAPTER_temp;
-
- // MAC PHY Mode SMSP/DMSP/DMDP = 0/1/2
- u1Byte *pMacPhyMode;
- //TX Unicast byte count
- u8Byte *pNumTxBytesUnicast;
- //RX Unicast byte count
- u8Byte *pNumRxBytesUnicast;
- // Wireless mode B/G/A/N = BIT0/BIT1/BIT2/BIT3
- u1Byte *pWirelessMode; //ODM_WIRELESS_MODE_E
- // Frequence band 2.4G/5G = 0/1
- u1Byte *pBandType;
- // Secondary channel offset don't_care/below/above = 0/1/2
- u1Byte *pSecChOffset;
- // Security mode Open/WEP/AES/TKIP = 0/1/2/3
- u1Byte *pSecurity;
- // BW info 20M/40M/80M = 0/1/2
- u1Byte *pBandWidth;
- // Central channel location Ch1/Ch2/....
- u1Byte *pChannel; //central channel number
- // Common info for 92D DMSP
-
- BOOLEAN *pbGetValueFromOtherMac;
- PADAPTER *pBuddyAdapter;
- BOOLEAN *pbMasterOfDMSP; //MAC0: master, MAC1: slave
- // Common info for Status
- BOOLEAN *pbScanInProcess;
- BOOLEAN *pbPowerSaving;
- // CCA Path 2-path/path-A/path-B = 0/1/2; using ODM_CCA_PATH_E.
- u1Byte *pOnePathCCA;
- //pMgntInfo->AntennaTest
- u1Byte *pAntennaTest;
- BOOLEAN *pbNet_closed;
-//--------- POINTER REFERENCE-----------//
- //
-//------------CALL BY VALUE-------------//
- BOOLEAN bWIFI_Direct;
- BOOLEAN bWIFI_Display;
- BOOLEAN bLinked;
- u1Byte RSSI_Min;
- u1Byte InterfaceIndex; // Add for 92D dual MAC: 0--Mac0 1--Mac1
- BOOLEAN bIsMPChip;
- BOOLEAN bOneEntryOnly;
- // Common info for BTDM
- BOOLEAN bBtDisabled; // BT is disabled
- BOOLEAN bBtHsOperation; // BT HS mode is under progress
- u1Byte btHsDigVal; // use BT rssi to decide the DIG value
- BOOLEAN bBtDisableEdcaTurbo; // Under some condition, don't enable the EDCA Turbo
- BOOLEAN bBtBusy; // BT is busy.
-//------------CALL BY VALUE-------------//
-
- //2 Define STA info.
- // _ODM_STA_INFO
- // 2012/01/12 MH For MP, we need to reduce one array pointer for default port.??
- PSTA_INFO_T pODM_StaInfo[ODM_ASSOCIATE_ENTRY_NUM];
-
-#if (RATE_ADAPTIVE_SUPPORT == 1)
- u2Byte CurrminRptTime;
- ODM_RA_INFO_T RAInfo[ODM_ASSOCIATE_ENTRY_NUM]; //Use MacID as array index. STA MacID=0, VWiFi Client MacID={1, ODM_ASSOCIATE_ENTRY_NUM-1} //YJ,add,120119
-#endif
- //
- // 2012/02/14 MH Add to share 88E ra with other SW team.
- // We need to colelct all support abilit to a proper area.
- //
- BOOLEAN RaSupport88E;
-
- // Define ...........
-
- // Latest packet phy info (ODM write)
- ODM_PHY_DBG_INFO_T PhyDbgInfo;
- //PHY_INFO_88E PhyInfo;
-
- // Latest packet phy info (ODM write)
- ODM_MAC_INFO *pMacInfo;
- //MAC_INFO_88E MacInfo;
-
- // Different Team independt structure??
-
- //
- //TX_RTP_CMN TX_retrpo;
- //TX_RTP_88E TX_retrpo;
- //TX_RTP_8195 TX_retrpo;
-
- //
- //ODM Structure
- //
- FAT_T DM_FatTable;
- DIG_T DM_DigTable;
- PS_T DM_PSTable;
- Pri_CCA_T DM_PriCCA;
- RXHP_T DM_RXHP_Table;
- FALSE_ALARM_STATISTICS FalseAlmCnt;
- FALSE_ALARM_STATISTICS FlaseAlmCntBuddyAdapter;
- //#ifdef CONFIG_ANTENNA_DIVERSITY
- SWAT_T DM_SWAT_Table;
- BOOLEAN RSSI_test;
- //#endif
-
-#if (DM_ODM_SUPPORT_TYPE & ODM_MP)
- //Path Div Struct
- PATHDIV_PARA pathIQK;
-#endif
-
- EDCA_T DM_EDCA_Table;
- u4Byte WMMEDCA_BE;
- // Copy from SD4 structure
- //
- // ==================================================
- //
-
- //common
- //u1Byte DM_Type;
- //u1Byte PSD_Report_RXHP[80]; // Add By Gary
- //u1Byte PSD_func_flag; // Add By Gary
- //for DIG
- //u1Byte bDMInitialGainEnable;
- //u1Byte binitialized; // for dm_initial_gain_Multi_STA use.
- //for Antenna diversity
- //u8 AntDivCfg;// 0:OFF , 1:ON, 2:by efuse
- //PSTA_INFO_T RSSI_target;
-
- BOOLEAN *pbDriverStopped;
- BOOLEAN *pbDriverIsGoingToPnpSetPowerSleep;
- BOOLEAN *pinit_adpt_in_progress;
-
- //PSD
- BOOLEAN bUserAssignLevel;
- RT_TIMER PSDTimer;
- u1Byte RSSI_BT; //come from BT
- BOOLEAN bPSDinProcess;
- BOOLEAN bDMInitialGainEnable;
-
- //for rate adaptive, in fact, 88c/92c fw will handle this
- u1Byte bUseRAMask;
-
- ODM_RATE_ADAPTIVE RateAdaptive;
-
-
- ODM_RF_CAL_T RFCalibrateInfo;
-
- //
- // TX power tracking
- //
- u1Byte BbSwingIdxOfdm;
- u1Byte BbSwingIdxOfdmCurrent;
- u1Byte BbSwingIdxOfdmBase;
- BOOLEAN BbSwingFlagOfdm;
- u1Byte BbSwingIdxCck;
- u1Byte BbSwingIdxCckCurrent;
- u1Byte BbSwingIdxCckBase;
- BOOLEAN BbSwingFlagCck;
- u1Byte *mp_mode;
- //
- // ODM system resource.
- //
-
- // ODM relative time.
- RT_TIMER PathDivSwitchTimer;
- //2011.09.27 add for Path Diversity
- RT_TIMER CCKPathDiversityTimer;
- RT_TIMER FastAntTrainingTimer;
-
- // ODM relative workitem.
-#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
- #if USE_WORKITEM
- RT_WORK_ITEM PathDivSwitchWorkitem;
- RT_WORK_ITEM CCKPathDiversityWorkitem;
- RT_WORK_ITEM FastAntTrainingWorkitem;
- #endif
-#endif
-
-#if(DM_ODM_SUPPORT_TYPE & ODM_MP)
-
-#if (RT_PLATFORM != PLATFORM_LINUX)
-} DM_ODM_T, *PDM_ODM_T; // DM_Dynamic_Mechanism_Structure
-#else
-};
-#endif
-
-#else// for AP,ADSL,CE Team
-} DM_ODM_T, *PDM_ODM_T; // DM_Dynamic_Mechanism_Structure
-#endif
-
-
-
-#if 1 //92c-series
-#define ODM_RF_PATH_MAX 2
-#else //jaguar - series
-#define ODM_RF_PATH_MAX 4
-#endif
-
-typedef enum _ODM_RF_RADIO_PATH {
- ODM_RF_PATH_A = 0, //Radio Path A
- ODM_RF_PATH_B = 1, //Radio Path B
- ODM_RF_PATH_C = 2, //Radio Path C
- ODM_RF_PATH_D = 3, //Radio Path D
- // ODM_RF_PATH_MAX, //Max RF number 90 support
-} ODM_RF_RADIO_PATH_E, *PODM_RF_RADIO_PATH_E;
-
- typedef enum _ODM_RF_CONTENT{
- odm_radioa_txt = 0x1000,
- odm_radiob_txt = 0x1001,
- odm_radioc_txt = 0x1002,
- odm_radiod_txt = 0x1003
-} ODM_RF_CONTENT;
-
-typedef enum _ODM_BB_Config_Type{
- CONFIG_BB_PHY_REG,
- CONFIG_BB_AGC_TAB,
- CONFIG_BB_AGC_TAB_2G,
- CONFIG_BB_AGC_TAB_5G,
- CONFIG_BB_PHY_REG_PG,
-} ODM_BB_Config_Type, *PODM_BB_Config_Type;
-
-// Status code
-#if (DM_ODM_SUPPORT_TYPE != ODM_MP)
-typedef enum _RT_STATUS{
- RT_STATUS_SUCCESS,
- RT_STATUS_FAILURE,
- RT_STATUS_PENDING,
- RT_STATUS_RESOURCE,
- RT_STATUS_INVALID_CONTEXT,
- RT_STATUS_INVALID_PARAMETER,
- RT_STATUS_NOT_SUPPORT,
- RT_STATUS_OS_API_FAILED,
-}RT_STATUS,*PRT_STATUS;
-#endif // end of RT_STATUS definition
-
-#ifdef REMOVE_PACK
-#pragma pack()
-#endif
-
-//#include "odm_function.h"
-
-//3===========================================================
-//3 DIG
-//3===========================================================
-
-typedef enum tag_Dynamic_Init_Gain_Operation_Type_Definition
-{
- DIG_TYPE_THRESH_HIGH = 0,
- DIG_TYPE_THRESH_LOW = 1,
- DIG_TYPE_BACKOFF = 2,
- DIG_TYPE_RX_GAIN_MIN = 3,
- DIG_TYPE_RX_GAIN_MAX = 4,
- DIG_TYPE_ENABLE = 5,
- DIG_TYPE_DISABLE = 6,
- DIG_OP_TYPE_MAX
-}DM_DIG_OP_E;
-/*
-typedef enum tag_CCK_Packet_Detection_Threshold_Type_Definition
-{
- CCK_PD_STAGE_LowRssi = 0,
- CCK_PD_STAGE_HighRssi = 1,
- CCK_PD_STAGE_MAX = 3,
-}DM_CCK_PDTH_E;
-
-typedef enum tag_DIG_EXT_PORT_ALGO_Definition
-{
- DIG_EXT_PORT_STAGE_0 = 0,
- DIG_EXT_PORT_STAGE_1 = 1,
- DIG_EXT_PORT_STAGE_2 = 2,
- DIG_EXT_PORT_STAGE_3 = 3,
- DIG_EXT_PORT_STAGE_MAX = 4,
-}DM_DIG_EXT_PORT_ALG_E;
-
-typedef enum tag_DIG_Connect_Definition
-{
- DIG_STA_DISCONNECT = 0,
- DIG_STA_CONNECT = 1,
- DIG_STA_BEFORE_CONNECT = 2,
- DIG_MultiSTA_DISCONNECT = 3,
- DIG_MultiSTA_CONNECT = 4,
- DIG_CONNECT_MAX
-}DM_DIG_CONNECT_E;
-
-
-#define DM_MultiSTA_InitGainChangeNotify(Event) {DM_DigTable.CurMultiSTAConnectState = Event;}
-
-#define DM_MultiSTA_InitGainChangeNotify_CONNECT(_ADAPTER) \
- DM_MultiSTA_InitGainChangeNotify(DIG_MultiSTA_CONNECT)
-
-#define DM_MultiSTA_InitGainChangeNotify_DISCONNECT(_ADAPTER) \
- DM_MultiSTA_InitGainChangeNotify(DIG_MultiSTA_DISCONNECT)
-*/
-#define DM_DIG_THRESH_HIGH 40
-#define DM_DIG_THRESH_LOW 35
-
-#define DM_SCAN_RSSI_TH 0x14 //scan return issue for LC
-
-
-#define DM_FALSEALARM_THRESH_LOW 400
-#define DM_FALSEALARM_THRESH_HIGH 1000
-
-#define DM_DIG_MAX_NIC 0x3e
-#define DM_DIG_MIN_NIC 0x1e //0x22//0x1c
-
-#define DM_DIG_MAX_AP 0x32
-#define DM_DIG_MIN_AP 0x20
-
-#define DM_DIG_MAX_NIC_HP 0x46
-#define DM_DIG_MIN_NIC_HP 0x2e
-
-#define DM_DIG_MAX_AP_HP 0x42
-#define DM_DIG_MIN_AP_HP 0x30
-
-//vivi 92c&92d has different definition, 20110504
-//this is for 92c
-#ifdef CONFIG_SPECIAL_SETTING_FOR_FUNAI_TV
-#define DM_DIG_FA_TH0 0x80//0x20
-#else
-#define DM_DIG_FA_TH0 0x200//0x20
-#endif
-#define DM_DIG_FA_TH1 0x300//0x100
-#define DM_DIG_FA_TH2 0x400//0x200
-//this is for 92d
-#define DM_DIG_FA_TH0_92D 0x100
-#define DM_DIG_FA_TH1_92D 0x400
-#define DM_DIG_FA_TH2_92D 0x600
-
-#define DM_DIG_BACKOFF_MAX 12
-#define DM_DIG_BACKOFF_MIN -4
-#define DM_DIG_BACKOFF_DEFAULT 10
-
-//3===========================================================
-//3 AGC RX High Power Mode
-//3===========================================================
-#define LNA_Low_Gain_1 0x64
-#define LNA_Low_Gain_2 0x5A
-#define LNA_Low_Gain_3 0x58
-
-#define FA_RXHP_TH1 5000
-#define FA_RXHP_TH2 1500
-#define FA_RXHP_TH3 800
-#define FA_RXHP_TH4 600
-#define FA_RXHP_TH5 500
-
-//3===========================================================
-//3 EDCA
-//3===========================================================
-
-//3===========================================================
-//3 Dynamic Tx Power
-//3===========================================================
-//Dynamic Tx Power Control Threshold
-#define TX_POWER_NEAR_FIELD_THRESH_LVL2 74
-#define TX_POWER_NEAR_FIELD_THRESH_LVL1 67
-#define TX_POWER_NEAR_FIELD_THRESH_AP 0x3F
-
-#define TxHighPwrLevel_Normal 0
-#define TxHighPwrLevel_Level1 1
-#define TxHighPwrLevel_Level2 2
-#define TxHighPwrLevel_BT1 3
-#define TxHighPwrLevel_BT2 4
-#define TxHighPwrLevel_15 5
-#define TxHighPwrLevel_35 6
-#define TxHighPwrLevel_50 7
-#define TxHighPwrLevel_70 8
-#define TxHighPwrLevel_100 9
-
-//3===========================================================
-//3 Tx Power Tracking
-//3===========================================================
-#if 0 //mask this, since these have been defined in typdef.h, vivi
-#define OFDM_TABLE_SIZE 37
-#define OFDM_TABLE_SIZE_92D 43
-#define CCK_TABLE_SIZE 33
-#endif
-
-
-//3===========================================================
-//3 Rate Adaptive
-//3===========================================================
-#define DM_RATR_STA_INIT 0
-#define DM_RATR_STA_HIGH 1
-#define DM_RATR_STA_MIDDLE 2
-#define DM_RATR_STA_LOW 3
-
-//3===========================================================
-//3 BB Power Save
-//3===========================================================
-
-
-typedef enum tag_1R_CCA_Type_Definition
-{
- CCA_1R =0,
- CCA_2R = 1,
- CCA_MAX = 2,
-}DM_1R_CCA_E;
-
-typedef enum tag_RF_Type_Definition
-{
- RF_Save =0,
- RF_Normal = 1,
- RF_MAX = 2,
-}DM_RF_E;
-
-//3===========================================================
-//3 Antenna Diversity
-//3===========================================================
-typedef enum tag_SW_Antenna_Switch_Definition
-{
- Antenna_A = 1,
- Antenna_B = 2,
- Antenna_MAX = 3,
-}DM_SWAS_E;
-
-
-// Maximal number of antenna detection mechanism needs to perform, added by Roger, 2011.12.28.
-#define MAX_ANTENNA_DETECTION_CNT 10
-
-//
-// Extern Global Variables.
-//
-#define OFDM_TABLE_SIZE_92C 37
-#define OFDM_TABLE_SIZE_92D 43
-#define CCK_TABLE_SIZE 33
-
-extern u4Byte OFDMSwingTable[OFDM_TABLE_SIZE_92D];
-extern u1Byte CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8];
-extern u1Byte CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8];
-
-
-
-//
-// check Sta pointer valid or not
-//
-#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-#define IS_STA_VALID(pSta) (pSta && pSta->expire_to)
-#elif (DM_ODM_SUPPORT_TYPE & ODM_MP)
-#define IS_STA_VALID(pSta) (pSta && pSta->bUsed)
-#else
-#define IS_STA_VALID(pSta) (pSta)
-#endif
-// 20100514 Joseph: Add definition for antenna switching test after link.
-// This indicates two different the steps.
-// In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air.
-// In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK
-// with original RSSI to determine if it is necessary to switch antenna.
-#define SWAW_STEP_PEAK 0
-#define SWAW_STEP_DETERMINE 1
-
-VOID ODM_Write_DIG(IN PDM_ODM_T pDM_Odm, IN u1Byte CurrentIGI);
-VOID ODM_Write_CCK_CCA_Thres(IN PDM_ODM_T pDM_Odm, IN u1Byte CurCCK_CCAThres);
-
-VOID
-ODM_SetAntenna(
- IN PDM_ODM_T pDM_Odm,
- IN u1Byte Antenna);
-
-
-#define dm_RF_Saving ODM_RF_Saving
-void ODM_RF_Saving( IN PDM_ODM_T pDM_Odm,
- IN u1Byte bForceInNormal );
-
-#define SwAntDivRestAfterLink ODM_SwAntDivRestAfterLink
-VOID ODM_SwAntDivRestAfterLink( IN PDM_ODM_T pDM_Odm);
-
-#define dm_CheckTXPowerTracking ODM_TXPowerTrackingCheck
-VOID
-ODM_TXPowerTrackingCheck(
- IN PDM_ODM_T pDM_Odm
- );
-
-BOOLEAN
-ODM_RAStateCheck(
- IN PDM_ODM_T pDM_Odm,
- IN s4Byte RSSI,
- IN BOOLEAN bForceUpdate,
- OUT pu1Byte pRATRState
- );
-
-#if(DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_AP|ODM_ADSL))
-//============================================================
-// function prototype
-//============================================================
-//#define DM_ChangeDynamicInitGainThresh ODM_ChangeDynamicInitGainThresh
-//void ODM_ChangeDynamicInitGainThresh(IN PADAPTER pAdapter,
-// IN INT32 DM_Type,
-// IN INT32 DM_Value);
-VOID
-ODM_ChangeDynamicInitGainThresh(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte DM_Type,
- IN u4Byte DM_Value
- );
-
-BOOLEAN
-ODM_CheckPowerStatus(
- IN PADAPTER Adapter
- );
-
-
-#if (DM_ODM_SUPPORT_TYPE != ODM_ADSL)
-VOID
-ODM_RateAdaptiveStateApInit(
- IN PADAPTER Adapter ,
- IN PRT_WLAN_STA pEntry
- );
-#endif
-#define AP_InitRateAdaptiveState ODM_RateAdaptiveStateApInit
-
-
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-#ifdef WIFI_WMM
-VOID
-ODM_IotEdcaSwitch(
- IN PDM_ODM_T pDM_Odm,
- IN unsigned char enable
- );
-#endif
-
-BOOLEAN
-ODM_ChooseIotMainSTA(
- IN PDM_ODM_T pDM_Odm,
- IN PSTA_INFO_T pstat
- );
-#endif
-
-#if(DM_ODM_SUPPORT_TYPE==ODM_AP)
-#ifdef HW_ANT_SWITCH
-u1Byte
-ODM_Diversity_AntennaSelect(
- IN PDM_ODM_T pDM_Odm,
- IN u1Byte *data
-);
-#endif
-#endif
-
-#define SwAntDivResetBeforeLink ODM_SwAntDivResetBeforeLink
-VOID ODM_SwAntDivResetBeforeLink(IN PDM_ODM_T pDM_Odm);
-
-//#define SwAntDivCheckBeforeLink8192C ODM_SwAntDivCheckBeforeLink8192C
-#define SwAntDivCheckBeforeLink ODM_SwAntDivCheckBeforeLink8192C
-BOOLEAN
-ODM_SwAntDivCheckBeforeLink8192C(
- IN PDM_ODM_T pDM_Odm
- );
-
-
-#endif
-
-#define dm_SWAW_RSSI_Check ODM_SwAntDivChkPerPktRssi
-VOID ODM_SwAntDivChkPerPktRssi(
- IN PDM_ODM_T pDM_Odm,
- IN u1Byte StationID,
- IN PODM_PHY_INFO_T pPhyInfo
- );
-
-#if((DM_ODM_SUPPORT_TYPE==ODM_MP)||(DM_ODM_SUPPORT_TYPE==ODM_CE))
-
-u4Byte ConvertTo_dB(u4Byte Value);
-
-u4Byte
-GetPSDData(
- PDM_ODM_T pDM_Odm,
- unsigned int point,
- u1Byte initial_gain_psd);
-
-#endif
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
-
-VOID
-odm_DIGbyRSSI_LPS(
- IN PDM_ODM_T pDM_Odm
- );
-
-u4Byte ODM_Get_Rate_Bitmap(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte macid,
- IN u4Byte ra_mask,
- IN u1Byte rssi_level);
-#endif
-
-
-#if(DM_ODM_SUPPORT_TYPE & (ODM_MP))
-#define dm_PSDMonitorCallback odm_PSDMonitorCallback
-VOID odm_PSDMonitorCallback(PRT_TIMER pTimer);
-
-VOID
-odm_PSDMonitorWorkItemCallback(
- IN PVOID pContext
- );
-
-
-VOID
-PatchDCTone(
- IN PDM_ODM_T pDM_Odm,
- pu4Byte PSD_report,
- u1Byte initial_gain_psd
-);
-VOID
-ODM_PSDMonitor(
- IN PDM_ODM_T pDM_Odm
- );
-VOID odm_PSD_Monitor(PDM_ODM_T pDM_Odm);
-VOID odm_PSDMonitorInit(PDM_ODM_T pDM_Odm);
-
-VOID
-ODM_PSDDbgControl(
- IN PADAPTER Adapter,
- IN u4Byte mode,
- IN u4Byte btRssi
- );
-
-#endif // DM_ODM_SUPPORT_TYPE
-
-
-
-VOID ODM_DMInit( IN PDM_ODM_T pDM_Odm);
-
-VOID
-ODM_DMWatchdog(
- IN PDM_ODM_T pDM_Odm // For common use in the future
- );
-
-VOID
-ODM_CmnInfoInit(
- IN PDM_ODM_T pDM_Odm,
- IN ODM_CMNINFO_E CmnInfo,
- IN u4Byte Value
- );
-
-VOID
-ODM_CmnInfoHook(
- IN PDM_ODM_T pDM_Odm,
- IN ODM_CMNINFO_E CmnInfo,
- IN PVOID pValue
- );
-
-VOID
-ODM_CmnInfoPtrArrayHook(
- IN PDM_ODM_T pDM_Odm,
- IN ODM_CMNINFO_E CmnInfo,
- IN u2Byte Index,
- IN PVOID pValue
- );
-
-VOID
-ODM_CmnInfoUpdate(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte CmnInfo,
- IN u8Byte Value
- );
-
-VOID
-ODM_InitAllTimers(
- IN PDM_ODM_T pDM_Odm
- );
-
-VOID
-ODM_CancelAllTimers(
- IN PDM_ODM_T pDM_Odm
- );
-
-VOID
-ODM_ReleaseAllTimers(
- IN PDM_ODM_T pDM_Odm
- );
-
-VOID
-ODM_ResetIQKResult(
- IN PDM_ODM_T pDM_Odm
- );
-
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
-VOID ODM_InitAllWorkItems(IN PDM_ODM_T pDM_Odm );
-VOID ODM_FreeAllWorkItems(IN PDM_ODM_T pDM_Odm );
-
-VOID odm_PathDivChkAntSwitch(PDM_ODM_T pDM_Odm);
-VOID ODM_PathDivRestAfterLink(
- IN PDM_ODM_T pDM_Odm
- );
-
-
-//===========================================//
-// Neil Chen----2011--06--15--
-
-//3 Path Diversity
-//===========================================================
-
-#define TP_MODE 0
-#define RSSI_MODE 1
-#define TRAFFIC_LOW 0
-#define TRAFFIC_HIGH 1
-
-//#define PATHDIV_ENABLE 1
-
-//VOID odm_PathDivChkAntSwitch(PADAPTER Adapter,u1Byte Step);
-VOID ODM_PathDivRestAfterLink(
- IN PDM_ODM_T pDM_Odm
- );
-
-#define dm_PathDiv_RSSI_Check ODM_PathDivChkPerPktRssi
-VOID ODM_PathDivChkPerPktRssi(PADAPTER Adapter,
- BOOLEAN bIsDefPort,
- BOOLEAN bMatchBSSID,
- PRT_WLAN_STA pEntry,
- PRT_RFD pRfd );
-
-u8Byte
-PlatformDivision64(
- IN u8Byte x,
- IN u8Byte y
-);
-
-
-// 20100514 Joseph: Add definition for antenna switching test after link.
-// This indicates two different the steps.
-// In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air.
-// In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK
-// with original RSSI to determine if it is necessary to switch antenna.
-#define SWAW_STEP_PEAK 0
-#define SWAW_STEP_DETERMINE 1
-
-//====================================================
-//3 PathDiV End
-//====================================================
-
-#define PathDivCheckBeforeLink8192C ODM_PathDiversityBeforeLink92C
-BOOLEAN
-ODM_PathDiversityBeforeLink92C(
- //IN PADAPTER Adapter
- IN PDM_ODM_T pDM_Odm
- );
-
-#define DM_ChangeDynamicInitGainThresh ODM_ChangeDynamicInitGainThresh
-//void ODM_ChangeDynamicInitGainThresh(IN PADAPTER pAdapter,
-// IN INT32 DM_Type,
-// IN INT32 DM_Value);
-//
-
-
-VOID
-ODM_CCKPathDiversityChkPerPktRssi(
- PADAPTER Adapter,
- BOOLEAN bIsDefPort,
- BOOLEAN bMatchBSSID,
- PRT_WLAN_STA pEntry,
- PRT_RFD pRfd,
- pu1Byte pDesc
- );
-
-
-typedef enum tag_DIG_Connect_Definition
-{
- DIG_STA_DISCONNECT = 0,
- DIG_STA_CONNECT = 1,
- DIG_STA_BEFORE_CONNECT = 2,
- DIG_MultiSTA_DISCONNECT = 3,
- DIG_MultiSTA_CONNECT = 4,
- DIG_CONNECT_MAX
-}DM_DIG_CONNECT_E;
-
-
-VOID
-ODM_FillTXPathInTXDESC(
- IN PADAPTER Adapter,
- IN PRT_TCB pTcb,
- IN pu1Byte pDesc
-);
-
-
-#define dm_SWAW_RSSI_Check ODM_SwAntDivChkPerPktRssi
-
-//
-// 2012/01/12 MH Check afapter status. Temp fix BSOD.
-//
-#define HAL_ADAPTER_STS_CHK(pDM_Odm)\
- if (pDM_Odm->Adapter == NULL)\
- {\
- return;\
- }\
-
-
-//
-// For new definition in MP temporarily fro power tracking,
-//
-#define odm_TXPowerTrackingDirectCall(_Adapter) \
- IS_HARDWARE_TYPE_8192D(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_92D(_Adapter) : \
- IS_HARDWARE_TYPE_8192C(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_92C(_Adapter) : \
- IS_HARDWARE_TYPE_8723A(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_8723A(_Adapter) :\
- odm_TXPowerTrackingCallback_ThermalMeter_8188E(_Adapter)
-
-VOID
-ODM_SetTxAntByTxInfo_88C_92D(
- IN PDM_ODM_T pDM_Odm,
- IN pu1Byte pDesc,
- IN u1Byte macId
- );
-#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_MP)
-VOID
-ODM_AntselStatistics_88C(
- IN PDM_ODM_T pDM_Odm,
- IN u1Byte MacId,
- IN u4Byte PWDBAll,
- IN BOOLEAN isCCKrate
-);
-
-#if( DM_ODM_SUPPORT_TYPE & (ODM_MP |ODM_CE))
-
-VOID
-ODM_SingleDualAntennaDefaultSetting(
- IN PDM_ODM_T pDM_Odm
- );
-
-BOOLEAN
-ODM_SingleDualAntennaDetection(
- IN PDM_ODM_T pDM_Odm,
- IN u1Byte mode
- );
-
-#endif // #if((DM_ODM_SUPPORT_TYPE==ODM_MP)||(DM_ODM_SUPPORT_TYPE==ODM_CE))
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
-void odm_dtc(PDM_ODM_T pDM_Odm);
-#endif /* #if (DM_ODM_SUPPORT_TYPE == ODM_CE) */
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+
+#ifndef __HALDMOUTSRC_H__
+#define __HALDMOUTSRC_H__
+
+//============================================================
+// Definition
+//============================================================
+//
+// 2011/09/22 MH Define all team supprt ability.
+//
+
+//
+// 2011/09/22 MH Define for all teams. Please Define the constan in your precomp header.
+//
+//#define DM_ODM_SUPPORT_AP 0
+//#define DM_ODM_SUPPORT_ADSL 0
+//#define DM_ODM_SUPPORT_CE 0
+//#define DM_ODM_SUPPORT_MP 1
+
+//
+// 2011/09/28 MH Define ODM SW team support flag.
+//
+
+
+
+//
+// Antenna Switch Relative Definition.
+//
+
+//
+// 20100503 Joseph:
+// Add new function SwAntDivCheck8192C().
+// This is the main function of Antenna diversity function before link.
+// Mainly, it just retains last scan result and scan again.
+// After that, it compares the scan result to see which one gets better RSSI.
+// It selects antenna with better receiving power and returns better scan result.
+//
+#define TP_MODE 0
+#define RSSI_MODE 1
+#define TRAFFIC_LOW 0
+#define TRAFFIC_HIGH 1
+
+
+//============================================================
+//3 Tx Power Tracking
+//3============================================================
+#define DPK_DELTA_MAPPING_NUM 13
+#define index_mapping_HP_NUM 15
+
+
+//============================================================
+//3 PSD Handler
+//3============================================================
+
+#define AFH_PSD 1 //0:normal PSD scan, 1: only do 20 pts PSD
+#define MODE_40M 0 //0:20M, 1:40M
+#define PSD_TH2 3
+#define PSD_CHMIN 20 // Minimum channel number for BT AFH
+#define SIR_STEP_SIZE 3
+#define Smooth_Size_1 5
+#define Smooth_TH_1 3
+#define Smooth_Size_2 10
+#define Smooth_TH_2 4
+#define Smooth_Size_3 20
+#define Smooth_TH_3 4
+#define Smooth_Step_Size 5
+#define Adaptive_SIR 1
+#if(RTL8723_FPGA_VERIFICATION == 1)
+#define PSD_RESCAN 1
+#else
+#define PSD_RESCAN 4
+#endif
+#define PSD_SCAN_INTERVAL 700 //ms
+
+
+
+//8723A High Power IGI Setting
+#define DM_DIG_HIGH_PWR_IGI_LOWER_BOUND 0x22
+#define DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND 0x28
+#define DM_DIG_HIGH_PWR_THRESHOLD 0x3a
+#define DM_DIG_LOW_PWR_THRESHOLD 0x14
+
+//ANT Test
+#define ANTTESTALL 0x00 //Ant A or B will be Testing
+#define ANTTESTA 0x01 //Ant A will be Testing
+#define ANTTESTB 0x02 //Ant B will be testing
+
+// LPS define
+#define DM_DIG_FA_TH0_LPS 4 //-> 4 in lps
+#define DM_DIG_FA_TH1_LPS 15 //-> 15 lps
+#define DM_DIG_FA_TH2_LPS 30 //-> 30 lps
+#define RSSI_OFFSET_DIG 0x05;
+
+//ANT Test
+#define ANTTESTALL 0x00 //Ant A or B will be Testing
+#define ANTTESTA 0x01 //Ant A will be Testing
+#define ANTTESTB 0x02 //Ant B will be testing
+
+
+//============================================================
+// structure and define
+//============================================================
+
+//
+// 2011/09/20 MH Add for AP/ADSLpseudo DM structuer requirement.
+// We need to remove to other position???
+//
+#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
+typedef struct rtl8192cd_priv {
+ u1Byte temp;
+
+}rtl8192cd_priv, *prtl8192cd_priv;
+#endif
+
+
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+typedef struct _ADAPTER{
+ u1Byte temp;
+ #ifdef AP_BUILD_WORKAROUND
+ HAL_DATA_TYPE* temp2;
+ prtl8192cd_priv priv;
+ #endif
+}ADAPTER, *PADAPTER;
+#endif
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+
+typedef struct _WLAN_STA{
+ u1Byte temp;
+} WLAN_STA, *PRT_WLAN_STA;
+
+#endif
+
+typedef struct _Dynamic_Initial_Gain_Threshold_
+{
+ u1Byte Dig_Enable_Flag;
+ u1Byte Dig_Ext_Port_Stage;
+
+ int RssiLowThresh;
+ int RssiHighThresh;
+
+ u4Byte FALowThresh;
+ u4Byte FAHighThresh;
+
+ u1Byte CurSTAConnectState;
+ u1Byte PreSTAConnectState;
+ u1Byte CurMultiSTAConnectState;
+
+ u1Byte PreIGValue;
+ u1Byte CurIGValue;
+ u1Byte BT30_CurIGI;
+ u1Byte BackupIGValue;
+
+ s1Byte BackoffVal;
+ s1Byte BackoffVal_range_max;
+ s1Byte BackoffVal_range_min;
+ u1Byte rx_gain_range_max;
+ u1Byte rx_gain_range_min;
+ u1Byte Rssi_val_min;
+
+ u1Byte PreCCK_CCAThres;
+ u1Byte CurCCK_CCAThres;
+ u1Byte PreCCKPDState;
+ u1Byte CurCCKPDState;
+
+ u1Byte LargeFAHit;
+ u1Byte ForbiddenIGI;
+ u4Byte Recover_cnt;
+
+ u1Byte DIG_Dynamic_MIN_0;
+ u1Byte DIG_Dynamic_MIN_1;
+ BOOLEAN bMediaConnect_0;
+ BOOLEAN bMediaConnect_1;
+
+ u4Byte AntDiv_RSSI_max;
+ u4Byte RSSI_max;
+}DIG_T,*pDIG_T;
+
+typedef struct _Dynamic_Power_Saving_
+{
+ u1Byte PreCCAState;
+ u1Byte CurCCAState;
+
+ u1Byte PreRFState;
+ u1Byte CurRFState;
+
+ int Rssi_val_min;
+
+ u1Byte initialize;
+ u4Byte Reg874,RegC70,Reg85C,RegA74;
+
+}PS_T,*pPS_T;
+
+typedef struct _FALSE_ALARM_STATISTICS{
+ u4Byte Cnt_Parity_Fail;
+ u4Byte Cnt_Rate_Illegal;
+ u4Byte Cnt_Crc8_fail;
+ u4Byte Cnt_Mcs_fail;
+ u4Byte Cnt_Ofdm_fail;
+ u4Byte Cnt_Cck_fail;
+ u4Byte Cnt_all;
+ u4Byte Cnt_Fast_Fsync;
+ u4Byte Cnt_SB_Search_fail;
+ u4Byte Cnt_OFDM_CCA;
+ u4Byte Cnt_CCK_CCA;
+ u4Byte Cnt_CCA_all;
+ u4Byte Cnt_BW_USC; //Gary
+ u4Byte Cnt_BW_LSC; //Gary
+}FALSE_ALARM_STATISTICS, *PFALSE_ALARM_STATISTICS;
+
+typedef struct _Dynamic_Primary_CCA{
+ u1Byte PriCCA_flag;
+ u1Byte intf_flag;
+ u1Byte intf_type;
+ u1Byte DupRTS_flag;
+ u1Byte Monitor_flag;
+}Pri_CCA_T, *pPri_CCA_T;
+
+typedef struct _RX_High_Power_
+{
+ u1Byte RXHP_flag;
+ u1Byte PSD_func_trigger;
+ u1Byte PSD_bitmap_RXHP[80];
+ u1Byte Pre_IGI;
+ u1Byte Cur_IGI;
+ u1Byte Pre_pw_th;
+ u1Byte Cur_pw_th;
+ BOOLEAN First_time_enter;
+ BOOLEAN RXHP_enable;
+ u1Byte TP_Mode;
+ RT_TIMER PSDTimer;
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+ #if USE_WORKITEM
+ RT_WORK_ITEM PSDTimeWorkitem;
+ #endif
+#endif
+
+}RXHP_T, *pRXHP_T;
+
+#if(DM_ODM_SUPPORT_TYPE & (ODM_CE))
+#define ASSOCIATE_ENTRY_NUM 32 // Max size of AsocEntry[].
+#define ODM_ASSOCIATE_ENTRY_NUM ASSOCIATE_ENTRY_NUM
+
+#elif(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+#define ASSOCIATE_ENTRY_NUM NUM_STAT
+#define ODM_ASSOCIATE_ENTRY_NUM ASSOCIATE_ENTRY_NUM+1
+
+#else
+//
+// 2012/01/12 MH Revise for compatiable with other SW team.
+// 0 is for STA 1-n is for AP clients.
+//
+#define ODM_ASSOCIATE_ENTRY_NUM ASSOCIATE_ENTRY_NUM+1// Default port only one
+#endif
+
+//#ifdef CONFIG_ANTENNA_DIVERSITY
+// This indicates two different the steps.
+// In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air.
+// In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK
+// with original RSSI to determine if it is necessary to switch antenna.
+#define SWAW_STEP_PEAK 0
+#define SWAW_STEP_DETERMINE 1
+
+#define TP_MODE 0
+#define RSSI_MODE 1
+#define TRAFFIC_LOW 0
+#define TRAFFIC_HIGH 1
+
+typedef struct _SW_Antenna_Switch_
+{
+ u1Byte try_flag;
+ s4Byte PreRSSI;
+ u1Byte CurAntenna;
+ u1Byte PreAntenna;
+ u1Byte RSSI_Trying;
+ u1Byte TestMode;
+ u1Byte bTriggerAntennaSwitch;
+ u1Byte SelectAntennaMap;
+ u1Byte RSSI_target;
+
+ // Before link Antenna Switch check
+ u1Byte SWAS_NoLink_State;
+ u4Byte SWAS_NoLink_BK_Reg860;
+ BOOLEAN ANTA_ON; //To indicate Ant A is or not
+ BOOLEAN ANTB_ON; //To indicate Ant B is on or not
+
+ s4Byte RSSI_sum_A;
+ s4Byte RSSI_sum_B;
+ s4Byte RSSI_cnt_A;
+ s4Byte RSSI_cnt_B;
+
+ u8Byte lastTxOkCnt;
+ u8Byte lastRxOkCnt;
+ u8Byte TXByteCnt_A;
+ u8Byte TXByteCnt_B;
+ u8Byte RXByteCnt_A;
+ u8Byte RXByteCnt_B;
+ u1Byte TrafficLoad;
+ RT_TIMER SwAntennaSwitchTimer;
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+ #if USE_WORKITEM
+ RT_WORK_ITEM SwAntennaSwitchWorkitem;
+ #endif
+#endif
+/* CE Platform use
+#ifdef CONFIG_SW_ANTENNA_DIVERSITY
+ _timer SwAntennaSwitchTimer;
+ u8Byte lastTxOkCnt;
+ u8Byte lastRxOkCnt;
+ u8Byte TXByteCnt_A;
+ u8Byte TXByteCnt_B;
+ u8Byte RXByteCnt_A;
+ u8Byte RXByteCnt_B;
+ u1Byte DoubleComfirm;
+ u1Byte TrafficLoad;
+ //SW Antenna Switch
+
+
+#endif
+*/
+#ifdef CONFIG_HW_ANTENNA_DIVERSITY
+ //Hybrid Antenna Diversity
+ u4Byte CCK_Ant1_Cnt[ASSOCIATE_ENTRY_NUM];
+ u4Byte CCK_Ant2_Cnt[ASSOCIATE_ENTRY_NUM];
+ u4Byte OFDM_Ant1_Cnt[ASSOCIATE_ENTRY_NUM];
+ u4Byte OFDM_Ant2_Cnt[ASSOCIATE_ENTRY_NUM];
+ u4Byte RSSI_Ant1_Sum[ASSOCIATE_ENTRY_NUM];
+ u4Byte RSSI_Ant2_Sum[ASSOCIATE_ENTRY_NUM];
+ u1Byte TxAnt[ASSOCIATE_ENTRY_NUM];
+ u1Byte TargetSTA;
+ u1Byte antsel;
+ u1Byte RxIdleAnt;
+
+#endif
+
+}SWAT_T, *pSWAT_T;
+//#endif
+
+typedef struct _EDCA_TURBO_
+{
+ BOOLEAN bCurrentTurboEDCA;
+ BOOLEAN bIsCurRDLState;
+ #if(DM_ODM_SUPPORT_TYPE == ODM_CE )
+ u4Byte prv_traffic_idx; // edca turbo
+ #endif
+
+}EDCA_T,*pEDCA_T;
+
+typedef struct _ODM_RATE_ADAPTIVE
+{
+ u1Byte Type; // DM_Type_ByFW/DM_Type_ByDriver
+ u1Byte HighRSSIThresh; // if RSSI > HighRSSIThresh => RATRState is DM_RATR_STA_HIGH
+ u1Byte LowRSSIThresh; // if RSSI <= LowRSSIThresh => RATRState is DM_RATR_STA_LOW
+ u1Byte RATRState; // Current RSSI level, DM_RATR_STA_HIGH/DM_RATR_STA_MIDDLE/DM_RATR_STA_LOW
+ u4Byte LastRATR; // RATR Register Content
+
+} ODM_RATE_ADAPTIVE, *PODM_RATE_ADAPTIVE;
+
+
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+
+
+#ifdef ADSL_AP_BUILD_WORKAROUND
+#define MAX_TOLERANCE 5
+#define IQK_DELAY_TIME 1 //ms
+#endif
+
+//
+// Indicate different AP vendor for IOT issue.
+//
+typedef enum _HT_IOT_PEER
+{
+ HT_IOT_PEER_UNKNOWN = 0,
+ HT_IOT_PEER_REALTEK = 1,
+ HT_IOT_PEER_REALTEK_92SE = 2,
+ HT_IOT_PEER_BROADCOM = 3,
+ HT_IOT_PEER_RALINK = 4,
+ HT_IOT_PEER_ATHEROS = 5,
+ HT_IOT_PEER_CISCO = 6,
+ HT_IOT_PEER_MERU = 7,
+ HT_IOT_PEER_MARVELL = 8,
+ HT_IOT_PEER_REALTEK_SOFTAP = 9,// peer is RealTek SOFT_AP, by Bohn, 2009.12.17
+ HT_IOT_PEER_SELF_SOFTAP = 10, // Self is SoftAP
+ HT_IOT_PEER_AIRGO = 11,
+ HT_IOT_PEER_INTEL = 12,
+ HT_IOT_PEER_RTK_APCLIENT = 13,
+ HT_IOT_PEER_REALTEK_81XX = 14,
+ HT_IOT_PEER_REALTEK_WOW = 15,
+ HT_IOT_PEER_MAX = 16
+}HT_IOT_PEER_E, *PHTIOT_PEER_E;
+#endif//#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+
+
+
+#define IQK_MAC_REG_NUM 4
+#define IQK_ADDA_REG_NUM 16
+#define IQK_BB_REG_NUM_MAX 10
+#if (RTL8192D_SUPPORT==1)
+#define IQK_BB_REG_NUM 10
+#else
+#define IQK_BB_REG_NUM 9
+#endif
+#define HP_THERMAL_NUM 8
+
+#define AVG_THERMAL_NUM 8
+#define IQK_Matrix_REG_NUM 8
+#define IQK_Matrix_Settings_NUM 1+24+21
+
+#define DM_Type_ByFW 0
+#define DM_Type_ByDriver 1
+
+//
+// Declare for common info
+//
+// Declare for common info
+//
+#define MAX_PATH_NUM_92CS 2
+
+typedef struct _ODM_Phy_Status_Info_
+{
+ u1Byte RxPWDBAll;
+ u1Byte SignalQuality; // in 0-100 index.
+ u1Byte RxMIMOSignalQuality[MAX_PATH_NUM_92CS]; //EVM
+ u1Byte RxMIMOSignalStrength[MAX_PATH_NUM_92CS];// in 0~100 index
+#if (DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_CE))
+ s1Byte RxPower; // in dBm Translate from PWdB
+ s1Byte RecvSignalPower;// Real power in dBm for this packet, no beautification and aggregation. Keep this raw info to be used for the other procedures.
+ u1Byte BTRxRSSIPercentage;
+ u1Byte SignalStrength; // in 0-100 index.
+ u1Byte RxPwr[MAX_PATH_NUM_92CS];//per-path's pwdb
+#endif
+ u1Byte RxSNR[MAX_PATH_NUM_92CS];//per-path's SNR
+}ODM_PHY_INFO_T,*PODM_PHY_INFO_T;
+
+
+typedef struct _ODM_Phy_Dbg_Info_
+{
+ //ODM Write,debug info
+ s1Byte RxSNRdB[MAX_PATH_NUM_92CS];
+ u8Byte NumQryPhyStatus;
+ u8Byte NumQryPhyStatusCCK;
+ u8Byte NumQryPhyStatusOFDM;
+ u1Byte NumQryBeaconPkt;
+ //Others
+ s4Byte RxEVM[MAX_PATH_NUM_92CS];
+
+}ODM_PHY_DBG_INFO_T;
+
+
+typedef struct _ODM_Per_Pkt_Info_
+{
+ u1Byte Rate;
+ u1Byte StationID;
+ BOOLEAN bPacketMatchBSSID;
+ BOOLEAN bPacketToSelf;
+ BOOLEAN bPacketBeacon;
+}ODM_PACKET_INFO_T,*PODM_PACKET_INFO_T;
+
+typedef struct _ODM_Mac_Status_Info_
+{
+ u1Byte test;
+
+}ODM_MAC_INFO;
+
+
+typedef enum tag_Dynamic_ODM_Support_Ability_Type
+{
+ // BB Team
+ ODM_DIG = 0x00000001,
+ ODM_HIGH_POWER = 0x00000002,
+ ODM_CCK_CCA_TH = 0x00000004,
+ ODM_FA_STATISTICS = 0x00000008,
+ ODM_RAMASK = 0x00000010,
+ ODM_RSSI_MONITOR = 0x00000020,
+ ODM_SW_ANTDIV = 0x00000040,
+ ODM_HW_ANTDIV = 0x00000080,
+ ODM_BB_PWRSV = 0x00000100,
+ ODM_2TPATHDIV = 0x00000200,
+ ODM_1TPATHDIV = 0x00000400,
+ ODM_PSD2AFH = 0x00000800
+}ODM_Ability_E;
+
+//
+// 2011/20/20 MH For MP driver RT_WLAN_STA = STA_INFO_T
+// Please declare below ODM relative info in your STA info structure.
+//
+#if 1
+typedef struct _ODM_STA_INFO{
+ // Driver Write
+ BOOLEAN bUsed; // record the sta status link or not?
+ //u1Byte WirelessMode; //
+ u1Byte IOTPeer; // Enum value. HT_IOT_PEER_E
+
+ // ODM Write
+ //1 PHY_STATUS_INFO
+ u1Byte RSSI_Path[4]; //
+ u1Byte RSSI_Ave;
+ u1Byte RXEVM[4];
+ u1Byte RXSNR[4];
+
+ // ODM Write
+ //1 TX_INFO (may changed by IC)
+ //TX_INFO_T pTxInfo; // Define in IC folder. Move lower layer.
+#if 0
+ u1Byte ANTSEL_A; //in Jagar: 4bit; others: 2bit
+ u1Byte ANTSEL_B; //in Jagar: 4bit; others: 2bit
+ u1Byte ANTSEL_C; //only in Jagar: 4bit
+ u1Byte ANTSEL_D; //only in Jagar: 4bit
+ u1Byte TX_ANTL; //not in Jagar: 2bit
+ u1Byte TX_ANT_HT; //not in Jagar: 2bit
+ u1Byte TX_ANT_CCK; //not in Jagar: 2bit
+ u1Byte TXAGC_A; //not in Jagar: 4bit
+ u1Byte TXAGC_B; //not in Jagar: 4bit
+ u1Byte TXPWR_OFFSET; //only in Jagar: 3bit
+ u1Byte TX_ANT; //only in Jagar: 4bit for TX_ANTL/TX_ANTHT/TX_ANT_CCK
+#endif
+
+ //
+ // Please use compile flag to disabe the strcutrue for other IC except 88E.
+ // Move To lower layer.
+ //
+ // ODM Write Wilson will handle this part(said by Luke.Lee)
+ //TX_RPT_T pTxRpt; // Define in IC folder. Move lower layer.
+#if 0
+ //1 For 88E RA (don't redefine the naming)
+ u1Byte rate_id;
+ u1Byte rate_SGI;
+ u1Byte rssi_sta_ra;
+ u1Byte SGI_enable;
+ u1Byte Decision_rate;
+ u1Byte Pre_rate;
+ u1Byte Active;
+
+ // Driver write Wilson handle.
+ //1 TX_RPT (don't redefine the naming)
+ u2Byte RTY[4]; // ???
+ u2Byte TOTAL; // ???
+ u2Byte DROP; // ???
+ //
+ // Please use compile flag to disabe the strcutrue for other IC except 88E.
+ //
+#endif
+
+}ODM_STA_INFO_T, *PODM_STA_INFO_T;
+#endif
+
+//
+// 2011/10/20 MH Define Common info enum for all team.
+//
+typedef enum _ODM_Common_Info_Definition
+{
+//-------------REMOVED CASE-----------//
+ //ODM_CMNINFO_CCK_HP,
+ //ODM_CMNINFO_RFPATH_ENABLE, // Define as ODM write???
+ //ODM_CMNINFO_BT_COEXIST, // ODM_BT_COEXIST_E
+ //ODM_CMNINFO_OP_MODE, // ODM_OPERATION_MODE_E
+//-------------REMOVED CASE-----------//
+
+ //
+ // Fixed value:
+ //
+
+ //-----------HOOK BEFORE REG INIT-----------//
+ ODM_CMNINFO_PLATFORM = 0,
+ ODM_CMNINFO_ABILITY, // ODM_ABILITY_E
+ ODM_CMNINFO_INTERFACE, // ODM_INTERFACE_E
+ ODM_CMNINFO_MP_TEST_CHIP,
+ ODM_CMNINFO_IC_TYPE, // ODM_IC_TYPE_E
+ ODM_CMNINFO_CUT_VER, // ODM_CUT_VERSION_E
+ ODM_CMNINFO_FAB_VER, // ODM_FAB_E
+ ODM_CMNINFO_RF_TYPE, // ODM_RF_PATH_E or ODM_RF_TYPE_E?
+ ODM_CMNINFO_BOARD_TYPE, // ODM_BOARD_TYPE_E
+ ODM_CMNINFO_EXT_LNA, // TRUE
+ ODM_CMNINFO_EXT_PA,
+ ODM_CMNINFO_EXT_TRSW,
+ ODM_CMNINFO_PATCH_ID, //CUSTOMER ID
+ ODM_CMNINFO_BINHCT_TEST,
+ ODM_CMNINFO_BWIFI_TEST,
+ ODM_CMNINFO_SMART_CONCURRENT,
+ //-----------HOOK BEFORE REG INIT-----------//
+
+
+ //
+ // Dynamic value:
+ //
+//--------- POINTER REFERENCE-----------//
+ ODM_CMNINFO_MAC_PHY_MODE, // ODM_MAC_PHY_MODE_E
+ ODM_CMNINFO_TX_UNI,
+ ODM_CMNINFO_RX_UNI,
+ ODM_CMNINFO_WM_MODE, // ODM_WIRELESS_MODE_E
+ ODM_CMNINFO_BAND, // ODM_BAND_TYPE_E
+ ODM_CMNINFO_SEC_CHNL_OFFSET, // ODM_SEC_CHNL_OFFSET_E
+ ODM_CMNINFO_SEC_MODE, // ODM_SECURITY_E
+ ODM_CMNINFO_BW, // ODM_BW_E
+ ODM_CMNINFO_CHNL,
+
+ ODM_CMNINFO_DMSP_GET_VALUE,
+ ODM_CMNINFO_BUDDY_ADAPTOR,
+ ODM_CMNINFO_DMSP_IS_MASTER,
+ ODM_CMNINFO_SCAN,
+ ODM_CMNINFO_POWER_SAVING,
+ ODM_CMNINFO_ONE_PATH_CCA, // ODM_CCA_PATH_E
+ ODM_CMNINFO_DRV_STOP,
+ ODM_CMNINFO_PNP_IN,
+ ODM_CMNINFO_INIT_ON,
+ ODM_CMNINFO_ANT_TEST,
+ ODM_CMNINFO_NET_CLOSED,
+ ODM_CMNINFO_MP_MODE,
+//--------- POINTER REFERENCE-----------//
+
+//------------CALL BY VALUE-------------//
+ ODM_CMNINFO_WIFI_DIRECT,
+ ODM_CMNINFO_WIFI_DISPLAY,
+ ODM_CMNINFO_LINK,
+ ODM_CMNINFO_RSSI_MIN,
+ ODM_CMNINFO_DBG_COMP, // u8Byte
+ ODM_CMNINFO_DBG_LEVEL, // u4Byte
+ ODM_CMNINFO_RA_THRESHOLD_HIGH, // u1Byte
+ ODM_CMNINFO_RA_THRESHOLD_LOW, // u1Byte
+ ODM_CMNINFO_RF_ANTENNA_TYPE, // u1Byte
+ ODM_CMNINFO_BT_DISABLED,
+ ODM_CMNINFO_BT_OPERATION,
+ ODM_CMNINFO_BT_DIG,
+ ODM_CMNINFO_BT_BUSY, //Check Bt is using or not//neil
+ ODM_CMNINFO_BT_DISABLE_EDCA,
+//------------CALL BY VALUE-------------//
+
+ //
+ // Dynamic ptr array hook itms.
+ //
+ ODM_CMNINFO_STA_STATUS,
+ ODM_CMNINFO_PHY_STATUS,
+ ODM_CMNINFO_MAC_STATUS,
+
+ ODM_CMNINFO_MAX,
+
+
+}ODM_CMNINFO_E;
+
+//
+// 2011/10/20 MH Define ODM support ability. ODM_CMNINFO_ABILITY
+//
+typedef enum _ODM_Support_Ability_Definition
+{
+ //
+ // BB ODM section BIT 0-15
+ //
+ ODM_BB_DIG = BIT0,
+ ODM_BB_RA_MASK = BIT1,
+ ODM_BB_DYNAMIC_TXPWR = BIT2,
+ ODM_BB_FA_CNT = BIT3,
+ ODM_BB_RSSI_MONITOR = BIT4,
+ ODM_BB_CCK_PD = BIT5,
+ ODM_BB_ANT_DIV = BIT6,
+ ODM_BB_PWR_SAVE = BIT7,
+ ODM_BB_PWR_TRAIN = BIT8,
+ ODM_BB_RATE_ADAPTIVE = BIT9,
+ ODM_BB_PATH_DIV = BIT10,
+ ODM_BB_PSD = BIT11,
+ ODM_BB_RXHP = BIT12,
+ ODM_BB_ADAPTIVITY = BIT13,
+ ODM_BB_DYNAMIC_ATC = BIT14,
+
+ //
+ // MAC DM section BIT 16-23
+ //
+ ODM_MAC_EDCA_TURBO = BIT16,
+ ODM_MAC_EARLY_MODE = BIT17,
+
+ //
+ // RF ODM section BIT 24-31
+ //
+ ODM_RF_TX_PWR_TRACK = BIT24,
+ ODM_RF_RX_GAIN_TRACK = BIT25,
+ ODM_RF_CALIBRATION = BIT26,
+
+}ODM_ABILITY_E;
+
+// ODM_CMNINFO_INTERFACE
+typedef enum tag_ODM_Support_Interface_Definition
+{
+ ODM_ITRF_PCIE = 0x1,
+ ODM_ITRF_USB = 0x2,
+ ODM_ITRF_SDIO = 0x4,
+ ODM_ITRF_ALL = 0x7,
+}ODM_INTERFACE_E;
+
+// ODM_CMNINFO_IC_TYPE
+typedef enum tag_ODM_Support_IC_Type_Definition
+{
+ ODM_RTL8192S = BIT0,
+ ODM_RTL8192C = BIT1,
+ ODM_RTL8192D = BIT2,
+ ODM_RTL8723A = BIT3,
+ ODM_RTL8188E = BIT4,
+ ODM_RTL8812 = BIT5,
+ ODM_RTL8821 = BIT6,
+ ODM_RTL8192E = BIT7,
+ ODM_RTL8723B = BIT8,
+ ODM_RTL8813A = BIT9,
+ ODM_RTL8881A = BIT10
+}ODM_IC_TYPE_E;
+
+#define ODM_IC_11N_SERIES (ODM_RTL8192S|ODM_RTL8192C|ODM_RTL8192D|ODM_RTL8723A|ODM_RTL8188E)
+#define ODM_IC_11AC_SERIES (ODM_RTL8812)
+
+//ODM_CMNINFO_CUT_VER
+typedef enum tag_ODM_Cut_Version_Definition
+{
+ ODM_CUT_A = 1,
+ ODM_CUT_B = 2,
+ ODM_CUT_C = 3,
+ ODM_CUT_D = 4,
+ ODM_CUT_E = 5,
+ ODM_CUT_F = 6,
+ ODM_CUT_TEST = 7,
+}ODM_CUT_VERSION_E;
+
+// ODM_CMNINFO_FAB_VER
+typedef enum tag_ODM_Fab_Version_Definition
+{
+ ODM_TSMC = 0,
+ ODM_UMC = 1,
+}ODM_FAB_E;
+
+// ODM_CMNINFO_RF_TYPE
+//
+// For example 1T2R (A+AB = BIT0|BIT4|BIT5)
+//
+typedef enum tag_ODM_RF_Path_Bit_Definition
+{
+ ODM_RF_TX_A = BIT0,
+ ODM_RF_TX_B = BIT1,
+ ODM_RF_TX_C = BIT2,
+ ODM_RF_TX_D = BIT3,
+ ODM_RF_RX_A = BIT4,
+ ODM_RF_RX_B = BIT5,
+ ODM_RF_RX_C = BIT6,
+ ODM_RF_RX_D = BIT7,
+}ODM_RF_PATH_E;
+
+
+typedef enum tag_ODM_RF_Type_Definition
+{
+ ODM_1T1R = 0,
+ ODM_1T2R = 1,
+ ODM_2T2R = 2,
+ ODM_2T3R = 3,
+ ODM_2T4R = 4,
+ ODM_3T3R = 5,
+ ODM_3T4R = 6,
+ ODM_4T4R = 7,
+}ODM_RF_TYPE_E;
+
+
+//
+// ODM Dynamic common info value definition
+//
+
+//typedef enum _MACPHY_MODE_8192D{
+// SINGLEMAC_SINGLEPHY,
+// DUALMAC_DUALPHY,
+// DUALMAC_SINGLEPHY,
+//}MACPHY_MODE_8192D,*PMACPHY_MODE_8192D;
+// Above is the original define in MP driver. Please use the same define. THX.
+typedef enum tag_ODM_MAC_PHY_Mode_Definition
+{
+ ODM_SMSP = 0,
+ ODM_DMSP = 1,
+ ODM_DMDP = 2,
+}ODM_MAC_PHY_MODE_E;
+
+
+typedef enum tag_BT_Coexist_Definition
+{
+ ODM_BT_BUSY = 1,
+ ODM_BT_ON = 2,
+ ODM_BT_OFF = 3,
+ ODM_BT_NONE = 4,
+}ODM_BT_COEXIST_E;
+
+// ODM_CMNINFO_OP_MODE
+typedef enum tag_Operation_Mode_Definition
+{
+ ODM_NO_LINK = BIT0,
+ ODM_LINK = BIT1,
+ ODM_SCAN = BIT2,
+ ODM_POWERSAVE = BIT3,
+ ODM_AP_MODE = BIT4,
+ ODM_CLIENT_MODE = BIT5,
+ ODM_AD_HOC = BIT6,
+ ODM_WIFI_DIRECT = BIT7,
+ ODM_WIFI_DISPLAY = BIT8,
+}ODM_OPERATION_MODE_E;
+
+// ODM_CMNINFO_WM_MODE
+typedef enum tag_Wireless_Mode_Definition
+{
+ ODM_WM_UNKNOW = 0x0,
+ ODM_WM_B = BIT0,
+ ODM_WM_G = BIT1,
+ ODM_WM_A = BIT2,
+ ODM_WM_N24G = BIT3,
+ ODM_WM_N5G = BIT4,
+ ODM_WM_AUTO = BIT5,
+ ODM_WM_AC = BIT6,
+}ODM_WIRELESS_MODE_E;
+
+// ODM_CMNINFO_BAND
+typedef enum tag_Band_Type_Definition
+{
+ ODM_BAND_2_4G = BIT0,
+ ODM_BAND_5G = BIT1,
+
+}ODM_BAND_TYPE_E;
+
+// ODM_CMNINFO_SEC_CHNL_OFFSET
+typedef enum tag_Secondary_Channel_Offset_Definition
+{
+ ODM_DONT_CARE = 0,
+ ODM_BELOW = 1,
+ ODM_ABOVE = 2
+}ODM_SEC_CHNL_OFFSET_E;
+
+// ODM_CMNINFO_SEC_MODE
+typedef enum tag_Security_Definition
+{
+ ODM_SEC_OPEN = 0,
+ ODM_SEC_WEP40 = 1,
+ ODM_SEC_TKIP = 2,
+ ODM_SEC_RESERVE = 3,
+ ODM_SEC_AESCCMP = 4,
+ ODM_SEC_WEP104 = 5,
+ ODM_WEP_WPA_MIXED = 6, // WEP + WPA
+ ODM_SEC_SMS4 = 7,
+}ODM_SECURITY_E;
+
+// ODM_CMNINFO_BW
+typedef enum tag_Bandwidth_Definition
+{
+ ODM_BW20M = 0,
+ ODM_BW40M = 1,
+ ODM_BW80M = 2,
+ ODM_BW160M = 3,
+ ODM_BW10M = 4,
+}ODM_BW_E;
+
+// ODM_CMNINFO_CHNL
+
+// ODM_CMNINFO_BOARD_TYPE
+#if 1
+typedef enum tag_Board_Definition
+{
+ ODM_BOARD_DEFAULT = 0, // The DEFAULT case.
+ ODM_BOARD_MINICARD = BIT(0), // 0 = non-mini card, 1= mini card.
+ ODM_BOARD_SLIM = BIT(1), // 0 = non-slim card, 1 = slim card
+ ODM_BOARD_BT = BIT(2), // 0 = without BT card, 1 = with BT
+ ODM_BOARD_EXT_PA = BIT(3), // 0 = no 2G ext-PA, 1 = existing 2G ext-PA
+ ODM_BOARD_EXT_LNA = BIT(4), // 0 = no 2G ext-LNA, 1 = existing 2G ext-LNA
+ ODM_BOARD_EXT_TRSW = BIT(5), // 0 = no ext-TRSW, 1 = existing ext-TRSW
+ ODM_BOARD_EXT_PA_5G = BIT(6), // 0 = no 5G ext-PA, 1 = existing 5G ext-PA
+ ODM_BOARD_EXT_LNA_5G = BIT(7), // 0 = no 5G ext-LNA, 1 = existing 5G ext-LNA
+}ODM_BOARD_TYPE_E;
+#else
+typedef enum tag_Board_Definition
+{
+ ODM_BOARD_NORMAL = 0,
+ ODM_BOARD_HIGHPWR = 1,
+ ODM_BOARD_MINICARD = 2,
+ ODM_BOARD_SLIM = 3,
+ ODM_BOARD_COMBO = 4,
+
+}ODM_BOARD_TYPE_E;
+#endif
+
+
+
+// ODM_CMNINFO_ONE_PATH_CCA
+typedef enum tag_CCA_Path
+{
+ ODM_CCA_2R = 0,
+ ODM_CCA_1R_A = 1,
+ ODM_CCA_1R_B = 2,
+}ODM_CCA_PATH_E;
+
+
+typedef struct _ODM_RA_Info_
+{
+ u1Byte RateID;
+ u4Byte RateMask;
+ u4Byte RAUseRate;
+ u1Byte RateSGI;
+ u1Byte RssiStaRA;
+ u1Byte PreRssiStaRA;
+ u1Byte SGIEnable;
+ u1Byte DecisionRate;
+ u1Byte PreRate;
+ u1Byte HighestRate;
+ u1Byte LowestRate;
+ u4Byte NscUp;
+ u4Byte NscDown;
+ u2Byte RTY[5];
+ u4Byte TOTAL;
+ u2Byte DROP;//Retry over or drop
+ u2Byte DROP1;//LifeTime over
+ u1Byte Active;
+ u2Byte RptTime;
+ u1Byte RAWaitingCounter;
+ u1Byte RAPendingCounter;
+#if 1 //POWER_TRAINING_ACTIVE == 1 // For compile pass only~!
+ u1Byte PTActive; // on or off
+ u1Byte PTTryState; // 0 trying state, 1 for decision state
+ u1Byte PTStage; // 0~6
+ u1Byte PTStopCount; //Stop PT counter
+ u1Byte PTPreRate; // if rate change do PT
+ u1Byte PTPreRssi; // if RSSI change 5% do PT
+ u1Byte PTModeSS; // decide whitch rate should do PT
+ u1Byte RAstage; // StageRA, decide how many times RA will be done between PT
+ u1Byte PTSmoothFactor;
+#endif
+} ODM_RA_INFO_T,*PODM_RA_INFO_T;
+
+typedef struct _IQK_MATRIX_REGS_SETTING{
+ BOOLEAN bIQKDone;
+ s4Byte Value[1][IQK_Matrix_REG_NUM];
+}IQK_MATRIX_REGS_SETTING,*PIQK_MATRIX_REGS_SETTING;
+
+#if (DM_ODM_SUPPORT_TYPE & ODM_MP)
+typedef struct _PathDiv_Parameter_define_
+{
+ u4Byte org_5g_RegE30;
+ u4Byte org_5g_RegC14;
+ u4Byte org_5g_RegCA0;
+ u4Byte swt_5g_RegE30;
+ u4Byte swt_5g_RegC14;
+ u4Byte swt_5g_RegCA0;
+ //for 2G IQK information
+ u4Byte org_2g_RegC80;
+ u4Byte org_2g_RegC4C;
+ u4Byte org_2g_RegC94;
+ u4Byte org_2g_RegC14;
+ u4Byte org_2g_RegCA0;
+
+ u4Byte swt_2g_RegC80;
+ u4Byte swt_2g_RegC4C;
+ u4Byte swt_2g_RegC94;
+ u4Byte swt_2g_RegC14;
+ u4Byte swt_2g_RegCA0;
+}PATHDIV_PARA,*pPATHDIV_PARA;
+#endif
+
+
+typedef struct ODM_RF_Calibration_Structure
+{
+ //for tx power tracking
+
+ u4Byte RegA24; // for TempCCK
+ s4Byte RegE94;
+ s4Byte RegE9C;
+ s4Byte RegEB4;
+ s4Byte RegEBC;
+
+ //u1Byte bTXPowerTracking;
+ u1Byte TXPowercount;
+ BOOLEAN bTXPowerTrackingInit;
+ BOOLEAN bTXPowerTracking;
+ u1Byte TxPowerTrackControl; //for mp mode, turn off txpwrtracking as default
+ u1Byte TM_Trigger;
+ u1Byte InternalPA5G[2]; //pathA / pathB
+
+ u1Byte ThermalMeter[2]; // ThermalMeter, index 0 for RFIC0, and 1 for RFIC1
+ u1Byte ThermalValue;
+ u1Byte ThermalValue_LCK;
+ u1Byte ThermalValue_IQK;
+ u1Byte ThermalValue_DPK;
+ u1Byte ThermalValue_AVG[AVG_THERMAL_NUM];
+ u1Byte ThermalValue_AVG_index;
+ u1Byte ThermalValue_RxGain;
+ u1Byte ThermalValue_Crystal;
+ u1Byte ThermalValue_DPKstore;
+ u1Byte ThermalValue_DPKtrack;
+ BOOLEAN TxPowerTrackingInProgress;
+ BOOLEAN bDPKenable;
+
+ BOOLEAN bReloadtxpowerindex;
+ u1Byte bRfPiEnable;
+ u4Byte TXPowerTrackingCallbackCnt; //cosa add for debug
+
+ u1Byte bCCKinCH14;
+ u1Byte CCK_index;
+ u1Byte OFDM_index[2];
+ BOOLEAN bDoneTxpower;
+ s1Byte PowerIndexOffset;
+ s1Byte DeltaPowerIndex;
+ s1Byte DeltaPowerIndexLast;
+ BOOLEAN bTxPowerChanged;
+
+ u1Byte ThermalValue_HP[HP_THERMAL_NUM];
+ u1Byte ThermalValue_HP_index;
+ IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];
+
+ u1Byte Delta_IQK;
+ u1Byte Delta_LCK;
+
+ //for IQK
+ u4Byte RegC04;
+ u4Byte Reg874;
+ u4Byte RegC08;
+ u4Byte RegB68;
+ u4Byte RegB6C;
+ u4Byte Reg870;
+ u4Byte Reg860;
+ u4Byte Reg864;
+
+ BOOLEAN bIQKInitialized;
+ BOOLEAN bLCKInProgress;
+ BOOLEAN bAntennaDetected;
+ u4Byte ADDA_backup[IQK_ADDA_REG_NUM];
+ u4Byte IQK_MAC_backup[IQK_MAC_REG_NUM];
+ u4Byte IQK_BB_backup_recover[9];
+ u4Byte IQK_BB_backup[IQK_BB_REG_NUM];
+
+ //for APK
+ u4Byte APKoutput[2][2]; //path A/B; output1_1a/output1_2a
+ u1Byte bAPKdone;
+ u1Byte bAPKThermalMeterIgnore;
+ u1Byte bDPdone;
+ u1Byte bDPPathAOK;
+ u1Byte bDPPathBOK;
+}ODM_RF_CAL_T,*PODM_RF_CAL_T;
+//
+// ODM Dynamic common info value definition
+//
+
+typedef struct _FAST_ANTENNA_TRAINNING_
+{
+ u1Byte Bssid[6];
+ u1Byte antsel_rx_keep_0;
+ u1Byte antsel_rx_keep_1;
+ u1Byte antsel_rx_keep_2;
+ u4Byte antSumRSSI[7];
+ u4Byte antRSSIcnt[7];
+ u4Byte antAveRSSI[7];
+ u1Byte FAT_State;
+ u4Byte TrainIdx;
+ u1Byte antsel_a[ODM_ASSOCIATE_ENTRY_NUM];
+ u1Byte antsel_b[ODM_ASSOCIATE_ENTRY_NUM];
+ u1Byte antsel_c[ODM_ASSOCIATE_ENTRY_NUM];
+ u4Byte MainAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];
+ u4Byte AuxAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];
+ u4Byte MainAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];
+ u4Byte AuxAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];
+ u1Byte RxIdleAnt;
+ BOOLEAN bBecomeLinked;
+
+}FAT_T,*pFAT_T;
+
+typedef enum _FAT_STATE
+{
+ FAT_NORMAL_STATE = 0,
+ FAT_TRAINING_STATE = 1,
+}FAT_STATE_E, *PFAT_STATE_E;
+
+typedef enum _ANT_DIV_TYPE
+{
+ NO_ANTDIV = 0xFF,
+ CG_TRX_HW_ANTDIV = 0x01,
+ CGCS_RX_HW_ANTDIV = 0x02,
+ FIXED_HW_ANTDIV = 0x03,
+ CG_TRX_SMART_ANTDIV = 0x04,
+ CGCS_RX_SW_ANTDIV = 0x05,
+
+}ANT_DIV_TYPE_E, *PANT_DIV_TYPE_E;
+
+
+
+
+
+
+
+
+
+
+
+
+
+//
+// 2011/09/22 MH Copy from SD4 defined structure. We use to support PHY DM integration.
+//
+#if(DM_ODM_SUPPORT_TYPE & ODM_MP)
+#if (RT_PLATFORM != PLATFORM_LINUX)
+typedef
+#endif
+struct DM_Out_Source_Dynamic_Mechanism_Structure
+#else// for AP,ADSL,CE Team
+typedef struct DM_Out_Source_Dynamic_Mechanism_Structure
+#endif
+{
+ //RT_TIMER FastAntTrainingTimer;
+ //
+ // Add for different team use temporarily
+ //
+ PADAPTER Adapter; // For CE/NIC team
+ prtl8192cd_priv priv; // For AP/ADSL team
+ // WHen you use Adapter or priv pointer, you must make sure the pointer is ready.
+ BOOLEAN odm_ready;
+
+#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
+ rtl8192cd_priv fake_priv;
+#endif
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ // ADSL_AP_BUILD_WORKAROUND
+ ADAPTER fake_adapter;
+#endif
+
+ u8Byte DebugComponents;
+ u4Byte DebugLevel;
+
+//------ ODM HANDLE, DRIVER NEEDS NOT TO HOOK------//
+ BOOLEAN bCckHighPower;
+ u1Byte RFPathRxEnable; // ODM_CMNINFO_RFPATH_ENABLE
+ u1Byte ControlChannel;
+//------ ODM HANDLE, DRIVER NEEDS NOT TO HOOK------//
+
+//--------REMOVED COMMON INFO----------//
+ //u1Byte PseudoMacPhyMode;
+ //BOOLEAN *BTCoexist;
+ //BOOLEAN PseudoBtCoexist;
+ //u1Byte OPMode;
+ //BOOLEAN bAPMode;
+ //BOOLEAN bClientMode;
+ //BOOLEAN bAdHocMode;
+ //BOOLEAN bSlaveOfDMSP;
+//--------REMOVED COMMON INFO----------//
+
+
+//1 COMMON INFORMATION
+
+ //
+ // Init Value
+ //
+//-----------HOOK BEFORE REG INIT-----------//
+ // ODM Platform info AP/ADSL/CE/MP = 1/2/3/4
+ u1Byte SupportPlatform;
+ // ODM Support Ability DIG/RATR/TX_PWR_TRACK/ ¡K¡K = 1/2/3/¡K
+ u4Byte SupportAbility;
+ // ODM PCIE/USB/SDIO/GSPI = 0/1/2/3
+ u1Byte SupportInterface;
+ // ODM composite or independent. Bit oriented/ 92C+92D+ .... or any other type = 1/2/3/...
+ u4Byte SupportICType;
+ // Cut Version TestChip/A-cut/B-cut... = 0/1/2/3/...
+ u1Byte CutVersion;
+ // Fab Version TSMC/UMC = 0/1
+ u1Byte FabVersion;
+ // RF Type 4T4R/3T3R/2T2R/1T2R/1T1R/...
+ u1Byte RFType;
+ // Board Type Normal/HighPower/MiniCard/SLIM/Combo/... = 0/1/2/3/4/...
+ u1Byte BoardType;
+ // with external LNA NO/Yes = 0/1
+ u1Byte ExtLNA;
+ // with external PA NO/Yes = 0/1
+ u1Byte ExtPA;
+ // with external TRSW NO/Yes = 0/1
+ u1Byte ExtTRSW;
+ u1Byte PatchID; //Customer ID
+ BOOLEAN bInHctTest;
+ BOOLEAN bWIFITest;
+
+ BOOLEAN bDualMacSmartConcurrent;
+ u4Byte BK_SupportAbility;
+ u1Byte AntDivType;
+//-----------HOOK BEFORE REG INIT-----------//
+
+ //
+ // Dynamic Value
+ //
+//--------- POINTER REFERENCE-----------//
+
+ u1Byte u1Byte_temp;
+ BOOLEAN BOOLEAN_temp;
+ PADAPTER PADAPTER_temp;
+
+ // MAC PHY Mode SMSP/DMSP/DMDP = 0/1/2
+ u1Byte *pMacPhyMode;
+ //TX Unicast byte count
+ u8Byte *pNumTxBytesUnicast;
+ //RX Unicast byte count
+ u8Byte *pNumRxBytesUnicast;
+ // Wireless mode B/G/A/N = BIT0/BIT1/BIT2/BIT3
+ u1Byte *pWirelessMode; //ODM_WIRELESS_MODE_E
+ // Frequence band 2.4G/5G = 0/1
+ u1Byte *pBandType;
+ // Secondary channel offset don't_care/below/above = 0/1/2
+ u1Byte *pSecChOffset;
+ // Security mode Open/WEP/AES/TKIP = 0/1/2/3
+ u1Byte *pSecurity;
+ // BW info 20M/40M/80M = 0/1/2
+ u1Byte *pBandWidth;
+ // Central channel location Ch1/Ch2/....
+ u1Byte *pChannel; //central channel number
+ // Common info for 92D DMSP
+
+ BOOLEAN *pbGetValueFromOtherMac;
+ PADAPTER *pBuddyAdapter;
+ BOOLEAN *pbMasterOfDMSP; //MAC0: master, MAC1: slave
+ // Common info for Status
+ BOOLEAN *pbScanInProcess;
+ BOOLEAN *pbPowerSaving;
+ // CCA Path 2-path/path-A/path-B = 0/1/2; using ODM_CCA_PATH_E.
+ u1Byte *pOnePathCCA;
+ //pMgntInfo->AntennaTest
+ u1Byte *pAntennaTest;
+ BOOLEAN *pbNet_closed;
+//--------- POINTER REFERENCE-----------//
+ //
+//------------CALL BY VALUE-------------//
+ BOOLEAN bLinkInProcess;
+ BOOLEAN bWIFI_Direct;
+ BOOLEAN bWIFI_Display;
+ BOOLEAN bLinked;
+ u1Byte RSSI_Min;
+ u1Byte InterfaceIndex; // Add for 92D dual MAC: 0--Mac0 1--Mac1
+ BOOLEAN bIsMPChip;
+ BOOLEAN bOneEntryOnly;
+ // Common info for BTDM
+ BOOLEAN bBtDisabled; // BT is disabled
+ BOOLEAN bBtConnectProcess; // BT HS is under connection progress.
+ u1Byte btHsRssi; // BT HS mode wifi rssi value.
+ BOOLEAN bBtHsOperation; // BT HS mode is under progress
+ u1Byte btHsDigVal; // use BT rssi to decide the DIG value
+ BOOLEAN bBtDisableEdcaTurbo; // Under some condition, don't enable the EDCA Turbo
+ BOOLEAN bBtLimitedDig; // BT is busy.
+//------------CALL BY VALUE-------------//
+ u1Byte RSSI_A;
+ u1Byte RSSI_B;
+ u8Byte RSSI_TRSW;
+ u8Byte RSSI_TRSW_H;
+ u8Byte RSSI_TRSW_L;
+ u8Byte RSSI_TRSW_iso;
+
+ u1Byte RxRate;
+ BOOLEAN StopDIG;
+ u1Byte TxRate;
+ u1Byte LinkedInterval;
+ u1Byte preChannel;
+ u4Byte TxagcOffsetValueA;
+ BOOLEAN IsTxagcOffsetPositiveA;
+ u4Byte TxagcOffsetValueB;
+ BOOLEAN IsTxagcOffsetPositiveB;
+ u8Byte lastTxOkCnt;
+ u8Byte lastRxOkCnt;
+ u4Byte BbSwingOffsetA;
+ BOOLEAN IsBbSwingOffsetPositiveA;
+ u4Byte BbSwingOffsetB;
+ BOOLEAN IsBbSwingOffsetPositiveB;
+ s1Byte TH_L2H_ini;
+ s1Byte TH_EDCCA_HL_diff;
+ u4Byte IGI_Base;
+ u4Byte IGI_target;
+ BOOLEAN ForceEDCCA;
+ u1Byte AdapEn_RSSI;
+ u1Byte AntType;
+ u1Byte antdiv_rssi;
+ u1Byte antdiv_period;
+ u4Byte Force_TH_H;
+ u4Byte Force_TH_L;
+ u1Byte IGI_LowerBound;
+
+ //2 Define STA info.
+ // _ODM_STA_INFO
+ // 2012/01/12 MH For MP, we need to reduce one array pointer for default port.??
+ PSTA_INFO_T pODM_StaInfo[ODM_ASSOCIATE_ENTRY_NUM];
+
+#if (RATE_ADAPTIVE_SUPPORT == 1)
+ u2Byte CurrminRptTime;
+ ODM_RA_INFO_T RAInfo[ODM_ASSOCIATE_ENTRY_NUM]; //Use MacID as array index. STA MacID=0, VWiFi Client MacID={1, ODM_ASSOCIATE_ENTRY_NUM-1} //YJ,add,120119
+#endif
+ //
+ // 2012/02/14 MH Add to share 88E ra with other SW team.
+ // We need to colelct all support abilit to a proper area.
+ //
+ BOOLEAN RaSupport88E;
+
+ // Define ...........
+
+ // Latest packet phy info (ODM write)
+ ODM_PHY_DBG_INFO_T PhyDbgInfo;
+ //PHY_INFO_88E PhyInfo;
+
+ // Latest packet phy info (ODM write)
+ ODM_MAC_INFO *pMacInfo;
+ //MAC_INFO_88E MacInfo;
+
+ // Different Team independt structure??
+
+ //
+ //TX_RTP_CMN TX_retrpo;
+ //TX_RTP_88E TX_retrpo;
+ //TX_RTP_8195 TX_retrpo;
+
+ //
+ //ODM Structure
+ //
+ FAT_T DM_FatTable;
+ DIG_T DM_DigTable;
+ PS_T DM_PSTable;
+ Pri_CCA_T DM_PriCCA;
+ RXHP_T DM_RXHP_Table;
+ FALSE_ALARM_STATISTICS FalseAlmCnt;
+ FALSE_ALARM_STATISTICS FlaseAlmCntBuddyAdapter;
+ //#ifdef CONFIG_ANTENNA_DIVERSITY
+ SWAT_T DM_SWAT_Table;
+ BOOLEAN RSSI_test;
+ //#endif
+
+#if (DM_ODM_SUPPORT_TYPE & ODM_MP)
+ //Path Div Struct
+ PATHDIV_PARA pathIQK;
+#endif
+
+ EDCA_T DM_EDCA_Table;
+ u4Byte WMMEDCA_BE;
+ // Copy from SD4 structure
+ //
+ // ==================================================
+ //
+
+ //common
+ //u1Byte DM_Type;
+ //u1Byte PSD_Report_RXHP[80]; // Add By Gary
+ //u1Byte PSD_func_flag; // Add By Gary
+ //for DIG
+ //u1Byte bDMInitialGainEnable;
+ //u1Byte binitialized; // for dm_initial_gain_Multi_STA use.
+ //for Antenna diversity
+ //u8 AntDivCfg;// 0:OFF , 1:ON, 2:by efuse
+ //PSTA_INFO_T RSSI_target;
+
+ BOOLEAN *pbDriverStopped;
+ BOOLEAN *pbDriverIsGoingToPnpSetPowerSleep;
+ BOOLEAN *pinit_adpt_in_progress;
+
+ //PSD
+ BOOLEAN bUserAssignLevel;
+ RT_TIMER PSDTimer;
+ u1Byte RSSI_BT; //come from BT
+ BOOLEAN bPSDinProcess;
+ BOOLEAN bDMInitialGainEnable;
+
+ //for rate adaptive, in fact, 88c/92c fw will handle this
+ u1Byte bUseRAMask;
+
+ ODM_RATE_ADAPTIVE RateAdaptive;
+
+
+ ODM_RF_CAL_T RFCalibrateInfo;
+
+ //
+ // TX power tracking
+ //
+ u1Byte BbSwingIdxOfdm;
+ u1Byte BbSwingIdxOfdmCurrent;
+ u1Byte BbSwingIdxOfdmBase;
+ BOOLEAN BbSwingFlagOfdm;
+ u1Byte BbSwingIdxCck;
+ u1Byte BbSwingIdxCckCurrent;
+ u1Byte BbSwingIdxCckBase;
+ u1Byte DefaultOfdmIndex;
+ u1Byte DefaultCckIndex;
+ BOOLEAN BbSwingFlagCck;
+
+
+ u1Byte *mp_mode;
+ //
+ // ODM system resource.
+ //
+
+ // ODM relative time.
+ RT_TIMER PathDivSwitchTimer;
+ //2011.09.27 add for Path Diversity
+ RT_TIMER CCKPathDiversityTimer;
+ RT_TIMER FastAntTrainingTimer;
+
+ // ODM relative workitem.
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+ #if USE_WORKITEM
+ RT_WORK_ITEM PathDivSwitchWorkitem;
+ RT_WORK_ITEM CCKPathDiversityWorkitem;
+ RT_WORK_ITEM FastAntTrainingWorkitem;
+ #endif
+#endif
+
+#if(DM_ODM_SUPPORT_TYPE & ODM_MP)
+
+#if (RT_PLATFORM != PLATFORM_LINUX)
+} DM_ODM_T, *PDM_ODM_T; // DM_Dynamic_Mechanism_Structure
+#else
+};
+#endif
+
+#else// for AP,ADSL,CE Team
+} DM_ODM_T, *PDM_ODM_T; // DM_Dynamic_Mechanism_Structure
+#endif
+
+
+
+#if 1 //92c-series
+#define ODM_RF_PATH_MAX 2
+#else //jaguar - series
+#define ODM_RF_PATH_MAX 4
+#endif
+
+typedef enum _ODM_RF_RADIO_PATH {
+ ODM_RF_PATH_A = 0, //Radio Path A
+ ODM_RF_PATH_B = 1, //Radio Path B
+ ODM_RF_PATH_C = 2, //Radio Path C
+ ODM_RF_PATH_D = 3, //Radio Path D
+ // ODM_RF_PATH_MAX, //Max RF number 90 support
+} ODM_RF_RADIO_PATH_E, *PODM_RF_RADIO_PATH_E;
+
+ typedef enum _ODM_RF_CONTENT{
+ odm_radioa_txt = 0x1000,
+ odm_radiob_txt = 0x1001,
+ odm_radioc_txt = 0x1002,
+ odm_radiod_txt = 0x1003
+} ODM_RF_CONTENT;
+
+typedef enum _ODM_BB_Config_Type{
+ CONFIG_BB_PHY_REG,
+ CONFIG_BB_AGC_TAB,
+ CONFIG_BB_AGC_TAB_2G,
+ CONFIG_BB_AGC_TAB_5G,
+ CONFIG_BB_PHY_REG_PG,
+} ODM_BB_Config_Type, *PODM_BB_Config_Type;
+
+// Status code
+#if (DM_ODM_SUPPORT_TYPE != ODM_MP)
+typedef enum _RT_STATUS{
+ RT_STATUS_SUCCESS,
+ RT_STATUS_FAILURE,
+ RT_STATUS_PENDING,
+ RT_STATUS_RESOURCE,
+ RT_STATUS_INVALID_CONTEXT,
+ RT_STATUS_INVALID_PARAMETER,
+ RT_STATUS_NOT_SUPPORT,
+ RT_STATUS_OS_API_FAILED,
+}RT_STATUS,*PRT_STATUS;
+#endif // end of RT_STATUS definition
+
+#ifdef REMOVE_PACK
+#pragma pack()
+#endif
+
+//#include "odm_function.h"
+
+//3===========================================================
+//3 DIG
+//3===========================================================
+
+typedef enum tag_Dynamic_Init_Gain_Operation_Type_Definition
+{
+ DIG_TYPE_THRESH_HIGH = 0,
+ DIG_TYPE_THRESH_LOW = 1,
+ DIG_TYPE_BACKOFF = 2,
+ DIG_TYPE_RX_GAIN_MIN = 3,
+ DIG_TYPE_RX_GAIN_MAX = 4,
+ DIG_TYPE_ENABLE = 5,
+ DIG_TYPE_DISABLE = 6,
+ DIG_OP_TYPE_MAX
+}DM_DIG_OP_E;
+/*
+typedef enum tag_CCK_Packet_Detection_Threshold_Type_Definition
+{
+ CCK_PD_STAGE_LowRssi = 0,
+ CCK_PD_STAGE_HighRssi = 1,
+ CCK_PD_STAGE_MAX = 3,
+}DM_CCK_PDTH_E;
+
+typedef enum tag_DIG_EXT_PORT_ALGO_Definition
+{
+ DIG_EXT_PORT_STAGE_0 = 0,
+ DIG_EXT_PORT_STAGE_1 = 1,
+ DIG_EXT_PORT_STAGE_2 = 2,
+ DIG_EXT_PORT_STAGE_3 = 3,
+ DIG_EXT_PORT_STAGE_MAX = 4,
+}DM_DIG_EXT_PORT_ALG_E;
+
+typedef enum tag_DIG_Connect_Definition
+{
+ DIG_STA_DISCONNECT = 0,
+ DIG_STA_CONNECT = 1,
+ DIG_STA_BEFORE_CONNECT = 2,
+ DIG_MultiSTA_DISCONNECT = 3,
+ DIG_MultiSTA_CONNECT = 4,
+ DIG_CONNECT_MAX
+}DM_DIG_CONNECT_E;
+
+
+#define DM_MultiSTA_InitGainChangeNotify(Event) {DM_DigTable.CurMultiSTAConnectState = Event;}
+
+#define DM_MultiSTA_InitGainChangeNotify_CONNECT(_ADAPTER) \
+ DM_MultiSTA_InitGainChangeNotify(DIG_MultiSTA_CONNECT)
+
+#define DM_MultiSTA_InitGainChangeNotify_DISCONNECT(_ADAPTER) \
+ DM_MultiSTA_InitGainChangeNotify(DIG_MultiSTA_DISCONNECT)
+*/
+
+#define DM_DIG_THRESH_HIGH 40
+#define DM_DIG_THRESH_LOW 35
+
+#define DM_FALSEALARM_THRESH_LOW 400
+#define DM_FALSEALARM_THRESH_HIGH 1000
+
+#define DM_DIG_MAX_NIC 0x4A
+#define DM_DIG_MIN_NIC 0x1e //0x22//0x1c
+
+#define DM_DIG_MAX_AP 0x32
+#define DM_DIG_MIN_AP 0x20
+
+#define DM_DIG_MAX_NIC_HP 0x46
+#define DM_DIG_MIN_NIC_HP 0x2e
+
+#define DM_DIG_MAX_AP_HP 0x42
+#define DM_DIG_MIN_AP_HP 0x30
+
+//vivi 92c&92d has different definition, 20110504
+//this is for 92c
+#ifdef CONFIG_SPECIAL_SETTING_FOR_FUNAI_TV
+#define DM_DIG_FA_TH0 0x80//0x20
+#else
+#define DM_DIG_FA_TH0 0x200//0x20
+#endif
+#define DM_DIG_FA_TH1 0x300//0x100
+#define DM_DIG_FA_TH2 0x400//0x200
+//this is for 92d
+#define DM_DIG_FA_TH0_92D 0x100
+#define DM_DIG_FA_TH1_92D 0x400
+#define DM_DIG_FA_TH2_92D 0x600
+
+#define DM_DIG_BACKOFF_MAX 12
+#define DM_DIG_BACKOFF_MIN -4
+#define DM_DIG_BACKOFF_DEFAULT 10
+
+//3===========================================================
+//3 AGC RX High Power Mode
+//3===========================================================
+#define LNA_Low_Gain_1 0x64
+#define LNA_Low_Gain_2 0x5A
+#define LNA_Low_Gain_3 0x58
+
+#define FA_RXHP_TH1 5000
+#define FA_RXHP_TH2 1500
+#define FA_RXHP_TH3 800
+#define FA_RXHP_TH4 600
+#define FA_RXHP_TH5 500
+
+//3===========================================================
+//3 EDCA
+//3===========================================================
+
+//3===========================================================
+//3 Dynamic Tx Power
+//3===========================================================
+//Dynamic Tx Power Control Threshold
+#define TX_POWER_NEAR_FIELD_THRESH_LVL2 74
+#define TX_POWER_NEAR_FIELD_THRESH_LVL1 67
+#define TX_POWER_NEAR_FIELD_THRESH_AP 0x3F
+
+#define TxHighPwrLevel_Normal 0
+#define TxHighPwrLevel_Level1 1
+#define TxHighPwrLevel_Level2 2
+#define TxHighPwrLevel_BT1 3
+#define TxHighPwrLevel_BT2 4
+#define TxHighPwrLevel_15 5
+#define TxHighPwrLevel_35 6
+#define TxHighPwrLevel_50 7
+#define TxHighPwrLevel_70 8
+#define TxHighPwrLevel_100 9
+
+//3===========================================================
+//3 Tx Power Tracking
+//3===========================================================
+#if 0 //mask this, since these have been defined in typdef.h, vivi
+#define OFDM_TABLE_SIZE 37
+#define OFDM_TABLE_SIZE_92D 43
+#define CCK_TABLE_SIZE 33
+#endif
+
+
+//3===========================================================
+//3 Rate Adaptive
+//3===========================================================
+#define DM_RATR_STA_INIT 0
+#define DM_RATR_STA_HIGH 1
+#define DM_RATR_STA_MIDDLE 2
+#define DM_RATR_STA_LOW 3
+
+//3===========================================================
+//3 BB Power Save
+//3===========================================================
+
+
+typedef enum tag_1R_CCA_Type_Definition
+{
+ CCA_1R =0,
+ CCA_2R = 1,
+ CCA_MAX = 2,
+}DM_1R_CCA_E;
+
+typedef enum tag_RF_Type_Definition
+{
+ RF_Save =0,
+ RF_Normal = 1,
+ RF_MAX = 2,
+}DM_RF_E;
+
+//3===========================================================
+//3 Antenna Diversity
+//3===========================================================
+typedef enum tag_SW_Antenna_Switch_Definition
+{
+ Antenna_A = 1,
+ Antenna_B = 2,
+ Antenna_MAX = 3,
+}DM_SWAS_E;
+
+
+// Maximal number of antenna detection mechanism needs to perform, added by Roger, 2011.12.28.
+#define MAX_ANTENNA_DETECTION_CNT 10
+
+//
+// Extern Global Variables.
+//
+#define OFDM_TABLE_SIZE_92C 37
+#define OFDM_TABLE_SIZE_92D 43
+#define CCK_TABLE_SIZE 33
+
+extern u4Byte OFDMSwingTable[OFDM_TABLE_SIZE_92D];
+extern u1Byte CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8];
+extern u1Byte CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8];
+
+
+
+//
+// check Sta pointer valid or not
+//
+#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+#define IS_STA_VALID(pSta) (pSta && pSta->expire_to)
+#elif (DM_ODM_SUPPORT_TYPE & ODM_MP)
+#define IS_STA_VALID(pSta) (pSta && pSta->bUsed)
+#else
+#define IS_STA_VALID(pSta) (pSta)
+#endif
+// 20100514 Joseph: Add definition for antenna switching test after link.
+// This indicates two different the steps.
+// In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air.
+// In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK
+// with original RSSI to determine if it is necessary to switch antenna.
+#define SWAW_STEP_PEAK 0
+#define SWAW_STEP_DETERMINE 1
+
+VOID ODM_Write_DIG(IN PDM_ODM_T pDM_Odm, IN u1Byte CurrentIGI);
+VOID ODM_Write_CCK_CCA_Thres(IN PDM_ODM_T pDM_Odm, IN u1Byte CurCCK_CCAThres);
+
+VOID
+ODM_SetAntenna(
+ IN PDM_ODM_T pDM_Odm,
+ IN u1Byte Antenna);
+
+
+#define dm_RF_Saving ODM_RF_Saving
+void ODM_RF_Saving( IN PDM_ODM_T pDM_Odm,
+ IN u1Byte bForceInNormal );
+
+#define SwAntDivRestAfterLink ODM_SwAntDivRestAfterLink
+VOID ODM_SwAntDivRestAfterLink( IN PDM_ODM_T pDM_Odm);
+
+#define dm_CheckTXPowerTracking ODM_TXPowerTrackingCheck
+VOID
+ODM_TXPowerTrackingCheck(
+ IN PDM_ODM_T pDM_Odm
+ );
+
+BOOLEAN
+ODM_RAStateCheck(
+ IN PDM_ODM_T pDM_Odm,
+ IN s4Byte RSSI,
+ IN BOOLEAN bForceUpdate,
+ OUT pu1Byte pRATRState
+ );
+
+#if(DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_AP|ODM_ADSL))
+//============================================================
+// function prototype
+//============================================================
+//#define DM_ChangeDynamicInitGainThresh ODM_ChangeDynamicInitGainThresh
+//void ODM_ChangeDynamicInitGainThresh(IN PADAPTER pAdapter,
+// IN INT32 DM_Type,
+// IN INT32 DM_Value);
+VOID
+ODM_ChangeDynamicInitGainThresh(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte DM_Type,
+ IN u4Byte DM_Value
+ );
+
+BOOLEAN
+ODM_CheckPowerStatus(
+ IN PADAPTER Adapter
+ );
+
+
+#if (DM_ODM_SUPPORT_TYPE != ODM_ADSL)
+VOID
+ODM_RateAdaptiveStateApInit(
+ IN PADAPTER Adapter ,
+ IN PRT_WLAN_STA pEntry
+ );
+#endif
+#define AP_InitRateAdaptiveState ODM_RateAdaptiveStateApInit
+
+
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+#ifdef WIFI_WMM
+VOID
+ODM_IotEdcaSwitch(
+ IN PDM_ODM_T pDM_Odm,
+ IN unsigned char enable
+ );
+#endif
+
+BOOLEAN
+ODM_ChooseIotMainSTA(
+ IN PDM_ODM_T pDM_Odm,
+ IN PSTA_INFO_T pstat
+ );
+#endif
+
+#if(DM_ODM_SUPPORT_TYPE==ODM_AP)
+#ifdef HW_ANT_SWITCH
+u1Byte
+ODM_Diversity_AntennaSelect(
+ IN PDM_ODM_T pDM_Odm,
+ IN u1Byte *data
+);
+#endif
+#endif
+
+#define SwAntDivResetBeforeLink ODM_SwAntDivResetBeforeLink
+VOID ODM_SwAntDivResetBeforeLink(IN PDM_ODM_T pDM_Odm);
+
+//#define SwAntDivCheckBeforeLink8192C ODM_SwAntDivCheckBeforeLink8192C
+#define SwAntDivCheckBeforeLink ODM_SwAntDivCheckBeforeLink8192C
+BOOLEAN
+ODM_SwAntDivCheckBeforeLink8192C(
+ IN PDM_ODM_T pDM_Odm
+ );
+
+
+#endif
+
+#define dm_SWAW_RSSI_Check ODM_SwAntDivChkPerPktRssi
+VOID ODM_SwAntDivChkPerPktRssi(
+ IN PDM_ODM_T pDM_Odm,
+ IN u1Byte StationID,
+ IN PODM_PHY_INFO_T pPhyInfo
+ );
+
+#if((DM_ODM_SUPPORT_TYPE==ODM_MP)||(DM_ODM_SUPPORT_TYPE==ODM_CE))
+
+u4Byte ConvertTo_dB(u4Byte Value);
+
+u4Byte
+GetPSDData(
+ PDM_ODM_T pDM_Odm,
+ unsigned int point,
+ u1Byte initial_gain_psd);
+
+#endif
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
+
+VOID
+odm_DIGbyRSSI_LPS(
+ IN PDM_ODM_T pDM_Odm
+ );
+
+u4Byte ODM_Get_Rate_Bitmap(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte macid,
+ IN u4Byte ra_mask,
+ IN u1Byte rssi_level);
+#endif
+
+
+#if(DM_ODM_SUPPORT_TYPE & (ODM_MP))
+#define dm_PSDMonitorCallback odm_PSDMonitorCallback
+VOID odm_PSDMonitorCallback(PRT_TIMER pTimer);
+
+VOID
+odm_PSDMonitorWorkItemCallback(
+ IN PVOID pContext
+ );
+
+
+VOID
+PatchDCTone(
+ IN PDM_ODM_T pDM_Odm,
+ pu4Byte PSD_report,
+ u1Byte initial_gain_psd
+);
+VOID
+ODM_PSDMonitor(
+ IN PDM_ODM_T pDM_Odm
+ );
+VOID odm_PSD_Monitor(PDM_ODM_T pDM_Odm);
+VOID odm_PSDMonitorInit(PDM_ODM_T pDM_Odm);
+
+VOID
+ODM_PSDDbgControl(
+ IN PADAPTER Adapter,
+ IN u4Byte mode,
+ IN u4Byte btRssi
+ );
+
+#endif // DM_ODM_SUPPORT_TYPE
+
+
+
+VOID ODM_DMInit( IN PDM_ODM_T pDM_Odm);
+
+VOID
+ODM_DMWatchdog(
+ IN PDM_ODM_T pDM_Odm // For common use in the future
+ );
+
+VOID
+ODM_CmnInfoInit(
+ IN PDM_ODM_T pDM_Odm,
+ IN ODM_CMNINFO_E CmnInfo,
+ IN u4Byte Value
+ );
+
+VOID
+ODM_CmnInfoHook(
+ IN PDM_ODM_T pDM_Odm,
+ IN ODM_CMNINFO_E CmnInfo,
+ IN PVOID pValue
+ );
+
+VOID
+ODM_CmnInfoPtrArrayHook(
+ IN PDM_ODM_T pDM_Odm,
+ IN ODM_CMNINFO_E CmnInfo,
+ IN u2Byte Index,
+ IN PVOID pValue
+ );
+
+VOID
+ODM_CmnInfoUpdate(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte CmnInfo,
+ IN u8Byte Value
+ );
+
+VOID
+ODM_InitAllTimers(
+ IN PDM_ODM_T pDM_Odm
+ );
+
+VOID
+ODM_CancelAllTimers(
+ IN PDM_ODM_T pDM_Odm
+ );
+
+VOID
+ODM_ReleaseAllTimers(
+ IN PDM_ODM_T pDM_Odm
+ );
+
+VOID
+ODM_ResetIQKResult(
+ IN PDM_ODM_T pDM_Odm
+ );
+
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+VOID ODM_InitAllWorkItems(IN PDM_ODM_T pDM_Odm );
+VOID ODM_FreeAllWorkItems(IN PDM_ODM_T pDM_Odm );
+
+VOID odm_PathDivChkAntSwitch(PDM_ODM_T pDM_Odm);
+VOID ODM_PathDivRestAfterLink(
+ IN PDM_ODM_T pDM_Odm
+ );
+
+
+//===========================================//
+// Neil Chen----2011--06--15--
+
+//3 Path Diversity
+//===========================================================
+
+#define TP_MODE 0
+#define RSSI_MODE 1
+#define TRAFFIC_LOW 0
+#define TRAFFIC_HIGH 1
+
+//#define PATHDIV_ENABLE 1
+
+//VOID odm_PathDivChkAntSwitch(PADAPTER Adapter,u1Byte Step);
+VOID ODM_PathDivRestAfterLink(
+ IN PDM_ODM_T pDM_Odm
+ );
+
+#define dm_PathDiv_RSSI_Check ODM_PathDivChkPerPktRssi
+VOID ODM_PathDivChkPerPktRssi(PADAPTER Adapter,
+ BOOLEAN bIsDefPort,
+ BOOLEAN bMatchBSSID,
+ PRT_WLAN_STA pEntry,
+ PRT_RFD pRfd );
+
+u8Byte
+PlatformDivision64(
+ IN u8Byte x,
+ IN u8Byte y
+);
+
+
+// 20100514 Joseph: Add definition for antenna switching test after link.
+// This indicates two different the steps.
+// In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air.
+// In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK
+// with original RSSI to determine if it is necessary to switch antenna.
+#define SWAW_STEP_PEAK 0
+#define SWAW_STEP_DETERMINE 1
+
+//====================================================
+//3 PathDiV End
+//====================================================
+
+#define PathDivCheckBeforeLink8192C ODM_PathDiversityBeforeLink92C
+BOOLEAN
+ODM_PathDiversityBeforeLink92C(
+ //IN PADAPTER Adapter
+ IN PDM_ODM_T pDM_Odm
+ );
+
+#define DM_ChangeDynamicInitGainThresh ODM_ChangeDynamicInitGainThresh
+//void ODM_ChangeDynamicInitGainThresh(IN PADAPTER pAdapter,
+// IN INT32 DM_Type,
+// IN INT32 DM_Value);
+//
+
+
+VOID
+ODM_CCKPathDiversityChkPerPktRssi(
+ PADAPTER Adapter,
+ BOOLEAN bIsDefPort,
+ BOOLEAN bMatchBSSID,
+ PRT_WLAN_STA pEntry,
+ PRT_RFD pRfd,
+ pu1Byte pDesc
+ );
+
+
+typedef enum tag_DIG_Connect_Definition
+{
+ DIG_STA_DISCONNECT = 0,
+ DIG_STA_CONNECT = 1,
+ DIG_STA_BEFORE_CONNECT = 2,
+ DIG_MultiSTA_DISCONNECT = 3,
+ DIG_MultiSTA_CONNECT = 4,
+ DIG_CONNECT_MAX
+}DM_DIG_CONNECT_E;
+
+
+VOID
+ODM_FillTXPathInTXDESC(
+ IN PADAPTER Adapter,
+ IN PRT_TCB pTcb,
+ IN pu1Byte pDesc
+);
+
+
+#define dm_SWAW_RSSI_Check ODM_SwAntDivChkPerPktRssi
+
+//
+// 2012/01/12 MH Check afapter status. Temp fix BSOD.
+//
+#define HAL_ADAPTER_STS_CHK(pDM_Odm)\
+ if (pDM_Odm->Adapter == NULL)\
+ {\
+ return;\
+ }\
+
+
+//
+// For new definition in MP temporarily fro power tracking,
+//
+#define odm_TXPowerTrackingDirectCall(_Adapter) \
+ IS_HARDWARE_TYPE_8192D(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_92D(_Adapter) : \
+ IS_HARDWARE_TYPE_8192C(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_92C(_Adapter) : \
+ IS_HARDWARE_TYPE_8723A(_Adapter) ? odm_TXPowerTrackingCallback_ThermalMeter_8723A(_Adapter) :\
+ odm_TXPowerTrackingCallback_ThermalMeter_8188E(_Adapter)
+
+VOID
+ODM_SetTxAntByTxInfo_88C_92D(
+ IN PDM_ODM_T pDM_Odm,
+ IN pu1Byte pDesc,
+ IN u1Byte macId
+ );
+#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+VOID
+ODM_AntselStatistics_88C(
+ IN PDM_ODM_T pDM_Odm,
+ IN u1Byte MacId,
+ IN u4Byte PWDBAll,
+ IN BOOLEAN isCCKrate
+);
+
+#if( DM_ODM_SUPPORT_TYPE & (ODM_MP |ODM_CE))
+
+VOID
+ODM_SingleDualAntennaDefaultSetting(
+ IN PDM_ODM_T pDM_Odm
+ );
+
+BOOLEAN
+ODM_SingleDualAntennaDetection(
+ IN PDM_ODM_T pDM_Odm,
+ IN u1Byte mode
+ );
+
+#endif // #if((DM_ODM_SUPPORT_TYPE==ODM_MP)||(DM_ODM_SUPPORT_TYPE==ODM_CE))
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_CE)
+void odm_dtc(PDM_ODM_T pDM_Odm);
+#endif /* #if (DM_ODM_SUPPORT_TYPE == ODM_CE) */
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_HWConfig.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_HWConfig.c
index 2360c16ef3b5..745cad1956ef 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_HWConfig.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_HWConfig.c
@@ -1,1184 +1,1191 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-//============================================================
-// include files
-//============================================================
-
-#include "odm_precomp.h"
-
-#if (RTL8188E_FOR_TEST_CHIP > 1)
- #define READ_AND_CONFIG(ic, txt) do {\
- if (pDM_Odm->bIsMPChip)\
- READ_AND_CONFIG_MP(ic,txt);\
- else\
- READ_AND_CONFIG_TC(ic,txt);\
- } while(0)
-#elif (RTL8188E_FOR_TEST_CHIP == 1)
- #define READ_AND_CONFIG READ_AND_CONFIG_TC
-#else
- #define READ_AND_CONFIG READ_AND_CONFIG_MP
-#endif
-
-#define READ_AND_CONFIG_MP(ic, txt) (ODM_ReadAndConfig##txt##ic(pDM_Odm))
-#define READ_AND_CONFIG_TC(ic, txt) (ODM_ReadAndConfig_TC##txt##ic(pDM_Odm))
-
-u1Byte
-odm_QueryRxPwrPercentage(
- IN s1Byte AntPower
- )
-{
- if ((AntPower <= -100) || (AntPower >= 20))
- {
- return 0;
- }
- else if (AntPower >= 0)
- {
- return 100;
- }
- else
- {
- return (100+AntPower);
- }
-
-}
-
-#if (DM_ODM_SUPPORT_TYPE != ODM_MP)
-//
-// 2012/01/12 MH MOve some signal strength smooth method to MP HAL layer.
-// IF other SW team do not support the feature, remove this section.??
-//
-s4Byte
-odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Lenovo(
- IN OUT PDM_ODM_T pDM_Odm,
- s4Byte CurrSig
-)
-{
- s4Byte RetSig;
-#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
- //if(pDM_Odm->SupportInterface == ODM_ITRF_PCIE)
- {
- // Step 1. Scale mapping.
- // 20100611 Joseph: Re-tunning RSSI presentation for Lenovo.
- // 20100426 Joseph: Modify Signal strength mapping.
- // This modification makes the RSSI indication similar to Intel solution.
- // 20100414 Joseph: Tunning RSSI for Lenovo according to RTL8191SE.
- if(CurrSig >= 54 && CurrSig <= 100)
- {
- RetSig = 100;
- }
- else if(CurrSig>=42 && CurrSig <= 53 )
- {
- RetSig = 95;
- }
- else if(CurrSig>=36 && CurrSig <= 41 )
- {
- RetSig = 74 + ((CurrSig - 36) *20)/6;
- }
- else if(CurrSig>=33 && CurrSig <= 35 )
- {
- RetSig = 65 + ((CurrSig - 33) *8)/2;
- }
- else if(CurrSig>=18 && CurrSig <= 32 )
- {
- RetSig = 62 + ((CurrSig - 18) *2)/15;
- }
- else if(CurrSig>=15 && CurrSig <= 17 )
- {
- RetSig = 33 + ((CurrSig - 15) *28)/2;
- }
- else if(CurrSig>=10 && CurrSig <= 14 )
- {
- RetSig = 39;
- }
- else if(CurrSig>=8 && CurrSig <= 9 )
- {
- RetSig = 33;
- }
- else if(CurrSig <= 8 )
- {
- RetSig = 19;
- }
- }
-#endif //ENDIF (DM_ODM_SUPPORT_TYPE == ODM_MP)
- return RetSig;
-}
-
-s4Byte
-odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Netcore(
- IN OUT PDM_ODM_T pDM_Odm,
- s4Byte CurrSig
-)
-{
- s4Byte RetSig;
-#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
- //if(pDM_Odm->SupportInterface == ODM_ITRF_USB)
- {
- // Netcore request this modification because 2009.04.13 SU driver use it.
- if(CurrSig >= 31 && CurrSig <= 100)
- {
- RetSig = 100;
- }
- else if(CurrSig >= 21 && CurrSig <= 30)
- {
- RetSig = 90 + ((CurrSig - 20) / 1);
- }
- else if(CurrSig >= 11 && CurrSig <= 20)
- {
- RetSig = 80 + ((CurrSig - 10) / 1);
- }
- else if(CurrSig >= 7 && CurrSig <= 10)
- {
- RetSig = 69 + (CurrSig - 7);
- }
- else if(CurrSig == 6)
- {
- RetSig = 54;
- }
- else if(CurrSig == 5)
- {
- RetSig = 45;
- }
- else if(CurrSig == 4)
- {
- RetSig = 36;
- }
- else if(CurrSig == 3)
- {
- RetSig = 27;
- }
- else if(CurrSig == 2)
- {
- RetSig = 18;
- }
- else if(CurrSig == 1)
- {
- RetSig = 9;
- }
- else
- {
- RetSig = CurrSig;
- }
- }
-#endif //ENDIF (DM_ODM_SUPPORT_TYPE == ODM_MP)
- return RetSig;
-}
-
-
-s4Byte
-odm_SignalScaleMapping_92CSeries(
- IN OUT PDM_ODM_T pDM_Odm,
- IN s4Byte CurrSig
-)
-{
- s4Byte RetSig;
-#if (DEV_BUS_TYPE == RT_PCI_INTERFACE)
- if(pDM_Odm->SupportInterface == ODM_ITRF_PCIE)
- {
- // Step 1. Scale mapping.
- if(CurrSig >= 61 && CurrSig <= 100)
- {
- RetSig = 90 + ((CurrSig - 60) / 4);
- }
- else if(CurrSig >= 41 && CurrSig <= 60)
- {
- RetSig = 78 + ((CurrSig - 40) / 2);
- }
- else if(CurrSig >= 31 && CurrSig <= 40)
- {
- RetSig = 66 + (CurrSig - 30);
- }
- else if(CurrSig >= 21 && CurrSig <= 30)
- {
- RetSig = 54 + (CurrSig - 20);
- }
- else if(CurrSig >= 5 && CurrSig <= 20)
- {
- RetSig = 42 + (((CurrSig - 5) * 2) / 3);
- }
- else if(CurrSig == 4)
- {
- RetSig = 36;
- }
- else if(CurrSig == 3)
- {
- RetSig = 27;
- }
- else if(CurrSig == 2)
- {
- RetSig = 18;
- }
- else if(CurrSig == 1)
- {
- RetSig = 9;
- }
- else
- {
- RetSig = CurrSig;
- }
- }
-#endif
-
-#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) ||(DEV_BUS_TYPE == RT_SDIO_INTERFACE))
- if((pDM_Odm->SupportInterface == ODM_ITRF_USB) || (pDM_Odm->SupportInterface == ODM_ITRF_SDIO) )
- {
- if(CurrSig >= 51 && CurrSig <= 100)
- {
- RetSig = 100;
- }
- else if(CurrSig >= 41 && CurrSig <= 50)
- {
- RetSig = 80 + ((CurrSig - 40)*2);
- }
- else if(CurrSig >= 31 && CurrSig <= 40)
- {
- RetSig = 66 + (CurrSig - 30);
- }
- else if(CurrSig >= 21 && CurrSig <= 30)
- {
- RetSig = 54 + (CurrSig - 20);
- }
- else if(CurrSig >= 10 && CurrSig <= 20)
- {
- RetSig = 42 + (((CurrSig - 10) * 2) / 3);
- }
- else if(CurrSig >= 5 && CurrSig <= 9)
- {
- RetSig = 22 + (((CurrSig - 5) * 3) / 2);
- }
- else if(CurrSig >= 1 && CurrSig <= 4)
- {
- RetSig = 6 + (((CurrSig - 1) * 3) / 2);
- }
- else
- {
- RetSig = CurrSig;
- }
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+//============================================================
+// include files
+//============================================================
+
+#include "odm_precomp.h"
+
+#if (RTL8188E_FOR_TEST_CHIP > 1)
+ #define READ_AND_CONFIG(ic, txt) do {\
+ if (pDM_Odm->bIsMPChip)\
+ READ_AND_CONFIG_MP(ic,txt);\
+ else\
+ READ_AND_CONFIG_TC(ic,txt);\
+ } while(0)
+#elif (RTL8188E_FOR_TEST_CHIP == 1)
+ #define READ_AND_CONFIG READ_AND_CONFIG_TC
+#else
+ #define READ_AND_CONFIG READ_AND_CONFIG_MP
+#endif
+
+#define READ_AND_CONFIG_MP(ic, txt) (ODM_ReadAndConfig##txt##ic(pDM_Odm))
+#define READ_AND_CONFIG_TC(ic, txt) (ODM_ReadAndConfig_TC##txt##ic(pDM_Odm))
+
+u1Byte
+odm_QueryRxPwrPercentage(
+ IN s1Byte AntPower
+ )
+{
+ if ((AntPower <= -100) || (AntPower >= 20))
+ {
+ return 0;
}
-#endif
- return RetSig;
-}
-s4Byte
-odm_SignalScaleMapping(
- IN OUT PDM_ODM_T pDM_Odm,
- IN s4Byte CurrSig
-)
-{
- if( (pDM_Odm->SupportPlatform == ODM_MP) &&
- (pDM_Odm->SupportInterface != ODM_ITRF_PCIE) && //USB & SDIO
- (pDM_Odm->PatchID==10))//pMgntInfo->CustomerID == RT_CID_819x_Netcore
- {
- return odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Netcore(pDM_Odm,CurrSig);
- }
- else if( (pDM_Odm->SupportPlatform == ODM_MP) &&
- (pDM_Odm->SupportInterface == ODM_ITRF_PCIE) &&
- (pDM_Odm->PatchID==19))//pMgntInfo->CustomerID == RT_CID_819x_Lenovo)
- {
- return odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Lenovo(pDM_Odm, CurrSig);
- }
- else{
- return odm_SignalScaleMapping_92CSeries(pDM_Odm,CurrSig);
- }
-
-}
-#endif
-
-//pMgntInfo->CustomerID == RT_CID_819x_Lenovo
-static u1Byte odm_SQ_process_patch_RT_CID_819x_Lenovo(
- IN PDM_ODM_T pDM_Odm,
- IN u1Byte isCCKrate,
- IN u1Byte PWDB_ALL,
- IN u1Byte path,
- IN u1Byte RSSI
-)
-{
- u1Byte SQ;
-#if (DM_ODM_SUPPORT_TYPE & ODM_MP)
- // mapping to 5 bars for vista signal strength
- // signal quality in driver will be displayed to signal strength
- if(isCCKrate){
- // in vista.
- if(PWDB_ALL >= 50)
- SQ = 100;
- else if(PWDB_ALL >= 35 && PWDB_ALL < 50)
- SQ = 80;
- else if(PWDB_ALL >= 22 && PWDB_ALL < 35)
- SQ = 60;
- else if(PWDB_ALL >= 18 && PWDB_ALL < 22)
- SQ = 40;
- else
- SQ = 20;
- }
- else{//OFDM rate
-
- // mapping to 5 bars for vista signal strength
- // signal quality in driver will be displayed to signal strength
- // in vista.
- if(RSSI >= 50)
- SQ = 100;
- else if(RSSI >= 35 && RSSI < 50)
- SQ = 80;
- else if(RSSI >= 22 && RSSI < 35)
- SQ = 60;
- else if(RSSI >= 18 && RSSI < 22)
- SQ = 40;
- else
- SQ = 20;
- }
-#endif
- return SQ;
-}
-
-static u1Byte
-odm_EVMdbToPercentage(
- IN s1Byte Value
- )
-{
- //
- // -33dB~0dB to 0%~99%
- //
- s1Byte ret_val;
-
- ret_val = Value;
- //ret_val /= 2;
-
- //ODM_RTPRINT(FRX, RX_PHY_SQ, ("EVMdbToPercentage92C Value=%d / %x \n", ret_val, ret_val));
-
- if(ret_val >= 0)
- ret_val = 0;
- if(ret_val <= -33)
- ret_val = -33;
-
- ret_val = 0 - ret_val;
- ret_val*=3;
-
- if(ret_val == 99)
- ret_val = 100;
-
- return(ret_val);
-}
-
-
-
-VOID
-odm_RxPhyStatus92CSeries_Parsing(
- IN OUT PDM_ODM_T pDM_Odm,
- OUT PODM_PHY_INFO_T pPhyInfo,
- IN pu1Byte pPhyStatus,
- IN PODM_PACKET_INFO_T pPktinfo
- )
-{
- SWAT_T *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
- u1Byte i, Max_spatial_stream;
- s1Byte rx_pwr[4], rx_pwr_all=0;
- u1Byte EVM, PWDB_ALL = 0, PWDB_ALL_BT;
- u1Byte RSSI, total_rssi=0;
- u1Byte isCCKrate=0;
- u1Byte rf_rx_num = 0;
- u1Byte cck_highpwr = 0;
- u1Byte LNA_idx, VGA_idx;
-
- PPHY_STATUS_RPT_8192CD_T pPhyStaRpt = (PPHY_STATUS_RPT_8192CD_T)pPhyStatus;
-
- isCCKrate = ((pPktinfo->Rate >= DESC92C_RATE1M ) && (pPktinfo->Rate <= DESC92C_RATE11M ))?TRUE :FALSE;
-
- pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = -1;
- pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;
-
-
- if(isCCKrate)
- {
- u1Byte report;
- u1Byte cck_agc_rpt;
-
- pDM_Odm->PhyDbgInfo.NumQryPhyStatusCCK++;
- //
- // (1)Hardware does not provide RSSI for CCK
- // (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive)
- //
-
- //if(pHalData->eRFPowerState == eRfOn)
- cck_highpwr = pDM_Odm->bCckHighPower;
- //else
- // cck_highpwr = FALSE;
-
- cck_agc_rpt = pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a ;
-
- //2011.11.28 LukeLee: 88E use different LNA & VGA gain table
- //The RSSI formula should be modified according to the gain table
- //In 88E, cck_highpwr is always set to 1
- if(pDM_Odm->SupportICType & (ODM_RTL8188E|ODM_RTL8812))
- {
- LNA_idx = ((cck_agc_rpt & 0xE0) >>5);
- VGA_idx = (cck_agc_rpt & 0x1F);
- switch(LNA_idx)
- {
- case 7:
- if(VGA_idx <= 27)
- rx_pwr_all = -100 + 2*(27-VGA_idx); //VGA_idx = 27~2
- else
- rx_pwr_all = -100;
- break;
- case 6:
- rx_pwr_all = -48 + 2*(2-VGA_idx); //VGA_idx = 2~0
- break;
- case 5:
- rx_pwr_all = -42 + 2*(7-VGA_idx); //VGA_idx = 7~5
- break;
- case 4:
- rx_pwr_all = -36 + 2*(7-VGA_idx); //VGA_idx = 7~4
- break;
- case 3:
- //rx_pwr_all = -28 + 2*(7-VGA_idx); //VGA_idx = 7~0
- rx_pwr_all = -24 + 2*(7-VGA_idx); //VGA_idx = 7~0
- break;
- case 2:
- if(cck_highpwr)
- rx_pwr_all = -12 + 2*(5-VGA_idx); //VGA_idx = 5~0
- else
- rx_pwr_all = -6+ 2*(5-VGA_idx);
- break;
- case 1:
- rx_pwr_all = 8-2*VGA_idx;
- break;
- case 0:
- rx_pwr_all = 14-2*VGA_idx;
- break;
- default:
- //DbgPrint("CCK Exception default\n");
- break;
- }
- rx_pwr_all += 6;
- PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);
- if(cck_highpwr == FALSE)
- {
- if(PWDB_ALL >= 80)
- PWDB_ALL = ((PWDB_ALL-80)<<1)+((PWDB_ALL-80)>>1)+80;
- else if((PWDB_ALL <= 78) && (PWDB_ALL >= 20))
- PWDB_ALL += 3;
- if(PWDB_ALL>100)
- PWDB_ALL = 100;
- }
- }
- else
- {
- if(!cck_highpwr)
- {
- report =( cck_agc_rpt & 0xc0 )>>6;
- switch(report)
- {
- // 03312009 modified by cosa
- // Modify the RF RNA gain value to -40, -20, -2, 14 by Jenyu's suggestion
- // Note: different RF with the different RNA gain.
- case 0x3:
- rx_pwr_all = -46 - (cck_agc_rpt & 0x3e);
- break;
- case 0x2:
- rx_pwr_all = -26 - (cck_agc_rpt & 0x3e);
- break;
- case 0x1:
- rx_pwr_all = -12 - (cck_agc_rpt & 0x3e);
- break;
- case 0x0:
- rx_pwr_all = 16 - (cck_agc_rpt & 0x3e);
- break;
- }
- }
- else
- {
- //report = pDrvInfo->cfosho[0] & 0x60;
- //report = pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a& 0x60;
-
- report = (cck_agc_rpt & 0x60)>>5;
- switch(report)
- {
- case 0x3:
- rx_pwr_all = -46 - ((cck_agc_rpt & 0x1f)<<1) ;
- break;
- case 0x2:
- rx_pwr_all = -26 - ((cck_agc_rpt & 0x1f)<<1);
- break;
- case 0x1:
- rx_pwr_all = -12 - ((cck_agc_rpt & 0x1f)<<1) ;
- break;
- case 0x0:
- rx_pwr_all = 16 - ((cck_agc_rpt & 0x1f)<<1) ;
- break;
- }
- }
-
- PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);
-
- //Modification for ext-LNA board
- if(pDM_Odm->BoardType == ODM_BOARD_HIGHPWR)
- {
- if((cck_agc_rpt>>7) == 0){
- PWDB_ALL = (PWDB_ALL>94)?100:(PWDB_ALL +6);
- }
- else
- {
- if(PWDB_ALL > 38)
- PWDB_ALL -= 16;
- else
- PWDB_ALL = (PWDB_ALL<=16)?(PWDB_ALL>>2):(PWDB_ALL -12);
- }
-
- //CCK modification
- if(PWDB_ALL > 25 && PWDB_ALL <= 60)
- PWDB_ALL += 6;
- //else if (PWDB_ALL <= 25)
- // PWDB_ALL += 8;
- }
- else//Modification for int-LNA board
- {
- if(PWDB_ALL > 99)
- PWDB_ALL -= 8;
- else if(PWDB_ALL > 50 && PWDB_ALL <= 68)
- PWDB_ALL += 4;
- }
- }
-
- pPhyInfo->RxPWDBAll = PWDB_ALL;
-#if (DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_CE))
- pPhyInfo->BTRxRSSIPercentage = PWDB_ALL;
- pPhyInfo->RecvSignalPower = rx_pwr_all;
-#endif
- //
- // (3) Get Signal Quality (EVM)
- //
- if(pPktinfo->bPacketMatchBSSID)
- {
- u1Byte SQ,SQ_rpt;
-
- if((pDM_Odm->SupportPlatform == ODM_MP) &&(pDM_Odm->PatchID==19)){//pMgntInfo->CustomerID == RT_CID_819x_Lenovo
- SQ = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,0,0);
- }
- else if(pPhyInfo->RxPWDBAll > 40 && !pDM_Odm->bInHctTest){
- SQ = 100;
- }
- else{
- SQ_rpt = pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all;
-
- if(SQ_rpt > 64)
- SQ = 0;
- else if (SQ_rpt < 20)
- SQ = 100;
- else
- SQ = ((64-SQ_rpt) * 100) / 44;
-
- }
-
- //DbgPrint("cck SQ = %d\n", SQ);
- pPhyInfo->SignalQuality = SQ;
- pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = SQ;
- pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;
- }
- }
- else //is OFDM rate
- {
- pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;
-
- //
- // (1)Get RSSI for HT rate
- //
-
- for(i = ODM_RF_PATH_A; i < ODM_RF_PATH_MAX; i++)
- {
- // 2008/01/30 MH we will judge RF RX path now.
- if (pDM_Odm->RFPathRxEnable & BIT(i))
- rf_rx_num++;
- //else
- //continue;
-
- rx_pwr[i] = ((pPhyStaRpt->path_agc[i].gain& 0x3F)*2) - 110;
-
- #if (DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_CE))
- pPhyInfo->RxPwr[i] = rx_pwr[i];
- #endif
-
- /* Translate DBM to percentage. */
- RSSI = odm_QueryRxPwrPercentage(rx_pwr[i]);
- total_rssi += RSSI;
- //RTPRINT(FRX, RX_PHY_SS, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], RSSI));
-
- //Modification for ext-LNA board
- if(pDM_Odm->BoardType == ODM_BOARD_HIGHPWR)
- {
- if((pPhyStaRpt->path_agc[i].trsw) == 1)
- RSSI = (RSSI>94)?100:(RSSI +6);
- else
- RSSI = (RSSI<=16)?(RSSI>>3):(RSSI -16);
-
- if((RSSI <= 34) && (RSSI >=4))
- RSSI -= 4;
- }
-
- pPhyInfo->RxMIMOSignalStrength[i] =(u1Byte) RSSI;
-
- #if (DM_ODM_SUPPORT_TYPE & (/*ODM_MP|*/ODM_CE|ODM_AP|ODM_ADSL))
- //Get Rx snr value in DB
- pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = (s4Byte)(pPhyStaRpt->path_rxsnr[i]/2);
- #endif
-
- /* Record Signal Strength for next packet */
- if(pPktinfo->bPacketMatchBSSID)
- {
- if((pDM_Odm->SupportPlatform == ODM_MP) &&(pDM_Odm->PatchID==19))
- {
- if(i==ODM_RF_PATH_A)
- pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,i,RSSI);
-
- }
-
- }
- }
-
-
- //
- // (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive)
- //
- rx_pwr_all = (((pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all) >> 1 )& 0x7f) -110;
- //RTPRINT(FRX, RX_PHY_SS, ("PWDB_ALL=%d\n", PWDB_ALL));
-
- PWDB_ALL_BT = PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);
- //RTPRINT(FRX, RX_PHY_SS, ("PWDB_ALL=%d\n",PWDB_ALL));
-
- pPhyInfo->RxPWDBAll = PWDB_ALL;
- //ODM_RT_TRACE(pDM_Odm,ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("ODM OFDM RSSI=%d\n",pPhyInfo->RxPWDBAll));
- #if (DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_CE))
- pPhyInfo->BTRxRSSIPercentage = PWDB_ALL_BT;
- pPhyInfo->RxPower = rx_pwr_all;
- pPhyInfo->RecvSignalPower = rx_pwr_all;
- #endif
-
- if((pDM_Odm->SupportPlatform == ODM_MP) &&(pDM_Odm->PatchID==19)){
- //do nothing
- }
- else{//pMgntInfo->CustomerID != RT_CID_819x_Lenovo
- //
- // (3)EVM of HT rate
- //
- if(pPktinfo->Rate >=DESC92C_RATEMCS8 && pPktinfo->Rate <=DESC92C_RATEMCS15)
- Max_spatial_stream = 2; //both spatial stream make sense
- else
- Max_spatial_stream = 1; //only spatial stream 1 makes sense
-
- for(i=0; i<Max_spatial_stream; i++)
- {
- // Do not use shift operation like "rx_evmX >>= 1" because the compilor of free build environment
- // fill most significant bit to "zero" when doing shifting operation which may change a negative
- // value to positive one, then the dbm value (which is supposed to be negative) is not correct anymore.
- EVM = odm_EVMdbToPercentage( (pPhyStaRpt->stream_rxevm[i] )); //dbm
-
- //RTPRINT(FRX, RX_PHY_SQ, ("RXRATE=%x RXEVM=%x EVM=%s%d\n",
- //GET_RX_STATUS_DESC_RX_MCS(pDesc), pDrvInfo->rxevm[i], "%", EVM));
-
- if(pPktinfo->bPacketMatchBSSID)
- {
- if(i==ODM_RF_PATH_A) // Fill value in RFD, Get the first spatial stream only
- {
- pPhyInfo->SignalQuality = (u1Byte)(EVM & 0xff);
- }
- pPhyInfo->RxMIMOSignalQuality[i] = (u1Byte)(EVM & 0xff);
- }
- }
- }
-
- }
-#if (DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_CE))
- //UI BSS List signal strength(in percentage), make it good looking, from 0~100.
- //It is assigned to the BSS List in GetValueFromBeaconOrProbeRsp().
- if(isCCKrate)
- {
-#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
- // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/
- pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, PWDB_ALL));//PWDB_ALL;
-#else
- pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));//PWDB_ALL;
-#endif
- }
- else
- {
- if (rf_rx_num != 0)
- {
-#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
- // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/
- pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, total_rssi/=rf_rx_num));//PWDB_ALL;
-#else
- pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, total_rssi/=rf_rx_num));
-#endif
- }
- }
-#endif
-
- //For 92C/92D HW (Hybrid) Antenna Diversity
-#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
- pDM_SWAT_Table->antsel = pPhyStaRpt->ant_sel;
- //For 88E HW Antenna Diversity
- pDM_Odm->DM_FatTable.antsel_rx_keep_0 = pPhyStaRpt->ant_sel;
- pDM_Odm->DM_FatTable.antsel_rx_keep_1 = pPhyStaRpt->ant_sel_b;
- pDM_Odm->DM_FatTable.antsel_rx_keep_2 = pPhyStaRpt->antsel_rx_keep_2;
-#endif
-}
-
-VOID
-odm_Init_RSSIForDM(
- IN OUT PDM_ODM_T pDM_Odm
- )
-{
-
-}
-
-VOID
-odm_Process_RSSIForDM(
- IN OUT PDM_ODM_T pDM_Odm,
- IN PODM_PHY_INFO_T pPhyInfo,
- IN PODM_PACKET_INFO_T pPktinfo
- )
-{
-
- s4Byte UndecoratedSmoothedPWDB, UndecoratedSmoothedCCK, UndecoratedSmoothedOFDM, RSSI_Ave;
- u1Byte isCCKrate=0;
- u1Byte RSSI_max, RSSI_min, i;
- u4Byte OFDM_pkt=0;
- u4Byte Weighting=0;
-
- PSTA_INFO_T pEntry;
-
- if(pPktinfo->StationID == 0xFF)
- return;
-
- // 2011/11/17 MH Need to debug
- //if (pDM_Odm->SupportPlatform == ODM_MP)
- {
-
- }
-
- pEntry = pDM_Odm->pODM_StaInfo[pPktinfo->StationID];
- if(!IS_STA_VALID(pEntry) ){
- return;
- }
- if((!pPktinfo->bPacketMatchBSSID) )
- {
- return;
- }
-
- isCCKrate = ((pPktinfo->Rate >= DESC92C_RATE1M ) && (pPktinfo->Rate <= DESC92C_RATE11M ))?TRUE :FALSE;
-
-#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
-#if ((RTL8192C_SUPPORT == 1) ||(RTL8192D_SUPPORT == 1))
- if(pDM_Odm->SupportICType & ODM_RTL8192C|ODM_RTL8192D)
- {
- if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon)
- {
- //if(pPktinfo->bPacketBeacon)
- //{
- // DbgPrint("This is beacon, isCCKrate=%d\n", isCCKrate);
- //}
- ODM_AntselStatistics_88C(pDM_Odm, pPktinfo->StationID, pPhyInfo->RxPWDBAll, isCCKrate);
- }
- }
-#endif
- //-----------------Smart Antenna Debug Message------------------//
-#if (RTL8188E_SUPPORT == 1)
- if(pDM_Odm->SupportICType == ODM_RTL8188E)
- {
- u1Byte antsel_tr_mux;
- pFAT_T pDM_FatTable = &pDM_Odm->DM_FatTable;
-
- if(pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV)
- {
- if(pDM_FatTable->FAT_State == FAT_TRAINING_STATE)
- {
- if(pPktinfo->bPacketToSelf) //(pPktinfo->bPacketMatchBSSID && (!pPktinfo->bPacketBeacon))
- {
- antsel_tr_mux = (pDM_FatTable->antsel_rx_keep_2<<2) |(pDM_FatTable->antsel_rx_keep_1 <<1) |pDM_FatTable->antsel_rx_keep_0;
- pDM_FatTable->antSumRSSI[antsel_tr_mux] += pPhyInfo->RxPWDBAll;
- pDM_FatTable->antRSSIcnt[antsel_tr_mux]++;
- //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("isCCKrate=%d, PWDB_ALL=%d\n",isCCKrate, pPhyInfo->RxPWDBAll));
- //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("antsel_tr_mux=3'b%d%d%d\n",
- //pDM_FatTable->antsel_rx_keep_2, pDM_FatTable->antsel_rx_keep_1, pDM_FatTable->antsel_rx_keep_0));
-
- }
- }
- }
- else if((pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)||(pDM_Odm->AntDivType == CGCS_RX_HW_ANTDIV))
- {
- if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon)
- {
- antsel_tr_mux = (pDM_FatTable->antsel_rx_keep_2<<2) |(pDM_FatTable->antsel_rx_keep_1 <<1) |pDM_FatTable->antsel_rx_keep_0;
- //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("antsel_tr_mux=3'b%d%d%d\n",
- // pDM_FatTable->antsel_rx_keep_2, pDM_FatTable->antsel_rx_keep_1, pDM_FatTable->antsel_rx_keep_0));
-
- ODM_AntselStatistics_88E(pDM_Odm, antsel_tr_mux, pPktinfo->StationID, pPhyInfo->RxPWDBAll);
- }
- }
-
- }
-#endif
-#endif //#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
- //-----------------Smart Antenna Debug Message------------------//
-
- UndecoratedSmoothedCCK = pEntry->rssi_stat.UndecoratedSmoothedCCK;
- UndecoratedSmoothedOFDM = pEntry->rssi_stat.UndecoratedSmoothedOFDM;
- UndecoratedSmoothedPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB;
-
- if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon)
- {
-
- if(!isCCKrate)//ofdm rate
- {
- if(pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B] == 0){
- RSSI_Ave = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];
- }
- else
- {
- //DbgPrint("pRfd->Status.RxMIMOSignalStrength[0] = %d, pRfd->Status.RxMIMOSignalStrength[1] = %d \n",
- //pRfd->Status.RxMIMOSignalStrength[0], pRfd->Status.RxMIMOSignalStrength[1]);
-
-
- if(pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A] > pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B])
- {
- RSSI_max = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];
- RSSI_min = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];
- }
- else
- {
- RSSI_max = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];
- RSSI_min = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];
- }
- if((RSSI_max -RSSI_min) < 3)
- RSSI_Ave = RSSI_max;
- else if((RSSI_max -RSSI_min) < 6)
- RSSI_Ave = RSSI_max - 1;
- else if((RSSI_max -RSSI_min) < 10)
- RSSI_Ave = RSSI_max - 2;
- else
- RSSI_Ave = RSSI_max - 3;
- }
-
- //1 Process OFDM RSSI
- if(UndecoratedSmoothedOFDM <= 0) // initialize
- {
- UndecoratedSmoothedOFDM = pPhyInfo->RxPWDBAll;
- }
- else
- {
- if(pPhyInfo->RxPWDBAll > (u4Byte)UndecoratedSmoothedOFDM)
- {
- UndecoratedSmoothedOFDM =
- ( ((UndecoratedSmoothedOFDM)*(Rx_Smooth_Factor-1)) +
- (RSSI_Ave)) /(Rx_Smooth_Factor);
- UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM + 1;
- }
- else
- {
- UndecoratedSmoothedOFDM =
- ( ((UndecoratedSmoothedOFDM)*(Rx_Smooth_Factor-1)) +
- (RSSI_Ave)) /(Rx_Smooth_Factor);
- }
- }
-
- pEntry->rssi_stat.PacketMap = (pEntry->rssi_stat.PacketMap<<1) | BIT0;
-
- }
- else
- {
- RSSI_Ave = pPhyInfo->RxPWDBAll;
-
- //1 Process CCK RSSI
- if(UndecoratedSmoothedCCK <= 0) // initialize
- {
- UndecoratedSmoothedCCK = pPhyInfo->RxPWDBAll;
- }
- else
- {
- if(pPhyInfo->RxPWDBAll > (u4Byte)UndecoratedSmoothedCCK)
- {
- UndecoratedSmoothedCCK =
- ( ((UndecoratedSmoothedCCK)*(Rx_Smooth_Factor-1)) +
- (pPhyInfo->RxPWDBAll)) /(Rx_Smooth_Factor);
- UndecoratedSmoothedCCK = UndecoratedSmoothedCCK + 1;
- }
- else
- {
- UndecoratedSmoothedCCK =
- ( ((UndecoratedSmoothedCCK)*(Rx_Smooth_Factor-1)) +
- (pPhyInfo->RxPWDBAll)) /(Rx_Smooth_Factor);
- }
- }
- pEntry->rssi_stat.PacketMap = pEntry->rssi_stat.PacketMap<<1;
- }
-
- //if(pEntry)
- {
- //2011.07.28 LukeLee: modified to prevent unstable CCK RSSI
- if(pEntry->rssi_stat.ValidBit >= 64)
- pEntry->rssi_stat.ValidBit = 64;
- else
- pEntry->rssi_stat.ValidBit++;
-
- for(i=0; i<pEntry->rssi_stat.ValidBit; i++)
- OFDM_pkt += (u1Byte)(pEntry->rssi_stat.PacketMap>>i)&BIT0;
-
- if(pEntry->rssi_stat.ValidBit == 64)
- {
- Weighting = ((OFDM_pkt<<4) > 64)?64:(OFDM_pkt<<4);
- UndecoratedSmoothedPWDB = (Weighting*UndecoratedSmoothedOFDM+(64-Weighting)*UndecoratedSmoothedCCK)>>6;
- }
- else
- {
- if(pEntry->rssi_stat.ValidBit != 0)
- UndecoratedSmoothedPWDB = (OFDM_pkt*UndecoratedSmoothedOFDM+(pEntry->rssi_stat.ValidBit-OFDM_pkt)*UndecoratedSmoothedCCK)/pEntry->rssi_stat.ValidBit;
- else
- UndecoratedSmoothedPWDB = 0;
- }
-
- pEntry->rssi_stat.UndecoratedSmoothedCCK = UndecoratedSmoothedCCK;
- pEntry->rssi_stat.UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM;
- pEntry->rssi_stat.UndecoratedSmoothedPWDB = UndecoratedSmoothedPWDB;
-
- //DbgPrint("OFDM_pkt=%d, Weighting=%d\n", OFDM_pkt, Weighting);
- //DbgPrint("UndecoratedSmoothedOFDM=%d, UndecoratedSmoothedPWDB=%d, UndecoratedSmoothedCCK=%d\n",
- // UndecoratedSmoothedOFDM, UndecoratedSmoothedPWDB, UndecoratedSmoothedCCK);
-
- }
-
- }
-}
-
-
-//
-// Endianness before calling this API
-//
-VOID
-ODM_PhyStatusQuery_92CSeries(
- IN OUT PDM_ODM_T pDM_Odm,
- OUT PODM_PHY_INFO_T pPhyInfo,
- IN pu1Byte pPhyStatus,
- IN PODM_PACKET_INFO_T pPktinfo
- )
-{
-
- odm_RxPhyStatus92CSeries_Parsing(
- pDM_Odm,
- pPhyInfo,
- pPhyStatus,
- pPktinfo);
-
- if( pDM_Odm->RSSI_test == TRUE)
- {
- // Select the packets to do RSSI checking for antenna switching.
- if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon )
- {
- /*
- #if 0//(DM_ODM_SUPPORT_TYPE == ODM_MP)
- dm_SWAW_RSSI_Check(
- Adapter,
- (tmppAdapter!=NULL)?(tmppAdapter==Adapter):TRUE,
- bPacketMatchBSSID,
- pEntry,
- pRfd);
- #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
- // Select the packets to do RSSI checking for antenna switching.
- //odm_SwAntDivRSSICheck8192C(padapter, precvframe->u.hdr.attrib.RxPWDBAll);
- #endif
- */
- ODM_SwAntDivChkPerPktRssi(pDM_Odm,pPktinfo->StationID,pPhyInfo);
- }
- }
- else
- {
- odm_Process_RSSIForDM(pDM_Odm,pPhyInfo,pPktinfo);
- }
-
-}
-
-
-
-//
-// Endianness before calling this API
-//
-VOID
-ODM_PhyStatusQuery_JaguarSeries(
- IN OUT PDM_ODM_T pDM_Odm,
- OUT PODM_PHY_INFO_T pPhyInfo,
- IN pu1Byte pPhyStatus,
- IN PODM_PACKET_INFO_T pPktinfo
- )
-{
-
-
-}
-
-VOID
-ODM_PhyStatusQuery(
- IN OUT PDM_ODM_T pDM_Odm,
- OUT PODM_PHY_INFO_T pPhyInfo,
- IN pu1Byte pPhyStatus,
- IN PODM_PACKET_INFO_T pPktinfo
- )
-{
-#if 0 // How to jaguar jugar series??
- if(pDM_Odm->SupportICType >= ODM_RTL8195 )
- {
- ODM_PhyStatusQuery_JaguarSeries(pDM_Odm,pPhyInfo,pPhyStatus,pPktinfo);
- }
- else
-#endif
- {
- ODM_PhyStatusQuery_92CSeries(pDM_Odm,pPhyInfo,pPhyStatus,pPktinfo);
- }
-}
-
-// For future use.
-VOID
-ODM_MacStatusQuery(
- IN OUT PDM_ODM_T pDM_Odm,
- IN pu1Byte pMacStatus,
- IN u1Byte MacID,
- IN BOOLEAN bPacketMatchBSSID,
- IN BOOLEAN bPacketToSelf,
- IN BOOLEAN bPacketBeacon
- )
-{
- // 2011/10/19 Driver team will handle in the future.
-
-}
-
-#if (DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_CE|ODM_AP))
-
-HAL_STATUS
-ODM_ConfigRFWithHeaderFile(
- IN PDM_ODM_T pDM_Odm,
- IN ODM_RF_RADIO_PATH_E Content,
- IN ODM_RF_RADIO_PATH_E eRFPath
- )
-{
- //RT_STATUS rtStatus = RT_STATUS_SUCCESS;
-
-
- ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===>ODM_ConfigRFWithHeaderFile\n"));
-#if (RTL8723A_SUPPORT == 1)
- if (pDM_Odm->SupportICType == ODM_RTL8723A)
- {
- if(eRFPath == ODM_RF_PATH_A)
- READ_AND_CONFIG_MP(8723A,_RadioA_1T_);
-
- ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> ODM_ConfigRFWithHeaderFile() Radio_A:Rtl8723RadioA_1TArray\n"));
- ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> ODM_ConfigRFWithHeaderFile() Radio_B:Rtl8723RadioB_1TArray\n"));
- }
-
- ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("ODM_ConfigRFWithHeaderFile: Radio No %x\n", eRFPath));
- //rtStatus = RT_STATUS_SUCCESS;
-#endif
-#if (RTL8188E_SUPPORT == 1)
- if (pDM_Odm->SupportICType == ODM_RTL8188E)
- {
- if(eRFPath == ODM_RF_PATH_A)
- READ_AND_CONFIG(8188E,_RadioA_1T_);
- //else if(eRFPath == ODM_RF_PATH_B)
- // READ_AND_CONFIG(8188E,_RadioB_1T_);
- ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> ODM_ConfigRFWithHeaderFile() Radio_A:Rtl8188ERadioA_1TArray\n"));
- ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> ODM_ConfigRFWithHeaderFile() Radio_B:Rtl8188ERadioB_1TArray\n"));
- }
-
- ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("ODM_ConfigRFWithHeaderFile: Radio No %x\n", eRFPath));
- //rtStatus = RT_STATUS_SUCCESS;
-#endif
- return HAL_STATUS_SUCCESS;
-}
-
-
-HAL_STATUS
-ODM_ConfigBBWithHeaderFile(
- IN PDM_ODM_T pDM_Odm,
- IN ODM_BB_Config_Type ConfigType
- )
-{
-#if (RTL8723A_SUPPORT == 1)
- if(pDM_Odm->SupportICType == ODM_RTL8723A)
- {
-
- if(ConfigType == CONFIG_BB_PHY_REG)
- {
- READ_AND_CONFIG_MP(8723A,_PHY_REG_1T_);
- }
- else if(ConfigType == CONFIG_BB_AGC_TAB)
- {
- READ_AND_CONFIG_MP(8723A,_AGC_TAB_1T_);
- }
- ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() phy:Rtl8723AGCTAB_1TArray\n"));
- ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() agc:Rtl8723PHY_REG_1TArray\n"));
- }
-#endif
-
-#if (RTL8188E_SUPPORT == 1)
- if(pDM_Odm->SupportICType == ODM_RTL8188E)
- {
-
- if(ConfigType == CONFIG_BB_PHY_REG)
- {
- READ_AND_CONFIG(8188E,_PHY_REG_1T_);
- }
-// else if(ConfigType == ODM_BaseBand_Config_PHY_REG_MP)
-// {
- //READ_AND_CONFIG(8188E,_PHY_REG_MP_);
-// }
- else if(ConfigType == CONFIG_BB_AGC_TAB)
- {
- READ_AND_CONFIG(8188E,_AGC_TAB_1T_);
- }
- else if(ConfigType == CONFIG_BB_PHY_REG_PG)
- {
- READ_AND_CONFIG(8188E,_PHY_REG_PG_);
- ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() agc:Rtl8188EPHY_REG_PGArray\n"));
- }
- }
-#endif
-
- return HAL_STATUS_SUCCESS;
-}
-
-HAL_STATUS
-ODM_ConfigMACWithHeaderFile(
- IN PDM_ODM_T pDM_Odm
- )
-{
- u1Byte result = HAL_STATUS_SUCCESS;
-#if (RTL8723A_SUPPORT == 1)
- if (pDM_Odm->SupportICType == ODM_RTL8723A)
- {
- READ_AND_CONFIG_MP(8723A,_MAC_REG_);
- }
-#endif
-#if (RTL8188E_SUPPORT == 1)
- if (pDM_Odm->SupportICType == ODM_RTL8188E)
- {
- result = READ_AND_CONFIG(8188E,_MAC_REG_);
- }
-#endif
-
- return result;
-}
-
-
-#endif // end of (#if DM_ODM_SUPPORT_TYPE)
-
+ else if (AntPower >= 0)
+ {
+ return 100;
+ }
+ else
+ {
+ return (100+AntPower);
+ }
+
+}
+
+#if (DM_ODM_SUPPORT_TYPE != ODM_MP)
+//
+// 2012/01/12 MH MOve some signal strength smooth method to MP HAL layer.
+// IF other SW team do not support the feature, remove this section.??
+//
+s4Byte
+odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Lenovo(
+ IN OUT PDM_ODM_T pDM_Odm,
+ s4Byte CurrSig
+)
+{
+ s4Byte RetSig;
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+ //if(pDM_Odm->SupportInterface == ODM_ITRF_PCIE)
+ {
+ // Step 1. Scale mapping.
+ // 20100611 Joseph: Re-tunning RSSI presentation for Lenovo.
+ // 20100426 Joseph: Modify Signal strength mapping.
+ // This modification makes the RSSI indication similar to Intel solution.
+ // 20100414 Joseph: Tunning RSSI for Lenovo according to RTL8191SE.
+ if(CurrSig >= 54 && CurrSig <= 100)
+ {
+ RetSig = 100;
+ }
+ else if(CurrSig>=42 && CurrSig <= 53 )
+ {
+ RetSig = 95;
+ }
+ else if(CurrSig>=36 && CurrSig <= 41 )
+ {
+ RetSig = 74 + ((CurrSig - 36) *20)/6;
+ }
+ else if(CurrSig>=33 && CurrSig <= 35 )
+ {
+ RetSig = 65 + ((CurrSig - 33) *8)/2;
+ }
+ else if(CurrSig>=18 && CurrSig <= 32 )
+ {
+ RetSig = 62 + ((CurrSig - 18) *2)/15;
+ }
+ else if(CurrSig>=15 && CurrSig <= 17 )
+ {
+ RetSig = 33 + ((CurrSig - 15) *28)/2;
+ }
+ else if(CurrSig>=10 && CurrSig <= 14 )
+ {
+ RetSig = 39;
+ }
+ else if(CurrSig>=8 && CurrSig <= 9 )
+ {
+ RetSig = 33;
+ }
+ else if(CurrSig <= 8 )
+ {
+ RetSig = 19;
+ }
+ }
+#endif //ENDIF (DM_ODM_SUPPORT_TYPE == ODM_MP)
+ return RetSig;
+}
+
+s4Byte
+odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Netcore(
+ IN OUT PDM_ODM_T pDM_Odm,
+ s4Byte CurrSig
+)
+{
+ s4Byte RetSig;
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+ //if(pDM_Odm->SupportInterface == ODM_ITRF_USB)
+ {
+ // Netcore request this modification because 2009.04.13 SU driver use it.
+ if(CurrSig >= 31 && CurrSig <= 100)
+ {
+ RetSig = 100;
+ }
+ else if(CurrSig >= 21 && CurrSig <= 30)
+ {
+ RetSig = 90 + ((CurrSig - 20) / 1);
+ }
+ else if(CurrSig >= 11 && CurrSig <= 20)
+ {
+ RetSig = 80 + ((CurrSig - 10) / 1);
+ }
+ else if(CurrSig >= 7 && CurrSig <= 10)
+ {
+ RetSig = 69 + (CurrSig - 7);
+ }
+ else if(CurrSig == 6)
+ {
+ RetSig = 54;
+ }
+ else if(CurrSig == 5)
+ {
+ RetSig = 45;
+ }
+ else if(CurrSig == 4)
+ {
+ RetSig = 36;
+ }
+ else if(CurrSig == 3)
+ {
+ RetSig = 27;
+ }
+ else if(CurrSig == 2)
+ {
+ RetSig = 18;
+ }
+ else if(CurrSig == 1)
+ {
+ RetSig = 9;
+ }
+ else
+ {
+ RetSig = CurrSig;
+ }
+ }
+#endif //ENDIF (DM_ODM_SUPPORT_TYPE == ODM_MP)
+ return RetSig;
+}
+
+
+s4Byte
+odm_SignalScaleMapping_92CSeries(
+ IN OUT PDM_ODM_T pDM_Odm,
+ IN s4Byte CurrSig
+)
+{
+ s4Byte RetSig;
+#if (DEV_BUS_TYPE == RT_PCI_INTERFACE)
+ if(pDM_Odm->SupportInterface == ODM_ITRF_PCIE)
+ {
+ // Step 1. Scale mapping.
+ if(CurrSig >= 61 && CurrSig <= 100)
+ {
+ RetSig = 90 + ((CurrSig - 60) / 4);
+ }
+ else if(CurrSig >= 41 && CurrSig <= 60)
+ {
+ RetSig = 78 + ((CurrSig - 40) / 2);
+ }
+ else if(CurrSig >= 31 && CurrSig <= 40)
+ {
+ RetSig = 66 + (CurrSig - 30);
+ }
+ else if(CurrSig >= 21 && CurrSig <= 30)
+ {
+ RetSig = 54 + (CurrSig - 20);
+ }
+ else if(CurrSig >= 5 && CurrSig <= 20)
+ {
+ RetSig = 42 + (((CurrSig - 5) * 2) / 3);
+ }
+ else if(CurrSig == 4)
+ {
+ RetSig = 36;
+ }
+ else if(CurrSig == 3)
+ {
+ RetSig = 27;
+ }
+ else if(CurrSig == 2)
+ {
+ RetSig = 18;
+ }
+ else if(CurrSig == 1)
+ {
+ RetSig = 9;
+ }
+ else
+ {
+ RetSig = CurrSig;
+ }
+ }
+#endif
+
+#if ((DEV_BUS_TYPE == RT_USB_INTERFACE) ||(DEV_BUS_TYPE == RT_SDIO_INTERFACE))
+ if((pDM_Odm->SupportInterface == ODM_ITRF_USB) || (pDM_Odm->SupportInterface == ODM_ITRF_SDIO) )
+ {
+ if(CurrSig >= 51 && CurrSig <= 100)
+ {
+ RetSig = 100;
+ }
+ else if(CurrSig >= 41 && CurrSig <= 50)
+ {
+ RetSig = 80 + ((CurrSig - 40)*2);
+ }
+ else if(CurrSig >= 31 && CurrSig <= 40)
+ {
+ RetSig = 66 + (CurrSig - 30);
+ }
+ else if(CurrSig >= 21 && CurrSig <= 30)
+ {
+ RetSig = 54 + (CurrSig - 20);
+ }
+ else if(CurrSig >= 10 && CurrSig <= 20)
+ {
+ RetSig = 42 + (((CurrSig - 10) * 2) / 3);
+ }
+ else if(CurrSig >= 5 && CurrSig <= 9)
+ {
+ RetSig = 22 + (((CurrSig - 5) * 3) / 2);
+ }
+ else if(CurrSig >= 1 && CurrSig <= 4)
+ {
+ RetSig = 6 + (((CurrSig - 1) * 3) / 2);
+ }
+ else
+ {
+ RetSig = CurrSig;
+ }
+ }
+#endif
+ return RetSig;
+}
+s4Byte
+odm_SignalScaleMapping(
+ IN OUT PDM_ODM_T pDM_Odm,
+ IN s4Byte CurrSig
+)
+{
+ if( (pDM_Odm->SupportPlatform == ODM_MP) &&
+ (pDM_Odm->SupportInterface != ODM_ITRF_PCIE) && //USB & SDIO
+ (pDM_Odm->PatchID==10))//pMgntInfo->CustomerID == RT_CID_819x_Netcore
+ {
+ return odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Netcore(pDM_Odm,CurrSig);
+ }
+ else if( (pDM_Odm->SupportPlatform == ODM_MP) &&
+ (pDM_Odm->SupportInterface == ODM_ITRF_PCIE) &&
+ (pDM_Odm->PatchID==19))//pMgntInfo->CustomerID == RT_CID_819x_Lenovo)
+ {
+ return odm_SignalScaleMapping_92CSeries_patch_RT_CID_819x_Lenovo(pDM_Odm, CurrSig);
+ }
+ else{
+ return odm_SignalScaleMapping_92CSeries(pDM_Odm,CurrSig);
+ }
+
+}
+#endif
+
+//pMgntInfo->CustomerID == RT_CID_819x_Lenovo
+static u1Byte odm_SQ_process_patch_RT_CID_819x_Lenovo(
+ IN PDM_ODM_T pDM_Odm,
+ IN u1Byte isCCKrate,
+ IN u1Byte PWDB_ALL,
+ IN u1Byte path,
+ IN u1Byte RSSI
+)
+{
+ u1Byte SQ;
+#if (DM_ODM_SUPPORT_TYPE & ODM_MP)
+ // mapping to 5 bars for vista signal strength
+ // signal quality in driver will be displayed to signal strength
+ if(isCCKrate){
+ // in vista.
+ if(PWDB_ALL >= 50)
+ SQ = 100;
+ else if(PWDB_ALL >= 35 && PWDB_ALL < 50)
+ SQ = 80;
+ else if(PWDB_ALL >= 22 && PWDB_ALL < 35)
+ SQ = 60;
+ else if(PWDB_ALL >= 18 && PWDB_ALL < 22)
+ SQ = 40;
+ else
+ SQ = 20;
+ }
+ else{//OFDM rate
+
+ // mapping to 5 bars for vista signal strength
+ // signal quality in driver will be displayed to signal strength
+ // in vista.
+ if(RSSI >= 50)
+ SQ = 100;
+ else if(RSSI >= 35 && RSSI < 50)
+ SQ = 80;
+ else if(RSSI >= 22 && RSSI < 35)
+ SQ = 60;
+ else if(RSSI >= 18 && RSSI < 22)
+ SQ = 40;
+ else
+ SQ = 20;
+ }
+#endif
+ return SQ;
+}
+
+static u1Byte
+odm_EVMdbToPercentage(
+ IN s1Byte Value
+ )
+{
+ //
+ // -33dB~0dB to 0%~99%
+ //
+ s1Byte ret_val;
+
+ ret_val = Value;
+ //ret_val /= 2;
+
+ //ODM_RTPRINT(FRX, RX_PHY_SQ, ("EVMdbToPercentage92C Value=%d / %x \n", ret_val, ret_val));
+
+ if(ret_val >= 0)
+ ret_val = 0;
+ if(ret_val <= -33)
+ ret_val = -33;
+
+ ret_val = 0 - ret_val;
+ ret_val*=3;
+
+ if(ret_val == 99)
+ ret_val = 100;
+
+ return(ret_val);
+}
+
+
+
+VOID
+odm_RxPhyStatus92CSeries_Parsing(
+ IN OUT PDM_ODM_T pDM_Odm,
+ OUT PODM_PHY_INFO_T pPhyInfo,
+ IN pu1Byte pPhyStatus,
+ IN PODM_PACKET_INFO_T pPktinfo
+ )
+{
+ SWAT_T *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
+ u1Byte i, Max_spatial_stream;
+ s1Byte rx_pwr[4], rx_pwr_all=0;
+ u1Byte EVM, PWDB_ALL = 0, PWDB_ALL_BT;
+ u1Byte RSSI, total_rssi=0;
+ u1Byte isCCKrate=0;
+ u1Byte rf_rx_num = 0;
+ u1Byte cck_highpwr = 0;
+ u1Byte LNA_idx, VGA_idx;
+
+ PPHY_STATUS_RPT_8192CD_T pPhyStaRpt = (PPHY_STATUS_RPT_8192CD_T)pPhyStatus;
+
+ isCCKrate = ((pPktinfo->Rate >= DESC92C_RATE1M ) && (pPktinfo->Rate <= DESC92C_RATE11M ))?TRUE :FALSE;
+
+ pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = -1;
+ pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;
+
+
+ if(isCCKrate)
+ {
+ u1Byte report;
+ u1Byte cck_agc_rpt;
+
+ pDM_Odm->PhyDbgInfo.NumQryPhyStatusCCK++;
+ //
+ // (1)Hardware does not provide RSSI for CCK
+ // (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive)
+ //
+
+ //if(pHalData->eRFPowerState == eRfOn)
+ cck_highpwr = pDM_Odm->bCckHighPower;
+ //else
+ // cck_highpwr = FALSE;
+
+ cck_agc_rpt = pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a ;
+
+ //2011.11.28 LukeLee: 88E use different LNA & VGA gain table
+ //The RSSI formula should be modified according to the gain table
+ //In 88E, cck_highpwr is always set to 1
+ if(pDM_Odm->SupportICType & (ODM_RTL8188E|ODM_RTL8812))
+ {
+ LNA_idx = ((cck_agc_rpt & 0xE0) >>5);
+ VGA_idx = (cck_agc_rpt & 0x1F);
+ switch(LNA_idx)
+ {
+ case 7:
+ if(VGA_idx <= 27)
+ rx_pwr_all = -100 + 2*(27-VGA_idx); //VGA_idx = 27~2
+ else
+ rx_pwr_all = -100;
+ break;
+ case 6:
+ rx_pwr_all = -48 + 2*(2-VGA_idx); //VGA_idx = 2~0
+ break;
+ case 5:
+ rx_pwr_all = -42 + 2*(7-VGA_idx); //VGA_idx = 7~5
+ break;
+ case 4:
+ rx_pwr_all = -36 + 2*(7-VGA_idx); //VGA_idx = 7~4
+ break;
+ case 3:
+ //rx_pwr_all = -28 + 2*(7-VGA_idx); //VGA_idx = 7~0
+ rx_pwr_all = -24 + 2*(7-VGA_idx); //VGA_idx = 7~0
+ break;
+ case 2:
+ if(cck_highpwr)
+ rx_pwr_all = -12 + 2*(5-VGA_idx); //VGA_idx = 5~0
+ else
+ rx_pwr_all = -6+ 2*(5-VGA_idx);
+ break;
+ case 1:
+ rx_pwr_all = 8-2*VGA_idx;
+ break;
+ case 0:
+ rx_pwr_all = 14-2*VGA_idx;
+ break;
+ default:
+ //DbgPrint("CCK Exception default\n");
+ break;
+ }
+ rx_pwr_all += 6;
+ PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);
+ if(cck_highpwr == FALSE)
+ {
+ if(PWDB_ALL >= 80)
+ PWDB_ALL = ((PWDB_ALL-80)<<1)+((PWDB_ALL-80)>>1)+80;
+ else if((PWDB_ALL <= 78) && (PWDB_ALL >= 20))
+ PWDB_ALL += 3;
+ if(PWDB_ALL>100)
+ PWDB_ALL = 100;
+ }
+ }
+ else
+ {
+ if(!cck_highpwr)
+ {
+ report =( cck_agc_rpt & 0xc0 )>>6;
+ switch(report)
+ {
+ // 03312009 modified by cosa
+ // Modify the RF RNA gain value to -40, -20, -2, 14 by Jenyu's suggestion
+ // Note: different RF with the different RNA gain.
+ case 0x3:
+ rx_pwr_all = -46 - (cck_agc_rpt & 0x3e);
+ break;
+ case 0x2:
+ rx_pwr_all = -26 - (cck_agc_rpt & 0x3e);
+ break;
+ case 0x1:
+ rx_pwr_all = -12 - (cck_agc_rpt & 0x3e);
+ break;
+ case 0x0:
+ rx_pwr_all = 16 - (cck_agc_rpt & 0x3e);
+ break;
+ }
+ }
+ else
+ {
+ //report = pDrvInfo->cfosho[0] & 0x60;
+ //report = pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a& 0x60;
+
+ report = (cck_agc_rpt & 0x60)>>5;
+ switch(report)
+ {
+ case 0x3:
+ rx_pwr_all = -46 - ((cck_agc_rpt & 0x1f)<<1) ;
+ break;
+ case 0x2:
+ rx_pwr_all = -26 - ((cck_agc_rpt & 0x1f)<<1);
+ break;
+ case 0x1:
+ rx_pwr_all = -12 - ((cck_agc_rpt & 0x1f)<<1) ;
+ break;
+ case 0x0:
+ rx_pwr_all = 16 - ((cck_agc_rpt & 0x1f)<<1) ;
+ break;
+ }
+ }
+
+ PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);
+
+ //Modification for ext-LNA board
+ if(pDM_Odm->BoardType & (ODM_BOARD_EXT_LNA | ODM_BOARD_EXT_PA))
+ {
+ if((cck_agc_rpt>>7) == 0){
+ PWDB_ALL = (PWDB_ALL>94)?100:(PWDB_ALL +6);
+ }
+ else
+ {
+ if(PWDB_ALL > 38)
+ PWDB_ALL -= 16;
+ else
+ PWDB_ALL = (PWDB_ALL<=16)?(PWDB_ALL>>2):(PWDB_ALL -12);
+ }
+
+ //CCK modification
+ if(PWDB_ALL > 25 && PWDB_ALL <= 60)
+ PWDB_ALL += 6;
+ //else if (PWDB_ALL <= 25)
+ // PWDB_ALL += 8;
+ }
+ else//Modification for int-LNA board
+ {
+ if(PWDB_ALL > 99)
+ PWDB_ALL -= 8;
+ else if(PWDB_ALL > 50 && PWDB_ALL <= 68)
+ PWDB_ALL += 4;
+ }
+ }
+
+ pPhyInfo->RxPWDBAll = PWDB_ALL;
+#if (DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_CE))
+ pPhyInfo->BTRxRSSIPercentage = PWDB_ALL;
+ pPhyInfo->RecvSignalPower = rx_pwr_all;
+#endif
+ //
+ // (3) Get Signal Quality (EVM)
+ //
+ if(pPktinfo->bPacketMatchBSSID)
+ {
+ u1Byte SQ,SQ_rpt;
+
+ if((pDM_Odm->SupportPlatform == ODM_MP) &&(pDM_Odm->PatchID==19)){//pMgntInfo->CustomerID == RT_CID_819x_Lenovo
+ SQ = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,0,0);
+ }
+ else if(pPhyInfo->RxPWDBAll > 40 && !pDM_Odm->bInHctTest){
+ SQ = 100;
+ }
+ else{
+ SQ_rpt = pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all;
+
+ if(SQ_rpt > 64)
+ SQ = 0;
+ else if (SQ_rpt < 20)
+ SQ = 100;
+ else
+ SQ = ((64-SQ_rpt) * 100) / 44;
+
+ }
+
+ //DbgPrint("cck SQ = %d\n", SQ);
+ pPhyInfo->SignalQuality = SQ;
+ pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_A] = SQ;
+ pPhyInfo->RxMIMOSignalQuality[ODM_RF_PATH_B] = -1;
+ }
+ }
+ else //is OFDM rate
+ {
+ pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;
+
+ //
+ // (1)Get RSSI for HT rate
+ //
+
+ for(i = ODM_RF_PATH_A; i < ODM_RF_PATH_MAX; i++)
+ {
+ // 2008/01/30 MH we will judge RF RX path now.
+ if (pDM_Odm->RFPathRxEnable & BIT(i))
+ rf_rx_num++;
+ //else
+ //continue;
+
+ rx_pwr[i] = ((pPhyStaRpt->path_agc[i].gain& 0x3F)*2) - 110;
+
+ #if (DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_CE))
+ pPhyInfo->RxPwr[i] = rx_pwr[i];
+ #endif
+
+ /* Translate DBM to percentage. */
+ RSSI = odm_QueryRxPwrPercentage(rx_pwr[i]);
+ total_rssi += RSSI;
+ //RTPRINT(FRX, RX_PHY_SS, ("RF-%d RXPWR=%x RSSI=%d\n", i, rx_pwr[i], RSSI));
+
+ //Modification for ext-LNA board
+ if(pDM_Odm->BoardType & (ODM_BOARD_EXT_LNA | ODM_BOARD_EXT_PA))
+ {
+ if((pPhyStaRpt->path_agc[i].trsw) == 1)
+ RSSI = (RSSI>94)?100:(RSSI +6);
+ else
+ RSSI = (RSSI<=16)?(RSSI>>3):(RSSI -16);
+
+ if((RSSI <= 34) && (RSSI >=4))
+ RSSI -= 4;
+ }
+
+ pPhyInfo->RxMIMOSignalStrength[i] =(u1Byte) RSSI;
+
+ #if (DM_ODM_SUPPORT_TYPE & (/*ODM_MP|*/ODM_CE|ODM_AP|ODM_ADSL))
+ //Get Rx snr value in DB
+ pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = (s4Byte)(pPhyStaRpt->path_rxsnr[i]/2);
+ #endif
+
+ /* Record Signal Strength for next packet */
+ if(pPktinfo->bPacketMatchBSSID)
+ {
+ if((pDM_Odm->SupportPlatform == ODM_MP) &&(pDM_Odm->PatchID==19))
+ {
+ if(i==ODM_RF_PATH_A)
+ pPhyInfo->SignalQuality = odm_SQ_process_patch_RT_CID_819x_Lenovo(pDM_Odm,isCCKrate,PWDB_ALL,i,RSSI);
+
+ }
+
+ }
+ }
+
+
+ //
+ // (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive)
+ //
+ rx_pwr_all = (((pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all) >> 1 )& 0x7f) -110;
+ //RTPRINT(FRX, RX_PHY_SS, ("PWDB_ALL=%d\n", PWDB_ALL));
+
+ PWDB_ALL_BT = PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);
+ //RTPRINT(FRX, RX_PHY_SS, ("PWDB_ALL=%d\n",PWDB_ALL));
+
+ pPhyInfo->RxPWDBAll = PWDB_ALL;
+ //ODM_RT_TRACE(pDM_Odm,ODM_COMP_RSSI_MONITOR, ODM_DBG_LOUD, ("ODM OFDM RSSI=%d\n",pPhyInfo->RxPWDBAll));
+ #if (DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_CE))
+ pPhyInfo->BTRxRSSIPercentage = PWDB_ALL_BT;
+ pPhyInfo->RxPower = rx_pwr_all;
+ pPhyInfo->RecvSignalPower = rx_pwr_all;
+ #endif
+
+ if((pDM_Odm->SupportPlatform == ODM_MP) &&(pDM_Odm->PatchID==19)){
+ //do nothing
+ }
+ else{//pMgntInfo->CustomerID != RT_CID_819x_Lenovo
+ //
+ // (3)EVM of HT rate
+ //
+ if(pPktinfo->Rate >=DESC92C_RATEMCS8 && pPktinfo->Rate <=DESC92C_RATEMCS15)
+ Max_spatial_stream = 2; //both spatial stream make sense
+ else
+ Max_spatial_stream = 1; //only spatial stream 1 makes sense
+
+ for(i=0; i<Max_spatial_stream; i++)
+ {
+ // Do not use shift operation like "rx_evmX >>= 1" because the compilor of free build environment
+ // fill most significant bit to "zero" when doing shifting operation which may change a negative
+ // value to positive one, then the dbm value (which is supposed to be negative) is not correct anymore.
+ EVM = odm_EVMdbToPercentage( (pPhyStaRpt->stream_rxevm[i] )); //dbm
+
+ //RTPRINT(FRX, RX_PHY_SQ, ("RXRATE=%x RXEVM=%x EVM=%s%d\n",
+ //GET_RX_STATUS_DESC_RX_MCS(pDesc), pDrvInfo->rxevm[i], "%", EVM));
+
+ if(pPktinfo->bPacketMatchBSSID)
+ {
+ if(i==ODM_RF_PATH_A) // Fill value in RFD, Get the first spatial stream only
+ {
+ pPhyInfo->SignalQuality = (u1Byte)(EVM & 0xff);
+ }
+ pPhyInfo->RxMIMOSignalQuality[i] = (u1Byte)(EVM & 0xff);
+ }
+ }
+ }
+
+ }
+#if (DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_CE))
+ //UI BSS List signal strength(in percentage), make it good looking, from 0~100.
+ //It is assigned to the BSS List in GetValueFromBeaconOrProbeRsp().
+ if(isCCKrate)
+ {
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+ // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/
+ pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, PWDB_ALL));//PWDB_ALL;
+#else
+ pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));//PWDB_ALL;
+#endif
+ }
+ else
+ {
+ if (rf_rx_num != 0)
+ {
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+ // 2012/01/12 MH Use customeris signal strength from HalComRxdDesc.c/
+ pPhyInfo->SignalStrength = (u1Byte)(SignalScaleMapping(pDM_Odm->Adapter, total_rssi/=rf_rx_num));//PWDB_ALL;
+#else
+ pPhyInfo->SignalStrength = (u1Byte)(odm_SignalScaleMapping(pDM_Odm, total_rssi/=rf_rx_num));
+#endif
+ }
+ }
+#endif
+
+ //For 92C/92D HW (Hybrid) Antenna Diversity
+#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
+ pDM_SWAT_Table->antsel = pPhyStaRpt->ant_sel;
+ //For 88E HW Antenna Diversity
+ pDM_Odm->DM_FatTable.antsel_rx_keep_0 = pPhyStaRpt->ant_sel;
+ pDM_Odm->DM_FatTable.antsel_rx_keep_1 = pPhyStaRpt->ant_sel_b;
+ pDM_Odm->DM_FatTable.antsel_rx_keep_2 = pPhyStaRpt->antsel_rx_keep_2;
+#endif
+}
+
+VOID
+odm_Init_RSSIForDM(
+ IN OUT PDM_ODM_T pDM_Odm
+ )
+{
+
+}
+
+VOID
+odm_Process_RSSIForDM(
+ IN OUT PDM_ODM_T pDM_Odm,
+ IN PODM_PHY_INFO_T pPhyInfo,
+ IN PODM_PACKET_INFO_T pPktinfo
+ )
+{
+
+ s4Byte UndecoratedSmoothedPWDB, UndecoratedSmoothedCCK, UndecoratedSmoothedOFDM, RSSI_Ave;
+ u1Byte isCCKrate=0;
+ u1Byte RSSI_max, RSSI_min, i;
+ u4Byte OFDM_pkt=0;
+ u4Byte Weighting=0;
+
+ PSTA_INFO_T pEntry;
+
+ if(pPktinfo->StationID == 0xFF)
+ return;
+
+ // 2011/11/17 MH Need to debug
+ //if (pDM_Odm->SupportPlatform == ODM_MP)
+ {
+
+ }
+
+ pEntry = pDM_Odm->pODM_StaInfo[pPktinfo->StationID];
+ if(!IS_STA_VALID(pEntry) ){
+ return;
+ }
+ if((!pPktinfo->bPacketMatchBSSID) )
+ {
+ return;
+ }
+
+ isCCKrate = ((pPktinfo->Rate >= DESC92C_RATE1M ) && (pPktinfo->Rate <= DESC92C_RATE11M ))?TRUE :FALSE;
+ if(pPktinfo->bPacketBeacon)
+ pDM_Odm->PhyDbgInfo.NumQryBeaconPkt++;
+
+ pDM_Odm->RxRate = pPktinfo->Rate;
+#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
+#if ((RTL8192C_SUPPORT == 1) ||(RTL8192D_SUPPORT == 1))
+ if(pDM_Odm->SupportICType & ODM_RTL8192C|ODM_RTL8192D)
+ {
+ if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon)
+ {
+ //if(pPktinfo->bPacketBeacon)
+ //{
+ // DbgPrint("This is beacon, isCCKrate=%d\n", isCCKrate);
+ //}
+ ODM_AntselStatistics_88C(pDM_Odm, pPktinfo->StationID, pPhyInfo->RxPWDBAll, isCCKrate);
+ }
+ }
+#endif
+ //-----------------Smart Antenna Debug Message------------------//
+#if (RTL8188E_SUPPORT == 1)
+ if(pDM_Odm->SupportICType == ODM_RTL8188E)
+ {
+ u1Byte antsel_tr_mux;
+ pFAT_T pDM_FatTable = &pDM_Odm->DM_FatTable;
+
+ if(pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV)
+ {
+ if(pDM_FatTable->FAT_State == FAT_TRAINING_STATE)
+ {
+ if(pPktinfo->bPacketToSelf) //(pPktinfo->bPacketMatchBSSID && (!pPktinfo->bPacketBeacon))
+ {
+ antsel_tr_mux = (pDM_FatTable->antsel_rx_keep_2<<2) |(pDM_FatTable->antsel_rx_keep_1 <<1) |pDM_FatTable->antsel_rx_keep_0;
+ pDM_FatTable->antSumRSSI[antsel_tr_mux] += pPhyInfo->RxPWDBAll;
+ pDM_FatTable->antRSSIcnt[antsel_tr_mux]++;
+ //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("isCCKrate=%d, PWDB_ALL=%d\n",isCCKrate, pPhyInfo->RxPWDBAll));
+ //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("antsel_tr_mux=3'b%d%d%d\n",
+ //pDM_FatTable->antsel_rx_keep_2, pDM_FatTable->antsel_rx_keep_1, pDM_FatTable->antsel_rx_keep_0));
+
+ }
+ }
+ }
+ else if((pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)||(pDM_Odm->AntDivType == CGCS_RX_HW_ANTDIV))
+ {
+ if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon)
+ {
+ antsel_tr_mux = (pDM_FatTable->antsel_rx_keep_2<<2) |(pDM_FatTable->antsel_rx_keep_1 <<1) |pDM_FatTable->antsel_rx_keep_0;
+ //ODM_RT_TRACE(pDM_Odm,ODM_COMP_ANT_DIV, ODM_DBG_LOUD,("antsel_tr_mux=3'b%d%d%d\n",
+ // pDM_FatTable->antsel_rx_keep_2, pDM_FatTable->antsel_rx_keep_1, pDM_FatTable->antsel_rx_keep_0));
+
+ ODM_AntselStatistics_88E(pDM_Odm, antsel_tr_mux, pPktinfo->StationID, pPhyInfo->RxPWDBAll);
+ }
+ }
+
+ }
+#endif
+#endif //#if(defined(CONFIG_HW_ANTENNA_DIVERSITY))
+ //-----------------Smart Antenna Debug Message------------------//
+
+ UndecoratedSmoothedCCK = pEntry->rssi_stat.UndecoratedSmoothedCCK;
+ UndecoratedSmoothedOFDM = pEntry->rssi_stat.UndecoratedSmoothedOFDM;
+ UndecoratedSmoothedPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB;
+
+ if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon)
+ {
+
+ if(!isCCKrate)//ofdm rate
+ {
+ if(pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B] == 0){
+ RSSI_Ave = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];
+ pDM_Odm->RSSI_A = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];
+ pDM_Odm->RSSI_B = 0;
+ }
+ else
+ {
+ //DbgPrint("pRfd->Status.RxMIMOSignalStrength[0] = %d, pRfd->Status.RxMIMOSignalStrength[1] = %d \n",
+ //pRfd->Status.RxMIMOSignalStrength[0], pRfd->Status.RxMIMOSignalStrength[1]);
+ pDM_Odm->RSSI_A = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];
+ pDM_Odm->RSSI_B = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];
+
+ if(pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A] > pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B])
+ {
+ RSSI_max = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];
+ RSSI_min = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];
+ }
+ else
+ {
+ RSSI_max = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_B];
+ RSSI_min = pPhyInfo->RxMIMOSignalStrength[ODM_RF_PATH_A];
+ }
+ if((RSSI_max -RSSI_min) < 3)
+ RSSI_Ave = RSSI_max;
+ else if((RSSI_max -RSSI_min) < 6)
+ RSSI_Ave = RSSI_max - 1;
+ else if((RSSI_max -RSSI_min) < 10)
+ RSSI_Ave = RSSI_max - 2;
+ else
+ RSSI_Ave = RSSI_max - 3;
+ }
+
+ //1 Process OFDM RSSI
+ if(UndecoratedSmoothedOFDM <= 0) // initialize
+ {
+ UndecoratedSmoothedOFDM = pPhyInfo->RxPWDBAll;
+ }
+ else
+ {
+ if(pPhyInfo->RxPWDBAll > (u4Byte)UndecoratedSmoothedOFDM)
+ {
+ UndecoratedSmoothedOFDM =
+ ( ((UndecoratedSmoothedOFDM)*(Rx_Smooth_Factor-1)) +
+ (RSSI_Ave)) /(Rx_Smooth_Factor);
+ UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM + 1;
+ }
+ else
+ {
+ UndecoratedSmoothedOFDM =
+ ( ((UndecoratedSmoothedOFDM)*(Rx_Smooth_Factor-1)) +
+ (RSSI_Ave)) /(Rx_Smooth_Factor);
+ }
+ }
+
+ pEntry->rssi_stat.PacketMap = (pEntry->rssi_stat.PacketMap<<1) | BIT0;
+
+ }
+ else
+ {
+ RSSI_Ave = pPhyInfo->RxPWDBAll;
+ pDM_Odm->RSSI_A = (u1Byte) pPhyInfo->RxPWDBAll;
+ pDM_Odm->RSSI_B = 0xFF;
+
+ //1 Process CCK RSSI
+ if(UndecoratedSmoothedCCK <= 0) // initialize
+ {
+ UndecoratedSmoothedCCK = pPhyInfo->RxPWDBAll;
+ }
+ else
+ {
+ if(pPhyInfo->RxPWDBAll > (u4Byte)UndecoratedSmoothedCCK)
+ {
+ UndecoratedSmoothedCCK =
+ ( ((UndecoratedSmoothedCCK)*(Rx_Smooth_Factor-1)) +
+ (pPhyInfo->RxPWDBAll)) /(Rx_Smooth_Factor);
+ UndecoratedSmoothedCCK = UndecoratedSmoothedCCK + 1;
+ }
+ else
+ {
+ UndecoratedSmoothedCCK =
+ ( ((UndecoratedSmoothedCCK)*(Rx_Smooth_Factor-1)) +
+ (pPhyInfo->RxPWDBAll)) /(Rx_Smooth_Factor);
+ }
+ }
+ pEntry->rssi_stat.PacketMap = pEntry->rssi_stat.PacketMap<<1;
+ }
+
+ //if(pEntry)
+ {
+ //2011.07.28 LukeLee: modified to prevent unstable CCK RSSI
+ if(pEntry->rssi_stat.ValidBit >= 64)
+ pEntry->rssi_stat.ValidBit = 64;
+ else
+ pEntry->rssi_stat.ValidBit++;
+
+ for(i=0; i<pEntry->rssi_stat.ValidBit; i++)
+ OFDM_pkt += (u1Byte)(pEntry->rssi_stat.PacketMap>>i)&BIT0;
+
+ if(pEntry->rssi_stat.ValidBit == 64)
+ {
+ Weighting = ((OFDM_pkt<<4) > 64)?64:(OFDM_pkt<<4);
+ UndecoratedSmoothedPWDB = (Weighting*UndecoratedSmoothedOFDM+(64-Weighting)*UndecoratedSmoothedCCK)>>6;
+ }
+ else
+ {
+ if(pEntry->rssi_stat.ValidBit != 0)
+ UndecoratedSmoothedPWDB = (OFDM_pkt*UndecoratedSmoothedOFDM+(pEntry->rssi_stat.ValidBit-OFDM_pkt)*UndecoratedSmoothedCCK)/pEntry->rssi_stat.ValidBit;
+ else
+ UndecoratedSmoothedPWDB = 0;
+ }
+
+ pEntry->rssi_stat.UndecoratedSmoothedCCK = UndecoratedSmoothedCCK;
+ pEntry->rssi_stat.UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM;
+ pEntry->rssi_stat.UndecoratedSmoothedPWDB = UndecoratedSmoothedPWDB;
+
+ //DbgPrint("OFDM_pkt=%d, Weighting=%d\n", OFDM_pkt, Weighting);
+ //DbgPrint("UndecoratedSmoothedOFDM=%d, UndecoratedSmoothedPWDB=%d, UndecoratedSmoothedCCK=%d\n",
+ // UndecoratedSmoothedOFDM, UndecoratedSmoothedPWDB, UndecoratedSmoothedCCK);
+
+ }
+
+ }
+}
+
+//
+// Endianness before calling this API
+//
+VOID
+ODM_PhyStatusQuery_92CSeries(
+ IN OUT PDM_ODM_T pDM_Odm,
+ OUT PODM_PHY_INFO_T pPhyInfo,
+ IN pu1Byte pPhyStatus,
+ IN PODM_PACKET_INFO_T pPktinfo
+ )
+{
+
+ odm_RxPhyStatus92CSeries_Parsing(
+ pDM_Odm,
+ pPhyInfo,
+ pPhyStatus,
+ pPktinfo);
+
+ if( pDM_Odm->RSSI_test == TRUE)
+ {
+ // Select the packets to do RSSI checking for antenna switching.
+ if(pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon )
+ {
+ /*
+ #if 0//(DM_ODM_SUPPORT_TYPE == ODM_MP)
+ dm_SWAW_RSSI_Check(
+ Adapter,
+ (tmppAdapter!=NULL)?(tmppAdapter==Adapter):TRUE,
+ bPacketMatchBSSID,
+ pEntry,
+ pRfd);
+ #elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
+ // Select the packets to do RSSI checking for antenna switching.
+ //odm_SwAntDivRSSICheck8192C(padapter, precvframe->u.hdr.attrib.RxPWDBAll);
+ #endif
+ */
+ ODM_SwAntDivChkPerPktRssi(pDM_Odm,pPktinfo->StationID,pPhyInfo);
+ }
+ }
+ else
+ {
+ odm_Process_RSSIForDM(pDM_Odm,pPhyInfo,pPktinfo);
+ }
+
+}
+
+
+
+//
+// Endianness before calling this API
+//
+VOID
+ODM_PhyStatusQuery_JaguarSeries(
+ IN OUT PDM_ODM_T pDM_Odm,
+ OUT PODM_PHY_INFO_T pPhyInfo,
+ IN pu1Byte pPhyStatus,
+ IN PODM_PACKET_INFO_T pPktinfo
+ )
+{
+
+
+}
+
+VOID
+ODM_PhyStatusQuery(
+ IN OUT PDM_ODM_T pDM_Odm,
+ OUT PODM_PHY_INFO_T pPhyInfo,
+ IN pu1Byte pPhyStatus,
+ IN PODM_PACKET_INFO_T pPktinfo
+ )
+{
+#if 0 // How to jaguar jugar series??
+ if(pDM_Odm->SupportICType >= ODM_RTL8195 )
+ {
+ ODM_PhyStatusQuery_JaguarSeries(pDM_Odm,pPhyInfo,pPhyStatus,pPktinfo);
+ }
+ else
+#endif
+ {
+ ODM_PhyStatusQuery_92CSeries(pDM_Odm,pPhyInfo,pPhyStatus,pPktinfo);
+ }
+}
+
+// For future use.
+VOID
+ODM_MacStatusQuery(
+ IN OUT PDM_ODM_T pDM_Odm,
+ IN pu1Byte pMacStatus,
+ IN u1Byte MacID,
+ IN BOOLEAN bPacketMatchBSSID,
+ IN BOOLEAN bPacketToSelf,
+ IN BOOLEAN bPacketBeacon
+ )
+{
+ // 2011/10/19 Driver team will handle in the future.
+
+}
+
+#if (DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_CE|ODM_AP))
+
+HAL_STATUS
+ODM_ConfigRFWithHeaderFile(
+ IN PDM_ODM_T pDM_Odm,
+ IN ODM_RF_RADIO_PATH_E Content,
+ IN ODM_RF_RADIO_PATH_E eRFPath
+ )
+{
+ //RT_STATUS rtStatus = RT_STATUS_SUCCESS;
+
+
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, ("===>ODM_ConfigRFWithHeaderFile\n"));
+#if (RTL8723A_SUPPORT == 1)
+ if (pDM_Odm->SupportICType == ODM_RTL8723A)
+ {
+ if(eRFPath == ODM_RF_PATH_A)
+ READ_AND_CONFIG_MP(8723A,_RadioA_1T_);
+
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> ODM_ConfigRFWithHeaderFile() Radio_A:Rtl8723RadioA_1TArray\n"));
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> ODM_ConfigRFWithHeaderFile() Radio_B:Rtl8723RadioB_1TArray\n"));
+ }
+
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("ODM_ConfigRFWithHeaderFile: Radio No %x\n", eRFPath));
+ //rtStatus = RT_STATUS_SUCCESS;
+#endif
+#if (RTL8188E_SUPPORT == 1)
+ if (pDM_Odm->SupportICType == ODM_RTL8188E)
+ {
+ if(eRFPath == ODM_RF_PATH_A)
+ READ_AND_CONFIG(8188E,_RadioA_1T_);
+ //else if(eRFPath == ODM_RF_PATH_B)
+ // READ_AND_CONFIG(8188E,_RadioB_1T_);
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> ODM_ConfigRFWithHeaderFile() Radio_A:Rtl8188ERadioA_1TArray\n"));
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> ODM_ConfigRFWithHeaderFile() Radio_B:Rtl8188ERadioB_1TArray\n"));
+ }
+
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_TRACE, ("ODM_ConfigRFWithHeaderFile: Radio No %x\n", eRFPath));
+ //rtStatus = RT_STATUS_SUCCESS;
+#endif
+ return HAL_STATUS_SUCCESS;
+}
+
+
+HAL_STATUS
+ODM_ConfigBBWithHeaderFile(
+ IN PDM_ODM_T pDM_Odm,
+ IN ODM_BB_Config_Type ConfigType
+ )
+{
+#if (RTL8723A_SUPPORT == 1)
+ if(pDM_Odm->SupportICType == ODM_RTL8723A)
+ {
+
+ if(ConfigType == CONFIG_BB_PHY_REG)
+ {
+ READ_AND_CONFIG_MP(8723A,_PHY_REG_1T_);
+ }
+ else if(ConfigType == CONFIG_BB_AGC_TAB)
+ {
+ READ_AND_CONFIG_MP(8723A,_AGC_TAB_1T_);
+ }
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() phy:Rtl8723AGCTAB_1TArray\n"));
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() agc:Rtl8723PHY_REG_1TArray\n"));
+ }
+#endif
+
+#if (RTL8188E_SUPPORT == 1)
+ if(pDM_Odm->SupportICType == ODM_RTL8188E)
+ {
+
+ if(ConfigType == CONFIG_BB_PHY_REG)
+ {
+ READ_AND_CONFIG(8188E,_PHY_REG_1T_);
+ }
+// else if(ConfigType == ODM_BaseBand_Config_PHY_REG_MP)
+// {
+ //READ_AND_CONFIG(8188E,_PHY_REG_MP_);
+// }
+ else if(ConfigType == CONFIG_BB_AGC_TAB)
+ {
+ READ_AND_CONFIG(8188E,_AGC_TAB_1T_);
+ }
+ else if(ConfigType == CONFIG_BB_PHY_REG_PG)
+ {
+ READ_AND_CONFIG(8188E,_PHY_REG_PG_);
+ ODM_RT_TRACE(pDM_Odm,ODM_COMP_INIT, ODM_DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() agc:Rtl8188EPHY_REG_PGArray\n"));
+ }
+ }
+#endif
+
+ return HAL_STATUS_SUCCESS;
+}
+
+HAL_STATUS
+ODM_ConfigMACWithHeaderFile(
+ IN PDM_ODM_T pDM_Odm
+ )
+{
+ u1Byte result = HAL_STATUS_SUCCESS;
+#if (RTL8723A_SUPPORT == 1)
+ if (pDM_Odm->SupportICType == ODM_RTL8723A)
+ {
+ READ_AND_CONFIG_MP(8723A,_MAC_REG_);
+ }
+#endif
+#if (RTL8188E_SUPPORT == 1)
+ if (pDM_Odm->SupportICType == ODM_RTL8188E)
+ {
+ result = READ_AND_CONFIG(8188E,_MAC_REG_);
+ }
+#endif
+
+ return result;
+}
+
+
+#endif // end of (#if DM_ODM_SUPPORT_TYPE)
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_HWConfig.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_HWConfig.h
index 3014a6cb9484..9b53a8aa3361 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_HWConfig.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_HWConfig.h
@@ -1,195 +1,195 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-
-#ifndef __HALHWOUTSRC_H__
-#define __HALHWOUTSRC_H__
-
-//============================================================
-// Definition
-//============================================================
-//
-//-----------------------------------------------------------
-// CCK Rates, TxHT = 0
-#define DESC92C_RATE1M 0x00
-#define DESC92C_RATE2M 0x01
-#define DESC92C_RATE5_5M 0x02
-#define DESC92C_RATE11M 0x03
-
-// OFDM Rates, TxHT = 0
-#define DESC92C_RATE6M 0x04
-#define DESC92C_RATE9M 0x05
-#define DESC92C_RATE12M 0x06
-#define DESC92C_RATE18M 0x07
-#define DESC92C_RATE24M 0x08
-#define DESC92C_RATE36M 0x09
-#define DESC92C_RATE48M 0x0a
-#define DESC92C_RATE54M 0x0b
-
-// MCS Rates, TxHT = 1
-#define DESC92C_RATEMCS0 0x0c
-#define DESC92C_RATEMCS1 0x0d
-#define DESC92C_RATEMCS2 0x0e
-#define DESC92C_RATEMCS3 0x0f
-#define DESC92C_RATEMCS4 0x10
-#define DESC92C_RATEMCS5 0x11
-#define DESC92C_RATEMCS6 0x12
-#define DESC92C_RATEMCS7 0x13
-#define DESC92C_RATEMCS8 0x14
-#define DESC92C_RATEMCS9 0x15
-#define DESC92C_RATEMCS10 0x16
-#define DESC92C_RATEMCS11 0x17
-#define DESC92C_RATEMCS12 0x18
-#define DESC92C_RATEMCS13 0x19
-#define DESC92C_RATEMCS14 0x1a
-#define DESC92C_RATEMCS15 0x1b
-#define DESC92C_RATEMCS15_SG 0x1c
-#define DESC92C_RATEMCS32 0x20
-
-
-//============================================================
-// structure and define
-//============================================================
-
-typedef struct _Phy_Rx_AGC_Info
-{
- #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
- u1Byte gain:7,trsw:1;
- #else
- u1Byte trsw:1,gain:7;
- #endif
-} PHY_RX_AGC_INFO_T,*pPHY_RX_AGC_INFO_T;
-
-typedef struct _Phy_Status_Rpt_8192cd
-{
- PHY_RX_AGC_INFO_T path_agc[2];
- u1Byte ch_corr[2];
- u1Byte cck_sig_qual_ofdm_pwdb_all;
- u1Byte cck_agc_rpt_ofdm_cfosho_a;
- u1Byte cck_rpt_b_ofdm_cfosho_b;
- u1Byte rsvd_1;//ch_corr_msb;
- u1Byte noise_power_db_msb;
- u1Byte path_cfotail[2];
- u1Byte pcts_mask[2];
- s1Byte stream_rxevm[2];
- u1Byte path_rxsnr[2];
- u1Byte noise_power_db_lsb;
- u1Byte rsvd_2[3];
- u1Byte stream_csi[2];
- u1Byte stream_target_csi[2];
- s1Byte sig_evm;
- u1Byte rsvd_3;
-
-#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
- u1Byte antsel_rx_keep_2:1; //ex_intf_flg:1;
- u1Byte sgi_en:1;
- u1Byte rxsc:2;
- u1Byte idle_long:1;
- u1Byte r_ant_train_en:1;
- u1Byte ant_sel_b:1;
- u1Byte ant_sel:1;
-#else // _BIG_ENDIAN_
- u1Byte ant_sel:1;
- u1Byte ant_sel_b:1;
- u1Byte r_ant_train_en:1;
- u1Byte idle_long:1;
- u1Byte rxsc:2;
- u1Byte sgi_en:1;
- u1Byte antsel_rx_keep_2:1; //ex_intf_flg:1;
-#endif
-} PHY_STATUS_RPT_8192CD_T,*PPHY_STATUS_RPT_8192CD_T;
-
-
-typedef struct _Phy_Status_Rpt_8195
-{
- PHY_RX_AGC_INFO_T path_agc[2];
- u1Byte ch_num[2];
- u1Byte cck_sig_qual_ofdm_pwdb_all;
- u1Byte cck_agc_rpt_ofdm_cfosho_a;
- u1Byte cck_bb_pwr_ofdm_cfosho_b;
- u1Byte cck_rx_path; //CCK_RX_PATH [3:0] (with regA07[3:0] definition)
- u1Byte rsvd_1;
- u1Byte path_cfotail[2];
- u1Byte pcts_mask[2];
- s1Byte stream_rxevm[2];
- u1Byte path_rxsnr[2];
- u1Byte rsvd_2[2];
- u1Byte stream_snr[2];
- u1Byte stream_csi[2];
- u1Byte rsvd_3[2];
- s1Byte sig_evm;
- u1Byte rsvd_4;
-#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
- u1Byte antidx_anta:3;
- u1Byte antidx_antb:3;
- u1Byte rsvd_5:2;
-#else // _BIG_ENDIAN_
- u1Byte rsvd_5:2;
- u1Byte antidx_antb:3;
- u1Byte antidx_anta:3;
-#endif
-} PHY_STATUS_RPT_8195_T,*pPHY_STATUS_RPT_8195_T;
-
-
-VOID
-odm_Init_RSSIForDM(
- IN OUT PDM_ODM_T pDM_Odm
- );
-
-VOID
-ODM_PhyStatusQuery(
- IN OUT PDM_ODM_T pDM_Odm,
- OUT PODM_PHY_INFO_T pPhyInfo,
- IN pu1Byte pPhyStatus,
- IN PODM_PACKET_INFO_T pPktinfo
- );
-
-VOID
-ODM_MacStatusQuery(
- IN OUT PDM_ODM_T pDM_Odm,
- IN pu1Byte pMacStatus,
- IN u1Byte MacID,
- IN BOOLEAN bPacketMatchBSSID,
- IN BOOLEAN bPacketToSelf,
- IN BOOLEAN bPacketBeacon
- );
-#if (DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_CE|ODM_AP))
-HAL_STATUS
-ODM_ConfigRFWithHeaderFile(
- IN PDM_ODM_T pDM_Odm,
- IN ODM_RF_RADIO_PATH_E Content,
- IN ODM_RF_RADIO_PATH_E eRFPath
- );
-
-HAL_STATUS
-ODM_ConfigBBWithHeaderFile(
- IN PDM_ODM_T pDM_Odm,
- IN ODM_BB_Config_Type ConfigType
- );
-
-HAL_STATUS
-ODM_ConfigMACWithHeaderFile(
- IN PDM_ODM_T pDM_Odm
- );
-#endif
-
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+
+#ifndef __HALHWOUTSRC_H__
+#define __HALHWOUTSRC_H__
+
+//============================================================
+// Definition
+//============================================================
+//
+//-----------------------------------------------------------
+// CCK Rates, TxHT = 0
+#define DESC92C_RATE1M 0x00
+#define DESC92C_RATE2M 0x01
+#define DESC92C_RATE5_5M 0x02
+#define DESC92C_RATE11M 0x03
+
+// OFDM Rates, TxHT = 0
+#define DESC92C_RATE6M 0x04
+#define DESC92C_RATE9M 0x05
+#define DESC92C_RATE12M 0x06
+#define DESC92C_RATE18M 0x07
+#define DESC92C_RATE24M 0x08
+#define DESC92C_RATE36M 0x09
+#define DESC92C_RATE48M 0x0a
+#define DESC92C_RATE54M 0x0b
+
+// MCS Rates, TxHT = 1
+#define DESC92C_RATEMCS0 0x0c
+#define DESC92C_RATEMCS1 0x0d
+#define DESC92C_RATEMCS2 0x0e
+#define DESC92C_RATEMCS3 0x0f
+#define DESC92C_RATEMCS4 0x10
+#define DESC92C_RATEMCS5 0x11
+#define DESC92C_RATEMCS6 0x12
+#define DESC92C_RATEMCS7 0x13
+#define DESC92C_RATEMCS8 0x14
+#define DESC92C_RATEMCS9 0x15
+#define DESC92C_RATEMCS10 0x16
+#define DESC92C_RATEMCS11 0x17
+#define DESC92C_RATEMCS12 0x18
+#define DESC92C_RATEMCS13 0x19
+#define DESC92C_RATEMCS14 0x1a
+#define DESC92C_RATEMCS15 0x1b
+#define DESC92C_RATEMCS15_SG 0x1c
+#define DESC92C_RATEMCS32 0x20
+
+
+//============================================================
+// structure and define
+//============================================================
+
+typedef struct _Phy_Rx_AGC_Info
+{
+ #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
+ u1Byte gain:7,trsw:1;
+ #else
+ u1Byte trsw:1,gain:7;
+ #endif
+} PHY_RX_AGC_INFO_T,*pPHY_RX_AGC_INFO_T;
+
+typedef struct _Phy_Status_Rpt_8192cd
+{
+ PHY_RX_AGC_INFO_T path_agc[2];
+ u1Byte ch_corr[2];
+ u1Byte cck_sig_qual_ofdm_pwdb_all;
+ u1Byte cck_agc_rpt_ofdm_cfosho_a;
+ u1Byte cck_rpt_b_ofdm_cfosho_b;
+ u1Byte rsvd_1;//ch_corr_msb;
+ u1Byte noise_power_db_msb;
+ u1Byte path_cfotail[2];
+ u1Byte pcts_mask[2];
+ s1Byte stream_rxevm[2];
+ u1Byte path_rxsnr[2];
+ u1Byte noise_power_db_lsb;
+ u1Byte rsvd_2[3];
+ u1Byte stream_csi[2];
+ u1Byte stream_target_csi[2];
+ s1Byte sig_evm;
+ u1Byte rsvd_3;
+
+#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
+ u1Byte antsel_rx_keep_2:1; //ex_intf_flg:1;
+ u1Byte sgi_en:1;
+ u1Byte rxsc:2;
+ u1Byte idle_long:1;
+ u1Byte r_ant_train_en:1;
+ u1Byte ant_sel_b:1;
+ u1Byte ant_sel:1;
+#else // _BIG_ENDIAN_
+ u1Byte ant_sel:1;
+ u1Byte ant_sel_b:1;
+ u1Byte r_ant_train_en:1;
+ u1Byte idle_long:1;
+ u1Byte rxsc:2;
+ u1Byte sgi_en:1;
+ u1Byte antsel_rx_keep_2:1; //ex_intf_flg:1;
+#endif
+} PHY_STATUS_RPT_8192CD_T,*PPHY_STATUS_RPT_8192CD_T;
+
+
+typedef struct _Phy_Status_Rpt_8195
+{
+ PHY_RX_AGC_INFO_T path_agc[2];
+ u1Byte ch_num[2];
+ u1Byte cck_sig_qual_ofdm_pwdb_all;
+ u1Byte cck_agc_rpt_ofdm_cfosho_a;
+ u1Byte cck_bb_pwr_ofdm_cfosho_b;
+ u1Byte cck_rx_path; //CCK_RX_PATH [3:0] (with regA07[3:0] definition)
+ u1Byte rsvd_1;
+ u1Byte path_cfotail[2];
+ u1Byte pcts_mask[2];
+ s1Byte stream_rxevm[2];
+ u1Byte path_rxsnr[2];
+ u1Byte rsvd_2[2];
+ u1Byte stream_snr[2];
+ u1Byte stream_csi[2];
+ u1Byte rsvd_3[2];
+ s1Byte sig_evm;
+ u1Byte rsvd_4;
+#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
+ u1Byte antidx_anta:3;
+ u1Byte antidx_antb:3;
+ u1Byte rsvd_5:2;
+#else // _BIG_ENDIAN_
+ u1Byte rsvd_5:2;
+ u1Byte antidx_antb:3;
+ u1Byte antidx_anta:3;
+#endif
+} PHY_STATUS_RPT_8195_T,*pPHY_STATUS_RPT_8195_T;
+
+
+VOID
+odm_Init_RSSIForDM(
+ IN OUT PDM_ODM_T pDM_Odm
+ );
+
+VOID
+ODM_PhyStatusQuery(
+ IN OUT PDM_ODM_T pDM_Odm,
+ OUT PODM_PHY_INFO_T pPhyInfo,
+ IN pu1Byte pPhyStatus,
+ IN PODM_PACKET_INFO_T pPktinfo
+ );
+
+VOID
+ODM_MacStatusQuery(
+ IN OUT PDM_ODM_T pDM_Odm,
+ IN pu1Byte pMacStatus,
+ IN u1Byte MacID,
+ IN BOOLEAN bPacketMatchBSSID,
+ IN BOOLEAN bPacketToSelf,
+ IN BOOLEAN bPacketBeacon
+ );
+#if (DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_CE|ODM_AP))
+HAL_STATUS
+ODM_ConfigRFWithHeaderFile(
+ IN PDM_ODM_T pDM_Odm,
+ IN ODM_RF_RADIO_PATH_E Content,
+ IN ODM_RF_RADIO_PATH_E eRFPath
+ );
+
+HAL_STATUS
+ODM_ConfigBBWithHeaderFile(
+ IN PDM_ODM_T pDM_Odm,
+ IN ODM_BB_Config_Type ConfigType
+ );
+
+HAL_STATUS
+ODM_ConfigMACWithHeaderFile(
+ IN PDM_ODM_T pDM_Odm
+ );
+#endif
+
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_RegDefine11AC.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_RegDefine11AC.h
index 8de1d501f127..b2a318a9b93d 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_RegDefine11AC.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_RegDefine11AC.h
@@ -1,55 +1,55 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-#ifndef __ODM_REGDEFINE11AC_H__
-#define __ODM_REGDEFINE11AC_H__
-
-//2 RF REG LIST
-
-
-
-//2 BB REG LIST
-//PAGE 8
-//PAGE 9
-#define ODM_REG_OFDM_FA_RST_11AC 0x9A4
-//PAGE A
-#define ODM_REG_CCK_CCA_11AC 0xA0A
-#define ODM_REG_CCK_FA_RST_11AC 0xA2C
-#define ODM_REG_CCK_FA_11AC 0xA5C
-//PAGE C
-#define ODM_REG_IGI_A_11AC 0xC50
-//PAGE E
-#define ODM_REG_IGI_B_11AC 0xE50
-//PAGE F
-#define ODM_REG_OFDM_FA_11AC 0xF48
-
-
-//2 MAC REG LIST
-
-
-
-
-//DIG Related
-#define ODM_BIT_IGI_11AC 0xFFFFFFFF
-
-
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+#ifndef __ODM_REGDEFINE11AC_H__
+#define __ODM_REGDEFINE11AC_H__
+
+//2 RF REG LIST
+
+
+
+//2 BB REG LIST
+//PAGE 8
+//PAGE 9
+#define ODM_REG_OFDM_FA_RST_11AC 0x9A4
+//PAGE A
+#define ODM_REG_CCK_CCA_11AC 0xA0A
+#define ODM_REG_CCK_FA_RST_11AC 0xA2C
+#define ODM_REG_CCK_FA_11AC 0xA5C
+//PAGE C
+#define ODM_REG_IGI_A_11AC 0xC50
+//PAGE E
+#define ODM_REG_IGI_B_11AC 0xE50
+//PAGE F
+#define ODM_REG_OFDM_FA_11AC 0xF48
+
+
+//2 MAC REG LIST
+
+
+
+
+//DIG Related
+#define ODM_BIT_IGI_11AC 0xFFFFFFFF
+
+
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_RegDefine11N.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_RegDefine11N.h
index 6e360123190e..841b1b42d843 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_RegDefine11N.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_RegDefine11N.h
@@ -1,172 +1,172 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-#ifndef __ODM_REGDEFINE11N_H__
-#define __ODM_REGDEFINE11N_H__
-
-
-//2 RF REG LIST
-#define ODM_REG_RF_MODE_11N 0x00
-#define ODM_REG_RF_0B_11N 0x0B
-#define ODM_REG_CHNBW_11N 0x18
-#define ODM_REG_T_METER_11N 0x24
-#define ODM_REG_RF_25_11N 0x25
-#define ODM_REG_RF_26_11N 0x26
-#define ODM_REG_RF_27_11N 0x27
-#define ODM_REG_RF_2B_11N 0x2B
-#define ODM_REG_RF_2C_11N 0x2C
-#define ODM_REG_RXRF_A3_11N 0x3C
-#define ODM_REG_T_METER_92D_11N 0x42
-#define ODM_REG_T_METER_88E_11N 0x42
-
-
-
-//2 BB REG LIST
-//PAGE 8
-#define ODM_REG_BB_CTRL_11N 0x800
-#define ODM_REG_RF_PIN_11N 0x804
-#define ODM_REG_PSD_CTRL_11N 0x808
-#define ODM_REG_TX_ANT_CTRL_11N 0x80C
-#define ODM_REG_BB_PWR_SAV5_11N 0x818
-#define ODM_REG_CCK_RPT_FORMAT_11N 0x824
-#define ODM_REG_RX_DEFUALT_A_11N 0x858
-#define ODM_REG_RX_DEFUALT_B_11N 0x85A
-#define ODM_REG_BB_PWR_SAV3_11N 0x85C
-#define ODM_REG_ANTSEL_CTRL_11N 0x860
-#define ODM_REG_RX_ANT_CTRL_11N 0x864
-#define ODM_REG_PIN_CTRL_11N 0x870
-#define ODM_REG_BB_PWR_SAV1_11N 0x874
-#define ODM_REG_ANTSEL_PATH_11N 0x878
-#define ODM_REG_BB_3WIRE_11N 0x88C
-#define ODM_REG_SC_CNT_11N 0x8C4
-#define ODM_REG_PSD_DATA_11N 0x8B4
-//PAGE 9
-#define ODM_REG_ANT_MAPPING1_11N 0x914
-#define ODM_REG_ANT_MAPPING2_11N 0x918
-//PAGE A
-#define ODM_REG_CCK_ANTDIV_PARA1_11N 0xA00
-#define ODM_REG_CCK_CCA_11N 0xA0A
-#define ODM_REG_CCK_ANTDIV_PARA2_11N 0xA0C
-#define ODM_REG_CCK_ANTDIV_PARA3_11N 0xA10
-#define ODM_REG_CCK_ANTDIV_PARA4_11N 0xA14
-#define ODM_REG_CCK_FILTER_PARA1_11N 0xA22
-#define ODM_REG_CCK_FILTER_PARA2_11N 0xA23
-#define ODM_REG_CCK_FILTER_PARA3_11N 0xA24
-#define ODM_REG_CCK_FILTER_PARA4_11N 0xA25
-#define ODM_REG_CCK_FILTER_PARA5_11N 0xA26
-#define ODM_REG_CCK_FILTER_PARA6_11N 0xA27
-#define ODM_REG_CCK_FILTER_PARA7_11N 0xA28
-#define ODM_REG_CCK_FILTER_PARA8_11N 0xA29
-#define ODM_REG_CCK_FA_RST_11N 0xA2C
-#define ODM_REG_CCK_FA_MSB_11N 0xA58
-#define ODM_REG_CCK_FA_LSB_11N 0xA5C
-#define ODM_REG_CCK_CCA_CNT_11N 0xA60
-#define ODM_REG_BB_PWR_SAV4_11N 0xA74
-//PAGE B
-#define ODM_REG_LNA_SWITCH_11N 0xB2C
-#define ODM_REG_PATH_SWITCH_11N 0xB30
-#define ODM_REG_RSSI_CTRL_11N 0xB38
-#define ODM_REG_CONFIG_ANTA_11N 0xB68
-#define ODM_REG_RSSI_BT_11N 0xB9C
-//PAGE C
-#define ODM_REG_OFDM_FA_HOLDC_11N 0xC00
-#define ODM_REG_RX_PATH_11N 0xC04
-#define ODM_REG_TRMUX_11N 0xC08
-#define ODM_REG_OFDM_FA_RSTC_11N 0xC0C
-#define ODM_REG_RXIQI_MATRIX_11N 0xC14
-#define ODM_REG_TXIQK_MATRIX_LSB1_11N 0xC4C
-#define ODM_REG_IGI_A_11N 0xC50
-#define ODM_REG_ANTDIV_PARA2_11N 0xC54
-#define ODM_REG_IGI_B_11N 0xC58
-#define ODM_REG_ANTDIV_PARA3_11N 0xC5C
-#define ODM_REG_BB_PWR_SAV2_11N 0xC70
-#define ODM_REG_RX_OFF_11N 0xC7C
-#define ODM_REG_TXIQK_MATRIXA_11N 0xC80
-#define ODM_REG_TXIQK_MATRIXB_11N 0xC88
-#define ODM_REG_TXIQK_MATRIXA_LSB2_11N 0xC94
-#define ODM_REG_TXIQK_MATRIXB_LSB2_11N 0xC9C
-#define ODM_REG_RXIQK_MATRIX_LSB_11N 0xCA0
-#define ODM_REG_ANTDIV_PARA1_11N 0xCA4
-#define ODM_REG_OFDM_FA_TYPE1_11N 0xCF0
-//PAGE D
-#define ODM_REG_OFDM_FA_RSTD_11N 0xD00
-#define ODM_REG_OFDM_FA_TYPE2_11N 0xDA0
-#define ODM_REG_OFDM_FA_TYPE3_11N 0xDA4
-#define ODM_REG_OFDM_FA_TYPE4_11N 0xDA8
-//PAGE E
-#define ODM_REG_TXAGC_A_6_18_11N 0xE00
-#define ODM_REG_TXAGC_A_24_54_11N 0xE04
-#define ODM_REG_TXAGC_A_1_MCS32_11N 0xE08
-#define ODM_REG_TXAGC_A_MCS0_3_11N 0xE10
-#define ODM_REG_TXAGC_A_MCS4_7_11N 0xE14
-#define ODM_REG_TXAGC_A_MCS8_11_11N 0xE18
-#define ODM_REG_TXAGC_A_MCS12_15_11N 0xE1C
-#define ODM_REG_FPGA0_IQK_11N 0xE28
-#define ODM_REG_TXIQK_TONE_A_11N 0xE30
-#define ODM_REG_RXIQK_TONE_A_11N 0xE34
-#define ODM_REG_TXIQK_PI_A_11N 0xE38
-#define ODM_REG_RXIQK_PI_A_11N 0xE3C
-#define ODM_REG_TXIQK_11N 0xE40
-#define ODM_REG_RXIQK_11N 0xE44
-#define ODM_REG_IQK_AGC_PTS_11N 0xE48
-#define ODM_REG_IQK_AGC_RSP_11N 0xE4C
-#define ODM_REG_BLUETOOTH_11N 0xE6C
-#define ODM_REG_RX_WAIT_CCA_11N 0xE70
-#define ODM_REG_TX_CCK_RFON_11N 0xE74
-#define ODM_REG_TX_CCK_BBON_11N 0xE78
-#define ODM_REG_OFDM_RFON_11N 0xE7C
-#define ODM_REG_OFDM_BBON_11N 0xE80
-#define ODM_REG_TX2RX_11N 0xE84
-#define ODM_REG_TX2TX_11N 0xE88
-#define ODM_REG_RX_CCK_11N 0xE8C
-#define ODM_REG_RX_OFDM_11N 0xED0
-#define ODM_REG_RX_WAIT_RIFS_11N 0xED4
-#define ODM_REG_RX2RX_11N 0xED8
-#define ODM_REG_STANDBY_11N 0xEDC
-#define ODM_REG_SLEEP_11N 0xEE0
-#define ODM_REG_PMPD_ANAEN_11N 0xEEC
-
-
-
-
-
-
-
-//2 MAC REG LIST
-#define ODM_REG_BB_RST_11N 0x02
-#define ODM_REG_ANTSEL_PIN_11N 0x4C
-#define ODM_REG_EARLY_MODE_11N 0x4D0
-#define ODM_REG_RSSI_MONITOR_11N 0x4FE
-#define ODM_REG_EDCA_VO_11N 0x500
-#define ODM_REG_EDCA_VI_11N 0x504
-#define ODM_REG_EDCA_BE_11N 0x508
-#define ODM_REG_EDCA_BK_11N 0x50C
-#define ODM_REG_TXPAUSE_11N 0x522
-#define ODM_REG_RESP_TX_11N 0x6D8
-#define ODM_REG_ANT_TRAIN_PARA1_11N 0x7b0
-#define ODM_REG_ANT_TRAIN_PARA2_11N 0x7b4
-
-
-//DIG Related
-#define ODM_BIT_IGI_11N 0x0000007F
-
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+#ifndef __ODM_REGDEFINE11N_H__
+#define __ODM_REGDEFINE11N_H__
+
+
+//2 RF REG LIST
+#define ODM_REG_RF_MODE_11N 0x00
+#define ODM_REG_RF_0B_11N 0x0B
+#define ODM_REG_CHNBW_11N 0x18
+#define ODM_REG_T_METER_11N 0x24
+#define ODM_REG_RF_25_11N 0x25
+#define ODM_REG_RF_26_11N 0x26
+#define ODM_REG_RF_27_11N 0x27
+#define ODM_REG_RF_2B_11N 0x2B
+#define ODM_REG_RF_2C_11N 0x2C
+#define ODM_REG_RXRF_A3_11N 0x3C
+#define ODM_REG_T_METER_92D_11N 0x42
+#define ODM_REG_T_METER_88E_11N 0x42
+
+
+
+//2 BB REG LIST
+//PAGE 8
+#define ODM_REG_BB_CTRL_11N 0x800
+#define ODM_REG_RF_PIN_11N 0x804
+#define ODM_REG_PSD_CTRL_11N 0x808
+#define ODM_REG_TX_ANT_CTRL_11N 0x80C
+#define ODM_REG_BB_PWR_SAV5_11N 0x818
+#define ODM_REG_CCK_RPT_FORMAT_11N 0x824
+#define ODM_REG_RX_DEFUALT_A_11N 0x858
+#define ODM_REG_RX_DEFUALT_B_11N 0x85A
+#define ODM_REG_BB_PWR_SAV3_11N 0x85C
+#define ODM_REG_ANTSEL_CTRL_11N 0x860
+#define ODM_REG_RX_ANT_CTRL_11N 0x864
+#define ODM_REG_PIN_CTRL_11N 0x870
+#define ODM_REG_BB_PWR_SAV1_11N 0x874
+#define ODM_REG_ANTSEL_PATH_11N 0x878
+#define ODM_REG_BB_3WIRE_11N 0x88C
+#define ODM_REG_SC_CNT_11N 0x8C4
+#define ODM_REG_PSD_DATA_11N 0x8B4
+//PAGE 9
+#define ODM_REG_ANT_MAPPING1_11N 0x914
+#define ODM_REG_ANT_MAPPING2_11N 0x918
+//PAGE A
+#define ODM_REG_CCK_ANTDIV_PARA1_11N 0xA00
+#define ODM_REG_CCK_CCA_11N 0xA0A
+#define ODM_REG_CCK_ANTDIV_PARA2_11N 0xA0C
+#define ODM_REG_CCK_ANTDIV_PARA3_11N 0xA10
+#define ODM_REG_CCK_ANTDIV_PARA4_11N 0xA14
+#define ODM_REG_CCK_FILTER_PARA1_11N 0xA22
+#define ODM_REG_CCK_FILTER_PARA2_11N 0xA23
+#define ODM_REG_CCK_FILTER_PARA3_11N 0xA24
+#define ODM_REG_CCK_FILTER_PARA4_11N 0xA25
+#define ODM_REG_CCK_FILTER_PARA5_11N 0xA26
+#define ODM_REG_CCK_FILTER_PARA6_11N 0xA27
+#define ODM_REG_CCK_FILTER_PARA7_11N 0xA28
+#define ODM_REG_CCK_FILTER_PARA8_11N 0xA29
+#define ODM_REG_CCK_FA_RST_11N 0xA2C
+#define ODM_REG_CCK_FA_MSB_11N 0xA58
+#define ODM_REG_CCK_FA_LSB_11N 0xA5C
+#define ODM_REG_CCK_CCA_CNT_11N 0xA60
+#define ODM_REG_BB_PWR_SAV4_11N 0xA74
+//PAGE B
+#define ODM_REG_LNA_SWITCH_11N 0xB2C
+#define ODM_REG_PATH_SWITCH_11N 0xB30
+#define ODM_REG_RSSI_CTRL_11N 0xB38
+#define ODM_REG_CONFIG_ANTA_11N 0xB68
+#define ODM_REG_RSSI_BT_11N 0xB9C
+//PAGE C
+#define ODM_REG_OFDM_FA_HOLDC_11N 0xC00
+#define ODM_REG_RX_PATH_11N 0xC04
+#define ODM_REG_TRMUX_11N 0xC08
+#define ODM_REG_OFDM_FA_RSTC_11N 0xC0C
+#define ODM_REG_RXIQI_MATRIX_11N 0xC14
+#define ODM_REG_TXIQK_MATRIX_LSB1_11N 0xC4C
+#define ODM_REG_IGI_A_11N 0xC50
+#define ODM_REG_ANTDIV_PARA2_11N 0xC54
+#define ODM_REG_IGI_B_11N 0xC58
+#define ODM_REG_ANTDIV_PARA3_11N 0xC5C
+#define ODM_REG_BB_PWR_SAV2_11N 0xC70
+#define ODM_REG_RX_OFF_11N 0xC7C
+#define ODM_REG_TXIQK_MATRIXA_11N 0xC80
+#define ODM_REG_TXIQK_MATRIXB_11N 0xC88
+#define ODM_REG_TXIQK_MATRIXA_LSB2_11N 0xC94
+#define ODM_REG_TXIQK_MATRIXB_LSB2_11N 0xC9C
+#define ODM_REG_RXIQK_MATRIX_LSB_11N 0xCA0
+#define ODM_REG_ANTDIV_PARA1_11N 0xCA4
+#define ODM_REG_OFDM_FA_TYPE1_11N 0xCF0
+//PAGE D
+#define ODM_REG_OFDM_FA_RSTD_11N 0xD00
+#define ODM_REG_OFDM_FA_TYPE2_11N 0xDA0
+#define ODM_REG_OFDM_FA_TYPE3_11N 0xDA4
+#define ODM_REG_OFDM_FA_TYPE4_11N 0xDA8
+//PAGE E
+#define ODM_REG_TXAGC_A_6_18_11N 0xE00
+#define ODM_REG_TXAGC_A_24_54_11N 0xE04
+#define ODM_REG_TXAGC_A_1_MCS32_11N 0xE08
+#define ODM_REG_TXAGC_A_MCS0_3_11N 0xE10
+#define ODM_REG_TXAGC_A_MCS4_7_11N 0xE14
+#define ODM_REG_TXAGC_A_MCS8_11_11N 0xE18
+#define ODM_REG_TXAGC_A_MCS12_15_11N 0xE1C
+#define ODM_REG_FPGA0_IQK_11N 0xE28
+#define ODM_REG_TXIQK_TONE_A_11N 0xE30
+#define ODM_REG_RXIQK_TONE_A_11N 0xE34
+#define ODM_REG_TXIQK_PI_A_11N 0xE38
+#define ODM_REG_RXIQK_PI_A_11N 0xE3C
+#define ODM_REG_TXIQK_11N 0xE40
+#define ODM_REG_RXIQK_11N 0xE44
+#define ODM_REG_IQK_AGC_PTS_11N 0xE48
+#define ODM_REG_IQK_AGC_RSP_11N 0xE4C
+#define ODM_REG_BLUETOOTH_11N 0xE6C
+#define ODM_REG_RX_WAIT_CCA_11N 0xE70
+#define ODM_REG_TX_CCK_RFON_11N 0xE74
+#define ODM_REG_TX_CCK_BBON_11N 0xE78
+#define ODM_REG_OFDM_RFON_11N 0xE7C
+#define ODM_REG_OFDM_BBON_11N 0xE80
+#define ODM_REG_TX2RX_11N 0xE84
+#define ODM_REG_TX2TX_11N 0xE88
+#define ODM_REG_RX_CCK_11N 0xE8C
+#define ODM_REG_RX_OFDM_11N 0xED0
+#define ODM_REG_RX_WAIT_RIFS_11N 0xED4
+#define ODM_REG_RX2RX_11N 0xED8
+#define ODM_REG_STANDBY_11N 0xEDC
+#define ODM_REG_SLEEP_11N 0xEE0
+#define ODM_REG_PMPD_ANAEN_11N 0xEEC
+
+
+
+
+
+
+
+//2 MAC REG LIST
+#define ODM_REG_BB_RST_11N 0x02
+#define ODM_REG_ANTSEL_PIN_11N 0x4C
+#define ODM_REG_EARLY_MODE_11N 0x4D0
+#define ODM_REG_RSSI_MONITOR_11N 0x4FE
+#define ODM_REG_EDCA_VO_11N 0x500
+#define ODM_REG_EDCA_VI_11N 0x504
+#define ODM_REG_EDCA_BE_11N 0x508
+#define ODM_REG_EDCA_BK_11N 0x50C
+#define ODM_REG_TXPAUSE_11N 0x522
+#define ODM_REG_RESP_TX_11N 0x6D8
+#define ODM_REG_ANT_TRAIN_PARA1_11N 0x7b0
+#define ODM_REG_ANT_TRAIN_PARA2_11N 0x7b4
+
+
+//DIG Related
+#define ODM_BIT_IGI_11N 0x0000007F
+
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_debug.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_debug.c
index 6414f855157a..7db60cf5841b 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_debug.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_debug.c
@@ -1,627 +1,627 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-//============================================================
-// include files
-//============================================================
-
-#include "odm_precomp.h"
-
-VOID
-ODM_InitDebugSetting(
- IN PDM_ODM_T pDM_Odm
- )
-{
-pDM_Odm->DebugLevel = ODM_DBG_TRACE;
-
-pDM_Odm->DebugComponents =
-\
-#if DBG
-//BB Functions
-// ODM_COMP_DIG |
-// ODM_COMP_RA_MASK |
-// ODM_COMP_DYNAMIC_TXPWR |
-// ODM_COMP_FA_CNT |
-// ODM_COMP_RSSI_MONITOR |
-// ODM_COMP_CCK_PD |
-// ODM_COMP_ANT_DIV |
-// ODM_COMP_PWR_SAVE |
-// ODM_COMP_PWR_TRAIN |
-// ODM_COMP_RATE_ADAPTIVE |
-// ODM_COMP_PATH_DIV |
-// ODM_COMP_DYNAMIC_PRICCA |
-// ODM_COMP_RXHP |
-
-//MAC Functions
-// ODM_COMP_EDCA_TURBO |
-// ODM_COMP_EARLY_MODE |
-//RF Functions
-// ODM_COMP_TX_PWR_TRACK |
-// ODM_COMP_RX_GAIN_TRACK |
-// ODM_COMP_CALIBRATION |
-//Common
-// ODM_COMP_COMMON |
-// ODM_COMP_INIT |
-#endif
- 0;
-}
-
-#if 0
-/*------------------Declare variable-----------------------
-// Define debug flag array for common debug print macro. */
-u4Byte ODM_DBGP_Type[ODM_DBGP_TYPE_MAX];
-
-/* Define debug print header for every service module. */
-ODM_DBGP_HEAD_T ODM_DBGP_Head;
-
-
-/*-----------------------------------------------------------------------------
- * Function: DBGP_Flag_Init
- *
- * Overview: Refresh all debug print control flag content to zero.
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 10/20/2006 MHC Create Version 0.
- *
- *---------------------------------------------------------------------------*/
-extern void ODM_DBGP_Flag_Init(void)
-{
- u1Byte i;
-
- for (i = 0; i < ODM_DBGP_TYPE_MAX; i++)
- {
- ODM_DBGP_Type[i] = 0;
- }
-
-#ifndef ADSL_AP_BUILD_WORKAROUND
-#if DBG
- // 2010/06/02 MH Free build driver can not out any debug message!!!
- // Init Debug flag enable condition
-
- ODM_DBGP_Type[FINIT] = \
-// INIT_EEPROM |
-// INIT_TxPower |
-// INIT_IQK |
-// INIT_RF |
- 0;
-
- ODM_DBGP_Type[FDM] = \
-// WA_IOT |
-// DM_PWDB |
-// DM_Monitor |
-// DM_DIG |
-// DM_EDCA_Turbo |
-// DM_BT30 |
- 0;
-
- ODM_DBGP_Type[FIOCTL] = \
-// IOCTL_IRP |
-// IOCTL_IRP_DETAIL |
-// IOCTL_IRP_STATISTICS |
-// IOCTL_IRP_HANDLE |
-// IOCTL_BT_HCICMD |
-// IOCTL_BT_HCICMD_DETAIL |
-// IOCTL_BT_HCICMD_EXT |
-// IOCTL_BT_EVENT |
-// IOCTL_BT_EVENT_DETAIL |
-// IOCTL_BT_EVENT_PERIODICAL |
-// IOCTL_BT_TX_ACLDATA |
-// IOCTL_BT_TX_ACLDATA_DETAIL |
-// IOCTL_BT_RX_ACLDATA |
-// IOCTL_BT_RX_ACLDATA_DETAIL |
-// IOCTL_BT_TP |
-// IOCTL_STATE |
-// IOCTL_BT_LOGO |
-// IOCTL_CALLBACK_FUN |
-// IOCTL_PARSE_BT_PKT |
- 0;
-
- ODM_DBGP_Type[FBT] = \
-// BT_TRACE |
- 0;
-
- ODM_DBGP_Type[FEEPROM] = \
-// EEPROM_W |
-// EFUSE_PG |
-// EFUSE_READ_ALL |
-// EFUSE_ANALYSIS |
-// EFUSE_PG_DETAIL |
- 0;
-
- ODM_DBGP_Type[FDBG_CTRL] = \
-// DBG_CTRL_TRACE |
-// DBG_CTRL_INBAND_NOISE |
- 0;
-
- // 2011/07/20 MH Add for short cut
- ODM_DBGP_Type[FSHORT_CUT] = \
-// SHCUT_TX |
-// SHCUT_RX |
- 0;
-
-#endif
-#endif
- /* Define debug header of every service module. */
- //ODM_DBGP_Head.pMANS = "\n\r[MANS] ";
- //ODM_DBGP_Head.pRTOS = "\n\r[RTOS] ";
- //ODM_DBGP_Head.pALM = "\n\r[ALM] ";
- //ODM_DBGP_Head.pPEM = "\n\r[PEM] ";
- //ODM_DBGP_Head.pCMPK = "\n\r[CMPK] ";
- //ODM_DBGP_Head.pRAPD = "\n\r[RAPD] ";
- //ODM_DBGP_Head.pTXPB = "\n\r[TXPB] ";
- //ODM_DBGP_Head.pQUMG = "\n\r[QUMG] ";
-
-} /* DBGP_Flag_Init */
-
-#endif
-
-
-#if 0
-u4Byte GlobalDebugLevel = DBG_LOUD;
-//
-// 2009/06/22 MH Allow Fre build to print none debug info at init time.
-//
-#if DBG
-u8Byte GlobalDebugComponents = \
-// COMP_TRACE |
-// COMP_DBG |
-// COMP_INIT |
-// COMP_OID_QUERY |
-// COMP_OID_SET |
-// COMP_RECV |
-// COMP_SEND |
-// COMP_IO |
-// COMP_POWER |
-// COMP_MLME |
-// COMP_SCAN |
-// COMP_SYSTEM |
-// COMP_SEC |
-// COMP_AP |
-// COMP_TURBO |
-// COMP_QOS |
-// COMP_AUTHENTICATOR |
-// COMP_BEACON |
-// COMP_ANTENNA |
-// COMP_RATE |
-// COMP_EVENTS |
-// COMP_FPGA |
-// COMP_RM |
-// COMP_MP |
-// COMP_RXDESC |
-// COMP_CKIP |
-// COMP_DIG |
-// COMP_TXAGC |
-// COMP_HIPWR |
-// COMP_HALDM |
-// COMP_RSNA |
-// COMP_INDIC |
-// COMP_LED |
-// COMP_RF |
-// COMP_DUALMACSWITCH |
-// COMP_EASY_CONCURRENT |
-
-//1!!!!!!!!!!!!!!!!!!!!!!!!!!!
-//1//1Attention Please!!!<11n or 8190 specific code should be put below this line>
-//1!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-// COMP_HT |
-// COMP_POWER_TRACKING |
-// COMP_RX_REORDER |
-// COMP_AMSDU |
-// COMP_WPS |
-// COMP_RATR |
-// COMP_RESET |
-// COMP_CMD |
-// COMP_EFUSE |
-// COMP_MESH_INTERWORKING |
-// COMP_CCX |
-// COMP_IOCTL |
-// COMP_GP |
-// COMP_TXAGG |
-// COMP_BB_POWERSAVING |
-// COMP_SWAS |
-// COMP_P2P |
-// COMP_MUX |
-// COMP_FUNC |
-// COMP_TDLS |
-// COMP_OMNIPEEK |
-// COMP_PSD |
- 0;
-
-
-#else
-#define FuncEntry
-#define FuncExit
-u8Byte GlobalDebugComponents = 0;
-#endif
-
-#if (RT_PLATFORM==PLATFORM_LINUX)
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
-EXPORT_SYMBOL(GlobalDebugComponents);
-EXPORT_SYMBOL(GlobalDebugLevel);
-#endif
-#endif
-
-/*------------------Declare variable-----------------------
-// Define debug flag array for common debug print macro. */
-u4Byte DBGP_Type[DBGP_TYPE_MAX];
-
-/* Define debug print header for every service module. */
-DBGP_HEAD_T DBGP_Head;
-
-
-/*-----------------------------------------------------------------------------
- * Function: DBGP_Flag_Init
- *
- * Overview: Refresh all debug print control flag content to zero.
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 10/20/2006 MHC Create Version 0.
- *
- *---------------------------------------------------------------------------*/
-extern void DBGP_Flag_Init(void)
-{
- u1Byte i;
-
- for (i = 0; i < DBGP_TYPE_MAX; i++)
- {
- DBGP_Type[i] = 0;
- }
-
-#if DBG
- // 2010/06/02 MH Free build driver can not out any debug message!!!
- // Init Debug flag enable condition
-
- DBGP_Type[FINIT] = \
-// INIT_EEPROM |
-// INIT_TxPower |
-// INIT_IQK |
-// INIT_RF |
- 0;
-
- DBGP_Type[FDM] = \
-// WA_IOT |
-// DM_PWDB |
-// DM_Monitor |
-// DM_DIG |
-// DM_EDCA_Turbo |
-// DM_BT30 |
- 0;
-
- DBGP_Type[FIOCTL] = \
-// IOCTL_IRP |
-// IOCTL_IRP_DETAIL |
-// IOCTL_IRP_STATISTICS |
-// IOCTL_IRP_HANDLE |
-// IOCTL_BT_HCICMD |
-// IOCTL_BT_HCICMD_DETAIL |
-// IOCTL_BT_HCICMD_EXT |
-// IOCTL_BT_EVENT |
-// IOCTL_BT_EVENT_DETAIL |
-// IOCTL_BT_EVENT_PERIODICAL |
-// IOCTL_BT_TX_ACLDATA |
-// IOCTL_BT_TX_ACLDATA_DETAIL |
-// IOCTL_BT_RX_ACLDATA |
-// IOCTL_BT_RX_ACLDATA_DETAIL |
-// IOCTL_BT_TP |
-// IOCTL_STATE |
-// IOCTL_BT_LOGO |
-// IOCTL_CALLBACK_FUN |
-// IOCTL_PARSE_BT_PKT |
- 0;
-
- DBGP_Type[FBT] = \
-// BT_TRACE |
- 0;
-
- DBGP_Type[FEEPROM] = \
-// EEPROM_W |
-// EFUSE_PG |
-// EFUSE_READ_ALL |
-// EFUSE_ANALYSIS |
-// EFUSE_PG_DETAIL |
- 0;
-
- DBGP_Type[FDBG_CTRL] = \
-// DBG_CTRL_TRACE |
-// DBG_CTRL_INBAND_NOISE |
- 0;
-
- // 2011/07/20 MH Add for short cut
- DBGP_Type[FSHORT_CUT] = \
-// SHCUT_TX |
-// SHCUT_RX |
- 0;
-
-#endif
- /* Define debug header of every service module. */
- DBGP_Head.pMANS = "\n\r[MANS] ";
- DBGP_Head.pRTOS = "\n\r[RTOS] ";
- DBGP_Head.pALM = "\n\r[ALM] ";
- DBGP_Head.pPEM = "\n\r[PEM] ";
- DBGP_Head.pCMPK = "\n\r[CMPK] ";
- DBGP_Head.pRAPD = "\n\r[RAPD] ";
- DBGP_Head.pTXPB = "\n\r[TXPB] ";
- DBGP_Head.pQUMG = "\n\r[QUMG] ";
-
-} /* DBGP_Flag_Init */
-
-
-/*-----------------------------------------------------------------------------
- * Function: DBG_PrintAllFlag
- *
- * Overview: Print All debug flag
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 12/10/2008 MHC Create Version 0.
- *
- *---------------------------------------------------------------------------*/
-extern void DBG_PrintAllFlag(void)
-{
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 0 FQoS\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 1 FTX\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 2 FRX\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 3 FSEC\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 4 FMGNT\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 5 FMLME\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 6 FRESOURCE\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 7 FBEACON\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 8 FISR\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 9 FPHY\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 11 FMP\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 12 FPWR\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 13 FDM\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 14 FDBG_CTRL\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 15 FC2H\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 16 FBT\n"));
-} // DBG_PrintAllFlag
-
-
-extern void DBG_PrintAllComp(void)
-{
- u1Byte i;
-
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("GlobalDebugComponents Definition\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT0 COMP_TRACE\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT1 COMP_DBG\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT2 COMP_INIT\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT3 COMP_OID_QUERY\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT4 COMP_OID_SET\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT5 COMP_RECV\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT6 COMP_SEND\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT7 COMP_IO\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT8 COMP_POWER\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT9 COMP_MLME\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT10 COMP_SCAN\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT11 COMP_SYSTEM\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT12 COMP_SEC\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT13 COMP_AP\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT14 COMP_TURBO\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT15 COMP_QOS\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT16 COMP_AUTHENTICATOR\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT17 COMP_BEACON\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT18 COMP_BEACON\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT19 COMP_RATE\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT20 COMP_EVENTS\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT21 COMP_FPGA\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT22 COMP_RM\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT23 COMP_MP\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT24 COMP_RXDESC\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT25 COMP_CKIP\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT26 COMP_DIG\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT27 COMP_TXAGC\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT28 COMP_HIPWR\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT29 COMP_HALDM\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT30 COMP_RSNA\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT31 COMP_INDIC\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT32 COMP_LED\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT33 COMP_RF\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT34 COMP_HT\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT35 COMP_POWER_TRACKING\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT36 COMP_POWER_TRACKING\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT37 COMP_AMSDU\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT38 COMP_WPS\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT39 COMP_RATR\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT40 COMP_RESET\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT41 COMP_CMD\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT42 COMP_EFUSE\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT43 COMP_MESH_INTERWORKING\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT43 COMP_CCX\n"));
-
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("GlobalDebugComponents = %"i64fmt"x\n", GlobalDebugComponents));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("Enable DBG COMP ="));
- for (i = 0; i < 64; i++)
- {
- if (GlobalDebugComponents & ((u8Byte)0x1 << i) )
- {
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT%02d |\n", i));
- }
- }
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("\n"));
-
-} // DBG_PrintAllComp
-
-
-/*-----------------------------------------------------------------------------
- * Function: DBG_PrintFlagEvent
- *
- * Overview: Print dedicated debug flag event
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 12/10/2008 MHC Create Version 0.
- *
- *---------------------------------------------------------------------------*/
-extern void DBG_PrintFlagEvent(u1Byte DbgFlag)
-{
- switch(DbgFlag)
- {
- case FQoS:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 QoS_INIT\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 QoS_VISTA\n"));
- break;
-
- case FTX:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 TX_DESC\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 TX_DESC_TID\n"));
- break;
-
- case FRX:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 RX_DATA\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 RX_PHY_STS\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 RX_PHY_SS\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 RX_PHY_SQ\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 4 RX_PHY_ASTS\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 5 RX_ERR_LEN\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 6 RX_DEFRAG\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 7 RX_ERR_RATE\n"));
- break;
-
- case FSEC:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("NA\n"));
- break;
-
- case FMGNT:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("NA\n"));
- break;
-
- case FMLME:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 MEDIA_STS\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 LINK_STS\n"));
- break;
-
- case FRESOURCE:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 OS_CHK\n"));
- break;
-
- case FBEACON:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 BCN_SHOW\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 BCN_PEER\n"));
- break;
-
- case FISR:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 ISR_CHK\n"));
- break;
-
- case FPHY:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 PHY_BBR\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 PHY_BBW\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 PHY_RFR\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 PHY_RFW\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 4 PHY_MACR\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 5 PHY_MACW\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 6 PHY_ALLR\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 7 PHY_ALLW\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 8 PHY_TXPWR\n"));
- break;
-
- case FMP:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 MP_RX\n"));
- break;
-
- case FEEPROM:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 EEPROM_W\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 EFUSE_PG\n"));
- break;
-
- case FPWR:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 LPS\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 IPS\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 PWRSW\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 PWRHW\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 4 PWRHAL\n"));
- break;
-
- case FDM:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 WA_IOT\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 DM_PWDB\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 DM_Monitor\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 DM_DIG\n"));
- break;
-
- case FDBG_CTRL:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 DBG_CTRL_TRACE\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 DBG_CTRL_INBAND_NOISE\n"));
- break;
-
- case FC2H:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 C2H_Summary\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 C2H_PacketData\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 C2H_ContentData\n"));
- break;
-
- case FBT:
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 BT_TRACE\n"));
- ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 BT_RFPoll\n"));
- break;
-
- default:
- break;
- }
-
-} // DBG_PrintFlagEvent
-
-
-extern void DBG_DumpMem(const u1Byte DbgComp,
- const u1Byte DbgLevel,
- pu1Byte pMem,
- u2Byte Len)
-{
- u2Byte i;
-
- for (i=0;i<((Len>>3) + 1);i++)
- {
- ODM_RT_TRACE(pDM_Odm,DbgComp, DbgLevel, ("%02X %02X %02X %02X %02X %02X %02X %02X\n",
- *(pMem+(i*8)), *(pMem+(i*8+1)), *(pMem+(i*8+2)), *(pMem+(i*8+3)),
- *(pMem+(i*8+4)), *(pMem+(i*8+5)), *(pMem+(i*8+6)), *(pMem+(i*8+7))));
-
- }
-}
-
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+//============================================================
+// include files
+//============================================================
+
+#include "odm_precomp.h"
+
+VOID
+ODM_InitDebugSetting(
+ IN PDM_ODM_T pDM_Odm
+ )
+{
+pDM_Odm->DebugLevel = ODM_DBG_TRACE;
+
+pDM_Odm->DebugComponents =
+\
+#if DBG
+//BB Functions
+// ODM_COMP_DIG |
+// ODM_COMP_RA_MASK |
+// ODM_COMP_DYNAMIC_TXPWR |
+// ODM_COMP_FA_CNT |
+// ODM_COMP_RSSI_MONITOR |
+// ODM_COMP_CCK_PD |
+// ODM_COMP_ANT_DIV |
+// ODM_COMP_PWR_SAVE |
+// ODM_COMP_PWR_TRAIN |
+// ODM_COMP_RATE_ADAPTIVE |
+// ODM_COMP_PATH_DIV |
+// ODM_COMP_DYNAMIC_PRICCA |
+// ODM_COMP_RXHP |
+
+//MAC Functions
+// ODM_COMP_EDCA_TURBO |
+// ODM_COMP_EARLY_MODE |
+//RF Functions
+// ODM_COMP_TX_PWR_TRACK |
+// ODM_COMP_RX_GAIN_TRACK |
+// ODM_COMP_CALIBRATION |
+//Common
+// ODM_COMP_COMMON |
+// ODM_COMP_INIT |
+#endif
+ 0;
+}
+
+#if 0
+/*------------------Declare variable-----------------------
+// Define debug flag array for common debug print macro. */
+u4Byte ODM_DBGP_Type[ODM_DBGP_TYPE_MAX];
+
+/* Define debug print header for every service module. */
+ODM_DBGP_HEAD_T ODM_DBGP_Head;
+
+
+/*-----------------------------------------------------------------------------
+ * Function: DBGP_Flag_Init
+ *
+ * Overview: Refresh all debug print control flag content to zero.
+ *
+ * Input: NONE
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 10/20/2006 MHC Create Version 0.
+ *
+ *---------------------------------------------------------------------------*/
+extern void ODM_DBGP_Flag_Init(void)
+{
+ u1Byte i;
+
+ for (i = 0; i < ODM_DBGP_TYPE_MAX; i++)
+ {
+ ODM_DBGP_Type[i] = 0;
+ }
+
+#ifndef ADSL_AP_BUILD_WORKAROUND
+#if DBG
+ // 2010/06/02 MH Free build driver can not out any debug message!!!
+ // Init Debug flag enable condition
+
+ ODM_DBGP_Type[FINIT] = \
+// INIT_EEPROM |
+// INIT_TxPower |
+// INIT_IQK |
+// INIT_RF |
+ 0;
+
+ ODM_DBGP_Type[FDM] = \
+// WA_IOT |
+// DM_PWDB |
+// DM_Monitor |
+// DM_DIG |
+// DM_EDCA_Turbo |
+// DM_BT30 |
+ 0;
+
+ ODM_DBGP_Type[FIOCTL] = \
+// IOCTL_IRP |
+// IOCTL_IRP_DETAIL |
+// IOCTL_IRP_STATISTICS |
+// IOCTL_IRP_HANDLE |
+// IOCTL_BT_HCICMD |
+// IOCTL_BT_HCICMD_DETAIL |
+// IOCTL_BT_HCICMD_EXT |
+// IOCTL_BT_EVENT |
+// IOCTL_BT_EVENT_DETAIL |
+// IOCTL_BT_EVENT_PERIODICAL |
+// IOCTL_BT_TX_ACLDATA |
+// IOCTL_BT_TX_ACLDATA_DETAIL |
+// IOCTL_BT_RX_ACLDATA |
+// IOCTL_BT_RX_ACLDATA_DETAIL |
+// IOCTL_BT_TP |
+// IOCTL_STATE |
+// IOCTL_BT_LOGO |
+// IOCTL_CALLBACK_FUN |
+// IOCTL_PARSE_BT_PKT |
+ 0;
+
+ ODM_DBGP_Type[FBT] = \
+// BT_TRACE |
+ 0;
+
+ ODM_DBGP_Type[FEEPROM] = \
+// EEPROM_W |
+// EFUSE_PG |
+// EFUSE_READ_ALL |
+// EFUSE_ANALYSIS |
+// EFUSE_PG_DETAIL |
+ 0;
+
+ ODM_DBGP_Type[FDBG_CTRL] = \
+// DBG_CTRL_TRACE |
+// DBG_CTRL_INBAND_NOISE |
+ 0;
+
+ // 2011/07/20 MH Add for short cut
+ ODM_DBGP_Type[FSHORT_CUT] = \
+// SHCUT_TX |
+// SHCUT_RX |
+ 0;
+
+#endif
+#endif
+ /* Define debug header of every service module. */
+ //ODM_DBGP_Head.pMANS = "\n\r[MANS] ";
+ //ODM_DBGP_Head.pRTOS = "\n\r[RTOS] ";
+ //ODM_DBGP_Head.pALM = "\n\r[ALM] ";
+ //ODM_DBGP_Head.pPEM = "\n\r[PEM] ";
+ //ODM_DBGP_Head.pCMPK = "\n\r[CMPK] ";
+ //ODM_DBGP_Head.pRAPD = "\n\r[RAPD] ";
+ //ODM_DBGP_Head.pTXPB = "\n\r[TXPB] ";
+ //ODM_DBGP_Head.pQUMG = "\n\r[QUMG] ";
+
+} /* DBGP_Flag_Init */
+
+#endif
+
+
+#if 0
+u4Byte GlobalDebugLevel = DBG_LOUD;
+//
+// 2009/06/22 MH Allow Fre build to print none debug info at init time.
+//
+#if DBG
+u8Byte GlobalDebugComponents = \
+// COMP_TRACE |
+// COMP_DBG |
+// COMP_INIT |
+// COMP_OID_QUERY |
+// COMP_OID_SET |
+// COMP_RECV |
+// COMP_SEND |
+// COMP_IO |
+// COMP_POWER |
+// COMP_MLME |
+// COMP_SCAN |
+// COMP_SYSTEM |
+// COMP_SEC |
+// COMP_AP |
+// COMP_TURBO |
+// COMP_QOS |
+// COMP_AUTHENTICATOR |
+// COMP_BEACON |
+// COMP_ANTENNA |
+// COMP_RATE |
+// COMP_EVENTS |
+// COMP_FPGA |
+// COMP_RM |
+// COMP_MP |
+// COMP_RXDESC |
+// COMP_CKIP |
+// COMP_DIG |
+// COMP_TXAGC |
+// COMP_HIPWR |
+// COMP_HALDM |
+// COMP_RSNA |
+// COMP_INDIC |
+// COMP_LED |
+// COMP_RF |
+// COMP_DUALMACSWITCH |
+// COMP_EASY_CONCURRENT |
+
+//1!!!!!!!!!!!!!!!!!!!!!!!!!!!
+//1//1Attention Please!!!<11n or 8190 specific code should be put below this line>
+//1!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+// COMP_HT |
+// COMP_POWER_TRACKING |
+// COMP_RX_REORDER |
+// COMP_AMSDU |
+// COMP_WPS |
+// COMP_RATR |
+// COMP_RESET |
+// COMP_CMD |
+// COMP_EFUSE |
+// COMP_MESH_INTERWORKING |
+// COMP_CCX |
+// COMP_IOCTL |
+// COMP_GP |
+// COMP_TXAGG |
+// COMP_BB_POWERSAVING |
+// COMP_SWAS |
+// COMP_P2P |
+// COMP_MUX |
+// COMP_FUNC |
+// COMP_TDLS |
+// COMP_OMNIPEEK |
+// COMP_PSD |
+ 0;
+
+
+#else
+#define FuncEntry
+#define FuncExit
+u8Byte GlobalDebugComponents = 0;
+#endif
+
+#if (RT_PLATFORM==PLATFORM_LINUX)
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
+EXPORT_SYMBOL(GlobalDebugComponents);
+EXPORT_SYMBOL(GlobalDebugLevel);
+#endif
+#endif
+
+/*------------------Declare variable-----------------------
+// Define debug flag array for common debug print macro. */
+u4Byte DBGP_Type[DBGP_TYPE_MAX];
+
+/* Define debug print header for every service module. */
+DBGP_HEAD_T DBGP_Head;
+
+
+/*-----------------------------------------------------------------------------
+ * Function: DBGP_Flag_Init
+ *
+ * Overview: Refresh all debug print control flag content to zero.
+ *
+ * Input: NONE
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 10/20/2006 MHC Create Version 0.
+ *
+ *---------------------------------------------------------------------------*/
+extern void DBGP_Flag_Init(void)
+{
+ u1Byte i;
+
+ for (i = 0; i < DBGP_TYPE_MAX; i++)
+ {
+ DBGP_Type[i] = 0;
+ }
+
+#if DBG
+ // 2010/06/02 MH Free build driver can not out any debug message!!!
+ // Init Debug flag enable condition
+
+ DBGP_Type[FINIT] = \
+// INIT_EEPROM |
+// INIT_TxPower |
+// INIT_IQK |
+// INIT_RF |
+ 0;
+
+ DBGP_Type[FDM] = \
+// WA_IOT |
+// DM_PWDB |
+// DM_Monitor |
+// DM_DIG |
+// DM_EDCA_Turbo |
+// DM_BT30 |
+ 0;
+
+ DBGP_Type[FIOCTL] = \
+// IOCTL_IRP |
+// IOCTL_IRP_DETAIL |
+// IOCTL_IRP_STATISTICS |
+// IOCTL_IRP_HANDLE |
+// IOCTL_BT_HCICMD |
+// IOCTL_BT_HCICMD_DETAIL |
+// IOCTL_BT_HCICMD_EXT |
+// IOCTL_BT_EVENT |
+// IOCTL_BT_EVENT_DETAIL |
+// IOCTL_BT_EVENT_PERIODICAL |
+// IOCTL_BT_TX_ACLDATA |
+// IOCTL_BT_TX_ACLDATA_DETAIL |
+// IOCTL_BT_RX_ACLDATA |
+// IOCTL_BT_RX_ACLDATA_DETAIL |
+// IOCTL_BT_TP |
+// IOCTL_STATE |
+// IOCTL_BT_LOGO |
+// IOCTL_CALLBACK_FUN |
+// IOCTL_PARSE_BT_PKT |
+ 0;
+
+ DBGP_Type[FBT] = \
+// BT_TRACE |
+ 0;
+
+ DBGP_Type[FEEPROM] = \
+// EEPROM_W |
+// EFUSE_PG |
+// EFUSE_READ_ALL |
+// EFUSE_ANALYSIS |
+// EFUSE_PG_DETAIL |
+ 0;
+
+ DBGP_Type[FDBG_CTRL] = \
+// DBG_CTRL_TRACE |
+// DBG_CTRL_INBAND_NOISE |
+ 0;
+
+ // 2011/07/20 MH Add for short cut
+ DBGP_Type[FSHORT_CUT] = \
+// SHCUT_TX |
+// SHCUT_RX |
+ 0;
+
+#endif
+ /* Define debug header of every service module. */
+ DBGP_Head.pMANS = "\n\r[MANS] ";
+ DBGP_Head.pRTOS = "\n\r[RTOS] ";
+ DBGP_Head.pALM = "\n\r[ALM] ";
+ DBGP_Head.pPEM = "\n\r[PEM] ";
+ DBGP_Head.pCMPK = "\n\r[CMPK] ";
+ DBGP_Head.pRAPD = "\n\r[RAPD] ";
+ DBGP_Head.pTXPB = "\n\r[TXPB] ";
+ DBGP_Head.pQUMG = "\n\r[QUMG] ";
+
+} /* DBGP_Flag_Init */
+
+
+/*-----------------------------------------------------------------------------
+ * Function: DBG_PrintAllFlag
+ *
+ * Overview: Print All debug flag
+ *
+ * Input: NONE
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 12/10/2008 MHC Create Version 0.
+ *
+ *---------------------------------------------------------------------------*/
+extern void DBG_PrintAllFlag(void)
+{
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 0 FQoS\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 1 FTX\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 2 FRX\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 3 FSEC\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 4 FMGNT\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 5 FMLME\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 6 FRESOURCE\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 7 FBEACON\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 8 FISR\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 9 FPHY\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 11 FMP\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 12 FPWR\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 13 FDM\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 14 FDBG_CTRL\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 15 FC2H\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("DBGFLAG 16 FBT\n"));
+} // DBG_PrintAllFlag
+
+
+extern void DBG_PrintAllComp(void)
+{
+ u1Byte i;
+
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("GlobalDebugComponents Definition\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT0 COMP_TRACE\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT1 COMP_DBG\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT2 COMP_INIT\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT3 COMP_OID_QUERY\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT4 COMP_OID_SET\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT5 COMP_RECV\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT6 COMP_SEND\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT7 COMP_IO\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT8 COMP_POWER\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT9 COMP_MLME\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT10 COMP_SCAN\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT11 COMP_SYSTEM\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT12 COMP_SEC\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT13 COMP_AP\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT14 COMP_TURBO\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT15 COMP_QOS\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT16 COMP_AUTHENTICATOR\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT17 COMP_BEACON\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT18 COMP_BEACON\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT19 COMP_RATE\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT20 COMP_EVENTS\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT21 COMP_FPGA\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT22 COMP_RM\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT23 COMP_MP\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT24 COMP_RXDESC\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT25 COMP_CKIP\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT26 COMP_DIG\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT27 COMP_TXAGC\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT28 COMP_HIPWR\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT29 COMP_HALDM\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT30 COMP_RSNA\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT31 COMP_INDIC\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT32 COMP_LED\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT33 COMP_RF\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT34 COMP_HT\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT35 COMP_POWER_TRACKING\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT36 COMP_POWER_TRACKING\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT37 COMP_AMSDU\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT38 COMP_WPS\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT39 COMP_RATR\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT40 COMP_RESET\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT41 COMP_CMD\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT42 COMP_EFUSE\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT43 COMP_MESH_INTERWORKING\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT43 COMP_CCX\n"));
+
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("GlobalDebugComponents = %"i64fmt"x\n", GlobalDebugComponents));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("Enable DBG COMP ="));
+ for (i = 0; i < 64; i++)
+ {
+ if (GlobalDebugComponents & ((u8Byte)0x1 << i) )
+ {
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT%02d |\n", i));
+ }
+ }
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("\n"));
+
+} // DBG_PrintAllComp
+
+
+/*-----------------------------------------------------------------------------
+ * Function: DBG_PrintFlagEvent
+ *
+ * Overview: Print dedicated debug flag event
+ *
+ * Input: NONE
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 12/10/2008 MHC Create Version 0.
+ *
+ *---------------------------------------------------------------------------*/
+extern void DBG_PrintFlagEvent(u1Byte DbgFlag)
+{
+ switch(DbgFlag)
+ {
+ case FQoS:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 QoS_INIT\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 QoS_VISTA\n"));
+ break;
+
+ case FTX:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 TX_DESC\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 TX_DESC_TID\n"));
+ break;
+
+ case FRX:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 RX_DATA\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 RX_PHY_STS\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 RX_PHY_SS\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 RX_PHY_SQ\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 4 RX_PHY_ASTS\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 5 RX_ERR_LEN\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 6 RX_DEFRAG\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 7 RX_ERR_RATE\n"));
+ break;
+
+ case FSEC:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("NA\n"));
+ break;
+
+ case FMGNT:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("NA\n"));
+ break;
+
+ case FMLME:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 MEDIA_STS\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 LINK_STS\n"));
+ break;
+
+ case FRESOURCE:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 OS_CHK\n"));
+ break;
+
+ case FBEACON:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 BCN_SHOW\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 BCN_PEER\n"));
+ break;
+
+ case FISR:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 ISR_CHK\n"));
+ break;
+
+ case FPHY:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 PHY_BBR\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 PHY_BBW\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 PHY_RFR\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 PHY_RFW\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 4 PHY_MACR\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 5 PHY_MACW\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 6 PHY_ALLR\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 7 PHY_ALLW\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 8 PHY_TXPWR\n"));
+ break;
+
+ case FMP:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 MP_RX\n"));
+ break;
+
+ case FEEPROM:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 EEPROM_W\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 EFUSE_PG\n"));
+ break;
+
+ case FPWR:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 LPS\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 IPS\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 PWRSW\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 PWRHW\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 4 PWRHAL\n"));
+ break;
+
+ case FDM:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 WA_IOT\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 DM_PWDB\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 DM_Monitor\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 3 DM_DIG\n"));
+ break;
+
+ case FDBG_CTRL:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 DBG_CTRL_TRACE\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 DBG_CTRL_INBAND_NOISE\n"));
+ break;
+
+ case FC2H:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 C2H_Summary\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 C2H_PacketData\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 2 C2H_ContentData\n"));
+ break;
+
+ case FBT:
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 0 BT_TRACE\n"));
+ ODM_RT_TRACE(pDM_Odm,COMP_CMD, DBG_LOUD, ("BIT 1 BT_RFPoll\n"));
+ break;
+
+ default:
+ break;
+ }
+
+} // DBG_PrintFlagEvent
+
+
+extern void DBG_DumpMem(const u1Byte DbgComp,
+ const u1Byte DbgLevel,
+ pu1Byte pMem,
+ u2Byte Len)
+{
+ u2Byte i;
+
+ for (i=0;i<((Len>>3) + 1);i++)
+ {
+ ODM_RT_TRACE(pDM_Odm,DbgComp, DbgLevel, ("%02X %02X %02X %02X %02X %02X %02X %02X\n",
+ *(pMem+(i*8)), *(pMem+(i*8+1)), *(pMem+(i*8+2)), *(pMem+(i*8+3)),
+ *(pMem+(i*8+4)), *(pMem+(i*8+5)), *(pMem+(i*8+6)), *(pMem+(i*8+7))));
+
+ }
+}
+
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_debug.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_debug.h
index 7b7ecfc7ed6a..f8670c9a30e7 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_debug.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_debug.h
@@ -1,905 +1,905 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-
-#ifndef __ODM_DBG_H__
-#define __ODM_DBG_H__
-
-
-//-----------------------------------------------------------------------------
-// Define the debug levels
-//
-// 1. DBG_TRACE and DBG_LOUD are used for normal cases.
-// So that, they can help SW engineer to develope or trace states changed
-// and also help HW enginner to trace every operation to and from HW,
-// e.g IO, Tx, Rx.
-//
-// 2. DBG_WARNNING and DBG_SERIOUS are used for unusual or error cases,
-// which help us to debug SW or HW.
-//
-//-----------------------------------------------------------------------------
-//
-// Never used in a call to ODM_RT_TRACE()!
-//
-#define ODM_DBG_OFF 1
-
-//
-// Fatal bug.
-// For example, Tx/Rx/IO locked up, OS hangs, memory access violation,
-// resource allocation failed, unexpected HW behavior, HW BUG and so on.
-//
-#define ODM_DBG_SERIOUS 2
-
-//
-// Abnormal, rare, or unexpeted cases.
-// For example, IRP/Packet/OID canceled, device suprisely unremoved and so on.
-//
-#define ODM_DBG_WARNING 3
-
-//
-// Normal case with useful information about current SW or HW state.
-// For example, Tx/Rx descriptor to fill, Tx/Rx descriptor completed status,
-// SW protocol state change, dynamic mechanism state change and so on.
-//
-#define ODM_DBG_LOUD 4
-
-//
-// Normal case with detail execution flow or information.
-//
-#define ODM_DBG_TRACE 5
-
-//-----------------------------------------------------------------------------
-// Define the tracing components
-//
-//-----------------------------------------------------------------------------
-//BB Functions
-#define ODM_COMP_DIG BIT0
-#define ODM_COMP_RA_MASK BIT1
-#define ODM_COMP_DYNAMIC_TXPWR BIT2
-#define ODM_COMP_FA_CNT BIT3
-#define ODM_COMP_RSSI_MONITOR BIT4
-#define ODM_COMP_CCK_PD BIT5
-#define ODM_COMP_ANT_DIV BIT6
-#define ODM_COMP_PWR_SAVE BIT7
-#define ODM_COMP_PWR_TRAIN BIT8
-#define ODM_COMP_RATE_ADAPTIVE BIT9
-#define ODM_COMP_PATH_DIV BIT10
-#define ODM_COMP_PSD BIT11
-#define ODM_COMP_DYNAMIC_PRICCA BIT12
-#define ODM_COMP_RXHP BIT13
-//MAC Functions
-#define ODM_COMP_EDCA_TURBO BIT16
-#define ODM_COMP_EARLY_MODE BIT17
-//RF Functions
-#define ODM_COMP_TX_PWR_TRACK BIT24
-#define ODM_COMP_RX_GAIN_TRACK BIT25
-#define ODM_COMP_CALIBRATION BIT26
-//Common Functions
-#define ODM_COMP_COMMON BIT30
-#define ODM_COMP_INIT BIT31
-
-/*------------------------Export Marco Definition---------------------------*/
-#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
-#define RT_PRINTK DbgPrint
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
- #define DbgPrint printk
- #define RT_PRINTK(fmt, args...) DbgPrint( "%s(): " fmt, __FUNCTION__, ## args);
-#else
- #define DbgPrint panic_printk
-#define RT_PRINTK(fmt, args...) DbgPrint( "%s(): " fmt, __FUNCTION__, ## args);
-#endif
-
-#ifndef ASSERT
- #define ASSERT(expr)
-#endif
-
-#if DBG
-#define ODM_RT_TRACE(pDM_Odm, comp, level, fmt) \
- if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel)) \
- { \
- if(pDM_Odm->SupportICType == ODM_RTL8192C) \
- DbgPrint("[ODM-92C] "); \
- else if(pDM_Odm->SupportICType == ODM_RTL8192D) \
- DbgPrint("[ODM-92D] "); \
- else if(pDM_Odm->SupportICType == ODM_RTL8723A) \
- DbgPrint("[ODM-8723A] "); \
- else if(pDM_Odm->SupportICType == ODM_RTL8188E) \
- DbgPrint("[ODM-8188E] "); \
- else if(pDM_Odm->SupportICType == ODM_RTL8812) \
- DbgPrint("[ODM-8812] "); \
- else if(pDM_Odm->SupportICType == ODM_RTL8821) \
- DbgPrint("[ODM-8821] "); \
- RT_PRINTK fmt; \
- }
-
-#define ODM_RT_TRACE_F(pDM_Odm, comp, level, fmt) \
- if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel)) \
- { \
- RT_PRINTK fmt; \
- }
-
-#define ODM_RT_ASSERT(pDM_Odm, expr, fmt) \
- if(!(expr)) { \
- DbgPrint( "Assertion failed! %s at ......\n", #expr); \
- DbgPrint( " ......%s,%s,line=%d\n",__FILE__,__FUNCTION__,__LINE__); \
- RT_PRINTK fmt; \
- ASSERT(FALSE); \
- }
-#define ODM_dbg_enter() { DbgPrint("==> %s\n", __FUNCTION__); }
-#define ODM_dbg_exit() { DbgPrint("<== %s\n", __FUNCTION__); }
-#define ODM_dbg_trace(str) { DbgPrint("%s:%s\n", __FUNCTION__, str); }
-
-#define ODM_PRINT_ADDR(pDM_Odm, comp, level, title_str, ptr) \
- if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel)) \
- { \
- int __i; \
- pu1Byte __ptr = (pu1Byte)ptr; \
- DbgPrint("[ODM] "); \
- DbgPrint(title_str); \
- DbgPrint(" "); \
- for( __i=0; __i<6; __i++ ) \
- DbgPrint("%02X%s", __ptr[__i], (__i==5)?"":"-"); \
- DbgPrint("\n"); \
- }
-#else
-#define ODM_RT_TRACE(pDM_Odm, comp, level, fmt)
-#define ODM_RT_TRACE_F(pDM_Odm, comp, level, fmt)
-#define ODM_RT_ASSERT(pDM_Odm, expr, fmt)
-#define ODM_dbg_enter()
-#define ODM_dbg_exit()
-#define ODM_dbg_trace(str)
-#define ODM_PRINT_ADDR(pDM_Odm, comp, level, title_str, ptr)
-#endif
-
-
-VOID
-ODM_InitDebugSetting(
- IN PDM_ODM_T pDM_Odm
- );
-
-
-
-#if 0
-#if DBG
-#define DbgPrint printk
-
-#define PRINT_DATA(_TitleString, _HexData, _HexDataLen) \
- { \
- char *szTitle = _TitleString; \
- pu1Byte pbtHexData = _HexData; \
- u4Byte u4bHexDataLen = _HexDataLen; \
- u4Byte __i; \
- DbgPrint("%s", szTitle); \
- for (__i=0;__i<u4bHexDataLen;__i++) \
- { \
- if ((__i & 15) == 0) \
- { \
- DbgPrint("\n"); \
- } \
- DbgPrint("%02X%s", pbtHexData[__i], ( ((__i&3)==3) ? " " : " ") ); \
- } \
- DbgPrint("\n"); \
- }
-
-// RT_PRINT_XXX macros: implemented for debugging purpose.
-// Added by Annie, 2005-11-21.
-#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen) \
- if(((_Comp) & ODM_GlobalDebugComponents) && (_Level <= ODM_GlobalDebugLevel)) \
- { \
- int __i; \
- pu1Byte ptr = (pu1Byte)_HexData; \
- DbgPrint("Rtl819x: "); \
- DbgPrint(_TitleString); \
- for( __i=0; __i<(int)_HexDataLen; __i++ ) \
- { \
- DbgPrint("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?" ":" "); \
- if (((__i + 1) % 16) == 0) DbgPrint("\n"); \
- } \
- DbgPrint("\n"); \
- }
-
-#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr) \
- if(((_Comp) & ODM_GlobalDebugComponents) && (_Level <= ODM_GlobalDebugLevel)) \
- { \
- int __i; \
- pu1Byte ptr = (pu1Byte)_Ptr; \
- DbgPrint("Rtl819x: "); \
- DbgPrint(_TitleString); \
- DbgPrint(" "); \
- for( __i=0; __i<6; __i++ ) \
- DbgPrint("%02X%s", ptr[__i], (__i==5)?"":"-"); \
- DbgPrint("\n"); \
- }
-
-#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum) \
- if(((_Comp) & ODM_GlobalDebugComponents) && (_Level <= ODM_GlobalDebugLevel)) \
- { \
- int __i, __j; \
- pu1Byte ptr = (pu1Byte)_Ptr; \
- DbgPrint("Rtl819x: "); \
- DbgPrint(_TitleString); \
- DbgPrint("\n"); \
- for( __i=0; __i<(int)_AddNum; __i++ ) \
- { \
- for( __j=0; __j<6; __j++ ) \
- DbgPrint("%02X%s", ptr[__i*6+__j], (__j==5)?"":"-"); \
- DbgPrint("\n"); \
- } \
- }
-
-// Added by Annie, 2005-11-22.
-#define MAX_STR_LEN 64
-#define PRINTABLE(_ch) (_ch>=' ' &&_ch<='~' ) // I want to see ASCII 33 to 126 only. Otherwise, I print '?'. Annie, 2005-11-22.
-
-#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len) \
- if(((_Comp) & ODM_GlobalDebugComponents) && (_Level <= ODM_GlobalDebugLevel)) \
- { \
- int __i; \
- u1Byte buffer[MAX_STR_LEN]; \
- int length = (_Len<MAX_STR_LEN)? _Len : (MAX_STR_LEN-1) ; \
- PlatformZeroMemory( buffer, MAX_STR_LEN ); \
- PlatformMoveMemory( buffer, (pu1Byte)_Ptr, length ); \
- for( __i=0; __i<MAX_STR_LEN; __i++ ) \
- { \
- if( !PRINTABLE(buffer[__i]) ) buffer[__i] = '?'; \
- } \
- buffer[length] = '\0'; \
- DbgPrint("Rtl819x: "); \
- DbgPrint(_TitleString); \
- DbgPrint(": %d, <%s>\n", _Len, buffer); \
- }
-
-#else // of #if DBG
-#define DbgPrint(...)
-#define PRINT_DATA(_TitleString, _HexData, _HexDataLen)
-#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen)
-#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr)
-#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum)
-#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len)
-#endif // of #if DBG
-
-#endif
-
-
-#if 0
-/* Define debug print header for every service module.*/
-typedef struct tag_ODM_DBGP_Service_Module_Header_Name_Structure
-{
- const char *pMANS;
- const char *pRTOS;
- const char *pALM;
- const char *pPEM;
- const char *pCMPK;
- const char *pRAPD;
- const char *pTXPB;
- const char *pQUMG;
-}ODM_DBGP_HEAD_T;
-
-
-/* Define different debug flag for dedicated service modules in debug flag array. */
-// Each module has independt 32 bit debug flag you cnn define the flag as yout require.
-typedef enum tag_ODM_DBGP_Flag_Type_Definition
-{
- ODM_FTX = 0,
- ODM_FRX ,
- ODM_FPHY ,
- ODM_FPWR ,
- ODM_FDM ,
- ODM_FC2H ,
- ODM_FBT ,
- ODM_DBGP_TYPE_MAX
-}ODM_DBGP_FLAG_E;
-
-
-// Define TX relative debug bit --> FTX
-#define ODM_TX_DESC BIT0
-#define ODM_TX_DESC_TID BIT1
-#define ODM_TX_PATH BIT2
-
-// Define RX relative debug bit --> FRX
-#define ODM_RX_DATA BIT0
-#define ODM_RX_PHY_STS BIT1
-#define ODM_RX_PHY_SS BIT2
-#define ODM_RX_PHY_SQ BIT3
-#define ODM_RX_PHY_ASTS BIT4
-#define ODM_RX_ERR_LEN BIT5
-#define ODM_RX_DEFRAG BIT6
-#define ODM_RX_ERR_RATE BIT7
-#define ODM_RX_PATH BIT8
-#define ODM_RX_BEACON BIT9
-
-// Define PHY-BB/RF/MAC check module bit --> FPHY
-#define ODM_PHY_BBR BIT0
-#define ODM_PHY_BBW BIT1
-#define ODM_PHY_RFR BIT2
-#define ODM_PHY_RFW BIT3
-#define ODM_PHY_MACR BIT4
-#define ODM_PHY_MACW BIT5
-#define ODM_PHY_ALLR BIT6
-#define ODM_PHY_ALLW BIT7
-#define ODM_PHY_TXPWR BIT8
-#define ODM_PHY_PWRDIFF BIT9
-#define ODM_PHY_SICR BIT10
-#define ODM_PHY_SICW BIT11
-
-
-
-
-extern u4Byte ODM_GlobalDebugLevel;
-
-
-#if DBG
-extern u8Byte ODM_GlobalDebugComponents;
-#endif
-#endif
-#if 0
-
-//-----------------------------------------------------------------------------
-// Define the debug levels
-//
-// 1. DBG_TRACE and DBG_LOUD are used for normal cases.
-// So that, they can help SW engineer to develope or trace states changed
-// and also help HW enginner to trace every operation to and from HW,
-// e.g IO, Tx, Rx.
-//
-// 2. DBG_WARNNING and DBG_SERIOUS are used for unusual or error cases,
-// which help us to debug SW or HW.
-//
-//-----------------------------------------------------------------------------
-//
-// Never used in a call to ODM_RT_TRACE(pDM_Odm,)!
-//
-#define DBG_OFF 0
-
-//
-// Deprecated! Don't use it!
-// TODO: fix related debug message!
-//
-//#define DBG_SEC 1
-
-//
-// Fatal bug.
-// For example, Tx/Rx/IO locked up, OS hangs, memory access violation,
-// resource allocation failed, unexpected HW behavior, HW BUG and so on.
-//
-#define DBG_SERIOUS 2
-
-//
-// Abnormal, rare, or unexpeted cases.
-// For example, IRP/Packet/OID canceled, device suprisely unremoved and so on.
-//
-#define DBG_WARNING 3
-
-//
-// Normal case with useful information about current SW or HW state.
-// For example, Tx/Rx descriptor to fill, Tx/Rx descriptor completed status,
-// SW protocol state change, dynamic mechanism state change and so on.
-//
-#define DBG_LOUD 4
-
-//
-// Normal case with detail execution flow or information.
-//
-#define DBG_TRACE 5
-
-
-
-//-----------------------------------------------------------------------------
-// Define the tracing components
-//
-//-----------------------------------------------------------------------------
-#define COMP_TRACE BIT0 // For function call tracing.
-#define COMP_DBG BIT1 // Only for temporary debug message.
-#define COMP_INIT BIT2 // during driver initialization / halt / reset.
-#define COMP_OID_QUERY BIT3 // Query OID.
-#define COMP_OID_SET BIT4 // Set OID.
-#define COMP_RECV BIT5 // Reveive part data path.
-#define COMP_SEND BIT6 // Send part path.
-#define COMP_IO BIT7 // I/O Related. Added by Annie, 2006-03-02.
-#define COMP_POWER BIT8 // 802.11 Power Save mode or System/Device Power state related.
-#define COMP_MLME BIT9 // 802.11 link related: join/start BSS, leave BSS.
-#define COMP_SCAN BIT10 // For site survey.
-#define COMP_SYSTEM BIT11 // For general platform function.
-#define COMP_SEC BIT12 // For Security.
-#define COMP_AP BIT13 // For AP mode related.
-#define COMP_TURBO BIT14 // For Turbo Mode related. By Annie, 2005-10-21.
-#define COMP_QOS BIT15 // For QoS.
-#define COMP_AUTHENTICATOR BIT16 // For AP mode Authenticator. Added by Annie, 2006-01-30.
-#define COMP_BEACON BIT17 // For Beacon related, by rcnjko.
-#define COMP_ANTENNA BIT18 // For Antenna diversity related, by rcnjko.
-#define COMP_RATE BIT19 // For Rate Adaptive mechanism, 2006.07.02, by rcnjko. #define COMP_EVENTS 0x00000080 // Event handling
-#define COMP_EVENTS BIT20 // Event handling
-#define COMP_FPGA BIT21 // For FPGA verfication
-#define COMP_RM BIT22 // For Radio Measurement.
-#define COMP_MP BIT23 // For mass production test, by shien chang, 2006.07.13
-#define COMP_RXDESC BIT24 // Show Rx desc information for SD3 debug. Added by Annie, 2006-07-15.
-#define COMP_CKIP BIT25 // For CCX 1 S13: CKIP. Added by Annie, 2006-08-14.
-#define COMP_DIG BIT26 // For DIG, 2006.09.25, by rcnjko.
-#define COMP_TXAGC BIT27 // For Tx power, 060928, by rcnjko.
-#define COMP_HIPWR BIT28 // For High Power Mechanism, 060928, by rcnjko.
-#define COMP_HALDM BIT29 // For HW Dynamic Mechanism, 061010, by rcnjko.
-#define COMP_RSNA BIT30 // For RSNA IBSS , 061201, by CCW.
-#define COMP_INDIC BIT31 // For link indication
-#define COMP_LED BIT32 // For LED.
-#define COMP_RF BIT33 // For RF.
-//1!!!!!!!!!!!!!!!!!!!!!!!!!!!
-//1//1Attention Please!!!<11n or 8190 specific code should be put below this line>
-//1!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-#define COMP_HT BIT34 // For 802.11n HT related information. by Emily 2006-8-11
-#define COMP_POWER_TRACKING BIT35 //FOR 8190 TX POWER TRACKING
-#define COMP_RX_REORDER BIT36 // 8190 Rx Reorder
-#define COMP_AMSDU BIT37 // For A-MSDU Debugging
-#define COMP_WPS BIT38 //WPS Debug Message
-#define COMP_RATR BIT39
-#define COMP_RESET BIT40
-// For debug command to print on dbgview!!
-#define COMP_CMD BIT41
-#define COMP_EFUSE BIT42
-#define COMP_MESH_INTERWORKING BIT43
-#define COMP_CCX BIT44 //CCX Debug Flag
-#define COMP_IOCTL BIT45 // IO Control
-#define COMP_GP BIT46 // For generic parser.
-#define COMP_TXAGG BIT47
-#define COMP_HVL BIT48 // For Ndis 6.2 Context Swirch and Hardware Virtualiztion Layer
-#define COMP_TEST BIT49
-#define COMP_BB_POWERSAVING BIT50
-#define COMP_SWAS BIT51 // For SW Antenna Switch
-#define COMP_P2P BIT52
-#define COMP_MUX BIT53
-#define COMP_FUNC BIT54
-#define COMP_TDLS BIT55
-#define COMP_OMNIPEEK BIT56
-#define COMP_DUALMACSWITCH BIT60 // 2010/12/27 Add for Dual mac mode debug
-#define COMP_EASY_CONCURRENT BIT61 // 2010/12/27 Add for easy cncurrent mode debug
-#define COMP_PSD BIT63 //2011/3/9 Add for WLAN PSD for BT AFH
-
-#define COMP_DFS BIT62
-
-#define COMP_ALL UINT64_C(0xFFFFFFFFFFFFFFFF) // All components
-// For debug print flag to use
-/*------------------------------Define structure----------------------------*/
-/* 2007/07/13 MH *//*------For DeBuG Print modeue------*/
-
-/* Defnie structure to store different debug flag variable. Every debug flag
- is a UINT32 integer and you can assign 32 different events. */
-typedef struct tag_DBGP_Debug_Flag_Structure
-{
- u4Byte Mans; /* Main Scheduler module. */
- u4Byte Rtos; /* RTOS module. */
- u4Byte Alarm; /* Alarm module. */
- u4Byte Pm; /* Performance monitor module. */
-}DBGP_FLAG_T;
-
-/* Define debug print header for every service module.*/
-typedef struct tag_DBGP_Service_Module_Header_Name_Structure
-{
- const char *pMANS;
- const char *pRTOS;
- const char *pALM;
- const char *pPEM;
- const char *pCMPK;
- const char *pRAPD;
- const char *pTXPB;
- const char *pQUMG;
-}DBGP_HEAD_T;
-
-
-/* Define different debug flag for dedicated service modules in debug flag array. */
-// Each module has independt 32 bit debug flag you cnn define the flag as yout require.
-typedef enum tag_DBGP_Flag_Type_Definition
-{
- FQoS = 0,
- FTX = 1,
- FRX = 2,
- FSEC = 3,
- FMGNT = 4,
- FMLME = 5,
- FRESOURCE = 6,
- FBEACON = 7,
- FISR = 8,
- FPHY = 9,
- FMP = 10,
- FEEPROM = 11,
- FPWR = 12,
- FDM = 13,
- FDBG_CTRL = 14,
- FC2H = 15,
- FBT = 16,
- FINIT = 17,
- FIOCTL = 18,
- FSHORT_CUT = 19,
- DBGP_TYPE_MAX
-}DBGP_FLAG_E;
-
-
-// Define Qos Relative debug flag bit --> FQoS
-#define QoS_INIT BIT0
-#define QoS_VISTA BIT1
-
-// Define TX relative debug bit --> FTX
-#define TX_DESC BIT0
-#define TX_DESC_TID BIT1
-#define TX_PATH BIT2
-
-// Define RX relative debug bit --> FRX
-#define RX_DATA BIT0
-#define RX_PHY_STS BIT1
-#define RX_PHY_SS BIT2
-#define RX_PHY_SQ BIT3
-#define RX_PHY_ASTS BIT4
-#define RX_ERR_LEN BIT5
-#define RX_DEFRAG BIT6
-#define RX_ERR_RATE BIT7
-#define RX_PATH BIT8
-#define RX_BEACON BIT9
-
-// Define Security relative debug bit --> FSEC
-
-// Define MGNT relative debug bit --> FMGNT
-
-// Define MLME relative debug bit --> FMLME
-#define MEDIA_STS BIT0
-#define LINK_STS BIT1
-
-// Define OS resource check module bit --> FRESOURCE
-#define OS_CHK BIT0
-
-// Define beacon content check module bit --> FBEACON
-#define BCN_SHOW BIT0
-#define BCN_PEER BIT1
-
-// Define ISR/IMR check module bit --> FISR
-#define ISR_CHK BIT0
-
-// Define PHY-BB/RF/MAC check module bit --> FPHY
-#define PHY_BBR BIT0
-#define PHY_BBW BIT1
-#define PHY_RFR BIT2
-#define PHY_RFW BIT3
-#define PHY_MACR BIT4
-#define PHY_MACW BIT5
-#define PHY_ALLR BIT6
-#define PHY_ALLW BIT7
-#define PHY_TXPWR BIT8
-#define PHY_PWRDIFF BIT9
-#define PHY_SICR BIT10
-#define PHY_SICW BIT11
-
-// Define MPT driver check module bit --> FMP
-#define MP_RX BIT0
-#define MP_SWICH_CH BIT1
-
-// Define EEPROM and EFUSE check module bit --> FEEPROM
-#define EEPROM_W BIT0
-#define EFUSE_PG BIT1
-#define EFUSE_READ_ALL BIT2
-#define EFUSE_ANALYSIS BIT3
-#define EFUSE_PG_DETAIL BIT4
-
-// Define power save check module bit --> FPWR
-#define LPS BIT0
-#define IPS BIT1
-#define PWRSW BIT2
-#define PWRHW BIT3
-#define PWRHAL BIT4
-
-// Define Dynamic Mechanism check module bit --> FDM
-#define WA_IOT BIT0
-#define DM_PWDB BIT1
-#define DM_Monitor BIT2
-#define DM_DIG BIT3
-#define DM_EDCA_Turbo BIT4
-#define DM_BT30 BIT5
-
-// Define Dbg Control module bit --> FDBG_CTRL
-#define DBG_CTRL_TRACE BIT0
-#define DBG_CTRL_INBAND_NOISE BIT1
-
-// Define FW C2H Cmd check module bit --> FC2H
-#define C2H_Summary BIT0
-#define C2H_PacketData BIT1
-#define C2H_ContentData BIT2
-// Define BT Cmd check module bit --> FBT
-#define BT_TRACE BIT0
-#define BT_RFPoll BIT1
-
-// Define init check for module bit --> FINIT
-#define INIT_EEPROM BIT0
-#define INIT_TxPower BIT1
-#define INIT_IQK BIT2
-#define INIT_RF BIT3
-
-// Define IOCTL Cmd check module bit --> FIOCTL
-// section 1 : IRP related
-#define IOCTL_IRP BIT0
-#define IOCTL_IRP_DETAIL BIT1
-#define IOCTL_IRP_STATISTICS BIT2
-#define IOCTL_IRP_HANDLE BIT3
-// section 2 : HCI command/event
-#define IOCTL_BT_HCICMD BIT8
-#define IOCTL_BT_HCICMD_DETAIL BIT9
-#define IOCTL_BT_HCICMD_EXT BIT10
-#define IOCTL_BT_EVENT BIT11
-#define IOCTL_BT_EVENT_DETAIL BIT12
-#define IOCTL_BT_EVENT_PERIODICAL BIT13
-// section 3 : BT tx/rx data and throughput
-#define IOCTL_BT_TX_ACLDATA BIT16
-#define IOCTL_BT_TX_ACLDATA_DETAIL BIT17
-#define IOCTL_BT_RX_ACLDATA BIT18
-#define IOCTL_BT_RX_ACLDATA_DETAIL BIT19
-#define IOCTL_BT_TP BIT20
-// section 4 : BT connection state machine.
-#define IOCTL_STATE BIT21
-#define IOCTL_BT_LOGO BIT22
-// section 5 : BT function trace
-#define IOCTL_CALLBACK_FUN BIT24
-#define IOCTL_PARSE_BT_PKT BIT25
-#define IOCTL_BT_TX_PKT BIT26
-#define IOCTL_BT_FLAG_MON BIT27
-
-//
-// Define init check for module bit --> FSHORT_CUT
-// 2011/07/20 MH Add for short but definition.
-//
-#define SHCUT_TX BIT0
-#define SHCUT_RX BIT1
-
-
-/* 2007/07/13 MH *//*------For DeBuG Print modeue------*/
-/*------------------------------Define structure----------------------------*/
-
-
-/*------------------------Export Marco Definition---------------------------*/
-#if (DM_ODM_SUPPORT_TYPE != ODM_MP)
-#define RT_PRINTK(fmt, args...) printk( "%s(): " fmt, __FUNCTION__, ## args);
-
-#if DBG
-#define ODM_RT_TRACE(pDM_Odm,comp, level, fmt) \
- if(((comp) & GlobalDebugComponents) && (level <= GlobalDebugLevel)) \
- { \
- RT_PRINTK fmt; \
- }
-
-#define RT_TRACE_F(comp, level, fmt) \
- if(((comp) & GlobalDebugComponents) && (level <= GlobalDebugLevel)) \
- { \
- RT_PRINTK fmt; \
- }
-
-#define RT_ASSERT(expr,fmt) \
- if(!(expr)) { \
- printk( "Assertion failed! %s at ......\n", #expr); \
- printk( " ......%s,%s,line=%d\n",__FILE__,__FUNCTION__,__LINE__); \
- }
-#define dbg_enter() { printk("==> %s\n", __FUNCTION__); }
-#define dbg_exit() { printk("<== %s\n", __FUNCTION__); }
-#define dbg_trace(str) { printk("%s:%s\n", __FUNCTION__, str); }
-#else
-#define ODM_RT_TRACE(pDM_Odm,comp, level, fmt)
-#define RT_TRACE_F(comp, level, fmt)
-#define RT_ASSERT(expr, fmt)
-#define dbg_enter()
-#define dbg_exit()
-#define dbg_trace(str)
-#endif
-
-#if DBG
-#define DbgPrint printk
-
-#define PRINT_DATA(_TitleString, _HexData, _HexDataLen) \
- { \
- char *szTitle = _TitleString; \
- pu1Byte pbtHexData = _HexData; \
- u4Byte u4bHexDataLen = _HexDataLen; \
- u4Byte __i; \
- DbgPrint("%s", szTitle); \
- for (__i=0;__i<u4bHexDataLen;__i++) \
- { \
- if ((__i & 15) == 0) \
- { \
- DbgPrint("\n"); \
- } \
- DbgPrint("%02X%s", pbtHexData[__i], ( ((__i&3)==3) ? " " : " ") ); \
- } \
- DbgPrint("\n"); \
- }
-
-// RT_PRINT_XXX macros: implemented for debugging purpose.
-// Added by Annie, 2005-11-21.
-#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen) \
- if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) \
- { \
- int __i; \
- pu1Byte ptr = (pu1Byte)_HexData; \
- DbgPrint("Rtl819x: "); \
- DbgPrint(_TitleString); \
- for( __i=0; __i<(int)_HexDataLen; __i++ ) \
- { \
- DbgPrint("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?" ":" "); \
- if (((__i + 1) % 16) == 0) DbgPrint("\n"); \
- } \
- DbgPrint("\n"); \
- }
-
-#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr) \
- if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) \
- { \
- int __i; \
- pu1Byte ptr = (pu1Byte)_Ptr; \
- DbgPrint("Rtl819x: "); \
- DbgPrint(_TitleString); \
- DbgPrint(" "); \
- for( __i=0; __i<6; __i++ ) \
- DbgPrint("%02X%s", ptr[__i], (__i==5)?"":"-"); \
- DbgPrint("\n"); \
- }
-
-#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum) \
- if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) \
- { \
- int __i, __j; \
- pu1Byte ptr = (pu1Byte)_Ptr; \
- DbgPrint("Rtl819x: "); \
- DbgPrint(_TitleString); \
- DbgPrint("\n"); \
- for( __i=0; __i<(int)_AddNum; __i++ ) \
- { \
- for( __j=0; __j<6; __j++ ) \
- DbgPrint("%02X%s", ptr[__i*6+__j], (__j==5)?"":"-"); \
- DbgPrint("\n"); \
- } \
- }
-
-// Added by Annie, 2005-11-22.
-#define MAX_STR_LEN 64
-#define PRINTABLE(_ch) (_ch>=' ' &&_ch<='~' ) // I want to see ASCII 33 to 126 only. Otherwise, I print '?'. Annie, 2005-11-22.
-
-#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len) \
- if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) \
- { \
- int __i; \
- u1Byte buffer[MAX_STR_LEN]; \
- int length = (_Len<MAX_STR_LEN)? _Len : (MAX_STR_LEN-1) ; \
- PlatformZeroMemory( buffer, MAX_STR_LEN ); \
- PlatformMoveMemory( buffer, (pu1Byte)_Ptr, length ); \
- for( __i=0; __i<MAX_STR_LEN; __i++ ) \
- { \
- if( !PRINTABLE(buffer[__i]) ) buffer[__i] = '?'; \
- } \
- buffer[length] = '\0'; \
- DbgPrint("Rtl819x: "); \
- DbgPrint(_TitleString); \
- DbgPrint(": %d, <%s>\n", _Len, buffer); \
- }
-
-#else // of #if DBG
-#define DbgPrint(...)
-#define PRINT_DATA(_TitleString, _HexData, _HexDataLen)
-#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen)
-#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr)
-#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum)
-#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len)
-#endif // of #if DBG
-
-
-
-#endif // #if (DM_ODM_SUPPORT_TYPE != ODM_MP)
-
-#define DEBUG_PRINT 1
-
-// Please add new OS's print API by yourself
-
-//#if (RT_PLATFORM==PLATFORM_WINDOWS)
-#if (DEBUG_PRINT == 1) && DBG
-#define RTPRINT(dbgtype, dbgflag, printstr)\
-{\
- if (DBGP_Type[dbgtype] & dbgflag)\
- {\
- DbgPrint printstr;\
- }\
-}
-
-#define RTPRINT_ADDR(dbgtype, dbgflag, printstr, _Ptr)\
-{\
- if (DBGP_Type[dbgtype] & dbgflag)\
- {\
- int __i; \
- pu1Byte ptr = (pu1Byte)_Ptr; \
- DbgPrint printstr; \
- DbgPrint(" "); \
- for( __i=0; __i<6; __i++ ) \
- DbgPrint("%02X%s", ptr[__i], (__i==5)?"":"-"); \
- DbgPrint("\n"); \
- }\
-}
-
-#define RTPRINT_DATA(dbgtype, dbgflag, _TitleString, _HexData, _HexDataLen)\
-{\
- if (DBGP_Type[dbgtype] & dbgflag)\
- {\
- int __i; \
- pu1Byte ptr = (pu1Byte)_HexData; \
- DbgPrint(_TitleString); \
- for( __i=0; __i<(int)_HexDataLen; __i++ ) \
- { \
- DbgPrint("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?" ":" ");\
- if (((__i + 1) % 16) == 0) DbgPrint("\n");\
- } \
- DbgPrint("\n"); \
- }\
-}
-#define FuncEntry FunctionIn(COMP_FUNC)
-#define FuncExit FunctionOut(COMP_FUNC)
-
-#define FunctionIn(_comp) ODM_RT_TRACE(pDM_Odm,(_comp), DBG_LOUD, ("==========> %s\n", __FUNCTION__))
-#define FunctionOut(_comp) ODM_RT_TRACE(pDM_Odm,(_comp), DBG_LOUD, ("<========== %s\n", __FUNCTION__))
-
-
-#else
-
-#define DBGP(dbgtype, dbgflag, printstr)
-#define RTPRINT(dbgtype, dbgflag, printstr)
-#define RTPRINT_ADDR(dbgtype, dbgflag, printstr, _Ptr)
-#define RTPRINT_DATA(dbgtype, dbgflag, _TitleString, _HexData, _HexDataLen)
-#define FuncEntry
-#define FuncExit
-#define FunctionIn(_comp)
-#define FunctionOut(_comp)
-#endif
-/*------------------------Export Marco Definition---------------------------*/
-
-
-/*------------------------Export global variable----------------------------*/
-extern u4Byte DBGP_Type[DBGP_TYPE_MAX];
-extern DBGP_HEAD_T DBGP_Head;
-
-/*------------------------Export global variable----------------------------*/
-
-
-/*--------------------------Exported Function prototype---------------------*/
-extern void DBGP_Flag_Init(void);
-extern void DBG_PrintAllFlag(void);
-extern void DBG_PrintAllComp(void);
-extern void DBG_PrintFlagEvent(u1Byte DbgFlag);
-extern void DBG_DumpMem(const u1Byte DbgComp,
- const u1Byte DbgLevel,
- pu1Byte pMem,
- u2Byte Len);
-
-/*--------------------------Exported Function prototype---------------------*/
-
-
-
-
-
-
-
-
-
-extern u4Byte GlobalDebugLevel;
-extern u8Byte GlobalDebugComponents;
-
-
-#endif
-
-
-#endif // __ODM_DBG_H__
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+
+#ifndef __ODM_DBG_H__
+#define __ODM_DBG_H__
+
+
+//-----------------------------------------------------------------------------
+// Define the debug levels
+//
+// 1. DBG_TRACE and DBG_LOUD are used for normal cases.
+// So that, they can help SW engineer to develope or trace states changed
+// and also help HW enginner to trace every operation to and from HW,
+// e.g IO, Tx, Rx.
+//
+// 2. DBG_WARNNING and DBG_SERIOUS are used for unusual or error cases,
+// which help us to debug SW or HW.
+//
+//-----------------------------------------------------------------------------
+//
+// Never used in a call to ODM_RT_TRACE()!
+//
+#define ODM_DBG_OFF 1
+
+//
+// Fatal bug.
+// For example, Tx/Rx/IO locked up, OS hangs, memory access violation,
+// resource allocation failed, unexpected HW behavior, HW BUG and so on.
+//
+#define ODM_DBG_SERIOUS 2
+
+//
+// Abnormal, rare, or unexpeted cases.
+// For example, IRP/Packet/OID canceled, device suprisely unremoved and so on.
+//
+#define ODM_DBG_WARNING 3
+
+//
+// Normal case with useful information about current SW or HW state.
+// For example, Tx/Rx descriptor to fill, Tx/Rx descriptor completed status,
+// SW protocol state change, dynamic mechanism state change and so on.
+//
+#define ODM_DBG_LOUD 4
+
+//
+// Normal case with detail execution flow or information.
+//
+#define ODM_DBG_TRACE 5
+
+//-----------------------------------------------------------------------------
+// Define the tracing components
+//
+//-----------------------------------------------------------------------------
+//BB Functions
+#define ODM_COMP_DIG BIT0
+#define ODM_COMP_RA_MASK BIT1
+#define ODM_COMP_DYNAMIC_TXPWR BIT2
+#define ODM_COMP_FA_CNT BIT3
+#define ODM_COMP_RSSI_MONITOR BIT4
+#define ODM_COMP_CCK_PD BIT5
+#define ODM_COMP_ANT_DIV BIT6
+#define ODM_COMP_PWR_SAVE BIT7
+#define ODM_COMP_PWR_TRAIN BIT8
+#define ODM_COMP_RATE_ADAPTIVE BIT9
+#define ODM_COMP_PATH_DIV BIT10
+#define ODM_COMP_PSD BIT11
+#define ODM_COMP_DYNAMIC_PRICCA BIT12
+#define ODM_COMP_RXHP BIT13
+//MAC Functions
+#define ODM_COMP_EDCA_TURBO BIT16
+#define ODM_COMP_EARLY_MODE BIT17
+//RF Functions
+#define ODM_COMP_TX_PWR_TRACK BIT24
+#define ODM_COMP_RX_GAIN_TRACK BIT25
+#define ODM_COMP_CALIBRATION BIT26
+//Common Functions
+#define ODM_COMP_COMMON BIT30
+#define ODM_COMP_INIT BIT31
+
+/*------------------------Export Marco Definition---------------------------*/
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+#define RT_PRINTK DbgPrint
+#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
+ #define DbgPrint printk
+ #define RT_PRINTK(fmt, args...) DbgPrint( "%s(): " fmt, __FUNCTION__, ## args);
+#else
+ #define DbgPrint panic_printk
+#define RT_PRINTK(fmt, args...) DbgPrint( "%s(): " fmt, __FUNCTION__, ## args);
+#endif
+
+#ifndef ASSERT
+ #define ASSERT(expr)
+#endif
+
+#if DBG
+#define ODM_RT_TRACE(pDM_Odm, comp, level, fmt) \
+ if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel)) \
+ { \
+ if(pDM_Odm->SupportICType == ODM_RTL8192C) \
+ DbgPrint("[ODM-92C] "); \
+ else if(pDM_Odm->SupportICType == ODM_RTL8192D) \
+ DbgPrint("[ODM-92D] "); \
+ else if(pDM_Odm->SupportICType == ODM_RTL8723A) \
+ DbgPrint("[ODM-8723A] "); \
+ else if(pDM_Odm->SupportICType == ODM_RTL8188E) \
+ DbgPrint("[ODM-8188E] "); \
+ else if(pDM_Odm->SupportICType == ODM_RTL8812) \
+ DbgPrint("[ODM-8812] "); \
+ else if(pDM_Odm->SupportICType == ODM_RTL8821) \
+ DbgPrint("[ODM-8821] "); \
+ RT_PRINTK fmt; \
+ }
+
+#define ODM_RT_TRACE_F(pDM_Odm, comp, level, fmt) \
+ if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel)) \
+ { \
+ RT_PRINTK fmt; \
+ }
+
+#define ODM_RT_ASSERT(pDM_Odm, expr, fmt) \
+ if(!(expr)) { \
+ DbgPrint( "Assertion failed! %s at ......\n", #expr); \
+ DbgPrint( " ......%s,%s,line=%d\n",__FILE__,__FUNCTION__,__LINE__); \
+ RT_PRINTK fmt; \
+ ASSERT(FALSE); \
+ }
+#define ODM_dbg_enter() { DbgPrint("==> %s\n", __FUNCTION__); }
+#define ODM_dbg_exit() { DbgPrint("<== %s\n", __FUNCTION__); }
+#define ODM_dbg_trace(str) { DbgPrint("%s:%s\n", __FUNCTION__, str); }
+
+#define ODM_PRINT_ADDR(pDM_Odm, comp, level, title_str, ptr) \
+ if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel)) \
+ { \
+ int __i; \
+ pu1Byte __ptr = (pu1Byte)ptr; \
+ DbgPrint("[ODM] "); \
+ DbgPrint(title_str); \
+ DbgPrint(" "); \
+ for( __i=0; __i<6; __i++ ) \
+ DbgPrint("%02X%s", __ptr[__i], (__i==5)?"":"-"); \
+ DbgPrint("\n"); \
+ }
+#else
+#define ODM_RT_TRACE(pDM_Odm, comp, level, fmt)
+#define ODM_RT_TRACE_F(pDM_Odm, comp, level, fmt)
+#define ODM_RT_ASSERT(pDM_Odm, expr, fmt)
+#define ODM_dbg_enter()
+#define ODM_dbg_exit()
+#define ODM_dbg_trace(str)
+#define ODM_PRINT_ADDR(pDM_Odm, comp, level, title_str, ptr)
+#endif
+
+
+VOID
+ODM_InitDebugSetting(
+ IN PDM_ODM_T pDM_Odm
+ );
+
+
+
+#if 0
+#if DBG
+#define DbgPrint printk
+
+#define PRINT_DATA(_TitleString, _HexData, _HexDataLen) \
+ { \
+ char *szTitle = _TitleString; \
+ pu1Byte pbtHexData = _HexData; \
+ u4Byte u4bHexDataLen = _HexDataLen; \
+ u4Byte __i; \
+ DbgPrint("%s", szTitle); \
+ for (__i=0;__i<u4bHexDataLen;__i++) \
+ { \
+ if ((__i & 15) == 0) \
+ { \
+ DbgPrint("\n"); \
+ } \
+ DbgPrint("%02X%s", pbtHexData[__i], ( ((__i&3)==3) ? " " : " ") ); \
+ } \
+ DbgPrint("\n"); \
+ }
+
+// RT_PRINT_XXX macros: implemented for debugging purpose.
+// Added by Annie, 2005-11-21.
+#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen) \
+ if(((_Comp) & ODM_GlobalDebugComponents) && (_Level <= ODM_GlobalDebugLevel)) \
+ { \
+ int __i; \
+ pu1Byte ptr = (pu1Byte)_HexData; \
+ DbgPrint("Rtl819x: "); \
+ DbgPrint(_TitleString); \
+ for( __i=0; __i<(int)_HexDataLen; __i++ ) \
+ { \
+ DbgPrint("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?" ":" "); \
+ if (((__i + 1) % 16) == 0) DbgPrint("\n"); \
+ } \
+ DbgPrint("\n"); \
+ }
+
+#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr) \
+ if(((_Comp) & ODM_GlobalDebugComponents) && (_Level <= ODM_GlobalDebugLevel)) \
+ { \
+ int __i; \
+ pu1Byte ptr = (pu1Byte)_Ptr; \
+ DbgPrint("Rtl819x: "); \
+ DbgPrint(_TitleString); \
+ DbgPrint(" "); \
+ for( __i=0; __i<6; __i++ ) \
+ DbgPrint("%02X%s", ptr[__i], (__i==5)?"":"-"); \
+ DbgPrint("\n"); \
+ }
+
+#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum) \
+ if(((_Comp) & ODM_GlobalDebugComponents) && (_Level <= ODM_GlobalDebugLevel)) \
+ { \
+ int __i, __j; \
+ pu1Byte ptr = (pu1Byte)_Ptr; \
+ DbgPrint("Rtl819x: "); \
+ DbgPrint(_TitleString); \
+ DbgPrint("\n"); \
+ for( __i=0; __i<(int)_AddNum; __i++ ) \
+ { \
+ for( __j=0; __j<6; __j++ ) \
+ DbgPrint("%02X%s", ptr[__i*6+__j], (__j==5)?"":"-"); \
+ DbgPrint("\n"); \
+ } \
+ }
+
+// Added by Annie, 2005-11-22.
+#define MAX_STR_LEN 64
+#define PRINTABLE(_ch) (_ch>=' ' &&_ch<='~' ) // I want to see ASCII 33 to 126 only. Otherwise, I print '?'. Annie, 2005-11-22.
+
+#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len) \
+ if(((_Comp) & ODM_GlobalDebugComponents) && (_Level <= ODM_GlobalDebugLevel)) \
+ { \
+ int __i; \
+ u1Byte buffer[MAX_STR_LEN]; \
+ int length = (_Len<MAX_STR_LEN)? _Len : (MAX_STR_LEN-1) ; \
+ PlatformZeroMemory( buffer, MAX_STR_LEN ); \
+ PlatformMoveMemory( buffer, (pu1Byte)_Ptr, length ); \
+ for( __i=0; __i<MAX_STR_LEN; __i++ ) \
+ { \
+ if( !PRINTABLE(buffer[__i]) ) buffer[__i] = '?'; \
+ } \
+ buffer[length] = '\0'; \
+ DbgPrint("Rtl819x: "); \
+ DbgPrint(_TitleString); \
+ DbgPrint(": %d, <%s>\n", _Len, buffer); \
+ }
+
+#else // of #if DBG
+#define DbgPrint(...)
+#define PRINT_DATA(_TitleString, _HexData, _HexDataLen)
+#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen)
+#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr)
+#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum)
+#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len)
+#endif // of #if DBG
+
+#endif
+
+
+#if 0
+/* Define debug print header for every service module.*/
+typedef struct tag_ODM_DBGP_Service_Module_Header_Name_Structure
+{
+ const char *pMANS;
+ const char *pRTOS;
+ const char *pALM;
+ const char *pPEM;
+ const char *pCMPK;
+ const char *pRAPD;
+ const char *pTXPB;
+ const char *pQUMG;
+}ODM_DBGP_HEAD_T;
+
+
+/* Define different debug flag for dedicated service modules in debug flag array. */
+// Each module has independt 32 bit debug flag you cnn define the flag as yout require.
+typedef enum tag_ODM_DBGP_Flag_Type_Definition
+{
+ ODM_FTX = 0,
+ ODM_FRX ,
+ ODM_FPHY ,
+ ODM_FPWR ,
+ ODM_FDM ,
+ ODM_FC2H ,
+ ODM_FBT ,
+ ODM_DBGP_TYPE_MAX
+}ODM_DBGP_FLAG_E;
+
+
+// Define TX relative debug bit --> FTX
+#define ODM_TX_DESC BIT0
+#define ODM_TX_DESC_TID BIT1
+#define ODM_TX_PATH BIT2
+
+// Define RX relative debug bit --> FRX
+#define ODM_RX_DATA BIT0
+#define ODM_RX_PHY_STS BIT1
+#define ODM_RX_PHY_SS BIT2
+#define ODM_RX_PHY_SQ BIT3
+#define ODM_RX_PHY_ASTS BIT4
+#define ODM_RX_ERR_LEN BIT5
+#define ODM_RX_DEFRAG BIT6
+#define ODM_RX_ERR_RATE BIT7
+#define ODM_RX_PATH BIT8
+#define ODM_RX_BEACON BIT9
+
+// Define PHY-BB/RF/MAC check module bit --> FPHY
+#define ODM_PHY_BBR BIT0
+#define ODM_PHY_BBW BIT1
+#define ODM_PHY_RFR BIT2
+#define ODM_PHY_RFW BIT3
+#define ODM_PHY_MACR BIT4
+#define ODM_PHY_MACW BIT5
+#define ODM_PHY_ALLR BIT6
+#define ODM_PHY_ALLW BIT7
+#define ODM_PHY_TXPWR BIT8
+#define ODM_PHY_PWRDIFF BIT9
+#define ODM_PHY_SICR BIT10
+#define ODM_PHY_SICW BIT11
+
+
+
+
+extern u4Byte ODM_GlobalDebugLevel;
+
+
+#if DBG
+extern u8Byte ODM_GlobalDebugComponents;
+#endif
+#endif
+#if 0
+
+//-----------------------------------------------------------------------------
+// Define the debug levels
+//
+// 1. DBG_TRACE and DBG_LOUD are used for normal cases.
+// So that, they can help SW engineer to develope or trace states changed
+// and also help HW enginner to trace every operation to and from HW,
+// e.g IO, Tx, Rx.
+//
+// 2. DBG_WARNNING and DBG_SERIOUS are used for unusual or error cases,
+// which help us to debug SW or HW.
+//
+//-----------------------------------------------------------------------------
+//
+// Never used in a call to ODM_RT_TRACE(pDM_Odm,)!
+//
+#define DBG_OFF 0
+
+//
+// Deprecated! Don't use it!
+// TODO: fix related debug message!
+//
+//#define DBG_SEC 1
+
+//
+// Fatal bug.
+// For example, Tx/Rx/IO locked up, OS hangs, memory access violation,
+// resource allocation failed, unexpected HW behavior, HW BUG and so on.
+//
+#define DBG_SERIOUS 2
+
+//
+// Abnormal, rare, or unexpeted cases.
+// For example, IRP/Packet/OID canceled, device suprisely unremoved and so on.
+//
+#define DBG_WARNING 3
+
+//
+// Normal case with useful information about current SW or HW state.
+// For example, Tx/Rx descriptor to fill, Tx/Rx descriptor completed status,
+// SW protocol state change, dynamic mechanism state change and so on.
+//
+#define DBG_LOUD 4
+
+//
+// Normal case with detail execution flow or information.
+//
+#define DBG_TRACE 5
+
+
+
+//-----------------------------------------------------------------------------
+// Define the tracing components
+//
+//-----------------------------------------------------------------------------
+#define COMP_TRACE BIT0 // For function call tracing.
+#define COMP_DBG BIT1 // Only for temporary debug message.
+#define COMP_INIT BIT2 // during driver initialization / halt / reset.
+#define COMP_OID_QUERY BIT3 // Query OID.
+#define COMP_OID_SET BIT4 // Set OID.
+#define COMP_RECV BIT5 // Reveive part data path.
+#define COMP_SEND BIT6 // Send part path.
+#define COMP_IO BIT7 // I/O Related. Added by Annie, 2006-03-02.
+#define COMP_POWER BIT8 // 802.11 Power Save mode or System/Device Power state related.
+#define COMP_MLME BIT9 // 802.11 link related: join/start BSS, leave BSS.
+#define COMP_SCAN BIT10 // For site survey.
+#define COMP_SYSTEM BIT11 // For general platform function.
+#define COMP_SEC BIT12 // For Security.
+#define COMP_AP BIT13 // For AP mode related.
+#define COMP_TURBO BIT14 // For Turbo Mode related. By Annie, 2005-10-21.
+#define COMP_QOS BIT15 // For QoS.
+#define COMP_AUTHENTICATOR BIT16 // For AP mode Authenticator. Added by Annie, 2006-01-30.
+#define COMP_BEACON BIT17 // For Beacon related, by rcnjko.
+#define COMP_ANTENNA BIT18 // For Antenna diversity related, by rcnjko.
+#define COMP_RATE BIT19 // For Rate Adaptive mechanism, 2006.07.02, by rcnjko. #define COMP_EVENTS 0x00000080 // Event handling
+#define COMP_EVENTS BIT20 // Event handling
+#define COMP_FPGA BIT21 // For FPGA verfication
+#define COMP_RM BIT22 // For Radio Measurement.
+#define COMP_MP BIT23 // For mass production test, by shien chang, 2006.07.13
+#define COMP_RXDESC BIT24 // Show Rx desc information for SD3 debug. Added by Annie, 2006-07-15.
+#define COMP_CKIP BIT25 // For CCX 1 S13: CKIP. Added by Annie, 2006-08-14.
+#define COMP_DIG BIT26 // For DIG, 2006.09.25, by rcnjko.
+#define COMP_TXAGC BIT27 // For Tx power, 060928, by rcnjko.
+#define COMP_HIPWR BIT28 // For High Power Mechanism, 060928, by rcnjko.
+#define COMP_HALDM BIT29 // For HW Dynamic Mechanism, 061010, by rcnjko.
+#define COMP_RSNA BIT30 // For RSNA IBSS , 061201, by CCW.
+#define COMP_INDIC BIT31 // For link indication
+#define COMP_LED BIT32 // For LED.
+#define COMP_RF BIT33 // For RF.
+//1!!!!!!!!!!!!!!!!!!!!!!!!!!!
+//1//1Attention Please!!!<11n or 8190 specific code should be put below this line>
+//1!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+#define COMP_HT BIT34 // For 802.11n HT related information. by Emily 2006-8-11
+#define COMP_POWER_TRACKING BIT35 //FOR 8190 TX POWER TRACKING
+#define COMP_RX_REORDER BIT36 // 8190 Rx Reorder
+#define COMP_AMSDU BIT37 // For A-MSDU Debugging
+#define COMP_WPS BIT38 //WPS Debug Message
+#define COMP_RATR BIT39
+#define COMP_RESET BIT40
+// For debug command to print on dbgview!!
+#define COMP_CMD BIT41
+#define COMP_EFUSE BIT42
+#define COMP_MESH_INTERWORKING BIT43
+#define COMP_CCX BIT44 //CCX Debug Flag
+#define COMP_IOCTL BIT45 // IO Control
+#define COMP_GP BIT46 // For generic parser.
+#define COMP_TXAGG BIT47
+#define COMP_HVL BIT48 // For Ndis 6.2 Context Swirch and Hardware Virtualiztion Layer
+#define COMP_TEST BIT49
+#define COMP_BB_POWERSAVING BIT50
+#define COMP_SWAS BIT51 // For SW Antenna Switch
+#define COMP_P2P BIT52
+#define COMP_MUX BIT53
+#define COMP_FUNC BIT54
+#define COMP_TDLS BIT55
+#define COMP_OMNIPEEK BIT56
+#define COMP_DUALMACSWITCH BIT60 // 2010/12/27 Add for Dual mac mode debug
+#define COMP_EASY_CONCURRENT BIT61 // 2010/12/27 Add for easy cncurrent mode debug
+#define COMP_PSD BIT63 //2011/3/9 Add for WLAN PSD for BT AFH
+
+#define COMP_DFS BIT62
+
+#define COMP_ALL UINT64_C(0xFFFFFFFFFFFFFFFF) // All components
+// For debug print flag to use
+/*------------------------------Define structure----------------------------*/
+/* 2007/07/13 MH *//*------For DeBuG Print modeue------*/
+
+/* Defnie structure to store different debug flag variable. Every debug flag
+ is a UINT32 integer and you can assign 32 different events. */
+typedef struct tag_DBGP_Debug_Flag_Structure
+{
+ u4Byte Mans; /* Main Scheduler module. */
+ u4Byte Rtos; /* RTOS module. */
+ u4Byte Alarm; /* Alarm module. */
+ u4Byte Pm; /* Performance monitor module. */
+}DBGP_FLAG_T;
+
+/* Define debug print header for every service module.*/
+typedef struct tag_DBGP_Service_Module_Header_Name_Structure
+{
+ const char *pMANS;
+ const char *pRTOS;
+ const char *pALM;
+ const char *pPEM;
+ const char *pCMPK;
+ const char *pRAPD;
+ const char *pTXPB;
+ const char *pQUMG;
+}DBGP_HEAD_T;
+
+
+/* Define different debug flag for dedicated service modules in debug flag array. */
+// Each module has independt 32 bit debug flag you cnn define the flag as yout require.
+typedef enum tag_DBGP_Flag_Type_Definition
+{
+ FQoS = 0,
+ FTX = 1,
+ FRX = 2,
+ FSEC = 3,
+ FMGNT = 4,
+ FMLME = 5,
+ FRESOURCE = 6,
+ FBEACON = 7,
+ FISR = 8,
+ FPHY = 9,
+ FMP = 10,
+ FEEPROM = 11,
+ FPWR = 12,
+ FDM = 13,
+ FDBG_CTRL = 14,
+ FC2H = 15,
+ FBT = 16,
+ FINIT = 17,
+ FIOCTL = 18,
+ FSHORT_CUT = 19,
+ DBGP_TYPE_MAX
+}DBGP_FLAG_E;
+
+
+// Define Qos Relative debug flag bit --> FQoS
+#define QoS_INIT BIT0
+#define QoS_VISTA BIT1
+
+// Define TX relative debug bit --> FTX
+#define TX_DESC BIT0
+#define TX_DESC_TID BIT1
+#define TX_PATH BIT2
+
+// Define RX relative debug bit --> FRX
+#define RX_DATA BIT0
+#define RX_PHY_STS BIT1
+#define RX_PHY_SS BIT2
+#define RX_PHY_SQ BIT3
+#define RX_PHY_ASTS BIT4
+#define RX_ERR_LEN BIT5
+#define RX_DEFRAG BIT6
+#define RX_ERR_RATE BIT7
+#define RX_PATH BIT8
+#define RX_BEACON BIT9
+
+// Define Security relative debug bit --> FSEC
+
+// Define MGNT relative debug bit --> FMGNT
+
+// Define MLME relative debug bit --> FMLME
+#define MEDIA_STS BIT0
+#define LINK_STS BIT1
+
+// Define OS resource check module bit --> FRESOURCE
+#define OS_CHK BIT0
+
+// Define beacon content check module bit --> FBEACON
+#define BCN_SHOW BIT0
+#define BCN_PEER BIT1
+
+// Define ISR/IMR check module bit --> FISR
+#define ISR_CHK BIT0
+
+// Define PHY-BB/RF/MAC check module bit --> FPHY
+#define PHY_BBR BIT0
+#define PHY_BBW BIT1
+#define PHY_RFR BIT2
+#define PHY_RFW BIT3
+#define PHY_MACR BIT4
+#define PHY_MACW BIT5
+#define PHY_ALLR BIT6
+#define PHY_ALLW BIT7
+#define PHY_TXPWR BIT8
+#define PHY_PWRDIFF BIT9
+#define PHY_SICR BIT10
+#define PHY_SICW BIT11
+
+// Define MPT driver check module bit --> FMP
+#define MP_RX BIT0
+#define MP_SWICH_CH BIT1
+
+// Define EEPROM and EFUSE check module bit --> FEEPROM
+#define EEPROM_W BIT0
+#define EFUSE_PG BIT1
+#define EFUSE_READ_ALL BIT2
+#define EFUSE_ANALYSIS BIT3
+#define EFUSE_PG_DETAIL BIT4
+
+// Define power save check module bit --> FPWR
+#define LPS BIT0
+#define IPS BIT1
+#define PWRSW BIT2
+#define PWRHW BIT3
+#define PWRHAL BIT4
+
+// Define Dynamic Mechanism check module bit --> FDM
+#define WA_IOT BIT0
+#define DM_PWDB BIT1
+#define DM_Monitor BIT2
+#define DM_DIG BIT3
+#define DM_EDCA_Turbo BIT4
+#define DM_BT30 BIT5
+
+// Define Dbg Control module bit --> FDBG_CTRL
+#define DBG_CTRL_TRACE BIT0
+#define DBG_CTRL_INBAND_NOISE BIT1
+
+// Define FW C2H Cmd check module bit --> FC2H
+#define C2H_Summary BIT0
+#define C2H_PacketData BIT1
+#define C2H_ContentData BIT2
+// Define BT Cmd check module bit --> FBT
+#define BT_TRACE BIT0
+#define BT_RFPoll BIT1
+
+// Define init check for module bit --> FINIT
+#define INIT_EEPROM BIT0
+#define INIT_TxPower BIT1
+#define INIT_IQK BIT2
+#define INIT_RF BIT3
+
+// Define IOCTL Cmd check module bit --> FIOCTL
+// section 1 : IRP related
+#define IOCTL_IRP BIT0
+#define IOCTL_IRP_DETAIL BIT1
+#define IOCTL_IRP_STATISTICS BIT2
+#define IOCTL_IRP_HANDLE BIT3
+// section 2 : HCI command/event
+#define IOCTL_BT_HCICMD BIT8
+#define IOCTL_BT_HCICMD_DETAIL BIT9
+#define IOCTL_BT_HCICMD_EXT BIT10
+#define IOCTL_BT_EVENT BIT11
+#define IOCTL_BT_EVENT_DETAIL BIT12
+#define IOCTL_BT_EVENT_PERIODICAL BIT13
+// section 3 : BT tx/rx data and throughput
+#define IOCTL_BT_TX_ACLDATA BIT16
+#define IOCTL_BT_TX_ACLDATA_DETAIL BIT17
+#define IOCTL_BT_RX_ACLDATA BIT18
+#define IOCTL_BT_RX_ACLDATA_DETAIL BIT19
+#define IOCTL_BT_TP BIT20
+// section 4 : BT connection state machine.
+#define IOCTL_STATE BIT21
+#define IOCTL_BT_LOGO BIT22
+// section 5 : BT function trace
+#define IOCTL_CALLBACK_FUN BIT24
+#define IOCTL_PARSE_BT_PKT BIT25
+#define IOCTL_BT_TX_PKT BIT26
+#define IOCTL_BT_FLAG_MON BIT27
+
+//
+// Define init check for module bit --> FSHORT_CUT
+// 2011/07/20 MH Add for short but definition.
+//
+#define SHCUT_TX BIT0
+#define SHCUT_RX BIT1
+
+
+/* 2007/07/13 MH *//*------For DeBuG Print modeue------*/
+/*------------------------------Define structure----------------------------*/
+
+
+/*------------------------Export Marco Definition---------------------------*/
+#if (DM_ODM_SUPPORT_TYPE != ODM_MP)
+#define RT_PRINTK(fmt, args...) printk( "%s(): " fmt, __FUNCTION__, ## args);
+
+#if DBG
+#define ODM_RT_TRACE(pDM_Odm,comp, level, fmt) \
+ if(((comp) & GlobalDebugComponents) && (level <= GlobalDebugLevel)) \
+ { \
+ RT_PRINTK fmt; \
+ }
+
+#define RT_TRACE_F(comp, level, fmt) \
+ if(((comp) & GlobalDebugComponents) && (level <= GlobalDebugLevel)) \
+ { \
+ RT_PRINTK fmt; \
+ }
+
+#define RT_ASSERT(expr,fmt) \
+ if(!(expr)) { \
+ printk( "Assertion failed! %s at ......\n", #expr); \
+ printk( " ......%s,%s,line=%d\n",__FILE__,__FUNCTION__,__LINE__); \
+ }
+#define dbg_enter() { printk("==> %s\n", __FUNCTION__); }
+#define dbg_exit() { printk("<== %s\n", __FUNCTION__); }
+#define dbg_trace(str) { printk("%s:%s\n", __FUNCTION__, str); }
+#else
+#define ODM_RT_TRACE(pDM_Odm,comp, level, fmt)
+#define RT_TRACE_F(comp, level, fmt)
+#define RT_ASSERT(expr, fmt)
+#define dbg_enter()
+#define dbg_exit()
+#define dbg_trace(str)
+#endif
+
+#if DBG
+#define DbgPrint printk
+
+#define PRINT_DATA(_TitleString, _HexData, _HexDataLen) \
+ { \
+ char *szTitle = _TitleString; \
+ pu1Byte pbtHexData = _HexData; \
+ u4Byte u4bHexDataLen = _HexDataLen; \
+ u4Byte __i; \
+ DbgPrint("%s", szTitle); \
+ for (__i=0;__i<u4bHexDataLen;__i++) \
+ { \
+ if ((__i & 15) == 0) \
+ { \
+ DbgPrint("\n"); \
+ } \
+ DbgPrint("%02X%s", pbtHexData[__i], ( ((__i&3)==3) ? " " : " ") ); \
+ } \
+ DbgPrint("\n"); \
+ }
+
+// RT_PRINT_XXX macros: implemented for debugging purpose.
+// Added by Annie, 2005-11-21.
+#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen) \
+ if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) \
+ { \
+ int __i; \
+ pu1Byte ptr = (pu1Byte)_HexData; \
+ DbgPrint("Rtl819x: "); \
+ DbgPrint(_TitleString); \
+ for( __i=0; __i<(int)_HexDataLen; __i++ ) \
+ { \
+ DbgPrint("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?" ":" "); \
+ if (((__i + 1) % 16) == 0) DbgPrint("\n"); \
+ } \
+ DbgPrint("\n"); \
+ }
+
+#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr) \
+ if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) \
+ { \
+ int __i; \
+ pu1Byte ptr = (pu1Byte)_Ptr; \
+ DbgPrint("Rtl819x: "); \
+ DbgPrint(_TitleString); \
+ DbgPrint(" "); \
+ for( __i=0; __i<6; __i++ ) \
+ DbgPrint("%02X%s", ptr[__i], (__i==5)?"":"-"); \
+ DbgPrint("\n"); \
+ }
+
+#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum) \
+ if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) \
+ { \
+ int __i, __j; \
+ pu1Byte ptr = (pu1Byte)_Ptr; \
+ DbgPrint("Rtl819x: "); \
+ DbgPrint(_TitleString); \
+ DbgPrint("\n"); \
+ for( __i=0; __i<(int)_AddNum; __i++ ) \
+ { \
+ for( __j=0; __j<6; __j++ ) \
+ DbgPrint("%02X%s", ptr[__i*6+__j], (__j==5)?"":"-"); \
+ DbgPrint("\n"); \
+ } \
+ }
+
+// Added by Annie, 2005-11-22.
+#define MAX_STR_LEN 64
+#define PRINTABLE(_ch) (_ch>=' ' &&_ch<='~' ) // I want to see ASCII 33 to 126 only. Otherwise, I print '?'. Annie, 2005-11-22.
+
+#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len) \
+ if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) \
+ { \
+ int __i; \
+ u1Byte buffer[MAX_STR_LEN]; \
+ int length = (_Len<MAX_STR_LEN)? _Len : (MAX_STR_LEN-1) ; \
+ PlatformZeroMemory( buffer, MAX_STR_LEN ); \
+ PlatformMoveMemory( buffer, (pu1Byte)_Ptr, length ); \
+ for( __i=0; __i<MAX_STR_LEN; __i++ ) \
+ { \
+ if( !PRINTABLE(buffer[__i]) ) buffer[__i] = '?'; \
+ } \
+ buffer[length] = '\0'; \
+ DbgPrint("Rtl819x: "); \
+ DbgPrint(_TitleString); \
+ DbgPrint(": %d, <%s>\n", _Len, buffer); \
+ }
+
+#else // of #if DBG
+#define DbgPrint(...)
+#define PRINT_DATA(_TitleString, _HexData, _HexDataLen)
+#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen)
+#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr)
+#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum)
+#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len)
+#endif // of #if DBG
+
+
+
+#endif // #if (DM_ODM_SUPPORT_TYPE != ODM_MP)
+
+#define DEBUG_PRINT 1
+
+// Please add new OS's print API by yourself
+
+//#if (RT_PLATFORM==PLATFORM_WINDOWS)
+#if (DEBUG_PRINT == 1) && DBG
+#define RTPRINT(dbgtype, dbgflag, printstr)\
+{\
+ if (DBGP_Type[dbgtype] & dbgflag)\
+ {\
+ DbgPrint printstr;\
+ }\
+}
+
+#define RTPRINT_ADDR(dbgtype, dbgflag, printstr, _Ptr)\
+{\
+ if (DBGP_Type[dbgtype] & dbgflag)\
+ {\
+ int __i; \
+ pu1Byte ptr = (pu1Byte)_Ptr; \
+ DbgPrint printstr; \
+ DbgPrint(" "); \
+ for( __i=0; __i<6; __i++ ) \
+ DbgPrint("%02X%s", ptr[__i], (__i==5)?"":"-"); \
+ DbgPrint("\n"); \
+ }\
+}
+
+#define RTPRINT_DATA(dbgtype, dbgflag, _TitleString, _HexData, _HexDataLen)\
+{\
+ if (DBGP_Type[dbgtype] & dbgflag)\
+ {\
+ int __i; \
+ pu1Byte ptr = (pu1Byte)_HexData; \
+ DbgPrint(_TitleString); \
+ for( __i=0; __i<(int)_HexDataLen; __i++ ) \
+ { \
+ DbgPrint("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?" ":" ");\
+ if (((__i + 1) % 16) == 0) DbgPrint("\n");\
+ } \
+ DbgPrint("\n"); \
+ }\
+}
+#define FuncEntry FunctionIn(COMP_FUNC)
+#define FuncExit FunctionOut(COMP_FUNC)
+
+#define FunctionIn(_comp) ODM_RT_TRACE(pDM_Odm,(_comp), DBG_LOUD, ("==========> %s\n", __FUNCTION__))
+#define FunctionOut(_comp) ODM_RT_TRACE(pDM_Odm,(_comp), DBG_LOUD, ("<========== %s\n", __FUNCTION__))
+
+
+#else
+
+#define DBGP(dbgtype, dbgflag, printstr)
+#define RTPRINT(dbgtype, dbgflag, printstr)
+#define RTPRINT_ADDR(dbgtype, dbgflag, printstr, _Ptr)
+#define RTPRINT_DATA(dbgtype, dbgflag, _TitleString, _HexData, _HexDataLen)
+#define FuncEntry
+#define FuncExit
+#define FunctionIn(_comp)
+#define FunctionOut(_comp)
+#endif
+/*------------------------Export Marco Definition---------------------------*/
+
+
+/*------------------------Export global variable----------------------------*/
+extern u4Byte DBGP_Type[DBGP_TYPE_MAX];
+extern DBGP_HEAD_T DBGP_Head;
+
+/*------------------------Export global variable----------------------------*/
+
+
+/*--------------------------Exported Function prototype---------------------*/
+extern void DBGP_Flag_Init(void);
+extern void DBG_PrintAllFlag(void);
+extern void DBG_PrintAllComp(void);
+extern void DBG_PrintFlagEvent(u1Byte DbgFlag);
+extern void DBG_DumpMem(const u1Byte DbgComp,
+ const u1Byte DbgLevel,
+ pu1Byte pMem,
+ u2Byte Len);
+
+/*--------------------------Exported Function prototype---------------------*/
+
+
+
+
+
+
+
+
+
+extern u4Byte GlobalDebugLevel;
+extern u8Byte GlobalDebugComponents;
+
+
+#endif
+
+
+#endif // __ODM_DBG_H__
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_interface.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_interface.c
index 2e56b50032b3..7f6dd58bced1 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_interface.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_interface.c
@@ -1,666 +1,666 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-//============================================================
-// include files
-//============================================================
-
-#include "odm_precomp.h"
-//
-// ODM IO Relative API.
-//
-
-u1Byte
-ODM_Read1Byte(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- prtl8192cd_priv priv = pDM_Odm->priv;
- return RTL_R8(RegAddr);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
- PADAPTER Adapter = pDM_Odm->Adapter;
- return rtw_read8(Adapter,RegAddr);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PADAPTER Adapter = pDM_Odm->Adapter;
- return PlatformEFIORead1Byte(Adapter, RegAddr);
-#endif
-
-}
-
-
-u2Byte
-ODM_Read2Byte(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- prtl8192cd_priv priv = pDM_Odm->priv;
- return RTL_R16(RegAddr);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
- PADAPTER Adapter = pDM_Odm->Adapter;
- return rtw_read16(Adapter,RegAddr);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PADAPTER Adapter = pDM_Odm->Adapter;
- return PlatformEFIORead2Byte(Adapter, RegAddr);
-#endif
-
-}
-
-
-u4Byte
-ODM_Read4Byte(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- prtl8192cd_priv priv = pDM_Odm->priv;
- return RTL_R32(RegAddr);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
- PADAPTER Adapter = pDM_Odm->Adapter;
- return rtw_read32(Adapter,RegAddr);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PADAPTER Adapter = pDM_Odm->Adapter;
- return PlatformEFIORead4Byte(Adapter, RegAddr);
-#endif
-
-}
-
-
-VOID
-ODM_Write1Byte(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr,
- IN u1Byte Data
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- prtl8192cd_priv priv = pDM_Odm->priv;
- RTL_W8(RegAddr, Data);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
- PADAPTER Adapter = pDM_Odm->Adapter;
- rtw_write8(Adapter,RegAddr, Data);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PADAPTER Adapter = pDM_Odm->Adapter;
- PlatformEFIOWrite1Byte(Adapter, RegAddr, Data);
-#endif
-
-}
-
-
-VOID
-ODM_Write2Byte(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr,
- IN u2Byte Data
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- prtl8192cd_priv priv = pDM_Odm->priv;
- RTL_W16(RegAddr, Data);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
- PADAPTER Adapter = pDM_Odm->Adapter;
- rtw_write16(Adapter,RegAddr, Data);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PADAPTER Adapter = pDM_Odm->Adapter;
- PlatformEFIOWrite2Byte(Adapter, RegAddr, Data);
-#endif
-
-}
-
-
-VOID
-ODM_Write4Byte(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr,
- IN u4Byte Data
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- prtl8192cd_priv priv = pDM_Odm->priv;
- RTL_W32(RegAddr, Data);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
- PADAPTER Adapter = pDM_Odm->Adapter;
- rtw_write32(Adapter,RegAddr, Data);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PADAPTER Adapter = pDM_Odm->Adapter;
- PlatformEFIOWrite4Byte(Adapter, RegAddr, Data);
-#endif
-
-}
-
-
-VOID
-ODM_SetMACReg(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr,
- IN u4Byte BitMask,
- IN u4Byte Data
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- PHY_SetBBReg(pDM_Odm->priv, RegAddr, BitMask, Data);
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
- PADAPTER Adapter = pDM_Odm->Adapter;
- PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);
-#endif
-}
-
-
-u4Byte
-ODM_GetMACReg(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr,
- IN u4Byte BitMask
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- return PHY_QueryBBReg(pDM_Odm->priv, RegAddr, BitMask);
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
- PADAPTER Adapter = pDM_Odm->Adapter;
- return PHY_QueryBBReg(Adapter, RegAddr, BitMask);
-#endif
-}
-
-
-VOID
-ODM_SetBBReg(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr,
- IN u4Byte BitMask,
- IN u4Byte Data
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- PHY_SetBBReg(pDM_Odm->priv, RegAddr, BitMask, Data);
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
- PADAPTER Adapter = pDM_Odm->Adapter;
- PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);
-#endif
-}
-
-
-u4Byte
-ODM_GetBBReg(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr,
- IN u4Byte BitMask
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- return PHY_QueryBBReg(pDM_Odm->priv, RegAddr, BitMask);
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
- PADAPTER Adapter = pDM_Odm->Adapter;
- return PHY_QueryBBReg(Adapter, RegAddr, BitMask);
-#endif
-}
-
-
-VOID
-ODM_SetRFReg(
- IN PDM_ODM_T pDM_Odm,
- IN ODM_RF_RADIO_PATH_E eRFPath,
- IN u4Byte RegAddr,
- IN u4Byte BitMask,
- IN u4Byte Data
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- PHY_SetRFReg(pDM_Odm->priv, eRFPath, RegAddr, BitMask, Data);
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
- PADAPTER Adapter = pDM_Odm->Adapter;
- PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data);
-#endif
-}
-
-
-u4Byte
-ODM_GetRFReg(
- IN PDM_ODM_T pDM_Odm,
- IN ODM_RF_RADIO_PATH_E eRFPath,
- IN u4Byte RegAddr,
- IN u4Byte BitMask
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- return PHY_QueryRFReg(pDM_Odm->priv, eRFPath, RegAddr, BitMask, 1);
-#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
- PADAPTER Adapter = pDM_Odm->Adapter;
- return PHY_QueryRFReg(Adapter, eRFPath, RegAddr, BitMask);
-#endif
-}
-
-
-
-
-//
-// ODM Memory relative API.
-//
-VOID
-ODM_AllocateMemory(
- IN PDM_ODM_T pDM_Odm,
- OUT PVOID *pPtr,
- IN u4Byte length
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- *pPtr = kmalloc(length, GFP_ATOMIC);
-#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
- *pPtr = rtw_zvmalloc(length);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PADAPTER Adapter = pDM_Odm->Adapter;
- PlatformAllocateMemory(Adapter, pPtr, length);
-#endif
-}
-
-// length could be ignored, used to detect memory leakage.
-VOID
-ODM_FreeMemory(
- IN PDM_ODM_T pDM_Odm,
- OUT PVOID pPtr,
- IN u4Byte length
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- kfree(pPtr);
-#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
- rtw_vmfree(pPtr, length);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- //PADAPTER Adapter = pDM_Odm->Adapter;
- PlatformFreeMemory(pPtr, length);
-#endif
-}
-s4Byte ODM_CompareMemory(
- IN PDM_ODM_T pDM_Odm,
- IN PVOID pBuf1,
- IN PVOID pBuf2,
- IN u4Byte length
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- return memcmp(pBuf1,pBuf2,length);
-#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
- return _rtw_memcmp(pBuf1,pBuf2,length);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- return PlatformCompareMemory(pBuf1,pBuf2,length);
-#endif
-}
-
-
-
-//
-// ODM MISC relative API.
-//
-VOID
-ODM_AcquireSpinLock(
- IN PDM_ODM_T pDM_Odm,
- IN RT_SPINLOCK_TYPE type
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PADAPTER Adapter = pDM_Odm->Adapter;
- PlatformAcquireSpinLock(Adapter, type);
-#endif
-}
-VOID
-ODM_ReleaseSpinLock(
- IN PDM_ODM_T pDM_Odm,
- IN RT_SPINLOCK_TYPE type
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PADAPTER Adapter = pDM_Odm->Adapter;
- PlatformReleaseSpinLock(Adapter, type);
-#endif
-}
-
-//
-// Work item relative API. FOr MP driver only~!
-//
-VOID
-ODM_InitializeWorkItem(
- IN PDM_ODM_T pDM_Odm,
- IN PRT_WORK_ITEM pRtWorkItem,
- IN RT_WORKITEM_CALL_BACK RtWorkItemCallback,
- IN PVOID pContext,
- IN const char* szID
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PADAPTER Adapter = pDM_Odm->Adapter;
- PlatformInitializeWorkItem(Adapter, pRtWorkItem, RtWorkItemCallback, pContext, szID);
-#endif
-}
-
-
-VOID
-ODM_StartWorkItem(
- IN PRT_WORK_ITEM pRtWorkItem
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PlatformStartWorkItem(pRtWorkItem);
-#endif
-}
-
-
-VOID
-ODM_StopWorkItem(
- IN PRT_WORK_ITEM pRtWorkItem
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PlatformStopWorkItem(pRtWorkItem);
-#endif
-}
-
-
-VOID
-ODM_FreeWorkItem(
- IN PRT_WORK_ITEM pRtWorkItem
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PlatformFreeWorkItem(pRtWorkItem);
-#endif
-}
-
-
-VOID
-ODM_ScheduleWorkItem(
- IN PRT_WORK_ITEM pRtWorkItem
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PlatformScheduleWorkItem(pRtWorkItem);
-#endif
-}
-
-
-VOID
-ODM_IsWorkItemScheduled(
- IN PRT_WORK_ITEM pRtWorkItem
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PlatformIsWorkItemScheduled(pRtWorkItem);
-#endif
-}
-
-
-
-//
-// ODM Timer relative API.
-//
-VOID
-ODM_StallExecution(
- IN u4Byte usDelay
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
- rtw_udelay_os(usDelay);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PlatformStallExecution(usDelay);
-#endif
-}
-
-VOID
-ODM_delay_ms(IN u4Byte ms)
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- delay_ms(ms);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
- rtw_mdelay_os(ms);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- delay_ms(ms);
-#endif
-}
-
-VOID
-ODM_delay_us(IN u4Byte us)
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- delay_us(us);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
- rtw_udelay_os(us);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PlatformStallExecution(us);
-#endif
-}
-
-VOID
-ODM_sleep_ms(IN u4Byte ms)
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
- rtw_msleep_os(ms);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
-#endif
-}
-
-VOID
-ODM_sleep_us(IN u4Byte us)
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
- rtw_usleep_os(us);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
-#endif
-}
-
-VOID
-ODM_SetTimer(
- IN PDM_ODM_T pDM_Odm,
- IN PRT_TIMER pTimer,
- IN u4Byte msDelay
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- mod_timer(pTimer, jiffies + (msDelay+9)/10);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
- _set_timer(pTimer,msDelay ); //ms
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PADAPTER Adapter = pDM_Odm->Adapter;
- PlatformSetTimer(Adapter, pTimer, msDelay);
-#endif
-
-}
-
-VOID
-ODM_InitializeTimer(
- IN PDM_ODM_T pDM_Odm,
- IN PRT_TIMER pTimer,
- IN RT_TIMER_CALL_BACK CallBackFunc,
- IN PVOID pContext,
- IN const char* szID
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- pTimer->function = CallBackFunc;
- pTimer->data = (unsigned long)pDM_Odm;
- init_timer(pTimer);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
- PADAPTER Adapter = pDM_Odm->Adapter;
- _init_timer(pTimer,Adapter->pnetdev,CallBackFunc,pDM_Odm);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PADAPTER Adapter = pDM_Odm->Adapter;
- PlatformInitializeTimer(Adapter, pTimer, CallBackFunc,pContext,szID);
-#endif
-}
-
-
-VOID
-ODM_CancelTimer(
- IN PDM_ODM_T pDM_Odm,
- IN PRT_TIMER pTimer
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
- del_timer_sync(pTimer);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
- _cancel_timer_ex(pTimer);
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- PADAPTER Adapter = pDM_Odm->Adapter;
- PlatformCancelTimer(Adapter, pTimer);
-#endif
-}
-
-
-VOID
-ODM_ReleaseTimer(
- IN PDM_ODM_T pDM_Odm,
- IN PRT_TIMER pTimer
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
-
- PADAPTER Adapter = pDM_Odm->Adapter;
-
- // <20120301, Kordan> If the initilization fails, InitializeAdapterXxx will return regardless of InitHalDm.
- // Hence, uninitialized timers cause BSOD when the driver releases resources since the init fail.
- if (pTimer == 0)
- {
- ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_SERIOUS, ("=====>ODM_ReleaseTimer(), The timer is NULL! Please check it!\n"));
- return;
- }
-
- PlatformReleaseTimer(Adapter, pTimer);
-#endif
-}
-
-
-//
-// ODM FW relative API.
-//
-#if (DM_ODM_SUPPORT_TYPE & ODM_MP)
-VOID
-ODM_FillH2CCmd(
- IN PADAPTER Adapter,
- IN u1Byte ElementID,
- IN u4Byte CmdLen,
- IN pu1Byte pCmdBuffer
-)
-{
- if(IS_HARDWARE_TYPE_JAGUAR(Adapter))
- {
- switch(ElementID)
- {
- case ODM_H2C_RSSI_REPORT:
- FillH2CCmd8812(Adapter, H2C_8812_RSSI_REPORT, CmdLen, pCmdBuffer);
- default:
- break;
- }
-
- }
- else if(IS_HARDWARE_TYPE_8188E(Adapter))
- {
- switch(ElementID)
- {
- case ODM_H2C_PSD_RESULT:
- FillH2CCmd88E(Adapter, H2C_88E_PSD_RESULT, CmdLen, pCmdBuffer);
- default:
- break;
- }
- }
- else
- {
- switch(ElementID)
- {
- case ODM_H2C_RSSI_REPORT:
- FillH2CCmd92C(Adapter, H2C_RSSI_REPORT, CmdLen, pCmdBuffer);
- case ODM_H2C_PSD_RESULT:
- FillH2CCmd92C(Adapter, H2C_92C_PSD_RESULT, CmdLen, pCmdBuffer);
- default:
- break;
- }
- }
-}
-#else
-u4Byte
-ODM_FillH2CCmd(
- IN pu1Byte pH2CBuffer,
- IN u4Byte H2CBufferLen,
- IN u4Byte CmdNum,
- IN pu4Byte pElementID,
- IN pu4Byte pCmdLen,
- IN pu1Byte* pCmbBuffer,
- IN pu1Byte CmdStartSeq
- )
-{
-#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
-
-#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
- //FillH2CCmd(pH2CBuffer, H2CBufferLen, CmdNum, pElementID, pCmdLen, pCmbBuffer, CmdStartSeq);
- return FALSE;
-#endif
-
- return TRUE;
-}
-#endif
-
-
-
-
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+//============================================================
+// include files
+//============================================================
+
+#include "odm_precomp.h"
+//
+// ODM IO Relative API.
+//
+
+u1Byte
+ODM_Read1Byte(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ prtl8192cd_priv priv = pDM_Odm->priv;
+ return RTL_R8(RegAddr);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ return rtw_read8(Adapter,RegAddr);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ return PlatformEFIORead1Byte(Adapter, RegAddr);
+#endif
+
+}
+
+
+u2Byte
+ODM_Read2Byte(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ prtl8192cd_priv priv = pDM_Odm->priv;
+ return RTL_R16(RegAddr);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ return rtw_read16(Adapter,RegAddr);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ return PlatformEFIORead2Byte(Adapter, RegAddr);
+#endif
+
+}
+
+
+u4Byte
+ODM_Read4Byte(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ prtl8192cd_priv priv = pDM_Odm->priv;
+ return RTL_R32(RegAddr);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ return rtw_read32(Adapter,RegAddr);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ return PlatformEFIORead4Byte(Adapter, RegAddr);
+#endif
+
+}
+
+
+VOID
+ODM_Write1Byte(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr,
+ IN u1Byte Data
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ prtl8192cd_priv priv = pDM_Odm->priv;
+ RTL_W8(RegAddr, Data);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ rtw_write8(Adapter,RegAddr, Data);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ PlatformEFIOWrite1Byte(Adapter, RegAddr, Data);
+#endif
+
+}
+
+
+VOID
+ODM_Write2Byte(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr,
+ IN u2Byte Data
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ prtl8192cd_priv priv = pDM_Odm->priv;
+ RTL_W16(RegAddr, Data);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ rtw_write16(Adapter,RegAddr, Data);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ PlatformEFIOWrite2Byte(Adapter, RegAddr, Data);
+#endif
+
+}
+
+
+VOID
+ODM_Write4Byte(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr,
+ IN u4Byte Data
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ prtl8192cd_priv priv = pDM_Odm->priv;
+ RTL_W32(RegAddr, Data);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ rtw_write32(Adapter,RegAddr, Data);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ PlatformEFIOWrite4Byte(Adapter, RegAddr, Data);
+#endif
+
+}
+
+
+VOID
+ODM_SetMACReg(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr,
+ IN u4Byte BitMask,
+ IN u4Byte Data
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ PHY_SetBBReg(pDM_Odm->priv, RegAddr, BitMask, Data);
+#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);
+#endif
+}
+
+
+u4Byte
+ODM_GetMACReg(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr,
+ IN u4Byte BitMask
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ return PHY_QueryBBReg(pDM_Odm->priv, RegAddr, BitMask);
+#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ return PHY_QueryBBReg(Adapter, RegAddr, BitMask);
+#endif
+}
+
+
+VOID
+ODM_SetBBReg(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr,
+ IN u4Byte BitMask,
+ IN u4Byte Data
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ PHY_SetBBReg(pDM_Odm->priv, RegAddr, BitMask, Data);
+#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ PHY_SetBBReg(Adapter, RegAddr, BitMask, Data);
+#endif
+}
+
+
+u4Byte
+ODM_GetBBReg(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr,
+ IN u4Byte BitMask
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ return PHY_QueryBBReg(pDM_Odm->priv, RegAddr, BitMask);
+#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ return PHY_QueryBBReg(Adapter, RegAddr, BitMask);
+#endif
+}
+
+
+VOID
+ODM_SetRFReg(
+ IN PDM_ODM_T pDM_Odm,
+ IN ODM_RF_RADIO_PATH_E eRFPath,
+ IN u4Byte RegAddr,
+ IN u4Byte BitMask,
+ IN u4Byte Data
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ PHY_SetRFReg(pDM_Odm->priv, eRFPath, RegAddr, BitMask, Data);
+#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data);
+#endif
+}
+
+
+u4Byte
+ODM_GetRFReg(
+ IN PDM_ODM_T pDM_Odm,
+ IN ODM_RF_RADIO_PATH_E eRFPath,
+ IN u4Byte RegAddr,
+ IN u4Byte BitMask
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ return PHY_QueryRFReg(pDM_Odm->priv, eRFPath, RegAddr, BitMask, 1);
+#elif(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ return PHY_QueryRFReg(Adapter, eRFPath, RegAddr, BitMask);
+#endif
+}
+
+
+
+
+//
+// ODM Memory relative API.
+//
+VOID
+ODM_AllocateMemory(
+ IN PDM_ODM_T pDM_Odm,
+ OUT PVOID *pPtr,
+ IN u4Byte length
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ *pPtr = kmalloc(length, GFP_ATOMIC);
+#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
+ *pPtr = rtw_zvmalloc(length);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ PlatformAllocateMemory(Adapter, pPtr, length);
+#endif
+}
+
+// length could be ignored, used to detect memory leakage.
+VOID
+ODM_FreeMemory(
+ IN PDM_ODM_T pDM_Odm,
+ OUT PVOID pPtr,
+ IN u4Byte length
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ kfree(pPtr);
+#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
+ rtw_vmfree(pPtr, length);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ //PADAPTER Adapter = pDM_Odm->Adapter;
+ PlatformFreeMemory(pPtr, length);
+#endif
+}
+s4Byte ODM_CompareMemory(
+ IN PDM_ODM_T pDM_Odm,
+ IN PVOID pBuf1,
+ IN PVOID pBuf2,
+ IN u4Byte length
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ return memcmp(pBuf1,pBuf2,length);
+#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
+ return _rtw_memcmp(pBuf1,pBuf2,length);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ return PlatformCompareMemory(pBuf1,pBuf2,length);
+#endif
+}
+
+
+
+//
+// ODM MISC relative API.
+//
+VOID
+ODM_AcquireSpinLock(
+ IN PDM_ODM_T pDM_Odm,
+ IN RT_SPINLOCK_TYPE type
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+
+#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ PlatformAcquireSpinLock(Adapter, type);
+#endif
+}
+VOID
+ODM_ReleaseSpinLock(
+ IN PDM_ODM_T pDM_Odm,
+ IN RT_SPINLOCK_TYPE type
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+
+#elif (DM_ODM_SUPPORT_TYPE & ODM_CE )
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ PlatformReleaseSpinLock(Adapter, type);
+#endif
+}
+
+//
+// Work item relative API. FOr MP driver only~!
+//
+VOID
+ODM_InitializeWorkItem(
+ IN PDM_ODM_T pDM_Odm,
+ IN PRT_WORK_ITEM pRtWorkItem,
+ IN RT_WORKITEM_CALL_BACK RtWorkItemCallback,
+ IN PVOID pContext,
+ IN const char* szID
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ PlatformInitializeWorkItem(Adapter, pRtWorkItem, RtWorkItemCallback, pContext, szID);
+#endif
+}
+
+
+VOID
+ODM_StartWorkItem(
+ IN PRT_WORK_ITEM pRtWorkItem
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PlatformStartWorkItem(pRtWorkItem);
+#endif
+}
+
+
+VOID
+ODM_StopWorkItem(
+ IN PRT_WORK_ITEM pRtWorkItem
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PlatformStopWorkItem(pRtWorkItem);
+#endif
+}
+
+
+VOID
+ODM_FreeWorkItem(
+ IN PRT_WORK_ITEM pRtWorkItem
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PlatformFreeWorkItem(pRtWorkItem);
+#endif
+}
+
+
+VOID
+ODM_ScheduleWorkItem(
+ IN PRT_WORK_ITEM pRtWorkItem
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PlatformScheduleWorkItem(pRtWorkItem);
+#endif
+}
+
+
+VOID
+ODM_IsWorkItemScheduled(
+ IN PRT_WORK_ITEM pRtWorkItem
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PlatformIsWorkItemScheduled(pRtWorkItem);
+#endif
+}
+
+
+
+//
+// ODM Timer relative API.
+//
+VOID
+ODM_StallExecution(
+ IN u4Byte usDelay
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+ rtw_udelay_os(usDelay);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PlatformStallExecution(usDelay);
+#endif
+}
+
+VOID
+ODM_delay_ms(IN u4Byte ms)
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ delay_ms(ms);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+ rtw_mdelay_os(ms);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ delay_ms(ms);
+#endif
+}
+
+VOID
+ODM_delay_us(IN u4Byte us)
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ delay_us(us);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+ rtw_udelay_os(us);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PlatformStallExecution(us);
+#endif
+}
+
+VOID
+ODM_sleep_ms(IN u4Byte ms)
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+ rtw_msleep_os(ms);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+#endif
+}
+
+VOID
+ODM_sleep_us(IN u4Byte us)
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+ rtw_usleep_os(us);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+#endif
+}
+
+VOID
+ODM_SetTimer(
+ IN PDM_ODM_T pDM_Odm,
+ IN PRT_TIMER pTimer,
+ IN u4Byte msDelay
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ mod_timer(pTimer, jiffies + (msDelay+9)/10);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+ _set_timer(pTimer,msDelay ); //ms
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ PlatformSetTimer(Adapter, pTimer, msDelay);
+#endif
+
+}
+
+VOID
+ODM_InitializeTimer(
+ IN PDM_ODM_T pDM_Odm,
+ IN PRT_TIMER pTimer,
+ IN RT_TIMER_CALL_BACK CallBackFunc,
+ IN PVOID pContext,
+ IN const char* szID
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ pTimer->function = CallBackFunc;
+ pTimer->data = (unsigned long)pDM_Odm;
+ init_timer(pTimer);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ _init_timer(pTimer,Adapter->pnetdev,CallBackFunc,pDM_Odm);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ PlatformInitializeTimer(Adapter, pTimer, CallBackFunc,pContext,szID);
+#endif
+}
+
+
+VOID
+ODM_CancelTimer(
+ IN PDM_ODM_T pDM_Odm,
+ IN PRT_TIMER pTimer
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+ del_timer_sync(pTimer);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+ _cancel_timer_ex(pTimer);
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ PADAPTER Adapter = pDM_Odm->Adapter;
+ PlatformCancelTimer(Adapter, pTimer);
+#endif
+}
+
+
+VOID
+ODM_ReleaseTimer(
+ IN PDM_ODM_T pDM_Odm,
+ IN PRT_TIMER pTimer
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+
+ PADAPTER Adapter = pDM_Odm->Adapter;
+
+ // <20120301, Kordan> If the initilization fails, InitializeAdapterXxx will return regardless of InitHalDm.
+ // Hence, uninitialized timers cause BSOD when the driver releases resources since the init fail.
+ if (pTimer == 0)
+ {
+ ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_SERIOUS, ("=====>ODM_ReleaseTimer(), The timer is NULL! Please check it!\n"));
+ return;
+ }
+
+ PlatformReleaseTimer(Adapter, pTimer);
+#endif
+}
+
+
+//
+// ODM FW relative API.
+//
+#if (DM_ODM_SUPPORT_TYPE & ODM_MP)
+VOID
+ODM_FillH2CCmd(
+ IN PADAPTER Adapter,
+ IN u1Byte ElementID,
+ IN u4Byte CmdLen,
+ IN pu1Byte pCmdBuffer
+)
+{
+ if(IS_HARDWARE_TYPE_JAGUAR(Adapter))
+ {
+ switch(ElementID)
+ {
+ case ODM_H2C_RSSI_REPORT:
+ FillH2CCmd8812(Adapter, H2C_8812_RSSI_REPORT, CmdLen, pCmdBuffer);
+ default:
+ break;
+ }
+
+ }
+ else if(IS_HARDWARE_TYPE_8188E(Adapter))
+ {
+ switch(ElementID)
+ {
+ case ODM_H2C_PSD_RESULT:
+ FillH2CCmd88E(Adapter, H2C_88E_PSD_RESULT, CmdLen, pCmdBuffer);
+ default:
+ break;
+ }
+ }
+ else
+ {
+ switch(ElementID)
+ {
+ case ODM_H2C_RSSI_REPORT:
+ FillH2CCmd92C(Adapter, H2C_RSSI_REPORT, CmdLen, pCmdBuffer);
+ case ODM_H2C_PSD_RESULT:
+ FillH2CCmd92C(Adapter, H2C_92C_PSD_RESULT, CmdLen, pCmdBuffer);
+ default:
+ break;
+ }
+ }
+}
+#else
+u4Byte
+ODM_FillH2CCmd(
+ IN pu1Byte pH2CBuffer,
+ IN u4Byte H2CBufferLen,
+ IN u4Byte CmdNum,
+ IN pu4Byte pElementID,
+ IN pu4Byte pCmdLen,
+ IN pu1Byte* pCmbBuffer,
+ IN pu1Byte CmdStartSeq
+ )
+{
+#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL))
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_CE)
+
+#elif(DM_ODM_SUPPORT_TYPE & ODM_MP)
+ //FillH2CCmd(pH2CBuffer, H2CBufferLen, CmdNum, pElementID, pCmdLen, pCmbBuffer, CmdStartSeq);
+ return FALSE;
+#endif
+
+ return TRUE;
+}
+#endif
+
+
+
+
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_interface.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_interface.h
index 73f61165bead..a5e8680100fb 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_interface.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_interface.h
@@ -1,374 +1,374 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-
-#ifndef __ODM_INTERFACE_H__
-#define __ODM_INTERFACE_H__
-
-
-
-//
-// =========== Constant/Structure/Enum/... Define
-//
-
-
-
-//
-// =========== Macro Define
-//
-
-#define _reg_all(_name) ODM_##_name
-#define _reg_ic(_name, _ic) ODM_##_name##_ic
-#define _bit_all(_name) BIT_##_name
-#define _bit_ic(_name, _ic) BIT_##_name##_ic
-
-// _cat: implemented by Token-Pasting Operator.
-#if 0
-#define _cat(_name, _ic_type, _func) \
- ( \
- _func##_all(_name) \
- )
-#endif
-
-/*===================================
-
-#define ODM_REG_DIG_11N 0xC50
-#define ODM_REG_DIG_11AC 0xDDD
-
-ODM_REG(DIG,_pDM_Odm)
-=====================================*/
-
-#define _reg_11N(_name) ODM_REG_##_name##_11N
-#define _reg_11AC(_name) ODM_REG_##_name##_11AC
-#define _bit_11N(_name) ODM_BIT_##_name##_11N
-#define _bit_11AC(_name) ODM_BIT_##_name##_11AC
-
-#if 1 //TODO: enable it if we need to support run-time to differentiate between 92C_SERIES and JAGUAR_SERIES.
-#define _cat(_name, _ic_type, _func) \
- ( \
- ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name): \
- _func##_11AC(_name) \
- )
-#endif
-#if 0 // only sample code
-#define _cat(_name, _ic_type, _func) \
- ( \
- ((_ic_type) & ODM_RTL8192C)? _func##_ic(_name, _8192C): \
- ((_ic_type) & ODM_RTL8192D)? _func##_ic(_name, _8192D): \
- ((_ic_type) & ODM_RTL8192S)? _func##_ic(_name, _8192S): \
- ((_ic_type) & ODM_RTL8723A)? _func##_ic(_name, _8723A): \
- ((_ic_type) & ODM_RTL8188E)? _func##_ic(_name, _8188E): \
- _func##_ic(_name, _8195) \
- )
-#endif
-
-// _name: name of register or bit.
-// Example: "ODM_REG(R_A_AGC_CORE1, pDM_Odm)"
-// gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on SupportICType.
-#define ODM_REG(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _reg)
-#define ODM_BIT(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _bit)
-
-typedef enum _ODM_H2C_CMD
-{
- ODM_H2C_RSSI_REPORT = 0,
- ODM_H2C_PSD_RESULT=1,
- ODM_H2C_PathDiv = 2,
- ODM_MAX_H2CCMD
-}ODM_H2C_CMD;
-
-
-//
-// 2012/02/17 MH For non-MP compile pass only. Linux does not support workitem.
-// Suggest HW team to use thread instead of workitem. Windows also support the feature.
-//
-#if (DM_ODM_SUPPORT_TYPE != ODM_MP)
-typedef void *PRT_WORK_ITEM ;
-typedef void RT_WORKITEM_HANDLE,*PRT_WORKITEM_HANDLE;
-typedef VOID (*RT_WORKITEM_CALL_BACK)(PVOID pContext);
-
-#if 0
-typedef struct tasklet_struct RT_WORKITEM_HANDLE, *PRT_WORKITEM_HANDLE;
-
-typedef struct _RT_WORK_ITEM
-{
-
- RT_WORKITEM_HANDLE Handle; // Platform-dependent handle for this workitem, e.g. Ndis Workitem object.
- PVOID Adapter; // Pointer to Adapter object.
- PVOID pContext; // Parameter to passed to CallBackFunc().
- RT_WORKITEM_CALL_BACK CallbackFunc; // Callback function of the workitem.
- u1Byte RefCount; // 0: driver is going to unload, 1: No such workitem scheduled, 2: one workitem is schedueled.
- PVOID pPlatformExt; // Pointer to platform-dependent extension.
- BOOLEAN bFree;
- char szID[36]; // An identity string of this workitem.
-}RT_WORK_ITEM, *PRT_WORK_ITEM;
-
-#endif
-
-
-#endif
-
-//
-// =========== Extern Variable ??? It should be forbidden.
-//
-
-
-//
-// =========== EXtern Function Prototype
-//
-
-
-u1Byte
-ODM_Read1Byte(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr
- );
-
-u2Byte
-ODM_Read2Byte(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr
- );
-
-u4Byte
-ODM_Read4Byte(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr
- );
-
-VOID
-ODM_Write1Byte(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr,
- IN u1Byte Data
- );
-
-VOID
-ODM_Write2Byte(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr,
- IN u2Byte Data
- );
-
-VOID
-ODM_Write4Byte(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr,
- IN u4Byte Data
- );
-
-VOID
-ODM_SetMACReg(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr,
- IN u4Byte BitMask,
- IN u4Byte Data
- );
-
-u4Byte
-ODM_GetMACReg(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr,
- IN u4Byte BitMask
- );
-
-VOID
-ODM_SetBBReg(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr,
- IN u4Byte BitMask,
- IN u4Byte Data
- );
-
-u4Byte
-ODM_GetBBReg(
- IN PDM_ODM_T pDM_Odm,
- IN u4Byte RegAddr,
- IN u4Byte BitMask
- );
-
-VOID
-ODM_SetRFReg(
- IN PDM_ODM_T pDM_Odm,
- IN ODM_RF_RADIO_PATH_E eRFPath,
- IN u4Byte RegAddr,
- IN u4Byte BitMask,
- IN u4Byte Data
- );
-
-u4Byte
-ODM_GetRFReg(
- IN PDM_ODM_T pDM_Odm,
- IN ODM_RF_RADIO_PATH_E eRFPath,
- IN u4Byte RegAddr,
- IN u4Byte BitMask
- );
-
-
-//
-// Memory Relative Function.
-//
-VOID
-ODM_AllocateMemory(
- IN PDM_ODM_T pDM_Odm,
- OUT PVOID *pPtr,
- IN u4Byte length
- );
-VOID
-ODM_FreeMemory(
- IN PDM_ODM_T pDM_Odm,
- OUT PVOID pPtr,
- IN u4Byte length
- );
-
-s4Byte ODM_CompareMemory(
- IN PDM_ODM_T pDM_Odm,
- IN PVOID pBuf1,
- IN PVOID pBuf2,
- IN u4Byte length
- );
-
-//
-// ODM MISC-spin lock relative API.
-//
-VOID
-ODM_AcquireSpinLock(
- IN PDM_ODM_T pDM_Odm,
- IN RT_SPINLOCK_TYPE type
- );
-
-VOID
-ODM_ReleaseSpinLock(
- IN PDM_ODM_T pDM_Odm,
- IN RT_SPINLOCK_TYPE type
- );
-
-
-//
-// ODM MISC-workitem relative API.
-//
-VOID
-ODM_InitializeWorkItem(
- IN PDM_ODM_T pDM_Odm,
- IN PRT_WORK_ITEM pRtWorkItem,
- IN RT_WORKITEM_CALL_BACK RtWorkItemCallback,
- IN PVOID pContext,
- IN const char* szID
- );
-
-VOID
-ODM_StartWorkItem(
- IN PRT_WORK_ITEM pRtWorkItem
- );
-
-VOID
-ODM_StopWorkItem(
- IN PRT_WORK_ITEM pRtWorkItem
- );
-
-VOID
-ODM_FreeWorkItem(
- IN PRT_WORK_ITEM pRtWorkItem
- );
-
-VOID
-ODM_ScheduleWorkItem(
- IN PRT_WORK_ITEM pRtWorkItem
- );
-
-VOID
-ODM_IsWorkItemScheduled(
- IN PRT_WORK_ITEM pRtWorkItem
- );
-
-//
-// ODM Timer relative API.
-//
-VOID
-ODM_StallExecution(
- IN u4Byte usDelay
- );
-
-VOID
-ODM_delay_ms(IN u4Byte ms);
-
-
-VOID
-ODM_delay_us(IN u4Byte us);
-
-VOID
-ODM_sleep_ms(IN u4Byte ms);
-
-VOID
-ODM_sleep_us(IN u4Byte us);
-
-VOID
-ODM_SetTimer(
- IN PDM_ODM_T pDM_Odm,
- IN PRT_TIMER pTimer,
- IN u4Byte msDelay
- );
-
-VOID
-ODM_InitializeTimer(
- IN PDM_ODM_T pDM_Odm,
- IN PRT_TIMER pTimer,
- IN RT_TIMER_CALL_BACK CallBackFunc,
- IN PVOID pContext,
- IN const char* szID
- );
-
-VOID
-ODM_CancelTimer(
- IN PDM_ODM_T pDM_Odm,
- IN PRT_TIMER pTimer
- );
-
-VOID
-ODM_ReleaseTimer(
- IN PDM_ODM_T pDM_Odm,
- IN PRT_TIMER pTimer
- );
-
-
-//
-// ODM FW relative API.
-//
-#if (DM_ODM_SUPPORT_TYPE & ODM_MP)
-VOID
-ODM_FillH2CCmd(
- IN PADAPTER Adapter,
- IN u1Byte ElementID,
- IN u4Byte CmdLen,
- IN pu1Byte pCmdBuffer
-);
-#else
-u4Byte
-ODM_FillH2CCmd(
- IN pu1Byte pH2CBuffer,
- IN u4Byte H2CBufferLen,
- IN u4Byte CmdNum,
- IN pu4Byte pElementID,
- IN pu4Byte pCmdLen,
- IN pu1Byte* pCmbBuffer,
- IN pu1Byte CmdStartSeq
- );
-#endif
-#endif // __ODM_INTERFACE_H__
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+
+#ifndef __ODM_INTERFACE_H__
+#define __ODM_INTERFACE_H__
+
+
+
+//
+// =========== Constant/Structure/Enum/... Define
+//
+
+
+
+//
+// =========== Macro Define
+//
+
+#define _reg_all(_name) ODM_##_name
+#define _reg_ic(_name, _ic) ODM_##_name##_ic
+#define _bit_all(_name) BIT_##_name
+#define _bit_ic(_name, _ic) BIT_##_name##_ic
+
+// _cat: implemented by Token-Pasting Operator.
+#if 0
+#define _cat(_name, _ic_type, _func) \
+ ( \
+ _func##_all(_name) \
+ )
+#endif
+
+/*===================================
+
+#define ODM_REG_DIG_11N 0xC50
+#define ODM_REG_DIG_11AC 0xDDD
+
+ODM_REG(DIG,_pDM_Odm)
+=====================================*/
+
+#define _reg_11N(_name) ODM_REG_##_name##_11N
+#define _reg_11AC(_name) ODM_REG_##_name##_11AC
+#define _bit_11N(_name) ODM_BIT_##_name##_11N
+#define _bit_11AC(_name) ODM_BIT_##_name##_11AC
+
+#if 1 //TODO: enable it if we need to support run-time to differentiate between 92C_SERIES and JAGUAR_SERIES.
+#define _cat(_name, _ic_type, _func) \
+ ( \
+ ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name): \
+ _func##_11AC(_name) \
+ )
+#endif
+#if 0 // only sample code
+#define _cat(_name, _ic_type, _func) \
+ ( \
+ ((_ic_type) & ODM_RTL8192C)? _func##_ic(_name, _8192C): \
+ ((_ic_type) & ODM_RTL8192D)? _func##_ic(_name, _8192D): \
+ ((_ic_type) & ODM_RTL8192S)? _func##_ic(_name, _8192S): \
+ ((_ic_type) & ODM_RTL8723A)? _func##_ic(_name, _8723A): \
+ ((_ic_type) & ODM_RTL8188E)? _func##_ic(_name, _8188E): \
+ _func##_ic(_name, _8195) \
+ )
+#endif
+
+// _name: name of register or bit.
+// Example: "ODM_REG(R_A_AGC_CORE1, pDM_Odm)"
+// gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on SupportICType.
+#define ODM_REG(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _reg)
+#define ODM_BIT(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _bit)
+
+typedef enum _ODM_H2C_CMD
+{
+ ODM_H2C_RSSI_REPORT = 0,
+ ODM_H2C_PSD_RESULT=1,
+ ODM_H2C_PathDiv = 2,
+ ODM_MAX_H2CCMD
+}ODM_H2C_CMD;
+
+
+//
+// 2012/02/17 MH For non-MP compile pass only. Linux does not support workitem.
+// Suggest HW team to use thread instead of workitem. Windows also support the feature.
+//
+#if (DM_ODM_SUPPORT_TYPE != ODM_MP)
+typedef void *PRT_WORK_ITEM ;
+typedef void RT_WORKITEM_HANDLE,*PRT_WORKITEM_HANDLE;
+typedef VOID (*RT_WORKITEM_CALL_BACK)(PVOID pContext);
+
+#if 0
+typedef struct tasklet_struct RT_WORKITEM_HANDLE, *PRT_WORKITEM_HANDLE;
+
+typedef struct _RT_WORK_ITEM
+{
+
+ RT_WORKITEM_HANDLE Handle; // Platform-dependent handle for this workitem, e.g. Ndis Workitem object.
+ PVOID Adapter; // Pointer to Adapter object.
+ PVOID pContext; // Parameter to passed to CallBackFunc().
+ RT_WORKITEM_CALL_BACK CallbackFunc; // Callback function of the workitem.
+ u1Byte RefCount; // 0: driver is going to unload, 1: No such workitem scheduled, 2: one workitem is schedueled.
+ PVOID pPlatformExt; // Pointer to platform-dependent extension.
+ BOOLEAN bFree;
+ char szID[36]; // An identity string of this workitem.
+}RT_WORK_ITEM, *PRT_WORK_ITEM;
+
+#endif
+
+
+#endif
+
+//
+// =========== Extern Variable ??? It should be forbidden.
+//
+
+
+//
+// =========== EXtern Function Prototype
+//
+
+
+u1Byte
+ODM_Read1Byte(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr
+ );
+
+u2Byte
+ODM_Read2Byte(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr
+ );
+
+u4Byte
+ODM_Read4Byte(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr
+ );
+
+VOID
+ODM_Write1Byte(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr,
+ IN u1Byte Data
+ );
+
+VOID
+ODM_Write2Byte(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr,
+ IN u2Byte Data
+ );
+
+VOID
+ODM_Write4Byte(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr,
+ IN u4Byte Data
+ );
+
+VOID
+ODM_SetMACReg(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr,
+ IN u4Byte BitMask,
+ IN u4Byte Data
+ );
+
+u4Byte
+ODM_GetMACReg(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr,
+ IN u4Byte BitMask
+ );
+
+VOID
+ODM_SetBBReg(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr,
+ IN u4Byte BitMask,
+ IN u4Byte Data
+ );
+
+u4Byte
+ODM_GetBBReg(
+ IN PDM_ODM_T pDM_Odm,
+ IN u4Byte RegAddr,
+ IN u4Byte BitMask
+ );
+
+VOID
+ODM_SetRFReg(
+ IN PDM_ODM_T pDM_Odm,
+ IN ODM_RF_RADIO_PATH_E eRFPath,
+ IN u4Byte RegAddr,
+ IN u4Byte BitMask,
+ IN u4Byte Data
+ );
+
+u4Byte
+ODM_GetRFReg(
+ IN PDM_ODM_T pDM_Odm,
+ IN ODM_RF_RADIO_PATH_E eRFPath,
+ IN u4Byte RegAddr,
+ IN u4Byte BitMask
+ );
+
+
+//
+// Memory Relative Function.
+//
+VOID
+ODM_AllocateMemory(
+ IN PDM_ODM_T pDM_Odm,
+ OUT PVOID *pPtr,
+ IN u4Byte length
+ );
+VOID
+ODM_FreeMemory(
+ IN PDM_ODM_T pDM_Odm,
+ OUT PVOID pPtr,
+ IN u4Byte length
+ );
+
+s4Byte ODM_CompareMemory(
+ IN PDM_ODM_T pDM_Odm,
+ IN PVOID pBuf1,
+ IN PVOID pBuf2,
+ IN u4Byte length
+ );
+
+//
+// ODM MISC-spin lock relative API.
+//
+VOID
+ODM_AcquireSpinLock(
+ IN PDM_ODM_T pDM_Odm,
+ IN RT_SPINLOCK_TYPE type
+ );
+
+VOID
+ODM_ReleaseSpinLock(
+ IN PDM_ODM_T pDM_Odm,
+ IN RT_SPINLOCK_TYPE type
+ );
+
+
+//
+// ODM MISC-workitem relative API.
+//
+VOID
+ODM_InitializeWorkItem(
+ IN PDM_ODM_T pDM_Odm,
+ IN PRT_WORK_ITEM pRtWorkItem,
+ IN RT_WORKITEM_CALL_BACK RtWorkItemCallback,
+ IN PVOID pContext,
+ IN const char* szID
+ );
+
+VOID
+ODM_StartWorkItem(
+ IN PRT_WORK_ITEM pRtWorkItem
+ );
+
+VOID
+ODM_StopWorkItem(
+ IN PRT_WORK_ITEM pRtWorkItem
+ );
+
+VOID
+ODM_FreeWorkItem(
+ IN PRT_WORK_ITEM pRtWorkItem
+ );
+
+VOID
+ODM_ScheduleWorkItem(
+ IN PRT_WORK_ITEM pRtWorkItem
+ );
+
+VOID
+ODM_IsWorkItemScheduled(
+ IN PRT_WORK_ITEM pRtWorkItem
+ );
+
+//
+// ODM Timer relative API.
+//
+VOID
+ODM_StallExecution(
+ IN u4Byte usDelay
+ );
+
+VOID
+ODM_delay_ms(IN u4Byte ms);
+
+
+VOID
+ODM_delay_us(IN u4Byte us);
+
+VOID
+ODM_sleep_ms(IN u4Byte ms);
+
+VOID
+ODM_sleep_us(IN u4Byte us);
+
+VOID
+ODM_SetTimer(
+ IN PDM_ODM_T pDM_Odm,
+ IN PRT_TIMER pTimer,
+ IN u4Byte msDelay
+ );
+
+VOID
+ODM_InitializeTimer(
+ IN PDM_ODM_T pDM_Odm,
+ IN PRT_TIMER pTimer,
+ IN RT_TIMER_CALL_BACK CallBackFunc,
+ IN PVOID pContext,
+ IN const char* szID
+ );
+
+VOID
+ODM_CancelTimer(
+ IN PDM_ODM_T pDM_Odm,
+ IN PRT_TIMER pTimer
+ );
+
+VOID
+ODM_ReleaseTimer(
+ IN PDM_ODM_T pDM_Odm,
+ IN PRT_TIMER pTimer
+ );
+
+
+//
+// ODM FW relative API.
+//
+#if (DM_ODM_SUPPORT_TYPE & ODM_MP)
+VOID
+ODM_FillH2CCmd(
+ IN PADAPTER Adapter,
+ IN u1Byte ElementID,
+ IN u4Byte CmdLen,
+ IN pu1Byte pCmdBuffer
+);
+#else
+u4Byte
+ODM_FillH2CCmd(
+ IN pu1Byte pH2CBuffer,
+ IN u4Byte H2CBufferLen,
+ IN u4Byte CmdNum,
+ IN pu4Byte pElementID,
+ IN pu4Byte pCmdLen,
+ IN pu1Byte* pCmbBuffer,
+ IN pu1Byte CmdStartSeq
+ );
+#endif
+#endif // __ODM_INTERFACE_H__
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_precomp.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_precomp.h
index eb4f74361237..f40a12779e52 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_precomp.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_precomp.h
@@ -1,222 +1,222 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-#ifndef __ODM_PRECOMP_H__
-#define __ODM_PRECOMP_H__
-
-#include "odm_types.h"
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
-#include "Precomp.h" // We need to include mp_precomp.h due to batch file setting.
-
-#else
-
-#define TEST_FALG___ 1
-
-#endif
-
-//2 Config Flags and Structs - defined by each ODM Type
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
- #include "../8192cd_cfg.h"
- #include "../odm_inc.h"
-
- #include "../8192cd.h"
- #include "../8192cd_util.h"
- #ifdef _BIG_ENDIAN_
- #define ODM_ENDIAN_TYPE ODM_ENDIAN_BIG
- #else
- #define ODM_ENDIAN_TYPE ODM_ENDIAN_LITTLE
- #endif
-
- #ifdef AP_BUILD_WORKAROUND
- #include "../8192cd_headers.h"
- #include "../8192cd_debug.h"
- #endif
-
-#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL)
- // Flags
- #include "../8192cd_cfg.h" // OUTSRC needs ADSL config flags.
- #include "../odm_inc.h" // OUTSRC needs some extra flags.
- // Data Structure
- #include "../common_types.h" // OUTSRC and rtl8192cd both needs basic type such as UINT8 and BIT0.
- #include "../8192cd.h" // OUTSRC needs basic ADSL struct definition.
- #include "../8192cd_util.h" // OUTSRC needs basic I/O function.
- #ifdef _BIG_ENDIAN_
- #define ODM_ENDIAN_TYPE ODM_ENDIAN_BIG
- #else
- #define ODM_ENDIAN_TYPE ODM_ENDIAN_LITTLE
- #endif
-
- #ifdef ADSL_AP_BUILD_WORKAROUND
- // NESTED_INC: Functions defined outside should not be included!! Marked by Annie, 2011-10-14.
- #include "../8192cd_headers.h"
- #include "../8192cd_debug.h"
- #endif
-
-#elif (DM_ODM_SUPPORT_TYPE ==ODM_CE)
- #include <drv_conf.h>
- #include <osdep_service.h>
- #include <drv_types.h>
- #include <rtw_byteorder.h>
- #include <hal_intf.h>
-
-#elif (DM_ODM_SUPPORT_TYPE == ODM_MP)
- #include "Mp_Precomp.h"
- #define ODM_ENDIAN_TYPE ODM_ENDIAN_LITTLE
-#endif
-
-
-//2 Hardware Parameter Files
-
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
-#if (RTL8192C_SUPPORT==1)
- #include "rtl8192c/Hal8192CEFWImg_AP.h"
- #include "rtl8192c/Hal8192CEPHYImg_AP.h"
- #include "rtl8192c/Hal8192CEMACImg_AP.h"
-#endif
-#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL)
- #include "rtl8192c/Hal8192CEFWImg_ADSL.h"
- #include "rtl8192c/Hal8192CEPHYImg_ADSL.h"
- #include "rtl8192c/Hal8192CEMACImg_ADSL.h"
-
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
- #if(RTL8192CE_SUPPORT ==1)
- #include "rtl8192c/Hal8192CEFWImg_CE.h"
- #include "rtl8192c/Hal8192CEPHYImg_CE.h"
- #include "rtl8192c/Hal8192CEMACImg_CE.h"
- #elif(RTL8192CU_SUPPORT ==1)
- #include "rtl8192c/Hal8192CUFWImg_CE.h"
- #include "rtl8192c/Hal8192CUPHYImg_CE.h"
- #include "rtl8192c/Hal8192CUMACImg_CE.h"
- #elif(RTL8192DE_SUPPORT ==1)
- #include "rtl8192d/Hal8192DEFWImg_CE.h"
- #include "rtl8192d/Hal8192DEPHYImg_CE.h"
- #include "rtl8192d/Hal8192DEMACImg_CE.h"
- #elif(RTL8192DU_SUPPORT ==1)
- #include "rtl8192d/Hal8192DUFWImg_CE.h"
- #include "rtl8192d/Hal8192DUPHYImg_CE.h"
- #include "rtl8192d/Hal8192DUMACImg_CE.h"
- #elif(RTL8723AS_SUPPORT==1)
- #include "rtl8723a/Hal8723SHWImg_CE.h"
- #elif(RTL8723AU_SUPPORT==1)
- #include "rtl8723a/Hal8723UHWImg_CE.h"
- #elif(RTL8188E_SUPPORT==1)
- #include "rtl8188e/Hal8188EFWImg_CE.h"
- #endif
-#elif (DM_ODM_SUPPORT_TYPE == ODM_MP)
-
-#endif
-
-
-//2 OutSrc Header Files
-
-#include "odm.h"
-#include "odm_HWConfig.h"
-#include "odm_debug.h"
-#include "odm_RegDefine11AC.h"
-#include "odm_RegDefine11N.h"
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
-#if (RTL8192C_SUPPORT==1)
- #include "rtl8192c/HalDMOutSrc8192C_AP.h"
-#endif
-#if (RTL8188E_SUPPORT==1)
- #include "rtl8188e/Hal8188ERateAdaptive.h"//for RA,Power training
-#endif
-
-#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL)
- #include "rtl8192c/HalDMOutSrc8192C_ADSL.h"
-
-#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
- #include "HalPhyRf.h"
- #if (RTL8192C_SUPPORT==1)
- #ifdef CONFIG_INTEL_PROXIM
- #include "../proxim/intel_proxim.h"
- #endif
- #include "rtl8192c/HalDMOutSrc8192C_CE.h"
- #include <rtl8192c_hal.h>
- #elif (RTL8192D_SUPPORT==1)
- #include "rtl8192d/HalDMOutSrc8192D_CE.h"
- #include "rtl8192d_hal.h"
- #elif (RTL8723A_SUPPORT==1)
- #include "rtl8192c/HalDMOutSrc8192C_CE.h" //for IQK,LCK,Power-tracking
- #include "rtl8723a_hal.h"
- #elif (RTL8188E_SUPPORT==1)
- #include "rtl8188e/HalPhyRf_8188e.h"//for IQK,LCK,Power-tracking
- #include "rtl8188e/Hal8188ERateAdaptive.h"//for RA,Power training
- #include "rtl8188e_hal.h"
- #endif
-
-#endif
-
-#include "odm_interface.h"
-#include "odm_reg.h"
-
-#if (RTL8192C_SUPPORT==1)
-#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
-#include "rtl8192c/Hal8192CHWImg_MAC.h"
-#include "rtl8192c/Hal8192CHWImg_RF.h"
-#include "rtl8192c/Hal8192CHWImg_BB.h"
-#include "rtl8192c/Hal8192CHWImg_FW.h"
-#endif
-#include "rtl8192c/odm_RTL8192C.h"
-#endif
-#if (RTL8192D_SUPPORT==1)
-#include "rtl8192d/odm_RTL8192D.h"
-#endif
-
-#if (RTL8723A_SUPPORT==1)
-#include "rtl8723a/HalHWImg8723A_MAC.h"
-#include "rtl8723a/HalHWImg8723A_RF.h"
-#include "rtl8723a/HalHWImg8723A_BB.h"
-#include "rtl8723a/HalHWImg8723A_FW.h"
-#include "rtl8723a/odm_RegConfig8723A.h"
-#endif
-
-#if (RTL8188E_SUPPORT==1)
-#include "rtl8188e/HalHWImg8188E_MAC.h"
-#include "rtl8188e/HalHWImg8188E_RF.h"
-#include "rtl8188e/HalHWImg8188E_BB.h"
-#include "rtl8188e/Hal8188EReg.h"
-
-#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
-#include "rtl8188e/HalPhyRf_8188e.h"
-#endif
-
-#if (RTL8188E_FOR_TEST_CHIP >= 1)
-#include "rtl8188e/HalHWImg8188E_TestChip_MAC.h"
-#include "rtl8188e/HalHWImg8188E_TestChip_RF.h"
-#include "rtl8188e/HalHWImg8188E_TestChip_BB.h"
-#endif
-
-#ifdef CONFIG_WOWLAN
-#if (RTL8188E_SUPPORT==1)
-#include "rtl8188e/HalHWImg8188E_FW.h"
-#endif
-#endif //CONFIG_WOWLAN
-
-#include "rtl8188e/odm_RegConfig8188E.h"
-#include "rtl8188e/odm_RTL8188E.h"
-#endif
-
-#endif // __ODM_PRECOMP_H__
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+#ifndef __ODM_PRECOMP_H__
+#define __ODM_PRECOMP_H__
+
+#include "odm_types.h"
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+#include "Precomp.h" // We need to include mp_precomp.h due to batch file setting.
+
+#else
+
+#define TEST_FALG___ 1
+
+#endif
+
+//2 Config Flags and Structs - defined by each ODM Type
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+ #include "../8192cd_cfg.h"
+ #include "../odm_inc.h"
+
+ #include "../8192cd.h"
+ #include "../8192cd_util.h"
+ #ifdef _BIG_ENDIAN_
+ #define ODM_ENDIAN_TYPE ODM_ENDIAN_BIG
+ #else
+ #define ODM_ENDIAN_TYPE ODM_ENDIAN_LITTLE
+ #endif
+
+ #ifdef AP_BUILD_WORKAROUND
+ #include "../8192cd_headers.h"
+ #include "../8192cd_debug.h"
+ #endif
+
+#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL)
+ // Flags
+ #include "../8192cd_cfg.h" // OUTSRC needs ADSL config flags.
+ #include "../odm_inc.h" // OUTSRC needs some extra flags.
+ // Data Structure
+ #include "../common_types.h" // OUTSRC and rtl8192cd both needs basic type such as UINT8 and BIT0.
+ #include "../8192cd.h" // OUTSRC needs basic ADSL struct definition.
+ #include "../8192cd_util.h" // OUTSRC needs basic I/O function.
+ #ifdef _BIG_ENDIAN_
+ #define ODM_ENDIAN_TYPE ODM_ENDIAN_BIG
+ #else
+ #define ODM_ENDIAN_TYPE ODM_ENDIAN_LITTLE
+ #endif
+
+ #ifdef ADSL_AP_BUILD_WORKAROUND
+ // NESTED_INC: Functions defined outside should not be included!! Marked by Annie, 2011-10-14.
+ #include "../8192cd_headers.h"
+ #include "../8192cd_debug.h"
+ #endif
+
+#elif (DM_ODM_SUPPORT_TYPE ==ODM_CE)
+ #include <drv_conf.h>
+ #include <osdep_service.h>
+ #include <drv_types.h>
+ #include <rtw_byteorder.h>
+ #include <hal_intf.h>
+
+#elif (DM_ODM_SUPPORT_TYPE == ODM_MP)
+ #include "Mp_Precomp.h"
+ #define ODM_ENDIAN_TYPE ODM_ENDIAN_LITTLE
+#endif
+
+
+//2 Hardware Parameter Files
+
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+#if (RTL8192C_SUPPORT==1)
+ #include "rtl8192c/Hal8192CEFWImg_AP.h"
+ #include "rtl8192c/Hal8192CEPHYImg_AP.h"
+ #include "rtl8192c/Hal8192CEMACImg_AP.h"
+#endif
+#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL)
+ #include "rtl8192c/Hal8192CEFWImg_ADSL.h"
+ #include "rtl8192c/Hal8192CEPHYImg_ADSL.h"
+ #include "rtl8192c/Hal8192CEMACImg_ADSL.h"
+
+#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
+ #if(RTL8192CE_SUPPORT ==1)
+ #include "rtl8192c/Hal8192CEFWImg_CE.h"
+ #include "rtl8192c/Hal8192CEPHYImg_CE.h"
+ #include "rtl8192c/Hal8192CEMACImg_CE.h"
+ #elif(RTL8192CU_SUPPORT ==1)
+ #include "rtl8192c/Hal8192CUFWImg_CE.h"
+ #include "rtl8192c/Hal8192CUPHYImg_CE.h"
+ #include "rtl8192c/Hal8192CUMACImg_CE.h"
+ #elif(RTL8192DE_SUPPORT ==1)
+ #include "rtl8192d/Hal8192DEFWImg_CE.h"
+ #include "rtl8192d/Hal8192DEPHYImg_CE.h"
+ #include "rtl8192d/Hal8192DEMACImg_CE.h"
+ #elif(RTL8192DU_SUPPORT ==1)
+ #include "rtl8192d/Hal8192DUFWImg_CE.h"
+ #include "rtl8192d/Hal8192DUPHYImg_CE.h"
+ #include "rtl8192d/Hal8192DUMACImg_CE.h"
+ #elif(RTL8723AS_SUPPORT==1)
+ #include "rtl8723a/Hal8723SHWImg_CE.h"
+ #elif(RTL8723AU_SUPPORT==1)
+ #include "rtl8723a/Hal8723UHWImg_CE.h"
+ #elif(RTL8188E_SUPPORT==1)
+ #include "rtl8188e/Hal8188EFWImg_CE.h"
+ #endif
+#elif (DM_ODM_SUPPORT_TYPE == ODM_MP)
+
+#endif
+
+
+//2 OutSrc Header Files
+
+#include "odm.h"
+#include "odm_HWConfig.h"
+#include "odm_debug.h"
+#include "odm_RegDefine11AC.h"
+#include "odm_RegDefine11N.h"
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+#if (RTL8192C_SUPPORT==1)
+ #include "rtl8192c/HalDMOutSrc8192C_AP.h"
+#endif
+#if (RTL8188E_SUPPORT==1)
+ #include "rtl8188e/Hal8188ERateAdaptive.h"//for RA,Power training
+#endif
+
+#elif (DM_ODM_SUPPORT_TYPE == ODM_ADSL)
+ #include "rtl8192c/HalDMOutSrc8192C_ADSL.h"
+
+#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)
+ #include "HalPhyRf.h"
+ #if (RTL8192C_SUPPORT==1)
+ #ifdef CONFIG_INTEL_PROXIM
+ #include "../proxim/intel_proxim.h"
+ #endif
+ #include "rtl8192c/HalDMOutSrc8192C_CE.h"
+ #include <rtl8192c_hal.h>
+ #elif (RTL8192D_SUPPORT==1)
+ #include "rtl8192d/HalDMOutSrc8192D_CE.h"
+ #include "rtl8192d_hal.h"
+ #elif (RTL8723A_SUPPORT==1)
+ #include "rtl8192c/HalDMOutSrc8192C_CE.h" //for IQK,LCK,Power-tracking
+ #include "rtl8723a_hal.h"
+ #elif (RTL8188E_SUPPORT==1)
+ #include "rtl8188e/HalPhyRf_8188e.h"//for IQK,LCK,Power-tracking
+ #include "rtl8188e/Hal8188ERateAdaptive.h"//for RA,Power training
+ #include "rtl8188e_hal.h"
+ #endif
+
+#endif
+
+#include "odm_interface.h"
+#include "odm_reg.h"
+
+#if (RTL8192C_SUPPORT==1)
+#if (DM_ODM_SUPPORT_TYPE == ODM_AP)
+#include "rtl8192c/Hal8192CHWImg_MAC.h"
+#include "rtl8192c/Hal8192CHWImg_RF.h"
+#include "rtl8192c/Hal8192CHWImg_BB.h"
+#include "rtl8192c/Hal8192CHWImg_FW.h"
+#endif
+#include "rtl8192c/odm_RTL8192C.h"
+#endif
+#if (RTL8192D_SUPPORT==1)
+#include "rtl8192d/odm_RTL8192D.h"
+#endif
+
+#if (RTL8723A_SUPPORT==1)
+#include "rtl8723a/HalHWImg8723A_MAC.h"
+#include "rtl8723a/HalHWImg8723A_RF.h"
+#include "rtl8723a/HalHWImg8723A_BB.h"
+#include "rtl8723a/HalHWImg8723A_FW.h"
+#include "rtl8723a/odm_RegConfig8723A.h"
+#endif
+
+#if (RTL8188E_SUPPORT==1)
+#include "rtl8188e/HalHWImg8188E_MAC.h"
+#include "rtl8188e/HalHWImg8188E_RF.h"
+#include "rtl8188e/HalHWImg8188E_BB.h"
+#include "rtl8188e/Hal8188EReg.h"
+
+#if (DM_ODM_SUPPORT_TYPE & ODM_AP)
+#include "rtl8188e/HalPhyRf_8188e.h"
+#endif
+
+#if (RTL8188E_FOR_TEST_CHIP >= 1)
+#include "rtl8188e/HalHWImg8188E_TestChip_MAC.h"
+#include "rtl8188e/HalHWImg8188E_TestChip_RF.h"
+#include "rtl8188e/HalHWImg8188E_TestChip_BB.h"
+#endif
+
+#ifdef CONFIG_WOWLAN
+#if (RTL8188E_SUPPORT==1)
+#include "rtl8188e/HalHWImg8188E_FW.h"
+#endif
+#endif //CONFIG_WOWLAN
+
+#include "rtl8188e/odm_RegConfig8188E.h"
+#include "rtl8188e/odm_RTL8188E.h"
+#endif
+
+#endif // __ODM_PRECOMP_H__
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_reg.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_reg.h
index 41baf166de22..361ac79c6c39 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_reg.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/odm_reg.h
@@ -1,120 +1,120 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-//============================================================
-// File Name: odm_reg.h
-//
-// Description:
-//
-// This file is for general register definition.
-//
-//
-//============================================================
-#ifndef __HAL_ODM_REG_H__
-#define __HAL_ODM_REG_H__
-
-//
-// Register Definition
-//
-
-//MAC REG
-#define ODM_BB_RESET 0x002
-#define ODM_DUMMY 0x4fe
-#define ODM_EDCA_VO_PARAM 0x500
-#define ODM_EDCA_VI_PARAM 0x504
-#define ODM_EDCA_BE_PARAM 0x508
-#define ODM_EDCA_BK_PARAM 0x50C
-#define ODM_TXPAUSE 0x522
-
-//BB REG
-#define ODM_FPGA_PHY0_PAGE8 0x800
-#define ODM_PSD_SETTING 0x808
-#define ODM_AFE_SETTING 0x818
-#define ODM_TXAGC_B_6_18 0x830
-#define ODM_TXAGC_B_24_54 0x834
-#define ODM_TXAGC_B_MCS32_5 0x838
-#define ODM_TXAGC_B_MCS0_MCS3 0x83c
-#define ODM_TXAGC_B_MCS4_MCS7 0x848
-#define ODM_TXAGC_B_MCS8_MCS11 0x84c
-#define ODM_ANALOG_REGISTER 0x85c
-#define ODM_RF_INTERFACE_OUTPUT 0x860
-#define ODM_TXAGC_B_MCS12_MCS15 0x868
-#define ODM_TXAGC_B_11_A_2_11 0x86c
-#define ODM_AD_DA_LSB_MASK 0x874
-#define ODM_ENABLE_3_WIRE 0x88c
-#define ODM_PSD_REPORT 0x8b4
-#define ODM_R_ANT_SELECT 0x90c
-#define ODM_CCK_ANT_SELECT 0xa07
-#define ODM_CCK_PD_THRESH 0xa0a
-#define ODM_CCK_RF_REG1 0xa11
-#define ODM_CCK_MATCH_FILTER 0xa20
-#define ODM_CCK_RAKE_MAC 0xa2e
-#define ODM_CCK_CNT_RESET 0xa2d
-#define ODM_CCK_TX_DIVERSITY 0xa2f
-#define ODM_CCK_FA_CNT_MSB 0xa5b
-#define ODM_CCK_FA_CNT_LSB 0xa5c
-#define ODM_CCK_NEW_FUNCTION 0xa75
-#define ODM_OFDM_PHY0_PAGE_C 0xc00
-#define ODM_OFDM_RX_ANT 0xc04
-#define ODM_R_A_RXIQI 0xc14
-#define ODM_R_A_AGC_CORE1 0xc50
-#define ODM_R_A_AGC_CORE2 0xc54
-#define ODM_R_B_AGC_CORE1 0xc58
-#define ODM_R_AGC_PAR 0xc70
-#define ODM_R_HTSTF_AGC_PAR 0xc7c
-#define ODM_TX_PWR_TRAINING_A 0xc90
-#define ODM_TX_PWR_TRAINING_B 0xc98
-#define ODM_OFDM_FA_CNT1 0xcf0
-#define ODM_OFDM_PHY0_PAGE_D 0xd00
-#define ODM_OFDM_FA_CNT2 0xda0
-#define ODM_OFDM_FA_CNT3 0xda4
-#define ODM_OFDM_FA_CNT4 0xda8
-#define ODM_TXAGC_A_6_18 0xe00
-#define ODM_TXAGC_A_24_54 0xe04
-#define ODM_TXAGC_A_1_MCS32 0xe08
-#define ODM_TXAGC_A_MCS0_MCS3 0xe10
-#define ODM_TXAGC_A_MCS4_MCS7 0xe14
-#define ODM_TXAGC_A_MCS8_MCS11 0xe18
-#define ODM_TXAGC_A_MCS12_MCS15 0xe1c
-
-//RF REG
-#define ODM_GAIN_SETTING 0x00
-#define ODM_CHANNEL 0x18
-
-//Ant Detect Reg
-#define ODM_DPDT 0x300
-
-//PSD Init
-#define ODM_PSDREG 0x808
-
-//92D Path Div
-#define PATHDIV_REG 0xB30
-#define PATHDIV_TRI 0xBA0
-
-
-//
-// Bitmap Definition
-//
-
-#define BIT_FA_RESET BIT0
-
-
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+//============================================================
+// File Name: odm_reg.h
+//
+// Description:
+//
+// This file is for general register definition.
+//
+//
+//============================================================
+#ifndef __HAL_ODM_REG_H__
+#define __HAL_ODM_REG_H__
+
+//
+// Register Definition
+//
+
+//MAC REG
+#define ODM_BB_RESET 0x002
+#define ODM_DUMMY 0x4fe
+#define ODM_EDCA_VO_PARAM 0x500
+#define ODM_EDCA_VI_PARAM 0x504
+#define ODM_EDCA_BE_PARAM 0x508
+#define ODM_EDCA_BK_PARAM 0x50C
+#define ODM_TXPAUSE 0x522
+
+//BB REG
+#define ODM_FPGA_PHY0_PAGE8 0x800
+#define ODM_PSD_SETTING 0x808
+#define ODM_AFE_SETTING 0x818
+#define ODM_TXAGC_B_6_18 0x830
+#define ODM_TXAGC_B_24_54 0x834
+#define ODM_TXAGC_B_MCS32_5 0x838
+#define ODM_TXAGC_B_MCS0_MCS3 0x83c
+#define ODM_TXAGC_B_MCS4_MCS7 0x848
+#define ODM_TXAGC_B_MCS8_MCS11 0x84c
+#define ODM_ANALOG_REGISTER 0x85c
+#define ODM_RF_INTERFACE_OUTPUT 0x860
+#define ODM_TXAGC_B_MCS12_MCS15 0x868
+#define ODM_TXAGC_B_11_A_2_11 0x86c
+#define ODM_AD_DA_LSB_MASK 0x874
+#define ODM_ENABLE_3_WIRE 0x88c
+#define ODM_PSD_REPORT 0x8b4
+#define ODM_R_ANT_SELECT 0x90c
+#define ODM_CCK_ANT_SELECT 0xa07
+#define ODM_CCK_PD_THRESH 0xa0a
+#define ODM_CCK_RF_REG1 0xa11
+#define ODM_CCK_MATCH_FILTER 0xa20
+#define ODM_CCK_RAKE_MAC 0xa2e
+#define ODM_CCK_CNT_RESET 0xa2d
+#define ODM_CCK_TX_DIVERSITY 0xa2f
+#define ODM_CCK_FA_CNT_MSB 0xa5b
+#define ODM_CCK_FA_CNT_LSB 0xa5c
+#define ODM_CCK_NEW_FUNCTION 0xa75
+#define ODM_OFDM_PHY0_PAGE_C 0xc00
+#define ODM_OFDM_RX_ANT 0xc04
+#define ODM_R_A_RXIQI 0xc14
+#define ODM_R_A_AGC_CORE1 0xc50
+#define ODM_R_A_AGC_CORE2 0xc54
+#define ODM_R_B_AGC_CORE1 0xc58
+#define ODM_R_AGC_PAR 0xc70
+#define ODM_R_HTSTF_AGC_PAR 0xc7c
+#define ODM_TX_PWR_TRAINING_A 0xc90
+#define ODM_TX_PWR_TRAINING_B 0xc98
+#define ODM_OFDM_FA_CNT1 0xcf0
+#define ODM_OFDM_PHY0_PAGE_D 0xd00
+#define ODM_OFDM_FA_CNT2 0xda0
+#define ODM_OFDM_FA_CNT3 0xda4
+#define ODM_OFDM_FA_CNT4 0xda8
+#define ODM_TXAGC_A_6_18 0xe00
+#define ODM_TXAGC_A_24_54 0xe04
+#define ODM_TXAGC_A_1_MCS32 0xe08
+#define ODM_TXAGC_A_MCS0_MCS3 0xe10
+#define ODM_TXAGC_A_MCS4_MCS7 0xe14
+#define ODM_TXAGC_A_MCS8_MCS11 0xe18
+#define ODM_TXAGC_A_MCS12_MCS15 0xe1c
+
+//RF REG
+#define ODM_GAIN_SETTING 0x00
+#define ODM_CHANNEL 0x18
+
+//Ant Detect Reg
+#define ODM_DPDT 0x300
+
+//PSD Init
+#define ODM_PSDREG 0x808
+
+//92D Path Div
+#define PATHDIV_REG 0xB30
+#define PATHDIV_TRI 0xBA0
+
+
+//
+// Bitmap Definition
+//
+
+#define BIT_FA_RESET BIT0
+
+
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEMACImg_CE.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEMACImg_CE.c
index f24e3531e5f5..83a07d3f7543 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEMACImg_CE.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEMACImg_CE.c
@@ -1,94 +1,94 @@
-/*Created on 2011/ 6/16, 6: 8*/
-
-#include "../odm_precomp.h"
-// MAC reg V14 - 2011-11-23
-u4Byte Rtl8192CEMAC_2T_Array[Rtl8192CEMAC_2T_ArrayLength] = {
-0x420,0x00000080,
-0x423,0x00000000,
-0x430,0x00000000,
-0x431,0x00000000,
-0x432,0x00000000,
-0x433,0x00000001,
-0x434,0x00000004,
-0x435,0x00000005,
-0x436,0x00000006,
-0x437,0x00000007,
-0x438,0x00000000,
-0x439,0x00000000,
-0x43a,0x00000000,
-0x43b,0x00000001,
-0x43c,0x00000004,
-0x43d,0x00000005,
-0x43e,0x00000006,
-0x43f,0x00000007,
-0x440,0x0000005d,
-0x441,0x00000001,
-0x442,0x00000000,
-0x444,0x00000015,
-0x445,0x000000f0,
-0x446,0x0000000f,
-0x447,0x00000000,
-0x458,0x00000041,
-0x459,0x000000a8,
-0x45a,0x00000072,
-0x45b,0x000000b9,
-0x460,0x00000066,
-0x461,0x00000066,
-0x462,0x00000008,
-0x463,0x00000003,
-0x4c8,0x000000ff,
-0x4c9,0x00000008,
-0x4cc,0x000000ff,
-0x4cd,0x000000ff,
-0x4ce,0x00000001,
-0x500,0x00000026,
-0x501,0x000000a2,
-0x502,0x0000002f,
-0x503,0x00000000,
-0x504,0x00000028,
-0x505,0x000000a3,
-0x506,0x0000005e,
-0x507,0x00000000,
-0x508,0x0000002b,
-0x509,0x000000a4,
-0x50a,0x0000005e,
-0x50b,0x00000000,
-0x50c,0x0000004f,
-0x50d,0x000000a4,
-0x50e,0x00000000,
-0x50f,0x00000000,
-0x512,0x0000001c,
-0x514,0x0000000a,
-0x515,0x00000010,
-0x516,0x0000000a,
-0x517,0x00000010,
-0x51a,0x00000016,
-0x524,0x0000000f,
-0x525,0x0000004f,
-0x546,0x00000040,
-0x547,0x00000000,
-0x550,0x00000010,
-0x551,0x00000010,
-0x559,0x00000002,
-0x55a,0x00000002,
-0x55d,0x000000ff,
-0x605,0x00000030,
-0x608,0x0000000e,
-0x609,0x0000002a,
-0x652,0x00000020,
-0x652,0x00000020,
-0x63c,0x00000008,
-0x63d,0x00000008,
-0x63e,0x0000000c,
-0x63f,0x0000000c,
-0x66e,0x00000005,
-0x700,0x00000021,
-0x701,0x00000043,
-0x702,0x00000065,
-0x703,0x00000087,
-0x708,0x00000021,
-0x709,0x00000043,
-0x70a,0x00000065,
-0x70b,0x00000087,
-};
-
+/*Created on 2011/ 6/16, 6: 8*/
+
+#include "../odm_precomp.h"
+// MAC reg V14 - 2011-11-23
+u4Byte Rtl8192CEMAC_2T_Array[Rtl8192CEMAC_2T_ArrayLength] = {
+0x420,0x00000080,
+0x423,0x00000000,
+0x430,0x00000000,
+0x431,0x00000000,
+0x432,0x00000000,
+0x433,0x00000001,
+0x434,0x00000004,
+0x435,0x00000005,
+0x436,0x00000006,
+0x437,0x00000007,
+0x438,0x00000000,
+0x439,0x00000000,
+0x43a,0x00000000,
+0x43b,0x00000001,
+0x43c,0x00000004,
+0x43d,0x00000005,
+0x43e,0x00000006,
+0x43f,0x00000007,
+0x440,0x0000005d,
+0x441,0x00000001,
+0x442,0x00000000,
+0x444,0x00000015,
+0x445,0x000000f0,
+0x446,0x0000000f,
+0x447,0x00000000,
+0x458,0x00000041,
+0x459,0x000000a8,
+0x45a,0x00000072,
+0x45b,0x000000b9,
+0x460,0x00000066,
+0x461,0x00000066,
+0x462,0x00000008,
+0x463,0x00000003,
+0x4c8,0x000000ff,
+0x4c9,0x00000008,
+0x4cc,0x000000ff,
+0x4cd,0x000000ff,
+0x4ce,0x00000001,
+0x500,0x00000026,
+0x501,0x000000a2,
+0x502,0x0000002f,
+0x503,0x00000000,
+0x504,0x00000028,
+0x505,0x000000a3,
+0x506,0x0000005e,
+0x507,0x00000000,
+0x508,0x0000002b,
+0x509,0x000000a4,
+0x50a,0x0000005e,
+0x50b,0x00000000,
+0x50c,0x0000004f,
+0x50d,0x000000a4,
+0x50e,0x00000000,
+0x50f,0x00000000,
+0x512,0x0000001c,
+0x514,0x0000000a,
+0x515,0x00000010,
+0x516,0x0000000a,
+0x517,0x00000010,
+0x51a,0x00000016,
+0x524,0x0000000f,
+0x525,0x0000004f,
+0x546,0x00000040,
+0x547,0x00000000,
+0x550,0x00000010,
+0x551,0x00000010,
+0x559,0x00000002,
+0x55a,0x00000002,
+0x55d,0x000000ff,
+0x605,0x00000030,
+0x608,0x0000000e,
+0x609,0x0000002a,
+0x652,0x00000020,
+0x652,0x00000020,
+0x63c,0x00000008,
+0x63d,0x00000008,
+0x63e,0x0000000c,
+0x63f,0x0000000c,
+0x66e,0x00000005,
+0x700,0x00000021,
+0x701,0x00000043,
+0x702,0x00000065,
+0x703,0x00000087,
+0x708,0x00000021,
+0x709,0x00000043,
+0x70a,0x00000065,
+0x70b,0x00000087,
+};
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEMACImg_CE.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEMACImg_CE.h
index 4176c3930e34..b237bcaea6b7 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEMACImg_CE.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEMACImg_CE.h
@@ -1,10 +1,10 @@
-#ifndef __INC_HAL8192CE_MAC_IMG_H
-#define __INC_HAL8192CE_MAC_IMG_H
-
-/*Created on 2011/ 6/16, 6: 8*/
-
-#define Rtl8192CEMAC_2T_ArrayLength 174
-extern u4Byte Rtl8192CEMAC_2T_Array[Rtl8192CEMAC_2T_ArrayLength];
-
-#endif //__INC_HAL8192CE_FW_IMG_H
-
+#ifndef __INC_HAL8192CE_MAC_IMG_H
+#define __INC_HAL8192CE_MAC_IMG_H
+
+/*Created on 2011/ 6/16, 6: 8*/
+
+#define Rtl8192CEMAC_2T_ArrayLength 174
+extern u4Byte Rtl8192CEMAC_2T_Array[Rtl8192CEMAC_2T_ArrayLength];
+
+#endif //__INC_HAL8192CE_FW_IMG_H
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEPHYImg_CE.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEPHYImg_CE.c
index 3892736f8355..500af054379b 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEPHYImg_CE.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEPHYImg_CE.c
@@ -1,1198 +1,1198 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-#include "../odm_precomp.h"
-
-
-u4Byte Rtl8192CEPHY_REG_2TArray[Rtl8192CEPHY_REG_2TArrayLength] = {
-0x024,0x0011800f,
-0x028,0x00ffdb83,
-0x800,0x80040002,
-0x804,0x00000003,
-0x808,0x0000fc00,
-0x80c,0x0000000a,
-0x810,0x10000330, //for Broadcom AP IOT
-0x814,0x020c3d10,
-0x818,0x02200385,
-0x81c,0x00000000,
-0x820,0x01000100,
-0x824,0x00390004,
-0x828,0x01000100,
-0x82c,0x00390004,
-0x830,0x27272727,
-0x834,0x27272727,
-0x838,0x27272727,
-0x83c,0x27272727,
-0x840,0x00010000,
-0x844,0x00010000,
-0x848,0x27272727,
-0x84c,0x27272727,
-0x850,0x00000000,
-0x854,0x00000000,
-0x858,0x569a569a,
-0x85c,0x0c1b25a4,
-0x860,0x66e60230,
-0x864,0x061f0130,
-0x868,0x27272727,
-0x86c,0x2b2b2b27,
-0x870,0x07000700,
-0x874,0x22184000,
-0x878,0x08080808,
-0x87c,0x00000000,
-0x880,0xc0083070,
-0x884,0x000004d5,
-0x888,0x00000000,
-0x88c,0xcc0000c0,
-0x890,0x00000800,
-0x894,0xfffffffe,
-0x898,0x40302010,
-0x89c,0x00706050,
-0x900,0x00000000,
-0x904,0x00000023,
-0x908,0x00000000,
-0x90c,0x81121313,
-0xa00,0x00d047c8,
-0xa04,0x80ff000c,
-0xa08,0x8c838300,
-0xa0c,0x2e68120f,
-0xa10,0x9500bb78,
-0xa14,0x11144028,
-0xa18,0x00881117,
-0xa1c,0x89140f00,
-0xa20,0x1a1b0000,
-0xa24,0x090e1317,
-0xa28,0x00000204,
-0xa2c,0x00d30000,
-0xa70,0x101fbf00,
-0xa74,0x00000007,
-0xc00,0x48071d40,
-0xc04,0x03a05633,
-0xc08,0x000000e4,
-0xc0c,0x6c6c6c6c,
-0xc10,0x08800000,
-0xc14,0x40000100,
-0xc18,0x08800000,
-0xc1c,0x40000100,
-0xc20,0x00000000,
-0xc24,0x00000000,
-0xc28,0x00000000,
-0xc2c,0x00000000,
-0xc30,0x69e9ac44,
-0xc34,0x469652cf,
-0xc38,0x49795994,
-0xc3c,0x0a97971c,
-0xc40,0x1f7c403f,
-0xc44,0x000100b7,
-0xc48,0xec020107,
-0xc4c,0x007f037f,
-0xc50,0x69543420,
-0xc54,0x43bc0094,
-0xc58,0x69543420,
-0xc5c,0x433c0094,
-0xc60,0x00000000,
-0xc64,0x5116848b,
-0xc68,0x47c00bff,
-0xc6c,0x00000036,
-0xc70,0x2c7f000d,
-0xc74,0x218610db,
-0xc78,0x0000001f,
-0xc7c,0x00b91612,
-0xc80,0x40000100,
-0xc84,0x20f60000,
-0xc88,0x40000100,
-0xc8c,0xa0e40000,
-0xc90,0x00121820,
-0xc94,0x00000000,
-0xc98,0x00121820,
-0xc9c,0x00007f7f,
-0xca0,0x00000000,
-0xca4,0x00000080,
-0xca8,0x00000000,
-0xcac,0x00000000,
-0xcb0,0x00000000,
-0xcb4,0x00000000,
-0xcb8,0x00000000,
-0xcbc,0x28000000,
-0xcc0,0x00000000,
-0xcc4,0x00000000,
-0xcc8,0x00000000,
-0xccc,0x00000000,
-0xcd0,0x00000000,
-0xcd4,0x00000000,
-0xcd8,0x64b22427,
-0xcdc,0x00766932,
-0xce0,0x00222222,
-0xce4,0x00000000,
-0xce8,0x37644302,
-0xcec,0x2f97d40c,
-0xd00,0x00080740,
-0xd04,0x00020403,
-0xd08,0x0000907f,
-0xd0c,0x20010201,
-0xd10,0xa0633333,
-0xd14,0x3333bc43,
-0xd18,0x7a8f5b6b,
-0xd2c,0xcc979975,
-0xd30,0x00000000,
-0xd34,0x80608000,
-0xd38,0x00000000,
-0xd3c,0x00027293,
-0xd40,0x00000000,
-0xd44,0x00000000,
-0xd48,0x00000000,
-0xd4c,0x00000000,
-0xd50,0x6437140a,
-0xd54,0x00000000,
-0xd58,0x00000000,
-0xd5c,0x30032064,
-0xd60,0x4653de68,
-0xd64,0x04518a3c,
-0xd68,0x00002101,
-0xd6c,0x2a201c16,
-0xd70,0x1812362e,
-0xd74,0x322c2220,
-0xd78,0x000e3c24,
-0xe00,0x2a2a2a2a,
-0xe04,0x2a2a2a2a,
-0xe08,0x03902a2a,
-0xe10,0x2a2a2a2a,
-0xe14,0x2a2a2a2a,
-0xe18,0x2a2a2a2a,
-0xe1c,0x2a2a2a2a,
-0xe28,0x00000000,
-0xe30,0x1000dc1f,
-0xe34,0x10008c1f,
-0xe38,0x02140102,
-0xe3c,0x681604c2,
-0xe40,0x01007c00,
-0xe44,0x01004800,
-0xe48,0xfb000000,
-0xe4c,0x000028d1,
-0xe50,0x1000dc1f,
-0xe54,0x10008c1f,
-0xe58,0x02140102,
-0xe5c,0x28160d05,
-0xe60,0x00000010,
-0xe68,0x001b25a4,
-0xe6c,0x63db25a4,
-0xe70,0x63db25a4,
-0xe74,0x0c1b25a4,
-0xe78,0x0c1b25a4,
-0xe7c,0x0c1b25a4,
-0xe80,0x0c1b25a4,
-0xe84,0x63db25a4,
-0xe88,0x0c1b25a4,
-0xe8c,0x63db25a4,
-0xed0,0x63db25a4,
-0xed4,0x63db25a4,
-0xed8,0x63db25a4,
-0xedc,0x001b25a4,
-0xee0,0x001b25a4,
-0xeec,0x6fdb25a4,
-0xf14,0x00000003,
-0xf4c,0x00000000,
-0xf00,0x00000300,
-};
-
-u4Byte Rtl8192CEPHY_REG_1TArray[Rtl8192CEPHY_REG_1TArrayLength] = {
-0x024,0x0011800f,
-0x028,0x00ffdb83,
-0x800,0x80040000,
-0x804,0x00000001,
-0x808,0x0000fc00,
-0x80c,0x0000000a,
-0x810,0x10000330, //for Broadcom AP IOT
-0x814,0x020c3d10,
-0x818,0x02200385,
-0x81c,0x00000000,
-0x820,0x01000100,
-0x824,0x00390004,
-0x828,0x00000000,
-0x82c,0x00000000,
-0x830,0x00000000,
-0x834,0x00000000,
-0x838,0x00000000,
-0x83c,0x00000000,
-0x840,0x00010000,
-0x844,0x00000000,
-0x848,0x00000000,
-0x84c,0x00000000,
-0x850,0x00000000,
-0x854,0x00000000,
-0x858,0x569a569a,
-0x85c,0x001b25a4,
-0x860,0x66e60230,
-0x864,0x061f0130,
-0x868,0x00000000,
-0x86c,0x32323200,
-0x870,0x07000700,
-0x874,0x22004000,
-0x878,0x00000808,
-0x87c,0x00000000,
-0x880,0xc0083070,
-0x884,0x000004d5,
-0x888,0x00000000,
-0x88c,0xccc000c0,
-0x890,0x00000800,
-0x894,0xfffffffe,
-0x898,0x40302010,
-0x89c,0x00706050,
-0x900,0x00000000,
-0x904,0x00000023,
-0x908,0x00000000,
-0x90c,0x81121111,
-0xa00,0x00d047c8,
-0xa04,0x80ff000c,
-0xa08,0x8c838300,
-0xa0c,0x2e68120f,
-0xa10,0x9500bb78,
-0xa14,0x11144028,
-0xa18,0x00881117,
-0xa1c,0x89140f00,
-0xa20,0x1a1b0000,
-0xa24,0x090e1317,
-0xa28,0x00000204,
-0xa2c,0x00d30000,
-0xa70,0x101fbf00,
-0xa74,0x00000007,
-0xc00,0x48071d40,
-0xc04,0x03a05611,
-0xc08,0x000000e4,
-0xc0c,0x6c6c6c6c,
-0xc10,0x08800000,
-0xc14,0x40000100,
-0xc18,0x08800000,
-0xc1c,0x40000100,
-0xc20,0x00000000,
-0xc24,0x00000000,
-0xc28,0x00000000,
-0xc2c,0x00000000,
-0xc30,0x69e9ac44,
-0xc34,0x469652cf,
-0xc38,0x49795994,
-0xc3c,0x0a97971c,
-0xc40,0x1f7c403f,
-0xc44,0x000100b7,
-0xc48,0xec020107,
-0xc4c,0x007f037f,
-0xc50,0x69543420,
-0xc54,0x43bc0094,
-0xc58,0x69543420,
-0xc5c,0x433c0094,
-0xc60,0x00000000,
-0xc64,0x5116848b,
-0xc68,0x47c00bff,
-0xc6c,0x00000036,
-0xc70,0x2c7f000d,
-0xc74,0x018610db,
-0xc78,0x0000001f,
-0xc7c,0x00b91612,
-0xc80,0x40000100,
-0xc84,0x20f60000,
-0xc88,0x40000100,
-0xc8c,0x20200000,
-0xc90,0x00121820,
-0xc94,0x00000000,
-0xc98,0x00121820,
-0xc9c,0x00007f7f,
-0xca0,0x00000000,
-0xca4,0x00000080,
-0xca8,0x00000000,
-0xcac,0x00000000,
-0xcb0,0x00000000,
-0xcb4,0x00000000,
-0xcb8,0x00000000,
-0xcbc,0x28000000,
-0xcc0,0x00000000,
-0xcc4,0x00000000,
-0xcc8,0x00000000,
-0xccc,0x00000000,
-0xcd0,0x00000000,
-0xcd4,0x00000000,
-0xcd8,0x64b22427,
-0xcdc,0x00766932,
-0xce0,0x00222222,
-0xce4,0x00000000,
-0xce8,0x37644302,
-0xcec,0x2f97d40c,
-0xd00,0x00000740,
-0xd04,0x00020401,
-0xd08,0x0000907f,
-0xd0c,0x20010201,
-0xd10,0xa0633333,
-0xd14,0x3333bc43,
-0xd18,0x7a8f5b6b,
-0xd2c,0xcc979975,
-0xd30,0x00000000,
-0xd34,0x80608000,
-0xd38,0x00000000,
-0xd3c,0x00027293,
-0xd40,0x00000000,
-0xd44,0x00000000,
-0xd48,0x00000000,
-0xd4c,0x00000000,
-0xd50,0x6437140a,
-0xd54,0x00000000,
-0xd58,0x00000000,
-0xd5c,0x30032064,
-0xd60,0x4653de68,
-0xd64,0x04518a3c,
-0xd68,0x00002101,
-0xd6c,0x2a201c16,
-0xd70,0x1812362e,
-0xd74,0x322c2220,
-0xd78,0x000e3c24,
-0xe00,0x2a2a2a2a,
-0xe04,0x2a2a2a2a,
-0xe08,0x03902a2a,
-0xe10,0x2a2a2a2a,
-0xe14,0x2a2a2a2a,
-0xe18,0x2a2a2a2a,
-0xe1c,0x2a2a2a2a,
-0xe28,0x00000000,
-0xe30,0x1000dc1f,
-0xe34,0x10008c1f,
-0xe38,0x02140102,
-0xe3c,0x681604c2,
-0xe40,0x01007c00,
-0xe44,0x01004800,
-0xe48,0xfb000000,
-0xe4c,0x000028d1,
-0xe50,0x1000dc1f,
-0xe54,0x10008c1f,
-0xe58,0x02140102,
-0xe5c,0x28160d05,
-0xe60,0x00000008,
-0xe68,0x001b25a4,
-0xe6c,0x631b25a0,
-0xe70,0x631b25a0,
-0xe74,0x081b25a0,
-0xe78,0x081b25a0,
-0xe7c,0x081b25a0,
-0xe80,0x081b25a0,
-0xe84,0x631b25a0,
-0xe88,0x081b25a0,
-0xe8c,0x631b25a0,
-0xed0,0x631b25a0,
-0xed4,0x631b25a0,
-0xed8,0x631b25a0,
-0xedc,0x001b25a0,
-0xee0,0x001b25a0,
-0xeec,0x6b1b25a0,
-0xf14,0x00000003,
-0xf4c,0x00000000,
-0xf00,0x00000300,
-};
-
-u4Byte Rtl8192CEPHY_ChangeTo_1T1RArray[Rtl8192CEPHY_ChangeTo_1T1RArrayLength] = {
-0x0, };
-
-u4Byte Rtl8192CEPHY_ChangeTo_1T2RArray[Rtl8192CEPHY_ChangeTo_1T2RArrayLength] = {
-0x0, };
-
-u4Byte Rtl8192CEPHY_ChangeTo_2T2RArray[Rtl8192CEPHY_ChangeTo_2T2RArrayLength] = {
-0x0, };
-
-u4Byte Rtl8192CEPHY_REG_Array_PG[Rtl8192CEPHY_REG_Array_PGLength] = {
-0xe00,0xffffffff,0x07090c0c,
-0xe04,0xffffffff,0x01020405,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x0b0c0c0e,
-0xe14,0xffffffff,0x01030506,
-0xe18,0xffffffff,0x0b0c0d0e,
-0xe1c,0xffffffff,0x01030509,
-0x830,0xffffffff,0x07090c0c,
-0x834,0xffffffff,0x01020405,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x0b0c0d0e,
-0x848,0xffffffff,0x01030509,
-0x84c,0xffffffff,0x0b0c0d0e,
-0x868,0xffffffff,0x01030509,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x04040404,
-0xe04,0xffffffff,0x00020204,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x06060606,
-0xe14,0xffffffff,0x00020406,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x04040404,
-0x834,0xffffffff,0x00020204,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x06060606,
-0x848,0xffffffff,0x00020406,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x04040404,
-0xe04,0xffffffff,0x00020204,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x04040404,
-0x834,0xffffffff,0x00020204,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-};
-
-u4Byte Rtl8192CEPHY_REG_Array_MP[Rtl8192CEPHY_REG_Array_MPLength] = {
-0xc30,0x69e9ac4a,
-0xc3c,0x0a979718,
-};
-
-u4Byte Rtl8192CERadioA_2TArray[Rtl8192CERadioA_2TArrayLength] = {
-0x000,0x00030159,
-0x001,0x00031284,
-0x002,0x00098000,
-0x003,0x00018c63,
-0x004,0x000210e7,
-0x009,0x0002044f,
-0x00a,0x0001adb1,
-0x00b,0x00054867,
-0x00c,0x0008992e,
-0x00d,0x0000e52c,
-0x00e,0x00039ce7,
-0x00f,0x00000451,
-0x019,0x00000000,
-0x01a,0x00010255,
-0x01b,0x00060a00,
-0x01c,0x000fc378,
-0x01d,0x000a1250,
-0x01e,0x0004445f,
-0x01f,0x00080001,
-0x020,0x0000b614,
-0x021,0x0006c000,
-0x022,0x00000000,
-0x023,0x00001558,
-0x024,0x00000060,
-0x025,0x00000483,
-0x026,0x0004f000,
-0x027,0x000ec7d9,
-0x028,0x000577c0,
-0x029,0x00004783,
-0x02a,0x00000001,
-0x02b,0x00021334,
-0x02a,0x00000000,
-0x02b,0x00000054,
-0x02a,0x00000001,
-0x02b,0x00000808,
-0x02b,0x00053333,
-0x02c,0x0000000c,
-0x02a,0x00000002,
-0x02b,0x00000808,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000003,
-0x02b,0x00000808,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000004,
-0x02b,0x00000808,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x00000005,
-0x02b,0x00000808,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x00000006,
-0x02b,0x00000709,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000007,
-0x02b,0x00000709,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000008,
-0x02b,0x0000060a,
-0x02b,0x0004b333,
-0x02c,0x0000000d,
-0x02a,0x00000009,
-0x02b,0x0000060a,
-0x02b,0x00053333,
-0x02c,0x0000000d,
-0x02a,0x0000000a,
-0x02b,0x0000060a,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x0000000b,
-0x02b,0x0000060a,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x0000000c,
-0x02b,0x0000060a,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x0000000d,
-0x02b,0x0000060a,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x0000000e,
-0x02b,0x0000050b,
-0x02b,0x00066666,
-0x02c,0x0000001a,
-0x02a,0x000e0000,
-0x010,0x0004000f,
-0x011,0x000e31fc,
-0x010,0x0006000f,
-0x011,0x000ff9f8,
-0x010,0x0002000f,
-0x011,0x000203f9,
-0x010,0x0003000f,
-0x011,0x000ff500,
-0x010,0x00000000,
-0x011,0x00000000,
-0x010,0x0008000f,
-0x011,0x0003f100,
-0x010,0x0009000f,
-0x011,0x00023100,
-0x012,0x00032000,
-0x012,0x00071000,
-0x012,0x000b0000,
-0x012,0x000fc000,
-0x013,0x000287b3,
-0x013,0x000244b7,
-0x013,0x000204ab,
-0x013,0x0001c49f,
-0x013,0x00018493,
-0x013,0x0001429b,
-0x013,0x00010299,
-0x013,0x0000c29c,
-0x013,0x000081a0,
-0x013,0x000040ac,
-0x013,0x00000020,
-0x014,0x0001944c,
-0x014,0x00059444,
-0x014,0x0009944c,
-0x014,0x000d9444,
-0x015,0x0000f424,
-0x015,0x0004f424,
-0x015,0x0008f424,
-0x015,0x000cf424,
-0x016,0x000e0330,
-0x016,0x000a0330,
-0x016,0x00060330,
-0x016,0x00020330,
-0x000,0x00010159,
-0x018,0x0000f401,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01f,0x00080003,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01e,0x00044457,
-0x01f,0x00080000,
-0x000,0x00030159,
-};
-
-u4Byte Rtl8192CERadioB_2TArray[Rtl8192CERadioB_2TArrayLength] = {
-0x000,0x00030159,
-0x001,0x00031284,
-0x002,0x00098000,
-0x003,0x00018c63,
-0x004,0x000210e7,
-0x009,0x0002044f,
-0x00a,0x0001adb1,
-0x00b,0x00054867,
-0x00c,0x0008992e,
-0x00d,0x0000e52c,
-0x00e,0x00039ce7,
-0x00f,0x00000451,
-0x012,0x00032000,
-0x012,0x00071000,
-0x012,0x000b0000,
-0x012,0x000fc000,
-0x013,0x000287b3,
-0x013,0x000244b7,
-0x013,0x000204ab,
-0x013,0x0001c49f,
-0x013,0x00018493,
-0x013,0x0001429b,
-0x013,0x00010299,
-0x013,0x0000c29c,
-0x013,0x000081a0,
-0x013,0x000040ac,
-0x013,0x00000020,
-0x014,0x0001944c,
-0x014,0x00059444,
-0x014,0x0009944c,
-0x014,0x000d9444,
-0x015,0x0000f424,
-0x015,0x0004f424,
-0x015,0x0008f424,
-0x015,0x000cf424,
-0x016,0x000e0330,
-0x016,0x000a0330,
-0x016,0x00060330,
-0x016,0x00020330,
-};
-
-u4Byte Rtl8192CERadioA_1TArray[Rtl8192CERadioA_1TArrayLength] = {
-0x000,0x00030159,
-0x001,0x00031284,
-0x002,0x00098000,
-0x003,0x00018c63,
-0x004,0x000210e7,
-0x009,0x0002044f,
-0x00a,0x0001af31,
-0x00b,0x00054867,
-0x00c,0x0008992e,
-0x00d,0x0000e52c,
-0x00e,0x00039ce7,
-0x00f,0x00000451,
-0x019,0x00000000,
-0x01a,0x00010255,
-0x01b,0x00060a00,
-0x01c,0x000fc378,
-0x01d,0x000a1250,
-0x01e,0x0004445f,
-0x01f,0x00080001,
-0x020,0x0000b614,
-0x021,0x0006c000,
-0x022,0x00000000,
-0x023,0x00001558,
-0x024,0x00000060,
-0x025,0x00000483,
-0x026,0x0004f000,
-0x027,0x000ec7d9,
-0x028,0x000577c0,
-0x029,0x00004783,
-0x02a,0x00000001,
-0x02b,0x00021334,
-0x02a,0x00000000,
-0x02b,0x00000054,
-0x02a,0x00000001,
-0x02b,0x00000808,
-0x02b,0x00053333,
-0x02c,0x0000000c,
-0x02a,0x00000002,
-0x02b,0x00000808,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000003,
-0x02b,0x00000808,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000004,
-0x02b,0x00000808,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x00000005,
-0x02b,0x00000808,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x00000006,
-0x02b,0x00000709,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000007,
-0x02b,0x00000709,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000008,
-0x02b,0x0000060a,
-0x02b,0x0004b333,
-0x02c,0x0000000d,
-0x02a,0x00000009,
-0x02b,0x0000060a,
-0x02b,0x00053333,
-0x02c,0x0000000d,
-0x02a,0x0000000a,
-0x02b,0x0000060a,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x0000000b,
-0x02b,0x0000060a,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x0000000c,
-0x02b,0x0000060a,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x0000000d,
-0x02b,0x0000060a,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x0000000e,
-0x02b,0x0000050b,
-0x02b,0x00066666,
-0x02c,0x0000001a,
-0x02a,0x000e0000,
-0x010,0x0004000f,
-0x011,0x000e31fc,
-0x010,0x0006000f,
-0x011,0x000ff9f8,
-0x010,0x0002000f,
-0x011,0x000203f9,
-0x010,0x0003000f,
-0x011,0x000ff500,
-0x010,0x00000000,
-0x011,0x00000000,
-0x010,0x0008000f,
-0x011,0x0003f100,
-0x010,0x0009000f,
-0x011,0x00023100,
-0x012,0x00032000,
-0x012,0x00071000,
-0x012,0x000b0000,
-0x012,0x000fc000,
-0x013,0x000287b3,
-0x013,0x000244b7,
-0x013,0x000204ab,
-0x013,0x0001c49f,
-0x013,0x00018493,
-0x013,0x0001429b,
-0x013,0x00010299,
-0x013,0x0000c29c,
-0x013,0x000081a0,
-0x013,0x000040ac,
-0x013,0x00000020,
-0x014,0x0001944c,
-0x014,0x00059444,
-0x014,0x0009944c,
-0x014,0x000d9444,
-0x015,0x0000f424,
-0x015,0x0004f424,
-0x015,0x0008f424,
-0x015,0x000cf424,
-0x016,0x000e0330,
-0x016,0x000a0330,
-0x016,0x00060330,
-0x016,0x00020330,
-0x000,0x00010159,
-0x018,0x0000f401,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01f,0x00080003,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01e,0x00044457,
-0x01f,0x00080000,
-0x000,0x00030159,
-};
-
-u4Byte Rtl8192CERadioB_1TArray[Rtl8192CERadioB_1TArrayLength] = {
-0x0, };
-
-u4Byte Rtl8192CERadioB_GM_Array[Rtl8192CERadioB_GM_ArrayLength] = {
-0x0, };
-
-u4Byte Rtl8192CEMACPHY_Array_PG[Rtl8192CEMACPHY_Array_PGLength] = {
-0x0, };
-
-u4Byte Rtl8192CEAGCTAB_2TArray[Rtl8192CEAGCTAB_2TArrayLength] = {
-0xc78,0x7b000001,
-0xc78,0x7b010001,
-0xc78,0x7b020001,
-0xc78,0x7b030001,
-0xc78,0x7b040001,
-0xc78,0x7b050001,
-0xc78,0x7a060001,
-0xc78,0x79070001,
-0xc78,0x78080001,
-0xc78,0x77090001,
-0xc78,0x760a0001,
-0xc78,0x750b0001,
-0xc78,0x740c0001,
-0xc78,0x730d0001,
-0xc78,0x720e0001,
-0xc78,0x710f0001,
-0xc78,0x70100001,
-0xc78,0x6f110001,
-0xc78,0x6e120001,
-0xc78,0x6d130001,
-0xc78,0x6c140001,
-0xc78,0x6b150001,
-0xc78,0x6a160001,
-0xc78,0x69170001,
-0xc78,0x68180001,
-0xc78,0x67190001,
-0xc78,0x661a0001,
-0xc78,0x651b0001,
-0xc78,0x641c0001,
-0xc78,0x631d0001,
-0xc78,0x621e0001,
-0xc78,0x611f0001,
-0xc78,0x60200001,
-0xc78,0x49210001,
-0xc78,0x48220001,
-0xc78,0x47230001,
-0xc78,0x46240001,
-0xc78,0x45250001,
-0xc78,0x44260001,
-0xc78,0x43270001,
-0xc78,0x42280001,
-0xc78,0x41290001,
-0xc78,0x402a0001,
-0xc78,0x262b0001,
-0xc78,0x252c0001,
-0xc78,0x242d0001,
-0xc78,0x232e0001,
-0xc78,0x222f0001,
-0xc78,0x21300001,
-0xc78,0x20310001,
-0xc78,0x06320001,
-0xc78,0x05330001,
-0xc78,0x04340001,
-0xc78,0x03350001,
-0xc78,0x02360001,
-0xc78,0x01370001,
-0xc78,0x00380001,
-0xc78,0x00390001,
-0xc78,0x003a0001,
-0xc78,0x003b0001,
-0xc78,0x003c0001,
-0xc78,0x003d0001,
-0xc78,0x003e0001,
-0xc78,0x003f0001,
-0xc78,0x7b400001,
-0xc78,0x7b410001,
-0xc78,0x7b420001,
-0xc78,0x7b430001,
-0xc78,0x7b440001,
-0xc78,0x7b450001,
-0xc78,0x7a460001,
-0xc78,0x79470001,
-0xc78,0x78480001,
-0xc78,0x77490001,
-0xc78,0x764a0001,
-0xc78,0x754b0001,
-0xc78,0x744c0001,
-0xc78,0x734d0001,
-0xc78,0x724e0001,
-0xc78,0x714f0001,
-0xc78,0x70500001,
-0xc78,0x6f510001,
-0xc78,0x6e520001,
-0xc78,0x6d530001,
-0xc78,0x6c540001,
-0xc78,0x6b550001,
-0xc78,0x6a560001,
-0xc78,0x69570001,
-0xc78,0x68580001,
-0xc78,0x67590001,
-0xc78,0x665a0001,
-0xc78,0x655b0001,
-0xc78,0x645c0001,
-0xc78,0x635d0001,
-0xc78,0x625e0001,
-0xc78,0x615f0001,
-0xc78,0x60600001,
-0xc78,0x49610001,
-0xc78,0x48620001,
-0xc78,0x47630001,
-0xc78,0x46640001,
-0xc78,0x45650001,
-0xc78,0x44660001,
-0xc78,0x43670001,
-0xc78,0x42680001,
-0xc78,0x41690001,
-0xc78,0x406a0001,
-0xc78,0x266b0001,
-0xc78,0x256c0001,
-0xc78,0x246d0001,
-0xc78,0x236e0001,
-0xc78,0x226f0001,
-0xc78,0x21700001,
-0xc78,0x20710001,
-0xc78,0x06720001,
-0xc78,0x05730001,
-0xc78,0x04740001,
-0xc78,0x03750001,
-0xc78,0x02760001,
-0xc78,0x01770001,
-0xc78,0x00780001,
-0xc78,0x00790001,
-0xc78,0x007a0001,
-0xc78,0x007b0001,
-0xc78,0x007c0001,
-0xc78,0x007d0001,
-0xc78,0x007e0001,
-0xc78,0x007f0001,
-0xc78,0x3800001e,
-0xc78,0x3801001e,
-0xc78,0x3802001e,
-0xc78,0x3803001e,
-0xc78,0x3804001e,
-0xc78,0x3805001e,
-0xc78,0x3806001e,
-0xc78,0x3807001e,
-0xc78,0x3808001e,
-0xc78,0x3c09001e,
-0xc78,0x3e0a001e,
-0xc78,0x400b001e,
-0xc78,0x440c001e,
-0xc78,0x480d001e,
-0xc78,0x4c0e001e,
-0xc78,0x500f001e,
-0xc78,0x5210001e,
-0xc78,0x5611001e,
-0xc78,0x5a12001e,
-0xc78,0x5e13001e,
-0xc78,0x6014001e,
-0xc78,0x6015001e,
-0xc78,0x6016001e,
-0xc78,0x6217001e,
-0xc78,0x6218001e,
-0xc78,0x6219001e,
-0xc78,0x621a001e,
-0xc78,0x621b001e,
-0xc78,0x621c001e,
-0xc78,0x621d001e,
-0xc78,0x621e001e,
-0xc78,0x621f001e,
-};
-
-u4Byte Rtl8192CEAGCTAB_1TArray[Rtl8192CEAGCTAB_1TArrayLength] = {
-0xc78,0x7b000001,
-0xc78,0x7b010001,
-0xc78,0x7b020001,
-0xc78,0x7b030001,
-0xc78,0x7b040001,
-0xc78,0x7b050001,
-0xc78,0x7a060001,
-0xc78,0x79070001,
-0xc78,0x78080001,
-0xc78,0x77090001,
-0xc78,0x760a0001,
-0xc78,0x750b0001,
-0xc78,0x740c0001,
-0xc78,0x730d0001,
-0xc78,0x720e0001,
-0xc78,0x710f0001,
-0xc78,0x70100001,
-0xc78,0x6f110001,
-0xc78,0x6e120001,
-0xc78,0x6d130001,
-0xc78,0x6c140001,
-0xc78,0x6b150001,
-0xc78,0x6a160001,
-0xc78,0x69170001,
-0xc78,0x68180001,
-0xc78,0x67190001,
-0xc78,0x661a0001,
-0xc78,0x651b0001,
-0xc78,0x641c0001,
-0xc78,0x631d0001,
-0xc78,0x621e0001,
-0xc78,0x611f0001,
-0xc78,0x60200001,
-0xc78,0x49210001,
-0xc78,0x48220001,
-0xc78,0x47230001,
-0xc78,0x46240001,
-0xc78,0x45250001,
-0xc78,0x44260001,
-0xc78,0x43270001,
-0xc78,0x42280001,
-0xc78,0x41290001,
-0xc78,0x402a0001,
-0xc78,0x262b0001,
-0xc78,0x252c0001,
-0xc78,0x242d0001,
-0xc78,0x232e0001,
-0xc78,0x222f0001,
-0xc78,0x21300001,
-0xc78,0x20310001,
-0xc78,0x06320001,
-0xc78,0x05330001,
-0xc78,0x04340001,
-0xc78,0x03350001,
-0xc78,0x02360001,
-0xc78,0x01370001,
-0xc78,0x00380001,
-0xc78,0x00390001,
-0xc78,0x003a0001,
-0xc78,0x003b0001,
-0xc78,0x003c0001,
-0xc78,0x003d0001,
-0xc78,0x003e0001,
-0xc78,0x003f0001,
-0xc78,0x7b400001,
-0xc78,0x7b410001,
-0xc78,0x7b420001,
-0xc78,0x7b430001,
-0xc78,0x7b440001,
-0xc78,0x7b450001,
-0xc78,0x7a460001,
-0xc78,0x79470001,
-0xc78,0x78480001,
-0xc78,0x77490001,
-0xc78,0x764a0001,
-0xc78,0x754b0001,
-0xc78,0x744c0001,
-0xc78,0x734d0001,
-0xc78,0x724e0001,
-0xc78,0x714f0001,
-0xc78,0x70500001,
-0xc78,0x6f510001,
-0xc78,0x6e520001,
-0xc78,0x6d530001,
-0xc78,0x6c540001,
-0xc78,0x6b550001,
-0xc78,0x6a560001,
-0xc78,0x69570001,
-0xc78,0x68580001,
-0xc78,0x67590001,
-0xc78,0x665a0001,
-0xc78,0x655b0001,
-0xc78,0x645c0001,
-0xc78,0x635d0001,
-0xc78,0x625e0001,
-0xc78,0x615f0001,
-0xc78,0x60600001,
-0xc78,0x49610001,
-0xc78,0x48620001,
-0xc78,0x47630001,
-0xc78,0x46640001,
-0xc78,0x45650001,
-0xc78,0x44660001,
-0xc78,0x43670001,
-0xc78,0x42680001,
-0xc78,0x41690001,
-0xc78,0x406a0001,
-0xc78,0x266b0001,
-0xc78,0x256c0001,
-0xc78,0x246d0001,
-0xc78,0x236e0001,
-0xc78,0x226f0001,
-0xc78,0x21700001,
-0xc78,0x20710001,
-0xc78,0x06720001,
-0xc78,0x05730001,
-0xc78,0x04740001,
-0xc78,0x03750001,
-0xc78,0x02760001,
-0xc78,0x01770001,
-0xc78,0x00780001,
-0xc78,0x00790001,
-0xc78,0x007a0001,
-0xc78,0x007b0001,
-0xc78,0x007c0001,
-0xc78,0x007d0001,
-0xc78,0x007e0001,
-0xc78,0x007f0001,
-0xc78,0x3800001e,
-0xc78,0x3801001e,
-0xc78,0x3802001e,
-0xc78,0x3803001e,
-0xc78,0x3804001e,
-0xc78,0x3805001e,
-0xc78,0x3806001e,
-0xc78,0x3807001e,
-0xc78,0x3808001e,
-0xc78,0x3c09001e,
-0xc78,0x3e0a001e,
-0xc78,0x400b001e,
-0xc78,0x440c001e,
-0xc78,0x480d001e,
-0xc78,0x4c0e001e,
-0xc78,0x500f001e,
-0xc78,0x5210001e,
-0xc78,0x5611001e,
-0xc78,0x5a12001e,
-0xc78,0x5e13001e,
-0xc78,0x6014001e,
-0xc78,0x6015001e,
-0xc78,0x6016001e,
-0xc78,0x6217001e,
-0xc78,0x6218001e,
-0xc78,0x6219001e,
-0xc78,0x621a001e,
-0xc78,0x621b001e,
-0xc78,0x621c001e,
-0xc78,0x621d001e,
-0xc78,0x621e001e,
-0xc78,0x621f001e,
-};
-
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+#include "../odm_precomp.h"
+
+
+u4Byte Rtl8192CEPHY_REG_2TArray[Rtl8192CEPHY_REG_2TArrayLength] = {
+0x024,0x0011800f,
+0x028,0x00ffdb83,
+0x800,0x80040002,
+0x804,0x00000003,
+0x808,0x0000fc00,
+0x80c,0x0000000a,
+0x810,0x10000330, //for Broadcom AP IOT
+0x814,0x020c3d10,
+0x818,0x02200385,
+0x81c,0x00000000,
+0x820,0x01000100,
+0x824,0x00390004,
+0x828,0x01000100,
+0x82c,0x00390004,
+0x830,0x27272727,
+0x834,0x27272727,
+0x838,0x27272727,
+0x83c,0x27272727,
+0x840,0x00010000,
+0x844,0x00010000,
+0x848,0x27272727,
+0x84c,0x27272727,
+0x850,0x00000000,
+0x854,0x00000000,
+0x858,0x569a569a,
+0x85c,0x0c1b25a4,
+0x860,0x66e60230,
+0x864,0x061f0130,
+0x868,0x27272727,
+0x86c,0x2b2b2b27,
+0x870,0x07000700,
+0x874,0x22184000,
+0x878,0x08080808,
+0x87c,0x00000000,
+0x880,0xc0083070,
+0x884,0x000004d5,
+0x888,0x00000000,
+0x88c,0xcc0000c0,
+0x890,0x00000800,
+0x894,0xfffffffe,
+0x898,0x40302010,
+0x89c,0x00706050,
+0x900,0x00000000,
+0x904,0x00000023,
+0x908,0x00000000,
+0x90c,0x81121313,
+0xa00,0x00d047c8,
+0xa04,0x80ff000c,
+0xa08,0x8c838300,
+0xa0c,0x2e68120f,
+0xa10,0x9500bb78,
+0xa14,0x11144028,
+0xa18,0x00881117,
+0xa1c,0x89140f00,
+0xa20,0x1a1b0000,
+0xa24,0x090e1317,
+0xa28,0x00000204,
+0xa2c,0x00d30000,
+0xa70,0x101fbf00,
+0xa74,0x00000007,
+0xc00,0x48071d40,
+0xc04,0x03a05633,
+0xc08,0x000000e4,
+0xc0c,0x6c6c6c6c,
+0xc10,0x08800000,
+0xc14,0x40000100,
+0xc18,0x08800000,
+0xc1c,0x40000100,
+0xc20,0x00000000,
+0xc24,0x00000000,
+0xc28,0x00000000,
+0xc2c,0x00000000,
+0xc30,0x69e9ac44,
+0xc34,0x469652cf,
+0xc38,0x49795994,
+0xc3c,0x0a97971c,
+0xc40,0x1f7c403f,
+0xc44,0x000100b7,
+0xc48,0xec020107,
+0xc4c,0x007f037f,
+0xc50,0x69543420,
+0xc54,0x43bc0094,
+0xc58,0x69543420,
+0xc5c,0x433c0094,
+0xc60,0x00000000,
+0xc64,0x5116848b,
+0xc68,0x47c00bff,
+0xc6c,0x00000036,
+0xc70,0x2c7f000d,
+0xc74,0x218610db,
+0xc78,0x0000001f,
+0xc7c,0x00b91612,
+0xc80,0x40000100,
+0xc84,0x20f60000,
+0xc88,0x40000100,
+0xc8c,0xa0e40000,
+0xc90,0x00121820,
+0xc94,0x00000000,
+0xc98,0x00121820,
+0xc9c,0x00007f7f,
+0xca0,0x00000000,
+0xca4,0x00000080,
+0xca8,0x00000000,
+0xcac,0x00000000,
+0xcb0,0x00000000,
+0xcb4,0x00000000,
+0xcb8,0x00000000,
+0xcbc,0x28000000,
+0xcc0,0x00000000,
+0xcc4,0x00000000,
+0xcc8,0x00000000,
+0xccc,0x00000000,
+0xcd0,0x00000000,
+0xcd4,0x00000000,
+0xcd8,0x64b22427,
+0xcdc,0x00766932,
+0xce0,0x00222222,
+0xce4,0x00000000,
+0xce8,0x37644302,
+0xcec,0x2f97d40c,
+0xd00,0x00080740,
+0xd04,0x00020403,
+0xd08,0x0000907f,
+0xd0c,0x20010201,
+0xd10,0xa0633333,
+0xd14,0x3333bc43,
+0xd18,0x7a8f5b6b,
+0xd2c,0xcc979975,
+0xd30,0x00000000,
+0xd34,0x80608000,
+0xd38,0x00000000,
+0xd3c,0x00027293,
+0xd40,0x00000000,
+0xd44,0x00000000,
+0xd48,0x00000000,
+0xd4c,0x00000000,
+0xd50,0x6437140a,
+0xd54,0x00000000,
+0xd58,0x00000000,
+0xd5c,0x30032064,
+0xd60,0x4653de68,
+0xd64,0x04518a3c,
+0xd68,0x00002101,
+0xd6c,0x2a201c16,
+0xd70,0x1812362e,
+0xd74,0x322c2220,
+0xd78,0x000e3c24,
+0xe00,0x2a2a2a2a,
+0xe04,0x2a2a2a2a,
+0xe08,0x03902a2a,
+0xe10,0x2a2a2a2a,
+0xe14,0x2a2a2a2a,
+0xe18,0x2a2a2a2a,
+0xe1c,0x2a2a2a2a,
+0xe28,0x00000000,
+0xe30,0x1000dc1f,
+0xe34,0x10008c1f,
+0xe38,0x02140102,
+0xe3c,0x681604c2,
+0xe40,0x01007c00,
+0xe44,0x01004800,
+0xe48,0xfb000000,
+0xe4c,0x000028d1,
+0xe50,0x1000dc1f,
+0xe54,0x10008c1f,
+0xe58,0x02140102,
+0xe5c,0x28160d05,
+0xe60,0x00000010,
+0xe68,0x001b25a4,
+0xe6c,0x63db25a4,
+0xe70,0x63db25a4,
+0xe74,0x0c1b25a4,
+0xe78,0x0c1b25a4,
+0xe7c,0x0c1b25a4,
+0xe80,0x0c1b25a4,
+0xe84,0x63db25a4,
+0xe88,0x0c1b25a4,
+0xe8c,0x63db25a4,
+0xed0,0x63db25a4,
+0xed4,0x63db25a4,
+0xed8,0x63db25a4,
+0xedc,0x001b25a4,
+0xee0,0x001b25a4,
+0xeec,0x6fdb25a4,
+0xf14,0x00000003,
+0xf4c,0x00000000,
+0xf00,0x00000300,
+};
+
+u4Byte Rtl8192CEPHY_REG_1TArray[Rtl8192CEPHY_REG_1TArrayLength] = {
+0x024,0x0011800f,
+0x028,0x00ffdb83,
+0x800,0x80040000,
+0x804,0x00000001,
+0x808,0x0000fc00,
+0x80c,0x0000000a,
+0x810,0x10000330, //for Broadcom AP IOT
+0x814,0x020c3d10,
+0x818,0x02200385,
+0x81c,0x00000000,
+0x820,0x01000100,
+0x824,0x00390004,
+0x828,0x00000000,
+0x82c,0x00000000,
+0x830,0x00000000,
+0x834,0x00000000,
+0x838,0x00000000,
+0x83c,0x00000000,
+0x840,0x00010000,
+0x844,0x00000000,
+0x848,0x00000000,
+0x84c,0x00000000,
+0x850,0x00000000,
+0x854,0x00000000,
+0x858,0x569a569a,
+0x85c,0x001b25a4,
+0x860,0x66e60230,
+0x864,0x061f0130,
+0x868,0x00000000,
+0x86c,0x32323200,
+0x870,0x07000700,
+0x874,0x22004000,
+0x878,0x00000808,
+0x87c,0x00000000,
+0x880,0xc0083070,
+0x884,0x000004d5,
+0x888,0x00000000,
+0x88c,0xccc000c0,
+0x890,0x00000800,
+0x894,0xfffffffe,
+0x898,0x40302010,
+0x89c,0x00706050,
+0x900,0x00000000,
+0x904,0x00000023,
+0x908,0x00000000,
+0x90c,0x81121111,
+0xa00,0x00d047c8,
+0xa04,0x80ff000c,
+0xa08,0x8c838300,
+0xa0c,0x2e68120f,
+0xa10,0x9500bb78,
+0xa14,0x11144028,
+0xa18,0x00881117,
+0xa1c,0x89140f00,
+0xa20,0x1a1b0000,
+0xa24,0x090e1317,
+0xa28,0x00000204,
+0xa2c,0x00d30000,
+0xa70,0x101fbf00,
+0xa74,0x00000007,
+0xc00,0x48071d40,
+0xc04,0x03a05611,
+0xc08,0x000000e4,
+0xc0c,0x6c6c6c6c,
+0xc10,0x08800000,
+0xc14,0x40000100,
+0xc18,0x08800000,
+0xc1c,0x40000100,
+0xc20,0x00000000,
+0xc24,0x00000000,
+0xc28,0x00000000,
+0xc2c,0x00000000,
+0xc30,0x69e9ac44,
+0xc34,0x469652cf,
+0xc38,0x49795994,
+0xc3c,0x0a97971c,
+0xc40,0x1f7c403f,
+0xc44,0x000100b7,
+0xc48,0xec020107,
+0xc4c,0x007f037f,
+0xc50,0x69543420,
+0xc54,0x43bc0094,
+0xc58,0x69543420,
+0xc5c,0x433c0094,
+0xc60,0x00000000,
+0xc64,0x5116848b,
+0xc68,0x47c00bff,
+0xc6c,0x00000036,
+0xc70,0x2c7f000d,
+0xc74,0x018610db,
+0xc78,0x0000001f,
+0xc7c,0x00b91612,
+0xc80,0x40000100,
+0xc84,0x20f60000,
+0xc88,0x40000100,
+0xc8c,0x20200000,
+0xc90,0x00121820,
+0xc94,0x00000000,
+0xc98,0x00121820,
+0xc9c,0x00007f7f,
+0xca0,0x00000000,
+0xca4,0x00000080,
+0xca8,0x00000000,
+0xcac,0x00000000,
+0xcb0,0x00000000,
+0xcb4,0x00000000,
+0xcb8,0x00000000,
+0xcbc,0x28000000,
+0xcc0,0x00000000,
+0xcc4,0x00000000,
+0xcc8,0x00000000,
+0xccc,0x00000000,
+0xcd0,0x00000000,
+0xcd4,0x00000000,
+0xcd8,0x64b22427,
+0xcdc,0x00766932,
+0xce0,0x00222222,
+0xce4,0x00000000,
+0xce8,0x37644302,
+0xcec,0x2f97d40c,
+0xd00,0x00000740,
+0xd04,0x00020401,
+0xd08,0x0000907f,
+0xd0c,0x20010201,
+0xd10,0xa0633333,
+0xd14,0x3333bc43,
+0xd18,0x7a8f5b6b,
+0xd2c,0xcc979975,
+0xd30,0x00000000,
+0xd34,0x80608000,
+0xd38,0x00000000,
+0xd3c,0x00027293,
+0xd40,0x00000000,
+0xd44,0x00000000,
+0xd48,0x00000000,
+0xd4c,0x00000000,
+0xd50,0x6437140a,
+0xd54,0x00000000,
+0xd58,0x00000000,
+0xd5c,0x30032064,
+0xd60,0x4653de68,
+0xd64,0x04518a3c,
+0xd68,0x00002101,
+0xd6c,0x2a201c16,
+0xd70,0x1812362e,
+0xd74,0x322c2220,
+0xd78,0x000e3c24,
+0xe00,0x2a2a2a2a,
+0xe04,0x2a2a2a2a,
+0xe08,0x03902a2a,
+0xe10,0x2a2a2a2a,
+0xe14,0x2a2a2a2a,
+0xe18,0x2a2a2a2a,
+0xe1c,0x2a2a2a2a,
+0xe28,0x00000000,
+0xe30,0x1000dc1f,
+0xe34,0x10008c1f,
+0xe38,0x02140102,
+0xe3c,0x681604c2,
+0xe40,0x01007c00,
+0xe44,0x01004800,
+0xe48,0xfb000000,
+0xe4c,0x000028d1,
+0xe50,0x1000dc1f,
+0xe54,0x10008c1f,
+0xe58,0x02140102,
+0xe5c,0x28160d05,
+0xe60,0x00000008,
+0xe68,0x001b25a4,
+0xe6c,0x631b25a0,
+0xe70,0x631b25a0,
+0xe74,0x081b25a0,
+0xe78,0x081b25a0,
+0xe7c,0x081b25a0,
+0xe80,0x081b25a0,
+0xe84,0x631b25a0,
+0xe88,0x081b25a0,
+0xe8c,0x631b25a0,
+0xed0,0x631b25a0,
+0xed4,0x631b25a0,
+0xed8,0x631b25a0,
+0xedc,0x001b25a0,
+0xee0,0x001b25a0,
+0xeec,0x6b1b25a0,
+0xf14,0x00000003,
+0xf4c,0x00000000,
+0xf00,0x00000300,
+};
+
+u4Byte Rtl8192CEPHY_ChangeTo_1T1RArray[Rtl8192CEPHY_ChangeTo_1T1RArrayLength] = {
+0x0, };
+
+u4Byte Rtl8192CEPHY_ChangeTo_1T2RArray[Rtl8192CEPHY_ChangeTo_1T2RArrayLength] = {
+0x0, };
+
+u4Byte Rtl8192CEPHY_ChangeTo_2T2RArray[Rtl8192CEPHY_ChangeTo_2T2RArrayLength] = {
+0x0, };
+
+u4Byte Rtl8192CEPHY_REG_Array_PG[Rtl8192CEPHY_REG_Array_PGLength] = {
+0xe00,0xffffffff,0x07090c0c,
+0xe04,0xffffffff,0x01020405,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x0b0c0c0e,
+0xe14,0xffffffff,0x01030506,
+0xe18,0xffffffff,0x0b0c0d0e,
+0xe1c,0xffffffff,0x01030509,
+0x830,0xffffffff,0x07090c0c,
+0x834,0xffffffff,0x01020405,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x0b0c0d0e,
+0x848,0xffffffff,0x01030509,
+0x84c,0xffffffff,0x0b0c0d0e,
+0x868,0xffffffff,0x01030509,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x04040404,
+0xe04,0xffffffff,0x00020204,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x06060606,
+0xe14,0xffffffff,0x00020406,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x04040404,
+0x834,0xffffffff,0x00020204,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x06060606,
+0x848,0xffffffff,0x00020406,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x04040404,
+0xe04,0xffffffff,0x00020204,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x04040404,
+0x834,0xffffffff,0x00020204,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+};
+
+u4Byte Rtl8192CEPHY_REG_Array_MP[Rtl8192CEPHY_REG_Array_MPLength] = {
+0xc30,0x69e9ac4a,
+0xc3c,0x0a979718,
+};
+
+u4Byte Rtl8192CERadioA_2TArray[Rtl8192CERadioA_2TArrayLength] = {
+0x000,0x00030159,
+0x001,0x00031284,
+0x002,0x00098000,
+0x003,0x00018c63,
+0x004,0x000210e7,
+0x009,0x0002044f,
+0x00a,0x0001adb1,
+0x00b,0x00054867,
+0x00c,0x0008992e,
+0x00d,0x0000e52c,
+0x00e,0x00039ce7,
+0x00f,0x00000451,
+0x019,0x00000000,
+0x01a,0x00010255,
+0x01b,0x00060a00,
+0x01c,0x000fc378,
+0x01d,0x000a1250,
+0x01e,0x0004445f,
+0x01f,0x00080001,
+0x020,0x0000b614,
+0x021,0x0006c000,
+0x022,0x00000000,
+0x023,0x00001558,
+0x024,0x00000060,
+0x025,0x00000483,
+0x026,0x0004f000,
+0x027,0x000ec7d9,
+0x028,0x000577c0,
+0x029,0x00004783,
+0x02a,0x00000001,
+0x02b,0x00021334,
+0x02a,0x00000000,
+0x02b,0x00000054,
+0x02a,0x00000001,
+0x02b,0x00000808,
+0x02b,0x00053333,
+0x02c,0x0000000c,
+0x02a,0x00000002,
+0x02b,0x00000808,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000003,
+0x02b,0x00000808,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000004,
+0x02b,0x00000808,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x00000005,
+0x02b,0x00000808,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x00000006,
+0x02b,0x00000709,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000007,
+0x02b,0x00000709,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000008,
+0x02b,0x0000060a,
+0x02b,0x0004b333,
+0x02c,0x0000000d,
+0x02a,0x00000009,
+0x02b,0x0000060a,
+0x02b,0x00053333,
+0x02c,0x0000000d,
+0x02a,0x0000000a,
+0x02b,0x0000060a,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x0000000b,
+0x02b,0x0000060a,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x0000000c,
+0x02b,0x0000060a,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x0000000d,
+0x02b,0x0000060a,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x0000000e,
+0x02b,0x0000050b,
+0x02b,0x00066666,
+0x02c,0x0000001a,
+0x02a,0x000e0000,
+0x010,0x0004000f,
+0x011,0x000e31fc,
+0x010,0x0006000f,
+0x011,0x000ff9f8,
+0x010,0x0002000f,
+0x011,0x000203f9,
+0x010,0x0003000f,
+0x011,0x000ff500,
+0x010,0x00000000,
+0x011,0x00000000,
+0x010,0x0008000f,
+0x011,0x0003f100,
+0x010,0x0009000f,
+0x011,0x00023100,
+0x012,0x00032000,
+0x012,0x00071000,
+0x012,0x000b0000,
+0x012,0x000fc000,
+0x013,0x000287b3,
+0x013,0x000244b7,
+0x013,0x000204ab,
+0x013,0x0001c49f,
+0x013,0x00018493,
+0x013,0x0001429b,
+0x013,0x00010299,
+0x013,0x0000c29c,
+0x013,0x000081a0,
+0x013,0x000040ac,
+0x013,0x00000020,
+0x014,0x0001944c,
+0x014,0x00059444,
+0x014,0x0009944c,
+0x014,0x000d9444,
+0x015,0x0000f424,
+0x015,0x0004f424,
+0x015,0x0008f424,
+0x015,0x000cf424,
+0x016,0x000e0330,
+0x016,0x000a0330,
+0x016,0x00060330,
+0x016,0x00020330,
+0x000,0x00010159,
+0x018,0x0000f401,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01f,0x00080003,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01e,0x00044457,
+0x01f,0x00080000,
+0x000,0x00030159,
+};
+
+u4Byte Rtl8192CERadioB_2TArray[Rtl8192CERadioB_2TArrayLength] = {
+0x000,0x00030159,
+0x001,0x00031284,
+0x002,0x00098000,
+0x003,0x00018c63,
+0x004,0x000210e7,
+0x009,0x0002044f,
+0x00a,0x0001adb1,
+0x00b,0x00054867,
+0x00c,0x0008992e,
+0x00d,0x0000e52c,
+0x00e,0x00039ce7,
+0x00f,0x00000451,
+0x012,0x00032000,
+0x012,0x00071000,
+0x012,0x000b0000,
+0x012,0x000fc000,
+0x013,0x000287b3,
+0x013,0x000244b7,
+0x013,0x000204ab,
+0x013,0x0001c49f,
+0x013,0x00018493,
+0x013,0x0001429b,
+0x013,0x00010299,
+0x013,0x0000c29c,
+0x013,0x000081a0,
+0x013,0x000040ac,
+0x013,0x00000020,
+0x014,0x0001944c,
+0x014,0x00059444,
+0x014,0x0009944c,
+0x014,0x000d9444,
+0x015,0x0000f424,
+0x015,0x0004f424,
+0x015,0x0008f424,
+0x015,0x000cf424,
+0x016,0x000e0330,
+0x016,0x000a0330,
+0x016,0x00060330,
+0x016,0x00020330,
+};
+
+u4Byte Rtl8192CERadioA_1TArray[Rtl8192CERadioA_1TArrayLength] = {
+0x000,0x00030159,
+0x001,0x00031284,
+0x002,0x00098000,
+0x003,0x00018c63,
+0x004,0x000210e7,
+0x009,0x0002044f,
+0x00a,0x0001af31,
+0x00b,0x00054867,
+0x00c,0x0008992e,
+0x00d,0x0000e52c,
+0x00e,0x00039ce7,
+0x00f,0x00000451,
+0x019,0x00000000,
+0x01a,0x00010255,
+0x01b,0x00060a00,
+0x01c,0x000fc378,
+0x01d,0x000a1250,
+0x01e,0x0004445f,
+0x01f,0x00080001,
+0x020,0x0000b614,
+0x021,0x0006c000,
+0x022,0x00000000,
+0x023,0x00001558,
+0x024,0x00000060,
+0x025,0x00000483,
+0x026,0x0004f000,
+0x027,0x000ec7d9,
+0x028,0x000577c0,
+0x029,0x00004783,
+0x02a,0x00000001,
+0x02b,0x00021334,
+0x02a,0x00000000,
+0x02b,0x00000054,
+0x02a,0x00000001,
+0x02b,0x00000808,
+0x02b,0x00053333,
+0x02c,0x0000000c,
+0x02a,0x00000002,
+0x02b,0x00000808,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000003,
+0x02b,0x00000808,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000004,
+0x02b,0x00000808,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x00000005,
+0x02b,0x00000808,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x00000006,
+0x02b,0x00000709,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000007,
+0x02b,0x00000709,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000008,
+0x02b,0x0000060a,
+0x02b,0x0004b333,
+0x02c,0x0000000d,
+0x02a,0x00000009,
+0x02b,0x0000060a,
+0x02b,0x00053333,
+0x02c,0x0000000d,
+0x02a,0x0000000a,
+0x02b,0x0000060a,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x0000000b,
+0x02b,0x0000060a,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x0000000c,
+0x02b,0x0000060a,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x0000000d,
+0x02b,0x0000060a,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x0000000e,
+0x02b,0x0000050b,
+0x02b,0x00066666,
+0x02c,0x0000001a,
+0x02a,0x000e0000,
+0x010,0x0004000f,
+0x011,0x000e31fc,
+0x010,0x0006000f,
+0x011,0x000ff9f8,
+0x010,0x0002000f,
+0x011,0x000203f9,
+0x010,0x0003000f,
+0x011,0x000ff500,
+0x010,0x00000000,
+0x011,0x00000000,
+0x010,0x0008000f,
+0x011,0x0003f100,
+0x010,0x0009000f,
+0x011,0x00023100,
+0x012,0x00032000,
+0x012,0x00071000,
+0x012,0x000b0000,
+0x012,0x000fc000,
+0x013,0x000287b3,
+0x013,0x000244b7,
+0x013,0x000204ab,
+0x013,0x0001c49f,
+0x013,0x00018493,
+0x013,0x0001429b,
+0x013,0x00010299,
+0x013,0x0000c29c,
+0x013,0x000081a0,
+0x013,0x000040ac,
+0x013,0x00000020,
+0x014,0x0001944c,
+0x014,0x00059444,
+0x014,0x0009944c,
+0x014,0x000d9444,
+0x015,0x0000f424,
+0x015,0x0004f424,
+0x015,0x0008f424,
+0x015,0x000cf424,
+0x016,0x000e0330,
+0x016,0x000a0330,
+0x016,0x00060330,
+0x016,0x00020330,
+0x000,0x00010159,
+0x018,0x0000f401,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01f,0x00080003,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01e,0x00044457,
+0x01f,0x00080000,
+0x000,0x00030159,
+};
+
+u4Byte Rtl8192CERadioB_1TArray[Rtl8192CERadioB_1TArrayLength] = {
+0x0, };
+
+u4Byte Rtl8192CERadioB_GM_Array[Rtl8192CERadioB_GM_ArrayLength] = {
+0x0, };
+
+u4Byte Rtl8192CEMACPHY_Array_PG[Rtl8192CEMACPHY_Array_PGLength] = {
+0x0, };
+
+u4Byte Rtl8192CEAGCTAB_2TArray[Rtl8192CEAGCTAB_2TArrayLength] = {
+0xc78,0x7b000001,
+0xc78,0x7b010001,
+0xc78,0x7b020001,
+0xc78,0x7b030001,
+0xc78,0x7b040001,
+0xc78,0x7b050001,
+0xc78,0x7a060001,
+0xc78,0x79070001,
+0xc78,0x78080001,
+0xc78,0x77090001,
+0xc78,0x760a0001,
+0xc78,0x750b0001,
+0xc78,0x740c0001,
+0xc78,0x730d0001,
+0xc78,0x720e0001,
+0xc78,0x710f0001,
+0xc78,0x70100001,
+0xc78,0x6f110001,
+0xc78,0x6e120001,
+0xc78,0x6d130001,
+0xc78,0x6c140001,
+0xc78,0x6b150001,
+0xc78,0x6a160001,
+0xc78,0x69170001,
+0xc78,0x68180001,
+0xc78,0x67190001,
+0xc78,0x661a0001,
+0xc78,0x651b0001,
+0xc78,0x641c0001,
+0xc78,0x631d0001,
+0xc78,0x621e0001,
+0xc78,0x611f0001,
+0xc78,0x60200001,
+0xc78,0x49210001,
+0xc78,0x48220001,
+0xc78,0x47230001,
+0xc78,0x46240001,
+0xc78,0x45250001,
+0xc78,0x44260001,
+0xc78,0x43270001,
+0xc78,0x42280001,
+0xc78,0x41290001,
+0xc78,0x402a0001,
+0xc78,0x262b0001,
+0xc78,0x252c0001,
+0xc78,0x242d0001,
+0xc78,0x232e0001,
+0xc78,0x222f0001,
+0xc78,0x21300001,
+0xc78,0x20310001,
+0xc78,0x06320001,
+0xc78,0x05330001,
+0xc78,0x04340001,
+0xc78,0x03350001,
+0xc78,0x02360001,
+0xc78,0x01370001,
+0xc78,0x00380001,
+0xc78,0x00390001,
+0xc78,0x003a0001,
+0xc78,0x003b0001,
+0xc78,0x003c0001,
+0xc78,0x003d0001,
+0xc78,0x003e0001,
+0xc78,0x003f0001,
+0xc78,0x7b400001,
+0xc78,0x7b410001,
+0xc78,0x7b420001,
+0xc78,0x7b430001,
+0xc78,0x7b440001,
+0xc78,0x7b450001,
+0xc78,0x7a460001,
+0xc78,0x79470001,
+0xc78,0x78480001,
+0xc78,0x77490001,
+0xc78,0x764a0001,
+0xc78,0x754b0001,
+0xc78,0x744c0001,
+0xc78,0x734d0001,
+0xc78,0x724e0001,
+0xc78,0x714f0001,
+0xc78,0x70500001,
+0xc78,0x6f510001,
+0xc78,0x6e520001,
+0xc78,0x6d530001,
+0xc78,0x6c540001,
+0xc78,0x6b550001,
+0xc78,0x6a560001,
+0xc78,0x69570001,
+0xc78,0x68580001,
+0xc78,0x67590001,
+0xc78,0x665a0001,
+0xc78,0x655b0001,
+0xc78,0x645c0001,
+0xc78,0x635d0001,
+0xc78,0x625e0001,
+0xc78,0x615f0001,
+0xc78,0x60600001,
+0xc78,0x49610001,
+0xc78,0x48620001,
+0xc78,0x47630001,
+0xc78,0x46640001,
+0xc78,0x45650001,
+0xc78,0x44660001,
+0xc78,0x43670001,
+0xc78,0x42680001,
+0xc78,0x41690001,
+0xc78,0x406a0001,
+0xc78,0x266b0001,
+0xc78,0x256c0001,
+0xc78,0x246d0001,
+0xc78,0x236e0001,
+0xc78,0x226f0001,
+0xc78,0x21700001,
+0xc78,0x20710001,
+0xc78,0x06720001,
+0xc78,0x05730001,
+0xc78,0x04740001,
+0xc78,0x03750001,
+0xc78,0x02760001,
+0xc78,0x01770001,
+0xc78,0x00780001,
+0xc78,0x00790001,
+0xc78,0x007a0001,
+0xc78,0x007b0001,
+0xc78,0x007c0001,
+0xc78,0x007d0001,
+0xc78,0x007e0001,
+0xc78,0x007f0001,
+0xc78,0x3800001e,
+0xc78,0x3801001e,
+0xc78,0x3802001e,
+0xc78,0x3803001e,
+0xc78,0x3804001e,
+0xc78,0x3805001e,
+0xc78,0x3806001e,
+0xc78,0x3807001e,
+0xc78,0x3808001e,
+0xc78,0x3c09001e,
+0xc78,0x3e0a001e,
+0xc78,0x400b001e,
+0xc78,0x440c001e,
+0xc78,0x480d001e,
+0xc78,0x4c0e001e,
+0xc78,0x500f001e,
+0xc78,0x5210001e,
+0xc78,0x5611001e,
+0xc78,0x5a12001e,
+0xc78,0x5e13001e,
+0xc78,0x6014001e,
+0xc78,0x6015001e,
+0xc78,0x6016001e,
+0xc78,0x6217001e,
+0xc78,0x6218001e,
+0xc78,0x6219001e,
+0xc78,0x621a001e,
+0xc78,0x621b001e,
+0xc78,0x621c001e,
+0xc78,0x621d001e,
+0xc78,0x621e001e,
+0xc78,0x621f001e,
+};
+
+u4Byte Rtl8192CEAGCTAB_1TArray[Rtl8192CEAGCTAB_1TArrayLength] = {
+0xc78,0x7b000001,
+0xc78,0x7b010001,
+0xc78,0x7b020001,
+0xc78,0x7b030001,
+0xc78,0x7b040001,
+0xc78,0x7b050001,
+0xc78,0x7a060001,
+0xc78,0x79070001,
+0xc78,0x78080001,
+0xc78,0x77090001,
+0xc78,0x760a0001,
+0xc78,0x750b0001,
+0xc78,0x740c0001,
+0xc78,0x730d0001,
+0xc78,0x720e0001,
+0xc78,0x710f0001,
+0xc78,0x70100001,
+0xc78,0x6f110001,
+0xc78,0x6e120001,
+0xc78,0x6d130001,
+0xc78,0x6c140001,
+0xc78,0x6b150001,
+0xc78,0x6a160001,
+0xc78,0x69170001,
+0xc78,0x68180001,
+0xc78,0x67190001,
+0xc78,0x661a0001,
+0xc78,0x651b0001,
+0xc78,0x641c0001,
+0xc78,0x631d0001,
+0xc78,0x621e0001,
+0xc78,0x611f0001,
+0xc78,0x60200001,
+0xc78,0x49210001,
+0xc78,0x48220001,
+0xc78,0x47230001,
+0xc78,0x46240001,
+0xc78,0x45250001,
+0xc78,0x44260001,
+0xc78,0x43270001,
+0xc78,0x42280001,
+0xc78,0x41290001,
+0xc78,0x402a0001,
+0xc78,0x262b0001,
+0xc78,0x252c0001,
+0xc78,0x242d0001,
+0xc78,0x232e0001,
+0xc78,0x222f0001,
+0xc78,0x21300001,
+0xc78,0x20310001,
+0xc78,0x06320001,
+0xc78,0x05330001,
+0xc78,0x04340001,
+0xc78,0x03350001,
+0xc78,0x02360001,
+0xc78,0x01370001,
+0xc78,0x00380001,
+0xc78,0x00390001,
+0xc78,0x003a0001,
+0xc78,0x003b0001,
+0xc78,0x003c0001,
+0xc78,0x003d0001,
+0xc78,0x003e0001,
+0xc78,0x003f0001,
+0xc78,0x7b400001,
+0xc78,0x7b410001,
+0xc78,0x7b420001,
+0xc78,0x7b430001,
+0xc78,0x7b440001,
+0xc78,0x7b450001,
+0xc78,0x7a460001,
+0xc78,0x79470001,
+0xc78,0x78480001,
+0xc78,0x77490001,
+0xc78,0x764a0001,
+0xc78,0x754b0001,
+0xc78,0x744c0001,
+0xc78,0x734d0001,
+0xc78,0x724e0001,
+0xc78,0x714f0001,
+0xc78,0x70500001,
+0xc78,0x6f510001,
+0xc78,0x6e520001,
+0xc78,0x6d530001,
+0xc78,0x6c540001,
+0xc78,0x6b550001,
+0xc78,0x6a560001,
+0xc78,0x69570001,
+0xc78,0x68580001,
+0xc78,0x67590001,
+0xc78,0x665a0001,
+0xc78,0x655b0001,
+0xc78,0x645c0001,
+0xc78,0x635d0001,
+0xc78,0x625e0001,
+0xc78,0x615f0001,
+0xc78,0x60600001,
+0xc78,0x49610001,
+0xc78,0x48620001,
+0xc78,0x47630001,
+0xc78,0x46640001,
+0xc78,0x45650001,
+0xc78,0x44660001,
+0xc78,0x43670001,
+0xc78,0x42680001,
+0xc78,0x41690001,
+0xc78,0x406a0001,
+0xc78,0x266b0001,
+0xc78,0x256c0001,
+0xc78,0x246d0001,
+0xc78,0x236e0001,
+0xc78,0x226f0001,
+0xc78,0x21700001,
+0xc78,0x20710001,
+0xc78,0x06720001,
+0xc78,0x05730001,
+0xc78,0x04740001,
+0xc78,0x03750001,
+0xc78,0x02760001,
+0xc78,0x01770001,
+0xc78,0x00780001,
+0xc78,0x00790001,
+0xc78,0x007a0001,
+0xc78,0x007b0001,
+0xc78,0x007c0001,
+0xc78,0x007d0001,
+0xc78,0x007e0001,
+0xc78,0x007f0001,
+0xc78,0x3800001e,
+0xc78,0x3801001e,
+0xc78,0x3802001e,
+0xc78,0x3803001e,
+0xc78,0x3804001e,
+0xc78,0x3805001e,
+0xc78,0x3806001e,
+0xc78,0x3807001e,
+0xc78,0x3808001e,
+0xc78,0x3c09001e,
+0xc78,0x3e0a001e,
+0xc78,0x400b001e,
+0xc78,0x440c001e,
+0xc78,0x480d001e,
+0xc78,0x4c0e001e,
+0xc78,0x500f001e,
+0xc78,0x5210001e,
+0xc78,0x5611001e,
+0xc78,0x5a12001e,
+0xc78,0x5e13001e,
+0xc78,0x6014001e,
+0xc78,0x6015001e,
+0xc78,0x6016001e,
+0xc78,0x6217001e,
+0xc78,0x6218001e,
+0xc78,0x6219001e,
+0xc78,0x621a001e,
+0xc78,0x621b001e,
+0xc78,0x621c001e,
+0xc78,0x621d001e,
+0xc78,0x621e001e,
+0xc78,0x621f001e,
+};
+
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEPHYImg_CE.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEPHYImg_CE.h
index 04e62d28742b..7c1f882cd5b0 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEPHYImg_CE.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CEPHYImg_CE.h
@@ -1,60 +1,60 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-#ifndef __INC_HAL8192CE_PHY_IMG_H
-#define __INC_HAL8192CE_PHY_IMG_H
-
-
-/*Created on 2011/ 6/16, 6: 8*/
-
-#define Rtl8192CEPHY_REG_2TArrayLength 374
-extern u4Byte Rtl8192CEPHY_REG_2TArray[Rtl8192CEPHY_REG_2TArrayLength];
-#define Rtl8192CEPHY_REG_1TArrayLength 374
-extern u4Byte Rtl8192CEPHY_REG_1TArray[Rtl8192CEPHY_REG_1TArrayLength];
-#define Rtl8192CEPHY_ChangeTo_1T1RArrayLength 1
-extern u4Byte Rtl8192CEPHY_ChangeTo_1T1RArray[Rtl8192CEPHY_ChangeTo_1T1RArrayLength];
-#define Rtl8192CEPHY_ChangeTo_1T2RArrayLength 1
-extern u4Byte Rtl8192CEPHY_ChangeTo_1T2RArray[Rtl8192CEPHY_ChangeTo_1T2RArrayLength];
-#define Rtl8192CEPHY_ChangeTo_2T2RArrayLength 1
-extern u4Byte Rtl8192CEPHY_ChangeTo_2T2RArray[Rtl8192CEPHY_ChangeTo_2T2RArrayLength];
-#define Rtl8192CEPHY_REG_Array_PGLength 336
-extern u4Byte Rtl8192CEPHY_REG_Array_PG[Rtl8192CEPHY_REG_Array_PGLength];
-#define Rtl8192CEPHY_REG_Array_MPLength 4
-extern u4Byte Rtl8192CEPHY_REG_Array_MP[Rtl8192CEPHY_REG_Array_MPLength];
-#define Rtl8192CERadioA_2TArrayLength 282
-extern u4Byte Rtl8192CERadioA_2TArray[Rtl8192CERadioA_2TArrayLength];
-#define Rtl8192CERadioB_2TArrayLength 78
-extern u4Byte Rtl8192CERadioB_2TArray[Rtl8192CERadioB_2TArrayLength];
-#define Rtl8192CERadioA_1TArrayLength 282
-extern u4Byte Rtl8192CERadioA_1TArray[Rtl8192CERadioA_1TArrayLength];
-#define Rtl8192CERadioB_1TArrayLength 1
-extern u4Byte Rtl8192CERadioB_1TArray[Rtl8192CERadioB_1TArrayLength];
-#define Rtl8192CERadioB_GM_ArrayLength 1
-extern u4Byte Rtl8192CERadioB_GM_Array[Rtl8192CERadioB_GM_ArrayLength];
-#define Rtl8192CEMACPHY_Array_PGLength 1
-extern u4Byte Rtl8192CEMACPHY_Array_PG[Rtl8192CEMACPHY_Array_PGLength];
-#define Rtl8192CEAGCTAB_2TArrayLength 320
-extern u4Byte Rtl8192CEAGCTAB_2TArray[Rtl8192CEAGCTAB_2TArrayLength];
-#define Rtl8192CEAGCTAB_1TArrayLength 320
-extern u4Byte Rtl8192CEAGCTAB_1TArray[Rtl8192CEAGCTAB_1TArrayLength];
-
-
-#endif //__INC_HAL8192CE_FW_IMG_H
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+#ifndef __INC_HAL8192CE_PHY_IMG_H
+#define __INC_HAL8192CE_PHY_IMG_H
+
+
+/*Created on 2011/ 6/16, 6: 8*/
+
+#define Rtl8192CEPHY_REG_2TArrayLength 374
+extern u4Byte Rtl8192CEPHY_REG_2TArray[Rtl8192CEPHY_REG_2TArrayLength];
+#define Rtl8192CEPHY_REG_1TArrayLength 374
+extern u4Byte Rtl8192CEPHY_REG_1TArray[Rtl8192CEPHY_REG_1TArrayLength];
+#define Rtl8192CEPHY_ChangeTo_1T1RArrayLength 1
+extern u4Byte Rtl8192CEPHY_ChangeTo_1T1RArray[Rtl8192CEPHY_ChangeTo_1T1RArrayLength];
+#define Rtl8192CEPHY_ChangeTo_1T2RArrayLength 1
+extern u4Byte Rtl8192CEPHY_ChangeTo_1T2RArray[Rtl8192CEPHY_ChangeTo_1T2RArrayLength];
+#define Rtl8192CEPHY_ChangeTo_2T2RArrayLength 1
+extern u4Byte Rtl8192CEPHY_ChangeTo_2T2RArray[Rtl8192CEPHY_ChangeTo_2T2RArrayLength];
+#define Rtl8192CEPHY_REG_Array_PGLength 336
+extern u4Byte Rtl8192CEPHY_REG_Array_PG[Rtl8192CEPHY_REG_Array_PGLength];
+#define Rtl8192CEPHY_REG_Array_MPLength 4
+extern u4Byte Rtl8192CEPHY_REG_Array_MP[Rtl8192CEPHY_REG_Array_MPLength];
+#define Rtl8192CERadioA_2TArrayLength 282
+extern u4Byte Rtl8192CERadioA_2TArray[Rtl8192CERadioA_2TArrayLength];
+#define Rtl8192CERadioB_2TArrayLength 78
+extern u4Byte Rtl8192CERadioB_2TArray[Rtl8192CERadioB_2TArrayLength];
+#define Rtl8192CERadioA_1TArrayLength 282
+extern u4Byte Rtl8192CERadioA_1TArray[Rtl8192CERadioA_1TArrayLength];
+#define Rtl8192CERadioB_1TArrayLength 1
+extern u4Byte Rtl8192CERadioB_1TArray[Rtl8192CERadioB_1TArrayLength];
+#define Rtl8192CERadioB_GM_ArrayLength 1
+extern u4Byte Rtl8192CERadioB_GM_Array[Rtl8192CERadioB_GM_ArrayLength];
+#define Rtl8192CEMACPHY_Array_PGLength 1
+extern u4Byte Rtl8192CEMACPHY_Array_PG[Rtl8192CEMACPHY_Array_PGLength];
+#define Rtl8192CEAGCTAB_2TArrayLength 320
+extern u4Byte Rtl8192CEAGCTAB_2TArray[Rtl8192CEAGCTAB_2TArrayLength];
+#define Rtl8192CEAGCTAB_1TArrayLength 320
+extern u4Byte Rtl8192CEAGCTAB_1TArray[Rtl8192CEAGCTAB_1TArrayLength];
+
+
+#endif //__INC_HAL8192CE_FW_IMG_H
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CReg.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CReg.h
index fed4689b248b..111a350f8ab0 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CReg.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CReg.h
@@ -1,45 +1,45 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-//============================================================
-// File Name: Hal8192CReg.h
-//
-// Description:
-//
-// This file is for 92CE/92CU register definition.
-//
-//
-//============================================================
-#ifndef __HAL_8192C_REG_H__
-#define __HAL_8192C_REG_H__
-
-//
-// Register Definition
-//
-#define ODM_R_A_AGC_CORE1_8192C 0xc50
-
-
-//
-// Bitmap Definition
-//
-#define BIT_FA_RESET_8192C BIT0
-
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+//============================================================
+// File Name: Hal8192CReg.h
+//
+// Description:
+//
+// This file is for 92CE/92CU register definition.
+//
+//
+//============================================================
+#ifndef __HAL_8192C_REG_H__
+#define __HAL_8192C_REG_H__
+
+//
+// Register Definition
+//
+#define ODM_R_A_AGC_CORE1_8192C 0xc50
+
+
+//
+// Bitmap Definition
+//
+#define BIT_FA_RESET_8192C BIT0
+
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUMACImg_CE.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUMACImg_CE.c
index 5a641b868db7..ff4856de3856 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUMACImg_CE.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUMACImg_CE.c
@@ -1,97 +1,97 @@
-/*Created on 2011/ 6/16, 6: 8*/
-
-#include "../odm_precomp.h"
-
-
-// MAC reg V14 - 2011-11-23
-u4Byte Rtl8192CUMAC_2T_Array[Rtl8192CUMAC_2T_ArrayLength] = {
-0x420,0x00000080,
-0x423,0x00000000,
-0x430,0x00000000,
-0x431,0x00000000,
-0x432,0x00000000,
-0x433,0x00000001,
-0x434,0x00000004,
-0x435,0x00000005,
-0x436,0x00000006,
-0x437,0x00000007,
-0x438,0x00000000,
-0x439,0x00000000,
-0x43a,0x00000000,
-0x43b,0x00000001,
-0x43c,0x00000004,
-0x43d,0x00000005,
-0x43e,0x00000006,
-0x43f,0x00000007,
-0x440,0x0000005d,
-0x441,0x00000001,
-0x442,0x00000000,
-0x444,0x00000015,
-0x445,0x000000f0,
-0x446,0x0000000f,
-0x447,0x00000000,
-0x458,0x00000041,
-0x459,0x000000a8,
-0x45a,0x00000072,
-0x45b,0x000000b9,
-0x460,0x00000066,
-0x461,0x00000066,
-0x462,0x00000008,
-0x463,0x00000003,
-0x4c8,0x000000ff,
-0x4c9,0x00000008,
-0x4cc,0x000000ff,
-0x4cd,0x000000ff,
-0x4ce,0x00000001,
-0x500,0x00000026,
-0x501,0x000000a2,
-0x502,0x0000002f,
-0x503,0x00000000,
-0x504,0x00000028,
-0x505,0x000000a3,
-0x506,0x0000005e,
-0x507,0x00000000,
-0x508,0x0000002b,
-0x509,0x000000a4,
-0x50a,0x0000005e,
-0x50b,0x00000000,
-0x50c,0x0000004f,
-0x50d,0x000000a4,
-0x50e,0x00000000,
-0x50f,0x00000000,
-0x512,0x0000001c,
-0x514,0x0000000a,
-0x515,0x00000010,
-0x516,0x0000000a,
-0x517,0x00000010,
-0x51a,0x00000016,
-0x524,0x0000000f,
-0x525,0x0000004f,
-0x546,0x00000040,
-0x547,0x00000000,
-0x550,0x00000010,
-0x551,0x00000010,
-0x559,0x00000002,
-0x55a,0x00000002,
-0x55d,0x000000ff,
-0x605,0x00000030,
-0x608,0x0000000e,
-0x609,0x0000002a,
-0x652,0x00000020,
-0x652,0x00000020,
-0x63c,0x00000008,
-0x63d,0x00000008,
-0x63e,0x0000000c,
-0x63f,0x0000000c,
-0x66e,0x00000005,
-0x700,0x00000021,
-0x701,0x00000043,
-0x702,0x00000065,
-0x703,0x00000087,
-0x708,0x00000021,
-0x709,0x00000043,
-0x70a,0x00000065,
-0x70b,0x00000087,
-};
-
-
+/*Created on 2011/ 6/16, 6: 8*/
+
+#include "../odm_precomp.h"
+
+
+// MAC reg V14 - 2011-11-23
+u4Byte Rtl8192CUMAC_2T_Array[Rtl8192CUMAC_2T_ArrayLength] = {
+0x420,0x00000080,
+0x423,0x00000000,
+0x430,0x00000000,
+0x431,0x00000000,
+0x432,0x00000000,
+0x433,0x00000001,
+0x434,0x00000004,
+0x435,0x00000005,
+0x436,0x00000006,
+0x437,0x00000007,
+0x438,0x00000000,
+0x439,0x00000000,
+0x43a,0x00000000,
+0x43b,0x00000001,
+0x43c,0x00000004,
+0x43d,0x00000005,
+0x43e,0x00000006,
+0x43f,0x00000007,
+0x440,0x0000005d,
+0x441,0x00000001,
+0x442,0x00000000,
+0x444,0x00000015,
+0x445,0x000000f0,
+0x446,0x0000000f,
+0x447,0x00000000,
+0x458,0x00000041,
+0x459,0x000000a8,
+0x45a,0x00000072,
+0x45b,0x000000b9,
+0x460,0x00000066,
+0x461,0x00000066,
+0x462,0x00000008,
+0x463,0x00000003,
+0x4c8,0x000000ff,
+0x4c9,0x00000008,
+0x4cc,0x000000ff,
+0x4cd,0x000000ff,
+0x4ce,0x00000001,
+0x500,0x00000026,
+0x501,0x000000a2,
+0x502,0x0000002f,
+0x503,0x00000000,
+0x504,0x00000028,
+0x505,0x000000a3,
+0x506,0x0000005e,
+0x507,0x00000000,
+0x508,0x0000002b,
+0x509,0x000000a4,
+0x50a,0x0000005e,
+0x50b,0x00000000,
+0x50c,0x0000004f,
+0x50d,0x000000a4,
+0x50e,0x00000000,
+0x50f,0x00000000,
+0x512,0x0000001c,
+0x514,0x0000000a,
+0x515,0x00000010,
+0x516,0x0000000a,
+0x517,0x00000010,
+0x51a,0x00000016,
+0x524,0x0000000f,
+0x525,0x0000004f,
+0x546,0x00000040,
+0x547,0x00000000,
+0x550,0x00000010,
+0x551,0x00000010,
+0x559,0x00000002,
+0x55a,0x00000002,
+0x55d,0x000000ff,
+0x605,0x00000030,
+0x608,0x0000000e,
+0x609,0x0000002a,
+0x652,0x00000020,
+0x652,0x00000020,
+0x63c,0x00000008,
+0x63d,0x00000008,
+0x63e,0x0000000c,
+0x63f,0x0000000c,
+0x66e,0x00000005,
+0x700,0x00000021,
+0x701,0x00000043,
+0x702,0x00000065,
+0x703,0x00000087,
+0x708,0x00000021,
+0x709,0x00000043,
+0x70a,0x00000065,
+0x70b,0x00000087,
+};
+
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUMACImg_CE.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUMACImg_CE.h
index fdb76cf5363e..869025a98f1a 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUMACImg_CE.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUMACImg_CE.h
@@ -1,12 +1,12 @@
-#ifndef __INC_HAL8192CU_MAC_IMG_H
-#define __INC_HAL8192CU_MAC_IMG_H
-
-/*Created on 2011/ 6/16, 6: 8*/
-
-
-// MAC reg V14 - 2011-11-23
-#define Rtl8192CUMAC_2T_ArrayLength 174
-extern u4Byte Rtl8192CUMAC_2T_Array[Rtl8192CUMAC_2T_ArrayLength];
-
-#endif //__INC_HAL8192CE_FW_IMG_H
-
+#ifndef __INC_HAL8192CU_MAC_IMG_H
+#define __INC_HAL8192CU_MAC_IMG_H
+
+/*Created on 2011/ 6/16, 6: 8*/
+
+
+// MAC reg V14 - 2011-11-23
+#define Rtl8192CUMAC_2T_ArrayLength 174
+extern u4Byte Rtl8192CUMAC_2T_Array[Rtl8192CUMAC_2T_ArrayLength];
+
+#endif //__INC_HAL8192CE_FW_IMG_H
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUPHYImg_CE.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUPHYImg_CE.c
index 5580c8c74c9d..7a961b6fe1d8 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUPHYImg_CE.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUPHYImg_CE.c
@@ -1,2642 +1,2642 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-/*Created on 2011/ 6/29, 10:30*/
-
-#include "../odm_precomp.h"
-
-
-u4Byte Rtl8192CUPHY_REG_2TArray[Rtl8192CUPHY_REG_2TArrayLength] = {
-0x024,0x0011800f,
-0x028,0x00ffdb83,
-0x800,0x80040002,
-0x804,0x00000003,
-0x808,0x0000fc00,
-0x80c,0x0000000a,
-0x810,0x10000330, //for Broadcom AP IOT
-0x814,0x020c3d10,
-0x818,0x02200385,
-0x81c,0x00000000,
-0x820,0x01000100,
-0x824,0x00390004,
-0x828,0x01000100,
-0x82c,0x00390004,
-0x830,0x27272727,
-0x834,0x27272727,
-0x838,0x27272727,
-0x83c,0x27272727,
-0x840,0x00010000,
-0x844,0x00010000,
-0x848,0x27272727,
-0x84c,0x27272727,
-0x850,0x00000000,
-0x854,0x00000000,
-0x858,0x569a569a,
-0x85c,0x0c1b25a4,
-0x860,0x66e60230,
-0x864,0x061f0130,
-0x868,0x27272727,
-0x86c,0x2b2b2b27,
-0x870,0x07000700,
-0x874,0x22184000,
-0x878,0x08080808,
-0x87c,0x00000000,
-0x880,0xc0083070,
-0x884,0x000004d5,
-0x888,0x00000000,
-0x88c,0xcc0000c0,
-0x890,0x00000800,
-0x894,0xfffffffe,
-0x898,0x40302010,
-0x89c,0x00706050,
-0x900,0x00000000,
-0x904,0x00000023,
-0x908,0x00000000,
-0x90c,0x81121313,
-0xa00,0x00d047c8,
-0xa04,0x80ff000c,
-0xa08,0x8c838300,
-0xa0c,0x2e68120f,
-0xa10,0x9500bb78,
-0xa14,0x11144028,
-0xa18,0x00881117,
-0xa1c,0x89140f00,
-0xa20,0x1a1b0000,
-0xa24,0x090e1317,
-0xa28,0x00000204,
-0xa2c,0x00d30000,
-0xa70,0x101fbf00,
-0xa74,0x00000007,
-0xc00,0x48071d40,
-0xc04,0x03a05633,
-0xc08,0x000000e4,
-0xc0c,0x6c6c6c6c,
-0xc10,0x08800000,
-0xc14,0x40000100,
-0xc18,0x08800000,
-0xc1c,0x40000100,
-0xc20,0x00000000,
-0xc24,0x00000000,
-0xc28,0x00000000,
-0xc2c,0x00000000,
-0xc30,0x69e9ac44,
-0xc34,0x469652cf,
-0xc38,0x49795994,
-0xc3c,0x0a97971c,
-0xc40,0x1f7c403f,
-0xc44,0x000100b7,
-0xc48,0xec020107,
-0xc4c,0x007f037f,
-0xc50,0x69543420,
-0xc54,0x43bc0094,
-0xc58,0x69543420,
-0xc5c,0x433c0094,
-0xc60,0x00000000,
-0xc64,0x5116848b,
-0xc68,0x47c00bff,
-0xc6c,0x00000036,
-0xc70,0x2c7f000d,
-0xc74,0x2186115b,
-0xc78,0x0000001f,
-0xc7c,0x00b99612,
-0xc80,0x40000100,
-0xc84,0x20f60000,
-0xc88,0x40000100,
-0xc8c,0xa0e40000,
-0xc90,0x00121820,
-0xc94,0x00000000,
-0xc98,0x00121820,
-0xc9c,0x00007f7f,
-0xca0,0x00000000,
-0xca4,0x00000080,
-0xca8,0x00000000,
-0xcac,0x00000000,
-0xcb0,0x00000000,
-0xcb4,0x00000000,
-0xcb8,0x00000000,
-0xcbc,0x28000000,
-0xcc0,0x00000000,
-0xcc4,0x00000000,
-0xcc8,0x00000000,
-0xccc,0x00000000,
-0xcd0,0x00000000,
-0xcd4,0x00000000,
-0xcd8,0x64b22427,
-0xcdc,0x00766932,
-0xce0,0x00222222,
-0xce4,0x00000000,
-0xce8,0x37644302,
-0xcec,0x2f97d40c,
-0xd00,0x00080740,
-0xd04,0x00020403,
-0xd08,0x0000907f,
-0xd0c,0x20010201,
-0xd10,0xa0633333,
-0xd14,0x3333bc43,
-0xd18,0x7a8f5b6b,
-0xd2c,0xcc979975,
-0xd30,0x00000000,
-0xd34,0x80608000,
-0xd38,0x00000000,
-0xd3c,0x00027293,
-0xd40,0x00000000,
-0xd44,0x00000000,
-0xd48,0x00000000,
-0xd4c,0x00000000,
-0xd50,0x6437140a,
-0xd54,0x00000000,
-0xd58,0x00000000,
-0xd5c,0x30032064,
-0xd60,0x4653de68,
-0xd64,0x04518a3c,
-0xd68,0x00002101,
-0xd6c,0x2a201c16,
-0xd70,0x1812362e,
-0xd74,0x322c2220,
-0xd78,0x000e3c24,
-0xe00,0x2a2a2a2a,
-0xe04,0x2a2a2a2a,
-0xe08,0x03902a2a,
-0xe10,0x2a2a2a2a,
-0xe14,0x2a2a2a2a,
-0xe18,0x2a2a2a2a,
-0xe1c,0x2a2a2a2a,
-0xe28,0x00000000,
-0xe30,0x1000dc1f,
-0xe34,0x10008c1f,
-0xe38,0x02140102,
-0xe3c,0x681604c2,
-0xe40,0x01007c00,
-0xe44,0x01004800,
-0xe48,0xfb000000,
-0xe4c,0x000028d1,
-0xe50,0x1000dc1f,
-0xe54,0x10008c1f,
-0xe58,0x02140102,
-0xe5c,0x28160d05,
-0xe60,0x00000010,
-0xe68,0x001b25a4,
-0xe6c,0x63db25a4,
-0xe70,0x63db25a4,
-0xe74,0x0c1b25a4,
-0xe78,0x0c1b25a4,
-0xe7c,0x0c1b25a4,
-0xe80,0x0c1b25a4,
-0xe84,0x63db25a4,
-0xe88,0x0c1b25a4,
-0xe8c,0x63db25a4,
-0xed0,0x63db25a4,
-0xed4,0x63db25a4,
-0xed8,0x63db25a4,
-0xedc,0x001b25a4,
-0xee0,0x001b25a4,
-0xeec,0x6fdb25a4,
-0xf14,0x00000003,
-0xf4c,0x00000000,
-0xf00,0x00000300,
-};
-
-u4Byte Rtl8192CUPHY_REG_1TArray[Rtl8192CUPHY_REG_1TArrayLength] = {
-0x024,0x0011800f,
-0x028,0x00ffdb83,
-0x800,0x80040000,
-0x804,0x00000001,
-0x808,0x0000fc00,
-0x80c,0x0000000a,
-0x810,0x10000330, //for Broadcom AP IOT
-0x814,0x020c3d10,
-0x818,0x02200385,
-0x81c,0x00000000,
-0x820,0x01000100,
-0x824,0x00390004,
-0x828,0x00000000,
-0x82c,0x00000000,
-0x830,0x00000000,
-0x834,0x00000000,
-0x838,0x00000000,
-0x83c,0x00000000,
-0x840,0x00010000,
-0x844,0x00000000,
-0x848,0x00000000,
-0x84c,0x00000000,
-0x850,0x00000000,
-0x854,0x00000000,
-0x858,0x569a569a,
-0x85c,0x001b25a4,
-0x860,0x66e60230,
-0x864,0x061f0130,
-0x868,0x00000000,
-0x86c,0x32323200,
-0x870,0x07000700,
-0x874,0x22004000,
-0x878,0x00000808,
-0x87c,0x00000000,
-0x880,0xc0083070,
-0x884,0x000004d5,
-0x888,0x00000000,
-0x88c,0xccc000c0,
-0x890,0x00000800,
-0x894,0xfffffffe,
-0x898,0x40302010,
-0x89c,0x00706050,
-0x900,0x00000000,
-0x904,0x00000023,
-0x908,0x00000000,
-0x90c,0x81121111,
-0xa00,0x00d047c8,
-0xa04,0x80ff000c,
-0xa08,0x8c838300,
-0xa0c,0x2e68120f,
-0xa10,0x9500bb78,
-0xa14,0x11144028,
-0xa18,0x00881117,
-0xa1c,0x89140f00,
-0xa20,0x1a1b0000,
-0xa24,0x090e1317,
-0xa28,0x00000204,
-0xa2c,0x00d30000,
-0xa70,0x101fbf00,
-0xa74,0x00000007,
-0xc00,0x48071d40,
-0xc04,0x03a05611,
-0xc08,0x000000e4,
-0xc0c,0x6c6c6c6c,
-0xc10,0x08800000,
-0xc14,0x40000100,
-0xc18,0x08800000,
-0xc1c,0x40000100,
-0xc20,0x00000000,
-0xc24,0x00000000,
-0xc28,0x00000000,
-0xc2c,0x00000000,
-0xc30,0x69e9ac44,
-0xc34,0x469652cf,
-0xc38,0x49795994,
-0xc3c,0x0a97971c,
-0xc40,0x1f7c403f,
-0xc44,0x000100b7,
-0xc48,0xec020107,
-0xc4c,0x007f037f,
-0xc50,0x69543420,
-0xc54,0x43bc0094,
-0xc58,0x69543420,
-0xc5c,0x433c0094,
-0xc60,0x00000000,
-0xc64,0x5116848b,
-0xc68,0x47c00bff,
-0xc6c,0x00000036,
-0xc70,0x2c7f000d,
-0xc74,0x018610db,
-0xc78,0x0000001f,
-0xc7c,0x00b91612,
-0xc80,0x40000100,
-0xc84,0x20f60000,
-0xc88,0x40000100,
-0xc8c,0x20200000,
-0xc90,0x00121820,
-0xc94,0x00000000,
-0xc98,0x00121820,
-0xc9c,0x00007f7f,
-0xca0,0x00000000,
-0xca4,0x00000080,
-0xca8,0x00000000,
-0xcac,0x00000000,
-0xcb0,0x00000000,
-0xcb4,0x00000000,
-0xcb8,0x00000000,
-0xcbc,0x28000000,
-0xcc0,0x00000000,
-0xcc4,0x00000000,
-0xcc8,0x00000000,
-0xccc,0x00000000,
-0xcd0,0x00000000,
-0xcd4,0x00000000,
-0xcd8,0x64b22427,
-0xcdc,0x00766932,
-0xce0,0x00222222,
-0xce4,0x00000000,
-0xce8,0x37644302,
-0xcec,0x2f97d40c,
-0xd00,0x00000740,
-0xd04,0x00020401,
-0xd08,0x0000907f,
-0xd0c,0x20010201,
-0xd10,0xa0633333,
-0xd14,0x3333bc43,
-0xd18,0x7a8f5b6b,
-0xd2c,0xcc979975,
-0xd30,0x00000000,
-0xd34,0x80608000,
-0xd38,0x00000000,
-0xd3c,0x00027293,
-0xd40,0x00000000,
-0xd44,0x00000000,
-0xd48,0x00000000,
-0xd4c,0x00000000,
-0xd50,0x6437140a,
-0xd54,0x00000000,
-0xd58,0x00000000,
-0xd5c,0x30032064,
-0xd60,0x4653de68,
-0xd64,0x04518a3c,
-0xd68,0x00002101,
-0xd6c,0x2a201c16,
-0xd70,0x1812362e,
-0xd74,0x322c2220,
-0xd78,0x000e3c24,
-0xe00,0x2a2a2a2a,
-0xe04,0x2a2a2a2a,
-0xe08,0x03902a2a,
-0xe10,0x2a2a2a2a,
-0xe14,0x2a2a2a2a,
-0xe18,0x2a2a2a2a,
-0xe1c,0x2a2a2a2a,
-0xe28,0x00000000,
-0xe30,0x1000dc1f,
-0xe34,0x10008c1f,
-0xe38,0x02140102,
-0xe3c,0x681604c2,
-0xe40,0x01007c00,
-0xe44,0x01004800,
-0xe48,0xfb000000,
-0xe4c,0x000028d1,
-0xe50,0x1000dc1f,
-0xe54,0x10008c1f,
-0xe58,0x02140102,
-0xe5c,0x28160d05,
-0xe60,0x00000008,
-0xe68,0x001b25a4,
-0xe6c,0x631b25a0,
-0xe70,0x631b25a0,
-0xe74,0x081b25a0,
-0xe78,0x081b25a0,
-0xe7c,0x081b25a0,
-0xe80,0x081b25a0,
-0xe84,0x631b25a0,
-0xe88,0x081b25a0,
-0xe8c,0x631b25a0,
-0xed0,0x631b25a0,
-0xed4,0x631b25a0,
-0xed8,0x631b25a0,
-0xedc,0x001b25a0,
-0xee0,0x001b25a0,
-0xeec,0x6b1b25a0,
-0xf14,0x00000003,
-0xf4c,0x00000000,
-0xf00,0x00000300,
-};
-
-u4Byte Rtl8192CUPHY_ChangeTo_1T1RArray[Rtl8192CUPHY_ChangeTo_1T1RArrayLength] = {
-0x0, };
-
-u4Byte Rtl8192CUPHY_ChangeTo_1T2RArray[Rtl8192CUPHY_ChangeTo_1T2RArrayLength] = {
-0x0, };
-
-u4Byte Rtl8192CUPHY_ChangeTo_2T2RArray[Rtl8192CUPHY_ChangeTo_2T2RArrayLength] = {
-0x0, };
-
-u4Byte Rtl8192CUPHY_REG_Array_PG[Rtl8192CUPHY_REG_Array_PGLength] = {
-0xe00,0xffffffff,0x07090c0c,
-0xe04,0xffffffff,0x01020405,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x0b0c0c0e,
-0xe14,0xffffffff,0x01030506,
-0xe18,0xffffffff,0x0b0c0d0e,
-0xe1c,0xffffffff,0x01030509,
-0x830,0xffffffff,0x07090c0c,
-0x834,0xffffffff,0x01020405,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x0b0c0d0e,
-0x848,0xffffffff,0x01030509,
-0x84c,0xffffffff,0x0b0c0d0e,
-0x868,0xffffffff,0x01030509,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x04040404,
-0xe04,0xffffffff,0x00020204,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x06060606,
-0xe14,0xffffffff,0x00020406,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x04040404,
-0x834,0xffffffff,0x00020204,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x06060606,
-0x848,0xffffffff,0x00020406,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x04040404,
-0xe04,0xffffffff,0x00020204,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x04040404,
-0x834,0xffffffff,0x00020204,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-};
-
-u4Byte Rtl8192CUPHY_REG_Array_PG_mCard[Rtl8192CUPHY_REG_Array_PG_mCardLength] = {
-0xe00,0xffffffff,0x0a0c0c0c,
-0xe04,0xffffffff,0x02040608,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x0a0c0d0e,
-0xe14,0xffffffff,0x02040608,
-0xe18,0xffffffff,0x0a0c0d0e,
-0xe1c,0xffffffff,0x02040608,
-0x830,0xffffffff,0x0a0c0c0c,
-0x834,0xffffffff,0x02040608,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x0a0c0d0e,
-0x848,0xffffffff,0x02040608,
-0x84c,0xffffffff,0x0a0c0d0e,
-0x868,0xffffffff,0x02040608,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x04040404,
-0xe04,0xffffffff,0x00020204,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x06060606,
-0xe14,0xffffffff,0x00020406,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x04040404,
-0x834,0xffffffff,0x00020204,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x06060606,
-0x848,0xffffffff,0x00020406,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x04040404,
-0xe04,0xffffffff,0x00020204,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x04040404,
-0x834,0xffffffff,0x00020204,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-};
-
-u4Byte Rtl8192CUPHY_REG_Array_MP[Rtl8192CUPHY_REG_Array_MPLength] = {
-0xc30,0x69e9ac4a,
-0xc3c,0x0a979718,
-};
-
-u4Byte Rtl8192CUPHY_REG_1T_HPArray[Rtl8192CUPHY_REG_1T_HPArrayLength] = {
-0x024,0x0011800f,
-0x028,0x00ffdb83,
-0x040,0x000c0004,
-0x800,0x80040000,
-0x804,0x00000001,
-0x808,0x0000fc00,
-0x80c,0x0000000a,
-0x810,0x10000330, //for Broadcom AP IOT
-0x814,0x020c3d10,
-0x818,0x02200385,
-0x81c,0x00000000,
-0x820,0x01000100,
-0x824,0x00390204,
-0x828,0x00000000,
-0x82c,0x00000000,
-0x830,0x00000000,
-0x834,0x00000000,
-0x838,0x00000000,
-0x83c,0x00000000,
-0x840,0x00010000,
-0x844,0x00000000,
-0x848,0x00000000,
-0x84c,0x00000000,
-0x850,0x00000000,
-0x854,0x00000000,
-0x858,0x569a569a,
-0x85c,0x001b25a4,
-0x860,0x66e60230,
-0x864,0x061f0130,
-0x868,0x00000000,
-0x86c,0x20202000,
-0x870,0x03000300,
-0x874,0x22004000,
-0x878,0x00000808,
-0x87c,0x00ffc3f1,
-0x880,0xc0083070,
-0x884,0x000004d5,
-0x888,0x00000000,
-0x88c,0xccc000c0,
-0x890,0x00000800,
-0x894,0xfffffffe,
-0x898,0x40302010,
-0x89c,0x00706050,
-0x900,0x00000000,
-0x904,0x00000023,
-0x908,0x00000000,
-0x90c,0x81121111,
-0xa00,0x00d047c8,
-0xa04,0x80ff000c,
-0xa08,0x8c838300,
-0xa0c,0x2e68120f,
-0xa10,0x9500bb78,
-0xa14,0x11144028,
-0xa18,0x00881117,
-0xa1c,0x89140f00,
-0xa20,0x15160000,
-0xa24,0x070b0f12,
-0xa28,0x00000104,
-0xa2c,0x00d30000,
-0xa70,0x101fbf00,
-0xa74,0x00000007,
-0xc00,0x48071d40,
-0xc04,0x03a05611,
-0xc08,0x000000e4,
-0xc0c,0x6c6c6c6c,
-0xc10,0x08800000,
-0xc14,0x40000100,
-0xc18,0x08800000,
-0xc1c,0x40000100,
-0xc20,0x00000000,
-0xc24,0x00000000,
-0xc28,0x00000000,
-0xc2c,0x00000000,
-0xc30,0x69e9ac44,
-0xc34,0x469652cf,
-0xc38,0x49795994,
-0xc3c,0x0a97971c,
-0xc40,0x1f7c403f,
-0xc44,0x000100b7,
-0xc48,0xec020107,
-0xc4c,0x007f037f,
-0xc50,0x6954342e,
-0xc54,0x43bc0094,
-0xc58,0x6954342f,
-0xc5c,0x433c0094,
-0xc60,0x00000000,
-0xc64,0x5116848b,
-0xc68,0x47c00bff,
-0xc6c,0x00000036,
-0xc70,0x2c46000d,
-0xc74,0x018610db,
-0xc78,0x0000001f,
-0xc7c,0x00b91612,
-0xc80,0x24000090,
-0xc84,0x20f60000,
-0xc88,0x24000090,
-0xc8c,0x20200000,
-0xc90,0x00121820,
-0xc94,0x00000000,
-0xc98,0x00121820,
-0xc9c,0x00007f7f,
-0xca0,0x00000000,
-0xca4,0x00000080,
-0xca8,0x00000000,
-0xcac,0x00000000,
-0xcb0,0x00000000,
-0xcb4,0x00000000,
-0xcb8,0x00000000,
-0xcbc,0x28000000,
-0xcc0,0x00000000,
-0xcc4,0x00000000,
-0xcc8,0x00000000,
-0xccc,0x00000000,
-0xcd0,0x00000000,
-0xcd4,0x00000000,
-0xcd8,0x64b22427,
-0xcdc,0x00766932,
-0xce0,0x00222222,
-0xce4,0x00000000,
-0xce8,0x37644302,
-0xcec,0x2f97d40c,
-0xd00,0x00000740,
-0xd04,0x00020401,
-0xd08,0x0000907f,
-0xd0c,0x20010201,
-0xd10,0xa0633333,
-0xd14,0x3333bc43,
-0xd18,0x7a8f5b6b,
-0xd2c,0xcc979975,
-0xd30,0x00000000,
-0xd34,0x80608000,
-0xd38,0x00000000,
-0xd3c,0x00027293,
-0xd40,0x00000000,
-0xd44,0x00000000,
-0xd48,0x00000000,
-0xd4c,0x00000000,
-0xd50,0x6437140a,
-0xd54,0x00000000,
-0xd58,0x00000000,
-0xd5c,0x30032064,
-0xd60,0x4653de68,
-0xd64,0x04518a3c,
-0xd68,0x00002101,
-0xd6c,0x2a201c16,
-0xd70,0x1812362e,
-0xd74,0x322c2220,
-0xd78,0x000e3c24,
-0xe00,0x24242424,
-0xe04,0x24242424,
-0xe08,0x03902024,
-0xe10,0x24242424,
-0xe14,0x24242424,
-0xe18,0x24242424,
-0xe1c,0x24242424,
-0xe28,0x00000000,
-0xe30,0x1000dc1f,
-0xe34,0x10008c1f,
-0xe38,0x02140102,
-0xe3c,0x681604c2,
-0xe40,0x01007c00,
-0xe44,0x01004800,
-0xe48,0xfb000000,
-0xe4c,0x000028d1,
-0xe50,0x1000dc1f,
-0xe54,0x10008c1f,
-0xe58,0x02140102,
-0xe5c,0x28160d05,
-0xe60,0x00000008,
-0xe68,0x001b25a4,
-0xe6c,0x631b25a0,
-0xe70,0x631b25a0,
-0xe74,0x081b25a0,
-0xe78,0x081b25a0,
-0xe7c,0x081b25a0,
-0xe80,0x081b25a0,
-0xe84,0x631b25a0,
-0xe88,0x081b25a0,
-0xe8c,0x631b25a0,
-0xed0,0x631b25a0,
-0xed4,0x631b25a0,
-0xed8,0x631b25a0,
-0xedc,0x001b25a0,
-0xee0,0x001b25a0,
-0xeec,0x6b1b25a0,
-0xee8,0x31555448,
-0xf14,0x00000003,
-0xf4c,0x00000000,
-0xf00,0x00000300,
-};
-
-u4Byte Rtl8192CUPHY_REG_1T_mCardArray[Rtl8192CUPHY_REG_1T_mCardArrayLength] = {
-0x024,0x0011800d,
-0x028,0x00ffdb83,
-0x800,0x80040000,
-0x804,0x00000001,
-0x808,0x0000fc00,
-0x80c,0x0000000a,
-0x810,0x10000330, //for Broadcom AP IOT
-0x814,0x020c3d10,
-0x818,0x02200385,
-0x81c,0x00000000,
-0x820,0x01000100,
-0x824,0x00390004,
-0x828,0x00000000,
-0x82c,0x00000000,
-0x830,0x00000000,
-0x834,0x00000000,
-0x838,0x00000000,
-0x83c,0x00000000,
-0x840,0x00010000,
-0x844,0x00000000,
-0x848,0x00000000,
-0x84c,0x00000000,
-0x850,0x00000000,
-0x854,0x00000000,
-0x858,0x569a569a,
-0x85c,0x001b25a4,
-0x860,0x66e60230,
-0x864,0x061f0130,
-0x868,0x00000000,
-0x86c,0x32323200,
-0x870,0x07000700,
-0x874,0x22004000,
-0x878,0x00000808,
-0x87c,0x00000000,
-0x880,0xc0083070,
-0x884,0x000004d5,
-0x888,0x00000000,
-0x88c,0xccc000c0,
-0x890,0x00000800,
-0x894,0xfffffffe,
-0x898,0x40302010,
-0x89c,0x00706050,
-0x900,0x00000000,
-0x904,0x00000023,
-0x908,0x00000000,
-0x90c,0x81121111,
-0xa00,0x00d047c8,
-0xa04,0x80ff000c,
-0xa08,0x8c838300,
-0xa0c,0x2e68120f,
-0xa10,0x9500bb78,
-0xa14,0x11144028,
-0xa18,0x00881117,
-0xa1c,0x89140f00,
-0xa20,0x1a1b0000,
-0xa24,0x090e1317,
-0xa28,0x00000204,
-0xa2c,0x00d30000,
-0xa70,0x101fbf00,
-0xa74,0x00000007,
-0xc00,0x48071d40,
-0xc04,0x03a05611,
-0xc08,0x000000e4,
-0xc0c,0x6c6c6c6c,
-0xc10,0x08800000,
-0xc14,0x40000100,
-0xc18,0x08800000,
-0xc1c,0x40000100,
-0xc20,0x00000000,
-0xc24,0x00000000,
-0xc28,0x00000000,
-0xc2c,0x00000000,
-0xc30,0x69e9ac44,
-0xc34,0x469652cf,
-0xc38,0x49795994,
-0xc3c,0x0a97971c,
-0xc40,0x1f7c403f,
-0xc44,0x000100b7,
-0xc48,0xec020107,
-0xc4c,0x007f037f,
-0xc50,0x69543420,
-0xc54,0x43bc0094,
-0xc58,0x69543420,
-0xc5c,0x433c0094,
-0xc60,0x00000000,
-0xc64,0x5116848b,
-0xc68,0x47c00bff,
-0xc6c,0x00000036,
-0xc70,0x2c7f000d,
-0xc74,0x018610db,
-0xc78,0x0000001f,
-0xc7c,0x00b91612,
-0xc80,0x40000100,
-0xc84,0x20f60000,
-0xc88,0x40000100,
-0xc8c,0x20200000,
-0xc90,0x00121820,
-0xc94,0x00000000,
-0xc98,0x00121820,
-0xc9c,0x00007f7f,
-0xca0,0x00000000,
-0xca4,0x00000080,
-0xca8,0x00000000,
-0xcac,0x00000000,
-0xcb0,0x00000000,
-0xcb4,0x00000000,
-0xcb8,0x00000000,
-0xcbc,0x28000000,
-0xcc0,0x00000000,
-0xcc4,0x00000000,
-0xcc8,0x00000000,
-0xccc,0x00000000,
-0xcd0,0x00000000,
-0xcd4,0x00000000,
-0xcd8,0x64b22427,
-0xcdc,0x00766932,
-0xce0,0x00222222,
-0xce4,0x00000000,
-0xce8,0x37644302,
-0xcec,0x2f97d40c,
-0xd00,0x00000740,
-0xd04,0x00020401,
-0xd08,0x0000907f,
-0xd0c,0x20010201,
-0xd10,0xa0633333,
-0xd14,0x3333bc43,
-0xd18,0x7a8f5b6b,
-0xd2c,0xcc979975,
-0xd30,0x00000000,
-0xd34,0x80608000,
-0xd38,0x00000000,
-0xd3c,0x00027293,
-0xd40,0x00000000,
-0xd44,0x00000000,
-0xd48,0x00000000,
-0xd4c,0x00000000,
-0xd50,0x6437140a,
-0xd54,0x00000000,
-0xd58,0x00000000,
-0xd5c,0x30032064,
-0xd60,0x4653de68,
-0xd64,0x04518a3c,
-0xd68,0x00002101,
-0xd6c,0x2a201c16,
-0xd70,0x1812362e,
-0xd74,0x322c2220,
-0xd78,0x000e3c24,
-0xe00,0x2a2a2a2a,
-0xe04,0x2a2a2a2a,
-0xe08,0x03902a2a,
-0xe10,0x2a2a2a2a,
-0xe14,0x2a2a2a2a,
-0xe18,0x2a2a2a2a,
-0xe1c,0x2a2a2a2a,
-0xe28,0x00000000,
-0xe30,0x1000dc1f,
-0xe34,0x10008c1f,
-0xe38,0x02140102,
-0xe3c,0x681604c2,
-0xe40,0x01007c00,
-0xe44,0x01004800,
-0xe48,0xfb000000,
-0xe4c,0x000028d1,
-0xe50,0x1000dc1f,
-0xe54,0x10008c1f,
-0xe58,0x02140102,
-0xe5c,0x28160d05,
-0xe60,0x00000008,
-0xe68,0x001b25a4,
-0xe6c,0x631b25a0,
-0xe70,0x631b25a0,
-0xe74,0x081b25a0,
-0xe78,0x081b25a0,
-0xe7c,0x081b25a0,
-0xe80,0x081b25a0,
-0xe84,0x631b25a0,
-0xe88,0x081b25a0,
-0xe8c,0x631b25a0,
-0xed0,0x631b25a0,
-0xed4,0x631b25a0,
-0xed8,0x631b25a0,
-0xedc,0x001b25a0,
-0xee0,0x001b25a0,
-0xeec,0x6b1b25a0,
-0xf14,0x00000003,
-0xf4c,0x00000000,
-0xf00,0x00000300,
-};
-
-u4Byte Rtl8192CUPHY_REG_2T_mCardArray[Rtl8192CUPHY_REG_2T_mCardArrayLength] = {
-0x024,0x0011800d,
-0x028,0x00ffdb83,
-0x800,0x80040002,
-0x804,0x00000003,
-0x808,0x0000fc00,
-0x80c,0x0000000a,
-0x810,0x10000330, //for Broadcom AP IOT
-0x814,0x020c3d10,
-0x818,0x02200385,
-0x81c,0x00000000,
-0x820,0x01000100,
-0x824,0x00390004,
-0x828,0x01000100,
-0x82c,0x00390004,
-0x830,0x27272727,
-0x834,0x27272727,
-0x838,0x27272727,
-0x83c,0x27272727,
-0x840,0x00010000,
-0x844,0x00010000,
-0x848,0x27272727,
-0x84c,0x27272727,
-0x850,0x00000000,
-0x854,0x00000000,
-0x858,0x569a569a,
-0x85c,0x0c1b25a4,
-0x860,0x66e60230,
-0x864,0x061f0130,
-0x868,0x27272727,
-0x86c,0x2b2b2b27,
-0x870,0x07000700,
-0x874,0x22184000,
-0x878,0x08080808,
-0x87c,0x00000000,
-0x880,0xc0083070,
-0x884,0x000004d5,
-0x888,0x00000000,
-0x88c,0xcc0000c0,
-0x890,0x00000800,
-0x894,0xfffffffe,
-0x898,0x40302010,
-0x89c,0x00706050,
-0x900,0x00000000,
-0x904,0x00000023,
-0x908,0x00000000,
-0x90c,0x81121313,
-0xa00,0x00d047c8,
-0xa04,0x80ff000c,
-0xa08,0x8c838300,
-0xa0c,0x2e68120f,
-0xa10,0x9500bb78,
-0xa14,0x11144028,
-0xa18,0x00881117,
-0xa1c,0x89140f00,
-0xa20,0x1a1b0000,
-0xa24,0x090e1317,
-0xa28,0x00000204,
-0xa2c,0x00d30000,
-0xa70,0x101fbf00,
-0xa74,0x00000007,
-0xc00,0x48071d40,
-0xc04,0x03a05633,
-0xc08,0x000000e4,
-0xc0c,0x6c6c6c6c,
-0xc10,0x08800000,
-0xc14,0x40000100,
-0xc18,0x08800000,
-0xc1c,0x40000100,
-0xc20,0x00000000,
-0xc24,0x00000000,
-0xc28,0x00000000,
-0xc2c,0x00000000,
-0xc30,0x69e9ac44,
-0xc34,0x469652cf,
-0xc38,0x49795994,
-0xc3c,0x0a97971c,
-0xc40,0x1f7c403f,
-0xc44,0x000100b7,
-0xc48,0xec020107,
-0xc4c,0x007f037f,
-0xc50,0x69543420,
-0xc54,0x43bc0094,
-0xc58,0x69543420,
-0xc5c,0x433c0094,
-0xc60,0x00000000,
-0xc64,0x5116848b,
-0xc68,0x47c00bff,
-0xc6c,0x00000036,
-0xc70,0x2c7f000d,
-0xc74,0x218610db,
-0xc78,0x0000001f,
-0xc7c,0x00b91612,
-0xc80,0x40000100,
-0xc84,0x20f60000,
-0xc88,0x40000100,
-0xc8c,0xa0e40000,
-0xc90,0x00121820,
-0xc94,0x00000000,
-0xc98,0x00121820,
-0xc9c,0x00007f7f,
-0xca0,0x00000000,
-0xca4,0x00000080,
-0xca8,0x00000000,
-0xcac,0x00000000,
-0xcb0,0x00000000,
-0xcb4,0x00000000,
-0xcb8,0x00000000,
-0xcbc,0x28000000,
-0xcc0,0x00000000,
-0xcc4,0x00000000,
-0xcc8,0x00000000,
-0xccc,0x00000000,
-0xcd0,0x00000000,
-0xcd4,0x00000000,
-0xcd8,0x64b22427,
-0xcdc,0x00766932,
-0xce0,0x00222222,
-0xce4,0x00000000,
-0xce8,0x37644302,
-0xcec,0x2f97d40c,
-0xd00,0x00080740,
-0xd04,0x00020403,
-0xd08,0x0000907f,
-0xd0c,0x20010201,
-0xd10,0xa0633333,
-0xd14,0x3333bc43,
-0xd18,0x7a8f5b6b,
-0xd2c,0xcc979975,
-0xd30,0x00000000,
-0xd34,0x80608000,
-0xd38,0x00000000,
-0xd3c,0x00027293,
-0xd40,0x00000000,
-0xd44,0x00000000,
-0xd48,0x00000000,
-0xd4c,0x00000000,
-0xd50,0x6437140a,
-0xd54,0x00000000,
-0xd58,0x00000000,
-0xd5c,0x30032064,
-0xd60,0x4653de68,
-0xd64,0x04518a3c,
-0xd68,0x00002101,
-0xd6c,0x2a201c16,
-0xd70,0x1812362e,
-0xd74,0x322c2220,
-0xd78,0x000e3c24,
-0xe00,0x2a2a2a2a,
-0xe04,0x2a2a2a2a,
-0xe08,0x03902a2a,
-0xe10,0x2a2a2a2a,
-0xe14,0x2a2a2a2a,
-0xe18,0x2a2a2a2a,
-0xe1c,0x2a2a2a2a,
-0xe28,0x00000000,
-0xe30,0x1000dc1f,
-0xe34,0x10008c1f,
-0xe38,0x02140102,
-0xe3c,0x681604c2,
-0xe40,0x01007c00,
-0xe44,0x01004800,
-0xe48,0xfb000000,
-0xe4c,0x000028d1,
-0xe50,0x1000dc1f,
-0xe54,0x10008c1f,
-0xe58,0x02140102,
-0xe5c,0x28160d05,
-0xe60,0x00000010,
-0xe68,0x001b25a4,
-0xe6c,0x63db25a4,
-0xe70,0x63db25a4,
-0xe74,0x0c1b25a4,
-0xe78,0x0c1b25a4,
-0xe7c,0x0c1b25a4,
-0xe80,0x0c1b25a4,
-0xe84,0x63db25a4,
-0xe88,0x0c1b25a4,
-0xe8c,0x63db25a4,
-0xed0,0x63db25a4,
-0xed4,0x63db25a4,
-0xed8,0x63db25a4,
-0xedc,0x001b25a4,
-0xee0,0x001b25a4,
-0xeec,0x6fdb25a4,
-0xf14,0x00000003,
-0xf4c,0x00000000,
-0xf00,0x00000300,
-};
-
-u4Byte Rtl8192CUPHY_REG_Array_PG_HP[Rtl8192CUPHY_REG_Array_PG_HPLength] = {
-0xe00,0xffffffff,0x06080808,
-0xe04,0xffffffff,0x00040406,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x04060608,
-0xe14,0xffffffff,0x00020204,
-0xe18,0xffffffff,0x04060608,
-0xe1c,0xffffffff,0x00020204,
-0x830,0xffffffff,0x06080808,
-0x834,0xffffffff,0x00040406,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x04060608,
-0x848,0xffffffff,0x00020204,
-0x84c,0xffffffff,0x04060608,
-0x868,0xffffffff,0x00020204,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-};
-
-u4Byte Rtl8192CURadioA_2TArray[Rtl8192CURadioA_2TArrayLength] = {
-0x000,0x00030159,
-0x001,0x00031284,
-0x002,0x00098000,
-0x003,0x00018c63,
-0x004,0x000210e7,
-0x009,0x0002044f,
-0x00a,0x0001adb1,
-0x00b,0x00054867,
-0x00c,0x0008992e,
-0x00d,0x0000e52c,
-0x00e,0x00039ce7,
-0x00f,0x00000451,
-0x019,0x00000000,
-0x01a,0x00010255,
-0x01b,0x00060a00,
-0x01c,0x000fc378,
-0x01d,0x000a1250,
-0x01e,0x0004445f,
-0x01f,0x00080001,
-0x020,0x0000b614,
-0x021,0x0006c000,
-0x022,0x00000000,
-0x023,0x00001558,
-0x024,0x00000060,
-0x025,0x00000483,
-0x026,0x0004f000,
-0x027,0x000ec7d9,
-0x028,0x000577c0,
-0x029,0x00004783,
-0x02a,0x00000001,
-0x02b,0x00021334,
-0x02a,0x00000000,
-0x02b,0x00000054,
-0x02a,0x00000001,
-0x02b,0x00000808,
-0x02b,0x00053333,
-0x02c,0x0000000c,
-0x02a,0x00000002,
-0x02b,0x00000808,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000003,
-0x02b,0x00000808,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000004,
-0x02b,0x00000808,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x00000005,
-0x02b,0x00000808,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x00000006,
-0x02b,0x00000709,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000007,
-0x02b,0x00000709,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000008,
-0x02b,0x0000060a,
-0x02b,0x0004b333,
-0x02c,0x0000000d,
-0x02a,0x00000009,
-0x02b,0x0000060a,
-0x02b,0x00053333,
-0x02c,0x0000000d,
-0x02a,0x0000000a,
-0x02b,0x0000060a,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x0000000b,
-0x02b,0x0000060a,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x0000000c,
-0x02b,0x0000060a,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x0000000d,
-0x02b,0x0000060a,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x0000000e,
-0x02b,0x0000050b,
-0x02b,0x00066666,
-0x02c,0x0000001a,
-0x02a,0x000e0000,
-0x010,0x0004000f,
-0x011,0x000e31fc,
-0x010,0x0006000f,
-0x011,0x000ff9f8,
-0x010,0x0002000f,
-0x011,0x000203f9,
-0x010,0x0003000f,
-0x011,0x000ff500,
-0x010,0x00000000,
-0x011,0x00000000,
-0x010,0x0008000f,
-0x011,0x0003f100,
-0x010,0x0009000f,
-0x011,0x00023100,
-0x012,0x00032000,
-0x012,0x00071000,
-0x012,0x000b0000,
-0x012,0x000fc000,
-0x013,0x000287b3,
-0x013,0x000244b7,
-0x013,0x000204ab,
-0x013,0x0001c49f,
-0x013,0x00018493,
-0x013,0x0001429b,
-0x013,0x00010299,
-0x013,0x0000c29c,
-0x013,0x000081a0,
-0x013,0x000040ac,
-0x013,0x00000020,
-0x014,0x0001944c,
-0x014,0x00059444,
-0x014,0x0009944c,
-0x014,0x000d9444,
-0x015,0x0000f424,
-0x015,0x0004f424,
-0x015,0x0008f424,
-0x015,0x000cf424,
-0x016,0x000e0330,
-0x016,0x000a0330,
-0x016,0x00060330,
-0x016,0x00020330,
-0x000,0x00010159,
-0x018,0x0000f401,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01f,0x00080003,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01e,0x00044457,
-0x01f,0x00080000,
-0x000,0x00030159,
-};
-
-u4Byte Rtl8192CURadioB_2TArray[Rtl8192CURadioB_2TArrayLength] = {
-0x000,0x00030159,
-0x001,0x00031284,
-0x002,0x00098000,
-0x003,0x00018c63,
-0x004,0x000210e7,
-0x009,0x0002044f,
-0x00a,0x0001adb1,
-0x00b,0x00054867,
-0x00c,0x0008992e,
-0x00d,0x0000e52c,
-0x00e,0x00039ce7,
-0x00f,0x00000451,
-0x012,0x00032000,
-0x012,0x00071000,
-0x012,0x000b0000,
-0x012,0x000fc000,
-0x013,0x000287af,
-0x013,0x000244b7,
-0x013,0x000204ab,
-0x013,0x0001c49f,
-0x013,0x00018493,
-0x013,0x00014297,
-0x013,0x00010295,
-0x013,0x0000c298,
-0x013,0x0000819c,
-0x013,0x000040a8,
-0x013,0x0000001c,
-0x014,0x0001944c,
-0x014,0x00059444,
-0x014,0x0009944c,
-0x014,0x000d9444,
-0x015,0x0000f424,
-0x015,0x0004f424,
-0x015,0x0008f424,
-0x015,0x000cf424,
-0x016,0x000e0330,
-0x016,0x000a0330,
-0x016,0x00060330,
-0x016,0x00020330,
-};
-
-u4Byte Rtl8192CURadioA_1TArray[Rtl8192CURadioA_1TArrayLength] = {
-0x000,0x00030159,
-0x001,0x00031284,
-0x002,0x00098000,
-0x003,0x00018c63,
-0x004,0x000210e7,
-0x009,0x0002044f,
-0x00a,0x0001adb1,
-0x00b,0x00054867,
-0x00c,0x0008992e,
-0x00d,0x0000e52c,
-0x00e,0x00039ce7,
-0x00f,0x00000451,
-0x019,0x00000000,
-0x01a,0x00010255,
-0x01b,0x00060a00,
-0x01c,0x000fc378,
-0x01d,0x000a1250,
-0x01e,0x0004445f,
-0x01f,0x00080001,
-0x020,0x0000b614,
-0x021,0x0006c000,
-0x022,0x00000000,
-0x023,0x00001558,
-0x024,0x00000060,
-0x025,0x00000483,
-0x026,0x0004f000,
-0x027,0x000ec7d9,
-0x028,0x000577c0,
-0x029,0x00004783,
-0x02a,0x00000001,
-0x02b,0x00021334,
-0x02a,0x00000000,
-0x02b,0x00000054,
-0x02a,0x00000001,
-0x02b,0x00000808,
-0x02b,0x00053333,
-0x02c,0x0000000c,
-0x02a,0x00000002,
-0x02b,0x00000808,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000003,
-0x02b,0x00000808,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000004,
-0x02b,0x00000808,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x00000005,
-0x02b,0x00000808,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x00000006,
-0x02b,0x00000709,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000007,
-0x02b,0x00000709,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000008,
-0x02b,0x0000060a,
-0x02b,0x0004b333,
-0x02c,0x0000000d,
-0x02a,0x00000009,
-0x02b,0x0000060a,
-0x02b,0x00053333,
-0x02c,0x0000000d,
-0x02a,0x0000000a,
-0x02b,0x0000060a,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x0000000b,
-0x02b,0x0000060a,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x0000000c,
-0x02b,0x0000060a,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x0000000d,
-0x02b,0x0000060a,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x0000000e,
-0x02b,0x0000050b,
-0x02b,0x00066666,
-0x02c,0x0000001a,
-0x02a,0x000e0000,
-0x010,0x0004000f,
-0x011,0x000e31fc,
-0x010,0x0006000f,
-0x011,0x000ff9f8,
-0x010,0x0002000f,
-0x011,0x000203f9,
-0x010,0x0003000f,
-0x011,0x000ff500,
-0x010,0x00000000,
-0x011,0x00000000,
-0x010,0x0008000f,
-0x011,0x0003f100,
-0x010,0x0009000f,
-0x011,0x00023100,
-0x012,0x00032000,
-0x012,0x00071000,
-0x012,0x000b0000,
-0x012,0x000fc000,
-0x013,0x000287b3,
-0x013,0x000244b7,
-0x013,0x000204ab,
-0x013,0x0001c49f,
-0x013,0x00018493,
-0x013,0x0001429b,
-0x013,0x00010299,
-0x013,0x0000c29c,
-0x013,0x000081a0,
-0x013,0x000040ac,
-0x013,0x00000020,
-0x014,0x0001944c,
-0x014,0x00059444,
-0x014,0x0009944c,
-0x014,0x000d9444,
-0x015,0x0000f405,
-0x015,0x0004f405,
-0x015,0x0008f405,
-0x015,0x000cf405,
-0x016,0x000e0330,
-0x016,0x000a0330,
-0x016,0x00060330,
-0x016,0x00020330,
-0x000,0x00010159,
-0x018,0x0000f401,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01f,0x00080003,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01e,0x00044457,
-0x01f,0x00080000,
-0x000,0x00030159,
-};
-
-u4Byte Rtl8192CURadioB_1TArray[Rtl8192CURadioB_1TArrayLength] = {
-0x0, };
-
-u4Byte Rtl8192CURadioA_2T_mCardArray[Rtl8192CURadioA_2T_mCardArrayLength] = {
-0x000,0x00030159,
-0x001,0x00031284,
-0x002,0x00098000,
-0x003,0x00018c63,
-0x004,0x000210e7,
-0x009,0x0002044f,
-0x00a,0x0001adb1,
-0x00b,0x00054867,
-0x00c,0x0008992e,
-0x00d,0x0000e52c,
-0x00e,0x00039ce7,
-0x00f,0x00000451,
-0x019,0x00000000,
-0x01a,0x00010255,
-0x01b,0x00060a00,
-0x01c,0x000fc378,
-0x01d,0x000a1250,
-0x01e,0x0004445f,
-0x01f,0x00080001,
-0x020,0x0000b614,
-0x021,0x0006c000,
-0x022,0x00000000,
-0x023,0x00001558,
-0x024,0x00000060,
-0x025,0x00000483,
-0x026,0x0004f000,
-0x027,0x000ec7d9,
-0x028,0x000577c0,
-0x029,0x00004783,
-0x02a,0x00000001,
-0x02b,0x00021334,
-0x02a,0x00000000,
-0x02b,0x00000054,
-0x02a,0x00000001,
-0x02b,0x00000808,
-0x02b,0x00053333,
-0x02c,0x0000000c,
-0x02a,0x00000002,
-0x02b,0x00000808,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000003,
-0x02b,0x00000808,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000004,
-0x02b,0x00000808,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x00000005,
-0x02b,0x00000808,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x00000006,
-0x02b,0x00000709,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000007,
-0x02b,0x00000709,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000008,
-0x02b,0x0000060a,
-0x02b,0x0004b333,
-0x02c,0x0000000d,
-0x02a,0x00000009,
-0x02b,0x0000060a,
-0x02b,0x00053333,
-0x02c,0x0000000d,
-0x02a,0x0000000a,
-0x02b,0x0000060a,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x0000000b,
-0x02b,0x0000060a,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x0000000c,
-0x02b,0x0000060a,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x0000000d,
-0x02b,0x0000060a,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x0000000e,
-0x02b,0x0000050b,
-0x02b,0x00066666,
-0x02c,0x0000001a,
-0x02a,0x000e0000,
-0x010,0x0004000f,
-0x011,0x000e31fc,
-0x010,0x0006000f,
-0x011,0x000ff9f8,
-0x010,0x0002000f,
-0x011,0x000203f9,
-0x010,0x0003000f,
-0x011,0x000ff500,
-0x010,0x00000000,
-0x011,0x00000000,
-0x010,0x0008000f,
-0x011,0x0003f100,
-0x010,0x0009000f,
-0x011,0x00023100,
-0x012,0x00032000,
-0x012,0x00071000,
-0x012,0x000b0000,
-0x012,0x000fc000,
-0x013,0x000287b3,
-0x013,0x000244b7,
-0x013,0x000204ab,
-0x013,0x0001c49f,
-0x013,0x00018493,
-0x013,0x0001429b,
-0x013,0x00010299,
-0x013,0x0000c29c,
-0x013,0x000081a0,
-0x013,0x000040ac,
-0x013,0x00000020,
-0x014,0x0001944c,
-0x014,0x00059444,
-0x014,0x0009944c,
-0x014,0x000d9444,
-0x015,0x0000f424,
-0x015,0x0004f424,
-0x015,0x0008f424,
-0x015,0x000cf424,
-0x016,0x000e0330,
-0x016,0x000a0330,
-0x016,0x00060330,
-0x016,0x00020330,
-0x000,0x00010159,
-0x018,0x0000f401,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01f,0x00080003,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01e,0x00044457,
-0x01f,0x00080000,
-0x000,0x00030159,
-};
-
-u32 Rtl8192CURadioB_2T_mCardArray[Rtl8192CURadioB_2T_mCardArrayLength] = {
-0x000,0x00030159,
-0x001,0x00031284,
-0x002,0x00098000,
-0x003,0x00018c63,
-0x004,0x000210e7,
-0x009,0x0002044f,
-0x00a,0x0001adb1,
-0x00b,0x00054867,
-0x00c,0x0008992e,
-0x00d,0x0000e52c,
-0x00e,0x00039ce7,
-0x00f,0x00000451,
-0x012,0x00032000,
-0x012,0x00071000,
-0x012,0x000b0000,
-0x012,0x000fc000,
-0x013,0x000287af,
-0x013,0x000244b7,
-0x013,0x000204ab,
-0x013,0x0001c49f,
-0x013,0x00018493,
-0x013,0x00014297,
-0x013,0x00010295,
-0x013,0x0000c298,
-0x013,0x0000819c,
-0x013,0x000040a8,
-0x013,0x0000001c,
-0x014,0x0001944c,
-0x014,0x00059444,
-0x014,0x0009944c,
-0x014,0x000d9444,
-0x015,0x0000f424,
-0x015,0x0004f424,
-0x015,0x0008f424,
-0x015,0x000cf424,
-0x016,0x000e0330,
-0x016,0x000a0330,
-0x016,0x00060330,
-0x016,0x00020330,
-};
-
-u4Byte Rtl8192CURadioA_1T_mCardArray[Rtl8192CURadioA_1T_mCardArrayLength] = {
-0x000,0x00030159,
-0x001,0x00031284,
-0x002,0x00098000,
-0x003,0x00018c63,
-0x004,0x000210e7,
-0x009,0x0002044f,
-0x00a,0x0001adb1,
-0x00b,0x00054867,
-0x00c,0x0008992e,
-0x00d,0x0000e52c,
-0x00e,0x00039ce7,
-0x00f,0x00000451,
-0x019,0x00000000,
-0x01a,0x00010255,
-0x01b,0x00060a00,
-0x01c,0x000fc378,
-0x01d,0x000a1250,
-0x01e,0x0004445f,
-0x01f,0x00080001,
-0x020,0x0000b614,
-0x021,0x0006c000,
-0x022,0x00000000,
-0x023,0x00001558,
-0x024,0x00000060,
-0x025,0x00000483,
-0x026,0x0004f200,
-0x027,0x000ec7d9,
-0x028,0x000577c0,
-0x029,0x00004783,
-0x02a,0x00000001,
-0x02b,0x00021334,
-0x02a,0x00000000,
-0x02b,0x00000054,
-0x02a,0x00000001,
-0x02b,0x00000808,
-0x02b,0x00053333,
-0x02c,0x0000000c,
-0x02a,0x00000002,
-0x02b,0x00000808,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000003,
-0x02b,0x00000808,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000004,
-0x02b,0x00000808,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x00000005,
-0x02b,0x00000808,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x00000006,
-0x02b,0x00000709,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000007,
-0x02b,0x00000709,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000008,
-0x02b,0x0000060a,
-0x02b,0x0004b333,
-0x02c,0x0000000d,
-0x02a,0x00000009,
-0x02b,0x0000060a,
-0x02b,0x00053333,
-0x02c,0x0000000d,
-0x02a,0x0000000a,
-0x02b,0x0000060a,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x0000000b,
-0x02b,0x0000060a,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x0000000c,
-0x02b,0x0000060a,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x0000000d,
-0x02b,0x0000060a,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x0000000e,
-0x02b,0x0000050b,
-0x02b,0x00066666,
-0x02c,0x0000001a,
-0x02a,0x000e0000,
-0x010,0x0004000f,
-0x011,0x000e31fc,
-0x010,0x0006000f,
-0x011,0x000ff9f8,
-0x010,0x0002000f,
-0x011,0x000203f9,
-0x010,0x0003000f,
-0x011,0x000ff500,
-0x010,0x00000000,
-0x011,0x00000000,
-0x010,0x0008000f,
-0x011,0x0003f100,
-0x010,0x0009000f,
-0x011,0x00023100,
-0x012,0x00032000,
-0x012,0x00071000,
-0x012,0x000b0000,
-0x012,0x000fc000,
-0x013,0x000287b3,
-0x013,0x000244b7,
-0x013,0x000204ab,
-0x013,0x0001c49f,
-0x013,0x00018493,
-0x013,0x0001429b,
-0x013,0x00010299,
-0x013,0x0000c29c,
-0x013,0x000081a0,
-0x013,0x000040ac,
-0x013,0x00000020,
-0x014,0x0001944c,
-0x014,0x00059444,
-0x014,0x0009944c,
-0x014,0x000d9444,
-0x015,0x0000f424,
-0x015,0x0004f424,
-0x015,0x0008f424,
-0x015,0x000cf424,
-0x016,0x000e0330,
-0x016,0x000a0330,
-0x016,0x00060330,
-0x016,0x00020330,
-0x000,0x00010159,
-0x018,0x0000f401,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01f,0x00080003,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01e,0x00044457,
-0x01f,0x00080000,
-0x000,0x00030159,
-};
-
-u4Byte Rtl8192CURadioB_1T_mCardArray[Rtl8192CURadioB_1T_mCardArrayLength] = {
-0x0, };
-
-u4Byte Rtl8192CURadioA_1T_HPArray[Rtl8192CURadioA_1T_HPArrayLength] = {
-0x000,0x00030159,
-0x001,0x00031284,
-0x002,0x00098000,
-0x003,0x00018c63,
-0x004,0x000210e7,
-0x009,0x0002044f,
-0x00a,0x0001adb0,
-0x00b,0x00054867,
-0x00c,0x0008992e,
-0x00d,0x0000e529,
-0x00e,0x00039ce7,
-0x00f,0x00000451,
-0x019,0x00000000,
-0x01a,0x00000255,
-0x01b,0x00060a00,
-0x01c,0x000fc378,
-0x01d,0x000a1250,
-0x01e,0x0004445f,
-0x01f,0x00080001,
-0x020,0x0000b614,
-0x021,0x0006c000,
-0x022,0x0000083c,
-0x023,0x00001558,
-0x024,0x00000060,
-0x025,0x00000483,
-0x026,0x0004f000,
-0x027,0x000ec7d9,
-0x028,0x000977c0,
-0x029,0x00004783,
-0x02a,0x00000001,
-0x02b,0x00021334,
-0x02a,0x00000000,
-0x02b,0x00000054,
-0x02a,0x00000001,
-0x02b,0x00000808,
-0x02b,0x00053333,
-0x02c,0x0000000c,
-0x02a,0x00000002,
-0x02b,0x00000808,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000003,
-0x02b,0x00000808,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000004,
-0x02b,0x00000808,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x00000005,
-0x02b,0x00000808,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x00000006,
-0x02b,0x00000709,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000007,
-0x02b,0x00000709,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000008,
-0x02b,0x0000060a,
-0x02b,0x0004b333,
-0x02c,0x0000000d,
-0x02a,0x00000009,
-0x02b,0x0000060a,
-0x02b,0x00053333,
-0x02c,0x0000000d,
-0x02a,0x0000000a,
-0x02b,0x0000060a,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x0000000b,
-0x02b,0x0000060a,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x0000000c,
-0x02b,0x0000060a,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x0000000d,
-0x02b,0x0000060a,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x0000000e,
-0x02b,0x0000050b,
-0x02b,0x00066666,
-0x02c,0x0000001a,
-0x02a,0x000e0000,
-0x010,0x0004000f,
-0x011,0x000e31fc,
-0x010,0x0006000f,
-0x011,0x000ff9f8,
-0x010,0x0002000f,
-0x011,0x000203f9,
-0x010,0x0003000f,
-0x011,0x000ff500,
-0x010,0x00000000,
-0x011,0x00000000,
-0x010,0x0008000f,
-0x011,0x0003f100,
-0x010,0x0009000f,
-0x011,0x00023100,
-0x012,0x000d8000,
-0x012,0x00090000,
-0x012,0x00051000,
-0x012,0x00012000,
-0x013,0x00028fb4,
-0x013,0x00024fa8,
-0x013,0x000207a4,
-0x013,0x0001c3b0,
-0x013,0x000183a4,
-0x013,0x00014398,
-0x013,0x000101a4,
-0x013,0x0000c198,
-0x013,0x000080a4,
-0x013,0x00004098,
-0x013,0x00000000,
-0x014,0x0001944c,
-0x014,0x00059444,
-0x014,0x0009944c,
-0x014,0x000d9444,
-0x015,0x0000f405,
-0x015,0x0004f405,
-0x015,0x0008f405,
-0x015,0x000cf405,
-0x016,0x000e0330,
-0x016,0x000a0330,
-0x016,0x00060330,
-0x016,0x00020330,
-0x000,0x00010159,
-0x018,0x0000f401,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01f,0x00080003,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01e,0x00044457,
-0x01f,0x00080000,
-0x000,0x00030159,
-};
-
-u4Byte Rtl8192CURadioB_GM_Array[Rtl8192CURadioB_GM_ArrayLength] = {
-0x0, };
-
-
-u4Byte Rtl8192CUMACPHY_Array_PG[Rtl8192CUMACPHY_Array_PGLength] = {
-0x0, };
-
-u4Byte Rtl8192CUAGCTAB_2TArray[Rtl8192CUAGCTAB_2TArrayLength] = {
-0xc78,0x7b000001,
-0xc78,0x7b010001,
-0xc78,0x7b020001,
-0xc78,0x7b030001,
-0xc78,0x7b040001,
-0xc78,0x7b050001,
-0xc78,0x7a060001,
-0xc78,0x79070001,
-0xc78,0x78080001,
-0xc78,0x77090001,
-0xc78,0x760a0001,
-0xc78,0x750b0001,
-0xc78,0x740c0001,
-0xc78,0x730d0001,
-0xc78,0x720e0001,
-0xc78,0x710f0001,
-0xc78,0x70100001,
-0xc78,0x6f110001,
-0xc78,0x6e120001,
-0xc78,0x6d130001,
-0xc78,0x6c140001,
-0xc78,0x6b150001,
-0xc78,0x6a160001,
-0xc78,0x69170001,
-0xc78,0x68180001,
-0xc78,0x67190001,
-0xc78,0x661a0001,
-0xc78,0x651b0001,
-0xc78,0x641c0001,
-0xc78,0x631d0001,
-0xc78,0x621e0001,
-0xc78,0x611f0001,
-0xc78,0x60200001,
-0xc78,0x49210001,
-0xc78,0x48220001,
-0xc78,0x47230001,
-0xc78,0x46240001,
-0xc78,0x45250001,
-0xc78,0x44260001,
-0xc78,0x43270001,
-0xc78,0x42280001,
-0xc78,0x41290001,
-0xc78,0x402a0001,
-0xc78,0x262b0001,
-0xc78,0x252c0001,
-0xc78,0x242d0001,
-0xc78,0x232e0001,
-0xc78,0x222f0001,
-0xc78,0x21300001,
-0xc78,0x20310001,
-0xc78,0x06320001,
-0xc78,0x05330001,
-0xc78,0x04340001,
-0xc78,0x03350001,
-0xc78,0x02360001,
-0xc78,0x01370001,
-0xc78,0x00380001,
-0xc78,0x00390001,
-0xc78,0x003a0001,
-0xc78,0x003b0001,
-0xc78,0x003c0001,
-0xc78,0x003d0001,
-0xc78,0x003e0001,
-0xc78,0x003f0001,
-0xc78,0x7b400001,
-0xc78,0x7b410001,
-0xc78,0x7b420001,
-0xc78,0x7b430001,
-0xc78,0x7b440001,
-0xc78,0x7b450001,
-0xc78,0x7a460001,
-0xc78,0x79470001,
-0xc78,0x78480001,
-0xc78,0x77490001,
-0xc78,0x764a0001,
-0xc78,0x754b0001,
-0xc78,0x744c0001,
-0xc78,0x734d0001,
-0xc78,0x724e0001,
-0xc78,0x714f0001,
-0xc78,0x70500001,
-0xc78,0x6f510001,
-0xc78,0x6e520001,
-0xc78,0x6d530001,
-0xc78,0x6c540001,
-0xc78,0x6b550001,
-0xc78,0x6a560001,
-0xc78,0x69570001,
-0xc78,0x68580001,
-0xc78,0x67590001,
-0xc78,0x665a0001,
-0xc78,0x655b0001,
-0xc78,0x645c0001,
-0xc78,0x635d0001,
-0xc78,0x625e0001,
-0xc78,0x615f0001,
-0xc78,0x60600001,
-0xc78,0x49610001,
-0xc78,0x48620001,
-0xc78,0x47630001,
-0xc78,0x46640001,
-0xc78,0x45650001,
-0xc78,0x44660001,
-0xc78,0x43670001,
-0xc78,0x42680001,
-0xc78,0x41690001,
-0xc78,0x406a0001,
-0xc78,0x266b0001,
-0xc78,0x256c0001,
-0xc78,0x246d0001,
-0xc78,0x236e0001,
-0xc78,0x226f0001,
-0xc78,0x21700001,
-0xc78,0x20710001,
-0xc78,0x06720001,
-0xc78,0x05730001,
-0xc78,0x04740001,
-0xc78,0x03750001,
-0xc78,0x02760001,
-0xc78,0x01770001,
-0xc78,0x00780001,
-0xc78,0x00790001,
-0xc78,0x007a0001,
-0xc78,0x007b0001,
-0xc78,0x007c0001,
-0xc78,0x007d0001,
-0xc78,0x007e0001,
-0xc78,0x007f0001,
-0xc78,0x3800001e,
-0xc78,0x3801001e,
-0xc78,0x3802001e,
-0xc78,0x3803001e,
-0xc78,0x3804001e,
-0xc78,0x3805001e,
-0xc78,0x3806001e,
-0xc78,0x3807001e,
-0xc78,0x3808001e,
-0xc78,0x3c09001e,
-0xc78,0x3e0a001e,
-0xc78,0x400b001e,
-0xc78,0x440c001e,
-0xc78,0x480d001e,
-0xc78,0x4c0e001e,
-0xc78,0x500f001e,
-0xc78,0x5210001e,
-0xc78,0x5611001e,
-0xc78,0x5a12001e,
-0xc78,0x5e13001e,
-0xc78,0x6014001e,
-0xc78,0x6015001e,
-0xc78,0x6016001e,
-0xc78,0x6217001e,
-0xc78,0x6218001e,
-0xc78,0x6219001e,
-0xc78,0x621a001e,
-0xc78,0x621b001e,
-0xc78,0x621c001e,
-0xc78,0x621d001e,
-0xc78,0x621e001e,
-0xc78,0x621f001e,
-};
-
-u4Byte Rtl8192CUAGCTAB_1TArray[Rtl8192CUAGCTAB_1TArrayLength] = {
-0xc78,0x7b000001,
-0xc78,0x7b010001,
-0xc78,0x7b020001,
-0xc78,0x7b030001,
-0xc78,0x7b040001,
-0xc78,0x7b050001,
-0xc78,0x7a060001,
-0xc78,0x79070001,
-0xc78,0x78080001,
-0xc78,0x77090001,
-0xc78,0x760a0001,
-0xc78,0x750b0001,
-0xc78,0x740c0001,
-0xc78,0x730d0001,
-0xc78,0x720e0001,
-0xc78,0x710f0001,
-0xc78,0x70100001,
-0xc78,0x6f110001,
-0xc78,0x6e120001,
-0xc78,0x6d130001,
-0xc78,0x6c140001,
-0xc78,0x6b150001,
-0xc78,0x6a160001,
-0xc78,0x69170001,
-0xc78,0x68180001,
-0xc78,0x67190001,
-0xc78,0x661a0001,
-0xc78,0x651b0001,
-0xc78,0x641c0001,
-0xc78,0x631d0001,
-0xc78,0x621e0001,
-0xc78,0x611f0001,
-0xc78,0x60200001,
-0xc78,0x49210001,
-0xc78,0x48220001,
-0xc78,0x47230001,
-0xc78,0x46240001,
-0xc78,0x45250001,
-0xc78,0x44260001,
-0xc78,0x43270001,
-0xc78,0x42280001,
-0xc78,0x41290001,
-0xc78,0x402a0001,
-0xc78,0x262b0001,
-0xc78,0x252c0001,
-0xc78,0x242d0001,
-0xc78,0x232e0001,
-0xc78,0x222f0001,
-0xc78,0x21300001,
-0xc78,0x20310001,
-0xc78,0x06320001,
-0xc78,0x05330001,
-0xc78,0x04340001,
-0xc78,0x03350001,
-0xc78,0x02360001,
-0xc78,0x01370001,
-0xc78,0x00380001,
-0xc78,0x00390001,
-0xc78,0x003a0001,
-0xc78,0x003b0001,
-0xc78,0x003c0001,
-0xc78,0x003d0001,
-0xc78,0x003e0001,
-0xc78,0x003f0001,
-0xc78,0x7b400001,
-0xc78,0x7b410001,
-0xc78,0x7b420001,
-0xc78,0x7b430001,
-0xc78,0x7b440001,
-0xc78,0x7b450001,
-0xc78,0x7a460001,
-0xc78,0x79470001,
-0xc78,0x78480001,
-0xc78,0x77490001,
-0xc78,0x764a0001,
-0xc78,0x754b0001,
-0xc78,0x744c0001,
-0xc78,0x734d0001,
-0xc78,0x724e0001,
-0xc78,0x714f0001,
-0xc78,0x70500001,
-0xc78,0x6f510001,
-0xc78,0x6e520001,
-0xc78,0x6d530001,
-0xc78,0x6c540001,
-0xc78,0x6b550001,
-0xc78,0x6a560001,
-0xc78,0x69570001,
-0xc78,0x68580001,
-0xc78,0x67590001,
-0xc78,0x665a0001,
-0xc78,0x655b0001,
-0xc78,0x645c0001,
-0xc78,0x635d0001,
-0xc78,0x625e0001,
-0xc78,0x615f0001,
-0xc78,0x60600001,
-0xc78,0x49610001,
-0xc78,0x48620001,
-0xc78,0x47630001,
-0xc78,0x46640001,
-0xc78,0x45650001,
-0xc78,0x44660001,
-0xc78,0x43670001,
-0xc78,0x42680001,
-0xc78,0x41690001,
-0xc78,0x406a0001,
-0xc78,0x266b0001,
-0xc78,0x256c0001,
-0xc78,0x246d0001,
-0xc78,0x236e0001,
-0xc78,0x226f0001,
-0xc78,0x21700001,
-0xc78,0x20710001,
-0xc78,0x06720001,
-0xc78,0x05730001,
-0xc78,0x04740001,
-0xc78,0x03750001,
-0xc78,0x02760001,
-0xc78,0x01770001,
-0xc78,0x00780001,
-0xc78,0x00790001,
-0xc78,0x007a0001,
-0xc78,0x007b0001,
-0xc78,0x007c0001,
-0xc78,0x007d0001,
-0xc78,0x007e0001,
-0xc78,0x007f0001,
-0xc78,0x3800001e,
-0xc78,0x3801001e,
-0xc78,0x3802001e,
-0xc78,0x3803001e,
-0xc78,0x3804001e,
-0xc78,0x3805001e,
-0xc78,0x3806001e,
-0xc78,0x3807001e,
-0xc78,0x3808001e,
-0xc78,0x3c09001e,
-0xc78,0x3e0a001e,
-0xc78,0x400b001e,
-0xc78,0x440c001e,
-0xc78,0x480d001e,
-0xc78,0x4c0e001e,
-0xc78,0x500f001e,
-0xc78,0x5210001e,
-0xc78,0x5611001e,
-0xc78,0x5a12001e,
-0xc78,0x5e13001e,
-0xc78,0x6014001e,
-0xc78,0x6015001e,
-0xc78,0x6016001e,
-0xc78,0x6217001e,
-0xc78,0x6218001e,
-0xc78,0x6219001e,
-0xc78,0x621a001e,
-0xc78,0x621b001e,
-0xc78,0x621c001e,
-0xc78,0x621d001e,
-0xc78,0x621e001e,
-0xc78,0x621f001e,
-};
-
-u4Byte Rtl8192CUAGCTAB_1T_HPArray[Rtl8192CUAGCTAB_1T_HPArrayLength] = {
-0xc78,0x7b000001,
-0xc78,0x7b010001,
-0xc78,0x7b020001,
-0xc78,0x7b030001,
-0xc78,0x7b040001,
-0xc78,0x7b050001,
-0xc78,0x7b060001,
-0xc78,0x7b070001,
-0xc78,0x7b080001,
-0xc78,0x7a090001,
-0xc78,0x790a0001,
-0xc78,0x780b0001,
-0xc78,0x770c0001,
-0xc78,0x760d0001,
-0xc78,0x750e0001,
-0xc78,0x740f0001,
-0xc78,0x73100001,
-0xc78,0x72110001,
-0xc78,0x71120001,
-0xc78,0x70130001,
-0xc78,0x6f140001,
-0xc78,0x6e150001,
-0xc78,0x6d160001,
-0xc78,0x6c170001,
-0xc78,0x6b180001,
-0xc78,0x6a190001,
-0xc78,0x691a0001,
-0xc78,0x681b0001,
-0xc78,0x671c0001,
-0xc78,0x661d0001,
-0xc78,0x651e0001,
-0xc78,0x641f0001,
-0xc78,0x63200001,
-0xc78,0x62210001,
-0xc78,0x61220001,
-0xc78,0x60230001,
-0xc78,0x46240001,
-0xc78,0x45250001,
-0xc78,0x44260001,
-0xc78,0x43270001,
-0xc78,0x42280001,
-0xc78,0x41290001,
-0xc78,0x402a0001,
-0xc78,0x262b0001,
-0xc78,0x252c0001,
-0xc78,0x242d0001,
-0xc78,0x232e0001,
-0xc78,0x222f0001,
-0xc78,0x21300001,
-0xc78,0x20310001,
-0xc78,0x06320001,
-0xc78,0x05330001,
-0xc78,0x04340001,
-0xc78,0x03350001,
-0xc78,0x02360001,
-0xc78,0x01370001,
-0xc78,0x00380001,
-0xc78,0x00390001,
-0xc78,0x003a0001,
-0xc78,0x003b0001,
-0xc78,0x003c0001,
-0xc78,0x003d0001,
-0xc78,0x003e0001,
-0xc78,0x003f0001,
-0xc78,0x7b400001,
-0xc78,0x7b410001,
-0xc78,0x7b420001,
-0xc78,0x7b430001,
-0xc78,0x7b440001,
-0xc78,0x7b450001,
-0xc78,0x7b460001,
-0xc78,0x7b470001,
-0xc78,0x7b480001,
-0xc78,0x7a490001,
-0xc78,0x794a0001,
-0xc78,0x784b0001,
-0xc78,0x774c0001,
-0xc78,0x764d0001,
-0xc78,0x754e0001,
-0xc78,0x744f0001,
-0xc78,0x73500001,
-0xc78,0x72510001,
-0xc78,0x71520001,
-0xc78,0x70530001,
-0xc78,0x6f540001,
-0xc78,0x6e550001,
-0xc78,0x6d560001,
-0xc78,0x6c570001,
-0xc78,0x6b580001,
-0xc78,0x6a590001,
-0xc78,0x695a0001,
-0xc78,0x685b0001,
-0xc78,0x675c0001,
-0xc78,0x665d0001,
-0xc78,0x655e0001,
-0xc78,0x645f0001,
-0xc78,0x63600001,
-0xc78,0x62610001,
-0xc78,0x61620001,
-0xc78,0x60630001,
-0xc78,0x46640001,
-0xc78,0x45650001,
-0xc78,0x44660001,
-0xc78,0x43670001,
-0xc78,0x42680001,
-0xc78,0x41690001,
-0xc78,0x406a0001,
-0xc78,0x266b0001,
-0xc78,0x256c0001,
-0xc78,0x246d0001,
-0xc78,0x236e0001,
-0xc78,0x226f0001,
-0xc78,0x21700001,
-0xc78,0x20710001,
-0xc78,0x06720001,
-0xc78,0x05730001,
-0xc78,0x04740001,
-0xc78,0x03750001,
-0xc78,0x02760001,
-0xc78,0x01770001,
-0xc78,0x00780001,
-0xc78,0x00790001,
-0xc78,0x007a0001,
-0xc78,0x007b0001,
-0xc78,0x007c0001,
-0xc78,0x007d0001,
-0xc78,0x007e0001,
-0xc78,0x007f0001,
-0xc78,0x3800001e,
-0xc78,0x3801001e,
-0xc78,0x3802001e,
-0xc78,0x3803001e,
-0xc78,0x3804001e,
-0xc78,0x3805001e,
-0xc78,0x3806001e,
-0xc78,0x3807001e,
-0xc78,0x3808001e,
-0xc78,0x3c09001e,
-0xc78,0x3e0a001e,
-0xc78,0x400b001e,
-0xc78,0x440c001e,
-0xc78,0x480d001e,
-0xc78,0x4c0e001e,
-0xc78,0x500f001e,
-0xc78,0x5210001e,
-0xc78,0x5611001e,
-0xc78,0x5a12001e,
-0xc78,0x5e13001e,
-0xc78,0x6014001e,
-0xc78,0x6015001e,
-0xc78,0x6016001e,
-0xc78,0x6217001e,
-0xc78,0x6218001e,
-0xc78,0x6219001e,
-0xc78,0x621a001e,
-0xc78,0x621b001e,
-0xc78,0x621c001e,
-0xc78,0x621d001e,
-0xc78,0x621e001e,
-0xc78,0x621f001e,
-};
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+/*Created on 2011/ 6/29, 10:30*/
+
+#include "../odm_precomp.h"
+
+
+u4Byte Rtl8192CUPHY_REG_2TArray[Rtl8192CUPHY_REG_2TArrayLength] = {
+0x024,0x0011800f,
+0x028,0x00ffdb83,
+0x800,0x80040002,
+0x804,0x00000003,
+0x808,0x0000fc00,
+0x80c,0x0000000a,
+0x810,0x10000330, //for Broadcom AP IOT
+0x814,0x020c3d10,
+0x818,0x02200385,
+0x81c,0x00000000,
+0x820,0x01000100,
+0x824,0x00390004,
+0x828,0x01000100,
+0x82c,0x00390004,
+0x830,0x27272727,
+0x834,0x27272727,
+0x838,0x27272727,
+0x83c,0x27272727,
+0x840,0x00010000,
+0x844,0x00010000,
+0x848,0x27272727,
+0x84c,0x27272727,
+0x850,0x00000000,
+0x854,0x00000000,
+0x858,0x569a569a,
+0x85c,0x0c1b25a4,
+0x860,0x66e60230,
+0x864,0x061f0130,
+0x868,0x27272727,
+0x86c,0x2b2b2b27,
+0x870,0x07000700,
+0x874,0x22184000,
+0x878,0x08080808,
+0x87c,0x00000000,
+0x880,0xc0083070,
+0x884,0x000004d5,
+0x888,0x00000000,
+0x88c,0xcc0000c0,
+0x890,0x00000800,
+0x894,0xfffffffe,
+0x898,0x40302010,
+0x89c,0x00706050,
+0x900,0x00000000,
+0x904,0x00000023,
+0x908,0x00000000,
+0x90c,0x81121313,
+0xa00,0x00d047c8,
+0xa04,0x80ff000c,
+0xa08,0x8c838300,
+0xa0c,0x2e68120f,
+0xa10,0x9500bb78,
+0xa14,0x11144028,
+0xa18,0x00881117,
+0xa1c,0x89140f00,
+0xa20,0x1a1b0000,
+0xa24,0x090e1317,
+0xa28,0x00000204,
+0xa2c,0x00d30000,
+0xa70,0x101fbf00,
+0xa74,0x00000007,
+0xc00,0x48071d40,
+0xc04,0x03a05633,
+0xc08,0x000000e4,
+0xc0c,0x6c6c6c6c,
+0xc10,0x08800000,
+0xc14,0x40000100,
+0xc18,0x08800000,
+0xc1c,0x40000100,
+0xc20,0x00000000,
+0xc24,0x00000000,
+0xc28,0x00000000,
+0xc2c,0x00000000,
+0xc30,0x69e9ac44,
+0xc34,0x469652cf,
+0xc38,0x49795994,
+0xc3c,0x0a97971c,
+0xc40,0x1f7c403f,
+0xc44,0x000100b7,
+0xc48,0xec020107,
+0xc4c,0x007f037f,
+0xc50,0x69543420,
+0xc54,0x43bc0094,
+0xc58,0x69543420,
+0xc5c,0x433c0094,
+0xc60,0x00000000,
+0xc64,0x5116848b,
+0xc68,0x47c00bff,
+0xc6c,0x00000036,
+0xc70,0x2c7f000d,
+0xc74,0x2186115b,
+0xc78,0x0000001f,
+0xc7c,0x00b99612,
+0xc80,0x40000100,
+0xc84,0x20f60000,
+0xc88,0x40000100,
+0xc8c,0xa0e40000,
+0xc90,0x00121820,
+0xc94,0x00000000,
+0xc98,0x00121820,
+0xc9c,0x00007f7f,
+0xca0,0x00000000,
+0xca4,0x00000080,
+0xca8,0x00000000,
+0xcac,0x00000000,
+0xcb0,0x00000000,
+0xcb4,0x00000000,
+0xcb8,0x00000000,
+0xcbc,0x28000000,
+0xcc0,0x00000000,
+0xcc4,0x00000000,
+0xcc8,0x00000000,
+0xccc,0x00000000,
+0xcd0,0x00000000,
+0xcd4,0x00000000,
+0xcd8,0x64b22427,
+0xcdc,0x00766932,
+0xce0,0x00222222,
+0xce4,0x00000000,
+0xce8,0x37644302,
+0xcec,0x2f97d40c,
+0xd00,0x00080740,
+0xd04,0x00020403,
+0xd08,0x0000907f,
+0xd0c,0x20010201,
+0xd10,0xa0633333,
+0xd14,0x3333bc43,
+0xd18,0x7a8f5b6b,
+0xd2c,0xcc979975,
+0xd30,0x00000000,
+0xd34,0x80608000,
+0xd38,0x00000000,
+0xd3c,0x00027293,
+0xd40,0x00000000,
+0xd44,0x00000000,
+0xd48,0x00000000,
+0xd4c,0x00000000,
+0xd50,0x6437140a,
+0xd54,0x00000000,
+0xd58,0x00000000,
+0xd5c,0x30032064,
+0xd60,0x4653de68,
+0xd64,0x04518a3c,
+0xd68,0x00002101,
+0xd6c,0x2a201c16,
+0xd70,0x1812362e,
+0xd74,0x322c2220,
+0xd78,0x000e3c24,
+0xe00,0x2a2a2a2a,
+0xe04,0x2a2a2a2a,
+0xe08,0x03902a2a,
+0xe10,0x2a2a2a2a,
+0xe14,0x2a2a2a2a,
+0xe18,0x2a2a2a2a,
+0xe1c,0x2a2a2a2a,
+0xe28,0x00000000,
+0xe30,0x1000dc1f,
+0xe34,0x10008c1f,
+0xe38,0x02140102,
+0xe3c,0x681604c2,
+0xe40,0x01007c00,
+0xe44,0x01004800,
+0xe48,0xfb000000,
+0xe4c,0x000028d1,
+0xe50,0x1000dc1f,
+0xe54,0x10008c1f,
+0xe58,0x02140102,
+0xe5c,0x28160d05,
+0xe60,0x00000010,
+0xe68,0x001b25a4,
+0xe6c,0x63db25a4,
+0xe70,0x63db25a4,
+0xe74,0x0c1b25a4,
+0xe78,0x0c1b25a4,
+0xe7c,0x0c1b25a4,
+0xe80,0x0c1b25a4,
+0xe84,0x63db25a4,
+0xe88,0x0c1b25a4,
+0xe8c,0x63db25a4,
+0xed0,0x63db25a4,
+0xed4,0x63db25a4,
+0xed8,0x63db25a4,
+0xedc,0x001b25a4,
+0xee0,0x001b25a4,
+0xeec,0x6fdb25a4,
+0xf14,0x00000003,
+0xf4c,0x00000000,
+0xf00,0x00000300,
+};
+
+u4Byte Rtl8192CUPHY_REG_1TArray[Rtl8192CUPHY_REG_1TArrayLength] = {
+0x024,0x0011800f,
+0x028,0x00ffdb83,
+0x800,0x80040000,
+0x804,0x00000001,
+0x808,0x0000fc00,
+0x80c,0x0000000a,
+0x810,0x10000330, //for Broadcom AP IOT
+0x814,0x020c3d10,
+0x818,0x02200385,
+0x81c,0x00000000,
+0x820,0x01000100,
+0x824,0x00390004,
+0x828,0x00000000,
+0x82c,0x00000000,
+0x830,0x00000000,
+0x834,0x00000000,
+0x838,0x00000000,
+0x83c,0x00000000,
+0x840,0x00010000,
+0x844,0x00000000,
+0x848,0x00000000,
+0x84c,0x00000000,
+0x850,0x00000000,
+0x854,0x00000000,
+0x858,0x569a569a,
+0x85c,0x001b25a4,
+0x860,0x66e60230,
+0x864,0x061f0130,
+0x868,0x00000000,
+0x86c,0x32323200,
+0x870,0x07000700,
+0x874,0x22004000,
+0x878,0x00000808,
+0x87c,0x00000000,
+0x880,0xc0083070,
+0x884,0x000004d5,
+0x888,0x00000000,
+0x88c,0xccc000c0,
+0x890,0x00000800,
+0x894,0xfffffffe,
+0x898,0x40302010,
+0x89c,0x00706050,
+0x900,0x00000000,
+0x904,0x00000023,
+0x908,0x00000000,
+0x90c,0x81121111,
+0xa00,0x00d047c8,
+0xa04,0x80ff000c,
+0xa08,0x8c838300,
+0xa0c,0x2e68120f,
+0xa10,0x9500bb78,
+0xa14,0x11144028,
+0xa18,0x00881117,
+0xa1c,0x89140f00,
+0xa20,0x1a1b0000,
+0xa24,0x090e1317,
+0xa28,0x00000204,
+0xa2c,0x00d30000,
+0xa70,0x101fbf00,
+0xa74,0x00000007,
+0xc00,0x48071d40,
+0xc04,0x03a05611,
+0xc08,0x000000e4,
+0xc0c,0x6c6c6c6c,
+0xc10,0x08800000,
+0xc14,0x40000100,
+0xc18,0x08800000,
+0xc1c,0x40000100,
+0xc20,0x00000000,
+0xc24,0x00000000,
+0xc28,0x00000000,
+0xc2c,0x00000000,
+0xc30,0x69e9ac44,
+0xc34,0x469652cf,
+0xc38,0x49795994,
+0xc3c,0x0a97971c,
+0xc40,0x1f7c403f,
+0xc44,0x000100b7,
+0xc48,0xec020107,
+0xc4c,0x007f037f,
+0xc50,0x69543420,
+0xc54,0x43bc0094,
+0xc58,0x69543420,
+0xc5c,0x433c0094,
+0xc60,0x00000000,
+0xc64,0x5116848b,
+0xc68,0x47c00bff,
+0xc6c,0x00000036,
+0xc70,0x2c7f000d,
+0xc74,0x018610db,
+0xc78,0x0000001f,
+0xc7c,0x00b91612,
+0xc80,0x40000100,
+0xc84,0x20f60000,
+0xc88,0x40000100,
+0xc8c,0x20200000,
+0xc90,0x00121820,
+0xc94,0x00000000,
+0xc98,0x00121820,
+0xc9c,0x00007f7f,
+0xca0,0x00000000,
+0xca4,0x00000080,
+0xca8,0x00000000,
+0xcac,0x00000000,
+0xcb0,0x00000000,
+0xcb4,0x00000000,
+0xcb8,0x00000000,
+0xcbc,0x28000000,
+0xcc0,0x00000000,
+0xcc4,0x00000000,
+0xcc8,0x00000000,
+0xccc,0x00000000,
+0xcd0,0x00000000,
+0xcd4,0x00000000,
+0xcd8,0x64b22427,
+0xcdc,0x00766932,
+0xce0,0x00222222,
+0xce4,0x00000000,
+0xce8,0x37644302,
+0xcec,0x2f97d40c,
+0xd00,0x00000740,
+0xd04,0x00020401,
+0xd08,0x0000907f,
+0xd0c,0x20010201,
+0xd10,0xa0633333,
+0xd14,0x3333bc43,
+0xd18,0x7a8f5b6b,
+0xd2c,0xcc979975,
+0xd30,0x00000000,
+0xd34,0x80608000,
+0xd38,0x00000000,
+0xd3c,0x00027293,
+0xd40,0x00000000,
+0xd44,0x00000000,
+0xd48,0x00000000,
+0xd4c,0x00000000,
+0xd50,0x6437140a,
+0xd54,0x00000000,
+0xd58,0x00000000,
+0xd5c,0x30032064,
+0xd60,0x4653de68,
+0xd64,0x04518a3c,
+0xd68,0x00002101,
+0xd6c,0x2a201c16,
+0xd70,0x1812362e,
+0xd74,0x322c2220,
+0xd78,0x000e3c24,
+0xe00,0x2a2a2a2a,
+0xe04,0x2a2a2a2a,
+0xe08,0x03902a2a,
+0xe10,0x2a2a2a2a,
+0xe14,0x2a2a2a2a,
+0xe18,0x2a2a2a2a,
+0xe1c,0x2a2a2a2a,
+0xe28,0x00000000,
+0xe30,0x1000dc1f,
+0xe34,0x10008c1f,
+0xe38,0x02140102,
+0xe3c,0x681604c2,
+0xe40,0x01007c00,
+0xe44,0x01004800,
+0xe48,0xfb000000,
+0xe4c,0x000028d1,
+0xe50,0x1000dc1f,
+0xe54,0x10008c1f,
+0xe58,0x02140102,
+0xe5c,0x28160d05,
+0xe60,0x00000008,
+0xe68,0x001b25a4,
+0xe6c,0x631b25a0,
+0xe70,0x631b25a0,
+0xe74,0x081b25a0,
+0xe78,0x081b25a0,
+0xe7c,0x081b25a0,
+0xe80,0x081b25a0,
+0xe84,0x631b25a0,
+0xe88,0x081b25a0,
+0xe8c,0x631b25a0,
+0xed0,0x631b25a0,
+0xed4,0x631b25a0,
+0xed8,0x631b25a0,
+0xedc,0x001b25a0,
+0xee0,0x001b25a0,
+0xeec,0x6b1b25a0,
+0xf14,0x00000003,
+0xf4c,0x00000000,
+0xf00,0x00000300,
+};
+
+u4Byte Rtl8192CUPHY_ChangeTo_1T1RArray[Rtl8192CUPHY_ChangeTo_1T1RArrayLength] = {
+0x0, };
+
+u4Byte Rtl8192CUPHY_ChangeTo_1T2RArray[Rtl8192CUPHY_ChangeTo_1T2RArrayLength] = {
+0x0, };
+
+u4Byte Rtl8192CUPHY_ChangeTo_2T2RArray[Rtl8192CUPHY_ChangeTo_2T2RArrayLength] = {
+0x0, };
+
+u4Byte Rtl8192CUPHY_REG_Array_PG[Rtl8192CUPHY_REG_Array_PGLength] = {
+0xe00,0xffffffff,0x07090c0c,
+0xe04,0xffffffff,0x01020405,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x0b0c0c0e,
+0xe14,0xffffffff,0x01030506,
+0xe18,0xffffffff,0x0b0c0d0e,
+0xe1c,0xffffffff,0x01030509,
+0x830,0xffffffff,0x07090c0c,
+0x834,0xffffffff,0x01020405,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x0b0c0d0e,
+0x848,0xffffffff,0x01030509,
+0x84c,0xffffffff,0x0b0c0d0e,
+0x868,0xffffffff,0x01030509,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x04040404,
+0xe04,0xffffffff,0x00020204,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x06060606,
+0xe14,0xffffffff,0x00020406,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x04040404,
+0x834,0xffffffff,0x00020204,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x06060606,
+0x848,0xffffffff,0x00020406,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x04040404,
+0xe04,0xffffffff,0x00020204,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x04040404,
+0x834,0xffffffff,0x00020204,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+};
+
+u4Byte Rtl8192CUPHY_REG_Array_PG_mCard[Rtl8192CUPHY_REG_Array_PG_mCardLength] = {
+0xe00,0xffffffff,0x0a0c0c0c,
+0xe04,0xffffffff,0x02040608,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x0a0c0d0e,
+0xe14,0xffffffff,0x02040608,
+0xe18,0xffffffff,0x0a0c0d0e,
+0xe1c,0xffffffff,0x02040608,
+0x830,0xffffffff,0x0a0c0c0c,
+0x834,0xffffffff,0x02040608,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x0a0c0d0e,
+0x848,0xffffffff,0x02040608,
+0x84c,0xffffffff,0x0a0c0d0e,
+0x868,0xffffffff,0x02040608,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x04040404,
+0xe04,0xffffffff,0x00020204,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x06060606,
+0xe14,0xffffffff,0x00020406,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x04040404,
+0x834,0xffffffff,0x00020204,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x06060606,
+0x848,0xffffffff,0x00020406,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x04040404,
+0xe04,0xffffffff,0x00020204,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x04040404,
+0x834,0xffffffff,0x00020204,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+};
+
+u4Byte Rtl8192CUPHY_REG_Array_MP[Rtl8192CUPHY_REG_Array_MPLength] = {
+0xc30,0x69e9ac4a,
+0xc3c,0x0a979718,
+};
+
+u4Byte Rtl8192CUPHY_REG_1T_HPArray[Rtl8192CUPHY_REG_1T_HPArrayLength] = {
+0x024,0x0011800f,
+0x028,0x00ffdb83,
+0x040,0x000c0004,
+0x800,0x80040000,
+0x804,0x00000001,
+0x808,0x0000fc00,
+0x80c,0x0000000a,
+0x810,0x10000330, //for Broadcom AP IOT
+0x814,0x020c3d10,
+0x818,0x02200385,
+0x81c,0x00000000,
+0x820,0x01000100,
+0x824,0x00390204,
+0x828,0x00000000,
+0x82c,0x00000000,
+0x830,0x00000000,
+0x834,0x00000000,
+0x838,0x00000000,
+0x83c,0x00000000,
+0x840,0x00010000,
+0x844,0x00000000,
+0x848,0x00000000,
+0x84c,0x00000000,
+0x850,0x00000000,
+0x854,0x00000000,
+0x858,0x569a569a,
+0x85c,0x001b25a4,
+0x860,0x66e60230,
+0x864,0x061f0130,
+0x868,0x00000000,
+0x86c,0x20202000,
+0x870,0x03000300,
+0x874,0x22004000,
+0x878,0x00000808,
+0x87c,0x00ffc3f1,
+0x880,0xc0083070,
+0x884,0x000004d5,
+0x888,0x00000000,
+0x88c,0xccc000c0,
+0x890,0x00000800,
+0x894,0xfffffffe,
+0x898,0x40302010,
+0x89c,0x00706050,
+0x900,0x00000000,
+0x904,0x00000023,
+0x908,0x00000000,
+0x90c,0x81121111,
+0xa00,0x00d047c8,
+0xa04,0x80ff000c,
+0xa08,0x8c838300,
+0xa0c,0x2e68120f,
+0xa10,0x9500bb78,
+0xa14,0x11144028,
+0xa18,0x00881117,
+0xa1c,0x89140f00,
+0xa20,0x15160000,
+0xa24,0x070b0f12,
+0xa28,0x00000104,
+0xa2c,0x00d30000,
+0xa70,0x101fbf00,
+0xa74,0x00000007,
+0xc00,0x48071d40,
+0xc04,0x03a05611,
+0xc08,0x000000e4,
+0xc0c,0x6c6c6c6c,
+0xc10,0x08800000,
+0xc14,0x40000100,
+0xc18,0x08800000,
+0xc1c,0x40000100,
+0xc20,0x00000000,
+0xc24,0x00000000,
+0xc28,0x00000000,
+0xc2c,0x00000000,
+0xc30,0x69e9ac44,
+0xc34,0x469652cf,
+0xc38,0x49795994,
+0xc3c,0x0a97971c,
+0xc40,0x1f7c403f,
+0xc44,0x000100b7,
+0xc48,0xec020107,
+0xc4c,0x007f037f,
+0xc50,0x6954342e,
+0xc54,0x43bc0094,
+0xc58,0x6954342f,
+0xc5c,0x433c0094,
+0xc60,0x00000000,
+0xc64,0x5116848b,
+0xc68,0x47c00bff,
+0xc6c,0x00000036,
+0xc70,0x2c46000d,
+0xc74,0x018610db,
+0xc78,0x0000001f,
+0xc7c,0x00b91612,
+0xc80,0x24000090,
+0xc84,0x20f60000,
+0xc88,0x24000090,
+0xc8c,0x20200000,
+0xc90,0x00121820,
+0xc94,0x00000000,
+0xc98,0x00121820,
+0xc9c,0x00007f7f,
+0xca0,0x00000000,
+0xca4,0x00000080,
+0xca8,0x00000000,
+0xcac,0x00000000,
+0xcb0,0x00000000,
+0xcb4,0x00000000,
+0xcb8,0x00000000,
+0xcbc,0x28000000,
+0xcc0,0x00000000,
+0xcc4,0x00000000,
+0xcc8,0x00000000,
+0xccc,0x00000000,
+0xcd0,0x00000000,
+0xcd4,0x00000000,
+0xcd8,0x64b22427,
+0xcdc,0x00766932,
+0xce0,0x00222222,
+0xce4,0x00000000,
+0xce8,0x37644302,
+0xcec,0x2f97d40c,
+0xd00,0x00000740,
+0xd04,0x00020401,
+0xd08,0x0000907f,
+0xd0c,0x20010201,
+0xd10,0xa0633333,
+0xd14,0x3333bc43,
+0xd18,0x7a8f5b6b,
+0xd2c,0xcc979975,
+0xd30,0x00000000,
+0xd34,0x80608000,
+0xd38,0x00000000,
+0xd3c,0x00027293,
+0xd40,0x00000000,
+0xd44,0x00000000,
+0xd48,0x00000000,
+0xd4c,0x00000000,
+0xd50,0x6437140a,
+0xd54,0x00000000,
+0xd58,0x00000000,
+0xd5c,0x30032064,
+0xd60,0x4653de68,
+0xd64,0x04518a3c,
+0xd68,0x00002101,
+0xd6c,0x2a201c16,
+0xd70,0x1812362e,
+0xd74,0x322c2220,
+0xd78,0x000e3c24,
+0xe00,0x24242424,
+0xe04,0x24242424,
+0xe08,0x03902024,
+0xe10,0x24242424,
+0xe14,0x24242424,
+0xe18,0x24242424,
+0xe1c,0x24242424,
+0xe28,0x00000000,
+0xe30,0x1000dc1f,
+0xe34,0x10008c1f,
+0xe38,0x02140102,
+0xe3c,0x681604c2,
+0xe40,0x01007c00,
+0xe44,0x01004800,
+0xe48,0xfb000000,
+0xe4c,0x000028d1,
+0xe50,0x1000dc1f,
+0xe54,0x10008c1f,
+0xe58,0x02140102,
+0xe5c,0x28160d05,
+0xe60,0x00000008,
+0xe68,0x001b25a4,
+0xe6c,0x631b25a0,
+0xe70,0x631b25a0,
+0xe74,0x081b25a0,
+0xe78,0x081b25a0,
+0xe7c,0x081b25a0,
+0xe80,0x081b25a0,
+0xe84,0x631b25a0,
+0xe88,0x081b25a0,
+0xe8c,0x631b25a0,
+0xed0,0x631b25a0,
+0xed4,0x631b25a0,
+0xed8,0x631b25a0,
+0xedc,0x001b25a0,
+0xee0,0x001b25a0,
+0xeec,0x6b1b25a0,
+0xee8,0x31555448,
+0xf14,0x00000003,
+0xf4c,0x00000000,
+0xf00,0x00000300,
+};
+
+u4Byte Rtl8192CUPHY_REG_1T_mCardArray[Rtl8192CUPHY_REG_1T_mCardArrayLength] = {
+0x024,0x0011800d,
+0x028,0x00ffdb83,
+0x800,0x80040000,
+0x804,0x00000001,
+0x808,0x0000fc00,
+0x80c,0x0000000a,
+0x810,0x10000330, //for Broadcom AP IOT
+0x814,0x020c3d10,
+0x818,0x02200385,
+0x81c,0x00000000,
+0x820,0x01000100,
+0x824,0x00390004,
+0x828,0x00000000,
+0x82c,0x00000000,
+0x830,0x00000000,
+0x834,0x00000000,
+0x838,0x00000000,
+0x83c,0x00000000,
+0x840,0x00010000,
+0x844,0x00000000,
+0x848,0x00000000,
+0x84c,0x00000000,
+0x850,0x00000000,
+0x854,0x00000000,
+0x858,0x569a569a,
+0x85c,0x001b25a4,
+0x860,0x66e60230,
+0x864,0x061f0130,
+0x868,0x00000000,
+0x86c,0x32323200,
+0x870,0x07000700,
+0x874,0x22004000,
+0x878,0x00000808,
+0x87c,0x00000000,
+0x880,0xc0083070,
+0x884,0x000004d5,
+0x888,0x00000000,
+0x88c,0xccc000c0,
+0x890,0x00000800,
+0x894,0xfffffffe,
+0x898,0x40302010,
+0x89c,0x00706050,
+0x900,0x00000000,
+0x904,0x00000023,
+0x908,0x00000000,
+0x90c,0x81121111,
+0xa00,0x00d047c8,
+0xa04,0x80ff000c,
+0xa08,0x8c838300,
+0xa0c,0x2e68120f,
+0xa10,0x9500bb78,
+0xa14,0x11144028,
+0xa18,0x00881117,
+0xa1c,0x89140f00,
+0xa20,0x1a1b0000,
+0xa24,0x090e1317,
+0xa28,0x00000204,
+0xa2c,0x00d30000,
+0xa70,0x101fbf00,
+0xa74,0x00000007,
+0xc00,0x48071d40,
+0xc04,0x03a05611,
+0xc08,0x000000e4,
+0xc0c,0x6c6c6c6c,
+0xc10,0x08800000,
+0xc14,0x40000100,
+0xc18,0x08800000,
+0xc1c,0x40000100,
+0xc20,0x00000000,
+0xc24,0x00000000,
+0xc28,0x00000000,
+0xc2c,0x00000000,
+0xc30,0x69e9ac44,
+0xc34,0x469652cf,
+0xc38,0x49795994,
+0xc3c,0x0a97971c,
+0xc40,0x1f7c403f,
+0xc44,0x000100b7,
+0xc48,0xec020107,
+0xc4c,0x007f037f,
+0xc50,0x69543420,
+0xc54,0x43bc0094,
+0xc58,0x69543420,
+0xc5c,0x433c0094,
+0xc60,0x00000000,
+0xc64,0x5116848b,
+0xc68,0x47c00bff,
+0xc6c,0x00000036,
+0xc70,0x2c7f000d,
+0xc74,0x018610db,
+0xc78,0x0000001f,
+0xc7c,0x00b91612,
+0xc80,0x40000100,
+0xc84,0x20f60000,
+0xc88,0x40000100,
+0xc8c,0x20200000,
+0xc90,0x00121820,
+0xc94,0x00000000,
+0xc98,0x00121820,
+0xc9c,0x00007f7f,
+0xca0,0x00000000,
+0xca4,0x00000080,
+0xca8,0x00000000,
+0xcac,0x00000000,
+0xcb0,0x00000000,
+0xcb4,0x00000000,
+0xcb8,0x00000000,
+0xcbc,0x28000000,
+0xcc0,0x00000000,
+0xcc4,0x00000000,
+0xcc8,0x00000000,
+0xccc,0x00000000,
+0xcd0,0x00000000,
+0xcd4,0x00000000,
+0xcd8,0x64b22427,
+0xcdc,0x00766932,
+0xce0,0x00222222,
+0xce4,0x00000000,
+0xce8,0x37644302,
+0xcec,0x2f97d40c,
+0xd00,0x00000740,
+0xd04,0x00020401,
+0xd08,0x0000907f,
+0xd0c,0x20010201,
+0xd10,0xa0633333,
+0xd14,0x3333bc43,
+0xd18,0x7a8f5b6b,
+0xd2c,0xcc979975,
+0xd30,0x00000000,
+0xd34,0x80608000,
+0xd38,0x00000000,
+0xd3c,0x00027293,
+0xd40,0x00000000,
+0xd44,0x00000000,
+0xd48,0x00000000,
+0xd4c,0x00000000,
+0xd50,0x6437140a,
+0xd54,0x00000000,
+0xd58,0x00000000,
+0xd5c,0x30032064,
+0xd60,0x4653de68,
+0xd64,0x04518a3c,
+0xd68,0x00002101,
+0xd6c,0x2a201c16,
+0xd70,0x1812362e,
+0xd74,0x322c2220,
+0xd78,0x000e3c24,
+0xe00,0x2a2a2a2a,
+0xe04,0x2a2a2a2a,
+0xe08,0x03902a2a,
+0xe10,0x2a2a2a2a,
+0xe14,0x2a2a2a2a,
+0xe18,0x2a2a2a2a,
+0xe1c,0x2a2a2a2a,
+0xe28,0x00000000,
+0xe30,0x1000dc1f,
+0xe34,0x10008c1f,
+0xe38,0x02140102,
+0xe3c,0x681604c2,
+0xe40,0x01007c00,
+0xe44,0x01004800,
+0xe48,0xfb000000,
+0xe4c,0x000028d1,
+0xe50,0x1000dc1f,
+0xe54,0x10008c1f,
+0xe58,0x02140102,
+0xe5c,0x28160d05,
+0xe60,0x00000008,
+0xe68,0x001b25a4,
+0xe6c,0x631b25a0,
+0xe70,0x631b25a0,
+0xe74,0x081b25a0,
+0xe78,0x081b25a0,
+0xe7c,0x081b25a0,
+0xe80,0x081b25a0,
+0xe84,0x631b25a0,
+0xe88,0x081b25a0,
+0xe8c,0x631b25a0,
+0xed0,0x631b25a0,
+0xed4,0x631b25a0,
+0xed8,0x631b25a0,
+0xedc,0x001b25a0,
+0xee0,0x001b25a0,
+0xeec,0x6b1b25a0,
+0xf14,0x00000003,
+0xf4c,0x00000000,
+0xf00,0x00000300,
+};
+
+u4Byte Rtl8192CUPHY_REG_2T_mCardArray[Rtl8192CUPHY_REG_2T_mCardArrayLength] = {
+0x024,0x0011800d,
+0x028,0x00ffdb83,
+0x800,0x80040002,
+0x804,0x00000003,
+0x808,0x0000fc00,
+0x80c,0x0000000a,
+0x810,0x10000330, //for Broadcom AP IOT
+0x814,0x020c3d10,
+0x818,0x02200385,
+0x81c,0x00000000,
+0x820,0x01000100,
+0x824,0x00390004,
+0x828,0x01000100,
+0x82c,0x00390004,
+0x830,0x27272727,
+0x834,0x27272727,
+0x838,0x27272727,
+0x83c,0x27272727,
+0x840,0x00010000,
+0x844,0x00010000,
+0x848,0x27272727,
+0x84c,0x27272727,
+0x850,0x00000000,
+0x854,0x00000000,
+0x858,0x569a569a,
+0x85c,0x0c1b25a4,
+0x860,0x66e60230,
+0x864,0x061f0130,
+0x868,0x27272727,
+0x86c,0x2b2b2b27,
+0x870,0x07000700,
+0x874,0x22184000,
+0x878,0x08080808,
+0x87c,0x00000000,
+0x880,0xc0083070,
+0x884,0x000004d5,
+0x888,0x00000000,
+0x88c,0xcc0000c0,
+0x890,0x00000800,
+0x894,0xfffffffe,
+0x898,0x40302010,
+0x89c,0x00706050,
+0x900,0x00000000,
+0x904,0x00000023,
+0x908,0x00000000,
+0x90c,0x81121313,
+0xa00,0x00d047c8,
+0xa04,0x80ff000c,
+0xa08,0x8c838300,
+0xa0c,0x2e68120f,
+0xa10,0x9500bb78,
+0xa14,0x11144028,
+0xa18,0x00881117,
+0xa1c,0x89140f00,
+0xa20,0x1a1b0000,
+0xa24,0x090e1317,
+0xa28,0x00000204,
+0xa2c,0x00d30000,
+0xa70,0x101fbf00,
+0xa74,0x00000007,
+0xc00,0x48071d40,
+0xc04,0x03a05633,
+0xc08,0x000000e4,
+0xc0c,0x6c6c6c6c,
+0xc10,0x08800000,
+0xc14,0x40000100,
+0xc18,0x08800000,
+0xc1c,0x40000100,
+0xc20,0x00000000,
+0xc24,0x00000000,
+0xc28,0x00000000,
+0xc2c,0x00000000,
+0xc30,0x69e9ac44,
+0xc34,0x469652cf,
+0xc38,0x49795994,
+0xc3c,0x0a97971c,
+0xc40,0x1f7c403f,
+0xc44,0x000100b7,
+0xc48,0xec020107,
+0xc4c,0x007f037f,
+0xc50,0x69543420,
+0xc54,0x43bc0094,
+0xc58,0x69543420,
+0xc5c,0x433c0094,
+0xc60,0x00000000,
+0xc64,0x5116848b,
+0xc68,0x47c00bff,
+0xc6c,0x00000036,
+0xc70,0x2c7f000d,
+0xc74,0x218610db,
+0xc78,0x0000001f,
+0xc7c,0x00b91612,
+0xc80,0x40000100,
+0xc84,0x20f60000,
+0xc88,0x40000100,
+0xc8c,0xa0e40000,
+0xc90,0x00121820,
+0xc94,0x00000000,
+0xc98,0x00121820,
+0xc9c,0x00007f7f,
+0xca0,0x00000000,
+0xca4,0x00000080,
+0xca8,0x00000000,
+0xcac,0x00000000,
+0xcb0,0x00000000,
+0xcb4,0x00000000,
+0xcb8,0x00000000,
+0xcbc,0x28000000,
+0xcc0,0x00000000,
+0xcc4,0x00000000,
+0xcc8,0x00000000,
+0xccc,0x00000000,
+0xcd0,0x00000000,
+0xcd4,0x00000000,
+0xcd8,0x64b22427,
+0xcdc,0x00766932,
+0xce0,0x00222222,
+0xce4,0x00000000,
+0xce8,0x37644302,
+0xcec,0x2f97d40c,
+0xd00,0x00080740,
+0xd04,0x00020403,
+0xd08,0x0000907f,
+0xd0c,0x20010201,
+0xd10,0xa0633333,
+0xd14,0x3333bc43,
+0xd18,0x7a8f5b6b,
+0xd2c,0xcc979975,
+0xd30,0x00000000,
+0xd34,0x80608000,
+0xd38,0x00000000,
+0xd3c,0x00027293,
+0xd40,0x00000000,
+0xd44,0x00000000,
+0xd48,0x00000000,
+0xd4c,0x00000000,
+0xd50,0x6437140a,
+0xd54,0x00000000,
+0xd58,0x00000000,
+0xd5c,0x30032064,
+0xd60,0x4653de68,
+0xd64,0x04518a3c,
+0xd68,0x00002101,
+0xd6c,0x2a201c16,
+0xd70,0x1812362e,
+0xd74,0x322c2220,
+0xd78,0x000e3c24,
+0xe00,0x2a2a2a2a,
+0xe04,0x2a2a2a2a,
+0xe08,0x03902a2a,
+0xe10,0x2a2a2a2a,
+0xe14,0x2a2a2a2a,
+0xe18,0x2a2a2a2a,
+0xe1c,0x2a2a2a2a,
+0xe28,0x00000000,
+0xe30,0x1000dc1f,
+0xe34,0x10008c1f,
+0xe38,0x02140102,
+0xe3c,0x681604c2,
+0xe40,0x01007c00,
+0xe44,0x01004800,
+0xe48,0xfb000000,
+0xe4c,0x000028d1,
+0xe50,0x1000dc1f,
+0xe54,0x10008c1f,
+0xe58,0x02140102,
+0xe5c,0x28160d05,
+0xe60,0x00000010,
+0xe68,0x001b25a4,
+0xe6c,0x63db25a4,
+0xe70,0x63db25a4,
+0xe74,0x0c1b25a4,
+0xe78,0x0c1b25a4,
+0xe7c,0x0c1b25a4,
+0xe80,0x0c1b25a4,
+0xe84,0x63db25a4,
+0xe88,0x0c1b25a4,
+0xe8c,0x63db25a4,
+0xed0,0x63db25a4,
+0xed4,0x63db25a4,
+0xed8,0x63db25a4,
+0xedc,0x001b25a4,
+0xee0,0x001b25a4,
+0xeec,0x6fdb25a4,
+0xf14,0x00000003,
+0xf4c,0x00000000,
+0xf00,0x00000300,
+};
+
+u4Byte Rtl8192CUPHY_REG_Array_PG_HP[Rtl8192CUPHY_REG_Array_PG_HPLength] = {
+0xe00,0xffffffff,0x06080808,
+0xe04,0xffffffff,0x00040406,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x04060608,
+0xe14,0xffffffff,0x00020204,
+0xe18,0xffffffff,0x04060608,
+0xe1c,0xffffffff,0x00020204,
+0x830,0xffffffff,0x06080808,
+0x834,0xffffffff,0x00040406,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x04060608,
+0x848,0xffffffff,0x00020204,
+0x84c,0xffffffff,0x04060608,
+0x868,0xffffffff,0x00020204,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+};
+
+u4Byte Rtl8192CURadioA_2TArray[Rtl8192CURadioA_2TArrayLength] = {
+0x000,0x00030159,
+0x001,0x00031284,
+0x002,0x00098000,
+0x003,0x00018c63,
+0x004,0x000210e7,
+0x009,0x0002044f,
+0x00a,0x0001adb1,
+0x00b,0x00054867,
+0x00c,0x0008992e,
+0x00d,0x0000e52c,
+0x00e,0x00039ce7,
+0x00f,0x00000451,
+0x019,0x00000000,
+0x01a,0x00010255,
+0x01b,0x00060a00,
+0x01c,0x000fc378,
+0x01d,0x000a1250,
+0x01e,0x0004445f,
+0x01f,0x00080001,
+0x020,0x0000b614,
+0x021,0x0006c000,
+0x022,0x00000000,
+0x023,0x00001558,
+0x024,0x00000060,
+0x025,0x00000483,
+0x026,0x0004f000,
+0x027,0x000ec7d9,
+0x028,0x000577c0,
+0x029,0x00004783,
+0x02a,0x00000001,
+0x02b,0x00021334,
+0x02a,0x00000000,
+0x02b,0x00000054,
+0x02a,0x00000001,
+0x02b,0x00000808,
+0x02b,0x00053333,
+0x02c,0x0000000c,
+0x02a,0x00000002,
+0x02b,0x00000808,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000003,
+0x02b,0x00000808,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000004,
+0x02b,0x00000808,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x00000005,
+0x02b,0x00000808,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x00000006,
+0x02b,0x00000709,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000007,
+0x02b,0x00000709,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000008,
+0x02b,0x0000060a,
+0x02b,0x0004b333,
+0x02c,0x0000000d,
+0x02a,0x00000009,
+0x02b,0x0000060a,
+0x02b,0x00053333,
+0x02c,0x0000000d,
+0x02a,0x0000000a,
+0x02b,0x0000060a,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x0000000b,
+0x02b,0x0000060a,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x0000000c,
+0x02b,0x0000060a,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x0000000d,
+0x02b,0x0000060a,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x0000000e,
+0x02b,0x0000050b,
+0x02b,0x00066666,
+0x02c,0x0000001a,
+0x02a,0x000e0000,
+0x010,0x0004000f,
+0x011,0x000e31fc,
+0x010,0x0006000f,
+0x011,0x000ff9f8,
+0x010,0x0002000f,
+0x011,0x000203f9,
+0x010,0x0003000f,
+0x011,0x000ff500,
+0x010,0x00000000,
+0x011,0x00000000,
+0x010,0x0008000f,
+0x011,0x0003f100,
+0x010,0x0009000f,
+0x011,0x00023100,
+0x012,0x00032000,
+0x012,0x00071000,
+0x012,0x000b0000,
+0x012,0x000fc000,
+0x013,0x000287b3,
+0x013,0x000244b7,
+0x013,0x000204ab,
+0x013,0x0001c49f,
+0x013,0x00018493,
+0x013,0x0001429b,
+0x013,0x00010299,
+0x013,0x0000c29c,
+0x013,0x000081a0,
+0x013,0x000040ac,
+0x013,0x00000020,
+0x014,0x0001944c,
+0x014,0x00059444,
+0x014,0x0009944c,
+0x014,0x000d9444,
+0x015,0x0000f424,
+0x015,0x0004f424,
+0x015,0x0008f424,
+0x015,0x000cf424,
+0x016,0x000e0330,
+0x016,0x000a0330,
+0x016,0x00060330,
+0x016,0x00020330,
+0x000,0x00010159,
+0x018,0x0000f401,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01f,0x00080003,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01e,0x00044457,
+0x01f,0x00080000,
+0x000,0x00030159,
+};
+
+u4Byte Rtl8192CURadioB_2TArray[Rtl8192CURadioB_2TArrayLength] = {
+0x000,0x00030159,
+0x001,0x00031284,
+0x002,0x00098000,
+0x003,0x00018c63,
+0x004,0x000210e7,
+0x009,0x0002044f,
+0x00a,0x0001adb1,
+0x00b,0x00054867,
+0x00c,0x0008992e,
+0x00d,0x0000e52c,
+0x00e,0x00039ce7,
+0x00f,0x00000451,
+0x012,0x00032000,
+0x012,0x00071000,
+0x012,0x000b0000,
+0x012,0x000fc000,
+0x013,0x000287af,
+0x013,0x000244b7,
+0x013,0x000204ab,
+0x013,0x0001c49f,
+0x013,0x00018493,
+0x013,0x00014297,
+0x013,0x00010295,
+0x013,0x0000c298,
+0x013,0x0000819c,
+0x013,0x000040a8,
+0x013,0x0000001c,
+0x014,0x0001944c,
+0x014,0x00059444,
+0x014,0x0009944c,
+0x014,0x000d9444,
+0x015,0x0000f424,
+0x015,0x0004f424,
+0x015,0x0008f424,
+0x015,0x000cf424,
+0x016,0x000e0330,
+0x016,0x000a0330,
+0x016,0x00060330,
+0x016,0x00020330,
+};
+
+u4Byte Rtl8192CURadioA_1TArray[Rtl8192CURadioA_1TArrayLength] = {
+0x000,0x00030159,
+0x001,0x00031284,
+0x002,0x00098000,
+0x003,0x00018c63,
+0x004,0x000210e7,
+0x009,0x0002044f,
+0x00a,0x0001adb1,
+0x00b,0x00054867,
+0x00c,0x0008992e,
+0x00d,0x0000e52c,
+0x00e,0x00039ce7,
+0x00f,0x00000451,
+0x019,0x00000000,
+0x01a,0x00010255,
+0x01b,0x00060a00,
+0x01c,0x000fc378,
+0x01d,0x000a1250,
+0x01e,0x0004445f,
+0x01f,0x00080001,
+0x020,0x0000b614,
+0x021,0x0006c000,
+0x022,0x00000000,
+0x023,0x00001558,
+0x024,0x00000060,
+0x025,0x00000483,
+0x026,0x0004f000,
+0x027,0x000ec7d9,
+0x028,0x000577c0,
+0x029,0x00004783,
+0x02a,0x00000001,
+0x02b,0x00021334,
+0x02a,0x00000000,
+0x02b,0x00000054,
+0x02a,0x00000001,
+0x02b,0x00000808,
+0x02b,0x00053333,
+0x02c,0x0000000c,
+0x02a,0x00000002,
+0x02b,0x00000808,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000003,
+0x02b,0x00000808,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000004,
+0x02b,0x00000808,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x00000005,
+0x02b,0x00000808,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x00000006,
+0x02b,0x00000709,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000007,
+0x02b,0x00000709,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000008,
+0x02b,0x0000060a,
+0x02b,0x0004b333,
+0x02c,0x0000000d,
+0x02a,0x00000009,
+0x02b,0x0000060a,
+0x02b,0x00053333,
+0x02c,0x0000000d,
+0x02a,0x0000000a,
+0x02b,0x0000060a,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x0000000b,
+0x02b,0x0000060a,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x0000000c,
+0x02b,0x0000060a,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x0000000d,
+0x02b,0x0000060a,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x0000000e,
+0x02b,0x0000050b,
+0x02b,0x00066666,
+0x02c,0x0000001a,
+0x02a,0x000e0000,
+0x010,0x0004000f,
+0x011,0x000e31fc,
+0x010,0x0006000f,
+0x011,0x000ff9f8,
+0x010,0x0002000f,
+0x011,0x000203f9,
+0x010,0x0003000f,
+0x011,0x000ff500,
+0x010,0x00000000,
+0x011,0x00000000,
+0x010,0x0008000f,
+0x011,0x0003f100,
+0x010,0x0009000f,
+0x011,0x00023100,
+0x012,0x00032000,
+0x012,0x00071000,
+0x012,0x000b0000,
+0x012,0x000fc000,
+0x013,0x000287b3,
+0x013,0x000244b7,
+0x013,0x000204ab,
+0x013,0x0001c49f,
+0x013,0x00018493,
+0x013,0x0001429b,
+0x013,0x00010299,
+0x013,0x0000c29c,
+0x013,0x000081a0,
+0x013,0x000040ac,
+0x013,0x00000020,
+0x014,0x0001944c,
+0x014,0x00059444,
+0x014,0x0009944c,
+0x014,0x000d9444,
+0x015,0x0000f405,
+0x015,0x0004f405,
+0x015,0x0008f405,
+0x015,0x000cf405,
+0x016,0x000e0330,
+0x016,0x000a0330,
+0x016,0x00060330,
+0x016,0x00020330,
+0x000,0x00010159,
+0x018,0x0000f401,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01f,0x00080003,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01e,0x00044457,
+0x01f,0x00080000,
+0x000,0x00030159,
+};
+
+u4Byte Rtl8192CURadioB_1TArray[Rtl8192CURadioB_1TArrayLength] = {
+0x0, };
+
+u4Byte Rtl8192CURadioA_2T_mCardArray[Rtl8192CURadioA_2T_mCardArrayLength] = {
+0x000,0x00030159,
+0x001,0x00031284,
+0x002,0x00098000,
+0x003,0x00018c63,
+0x004,0x000210e7,
+0x009,0x0002044f,
+0x00a,0x0001adb1,
+0x00b,0x00054867,
+0x00c,0x0008992e,
+0x00d,0x0000e52c,
+0x00e,0x00039ce7,
+0x00f,0x00000451,
+0x019,0x00000000,
+0x01a,0x00010255,
+0x01b,0x00060a00,
+0x01c,0x000fc378,
+0x01d,0x000a1250,
+0x01e,0x0004445f,
+0x01f,0x00080001,
+0x020,0x0000b614,
+0x021,0x0006c000,
+0x022,0x00000000,
+0x023,0x00001558,
+0x024,0x00000060,
+0x025,0x00000483,
+0x026,0x0004f000,
+0x027,0x000ec7d9,
+0x028,0x000577c0,
+0x029,0x00004783,
+0x02a,0x00000001,
+0x02b,0x00021334,
+0x02a,0x00000000,
+0x02b,0x00000054,
+0x02a,0x00000001,
+0x02b,0x00000808,
+0x02b,0x00053333,
+0x02c,0x0000000c,
+0x02a,0x00000002,
+0x02b,0x00000808,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000003,
+0x02b,0x00000808,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000004,
+0x02b,0x00000808,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x00000005,
+0x02b,0x00000808,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x00000006,
+0x02b,0x00000709,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000007,
+0x02b,0x00000709,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000008,
+0x02b,0x0000060a,
+0x02b,0x0004b333,
+0x02c,0x0000000d,
+0x02a,0x00000009,
+0x02b,0x0000060a,
+0x02b,0x00053333,
+0x02c,0x0000000d,
+0x02a,0x0000000a,
+0x02b,0x0000060a,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x0000000b,
+0x02b,0x0000060a,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x0000000c,
+0x02b,0x0000060a,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x0000000d,
+0x02b,0x0000060a,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x0000000e,
+0x02b,0x0000050b,
+0x02b,0x00066666,
+0x02c,0x0000001a,
+0x02a,0x000e0000,
+0x010,0x0004000f,
+0x011,0x000e31fc,
+0x010,0x0006000f,
+0x011,0x000ff9f8,
+0x010,0x0002000f,
+0x011,0x000203f9,
+0x010,0x0003000f,
+0x011,0x000ff500,
+0x010,0x00000000,
+0x011,0x00000000,
+0x010,0x0008000f,
+0x011,0x0003f100,
+0x010,0x0009000f,
+0x011,0x00023100,
+0x012,0x00032000,
+0x012,0x00071000,
+0x012,0x000b0000,
+0x012,0x000fc000,
+0x013,0x000287b3,
+0x013,0x000244b7,
+0x013,0x000204ab,
+0x013,0x0001c49f,
+0x013,0x00018493,
+0x013,0x0001429b,
+0x013,0x00010299,
+0x013,0x0000c29c,
+0x013,0x000081a0,
+0x013,0x000040ac,
+0x013,0x00000020,
+0x014,0x0001944c,
+0x014,0x00059444,
+0x014,0x0009944c,
+0x014,0x000d9444,
+0x015,0x0000f424,
+0x015,0x0004f424,
+0x015,0x0008f424,
+0x015,0x000cf424,
+0x016,0x000e0330,
+0x016,0x000a0330,
+0x016,0x00060330,
+0x016,0x00020330,
+0x000,0x00010159,
+0x018,0x0000f401,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01f,0x00080003,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01e,0x00044457,
+0x01f,0x00080000,
+0x000,0x00030159,
+};
+
+u32 Rtl8192CURadioB_2T_mCardArray[Rtl8192CURadioB_2T_mCardArrayLength] = {
+0x000,0x00030159,
+0x001,0x00031284,
+0x002,0x00098000,
+0x003,0x00018c63,
+0x004,0x000210e7,
+0x009,0x0002044f,
+0x00a,0x0001adb1,
+0x00b,0x00054867,
+0x00c,0x0008992e,
+0x00d,0x0000e52c,
+0x00e,0x00039ce7,
+0x00f,0x00000451,
+0x012,0x00032000,
+0x012,0x00071000,
+0x012,0x000b0000,
+0x012,0x000fc000,
+0x013,0x000287af,
+0x013,0x000244b7,
+0x013,0x000204ab,
+0x013,0x0001c49f,
+0x013,0x00018493,
+0x013,0x00014297,
+0x013,0x00010295,
+0x013,0x0000c298,
+0x013,0x0000819c,
+0x013,0x000040a8,
+0x013,0x0000001c,
+0x014,0x0001944c,
+0x014,0x00059444,
+0x014,0x0009944c,
+0x014,0x000d9444,
+0x015,0x0000f424,
+0x015,0x0004f424,
+0x015,0x0008f424,
+0x015,0x000cf424,
+0x016,0x000e0330,
+0x016,0x000a0330,
+0x016,0x00060330,
+0x016,0x00020330,
+};
+
+u4Byte Rtl8192CURadioA_1T_mCardArray[Rtl8192CURadioA_1T_mCardArrayLength] = {
+0x000,0x00030159,
+0x001,0x00031284,
+0x002,0x00098000,
+0x003,0x00018c63,
+0x004,0x000210e7,
+0x009,0x0002044f,
+0x00a,0x0001adb1,
+0x00b,0x00054867,
+0x00c,0x0008992e,
+0x00d,0x0000e52c,
+0x00e,0x00039ce7,
+0x00f,0x00000451,
+0x019,0x00000000,
+0x01a,0x00010255,
+0x01b,0x00060a00,
+0x01c,0x000fc378,
+0x01d,0x000a1250,
+0x01e,0x0004445f,
+0x01f,0x00080001,
+0x020,0x0000b614,
+0x021,0x0006c000,
+0x022,0x00000000,
+0x023,0x00001558,
+0x024,0x00000060,
+0x025,0x00000483,
+0x026,0x0004f200,
+0x027,0x000ec7d9,
+0x028,0x000577c0,
+0x029,0x00004783,
+0x02a,0x00000001,
+0x02b,0x00021334,
+0x02a,0x00000000,
+0x02b,0x00000054,
+0x02a,0x00000001,
+0x02b,0x00000808,
+0x02b,0x00053333,
+0x02c,0x0000000c,
+0x02a,0x00000002,
+0x02b,0x00000808,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000003,
+0x02b,0x00000808,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000004,
+0x02b,0x00000808,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x00000005,
+0x02b,0x00000808,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x00000006,
+0x02b,0x00000709,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000007,
+0x02b,0x00000709,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000008,
+0x02b,0x0000060a,
+0x02b,0x0004b333,
+0x02c,0x0000000d,
+0x02a,0x00000009,
+0x02b,0x0000060a,
+0x02b,0x00053333,
+0x02c,0x0000000d,
+0x02a,0x0000000a,
+0x02b,0x0000060a,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x0000000b,
+0x02b,0x0000060a,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x0000000c,
+0x02b,0x0000060a,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x0000000d,
+0x02b,0x0000060a,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x0000000e,
+0x02b,0x0000050b,
+0x02b,0x00066666,
+0x02c,0x0000001a,
+0x02a,0x000e0000,
+0x010,0x0004000f,
+0x011,0x000e31fc,
+0x010,0x0006000f,
+0x011,0x000ff9f8,
+0x010,0x0002000f,
+0x011,0x000203f9,
+0x010,0x0003000f,
+0x011,0x000ff500,
+0x010,0x00000000,
+0x011,0x00000000,
+0x010,0x0008000f,
+0x011,0x0003f100,
+0x010,0x0009000f,
+0x011,0x00023100,
+0x012,0x00032000,
+0x012,0x00071000,
+0x012,0x000b0000,
+0x012,0x000fc000,
+0x013,0x000287b3,
+0x013,0x000244b7,
+0x013,0x000204ab,
+0x013,0x0001c49f,
+0x013,0x00018493,
+0x013,0x0001429b,
+0x013,0x00010299,
+0x013,0x0000c29c,
+0x013,0x000081a0,
+0x013,0x000040ac,
+0x013,0x00000020,
+0x014,0x0001944c,
+0x014,0x00059444,
+0x014,0x0009944c,
+0x014,0x000d9444,
+0x015,0x0000f424,
+0x015,0x0004f424,
+0x015,0x0008f424,
+0x015,0x000cf424,
+0x016,0x000e0330,
+0x016,0x000a0330,
+0x016,0x00060330,
+0x016,0x00020330,
+0x000,0x00010159,
+0x018,0x0000f401,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01f,0x00080003,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01e,0x00044457,
+0x01f,0x00080000,
+0x000,0x00030159,
+};
+
+u4Byte Rtl8192CURadioB_1T_mCardArray[Rtl8192CURadioB_1T_mCardArrayLength] = {
+0x0, };
+
+u4Byte Rtl8192CURadioA_1T_HPArray[Rtl8192CURadioA_1T_HPArrayLength] = {
+0x000,0x00030159,
+0x001,0x00031284,
+0x002,0x00098000,
+0x003,0x00018c63,
+0x004,0x000210e7,
+0x009,0x0002044f,
+0x00a,0x0001adb0,
+0x00b,0x00054867,
+0x00c,0x0008992e,
+0x00d,0x0000e529,
+0x00e,0x00039ce7,
+0x00f,0x00000451,
+0x019,0x00000000,
+0x01a,0x00000255,
+0x01b,0x00060a00,
+0x01c,0x000fc378,
+0x01d,0x000a1250,
+0x01e,0x0004445f,
+0x01f,0x00080001,
+0x020,0x0000b614,
+0x021,0x0006c000,
+0x022,0x0000083c,
+0x023,0x00001558,
+0x024,0x00000060,
+0x025,0x00000483,
+0x026,0x0004f000,
+0x027,0x000ec7d9,
+0x028,0x000977c0,
+0x029,0x00004783,
+0x02a,0x00000001,
+0x02b,0x00021334,
+0x02a,0x00000000,
+0x02b,0x00000054,
+0x02a,0x00000001,
+0x02b,0x00000808,
+0x02b,0x00053333,
+0x02c,0x0000000c,
+0x02a,0x00000002,
+0x02b,0x00000808,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000003,
+0x02b,0x00000808,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000004,
+0x02b,0x00000808,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x00000005,
+0x02b,0x00000808,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x00000006,
+0x02b,0x00000709,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000007,
+0x02b,0x00000709,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000008,
+0x02b,0x0000060a,
+0x02b,0x0004b333,
+0x02c,0x0000000d,
+0x02a,0x00000009,
+0x02b,0x0000060a,
+0x02b,0x00053333,
+0x02c,0x0000000d,
+0x02a,0x0000000a,
+0x02b,0x0000060a,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x0000000b,
+0x02b,0x0000060a,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x0000000c,
+0x02b,0x0000060a,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x0000000d,
+0x02b,0x0000060a,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x0000000e,
+0x02b,0x0000050b,
+0x02b,0x00066666,
+0x02c,0x0000001a,
+0x02a,0x000e0000,
+0x010,0x0004000f,
+0x011,0x000e31fc,
+0x010,0x0006000f,
+0x011,0x000ff9f8,
+0x010,0x0002000f,
+0x011,0x000203f9,
+0x010,0x0003000f,
+0x011,0x000ff500,
+0x010,0x00000000,
+0x011,0x00000000,
+0x010,0x0008000f,
+0x011,0x0003f100,
+0x010,0x0009000f,
+0x011,0x00023100,
+0x012,0x000d8000,
+0x012,0x00090000,
+0x012,0x00051000,
+0x012,0x00012000,
+0x013,0x00028fb4,
+0x013,0x00024fa8,
+0x013,0x000207a4,
+0x013,0x0001c3b0,
+0x013,0x000183a4,
+0x013,0x00014398,
+0x013,0x000101a4,
+0x013,0x0000c198,
+0x013,0x000080a4,
+0x013,0x00004098,
+0x013,0x00000000,
+0x014,0x0001944c,
+0x014,0x00059444,
+0x014,0x0009944c,
+0x014,0x000d9444,
+0x015,0x0000f405,
+0x015,0x0004f405,
+0x015,0x0008f405,
+0x015,0x000cf405,
+0x016,0x000e0330,
+0x016,0x000a0330,
+0x016,0x00060330,
+0x016,0x00020330,
+0x000,0x00010159,
+0x018,0x0000f401,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01f,0x00080003,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01e,0x00044457,
+0x01f,0x00080000,
+0x000,0x00030159,
+};
+
+u4Byte Rtl8192CURadioB_GM_Array[Rtl8192CURadioB_GM_ArrayLength] = {
+0x0, };
+
+
+u4Byte Rtl8192CUMACPHY_Array_PG[Rtl8192CUMACPHY_Array_PGLength] = {
+0x0, };
+
+u4Byte Rtl8192CUAGCTAB_2TArray[Rtl8192CUAGCTAB_2TArrayLength] = {
+0xc78,0x7b000001,
+0xc78,0x7b010001,
+0xc78,0x7b020001,
+0xc78,0x7b030001,
+0xc78,0x7b040001,
+0xc78,0x7b050001,
+0xc78,0x7a060001,
+0xc78,0x79070001,
+0xc78,0x78080001,
+0xc78,0x77090001,
+0xc78,0x760a0001,
+0xc78,0x750b0001,
+0xc78,0x740c0001,
+0xc78,0x730d0001,
+0xc78,0x720e0001,
+0xc78,0x710f0001,
+0xc78,0x70100001,
+0xc78,0x6f110001,
+0xc78,0x6e120001,
+0xc78,0x6d130001,
+0xc78,0x6c140001,
+0xc78,0x6b150001,
+0xc78,0x6a160001,
+0xc78,0x69170001,
+0xc78,0x68180001,
+0xc78,0x67190001,
+0xc78,0x661a0001,
+0xc78,0x651b0001,
+0xc78,0x641c0001,
+0xc78,0x631d0001,
+0xc78,0x621e0001,
+0xc78,0x611f0001,
+0xc78,0x60200001,
+0xc78,0x49210001,
+0xc78,0x48220001,
+0xc78,0x47230001,
+0xc78,0x46240001,
+0xc78,0x45250001,
+0xc78,0x44260001,
+0xc78,0x43270001,
+0xc78,0x42280001,
+0xc78,0x41290001,
+0xc78,0x402a0001,
+0xc78,0x262b0001,
+0xc78,0x252c0001,
+0xc78,0x242d0001,
+0xc78,0x232e0001,
+0xc78,0x222f0001,
+0xc78,0x21300001,
+0xc78,0x20310001,
+0xc78,0x06320001,
+0xc78,0x05330001,
+0xc78,0x04340001,
+0xc78,0x03350001,
+0xc78,0x02360001,
+0xc78,0x01370001,
+0xc78,0x00380001,
+0xc78,0x00390001,
+0xc78,0x003a0001,
+0xc78,0x003b0001,
+0xc78,0x003c0001,
+0xc78,0x003d0001,
+0xc78,0x003e0001,
+0xc78,0x003f0001,
+0xc78,0x7b400001,
+0xc78,0x7b410001,
+0xc78,0x7b420001,
+0xc78,0x7b430001,
+0xc78,0x7b440001,
+0xc78,0x7b450001,
+0xc78,0x7a460001,
+0xc78,0x79470001,
+0xc78,0x78480001,
+0xc78,0x77490001,
+0xc78,0x764a0001,
+0xc78,0x754b0001,
+0xc78,0x744c0001,
+0xc78,0x734d0001,
+0xc78,0x724e0001,
+0xc78,0x714f0001,
+0xc78,0x70500001,
+0xc78,0x6f510001,
+0xc78,0x6e520001,
+0xc78,0x6d530001,
+0xc78,0x6c540001,
+0xc78,0x6b550001,
+0xc78,0x6a560001,
+0xc78,0x69570001,
+0xc78,0x68580001,
+0xc78,0x67590001,
+0xc78,0x665a0001,
+0xc78,0x655b0001,
+0xc78,0x645c0001,
+0xc78,0x635d0001,
+0xc78,0x625e0001,
+0xc78,0x615f0001,
+0xc78,0x60600001,
+0xc78,0x49610001,
+0xc78,0x48620001,
+0xc78,0x47630001,
+0xc78,0x46640001,
+0xc78,0x45650001,
+0xc78,0x44660001,
+0xc78,0x43670001,
+0xc78,0x42680001,
+0xc78,0x41690001,
+0xc78,0x406a0001,
+0xc78,0x266b0001,
+0xc78,0x256c0001,
+0xc78,0x246d0001,
+0xc78,0x236e0001,
+0xc78,0x226f0001,
+0xc78,0x21700001,
+0xc78,0x20710001,
+0xc78,0x06720001,
+0xc78,0x05730001,
+0xc78,0x04740001,
+0xc78,0x03750001,
+0xc78,0x02760001,
+0xc78,0x01770001,
+0xc78,0x00780001,
+0xc78,0x00790001,
+0xc78,0x007a0001,
+0xc78,0x007b0001,
+0xc78,0x007c0001,
+0xc78,0x007d0001,
+0xc78,0x007e0001,
+0xc78,0x007f0001,
+0xc78,0x3800001e,
+0xc78,0x3801001e,
+0xc78,0x3802001e,
+0xc78,0x3803001e,
+0xc78,0x3804001e,
+0xc78,0x3805001e,
+0xc78,0x3806001e,
+0xc78,0x3807001e,
+0xc78,0x3808001e,
+0xc78,0x3c09001e,
+0xc78,0x3e0a001e,
+0xc78,0x400b001e,
+0xc78,0x440c001e,
+0xc78,0x480d001e,
+0xc78,0x4c0e001e,
+0xc78,0x500f001e,
+0xc78,0x5210001e,
+0xc78,0x5611001e,
+0xc78,0x5a12001e,
+0xc78,0x5e13001e,
+0xc78,0x6014001e,
+0xc78,0x6015001e,
+0xc78,0x6016001e,
+0xc78,0x6217001e,
+0xc78,0x6218001e,
+0xc78,0x6219001e,
+0xc78,0x621a001e,
+0xc78,0x621b001e,
+0xc78,0x621c001e,
+0xc78,0x621d001e,
+0xc78,0x621e001e,
+0xc78,0x621f001e,
+};
+
+u4Byte Rtl8192CUAGCTAB_1TArray[Rtl8192CUAGCTAB_1TArrayLength] = {
+0xc78,0x7b000001,
+0xc78,0x7b010001,
+0xc78,0x7b020001,
+0xc78,0x7b030001,
+0xc78,0x7b040001,
+0xc78,0x7b050001,
+0xc78,0x7a060001,
+0xc78,0x79070001,
+0xc78,0x78080001,
+0xc78,0x77090001,
+0xc78,0x760a0001,
+0xc78,0x750b0001,
+0xc78,0x740c0001,
+0xc78,0x730d0001,
+0xc78,0x720e0001,
+0xc78,0x710f0001,
+0xc78,0x70100001,
+0xc78,0x6f110001,
+0xc78,0x6e120001,
+0xc78,0x6d130001,
+0xc78,0x6c140001,
+0xc78,0x6b150001,
+0xc78,0x6a160001,
+0xc78,0x69170001,
+0xc78,0x68180001,
+0xc78,0x67190001,
+0xc78,0x661a0001,
+0xc78,0x651b0001,
+0xc78,0x641c0001,
+0xc78,0x631d0001,
+0xc78,0x621e0001,
+0xc78,0x611f0001,
+0xc78,0x60200001,
+0xc78,0x49210001,
+0xc78,0x48220001,
+0xc78,0x47230001,
+0xc78,0x46240001,
+0xc78,0x45250001,
+0xc78,0x44260001,
+0xc78,0x43270001,
+0xc78,0x42280001,
+0xc78,0x41290001,
+0xc78,0x402a0001,
+0xc78,0x262b0001,
+0xc78,0x252c0001,
+0xc78,0x242d0001,
+0xc78,0x232e0001,
+0xc78,0x222f0001,
+0xc78,0x21300001,
+0xc78,0x20310001,
+0xc78,0x06320001,
+0xc78,0x05330001,
+0xc78,0x04340001,
+0xc78,0x03350001,
+0xc78,0x02360001,
+0xc78,0x01370001,
+0xc78,0x00380001,
+0xc78,0x00390001,
+0xc78,0x003a0001,
+0xc78,0x003b0001,
+0xc78,0x003c0001,
+0xc78,0x003d0001,
+0xc78,0x003e0001,
+0xc78,0x003f0001,
+0xc78,0x7b400001,
+0xc78,0x7b410001,
+0xc78,0x7b420001,
+0xc78,0x7b430001,
+0xc78,0x7b440001,
+0xc78,0x7b450001,
+0xc78,0x7a460001,
+0xc78,0x79470001,
+0xc78,0x78480001,
+0xc78,0x77490001,
+0xc78,0x764a0001,
+0xc78,0x754b0001,
+0xc78,0x744c0001,
+0xc78,0x734d0001,
+0xc78,0x724e0001,
+0xc78,0x714f0001,
+0xc78,0x70500001,
+0xc78,0x6f510001,
+0xc78,0x6e520001,
+0xc78,0x6d530001,
+0xc78,0x6c540001,
+0xc78,0x6b550001,
+0xc78,0x6a560001,
+0xc78,0x69570001,
+0xc78,0x68580001,
+0xc78,0x67590001,
+0xc78,0x665a0001,
+0xc78,0x655b0001,
+0xc78,0x645c0001,
+0xc78,0x635d0001,
+0xc78,0x625e0001,
+0xc78,0x615f0001,
+0xc78,0x60600001,
+0xc78,0x49610001,
+0xc78,0x48620001,
+0xc78,0x47630001,
+0xc78,0x46640001,
+0xc78,0x45650001,
+0xc78,0x44660001,
+0xc78,0x43670001,
+0xc78,0x42680001,
+0xc78,0x41690001,
+0xc78,0x406a0001,
+0xc78,0x266b0001,
+0xc78,0x256c0001,
+0xc78,0x246d0001,
+0xc78,0x236e0001,
+0xc78,0x226f0001,
+0xc78,0x21700001,
+0xc78,0x20710001,
+0xc78,0x06720001,
+0xc78,0x05730001,
+0xc78,0x04740001,
+0xc78,0x03750001,
+0xc78,0x02760001,
+0xc78,0x01770001,
+0xc78,0x00780001,
+0xc78,0x00790001,
+0xc78,0x007a0001,
+0xc78,0x007b0001,
+0xc78,0x007c0001,
+0xc78,0x007d0001,
+0xc78,0x007e0001,
+0xc78,0x007f0001,
+0xc78,0x3800001e,
+0xc78,0x3801001e,
+0xc78,0x3802001e,
+0xc78,0x3803001e,
+0xc78,0x3804001e,
+0xc78,0x3805001e,
+0xc78,0x3806001e,
+0xc78,0x3807001e,
+0xc78,0x3808001e,
+0xc78,0x3c09001e,
+0xc78,0x3e0a001e,
+0xc78,0x400b001e,
+0xc78,0x440c001e,
+0xc78,0x480d001e,
+0xc78,0x4c0e001e,
+0xc78,0x500f001e,
+0xc78,0x5210001e,
+0xc78,0x5611001e,
+0xc78,0x5a12001e,
+0xc78,0x5e13001e,
+0xc78,0x6014001e,
+0xc78,0x6015001e,
+0xc78,0x6016001e,
+0xc78,0x6217001e,
+0xc78,0x6218001e,
+0xc78,0x6219001e,
+0xc78,0x621a001e,
+0xc78,0x621b001e,
+0xc78,0x621c001e,
+0xc78,0x621d001e,
+0xc78,0x621e001e,
+0xc78,0x621f001e,
+};
+
+u4Byte Rtl8192CUAGCTAB_1T_HPArray[Rtl8192CUAGCTAB_1T_HPArrayLength] = {
+0xc78,0x7b000001,
+0xc78,0x7b010001,
+0xc78,0x7b020001,
+0xc78,0x7b030001,
+0xc78,0x7b040001,
+0xc78,0x7b050001,
+0xc78,0x7b060001,
+0xc78,0x7b070001,
+0xc78,0x7b080001,
+0xc78,0x7a090001,
+0xc78,0x790a0001,
+0xc78,0x780b0001,
+0xc78,0x770c0001,
+0xc78,0x760d0001,
+0xc78,0x750e0001,
+0xc78,0x740f0001,
+0xc78,0x73100001,
+0xc78,0x72110001,
+0xc78,0x71120001,
+0xc78,0x70130001,
+0xc78,0x6f140001,
+0xc78,0x6e150001,
+0xc78,0x6d160001,
+0xc78,0x6c170001,
+0xc78,0x6b180001,
+0xc78,0x6a190001,
+0xc78,0x691a0001,
+0xc78,0x681b0001,
+0xc78,0x671c0001,
+0xc78,0x661d0001,
+0xc78,0x651e0001,
+0xc78,0x641f0001,
+0xc78,0x63200001,
+0xc78,0x62210001,
+0xc78,0x61220001,
+0xc78,0x60230001,
+0xc78,0x46240001,
+0xc78,0x45250001,
+0xc78,0x44260001,
+0xc78,0x43270001,
+0xc78,0x42280001,
+0xc78,0x41290001,
+0xc78,0x402a0001,
+0xc78,0x262b0001,
+0xc78,0x252c0001,
+0xc78,0x242d0001,
+0xc78,0x232e0001,
+0xc78,0x222f0001,
+0xc78,0x21300001,
+0xc78,0x20310001,
+0xc78,0x06320001,
+0xc78,0x05330001,
+0xc78,0x04340001,
+0xc78,0x03350001,
+0xc78,0x02360001,
+0xc78,0x01370001,
+0xc78,0x00380001,
+0xc78,0x00390001,
+0xc78,0x003a0001,
+0xc78,0x003b0001,
+0xc78,0x003c0001,
+0xc78,0x003d0001,
+0xc78,0x003e0001,
+0xc78,0x003f0001,
+0xc78,0x7b400001,
+0xc78,0x7b410001,
+0xc78,0x7b420001,
+0xc78,0x7b430001,
+0xc78,0x7b440001,
+0xc78,0x7b450001,
+0xc78,0x7b460001,
+0xc78,0x7b470001,
+0xc78,0x7b480001,
+0xc78,0x7a490001,
+0xc78,0x794a0001,
+0xc78,0x784b0001,
+0xc78,0x774c0001,
+0xc78,0x764d0001,
+0xc78,0x754e0001,
+0xc78,0x744f0001,
+0xc78,0x73500001,
+0xc78,0x72510001,
+0xc78,0x71520001,
+0xc78,0x70530001,
+0xc78,0x6f540001,
+0xc78,0x6e550001,
+0xc78,0x6d560001,
+0xc78,0x6c570001,
+0xc78,0x6b580001,
+0xc78,0x6a590001,
+0xc78,0x695a0001,
+0xc78,0x685b0001,
+0xc78,0x675c0001,
+0xc78,0x665d0001,
+0xc78,0x655e0001,
+0xc78,0x645f0001,
+0xc78,0x63600001,
+0xc78,0x62610001,
+0xc78,0x61620001,
+0xc78,0x60630001,
+0xc78,0x46640001,
+0xc78,0x45650001,
+0xc78,0x44660001,
+0xc78,0x43670001,
+0xc78,0x42680001,
+0xc78,0x41690001,
+0xc78,0x406a0001,
+0xc78,0x266b0001,
+0xc78,0x256c0001,
+0xc78,0x246d0001,
+0xc78,0x236e0001,
+0xc78,0x226f0001,
+0xc78,0x21700001,
+0xc78,0x20710001,
+0xc78,0x06720001,
+0xc78,0x05730001,
+0xc78,0x04740001,
+0xc78,0x03750001,
+0xc78,0x02760001,
+0xc78,0x01770001,
+0xc78,0x00780001,
+0xc78,0x00790001,
+0xc78,0x007a0001,
+0xc78,0x007b0001,
+0xc78,0x007c0001,
+0xc78,0x007d0001,
+0xc78,0x007e0001,
+0xc78,0x007f0001,
+0xc78,0x3800001e,
+0xc78,0x3801001e,
+0xc78,0x3802001e,
+0xc78,0x3803001e,
+0xc78,0x3804001e,
+0xc78,0x3805001e,
+0xc78,0x3806001e,
+0xc78,0x3807001e,
+0xc78,0x3808001e,
+0xc78,0x3c09001e,
+0xc78,0x3e0a001e,
+0xc78,0x400b001e,
+0xc78,0x440c001e,
+0xc78,0x480d001e,
+0xc78,0x4c0e001e,
+0xc78,0x500f001e,
+0xc78,0x5210001e,
+0xc78,0x5611001e,
+0xc78,0x5a12001e,
+0xc78,0x5e13001e,
+0xc78,0x6014001e,
+0xc78,0x6015001e,
+0xc78,0x6016001e,
+0xc78,0x6217001e,
+0xc78,0x6218001e,
+0xc78,0x6219001e,
+0xc78,0x621a001e,
+0xc78,0x621b001e,
+0xc78,0x621c001e,
+0xc78,0x621d001e,
+0xc78,0x621e001e,
+0xc78,0x621f001e,
+};
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUPHYImg_CE.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUPHYImg_CE.h
index 7ac79f9c6a92..6fdc75c4082e 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUPHYImg_CE.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/Hal8192CUPHYImg_CE.h
@@ -1,81 +1,81 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-#ifndef __INC_HAL8192CU_PHY_IMG_H
-#define __INC_HAL8192CU_PHY_IMG_H
-
-/*Created on 2011/ 6/29, 10:30*/
-
-#define Rtl8192CUPHY_REG_2TArrayLength 374
-extern u4Byte Rtl8192CUPHY_REG_2TArray[Rtl8192CUPHY_REG_2TArrayLength];
-#define Rtl8192CUPHY_REG_1TArrayLength 374
-extern u4Byte Rtl8192CUPHY_REG_1TArray[Rtl8192CUPHY_REG_1TArrayLength];
-#define Rtl8192CUPHY_ChangeTo_1T1RArrayLength 1
-extern u4Byte Rtl8192CUPHY_ChangeTo_1T1RArray[Rtl8192CUPHY_ChangeTo_1T1RArrayLength];
-#define Rtl8192CUPHY_ChangeTo_1T2RArrayLength 1
-extern u4Byte Rtl8192CUPHY_ChangeTo_1T2RArray[Rtl8192CUPHY_ChangeTo_1T2RArrayLength];
-#define Rtl8192CUPHY_ChangeTo_2T2RArrayLength 1
-extern u4Byte Rtl8192CUPHY_ChangeTo_2T2RArray[Rtl8192CUPHY_ChangeTo_2T2RArrayLength];
-#define Rtl8192CUPHY_REG_Array_PGLength 336
-extern u4Byte Rtl8192CUPHY_REG_Array_PG[Rtl8192CUPHY_REG_Array_PGLength];
-#define Rtl8192CUPHY_REG_Array_PG_mCardLength 336
-extern u4Byte Rtl8192CUPHY_REG_Array_PG_mCard[Rtl8192CUPHY_REG_Array_PG_mCardLength];
-#define Rtl8192CUPHY_REG_Array_MPLength 4
-extern u4Byte Rtl8192CUPHY_REG_Array_MP[Rtl8192CUPHY_REG_Array_MPLength];
-#define Rtl8192CUPHY_REG_1T_HPArrayLength 378
-extern u4Byte Rtl8192CUPHY_REG_1T_HPArray[Rtl8192CUPHY_REG_1T_HPArrayLength];
-#define Rtl8192CUPHY_REG_1T_mCardArrayLength 374
-extern u4Byte Rtl8192CUPHY_REG_1T_mCardArray[Rtl8192CUPHY_REG_1T_mCardArrayLength];
-#define Rtl8192CUPHY_REG_2T_mCardArrayLength 374
-extern u4Byte Rtl8192CUPHY_REG_2T_mCardArray[Rtl8192CUPHY_REG_2T_mCardArrayLength];
-#define Rtl8192CUPHY_REG_Array_PG_HPLength 336
-extern u4Byte Rtl8192CUPHY_REG_Array_PG_HP[Rtl8192CUPHY_REG_Array_PG_HPLength];
-#define Rtl8192CURadioA_2TArrayLength 282
-extern u4Byte Rtl8192CURadioA_2TArray[Rtl8192CURadioA_2TArrayLength];
-#define Rtl8192CURadioB_2TArrayLength 78
-extern u4Byte Rtl8192CURadioB_2TArray[Rtl8192CURadioB_2TArrayLength];
-#define Rtl8192CURadioA_1TArrayLength 282
-extern u4Byte Rtl8192CURadioA_1TArray[Rtl8192CURadioA_1TArrayLength];
-#define Rtl8192CURadioB_1TArrayLength 1
-extern u4Byte Rtl8192CURadioB_1TArray[Rtl8192CURadioB_1TArrayLength];
-#define Rtl8192CURadioA_2T_mCardArrayLength 282
-extern u4Byte Rtl8192CURadioA_2T_mCardArray[Rtl8192CURadioA_2T_mCardArrayLength];
-#define Rtl8192CURadioB_2T_mCardArrayLength 78
-extern u4Byte Rtl8192CURadioB_2T_mCardArray[Rtl8192CURadioB_2T_mCardArrayLength];
-#define Rtl8192CURadioA_1T_mCardArrayLength 282
-extern u32 Rtl8192CURadioA_1T_mCardArray[Rtl8192CURadioA_1T_mCardArrayLength];
-#define Rtl8192CURadioB_1T_mCardArrayLength 1
-extern u32 Rtl8192CURadioB_1T_mCardArray[Rtl8192CURadioB_1T_mCardArrayLength];
-#define Rtl8192CURadioA_1T_HPArrayLength 282
-extern u4Byte Rtl8192CURadioA_1T_HPArray[Rtl8192CURadioA_1T_HPArrayLength];
-#define Rtl8192CURadioB_GM_ArrayLength 1
-extern u4Byte Rtl8192CURadioB_GM_Array[Rtl8192CURadioB_GM_ArrayLength];
-#define Rtl8192CUMACPHY_Array_PGLength 1
-extern u4Byte Rtl8192CUMACPHY_Array_PG[Rtl8192CUMACPHY_Array_PGLength];
-#define Rtl8192CUAGCTAB_2TArrayLength 320
-extern u4Byte Rtl8192CUAGCTAB_2TArray[Rtl8192CUAGCTAB_2TArrayLength];
-#define Rtl8192CUAGCTAB_1TArrayLength 320
-extern u4Byte Rtl8192CUAGCTAB_1TArray[Rtl8192CUAGCTAB_1TArrayLength];
-#define Rtl8192CUAGCTAB_1T_HPArrayLength 320
-extern u4Byte Rtl8192CUAGCTAB_1T_HPArray[Rtl8192CUAGCTAB_1T_HPArrayLength];
-
-
-#endif //__INC_HAL8192CU_FW_IMG_H
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+#ifndef __INC_HAL8192CU_PHY_IMG_H
+#define __INC_HAL8192CU_PHY_IMG_H
+
+/*Created on 2011/ 6/29, 10:30*/
+
+#define Rtl8192CUPHY_REG_2TArrayLength 374
+extern u4Byte Rtl8192CUPHY_REG_2TArray[Rtl8192CUPHY_REG_2TArrayLength];
+#define Rtl8192CUPHY_REG_1TArrayLength 374
+extern u4Byte Rtl8192CUPHY_REG_1TArray[Rtl8192CUPHY_REG_1TArrayLength];
+#define Rtl8192CUPHY_ChangeTo_1T1RArrayLength 1
+extern u4Byte Rtl8192CUPHY_ChangeTo_1T1RArray[Rtl8192CUPHY_ChangeTo_1T1RArrayLength];
+#define Rtl8192CUPHY_ChangeTo_1T2RArrayLength 1
+extern u4Byte Rtl8192CUPHY_ChangeTo_1T2RArray[Rtl8192CUPHY_ChangeTo_1T2RArrayLength];
+#define Rtl8192CUPHY_ChangeTo_2T2RArrayLength 1
+extern u4Byte Rtl8192CUPHY_ChangeTo_2T2RArray[Rtl8192CUPHY_ChangeTo_2T2RArrayLength];
+#define Rtl8192CUPHY_REG_Array_PGLength 336
+extern u4Byte Rtl8192CUPHY_REG_Array_PG[Rtl8192CUPHY_REG_Array_PGLength];
+#define Rtl8192CUPHY_REG_Array_PG_mCardLength 336
+extern u4Byte Rtl8192CUPHY_REG_Array_PG_mCard[Rtl8192CUPHY_REG_Array_PG_mCardLength];
+#define Rtl8192CUPHY_REG_Array_MPLength 4
+extern u4Byte Rtl8192CUPHY_REG_Array_MP[Rtl8192CUPHY_REG_Array_MPLength];
+#define Rtl8192CUPHY_REG_1T_HPArrayLength 378
+extern u4Byte Rtl8192CUPHY_REG_1T_HPArray[Rtl8192CUPHY_REG_1T_HPArrayLength];
+#define Rtl8192CUPHY_REG_1T_mCardArrayLength 374
+extern u4Byte Rtl8192CUPHY_REG_1T_mCardArray[Rtl8192CUPHY_REG_1T_mCardArrayLength];
+#define Rtl8192CUPHY_REG_2T_mCardArrayLength 374
+extern u4Byte Rtl8192CUPHY_REG_2T_mCardArray[Rtl8192CUPHY_REG_2T_mCardArrayLength];
+#define Rtl8192CUPHY_REG_Array_PG_HPLength 336
+extern u4Byte Rtl8192CUPHY_REG_Array_PG_HP[Rtl8192CUPHY_REG_Array_PG_HPLength];
+#define Rtl8192CURadioA_2TArrayLength 282
+extern u4Byte Rtl8192CURadioA_2TArray[Rtl8192CURadioA_2TArrayLength];
+#define Rtl8192CURadioB_2TArrayLength 78
+extern u4Byte Rtl8192CURadioB_2TArray[Rtl8192CURadioB_2TArrayLength];
+#define Rtl8192CURadioA_1TArrayLength 282
+extern u4Byte Rtl8192CURadioA_1TArray[Rtl8192CURadioA_1TArrayLength];
+#define Rtl8192CURadioB_1TArrayLength 1
+extern u4Byte Rtl8192CURadioB_1TArray[Rtl8192CURadioB_1TArrayLength];
+#define Rtl8192CURadioA_2T_mCardArrayLength 282
+extern u4Byte Rtl8192CURadioA_2T_mCardArray[Rtl8192CURadioA_2T_mCardArrayLength];
+#define Rtl8192CURadioB_2T_mCardArrayLength 78
+extern u4Byte Rtl8192CURadioB_2T_mCardArray[Rtl8192CURadioB_2T_mCardArrayLength];
+#define Rtl8192CURadioA_1T_mCardArrayLength 282
+extern u32 Rtl8192CURadioA_1T_mCardArray[Rtl8192CURadioA_1T_mCardArrayLength];
+#define Rtl8192CURadioB_1T_mCardArrayLength 1
+extern u32 Rtl8192CURadioB_1T_mCardArray[Rtl8192CURadioB_1T_mCardArrayLength];
+#define Rtl8192CURadioA_1T_HPArrayLength 282
+extern u4Byte Rtl8192CURadioA_1T_HPArray[Rtl8192CURadioA_1T_HPArrayLength];
+#define Rtl8192CURadioB_GM_ArrayLength 1
+extern u4Byte Rtl8192CURadioB_GM_Array[Rtl8192CURadioB_GM_ArrayLength];
+#define Rtl8192CUMACPHY_Array_PGLength 1
+extern u4Byte Rtl8192CUMACPHY_Array_PG[Rtl8192CUMACPHY_Array_PGLength];
+#define Rtl8192CUAGCTAB_2TArrayLength 320
+extern u4Byte Rtl8192CUAGCTAB_2TArray[Rtl8192CUAGCTAB_2TArrayLength];
+#define Rtl8192CUAGCTAB_1TArrayLength 320
+extern u4Byte Rtl8192CUAGCTAB_1TArray[Rtl8192CUAGCTAB_1TArrayLength];
+#define Rtl8192CUAGCTAB_1T_HPArrayLength 320
+extern u4Byte Rtl8192CUAGCTAB_1T_HPArray[Rtl8192CUAGCTAB_1T_HPArrayLength];
+
+
+#endif //__INC_HAL8192CU_FW_IMG_H
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/HalDMOutSrc8192C_CE.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/HalDMOutSrc8192C_CE.c
index d1ae1bbfb988..d0ece9f63e0a 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/HalDMOutSrc8192C_CE.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/HalDMOutSrc8192C_CE.c
@@ -496,6 +496,16 @@ odm_TXPowerTrackingCallback_ThermalMeter_92C(
pdmpriv->ThermalValue_IQK = ThermalValue;
rtl8192c_PHY_IQCalibrate(Adapter,_FALSE);
}
+
+#if 1
+ if(delta > 0 && IS_HARDWARE_TYPE_8723A(Adapter))
+ {
+ if(ThermalValue >= 15)
+ PHY_SetBBReg(Adapter, REG_AFE_XTAL_CTRL, bMaskDWord, 0x038180fd );
+ else
+ PHY_SetBBReg(Adapter, REG_AFE_XTAL_CTRL, bMaskDWord, 0x0381808d );
+ }
+#endif
//update thermal meter value
if(pdmpriv->TxPowerTrackControl)
@@ -563,7 +573,6 @@ odm_CheckTXPowerTracking_ThermalMeter(
struct dm_priv *pdmpriv = &pHalData->dmpriv;
DM_ODM_T *podmpriv = &pHalData->odmpriv;
//u1Byte TxPowerCheckCnt = 5; //10 sec
-
//if(!pMgntInfo->bTXPowerTracking /*|| (!pdmpriv->TxPowerTrackControl && pdmpriv->bAPKdone)*/)
if(!(podmpriv->SupportAbility & ODM_RF_TX_PWR_TRACK))
{
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/odm_RTL8192C.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/odm_RTL8192C.c
index 6c25887e44fd..0a10a5b255c6 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/odm_RTL8192C.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/odm_RTL8192C.c
@@ -1,2233 +1,2233 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-//============================================================
-// include files
-//============================================================
-
-#include "../odm_precomp.h"
-
-#if (RTL8192C_SUPPORT == 1)
-
-//#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
-VOID
-odm_ResetFACounter_92C(
- IN PDM_ODM_T pDM_Odm
- )
-{
-// PADAPTER pAdapter = pDM_Odm->Adapter;
- u1Byte BBReset;
-
- //reset false alarm counter registers
- ODM_SetBBReg(pDM_Odm, 0xd00, BIT27, 1);
- ODM_SetBBReg(pDM_Odm, 0xd00, BIT27, 0);
- //update ofdm counter
- ODM_SetBBReg(pDM_Odm, 0xc00, BIT31, 0); //update page C counter
- ODM_SetBBReg(pDM_Odm, 0xd00, BIT31, 0); //update page D counter
-
- //reset CCK CCA counter
- ODM_SetBBReg(pDM_Odm, 0xa2c, BIT13|BIT12, 0);
- ODM_SetBBReg(pDM_Odm, 0xa2c, BIT13|BIT12, 2);
- //reset CCK FA counter
- ODM_SetBBReg(pDM_Odm, 0xa2c, BIT15|BIT14, 0);
- ODM_SetBBReg(pDM_Odm, 0xa2c, BIT15|BIT14, 2);
-
-
- //BB Reset
- if(!pDM_Odm->bLinked)
- {
- BBReset = ODM_Read1Byte(pDM_Odm, 0x02);
- ODM_Write1Byte(pDM_Odm, 0x02, BBReset&(~BIT0));
- ODM_Write1Byte(pDM_Odm, 0x02, BBReset|BIT0);
- }
-
-}
-//#endif
-
-#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
-
-
-
-//
-// ==================================================
-// Tx power tracking relative code.
-// ==================================================
-//
-
-
-//091212 chiyokolin
-VOID
-odm_TXPowerTrackingCallbackThermalMeter92C(
- IN PADAPTER Adapter
- )
-{
-
-#if ((RT_PLATFORM == PLATFORM_WINDOWS) || (RT_PLATFORM == PLATFORM_LINUX)) && (HAL_CODE_BASE==RTL8192_C)
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
- u1Byte ThermalValue = 0, delta, delta_LCK, delta_IQK, delta_HP, TimeOut = 100;
- s4Byte ele_A=0, ele_D, TempCCk, X, value32;
- s4Byte Y, ele_C=0;
- s1Byte OFDM_index[2], CCK_index=0, OFDM_index_old[2], CCK_index_old=0;
- int i = 0;
- BOOLEAN is2T = IS_92C_SERIAL(pHalData->VersionID);
-
-#if MP_DRIVER == 1
- PMPT_CONTEXT pMptCtx = &(Adapter->MptCtx);
- pu1Byte TxPwrLevel = pMptCtx->TxPwrLevel;
-#endif
- u1Byte OFDM_min_index = 6, rf; //OFDM BB Swing should be less than +3.0dB, which is required by Arthur
-
- u4Byte DPK_delta_mapping[2][DPK_DELTA_MAPPING_NUM] = {
- {0x1c, 0x1c, 0x1d, 0x1d, 0x1e,
- 0x1f, 0x00, 0x00, 0x01, 0x01,
- 0x02, 0x02, 0x03},
- {0x1c, 0x1d, 0x1e, 0x1e, 0x1e,
- 0x1f, 0x00, 0x00, 0x01, 0x02,
- 0x02, 0x03, 0x03}};
-
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- u1Byte ThermalValue_HP_count = 0;
- u4Byte ThermalValue_HP = 0;
- s1Byte index_mapping_HP[index_mapping_HP_NUM] = {
- 0, 1, 3, 4, 6,
- 7, 9, 10, 12, 13,
- 15, 16, 18, 19, 21
- };
-
- s1Byte index_HP;
-#endif
-
- if (ODM_CheckPowerStatus(Adapter) == FALSE)
- return;
-
- pHalData->TXPowerTrackingCallbackCnt++; //cosa add for debug
- pHalData->bTXPowerTrackingInit = TRUE;
-
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("===>odm_TXPowerTrackingCallbackThermalMeter92C\n"));
-
- ThermalValue = (u1Byte)PHY_QueryRFReg(Adapter, RF_PATH_A, RF_T_METER, 0x1f); // 0x24: RF Reg[4:0]
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter));
-
- //if (IS_HARDWARE_TYPE_8188E(Adapter)/* ||
- // is_ha*/)
- //{
- // PHY_APCalibrate_8188E(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
- //}
- //else if (IS_HARDWARE_TYPE_8192C(Adapter) ||
- // IS_HARDWARE_TYPE_8192D(Adapter) ||
- // IS_HARDWARE_TYPE_8723A(Adapter))
- {
- PHY_APCalibrate_8192C(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
- }
-
- if(is2T)
- rf = 2;
- else
- rf = 1;
-
- while(PlatformAtomicExchange(&Adapter->IntrCCKRefCount, TRUE) == TRUE)
- {
- PlatformSleepUs(100);
- TimeOut--;
- if(TimeOut <= 0)
- {
- RTPRINT(FINIT, INIT_TxPower,
- ("!!!odm_TXPowerTrackingCallbackThermalMeter92C Wait for check CCK gain index too long!!!\n" ));
- break;
- }
- }
-
- if(ThermalValue)
- {
-// if(!pHalData->ThermalValue)
- {
- //Query OFDM path A default setting
- ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord)&bMaskOFDM_D;
- for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
- {
- if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
- {
- OFDM_index_old[0] = (u1Byte)i;
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial pathA ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
- rOFDM0_XATxIQImbalance, ele_D, OFDM_index_old[0]));
- break;
- }
- }
-
- //Query OFDM path B default setting
- if(is2T)
- {
- ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord)&bMaskOFDM_D;
- for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
- {
- if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
- {
- OFDM_index_old[1] = (u1Byte)i;
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial pathB ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
- rOFDM0_XBTxIQImbalance, ele_D, OFDM_index_old[1]));
- break;
- }
- }
- }
-
- //Query CCK default setting From 0xa24
- TempCCk = PHY_QueryBBReg(Adapter, rCCK0_TxFilter2, bMaskDWord)&bMaskCCK;
- for(i=0 ; i<CCK_TABLE_SIZE ; i++)
- {
- if(pHalData->bCCKinCH14)
- {
- if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch14[i][2], 4)==0)
- {
- CCK_index_old =(u1Byte) i;
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch 14 %d\n",
- rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
- break;
- }
- }
- else
- {
- if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch1_Ch13[i][2], 4)==0)
- {
- CCK_index_old =(u1Byte) i;
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch14 %d\n",
- rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
- break;
- }
- }
- }
-
- if(!pHalData->ThermalValue)
- {
- pHalData->ThermalValue = pHalData->EEPROMThermalMeter;
- pHalData->ThermalValue_LCK = ThermalValue;
- pHalData->ThermalValue_IQK = ThermalValue;
- pHalData->ThermalValue_DPK = pHalData->EEPROMThermalMeter;
-
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- for(i = 0; i < rf; i++)
- pHalData->OFDM_index_HP[i] = pHalData->OFDM_index[i] = OFDM_index_old[i];
- pHalData->CCK_index_HP = pHalData->CCK_index = CCK_index_old;
-#else
- for(i = 0; i < rf; i++)
- pHalData->OFDM_index[i] = OFDM_index_old[i];
- pHalData->CCK_index = CCK_index_old;
-#endif
- }
-
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
- {
- pHalData->ThermalValue_HP[pHalData->ThermalValue_HP_index] = ThermalValue;
- pHalData->ThermalValue_HP_index++;
- if(pHalData->ThermalValue_HP_index == HP_THERMAL_NUM)
- pHalData->ThermalValue_HP_index = 0;
-
- for(i = 0; i < HP_THERMAL_NUM; i++)
- {
- if(pHalData->ThermalValue_HP[i])
- {
- ThermalValue_HP += pHalData->ThermalValue_HP[i];
- ThermalValue_HP_count++;
- }
- }
-
- if(ThermalValue_HP_count)
- ThermalValue = (u1Byte)(ThermalValue_HP / ThermalValue_HP_count);
- }
-#endif
- }
-
- delta = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
- {
- if(pHalData->bDoneTxpower)
- delta_HP = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
- else
- delta_HP = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
- }
- else
-#endif
- {
- delta_HP = 0;
- }
- delta_LCK = (ThermalValue > pHalData->ThermalValue_LCK)?(ThermalValue - pHalData->ThermalValue_LCK):(pHalData->ThermalValue_LCK - ThermalValue);
- delta_IQK = (ThermalValue > pHalData->ThermalValue_IQK)?(ThermalValue - pHalData->ThermalValue_IQK):(pHalData->ThermalValue_IQK - ThermalValue);
-
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x delta 0x%x delta_LCK 0x%x delta_IQK 0x%x\n", ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter, delta, delta_LCK, delta_IQK));
-
- if(delta_LCK > 1)
- {
- pHalData->ThermalValue_LCK = ThermalValue;
- PHY_LCCalibrate(Adapter);
- }
-
- if((delta > 0 || delta_HP > 0)&& pHalData->TxPowerTrackControl)
- {
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
- {
- pHalData->bDoneTxpower = TRUE;
- delta_HP = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
-
- if(delta_HP > index_mapping_HP_NUM-1)
- index_HP = index_mapping_HP[index_mapping_HP_NUM-1];
- else
- index_HP = index_mapping_HP[delta_HP];
-
- if(ThermalValue > pHalData->EEPROMThermalMeter) //set larger Tx power
- {
- for(i = 0; i < rf; i++)
- OFDM_index[i] = pHalData->OFDM_index_HP[i] - index_HP;
- CCK_index = pHalData->CCK_index_HP -index_HP;
- }
- else
- {
- for(i = 0; i < rf; i++)
- OFDM_index[i] = pHalData->OFDM_index_HP[i] + index_HP;
- CCK_index = pHalData->CCK_index_HP + index_HP;
- }
-
- delta_HP = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
-
- }
- else
-#endif
- {
- if(ThermalValue > pHalData->ThermalValue)
- {
- for(i = 0; i < rf; i++)
- pHalData->OFDM_index[i] -= delta;
- pHalData->CCK_index -= delta;
- }
- else
- {
- for(i = 0; i < rf; i++)
- pHalData->OFDM_index[i] += delta;
- pHalData->CCK_index += delta;
- }
- }
-
- if(is2T)
- {
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
- pHalData->OFDM_index[0], pHalData->OFDM_index[1], pHalData->CCK_index));
- }
- else
- {
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, CCK_index=0x%x\n",
- pHalData->OFDM_index[0], pHalData->CCK_index));
- }
-
- //no adjust
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- if(RT_GetInterfaceSelection(Adapter) != INTF_SEL1_USB_High_Power)
-#endif
- {
- if(ThermalValue > pHalData->EEPROMThermalMeter)
- {
- for(i = 0; i < rf; i++)
- OFDM_index[i] = pHalData->OFDM_index[i]+1;
- CCK_index = pHalData->CCK_index+1;
- }
- else
- {
- for(i = 0; i < rf; i++)
- OFDM_index[i] = pHalData->OFDM_index[i];
- CCK_index = pHalData->CCK_index;
- }
-
-#if MP_DRIVER == 1
- for(i = 0; i < rf; i++)
- {
- if(TxPwrLevel[i] >=0 && TxPwrLevel[i] <=26)
- {
- if(ThermalValue > pHalData->EEPROMThermalMeter)
- {
- if (delta < 5)
- OFDM_index[i] -= 1;
- else
- OFDM_index[i] -= 2;
- }
- else if(delta > 5 && ThermalValue < pHalData->EEPROMThermalMeter)
- {
- OFDM_index[i] += 1;
- }
- }
- else if (TxPwrLevel[i] >= 27 && TxPwrLevel[i] <= 32 && ThermalValue > pHalData->EEPROMThermalMeter)
- {
- if (delta < 5)
- OFDM_index[i] -= 1;
- else
- OFDM_index[i] -= 2;
- }
- else if (TxPwrLevel[i] >= 32 && TxPwrLevel[i] <= 38 && ThermalValue > pHalData->EEPROMThermalMeter && delta > 5)
- {
- OFDM_index[i] -= 1;
- }
- }
-
- {
- if(TxPwrLevel[i] >=0 && TxPwrLevel[i] <=26)
- {
- if(ThermalValue > pHalData->EEPROMThermalMeter)
- {
- if (delta < 5)
- CCK_index -= 1;
- else
- CCK_index -= 2;
- }
- else if(delta > 5 && ThermalValue < pHalData->EEPROMThermalMeter)
- {
- CCK_index += 1;
- }
- }
- else if (TxPwrLevel[i] >= 27 && TxPwrLevel[i] <= 32 && ThermalValue > pHalData->EEPROMThermalMeter)
- {
- if (delta < 5)
- CCK_index -= 1;
- else
- CCK_index -= 2;
- }
- else if (TxPwrLevel[i] >= 32 && TxPwrLevel[i] <= 38 && ThermalValue > pHalData->EEPROMThermalMeter && delta > 5)
- {
- CCK_index -= 1;
- }
- }
-#endif
- }
-
- for(i = 0; i < rf; i++)
- {
- if(OFDM_index[i] > (OFDM_TABLE_SIZE_92C-1))
- OFDM_index[i] = (OFDM_TABLE_SIZE_92C-1);
- else if (OFDM_index[i] < OFDM_min_index)
- OFDM_index[i] = OFDM_min_index;
- }
-
- if(CCK_index > (CCK_TABLE_SIZE-1))
- CCK_index = (CCK_TABLE_SIZE-1);
- else if (CCK_index < 0)
- CCK_index = 0;
-
- if(is2T)
- {
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
- OFDM_index[0], OFDM_index[1], CCK_index));
- }
- else
- {
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, CCK_index=0x%x\n",
- OFDM_index[0], CCK_index));
- }
- }
-
- if(pHalData->TxPowerTrackControl && (delta != 0 || delta_HP != 0))
- {
- //Adujst OFDM Ant_A according to IQK result
- ele_D = (OFDMSwingTable[OFDM_index[0]] & 0xFFC00000)>>22;
- X = pHalData->RegE94;
- Y = pHalData->RegE9C;
-
- if(X != 0)
- {
- if ((X & 0x00000200) != 0)
- X = X | 0xFFFFFC00;
- ele_A = ((X * ele_D)>>8)&0x000003FF;
-
- //new element C = element D x Y
- if ((Y & 0x00000200) != 0)
- Y = Y | 0xFFFFFC00;
- ele_C = ((Y * ele_D)>>8)&0x000003FF;
-
- //wirte new elements A, C, D to regC80 and regC94, element B is always 0
- value32 = (ele_D<<22)|((ele_C&0x3F)<<16)|ele_A;
- PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, value32);
-
- value32 = (ele_C&0x000003C0)>>6;
- PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, value32);
-
- value32 = ((X * ele_D)>>7)&0x01;
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT31, value32);
-
- value32 = ((Y * ele_D)>>7)&0x01;
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT29, value32);
-
- }
- else
- {
- PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[0]]);
- PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, 0x00);
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT31|BIT29, 0x00);
- }
-
- RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking path A: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x\n", X, Y, ele_A, ele_C, ele_D));
-
- //Adjust CCK according to IQK result
- if(!pHalData->bCCKinCH14){
- PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch1_Ch13[CCK_index][0]);
- PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch1_Ch13[CCK_index][1]);
- PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch1_Ch13[CCK_index][2]);
- PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch1_Ch13[CCK_index][3]);
- PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch1_Ch13[CCK_index][4]);
- PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch1_Ch13[CCK_index][5]);
- PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch1_Ch13[CCK_index][6]);
- PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch1_Ch13[CCK_index][7]);
- }
- else{
- PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch14[CCK_index][0]);
- PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch14[CCK_index][1]);
- PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch14[CCK_index][2]);
- PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch14[CCK_index][3]);
- PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch14[CCK_index][4]);
- PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch14[CCK_index][5]);
- PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch14[CCK_index][6]);
- PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch14[CCK_index][7]);
- }
-
- if(is2T)
- {
- ele_D = (OFDMSwingTable[OFDM_index[1]] & 0xFFC00000)>>22;
-
- //new element A = element D x X
- X = pHalData->RegEB4;
- Y = pHalData->RegEBC;
-
- if(X != 0){
- if ((X & 0x00000200) != 0) //consider minus
- X = X | 0xFFFFFC00;
- ele_A = ((X * ele_D)>>8)&0x000003FF;
-
- //new element C = element D x Y
- if ((Y & 0x00000200) != 0)
- Y = Y | 0xFFFFFC00;
- ele_C = ((Y * ele_D)>>8)&0x00003FF;
-
- //wirte new elements A, C, D to regC88 and regC9C, element B is always 0
- value32=(ele_D<<22)|((ele_C&0x3F)<<16) |ele_A;
- PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, value32);
-
- value32 = (ele_C&0x000003C0)>>6;
- PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, value32);
-
- value32 = ((X * ele_D)>>7)&0x01;
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT27, value32);
-
- value32 = ((Y * ele_D)>>7)&0x01;
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT25, value32);
-
- }
- else{
- PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[1]]);
- PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, 0x00);
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT27|BIT25, 0x00);
- }
-
- RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking path B: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x\n", X, Y, ele_A, ele_C, ele_D));
- }
-
- RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n", PHY_QueryBBReg(Adapter, 0xc80, bMaskDWord), PHY_QueryBBReg(Adapter, 0xc94, bMaskDWord), PHY_QueryRFReg(Adapter, RF_PATH_A, 0x24, bRFRegOffsetMask)));
- }
-
-#if MP_DRIVER == 1
- if(delta_IQK > 1)
-#else
- if(delta_IQK > 3)
-#endif
- {
- pHalData->ThermalValue_IQK = ThermalValue;
- PHY_IQCalibrate(Adapter, FALSE);
- }
-
- //update thermal meter value
- if(pHalData->TxPowerTrackControl)
- Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_THERMAL_VALUE, &ThermalValue);
-
- }
-
- PlatformAtomicExchange(&Adapter->IntrCCKRefCount, FALSE);
- pHalData->TXPowercount = 0;
-
- // 2011/08/23 MH Add for power tracking after S3/S4 turn off RF. In this case, we need to execute IQK again. Otherwise
- // The IQK scheme will use old value to save and cause incorrect BB value.
- {
- RT_RF_POWER_STATE rtState;
-
- Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState));
-
- if(Adapter->bDriverStopped || Adapter->bDriverIsGoingToPnpSetPowerSleep || rtState == eRfOff)
- {
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Incorrect pwrtrack point, re-iqk next time\n"));
- pHalData->bIQKInitialized = FALSE;
- }
- }
-
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("<===odm_TXPowerTrackingCallbackThermalMeter92C\n"));
-#endif
-
-}
-
-//#if (RT_PLATFORM == PLATFORM_WINDOWS) && (HAL_CODE_BASE==RTL8192_C)
-VOID
-odm_TXPowerTrackingCallbackRXGainThermalMeter92D(
- IN PADAPTER Adapter
- )
-{
- u1Byte index_mapping[Rx_index_mapping_NUM] = {
- 0x0f, 0x0f, 0x0f, 0x0f, 0x0b,
- 0x0a, 0x09, 0x08, 0x07, 0x06,
- 0x05, 0x04, 0x04, 0x03, 0x02
- };
-
-#ifndef AP_BUILD_WORKAROUND
- u1Byte eRFPath;
- u4Byte u4tmp;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
-
- u4tmp = (index_mapping[(pHalData->EEPROMThermalMeter - pHalData->ThermalValue_RxGain)]) << 12;
-
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("===>odm_TXPowerTrackingCallbackRXGainThermalMeter92D interface %u Rx Gain %x\n", Adapter->interfaceIndex, u4tmp));
-
- for(eRFPath = RF_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
- PHY_SetRFReg(Adapter, (ODM_RF_RADIO_PATH_E)eRFPath, RF_RXRF_A3, bRFRegOffsetMask, (pHalData->RegRF3C[eRFPath]&(~(0xF000)))|u4tmp);
-#endif
-
-};
-
-
-//091212 chiyokolin
-VOID
-odm_TXPowerTrackingCallbackThermalMeter92D(
- IN PADAPTER Adapter
- )
-{
-
-#ifndef AP_BUILD_WORKAROUND
-
-//#if (RT_PLATFORM == PLATFORM_WINDOWS) && (HAL_CODE_BASE==RTL8192_C)
-#if (HAL_CODE_BASE==RTL8192_C)
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
- u1Byte ThermalValue = 0, delta, delta_LCK, delta_IQK, delta_RxGain, index, offset;
- u1Byte ThermalValue_AVG_count = 0;
- u4Byte ThermalValue_AVG = 0;
- s4Byte ele_A=0, ele_D, TempCCk, X, value32;
- s4Byte Y, ele_C=0;
- s1Byte OFDM_index[2], CCK_index=0, OFDM_index_old[2], CCK_index_old=0;
- u4Byte i = 0;
- BOOLEAN is2T = (IS_92C_SERIAL(pHalData->VersionID) || IS_92D_SINGLEPHY(pHalData->VersionID)) ;
- BOOLEAN bInteralPA = FALSE;
-
- u1Byte OFDM_min_index = 6, OFDM_min_index_internalPA = 3, rf; //OFDM BB Swing should be less than +3.0dB, which is required by Arthur
- u1Byte Indexforchannel = GetRightChnlPlaceforIQK(pHalData->CurrentChannel);
- u1Byte index_mapping[5][index_mapping_NUM] = {
- {0, 1, 3, 6, 8, 9, //5G, path A/MAC 0, decrease power
- 11, 13, 14, 16, 17, 18, 18},
- {0, 2, 4, 5, 7, 10, //5G, path A/MAC 0, increase power
- 12, 14, 16, 18, 18, 18, 18},
- {0, 2, 3, 6, 8, 9, //5G, path B/MAC 1, decrease power
- 11, 13, 14, 16, 17, 18, 18},
- {0, 2, 4, 5, 7, 10, //5G, path B/MAC 1, increase power
- 13, 16, 16, 18, 18, 18, 18},
- {0, 1, 2, 3, 4, 5, //2.4G, for decreas power
- 6, 7, 7, 8, 9, 10, 10},
- };
-
-u1Byte index_mapping_internalPA[8][index_mapping_NUM] = {
- {0, 1, 2, 4, 6, 7, //5G, path A/MAC 0, ch36-64, decrease power
- 9, 11, 12, 14, 15, 16, 16},
- {0, 2, 4, 5, 7, 10, //5G, path A/MAC 0, ch36-64, increase power
- 12, 14, 16, 18, 18, 18, 18},
- {0, 1, 2, 3, 5, 6, //5G, path A/MAC 0, ch100-165, decrease power
- 8, 10, 11, 13, 14, 15, 15},
- {0, 2, 4, 5, 7, 10, //5G, path A/MAC 0, ch100-165, increase power
- 12, 14, 16, 18, 18, 18, 18},
- {0, 1, 2, 4, 6, 7, //5G, path B/MAC 1, ch36-64, decrease power
- 9, 11, 12, 14, 15, 16, 16},
- {0, 2, 4, 5, 7, 10, //5G, path B/MAC 1, ch36-64, increase power
- 13, 16, 16, 18, 18, 18, 18},
- {0, 1, 2, 3, 5, 6, //5G, path B/MAC 1, ch100-165, decrease power
- 8, 9, 10, 12, 13, 14, 14},
- {0, 2, 4, 5, 7, 10, //5G, path B/MAC 1, ch100-165, increase power
- 13, 16, 16, 18, 18, 18, 18},
- };
-
-//#if MP_DRIVER != 1
-// return;
-//#endif
-
-
- pHalData->TXPowerTrackingCallbackCnt++; //cosa add for debug
- pHalData->bTXPowerTrackingInit = TRUE;
-
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("===>dm_TXPowerTrackingCallback_ThermalMeter_92D interface %u txpowercontrol %d\n", Adapter->interfaceIndex, pHalData->TxPowerTrackControl));
-
- ThermalValue = (u1Byte)PHY_QueryRFReg(Adapter, RF_PATH_A, RF_T_METER_92D, 0xf800); //0x42: RF Reg[15:11] 92D
-
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter));
-
- //PHY_APCalibrate(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
- //if (IS_HARDWARE_TYPE_8188E(Adapter)/* ||
- // is_ha*/)
- //{
- // PHY_APCalibrate_8188E(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
- //}
- //else if (IS_HARDWARE_TYPE_8192C(Adapter) ||
- // IS_HARDWARE_TYPE_8192D(Adapter) ||
- // IS_HARDWARE_TYPE_8723A(Adapter))
- {
- PHY_APCalibrate_8192C(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
- }
-
-// if(!pHalData->TxPowerTrackControl)
-// return;
-
- if(is2T)
- rf = 2;
- else
- rf = 1;
-
- if(ThermalValue)
- {
-// if(!pHalData->ThermalValue)
- {
- //Query OFDM path A default setting
- ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord)&bMaskOFDM_D;
- for(i=0; i<OFDM_TABLE_SIZE_92D; i++) //find the index
- {
- if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
- {
- OFDM_index_old[0] = (u1Byte)i;
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial pathA ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
- rOFDM0_XATxIQImbalance, ele_D, OFDM_index_old[0]));
- break;
- }
- }
-
- //Query OFDM path B default setting
- if(is2T)
- {
- ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord)&bMaskOFDM_D;
- for(i=0; i<OFDM_TABLE_SIZE_92D; i++) //find the index
- {
- if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
- {
- OFDM_index_old[1] = (u1Byte)i;
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial pathB ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
- rOFDM0_XBTxIQImbalance, ele_D, OFDM_index_old[1]));
- break;
- }
- }
- }
-
- if(pHalData->CurrentBandType92D == BAND_ON_2_4G)
- {
- //Query CCK default setting From 0xa24
- TempCCk = pHalData->RegA24;
-
- for(i=0 ; i<CCK_TABLE_SIZE ; i++)
- {
- if(pHalData->bCCKinCH14)
- {
- if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch14[i][2], 4)==0)
- {
- CCK_index_old =(u1Byte) i;
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch 14 %d\n",
- rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
- break;
- }
- }
- else
- {
- if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch1_Ch13[i][2], 4)==0)
- {
- CCK_index_old =(u1Byte) i;
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch14 %d\n",
- rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
- break;
- }
- }
- }
- }
- else
- {
- TempCCk = 0x090e1317;
- CCK_index_old = 12;
- }
-
- if(!pHalData->ThermalValue)
- {
- pHalData->ThermalValue = pHalData->EEPROMThermalMeter;
- pHalData->ThermalValue_LCK = ThermalValue;
- pHalData->ThermalValue_IQK = ThermalValue;
- pHalData->ThermalValue_RxGain = pHalData->EEPROMThermalMeter;
-
- for(i = 0; i < rf; i++)
- pHalData->OFDM_index[i] = OFDM_index_old[i];
- pHalData->CCK_index = CCK_index_old;
- }
-
- if(pHalData->bReloadtxpowerindex)
- {
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("reload ofdm index for band switch\n"));
- }
-
- //calculate average thermal meter
- {
- pHalData->ThermalValue_AVG[pHalData->ThermalValue_AVG_index] = ThermalValue;
- pHalData->ThermalValue_AVG_index++;
- if(pHalData->ThermalValue_AVG_index == AVG_THERMAL_NUM)
- pHalData->ThermalValue_AVG_index = 0;
-
- for(i = 0; i < AVG_THERMAL_NUM; i++)
- {
- if(pHalData->ThermalValue_AVG[i])
- {
- ThermalValue_AVG += pHalData->ThermalValue_AVG[i];
- ThermalValue_AVG_count++;
- }
- }
-
- if(ThermalValue_AVG_count)
- ThermalValue = (u1Byte)(ThermalValue_AVG / ThermalValue_AVG_count);
- }
- }
-
- if(pHalData->bReloadtxpowerindex)
- {
- delta = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
- pHalData->bReloadtxpowerindex = FALSE;
- pHalData->bDoneTxpower = FALSE;
- }
- else if(pHalData->bDoneTxpower)
- {
- delta = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
- }
- else
- {
- delta = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
- }
- delta_LCK = (ThermalValue > pHalData->ThermalValue_LCK)?(ThermalValue - pHalData->ThermalValue_LCK):(pHalData->ThermalValue_LCK - ThermalValue);
- delta_IQK = (ThermalValue > pHalData->ThermalValue_IQK)?(ThermalValue - pHalData->ThermalValue_IQK):(pHalData->ThermalValue_IQK - ThermalValue);
- delta_RxGain = (ThermalValue > pHalData->ThermalValue_RxGain)?(ThermalValue - pHalData->ThermalValue_RxGain):(pHalData->ThermalValue_RxGain - ThermalValue);
-
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("interface %u Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x delta 0x%x delta_LCK 0x%x delta_IQK 0x%x delta_RxGain 0x%x\n", Adapter->interfaceIndex, ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter, delta, delta_LCK, delta_IQK, delta_RxGain));
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("interface %u pre thermal meter LCK 0x%x pre thermal meter IQK 0x%x delta_LCK_bound 0x%x delta_IQK_bound 0x%x\n", Adapter->interfaceIndex, pHalData->ThermalValue_LCK, pHalData->ThermalValue_IQK, pHalData->Delta_LCK, pHalData->Delta_IQK));
-
- if((delta_LCK > pHalData->Delta_LCK) && (pHalData->Delta_LCK != 0))
- {
- pHalData->ThermalValue_LCK = ThermalValue;
- PHY_LCCalibrate(Adapter);
- }
-
- if(delta > 0 && pHalData->TxPowerTrackControl)
- {
- delta = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
-
- //calculate new OFDM / CCK offset
- {
- if(pHalData->CurrentBandType92D == BAND_ON_2_4G)
- {
- offset = 4;
-
- if(delta > index_mapping_NUM-1)
- index = index_mapping[offset][index_mapping_NUM-1];
- else
- index = index_mapping[offset][delta];
-
- if(ThermalValue > pHalData->EEPROMThermalMeter)
- {
- for(i = 0; i < rf; i++)
- OFDM_index[i] = pHalData->OFDM_index[i] -delta;
- CCK_index = pHalData->CCK_index -delta;
- }
- else
- {
- for(i = 0; i < rf; i++)
- OFDM_index[i] = pHalData->OFDM_index[i] + index;
- CCK_index = pHalData->CCK_index + index;
- }
- }
- else if(pHalData->CurrentBandType92D == BAND_ON_5G)
- {
- for(i = 0; i < rf; i++)
- {
- if(pHalData->MacPhyMode92D == DUALMAC_DUALPHY &&
- Adapter->interfaceIndex == 1) //MAC 1 5G
- bInteralPA = pHalData->InternalPA5G[1];
- else
- bInteralPA = pHalData->InternalPA5G[i];
-
- if(bInteralPA)
- {
- if(Adapter->interfaceIndex == 1 || i == rf)
- offset = 4;
- else
- offset = 0;
-
- if(pHalData->CurrentChannel >= 100 && pHalData->CurrentChannel <= 165)
- offset += 2;
- }
- else
- {
- if(Adapter->interfaceIndex == 1 || i == rf)
- offset = 2;
- else
- offset = 0;
- }
-
- if(ThermalValue > pHalData->EEPROMThermalMeter) //set larger Tx power
- offset++;
-
- if(bInteralPA)
- {
- if(delta > index_mapping_NUM-1)
- index = index_mapping_internalPA[offset][index_mapping_NUM-1];
- else
- index = index_mapping_internalPA[offset][delta];
- }
- else
- {
- if(delta > index_mapping_NUM-1)
- index = index_mapping[offset][index_mapping_NUM-1];
- else
- index = index_mapping[offset][delta];
- }
-
- if(ThermalValue > pHalData->EEPROMThermalMeter) //set larger Tx power
- {
- if(bInteralPA && ThermalValue > 0x12)
- {
- OFDM_index[i] = pHalData->OFDM_index[i] -((delta/2)*3+(delta%2));
- }
- else
- {
- OFDM_index[i] = pHalData->OFDM_index[i] -index;
- }
- }
- else
- {
- OFDM_index[i] = pHalData->OFDM_index[i] + index;
- }
- }
- }
-
- if(is2T)
- {
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
- pHalData->OFDM_index[0], pHalData->OFDM_index[1], pHalData->CCK_index));
- }
- else
- {
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, CCK_index=0x%x\n",
- pHalData->OFDM_index[0], pHalData->CCK_index));
- }
-
- for(i = 0; i < rf; i++)
- {
- if(OFDM_index[i] > OFDM_TABLE_SIZE_92D-1)
- {
- OFDM_index[i] = OFDM_TABLE_SIZE_92D-1;
- }
- else if(bInteralPA || pHalData->CurrentBandType92D == BAND_ON_2_4G)
- {
- if (OFDM_index[i] < OFDM_min_index_internalPA)
- OFDM_index[i] = OFDM_min_index_internalPA;
- }
- else if (OFDM_index[i] < OFDM_min_index)
- {
- OFDM_index[i] = OFDM_min_index;
- }
- }
-
- if(pHalData->CurrentBandType92D == BAND_ON_2_4G)
- {
- if(CCK_index > CCK_TABLE_SIZE-1)
- CCK_index = CCK_TABLE_SIZE-1;
- else if (CCK_index < 0)
- CCK_index = 0;
- }
-
- if(is2T)
- {
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
- OFDM_index[0], OFDM_index[1], CCK_index));
- }
- else
- {
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, CCK_index=0x%x\n",
- OFDM_index[0], CCK_index));
- }
- }
-
- //Config by SwingTable
- if(pHalData->TxPowerTrackControl && !pHalData->bNOPG)
- {
- pHalData->bDoneTxpower = TRUE;
-
- //Adujst OFDM Ant_A according to IQK result
- ele_D = (OFDMSwingTable[(u1Byte)OFDM_index[0]] & 0xFFC00000)>>22;
-// X = pHalData->RegE94;
-// Y = pHalData->RegE9C;
- X = pHalData->IQKMatrixRegSetting[Indexforchannel].Value[0][0];
- Y = pHalData->IQKMatrixRegSetting[Indexforchannel].Value[0][1];
-
- if(X != 0 && pHalData->CurrentBandType92D == BAND_ON_2_4G)
- {
- if ((X & 0x00000200) != 0)
- X = X | 0xFFFFFC00;
- ele_A = ((X * ele_D)>>8)&0x000003FF;
-
- //new element C = element D x Y
- if ((Y & 0x00000200) != 0)
- Y = Y | 0xFFFFFC00;
- ele_C = ((Y * ele_D)>>8)&0x000003FF;
-
- //wirte new elements A, C, D to regC80 and regC94, element B is always 0
- value32 = (ele_D<<22)|((ele_C&0x3F)<<16)|ele_A;
- PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, value32);
-
- value32 = (ele_C&0x000003C0)>>6;
- PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, value32);
-
- value32 = ((X * ele_D)>>7)&0x01;
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT24, value32);
-
- }
- else
- {
- PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable[(u1Byte)OFDM_index[0]]);
- PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, 0x00);
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT24, 0x00);
- }
-
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD, ("TxPwrTracking for interface %u path A: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x 0xe94 = 0x%x 0xe9c = 0x%x\n",
- (u1Byte)Adapter->interfaceIndex, (u4Byte)X, (u4Byte)Y, (u4Byte)ele_A, (u4Byte)ele_C, (u4Byte)ele_D, (u4Byte)X, (u4Byte)Y));
-
-
- if(pHalData->CurrentBandType92D == BAND_ON_2_4G)
- {
- //Adjust CCK according to IQK result
- if(!pHalData->bCCKinCH14){
- PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][0]);
- PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][1]);
- PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][2]);
- PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][3]);
- PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][4]);
- PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][5]);
- PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][6]);
- PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][7]);
- }
- else{
- PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch14[(u1Byte)CCK_index][0]);
- PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch14[(u1Byte)CCK_index][1]);
- PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch14[(u1Byte)CCK_index][2]);
- PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch14[(u1Byte)CCK_index][3]);
- PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch14[(u1Byte)CCK_index][4]);
- PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch14[(u1Byte)CCK_index][5]);
- PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch14[(u1Byte)CCK_index][6]);
- PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch14[(u1Byte)CCK_index][7]);
- }
- }
-
- if(is2T)
- {
- ele_D = (OFDMSwingTable[(u1Byte)OFDM_index[1]] & 0xFFC00000)>>22;
-
- //new element A = element D x X
-// X = pHalData->RegEB4;
-// Y = pHalData->RegEBC;
- X = pHalData->IQKMatrixRegSetting[Indexforchannel].Value[0][4];
- Y = pHalData->IQKMatrixRegSetting[Indexforchannel].Value[0][5];
-
- if(X != 0 && pHalData->CurrentBandType92D == BAND_ON_2_4G)
- {
- if ((X & 0x00000200) != 0) //consider minus
- X = X | 0xFFFFFC00;
- ele_A = ((X * ele_D)>>8)&0x000003FF;
-
- //new element C = element D x Y
- if ((Y & 0x00000200) != 0)
- Y = Y | 0xFFFFFC00;
- ele_C = ((Y * ele_D)>>8)&0x00003FF;
-
- //wirte new elements A, C, D to regC88 and regC9C, element B is always 0
- value32=(ele_D<<22)|((ele_C&0x3F)<<16) |ele_A;
- PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, value32);
-
- value32 = (ele_C&0x000003C0)>>6;
- PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, value32);
-
- value32 = ((X * ele_D)>>7)&0x01;
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT28, value32);
-
- }
- else
- {
- PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, OFDMSwingTable[(u1Byte)OFDM_index[1]]);
- PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, 0x00);
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT28, 0x00);
- }
-
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD, ("TxPwrTracking path B: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x 0xeb4 = 0x%x 0xebc = 0x%x\n",
- (u4Byte)X, (u4Byte)Y, (u4Byte)ele_A, (u4Byte)ele_C, (u4Byte)ele_D, (u4Byte)X, (u4Byte)Y));
- }
-
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD, ("TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n", PHY_QueryBBReg(Adapter, 0xc80, bMaskDWord), PHY_QueryBBReg(Adapter, 0xc94, bMaskDWord), PHY_QueryRFReg(Adapter, RF_PATH_A, 0x24, bRFRegOffsetMask)));
- }
- }
-
- if((delta_IQK > pHalData->Delta_IQK) && (pHalData->Delta_IQK != 0))
- {
- PHY_ResetIQKResult(Adapter);
- pHalData->ThermalValue_IQK = ThermalValue;
-#if (DEV_BUS_TYPE == RT_PCI_INTERFACE)
-#if USE_WORKITEM
- PlatformAcquireMutex(&pHalData->mxChnlBwControl);
-#else
- PlatformAcquireSpinLock(Adapter, RT_CHANNEL_AND_BANDWIDTH_SPINLOCK);
-#endif
-#elif((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))
- PlatformAcquireMutex(&pHalData->mxChnlBwControl);
-#endif
-
- PHY_IQCalibrate(Adapter, FALSE);
-
-#if (DEV_BUS_TYPE == RT_PCI_INTERFACE)
-#if USE_WORKITEM
- PlatformReleaseMutex(&pHalData->mxChnlBwControl);
-#else
- PlatformReleaseSpinLock(Adapter, RT_CHANNEL_AND_BANDWIDTH_SPINLOCK);
-#endif
-#elif((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))
- PlatformReleaseMutex(&pHalData->mxChnlBwControl);
-#endif
-
- }
-
- if(delta_RxGain > 0 && pHalData->CurrentBandType92D == BAND_ON_5G
- && ThermalValue <= pHalData->EEPROMThermalMeter)
- {
- pHalData->ThermalValue_RxGain = ThermalValue;
- odm_TXPowerTrackingCallbackRXGainThermalMeter92D(Adapter);
- }
-
- //update thermal meter value
- if(pHalData->TxPowerTrackControl)
- {
- Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_THERMAL_VALUE, &ThermalValue);
- }
-
- }
-
- ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("<===dm_TXPowerTrackingCallback_ThermalMeter_92D\n"));
-
- pHalData->TXPowercount = 0;
-#endif
-#endif
-}
-
-
-//
-// Description:
-// - Dispatch TxPower Tracking direct call ONLY for 92s.
-// - We shall NOT schedule Workitem within PASSIVE LEVEL, which will cause system resource
-// leakage under some platform.
-//
-// Assumption:
-// PASSIVE_LEVEL when this routine is called.
-//
-// Added by Roger, 2009.06.18.
-//
-VOID
-odm_TXPowerTrackingDirectCall92C(
- IN PADAPTER Adapter
- )
-{
-#ifndef AP_BUILD_WORKAROUND
- if(IS_HARDWARE_TYPE_8192D(Adapter))
- odm_TXPowerTrackingCallbackThermalMeter92D(Adapter);
- else
- odm_TXPowerTrackingCallbackThermalMeter92C(Adapter);
-#endif
-}
-
-
-VOID
-odm_TXPowerTrackingCallback_ThermalMeter_92C(
- IN PADAPTER Adapter
- )
-{
-#if ((RT_PLATFORM == PLATFORM_WINDOWS) || (RT_PLATFORM == PLATFORM_LINUX)) && (HAL_CODE_BASE==RTL8192_C)
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u1Byte ThermalValue = 0, delta, delta_LCK, delta_IQK, delta_HP, TimeOut = 100;
- s4Byte ele_A=0, ele_D, TempCCk, X, value32;
- s4Byte Y, ele_C=0;
- s1Byte OFDM_index[2], CCK_index=0, OFDM_index_old[2], CCK_index_old=0;
- int i = 0;
- BOOLEAN is2T = IS_92C_SERIAL(pHalData->VersionID);
-
-#if MP_DRIVER == 1
- PMPT_CONTEXT pMptCtx = &(Adapter->MptCtx);
- pu1Byte TxPwrLevel = pMptCtx->TxPwrLevel;
-#endif
- u1Byte OFDM_min_index = 6, rf; //OFDM BB Swing should be less than +3.0dB, which is required by Arthur
-#if 0
- u4Byte DPK_delta_mapping[2][DPK_DELTA_MAPPING_NUM] = {
- {0x1c, 0x1c, 0x1d, 0x1d, 0x1e,
- 0x1f, 0x00, 0x00, 0x01, 0x01,
- 0x02, 0x02, 0x03},
- {0x1c, 0x1d, 0x1e, 0x1e, 0x1e,
- 0x1f, 0x00, 0x00, 0x01, 0x02,
- 0x02, 0x03, 0x03}};
-#endif
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- u1Byte ThermalValue_HP_count = 0;
- u4Byte ThermalValue_HP = 0;
- s1Byte index_mapping_HP[index_mapping_HP_NUM] = {
- 0, 1, 3, 4, 6,
- 7, 9, 10, 12, 13,
- 15, 16, 18, 19, 21
- };
-
- s1Byte index_HP;
-#endif
-
- if (ODM_CheckPowerStatus(Adapter) == FALSE)
- return;
-
- pHalData->TXPowerTrackingCallbackCnt++; //cosa add for debug
- pHalData->bTXPowerTrackingInit = TRUE;
-
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("===>odm_TXPowerTrackingCallback_ThermalMeter_92C\n"));
-
- ThermalValue = (u1Byte)PHY_QueryRFReg(Adapter, RF_PATH_A, RF_T_METER, 0x1f); // 0x24: RF Reg[4:0]
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter));
-
- PHY_APCalibrate_8192C(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
-
- if(is2T)
- rf = 2;
- else
- rf = 1;
-
- while(PlatformAtomicExchange(&Adapter->IntrCCKRefCount, TRUE) == TRUE)
- {
- PlatformSleepUs(100);
- TimeOut--;
- if(TimeOut <= 0)
- {
- RTPRINT(FINIT, INIT_TxPower,
- ("!!!odm_TXPowerTrackingCallback_ThermalMeter_92C Wait for check CCK gain index too long!!!\n" ));
- break;
- }
- }
-
- if(ThermalValue)
- {
-// if(!pHalData->ThermalValue)
- {
- //Query OFDM path A default setting
- ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord)&bMaskOFDM_D;
- for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
- {
- if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
- {
- OFDM_index_old[0] = (u1Byte)i;
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial pathA ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
- rOFDM0_XATxIQImbalance, ele_D, OFDM_index_old[0]));
- break;
- }
- }
-
- //Query OFDM path B default setting
- if(is2T)
- {
- ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord)&bMaskOFDM_D;
- for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
- {
- if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
- {
- OFDM_index_old[1] = (u1Byte)i;
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial pathB ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
- rOFDM0_XBTxIQImbalance, ele_D, OFDM_index_old[1]));
- break;
- }
- }
- }
-
- //Query CCK default setting From 0xa24
- TempCCk = PHY_QueryBBReg(Adapter, rCCK0_TxFilter2, bMaskDWord)&bMaskCCK;
- for(i=0 ; i<CCK_TABLE_SIZE ; i++)
- {
- if(pHalData->bCCKinCH14)
- {
- if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch14[i][2], 4)==0)
- {
- CCK_index_old =(u1Byte) i;
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch 14 %d\n",
- rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
- break;
- }
- }
- else
- {
- if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch1_Ch13[i][2], 4)==0)
- {
- CCK_index_old =(u1Byte) i;
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch14 %d\n",
- rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
- break;
- }
- }
- }
-
- if(!pHalData->ThermalValue)
- {
- pHalData->ThermalValue = pHalData->EEPROMThermalMeter;
- pHalData->ThermalValue_LCK = ThermalValue;
- pHalData->ThermalValue_IQK = ThermalValue;
- pHalData->ThermalValue_DPK = pHalData->EEPROMThermalMeter;
-
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- for(i = 0; i < rf; i++)
- pHalData->OFDM_index_HP[i] = pHalData->OFDM_index[i] = OFDM_index_old[i];
- pHalData->CCK_index_HP = pHalData->CCK_index = CCK_index_old;
-#else
- for(i = 0; i < rf; i++)
- pHalData->OFDM_index[i] = OFDM_index_old[i];
- pHalData->CCK_index = CCK_index_old;
-#endif
- }
-
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
- {
- pHalData->ThermalValue_HP[pHalData->ThermalValue_HP_index] = ThermalValue;
- pHalData->ThermalValue_HP_index++;
- if(pHalData->ThermalValue_HP_index == HP_THERMAL_NUM)
- pHalData->ThermalValue_HP_index = 0;
-
- for(i = 0; i < HP_THERMAL_NUM; i++)
- {
- if(pHalData->ThermalValue_HP[i])
- {
- ThermalValue_HP += pHalData->ThermalValue_HP[i];
- ThermalValue_HP_count++;
- }
- }
-
- if(ThermalValue_HP_count)
- ThermalValue = (u1Byte)(ThermalValue_HP / ThermalValue_HP_count);
- }
-#endif
- }
-
- delta = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
- {
- if(pHalData->bDoneTxpower)
- delta_HP = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
- else
- delta_HP = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
- }
- else
-#endif
- {
- delta_HP = 0;
- }
- delta_LCK = (ThermalValue > pHalData->ThermalValue_LCK)?(ThermalValue - pHalData->ThermalValue_LCK):(pHalData->ThermalValue_LCK - ThermalValue);
- delta_IQK = (ThermalValue > pHalData->ThermalValue_IQK)?(ThermalValue - pHalData->ThermalValue_IQK):(pHalData->ThermalValue_IQK - ThermalValue);
-
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x delta 0x%x delta_LCK 0x%x delta_IQK 0x%x\n", ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter, delta, delta_LCK, delta_IQK));
-
- if(delta_LCK > 1)
- {
- pHalData->ThermalValue_LCK = ThermalValue;
- PHY_LCCalibrate_8192C(Adapter);
- }
-
- if((delta > 0 || delta_HP > 0)&& pHalData->TxPowerTrackControl)
- {
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
- {
- pHalData->bDoneTxpower = TRUE;
- delta_HP = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
-
- if(delta_HP > index_mapping_HP_NUM-1)
- index_HP = index_mapping_HP[index_mapping_HP_NUM-1];
- else
- index_HP = index_mapping_HP[delta_HP];
-
- if(ThermalValue > pHalData->EEPROMThermalMeter) //set larger Tx power
- {
- for(i = 0; i < rf; i++)
- OFDM_index[i] = pHalData->OFDM_index_HP[i] - index_HP;
- CCK_index = pHalData->CCK_index_HP -index_HP;
- }
- else
- {
- for(i = 0; i < rf; i++)
- OFDM_index[i] = pHalData->OFDM_index_HP[i] + index_HP;
- CCK_index = pHalData->CCK_index_HP + index_HP;
- }
-
- delta_HP = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
-
- }
- else
-#endif
- {
- if(ThermalValue > pHalData->ThermalValue)
- {
- for(i = 0; i < rf; i++)
- pHalData->OFDM_index[i] -= delta;
- pHalData->CCK_index -= delta;
- }
- else
- {
- for(i = 0; i < rf; i++)
- pHalData->OFDM_index[i] += delta;
- pHalData->CCK_index += delta;
- }
- }
-
- if(is2T)
- {
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
- pHalData->OFDM_index[0], pHalData->OFDM_index[1], pHalData->CCK_index));
- }
- else
- {
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, CCK_index=0x%x\n",
- pHalData->OFDM_index[0], pHalData->CCK_index));
- }
-
- //no adjust
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- if(RT_GetInterfaceSelection(Adapter) != INTF_SEL1_USB_High_Power)
-#endif
- {
- if(ThermalValue > pHalData->EEPROMThermalMeter)
- {
- for(i = 0; i < rf; i++)
- OFDM_index[i] = pHalData->OFDM_index[i]+1;
- CCK_index = pHalData->CCK_index+1;
- }
- else
- {
- for(i = 0; i < rf; i++)
- OFDM_index[i] = pHalData->OFDM_index[i];
- CCK_index = pHalData->CCK_index;
- }
-
-#if MP_DRIVER == 1
- for(i = 0; i < rf; i++)
- {
- if(TxPwrLevel[i] >=0 && TxPwrLevel[i] <=26)
- {
- if(ThermalValue > pHalData->EEPROMThermalMeter)
- {
- if (delta < 5)
- OFDM_index[i] -= 1;
- else
- OFDM_index[i] -= 2;
- }
- else if(delta > 5 && ThermalValue < pHalData->EEPROMThermalMeter)
- {
- OFDM_index[i] += 1;
- }
- }
- else if (TxPwrLevel[i] >= 27 && TxPwrLevel[i] <= 32 && ThermalValue > pHalData->EEPROMThermalMeter)
- {
- if (delta < 5)
- OFDM_index[i] -= 1;
- else
- OFDM_index[i] -= 2;
- }
- else if (TxPwrLevel[i] >= 32 && TxPwrLevel[i] <= 38 && ThermalValue > pHalData->EEPROMThermalMeter && delta > 5)
- {
- OFDM_index[i] -= 1;
- }
- }
-
- {
- if(TxPwrLevel[i] >=0 && TxPwrLevel[i] <=26)
- {
- if(ThermalValue > pHalData->EEPROMThermalMeter)
- {
- if (delta < 5)
- CCK_index -= 1;
- else
- CCK_index -= 2;
- }
- else if(delta > 5 && ThermalValue < pHalData->EEPROMThermalMeter)
- {
- CCK_index += 1;
- }
- }
- else if (TxPwrLevel[i] >= 27 && TxPwrLevel[i] <= 32 && ThermalValue > pHalData->EEPROMThermalMeter)
- {
- if (delta < 5)
- CCK_index -= 1;
- else
- CCK_index -= 2;
- }
- else if (TxPwrLevel[i] >= 32 && TxPwrLevel[i] <= 38 && ThermalValue > pHalData->EEPROMThermalMeter && delta > 5)
- {
- CCK_index -= 1;
- }
- }
-#endif
- }
-
- for(i = 0; i < rf; i++)
- {
- if(OFDM_index[i] > (OFDM_TABLE_SIZE_92C-1))
- OFDM_index[i] = (OFDM_TABLE_SIZE_92C-1);
- else if (OFDM_index[i] < OFDM_min_index)
- OFDM_index[i] = OFDM_min_index;
- }
-
- if(CCK_index > (CCK_TABLE_SIZE-1))
- CCK_index = (CCK_TABLE_SIZE-1);
- else if (CCK_index < 0)
- CCK_index = 0;
-
- if(is2T)
- {
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
- OFDM_index[0], OFDM_index[1], CCK_index));
- }
- else
- {
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, CCK_index=0x%x\n",
- OFDM_index[0], CCK_index));
- }
- }
-
- if(pHalData->TxPowerTrackControl && (delta != 0 || delta_HP != 0))
- {
- //Adujst OFDM Ant_A according to IQK result
- ele_D = (OFDMSwingTable[OFDM_index[0]] & 0xFFC00000)>>22;
- X = pHalData->RegE94;
- Y = pHalData->RegE9C;
-
- if(X != 0)
- {
- if ((X & 0x00000200) != 0)
- X = X | 0xFFFFFC00;
- ele_A = ((X * ele_D)>>8)&0x000003FF;
-
- //new element C = element D x Y
- if ((Y & 0x00000200) != 0)
- Y = Y | 0xFFFFFC00;
- ele_C = ((Y * ele_D)>>8)&0x000003FF;
-
- //wirte new elements A, C, D to regC80 and regC94, element B is always 0
- value32 = (ele_D<<22)|((ele_C&0x3F)<<16)|ele_A;
- PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, value32);
-
- value32 = (ele_C&0x000003C0)>>6;
- PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, value32);
-
- value32 = ((X * ele_D)>>7)&0x01;
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT31, value32);
-
- value32 = ((Y * ele_D)>>7)&0x01;
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT29, value32);
-
- }
- else
- {
- PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[0]]);
- PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, 0x00);
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT31|BIT29, 0x00);
- }
-
- RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking path A: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x\n", X, Y, ele_A, ele_C, ele_D));
-
- //Adjust CCK according to IQK result
- if(!pHalData->bCCKinCH14){
- PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch1_Ch13[CCK_index][0]);
- PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch1_Ch13[CCK_index][1]);
- PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch1_Ch13[CCK_index][2]);
- PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch1_Ch13[CCK_index][3]);
- PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch1_Ch13[CCK_index][4]);
- PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch1_Ch13[CCK_index][5]);
- PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch1_Ch13[CCK_index][6]);
- PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch1_Ch13[CCK_index][7]);
- }
- else{
- PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch14[CCK_index][0]);
- PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch14[CCK_index][1]);
- PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch14[CCK_index][2]);
- PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch14[CCK_index][3]);
- PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch14[CCK_index][4]);
- PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch14[CCK_index][5]);
- PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch14[CCK_index][6]);
- PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch14[CCK_index][7]);
- }
-
- if(is2T)
- {
- ele_D = (OFDMSwingTable[OFDM_index[1]] & 0xFFC00000)>>22;
-
- //new element A = element D x X
- X = pHalData->RegEB4;
- Y = pHalData->RegEBC;
-
- if(X != 0){
- if ((X & 0x00000200) != 0) //consider minus
- X = X | 0xFFFFFC00;
- ele_A = ((X * ele_D)>>8)&0x000003FF;
-
- //new element C = element D x Y
- if ((Y & 0x00000200) != 0)
- Y = Y | 0xFFFFFC00;
- ele_C = ((Y * ele_D)>>8)&0x00003FF;
-
- //wirte new elements A, C, D to regC88 and regC9C, element B is always 0
- value32=(ele_D<<22)|((ele_C&0x3F)<<16) |ele_A;
- PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, value32);
-
- value32 = (ele_C&0x000003C0)>>6;
- PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, value32);
-
- value32 = ((X * ele_D)>>7)&0x01;
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT27, value32);
-
- value32 = ((Y * ele_D)>>7)&0x01;
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT25, value32);
-
- }
- else{
- PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[1]]);
- PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, 0x00);
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT27|BIT25, 0x00);
- }
-
- RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking path B: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x\n", X, Y, ele_A, ele_C, ele_D));
- }
-
- RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n", PHY_QueryBBReg(Adapter, 0xc80, bMaskDWord), PHY_QueryBBReg(Adapter, 0xc94, bMaskDWord), PHY_QueryRFReg(Adapter, RF_PATH_A, 0x24, bRFRegOffsetMask)));
- }
-
-#if MP_DRIVER == 1
- if(delta_IQK > 1)
-#else
- if(delta_IQK > 3)
-#endif
- {
- pHalData->ThermalValue_IQK = ThermalValue;
- PHY_IQCalibrate_8192C(Adapter, FALSE);
- }
-
-#if 1
- if(delta > 0 && IS_HARDWARE_TYPE_8723A(Adapter))
- {
- if(ThermalValue >= 15)
- PHY_SetBBReg(Adapter, REG_AFE_XTAL_CTRL, bMaskDWord, 0x038180fd );
- else
- PHY_SetBBReg(Adapter, REG_AFE_XTAL_CTRL, bMaskDWord, 0x0381808d );
- }
-#endif
-
- //update thermal meter value
- if(pHalData->TxPowerTrackControl)
- Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_THERMAL_VALUE, &ThermalValue);
-
- }
-
- PlatformAtomicExchange(&Adapter->IntrCCKRefCount, FALSE);
- pHalData->TXPowercount = 0;
-
- // 2011/08/23 MH Add for power tracking after S3/S4 turn off RF. In this case, we need to execute IQK again. Otherwise
- // The IQK scheme will use old value to save and cause incorrect BB value.
- {
- RT_RF_POWER_STATE rtState;
-
- Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState));
-
- if(Adapter->bDriverStopped || Adapter->bDriverIsGoingToPnpSetPowerSleep || rtState == eRfOff)
- {
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Incorrect pwrtrack point, re-iqk next time\n"));
- pHalData->bIQKInitialized = FALSE;
- }
- }
-
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("<===odm_TXPowerTrackingCallback_ThermalMeter_92C\n"));
-#endif
-}
-
-VOID
-odm_TXPowerTrackingCallback_ThermalMeter_8723A(
- IN PADAPTER Adapter)
-{
-#if ((RT_PLATFORM == PLATFORM_WINDOWS) || (RT_PLATFORM == PLATFORM_LINUX)) && (HAL_CODE_BASE==RTL8192_C)
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u1Byte ThermalValue = 0, delta, delta_LCK, delta_IQK, delta_HP, TimeOut = 100;
- s4Byte ele_A=0, ele_D, TempCCk, X, value32;
- s4Byte Y, ele_C=0;
- s1Byte OFDM_index[2], CCK_index=0, OFDM_index_old[2], CCK_index_old=0;
- int i = 0;
- BOOLEAN is2T = IS_92C_SERIAL(pHalData->VersionID);
-
-#if MP_DRIVER == 1
- PMPT_CONTEXT pMptCtx = &(Adapter->MptCtx);
- pu1Byte TxPwrLevel = pMptCtx->TxPwrLevel;
-#endif
- u1Byte OFDM_min_index = 6, rf; //OFDM BB Swing should be less than +3.0dB, which is required by Arthur
-#if 0
- u4Byte DPK_delta_mapping[2][DPK_DELTA_MAPPING_NUM] = {
- {0x1c, 0x1c, 0x1d, 0x1d, 0x1e,
- 0x1f, 0x00, 0x00, 0x01, 0x01,
- 0x02, 0x02, 0x03},
- {0x1c, 0x1d, 0x1e, 0x1e, 0x1e,
- 0x1f, 0x00, 0x00, 0x01, 0x02,
- 0x02, 0x03, 0x03}};
-#endif
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- u1Byte ThermalValue_HP_count = 0;
- u4Byte ThermalValue_HP = 0;
- s1Byte index_mapping_HP[index_mapping_HP_NUM] = {
- 0, 1, 3, 4, 6,
- 7, 9, 10, 12, 13,
- 15, 16, 18, 19, 21
- };
-
- s1Byte index_HP;
-#endif
-
- if (ODM_CheckPowerStatus(Adapter) == FALSE)
- return;
-
- pHalData->TXPowerTrackingCallbackCnt++; //cosa add for debug
- pHalData->bTXPowerTrackingInit = TRUE;
-
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("===>odm_TXPowerTrackingCallback_ThermalMeter_92C\n"));
-
- ThermalValue = (u1Byte)PHY_QueryRFReg(Adapter, RF_PATH_A, RF_T_METER, 0x1f); // 0x24: RF Reg[4:0]
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter));
-
-
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- if (ThermalValue <= 0x16)
- { // <20120307, Kordan> Asked by Alex.
- PlatformEFIOWrite2Byte(Adapter, REG_AFE_XTAL_CTRL,
- ((PlatformEFIORead2Byte(Adapter, REG_AFE_XTAL_CTRL))&~(BIT4|BIT5|BIT6|BIT7)) | (BIT7));
- }
- else
- {
- PlatformEFIOWrite2Byte(Adapter, REG_AFE_XTAL_CTRL,
- ((PlatformEFIORead2Byte(Adapter, REG_AFE_XTAL_CTRL))&~(BIT4|BIT5|BIT6|BIT7)) | (BIT4|BIT5|BIT6|BIT7));
- }
-#endif
-
- PHY_APCalibrate_8192C(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
-
- if(is2T)
- rf = 2;
- else
- rf = 1;
-
- while(PlatformAtomicExchange(&Adapter->IntrCCKRefCount, TRUE) == TRUE)
- {
- PlatformSleepUs(100);
- TimeOut--;
- if(TimeOut <= 0)
- {
- RTPRINT(FINIT, INIT_TxPower,
- ("!!!odm_TXPowerTrackingCallback_ThermalMeter_92C Wait for check CCK gain index too long!!!\n" ));
- break;
- }
- }
-
- if(ThermalValue)
- {
-// if(!pHalData->ThermalValue)
- {
- //Query OFDM path A default setting
- ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord)&bMaskOFDM_D;
- for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
- {
- if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
- {
- OFDM_index_old[0] = (u1Byte)i;
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial pathA ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
- rOFDM0_XATxIQImbalance, ele_D, OFDM_index_old[0]));
- break;
- }
- }
-
- //Query OFDM path B default setting
- if(is2T)
- {
- ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord)&bMaskOFDM_D;
- for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
- {
- if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
- {
- OFDM_index_old[1] = (u1Byte)i;
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial pathB ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
- rOFDM0_XBTxIQImbalance, ele_D, OFDM_index_old[1]));
- break;
- }
- }
- }
-
- //Query CCK default setting From 0xa24
- TempCCk = PHY_QueryBBReg(Adapter, rCCK0_TxFilter2, bMaskDWord)&bMaskCCK;
- for(i=0 ; i<CCK_TABLE_SIZE ; i++)
- {
- if(pHalData->bCCKinCH14)
- {
- if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch14[i][2], 4)==0)
- {
- CCK_index_old =(u1Byte) i;
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch 14 %d\n",
- rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
- break;
- }
- }
- else
- {
- if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch1_Ch13[i][2], 4)==0)
- {
- CCK_index_old =(u1Byte) i;
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch14 %d\n",
- rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
- break;
- }
- }
- }
-
- if(!pHalData->ThermalValue)
- {
- pHalData->ThermalValue = pHalData->EEPROMThermalMeter;
- pHalData->ThermalValue_LCK = ThermalValue;
- pHalData->ThermalValue_IQK = ThermalValue;
- pHalData->ThermalValue_DPK = pHalData->EEPROMThermalMeter;
-
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- for(i = 0; i < rf; i++)
- pHalData->OFDM_index_HP[i] = pHalData->OFDM_index[i] = OFDM_index_old[i];
- pHalData->CCK_index_HP = pHalData->CCK_index = CCK_index_old;
-#else
- for(i = 0; i < rf; i++)
- pHalData->OFDM_index[i] = OFDM_index_old[i];
- pHalData->CCK_index = CCK_index_old;
-#endif
- }
-
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
- {
- pHalData->ThermalValue_HP[pHalData->ThermalValue_HP_index] = ThermalValue;
- pHalData->ThermalValue_HP_index++;
- if(pHalData->ThermalValue_HP_index == HP_THERMAL_NUM)
- pHalData->ThermalValue_HP_index = 0;
-
- for(i = 0; i < HP_THERMAL_NUM; i++)
- {
- if(pHalData->ThermalValue_HP[i])
- {
- ThermalValue_HP += pHalData->ThermalValue_HP[i];
- ThermalValue_HP_count++;
- }
- }
-
- if(ThermalValue_HP_count)
- ThermalValue = (u1Byte)(ThermalValue_HP / ThermalValue_HP_count);
- }
-#endif
- }
-
- delta = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
- {
- if(pHalData->bDoneTxpower)
- delta_HP = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
- else
- delta_HP = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
- }
- else
-#endif
- {
- delta_HP = 0;
- }
- delta_LCK = (ThermalValue > pHalData->ThermalValue_LCK)?(ThermalValue - pHalData->ThermalValue_LCK):(pHalData->ThermalValue_LCK - ThermalValue);
- delta_IQK = (ThermalValue > pHalData->ThermalValue_IQK)?(ThermalValue - pHalData->ThermalValue_IQK):(pHalData->ThermalValue_IQK - ThermalValue);
-
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x delta 0x%x delta_LCK 0x%x delta_IQK 0x%x\n", ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter, delta, delta_LCK, delta_IQK));
-
- if(delta_LCK > 1)
- {
- pHalData->ThermalValue_LCK = ThermalValue;
- PHY_LCCalibrate(Adapter);
- }
-
- if((delta > 0 || delta_HP > 0)&& pHalData->TxPowerTrackControl)
- {
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
- {
- pHalData->bDoneTxpower = TRUE;
- delta_HP = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
-
- if(delta_HP > index_mapping_HP_NUM-1)
- index_HP = index_mapping_HP[index_mapping_HP_NUM-1];
- else
- index_HP = index_mapping_HP[delta_HP];
-
- if(ThermalValue > pHalData->EEPROMThermalMeter) //set larger Tx power
- {
- for(i = 0; i < rf; i++)
- OFDM_index[i] = pHalData->OFDM_index_HP[i] - index_HP;
- CCK_index = pHalData->CCK_index_HP -index_HP;
- }
- else
- {
- for(i = 0; i < rf; i++)
- OFDM_index[i] = pHalData->OFDM_index_HP[i] + index_HP;
- CCK_index = pHalData->CCK_index_HP + index_HP;
- }
-
- delta_HP = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
-
- }
- else
-#endif
- {
- if(ThermalValue > pHalData->ThermalValue)
- {
- for(i = 0; i < rf; i++)
- pHalData->OFDM_index[i] -= delta;
- pHalData->CCK_index -= delta;
- }
- else
- {
- for(i = 0; i < rf; i++)
- pHalData->OFDM_index[i] += delta;
- pHalData->CCK_index += delta;
- }
- }
-
- if(is2T)
- {
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
- pHalData->OFDM_index[0], pHalData->OFDM_index[1], pHalData->CCK_index));
- }
- else
- {
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, CCK_index=0x%x\n",
- pHalData->OFDM_index[0], pHalData->CCK_index));
- }
-
- //no adjust
-#if DEV_BUS_TYPE==RT_USB_INTERFACE
- if(RT_GetInterfaceSelection(Adapter) != INTF_SEL1_USB_High_Power)
-#endif
- {
- if(ThermalValue > pHalData->EEPROMThermalMeter)
- {
- for(i = 0; i < rf; i++)
- OFDM_index[i] = pHalData->OFDM_index[i]+1;
- CCK_index = pHalData->CCK_index+1;
- }
- else
- {
- for(i = 0; i < rf; i++)
- OFDM_index[i] = pHalData->OFDM_index[i];
- CCK_index = pHalData->CCK_index;
- }
-
-#if MP_DRIVER == 1
- for(i = 0; i < rf; i++)
- {
- if(TxPwrLevel[i] >=0 && TxPwrLevel[i] <=26)
- {
- if(ThermalValue > pHalData->EEPROMThermalMeter)
- {
- if (delta < 5)
- OFDM_index[i] -= 1;
- else
- OFDM_index[i] -= 2;
- }
- else if(delta >= 5 && ThermalValue < pHalData->EEPROMThermalMeter)
- {
- OFDM_index[i] += 2;
- }
- else if(delta < 5 && ThermalValue < pHalData->EEPROMThermalMeter)
- {
- OFDM_index[i] += 1;
- }
- }
- else if (TxPwrLevel[i] >= 27 && TxPwrLevel[i] <= 32 && ThermalValue > pHalData->EEPROMThermalMeter)
- {
- if (delta < 5)
- OFDM_index[i] -= 1;
- else
- OFDM_index[i] -= 2;
- }
- else if (TxPwrLevel[i] >= 32 && TxPwrLevel[i] <= 38 && ThermalValue > pHalData->EEPROMThermalMeter && delta > 5)
- {
- OFDM_index[i] -= 1;
- }
- }
-
- {
- if(TxPwrLevel[i] >=0 && TxPwrLevel[i] <=26)
- {
- if(ThermalValue > pHalData->EEPROMThermalMeter)
- {
- if (delta < 5)
- CCK_index -= 1;
- else
- CCK_index -= 2;
- }
- else if(delta > 5 && ThermalValue < pHalData->EEPROMThermalMeter)
- {
- CCK_index += 1;
- }
- }
- else if (TxPwrLevel[i] >= 27 && TxPwrLevel[i] <= 32 && ThermalValue > pHalData->EEPROMThermalMeter)
- {
- if (delta < 5)
- CCK_index -= 1;
- else
- CCK_index -= 2;
- }
- else if (TxPwrLevel[i] >= 32 && TxPwrLevel[i] <= 38 && ThermalValue > pHalData->EEPROMThermalMeter && delta > 5)
- {
- CCK_index -= 1;
- }
- }
-#endif
- }
-
- for(i = 0; i < rf; i++)
- {
- if(OFDM_index[i] > (OFDM_TABLE_SIZE_92C-1))
- OFDM_index[i] = (OFDM_TABLE_SIZE_92C-1);
- else if (OFDM_index[i] < OFDM_min_index)
- OFDM_index[i] = OFDM_min_index;
- }
-
- if(CCK_index > (CCK_TABLE_SIZE-1))
- CCK_index = (CCK_TABLE_SIZE-1);
- else if (CCK_index < 0)
- CCK_index = 0;
-
- if(is2T)
- {
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
- OFDM_index[0], OFDM_index[1], CCK_index));
- }
- else
- {
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, CCK_index=0x%x\n",
- OFDM_index[0], CCK_index));
- }
- }
-
- if(pHalData->TxPowerTrackControl && (delta != 0 || delta_HP != 0))
- {
- //Adujst OFDM Ant_A according to IQK result
- ele_D = (OFDMSwingTable[OFDM_index[0]] & 0xFFC00000)>>22;
- X = pHalData->RegE94;
- Y = pHalData->RegE9C;
-
- if(X != 0)
- {
- if ((X & 0x00000200) != 0)
- X = X | 0xFFFFFC00;
- ele_A = ((X * ele_D)>>8)&0x000003FF;
-
- //new element C = element D x Y
- if ((Y & 0x00000200) != 0)
- Y = Y | 0xFFFFFC00;
- ele_C = ((Y * ele_D)>>8)&0x000003FF;
-
- //wirte new elements A, C, D to regC80 and regC94, element B is always 0
- value32 = (ele_D<<22)|((ele_C&0x3F)<<16)|ele_A;
- PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, value32);
-
- value32 = (ele_C&0x000003C0)>>6;
- PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, value32);
-
- value32 = ((X * ele_D)>>7)&0x01;
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT31, value32);
-
- value32 = ((Y * ele_D)>>7)&0x01;
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT29, value32);
-
- }
- else
- {
- PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[0]]);
- PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, 0x00);
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT31|BIT29, 0x00);
- }
-
- RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking path A: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x\n", X, Y, ele_A, ele_C, ele_D));
-
- //Adjust CCK according to IQK result
- if(!pHalData->bCCKinCH14){
- PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch1_Ch13[CCK_index][0]);
- PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch1_Ch13[CCK_index][1]);
- PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch1_Ch13[CCK_index][2]);
- PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch1_Ch13[CCK_index][3]);
- PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch1_Ch13[CCK_index][4]);
- PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch1_Ch13[CCK_index][5]);
- PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch1_Ch13[CCK_index][6]);
- PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch1_Ch13[CCK_index][7]);
- }
- else{
- PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch14[CCK_index][0]);
- PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch14[CCK_index][1]);
- PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch14[CCK_index][2]);
- PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch14[CCK_index][3]);
- PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch14[CCK_index][4]);
- PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch14[CCK_index][5]);
- PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch14[CCK_index][6]);
- PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch14[CCK_index][7]);
- }
-
- if(is2T)
- {
- ele_D = (OFDMSwingTable[OFDM_index[1]] & 0xFFC00000)>>22;
-
- //new element A = element D x X
- X = pHalData->RegEB4;
- Y = pHalData->RegEBC;
-
- if(X != 0){
- if ((X & 0x00000200) != 0) //consider minus
- X = X | 0xFFFFFC00;
- ele_A = ((X * ele_D)>>8)&0x000003FF;
-
- //new element C = element D x Y
- if ((Y & 0x00000200) != 0)
- Y = Y | 0xFFFFFC00;
- ele_C = ((Y * ele_D)>>8)&0x00003FF;
-
- //wirte new elements A, C, D to regC88 and regC9C, element B is always 0
- value32=(ele_D<<22)|((ele_C&0x3F)<<16) |ele_A;
- PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, value32);
-
- value32 = (ele_C&0x000003C0)>>6;
- PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, value32);
-
- value32 = ((X * ele_D)>>7)&0x01;
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT27, value32);
-
- value32 = ((Y * ele_D)>>7)&0x01;
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT25, value32);
-
- }
- else{
- PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[1]]);
- PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, 0x00);
- PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT27|BIT25, 0x00);
- }
-
- RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking path B: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x\n", X, Y, ele_A, ele_C, ele_D));
- }
-
- RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n", PHY_QueryBBReg(Adapter, 0xc80, bMaskDWord), PHY_QueryBBReg(Adapter, 0xc94, bMaskDWord), PHY_QueryRFReg(Adapter, RF_PATH_A, 0x24, bRFRegOffsetMask)));
- }
-
-#if MP_DRIVER == 1
- if(delta_IQK > 1)
-#else
- if(delta_IQK > 3)
-#endif
- {
- pHalData->ThermalValue_IQK = ThermalValue;
- PHY_IQCalibrate(Adapter, FALSE);
- }
-
-#if 1
- if(delta > 0)
- {
- if(ThermalValue >= 15)
- PHY_SetBBReg(Adapter, REG_AFE_XTAL_CTRL, bMaskDWord, 0x038180fd );
- else
- PHY_SetBBReg(Adapter, REG_AFE_XTAL_CTRL, bMaskDWord, 0x0381808d );
- }
-#endif
- //update thermal meter value
- if(pHalData->TxPowerTrackControl)
- Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_THERMAL_VALUE, &ThermalValue);
-
- }
-
- PlatformAtomicExchange(&Adapter->IntrCCKRefCount, FALSE);
- pHalData->TXPowercount = 0;
-
- // 2011/08/23 MH Add for power tracking after S3/S4 turn off RF. In this case, we need to execute IQK again. Otherwise
- // The IQK scheme will use old value to save and cause incorrect BB value.
- {
- RT_RF_POWER_STATE rtState;
-
- Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState));
-
- if(Adapter->bDriverStopped || Adapter->bDriverIsGoingToPnpSetPowerSleep || rtState == eRfOff)
- {
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Incorrect pwrtrack point, re-iqk next time\n"));
- pHalData->bIQKInitialized = FALSE;
- }
- }
-
- RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("<===odm_TXPowerTrackingCallback_ThermalMeter_92C\n"));
-#endif
-}
-
-//
-// ==================================================
-// Tx power tracking relative code.
-// ==================================================
-//
-
-
-#endif
-
-#else //#if (RTL8192C_SUPPORT == 1)
-VOID
-odm_TXPowerTrackingCallback_ThermalMeter_92C(
- IN PADAPTER Adapter
- )
-{
-}
-VOID
-odm_TXPowerTrackingCallback_ThermalMeter_8723A(
- IN PADAPTER Adapter)
-{
-}
-
-#endif //#if (RTL8192C_SUPPORT == 1)
-
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+//============================================================
+// include files
+//============================================================
+
+#include "../odm_precomp.h"
+
+#if (RTL8192C_SUPPORT == 1)
+
+//#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+VOID
+odm_ResetFACounter_92C(
+ IN PDM_ODM_T pDM_Odm
+ )
+{
+// PADAPTER pAdapter = pDM_Odm->Adapter;
+ u1Byte BBReset;
+
+ //reset false alarm counter registers
+ ODM_SetBBReg(pDM_Odm, 0xd00, BIT27, 1);
+ ODM_SetBBReg(pDM_Odm, 0xd00, BIT27, 0);
+ //update ofdm counter
+ ODM_SetBBReg(pDM_Odm, 0xc00, BIT31, 0); //update page C counter
+ ODM_SetBBReg(pDM_Odm, 0xd00, BIT31, 0); //update page D counter
+
+ //reset CCK CCA counter
+ ODM_SetBBReg(pDM_Odm, 0xa2c, BIT13|BIT12, 0);
+ ODM_SetBBReg(pDM_Odm, 0xa2c, BIT13|BIT12, 2);
+ //reset CCK FA counter
+ ODM_SetBBReg(pDM_Odm, 0xa2c, BIT15|BIT14, 0);
+ ODM_SetBBReg(pDM_Odm, 0xa2c, BIT15|BIT14, 2);
+
+
+ //BB Reset
+ if(!pDM_Odm->bLinked)
+ {
+ BBReset = ODM_Read1Byte(pDM_Odm, 0x02);
+ ODM_Write1Byte(pDM_Odm, 0x02, BBReset&(~BIT0));
+ ODM_Write1Byte(pDM_Odm, 0x02, BBReset|BIT0);
+ }
+
+}
+//#endif
+
+#if (DM_ODM_SUPPORT_TYPE == ODM_MP)
+
+
+
+//
+// ==================================================
+// Tx power tracking relative code.
+// ==================================================
+//
+
+
+//091212 chiyokolin
+VOID
+odm_TXPowerTrackingCallbackThermalMeter92C(
+ IN PADAPTER Adapter
+ )
+{
+
+#if ((RT_PLATFORM == PLATFORM_WINDOWS) || (RT_PLATFORM == PLATFORM_LINUX)) && (HAL_CODE_BASE==RTL8192_C)
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
+ u1Byte ThermalValue = 0, delta, delta_LCK, delta_IQK, delta_HP, TimeOut = 100;
+ s4Byte ele_A=0, ele_D, TempCCk, X, value32;
+ s4Byte Y, ele_C=0;
+ s1Byte OFDM_index[2], CCK_index=0, OFDM_index_old[2], CCK_index_old=0;
+ int i = 0;
+ BOOLEAN is2T = IS_92C_SERIAL(pHalData->VersionID);
+
+#if MP_DRIVER == 1
+ PMPT_CONTEXT pMptCtx = &(Adapter->MptCtx);
+ pu1Byte TxPwrLevel = pMptCtx->TxPwrLevel;
+#endif
+ u1Byte OFDM_min_index = 6, rf; //OFDM BB Swing should be less than +3.0dB, which is required by Arthur
+
+ u4Byte DPK_delta_mapping[2][DPK_DELTA_MAPPING_NUM] = {
+ {0x1c, 0x1c, 0x1d, 0x1d, 0x1e,
+ 0x1f, 0x00, 0x00, 0x01, 0x01,
+ 0x02, 0x02, 0x03},
+ {0x1c, 0x1d, 0x1e, 0x1e, 0x1e,
+ 0x1f, 0x00, 0x00, 0x01, 0x02,
+ 0x02, 0x03, 0x03}};
+
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ u1Byte ThermalValue_HP_count = 0;
+ u4Byte ThermalValue_HP = 0;
+ s1Byte index_mapping_HP[index_mapping_HP_NUM] = {
+ 0, 1, 3, 4, 6,
+ 7, 9, 10, 12, 13,
+ 15, 16, 18, 19, 21
+ };
+
+ s1Byte index_HP;
+#endif
+
+ if (ODM_CheckPowerStatus(Adapter) == FALSE)
+ return;
+
+ pHalData->TXPowerTrackingCallbackCnt++; //cosa add for debug
+ pHalData->bTXPowerTrackingInit = TRUE;
+
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("===>odm_TXPowerTrackingCallbackThermalMeter92C\n"));
+
+ ThermalValue = (u1Byte)PHY_QueryRFReg(Adapter, RF_PATH_A, RF_T_METER, 0x1f); // 0x24: RF Reg[4:0]
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter));
+
+ //if (IS_HARDWARE_TYPE_8188E(Adapter)/* ||
+ // is_ha*/)
+ //{
+ // PHY_APCalibrate_8188E(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
+ //}
+ //else if (IS_HARDWARE_TYPE_8192C(Adapter) ||
+ // IS_HARDWARE_TYPE_8192D(Adapter) ||
+ // IS_HARDWARE_TYPE_8723A(Adapter))
+ {
+ PHY_APCalibrate_8192C(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
+ }
+
+ if(is2T)
+ rf = 2;
+ else
+ rf = 1;
+
+ while(PlatformAtomicExchange(&Adapter->IntrCCKRefCount, TRUE) == TRUE)
+ {
+ PlatformSleepUs(100);
+ TimeOut--;
+ if(TimeOut <= 0)
+ {
+ RTPRINT(FINIT, INIT_TxPower,
+ ("!!!odm_TXPowerTrackingCallbackThermalMeter92C Wait for check CCK gain index too long!!!\n" ));
+ break;
+ }
+ }
+
+ if(ThermalValue)
+ {
+// if(!pHalData->ThermalValue)
+ {
+ //Query OFDM path A default setting
+ ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord)&bMaskOFDM_D;
+ for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
+ {
+ if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
+ {
+ OFDM_index_old[0] = (u1Byte)i;
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial pathA ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
+ rOFDM0_XATxIQImbalance, ele_D, OFDM_index_old[0]));
+ break;
+ }
+ }
+
+ //Query OFDM path B default setting
+ if(is2T)
+ {
+ ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord)&bMaskOFDM_D;
+ for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
+ {
+ if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
+ {
+ OFDM_index_old[1] = (u1Byte)i;
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial pathB ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
+ rOFDM0_XBTxIQImbalance, ele_D, OFDM_index_old[1]));
+ break;
+ }
+ }
+ }
+
+ //Query CCK default setting From 0xa24
+ TempCCk = PHY_QueryBBReg(Adapter, rCCK0_TxFilter2, bMaskDWord)&bMaskCCK;
+ for(i=0 ; i<CCK_TABLE_SIZE ; i++)
+ {
+ if(pHalData->bCCKinCH14)
+ {
+ if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch14[i][2], 4)==0)
+ {
+ CCK_index_old =(u1Byte) i;
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch 14 %d\n",
+ rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
+ break;
+ }
+ }
+ else
+ {
+ if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch1_Ch13[i][2], 4)==0)
+ {
+ CCK_index_old =(u1Byte) i;
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch14 %d\n",
+ rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
+ break;
+ }
+ }
+ }
+
+ if(!pHalData->ThermalValue)
+ {
+ pHalData->ThermalValue = pHalData->EEPROMThermalMeter;
+ pHalData->ThermalValue_LCK = ThermalValue;
+ pHalData->ThermalValue_IQK = ThermalValue;
+ pHalData->ThermalValue_DPK = pHalData->EEPROMThermalMeter;
+
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ for(i = 0; i < rf; i++)
+ pHalData->OFDM_index_HP[i] = pHalData->OFDM_index[i] = OFDM_index_old[i];
+ pHalData->CCK_index_HP = pHalData->CCK_index = CCK_index_old;
+#else
+ for(i = 0; i < rf; i++)
+ pHalData->OFDM_index[i] = OFDM_index_old[i];
+ pHalData->CCK_index = CCK_index_old;
+#endif
+ }
+
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
+ {
+ pHalData->ThermalValue_HP[pHalData->ThermalValue_HP_index] = ThermalValue;
+ pHalData->ThermalValue_HP_index++;
+ if(pHalData->ThermalValue_HP_index == HP_THERMAL_NUM)
+ pHalData->ThermalValue_HP_index = 0;
+
+ for(i = 0; i < HP_THERMAL_NUM; i++)
+ {
+ if(pHalData->ThermalValue_HP[i])
+ {
+ ThermalValue_HP += pHalData->ThermalValue_HP[i];
+ ThermalValue_HP_count++;
+ }
+ }
+
+ if(ThermalValue_HP_count)
+ ThermalValue = (u1Byte)(ThermalValue_HP / ThermalValue_HP_count);
+ }
+#endif
+ }
+
+ delta = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
+ {
+ if(pHalData->bDoneTxpower)
+ delta_HP = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
+ else
+ delta_HP = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
+ }
+ else
+#endif
+ {
+ delta_HP = 0;
+ }
+ delta_LCK = (ThermalValue > pHalData->ThermalValue_LCK)?(ThermalValue - pHalData->ThermalValue_LCK):(pHalData->ThermalValue_LCK - ThermalValue);
+ delta_IQK = (ThermalValue > pHalData->ThermalValue_IQK)?(ThermalValue - pHalData->ThermalValue_IQK):(pHalData->ThermalValue_IQK - ThermalValue);
+
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x delta 0x%x delta_LCK 0x%x delta_IQK 0x%x\n", ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter, delta, delta_LCK, delta_IQK));
+
+ if(delta_LCK > 1)
+ {
+ pHalData->ThermalValue_LCK = ThermalValue;
+ PHY_LCCalibrate(Adapter);
+ }
+
+ if((delta > 0 || delta_HP > 0)&& pHalData->TxPowerTrackControl)
+ {
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
+ {
+ pHalData->bDoneTxpower = TRUE;
+ delta_HP = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
+
+ if(delta_HP > index_mapping_HP_NUM-1)
+ index_HP = index_mapping_HP[index_mapping_HP_NUM-1];
+ else
+ index_HP = index_mapping_HP[delta_HP];
+
+ if(ThermalValue > pHalData->EEPROMThermalMeter) //set larger Tx power
+ {
+ for(i = 0; i < rf; i++)
+ OFDM_index[i] = pHalData->OFDM_index_HP[i] - index_HP;
+ CCK_index = pHalData->CCK_index_HP -index_HP;
+ }
+ else
+ {
+ for(i = 0; i < rf; i++)
+ OFDM_index[i] = pHalData->OFDM_index_HP[i] + index_HP;
+ CCK_index = pHalData->CCK_index_HP + index_HP;
+ }
+
+ delta_HP = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
+
+ }
+ else
+#endif
+ {
+ if(ThermalValue > pHalData->ThermalValue)
+ {
+ for(i = 0; i < rf; i++)
+ pHalData->OFDM_index[i] -= delta;
+ pHalData->CCK_index -= delta;
+ }
+ else
+ {
+ for(i = 0; i < rf; i++)
+ pHalData->OFDM_index[i] += delta;
+ pHalData->CCK_index += delta;
+ }
+ }
+
+ if(is2T)
+ {
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
+ pHalData->OFDM_index[0], pHalData->OFDM_index[1], pHalData->CCK_index));
+ }
+ else
+ {
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, CCK_index=0x%x\n",
+ pHalData->OFDM_index[0], pHalData->CCK_index));
+ }
+
+ //no adjust
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ if(RT_GetInterfaceSelection(Adapter) != INTF_SEL1_USB_High_Power)
+#endif
+ {
+ if(ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ for(i = 0; i < rf; i++)
+ OFDM_index[i] = pHalData->OFDM_index[i]+1;
+ CCK_index = pHalData->CCK_index+1;
+ }
+ else
+ {
+ for(i = 0; i < rf; i++)
+ OFDM_index[i] = pHalData->OFDM_index[i];
+ CCK_index = pHalData->CCK_index;
+ }
+
+#if MP_DRIVER == 1
+ for(i = 0; i < rf; i++)
+ {
+ if(TxPwrLevel[i] >=0 && TxPwrLevel[i] <=26)
+ {
+ if(ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ if (delta < 5)
+ OFDM_index[i] -= 1;
+ else
+ OFDM_index[i] -= 2;
+ }
+ else if(delta > 5 && ThermalValue < pHalData->EEPROMThermalMeter)
+ {
+ OFDM_index[i] += 1;
+ }
+ }
+ else if (TxPwrLevel[i] >= 27 && TxPwrLevel[i] <= 32 && ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ if (delta < 5)
+ OFDM_index[i] -= 1;
+ else
+ OFDM_index[i] -= 2;
+ }
+ else if (TxPwrLevel[i] >= 32 && TxPwrLevel[i] <= 38 && ThermalValue > pHalData->EEPROMThermalMeter && delta > 5)
+ {
+ OFDM_index[i] -= 1;
+ }
+ }
+
+ {
+ if(TxPwrLevel[i] >=0 && TxPwrLevel[i] <=26)
+ {
+ if(ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ if (delta < 5)
+ CCK_index -= 1;
+ else
+ CCK_index -= 2;
+ }
+ else if(delta > 5 && ThermalValue < pHalData->EEPROMThermalMeter)
+ {
+ CCK_index += 1;
+ }
+ }
+ else if (TxPwrLevel[i] >= 27 && TxPwrLevel[i] <= 32 && ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ if (delta < 5)
+ CCK_index -= 1;
+ else
+ CCK_index -= 2;
+ }
+ else if (TxPwrLevel[i] >= 32 && TxPwrLevel[i] <= 38 && ThermalValue > pHalData->EEPROMThermalMeter && delta > 5)
+ {
+ CCK_index -= 1;
+ }
+ }
+#endif
+ }
+
+ for(i = 0; i < rf; i++)
+ {
+ if(OFDM_index[i] > (OFDM_TABLE_SIZE_92C-1))
+ OFDM_index[i] = (OFDM_TABLE_SIZE_92C-1);
+ else if (OFDM_index[i] < OFDM_min_index)
+ OFDM_index[i] = OFDM_min_index;
+ }
+
+ if(CCK_index > (CCK_TABLE_SIZE-1))
+ CCK_index = (CCK_TABLE_SIZE-1);
+ else if (CCK_index < 0)
+ CCK_index = 0;
+
+ if(is2T)
+ {
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
+ OFDM_index[0], OFDM_index[1], CCK_index));
+ }
+ else
+ {
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, CCK_index=0x%x\n",
+ OFDM_index[0], CCK_index));
+ }
+ }
+
+ if(pHalData->TxPowerTrackControl && (delta != 0 || delta_HP != 0))
+ {
+ //Adujst OFDM Ant_A according to IQK result
+ ele_D = (OFDMSwingTable[OFDM_index[0]] & 0xFFC00000)>>22;
+ X = pHalData->RegE94;
+ Y = pHalData->RegE9C;
+
+ if(X != 0)
+ {
+ if ((X & 0x00000200) != 0)
+ X = X | 0xFFFFFC00;
+ ele_A = ((X * ele_D)>>8)&0x000003FF;
+
+ //new element C = element D x Y
+ if ((Y & 0x00000200) != 0)
+ Y = Y | 0xFFFFFC00;
+ ele_C = ((Y * ele_D)>>8)&0x000003FF;
+
+ //wirte new elements A, C, D to regC80 and regC94, element B is always 0
+ value32 = (ele_D<<22)|((ele_C&0x3F)<<16)|ele_A;
+ PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, value32);
+
+ value32 = (ele_C&0x000003C0)>>6;
+ PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, value32);
+
+ value32 = ((X * ele_D)>>7)&0x01;
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT31, value32);
+
+ value32 = ((Y * ele_D)>>7)&0x01;
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT29, value32);
+
+ }
+ else
+ {
+ PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[0]]);
+ PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, 0x00);
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT31|BIT29, 0x00);
+ }
+
+ RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking path A: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x\n", X, Y, ele_A, ele_C, ele_D));
+
+ //Adjust CCK according to IQK result
+ if(!pHalData->bCCKinCH14){
+ PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch1_Ch13[CCK_index][0]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch1_Ch13[CCK_index][1]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch1_Ch13[CCK_index][2]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch1_Ch13[CCK_index][3]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch1_Ch13[CCK_index][4]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch1_Ch13[CCK_index][5]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch1_Ch13[CCK_index][6]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch1_Ch13[CCK_index][7]);
+ }
+ else{
+ PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch14[CCK_index][0]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch14[CCK_index][1]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch14[CCK_index][2]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch14[CCK_index][3]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch14[CCK_index][4]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch14[CCK_index][5]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch14[CCK_index][6]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch14[CCK_index][7]);
+ }
+
+ if(is2T)
+ {
+ ele_D = (OFDMSwingTable[OFDM_index[1]] & 0xFFC00000)>>22;
+
+ //new element A = element D x X
+ X = pHalData->RegEB4;
+ Y = pHalData->RegEBC;
+
+ if(X != 0){
+ if ((X & 0x00000200) != 0) //consider minus
+ X = X | 0xFFFFFC00;
+ ele_A = ((X * ele_D)>>8)&0x000003FF;
+
+ //new element C = element D x Y
+ if ((Y & 0x00000200) != 0)
+ Y = Y | 0xFFFFFC00;
+ ele_C = ((Y * ele_D)>>8)&0x00003FF;
+
+ //wirte new elements A, C, D to regC88 and regC9C, element B is always 0
+ value32=(ele_D<<22)|((ele_C&0x3F)<<16) |ele_A;
+ PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, value32);
+
+ value32 = (ele_C&0x000003C0)>>6;
+ PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, value32);
+
+ value32 = ((X * ele_D)>>7)&0x01;
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT27, value32);
+
+ value32 = ((Y * ele_D)>>7)&0x01;
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT25, value32);
+
+ }
+ else{
+ PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[1]]);
+ PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, 0x00);
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT27|BIT25, 0x00);
+ }
+
+ RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking path B: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x\n", X, Y, ele_A, ele_C, ele_D));
+ }
+
+ RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n", PHY_QueryBBReg(Adapter, 0xc80, bMaskDWord), PHY_QueryBBReg(Adapter, 0xc94, bMaskDWord), PHY_QueryRFReg(Adapter, RF_PATH_A, 0x24, bRFRegOffsetMask)));
+ }
+
+#if MP_DRIVER == 1
+ if(delta_IQK > 1)
+#else
+ if(delta_IQK > 3)
+#endif
+ {
+ pHalData->ThermalValue_IQK = ThermalValue;
+ PHY_IQCalibrate(Adapter, FALSE);
+ }
+
+ //update thermal meter value
+ if(pHalData->TxPowerTrackControl)
+ Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_THERMAL_VALUE, &ThermalValue);
+
+ }
+
+ PlatformAtomicExchange(&Adapter->IntrCCKRefCount, FALSE);
+ pHalData->TXPowercount = 0;
+
+ // 2011/08/23 MH Add for power tracking after S3/S4 turn off RF. In this case, we need to execute IQK again. Otherwise
+ // The IQK scheme will use old value to save and cause incorrect BB value.
+ {
+ RT_RF_POWER_STATE rtState;
+
+ Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState));
+
+ if(Adapter->bDriverStopped || Adapter->bDriverIsGoingToPnpSetPowerSleep || rtState == eRfOff)
+ {
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Incorrect pwrtrack point, re-iqk next time\n"));
+ pHalData->bIQKInitialized = FALSE;
+ }
+ }
+
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("<===odm_TXPowerTrackingCallbackThermalMeter92C\n"));
+#endif
+
+}
+
+//#if (RT_PLATFORM == PLATFORM_WINDOWS) && (HAL_CODE_BASE==RTL8192_C)
+VOID
+odm_TXPowerTrackingCallbackRXGainThermalMeter92D(
+ IN PADAPTER Adapter
+ )
+{
+ u1Byte index_mapping[Rx_index_mapping_NUM] = {
+ 0x0f, 0x0f, 0x0f, 0x0f, 0x0b,
+ 0x0a, 0x09, 0x08, 0x07, 0x06,
+ 0x05, 0x04, 0x04, 0x03, 0x02
+ };
+
+#ifndef AP_BUILD_WORKAROUND
+ u1Byte eRFPath;
+ u4Byte u4tmp;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
+
+ u4tmp = (index_mapping[(pHalData->EEPROMThermalMeter - pHalData->ThermalValue_RxGain)]) << 12;
+
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("===>odm_TXPowerTrackingCallbackRXGainThermalMeter92D interface %u Rx Gain %x\n", Adapter->interfaceIndex, u4tmp));
+
+ for(eRFPath = RF_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
+ PHY_SetRFReg(Adapter, (ODM_RF_RADIO_PATH_E)eRFPath, RF_RXRF_A3, bRFRegOffsetMask, (pHalData->RegRF3C[eRFPath]&(~(0xF000)))|u4tmp);
+#endif
+
+};
+
+
+//091212 chiyokolin
+VOID
+odm_TXPowerTrackingCallbackThermalMeter92D(
+ IN PADAPTER Adapter
+ )
+{
+
+#ifndef AP_BUILD_WORKAROUND
+
+//#if (RT_PLATFORM == PLATFORM_WINDOWS) && (HAL_CODE_BASE==RTL8192_C)
+#if (HAL_CODE_BASE==RTL8192_C)
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc;
+ u1Byte ThermalValue = 0, delta, delta_LCK, delta_IQK, delta_RxGain, index, offset;
+ u1Byte ThermalValue_AVG_count = 0;
+ u4Byte ThermalValue_AVG = 0;
+ s4Byte ele_A=0, ele_D, TempCCk, X, value32;
+ s4Byte Y, ele_C=0;
+ s1Byte OFDM_index[2], CCK_index=0, OFDM_index_old[2], CCK_index_old=0;
+ u4Byte i = 0;
+ BOOLEAN is2T = (IS_92C_SERIAL(pHalData->VersionID) || IS_92D_SINGLEPHY(pHalData->VersionID)) ;
+ BOOLEAN bInteralPA = FALSE;
+
+ u1Byte OFDM_min_index = 6, OFDM_min_index_internalPA = 3, rf; //OFDM BB Swing should be less than +3.0dB, which is required by Arthur
+ u1Byte Indexforchannel = GetRightChnlPlaceforIQK(pHalData->CurrentChannel);
+ u1Byte index_mapping[5][index_mapping_NUM] = {
+ {0, 1, 3, 6, 8, 9, //5G, path A/MAC 0, decrease power
+ 11, 13, 14, 16, 17, 18, 18},
+ {0, 2, 4, 5, 7, 10, //5G, path A/MAC 0, increase power
+ 12, 14, 16, 18, 18, 18, 18},
+ {0, 2, 3, 6, 8, 9, //5G, path B/MAC 1, decrease power
+ 11, 13, 14, 16, 17, 18, 18},
+ {0, 2, 4, 5, 7, 10, //5G, path B/MAC 1, increase power
+ 13, 16, 16, 18, 18, 18, 18},
+ {0, 1, 2, 3, 4, 5, //2.4G, for decreas power
+ 6, 7, 7, 8, 9, 10, 10},
+ };
+
+u1Byte index_mapping_internalPA[8][index_mapping_NUM] = {
+ {0, 1, 2, 4, 6, 7, //5G, path A/MAC 0, ch36-64, decrease power
+ 9, 11, 12, 14, 15, 16, 16},
+ {0, 2, 4, 5, 7, 10, //5G, path A/MAC 0, ch36-64, increase power
+ 12, 14, 16, 18, 18, 18, 18},
+ {0, 1, 2, 3, 5, 6, //5G, path A/MAC 0, ch100-165, decrease power
+ 8, 10, 11, 13, 14, 15, 15},
+ {0, 2, 4, 5, 7, 10, //5G, path A/MAC 0, ch100-165, increase power
+ 12, 14, 16, 18, 18, 18, 18},
+ {0, 1, 2, 4, 6, 7, //5G, path B/MAC 1, ch36-64, decrease power
+ 9, 11, 12, 14, 15, 16, 16},
+ {0, 2, 4, 5, 7, 10, //5G, path B/MAC 1, ch36-64, increase power
+ 13, 16, 16, 18, 18, 18, 18},
+ {0, 1, 2, 3, 5, 6, //5G, path B/MAC 1, ch100-165, decrease power
+ 8, 9, 10, 12, 13, 14, 14},
+ {0, 2, 4, 5, 7, 10, //5G, path B/MAC 1, ch100-165, increase power
+ 13, 16, 16, 18, 18, 18, 18},
+ };
+
+//#if MP_DRIVER != 1
+// return;
+//#endif
+
+
+ pHalData->TXPowerTrackingCallbackCnt++; //cosa add for debug
+ pHalData->bTXPowerTrackingInit = TRUE;
+
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("===>dm_TXPowerTrackingCallback_ThermalMeter_92D interface %u txpowercontrol %d\n", Adapter->interfaceIndex, pHalData->TxPowerTrackControl));
+
+ ThermalValue = (u1Byte)PHY_QueryRFReg(Adapter, RF_PATH_A, RF_T_METER_92D, 0xf800); //0x42: RF Reg[15:11] 92D
+
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter));
+
+ //PHY_APCalibrate(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
+ //if (IS_HARDWARE_TYPE_8188E(Adapter)/* ||
+ // is_ha*/)
+ //{
+ // PHY_APCalibrate_8188E(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
+ //}
+ //else if (IS_HARDWARE_TYPE_8192C(Adapter) ||
+ // IS_HARDWARE_TYPE_8192D(Adapter) ||
+ // IS_HARDWARE_TYPE_8723A(Adapter))
+ {
+ PHY_APCalibrate_8192C(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
+ }
+
+// if(!pHalData->TxPowerTrackControl)
+// return;
+
+ if(is2T)
+ rf = 2;
+ else
+ rf = 1;
+
+ if(ThermalValue)
+ {
+// if(!pHalData->ThermalValue)
+ {
+ //Query OFDM path A default setting
+ ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord)&bMaskOFDM_D;
+ for(i=0; i<OFDM_TABLE_SIZE_92D; i++) //find the index
+ {
+ if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
+ {
+ OFDM_index_old[0] = (u1Byte)i;
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial pathA ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
+ rOFDM0_XATxIQImbalance, ele_D, OFDM_index_old[0]));
+ break;
+ }
+ }
+
+ //Query OFDM path B default setting
+ if(is2T)
+ {
+ ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord)&bMaskOFDM_D;
+ for(i=0; i<OFDM_TABLE_SIZE_92D; i++) //find the index
+ {
+ if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
+ {
+ OFDM_index_old[1] = (u1Byte)i;
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial pathB ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
+ rOFDM0_XBTxIQImbalance, ele_D, OFDM_index_old[1]));
+ break;
+ }
+ }
+ }
+
+ if(pHalData->CurrentBandType92D == BAND_ON_2_4G)
+ {
+ //Query CCK default setting From 0xa24
+ TempCCk = pHalData->RegA24;
+
+ for(i=0 ; i<CCK_TABLE_SIZE ; i++)
+ {
+ if(pHalData->bCCKinCH14)
+ {
+ if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch14[i][2], 4)==0)
+ {
+ CCK_index_old =(u1Byte) i;
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch 14 %d\n",
+ rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
+ break;
+ }
+ }
+ else
+ {
+ if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch1_Ch13[i][2], 4)==0)
+ {
+ CCK_index_old =(u1Byte) i;
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch14 %d\n",
+ rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
+ break;
+ }
+ }
+ }
+ }
+ else
+ {
+ TempCCk = 0x090e1317;
+ CCK_index_old = 12;
+ }
+
+ if(!pHalData->ThermalValue)
+ {
+ pHalData->ThermalValue = pHalData->EEPROMThermalMeter;
+ pHalData->ThermalValue_LCK = ThermalValue;
+ pHalData->ThermalValue_IQK = ThermalValue;
+ pHalData->ThermalValue_RxGain = pHalData->EEPROMThermalMeter;
+
+ for(i = 0; i < rf; i++)
+ pHalData->OFDM_index[i] = OFDM_index_old[i];
+ pHalData->CCK_index = CCK_index_old;
+ }
+
+ if(pHalData->bReloadtxpowerindex)
+ {
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("reload ofdm index for band switch\n"));
+ }
+
+ //calculate average thermal meter
+ {
+ pHalData->ThermalValue_AVG[pHalData->ThermalValue_AVG_index] = ThermalValue;
+ pHalData->ThermalValue_AVG_index++;
+ if(pHalData->ThermalValue_AVG_index == AVG_THERMAL_NUM)
+ pHalData->ThermalValue_AVG_index = 0;
+
+ for(i = 0; i < AVG_THERMAL_NUM; i++)
+ {
+ if(pHalData->ThermalValue_AVG[i])
+ {
+ ThermalValue_AVG += pHalData->ThermalValue_AVG[i];
+ ThermalValue_AVG_count++;
+ }
+ }
+
+ if(ThermalValue_AVG_count)
+ ThermalValue = (u1Byte)(ThermalValue_AVG / ThermalValue_AVG_count);
+ }
+ }
+
+ if(pHalData->bReloadtxpowerindex)
+ {
+ delta = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
+ pHalData->bReloadtxpowerindex = FALSE;
+ pHalData->bDoneTxpower = FALSE;
+ }
+ else if(pHalData->bDoneTxpower)
+ {
+ delta = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
+ }
+ else
+ {
+ delta = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
+ }
+ delta_LCK = (ThermalValue > pHalData->ThermalValue_LCK)?(ThermalValue - pHalData->ThermalValue_LCK):(pHalData->ThermalValue_LCK - ThermalValue);
+ delta_IQK = (ThermalValue > pHalData->ThermalValue_IQK)?(ThermalValue - pHalData->ThermalValue_IQK):(pHalData->ThermalValue_IQK - ThermalValue);
+ delta_RxGain = (ThermalValue > pHalData->ThermalValue_RxGain)?(ThermalValue - pHalData->ThermalValue_RxGain):(pHalData->ThermalValue_RxGain - ThermalValue);
+
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("interface %u Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x delta 0x%x delta_LCK 0x%x delta_IQK 0x%x delta_RxGain 0x%x\n", Adapter->interfaceIndex, ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter, delta, delta_LCK, delta_IQK, delta_RxGain));
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("interface %u pre thermal meter LCK 0x%x pre thermal meter IQK 0x%x delta_LCK_bound 0x%x delta_IQK_bound 0x%x\n", Adapter->interfaceIndex, pHalData->ThermalValue_LCK, pHalData->ThermalValue_IQK, pHalData->Delta_LCK, pHalData->Delta_IQK));
+
+ if((delta_LCK > pHalData->Delta_LCK) && (pHalData->Delta_LCK != 0))
+ {
+ pHalData->ThermalValue_LCK = ThermalValue;
+ PHY_LCCalibrate(Adapter);
+ }
+
+ if(delta > 0 && pHalData->TxPowerTrackControl)
+ {
+ delta = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
+
+ //calculate new OFDM / CCK offset
+ {
+ if(pHalData->CurrentBandType92D == BAND_ON_2_4G)
+ {
+ offset = 4;
+
+ if(delta > index_mapping_NUM-1)
+ index = index_mapping[offset][index_mapping_NUM-1];
+ else
+ index = index_mapping[offset][delta];
+
+ if(ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ for(i = 0; i < rf; i++)
+ OFDM_index[i] = pHalData->OFDM_index[i] -delta;
+ CCK_index = pHalData->CCK_index -delta;
+ }
+ else
+ {
+ for(i = 0; i < rf; i++)
+ OFDM_index[i] = pHalData->OFDM_index[i] + index;
+ CCK_index = pHalData->CCK_index + index;
+ }
+ }
+ else if(pHalData->CurrentBandType92D == BAND_ON_5G)
+ {
+ for(i = 0; i < rf; i++)
+ {
+ if(pHalData->MacPhyMode92D == DUALMAC_DUALPHY &&
+ Adapter->interfaceIndex == 1) //MAC 1 5G
+ bInteralPA = pHalData->InternalPA5G[1];
+ else
+ bInteralPA = pHalData->InternalPA5G[i];
+
+ if(bInteralPA)
+ {
+ if(Adapter->interfaceIndex == 1 || i == rf)
+ offset = 4;
+ else
+ offset = 0;
+
+ if(pHalData->CurrentChannel >= 100 && pHalData->CurrentChannel <= 165)
+ offset += 2;
+ }
+ else
+ {
+ if(Adapter->interfaceIndex == 1 || i == rf)
+ offset = 2;
+ else
+ offset = 0;
+ }
+
+ if(ThermalValue > pHalData->EEPROMThermalMeter) //set larger Tx power
+ offset++;
+
+ if(bInteralPA)
+ {
+ if(delta > index_mapping_NUM-1)
+ index = index_mapping_internalPA[offset][index_mapping_NUM-1];
+ else
+ index = index_mapping_internalPA[offset][delta];
+ }
+ else
+ {
+ if(delta > index_mapping_NUM-1)
+ index = index_mapping[offset][index_mapping_NUM-1];
+ else
+ index = index_mapping[offset][delta];
+ }
+
+ if(ThermalValue > pHalData->EEPROMThermalMeter) //set larger Tx power
+ {
+ if(bInteralPA && ThermalValue > 0x12)
+ {
+ OFDM_index[i] = pHalData->OFDM_index[i] -((delta/2)*3+(delta%2));
+ }
+ else
+ {
+ OFDM_index[i] = pHalData->OFDM_index[i] -index;
+ }
+ }
+ else
+ {
+ OFDM_index[i] = pHalData->OFDM_index[i] + index;
+ }
+ }
+ }
+
+ if(is2T)
+ {
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
+ pHalData->OFDM_index[0], pHalData->OFDM_index[1], pHalData->CCK_index));
+ }
+ else
+ {
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, CCK_index=0x%x\n",
+ pHalData->OFDM_index[0], pHalData->CCK_index));
+ }
+
+ for(i = 0; i < rf; i++)
+ {
+ if(OFDM_index[i] > OFDM_TABLE_SIZE_92D-1)
+ {
+ OFDM_index[i] = OFDM_TABLE_SIZE_92D-1;
+ }
+ else if(bInteralPA || pHalData->CurrentBandType92D == BAND_ON_2_4G)
+ {
+ if (OFDM_index[i] < OFDM_min_index_internalPA)
+ OFDM_index[i] = OFDM_min_index_internalPA;
+ }
+ else if (OFDM_index[i] < OFDM_min_index)
+ {
+ OFDM_index[i] = OFDM_min_index;
+ }
+ }
+
+ if(pHalData->CurrentBandType92D == BAND_ON_2_4G)
+ {
+ if(CCK_index > CCK_TABLE_SIZE-1)
+ CCK_index = CCK_TABLE_SIZE-1;
+ else if (CCK_index < 0)
+ CCK_index = 0;
+ }
+
+ if(is2T)
+ {
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
+ OFDM_index[0], OFDM_index[1], CCK_index));
+ }
+ else
+ {
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, CCK_index=0x%x\n",
+ OFDM_index[0], CCK_index));
+ }
+ }
+
+ //Config by SwingTable
+ if(pHalData->TxPowerTrackControl && !pHalData->bNOPG)
+ {
+ pHalData->bDoneTxpower = TRUE;
+
+ //Adujst OFDM Ant_A according to IQK result
+ ele_D = (OFDMSwingTable[(u1Byte)OFDM_index[0]] & 0xFFC00000)>>22;
+// X = pHalData->RegE94;
+// Y = pHalData->RegE9C;
+ X = pHalData->IQKMatrixRegSetting[Indexforchannel].Value[0][0];
+ Y = pHalData->IQKMatrixRegSetting[Indexforchannel].Value[0][1];
+
+ if(X != 0 && pHalData->CurrentBandType92D == BAND_ON_2_4G)
+ {
+ if ((X & 0x00000200) != 0)
+ X = X | 0xFFFFFC00;
+ ele_A = ((X * ele_D)>>8)&0x000003FF;
+
+ //new element C = element D x Y
+ if ((Y & 0x00000200) != 0)
+ Y = Y | 0xFFFFFC00;
+ ele_C = ((Y * ele_D)>>8)&0x000003FF;
+
+ //wirte new elements A, C, D to regC80 and regC94, element B is always 0
+ value32 = (ele_D<<22)|((ele_C&0x3F)<<16)|ele_A;
+ PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, value32);
+
+ value32 = (ele_C&0x000003C0)>>6;
+ PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, value32);
+
+ value32 = ((X * ele_D)>>7)&0x01;
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT24, value32);
+
+ }
+ else
+ {
+ PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable[(u1Byte)OFDM_index[0]]);
+ PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, 0x00);
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT24, 0x00);
+ }
+
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD, ("TxPwrTracking for interface %u path A: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x 0xe94 = 0x%x 0xe9c = 0x%x\n",
+ (u1Byte)Adapter->interfaceIndex, (u4Byte)X, (u4Byte)Y, (u4Byte)ele_A, (u4Byte)ele_C, (u4Byte)ele_D, (u4Byte)X, (u4Byte)Y));
+
+
+ if(pHalData->CurrentBandType92D == BAND_ON_2_4G)
+ {
+ //Adjust CCK according to IQK result
+ if(!pHalData->bCCKinCH14){
+ PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][0]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][1]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][2]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][3]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][4]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][5]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][6]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch1_Ch13[(u1Byte)CCK_index][7]);
+ }
+ else{
+ PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch14[(u1Byte)CCK_index][0]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch14[(u1Byte)CCK_index][1]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch14[(u1Byte)CCK_index][2]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch14[(u1Byte)CCK_index][3]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch14[(u1Byte)CCK_index][4]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch14[(u1Byte)CCK_index][5]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch14[(u1Byte)CCK_index][6]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch14[(u1Byte)CCK_index][7]);
+ }
+ }
+
+ if(is2T)
+ {
+ ele_D = (OFDMSwingTable[(u1Byte)OFDM_index[1]] & 0xFFC00000)>>22;
+
+ //new element A = element D x X
+// X = pHalData->RegEB4;
+// Y = pHalData->RegEBC;
+ X = pHalData->IQKMatrixRegSetting[Indexforchannel].Value[0][4];
+ Y = pHalData->IQKMatrixRegSetting[Indexforchannel].Value[0][5];
+
+ if(X != 0 && pHalData->CurrentBandType92D == BAND_ON_2_4G)
+ {
+ if ((X & 0x00000200) != 0) //consider minus
+ X = X | 0xFFFFFC00;
+ ele_A = ((X * ele_D)>>8)&0x000003FF;
+
+ //new element C = element D x Y
+ if ((Y & 0x00000200) != 0)
+ Y = Y | 0xFFFFFC00;
+ ele_C = ((Y * ele_D)>>8)&0x00003FF;
+
+ //wirte new elements A, C, D to regC88 and regC9C, element B is always 0
+ value32=(ele_D<<22)|((ele_C&0x3F)<<16) |ele_A;
+ PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, value32);
+
+ value32 = (ele_C&0x000003C0)>>6;
+ PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, value32);
+
+ value32 = ((X * ele_D)>>7)&0x01;
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT28, value32);
+
+ }
+ else
+ {
+ PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, OFDMSwingTable[(u1Byte)OFDM_index[1]]);
+ PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, 0x00);
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT28, 0x00);
+ }
+
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD, ("TxPwrTracking path B: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x 0xeb4 = 0x%x 0xebc = 0x%x\n",
+ (u4Byte)X, (u4Byte)Y, (u4Byte)ele_A, (u4Byte)ele_C, (u4Byte)ele_D, (u4Byte)X, (u4Byte)Y));
+ }
+
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD, ("TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n", PHY_QueryBBReg(Adapter, 0xc80, bMaskDWord), PHY_QueryBBReg(Adapter, 0xc94, bMaskDWord), PHY_QueryRFReg(Adapter, RF_PATH_A, 0x24, bRFRegOffsetMask)));
+ }
+ }
+
+ if((delta_IQK > pHalData->Delta_IQK) && (pHalData->Delta_IQK != 0))
+ {
+ PHY_ResetIQKResult(Adapter);
+ pHalData->ThermalValue_IQK = ThermalValue;
+#if (DEV_BUS_TYPE == RT_PCI_INTERFACE)
+#if USE_WORKITEM
+ PlatformAcquireMutex(&pHalData->mxChnlBwControl);
+#else
+ PlatformAcquireSpinLock(Adapter, RT_CHANNEL_AND_BANDWIDTH_SPINLOCK);
+#endif
+#elif((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))
+ PlatformAcquireMutex(&pHalData->mxChnlBwControl);
+#endif
+
+ PHY_IQCalibrate(Adapter, FALSE);
+
+#if (DEV_BUS_TYPE == RT_PCI_INTERFACE)
+#if USE_WORKITEM
+ PlatformReleaseMutex(&pHalData->mxChnlBwControl);
+#else
+ PlatformReleaseSpinLock(Adapter, RT_CHANNEL_AND_BANDWIDTH_SPINLOCK);
+#endif
+#elif((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE))
+ PlatformReleaseMutex(&pHalData->mxChnlBwControl);
+#endif
+
+ }
+
+ if(delta_RxGain > 0 && pHalData->CurrentBandType92D == BAND_ON_5G
+ && ThermalValue <= pHalData->EEPROMThermalMeter)
+ {
+ pHalData->ThermalValue_RxGain = ThermalValue;
+ odm_TXPowerTrackingCallbackRXGainThermalMeter92D(Adapter);
+ }
+
+ //update thermal meter value
+ if(pHalData->TxPowerTrackControl)
+ {
+ Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_THERMAL_VALUE, &ThermalValue);
+ }
+
+ }
+
+ ODM_RT_TRACE(pDM_Odm,COMP_POWER_TRACKING, DBG_LOUD,("<===dm_TXPowerTrackingCallback_ThermalMeter_92D\n"));
+
+ pHalData->TXPowercount = 0;
+#endif
+#endif
+}
+
+
+//
+// Description:
+// - Dispatch TxPower Tracking direct call ONLY for 92s.
+// - We shall NOT schedule Workitem within PASSIVE LEVEL, which will cause system resource
+// leakage under some platform.
+//
+// Assumption:
+// PASSIVE_LEVEL when this routine is called.
+//
+// Added by Roger, 2009.06.18.
+//
+VOID
+odm_TXPowerTrackingDirectCall92C(
+ IN PADAPTER Adapter
+ )
+{
+#ifndef AP_BUILD_WORKAROUND
+ if(IS_HARDWARE_TYPE_8192D(Adapter))
+ odm_TXPowerTrackingCallbackThermalMeter92D(Adapter);
+ else
+ odm_TXPowerTrackingCallbackThermalMeter92C(Adapter);
+#endif
+}
+
+
+VOID
+odm_TXPowerTrackingCallback_ThermalMeter_92C(
+ IN PADAPTER Adapter
+ )
+{
+#if ((RT_PLATFORM == PLATFORM_WINDOWS) || (RT_PLATFORM == PLATFORM_LINUX)) && (HAL_CODE_BASE==RTL8192_C)
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ u1Byte ThermalValue = 0, delta, delta_LCK, delta_IQK, delta_HP, TimeOut = 100;
+ s4Byte ele_A=0, ele_D, TempCCk, X, value32;
+ s4Byte Y, ele_C=0;
+ s1Byte OFDM_index[2], CCK_index=0, OFDM_index_old[2], CCK_index_old=0;
+ int i = 0;
+ BOOLEAN is2T = IS_92C_SERIAL(pHalData->VersionID);
+
+#if MP_DRIVER == 1
+ PMPT_CONTEXT pMptCtx = &(Adapter->MptCtx);
+ pu1Byte TxPwrLevel = pMptCtx->TxPwrLevel;
+#endif
+ u1Byte OFDM_min_index = 6, rf; //OFDM BB Swing should be less than +3.0dB, which is required by Arthur
+#if 0
+ u4Byte DPK_delta_mapping[2][DPK_DELTA_MAPPING_NUM] = {
+ {0x1c, 0x1c, 0x1d, 0x1d, 0x1e,
+ 0x1f, 0x00, 0x00, 0x01, 0x01,
+ 0x02, 0x02, 0x03},
+ {0x1c, 0x1d, 0x1e, 0x1e, 0x1e,
+ 0x1f, 0x00, 0x00, 0x01, 0x02,
+ 0x02, 0x03, 0x03}};
+#endif
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ u1Byte ThermalValue_HP_count = 0;
+ u4Byte ThermalValue_HP = 0;
+ s1Byte index_mapping_HP[index_mapping_HP_NUM] = {
+ 0, 1, 3, 4, 6,
+ 7, 9, 10, 12, 13,
+ 15, 16, 18, 19, 21
+ };
+
+ s1Byte index_HP;
+#endif
+
+ if (ODM_CheckPowerStatus(Adapter) == FALSE)
+ return;
+
+ pHalData->TXPowerTrackingCallbackCnt++; //cosa add for debug
+ pHalData->bTXPowerTrackingInit = TRUE;
+
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("===>odm_TXPowerTrackingCallback_ThermalMeter_92C\n"));
+
+ ThermalValue = (u1Byte)PHY_QueryRFReg(Adapter, RF_PATH_A, RF_T_METER, 0x1f); // 0x24: RF Reg[4:0]
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter));
+
+ PHY_APCalibrate_8192C(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
+
+ if(is2T)
+ rf = 2;
+ else
+ rf = 1;
+
+ while(PlatformAtomicExchange(&Adapter->IntrCCKRefCount, TRUE) == TRUE)
+ {
+ PlatformSleepUs(100);
+ TimeOut--;
+ if(TimeOut <= 0)
+ {
+ RTPRINT(FINIT, INIT_TxPower,
+ ("!!!odm_TXPowerTrackingCallback_ThermalMeter_92C Wait for check CCK gain index too long!!!\n" ));
+ break;
+ }
+ }
+
+ if(ThermalValue)
+ {
+// if(!pHalData->ThermalValue)
+ {
+ //Query OFDM path A default setting
+ ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord)&bMaskOFDM_D;
+ for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
+ {
+ if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
+ {
+ OFDM_index_old[0] = (u1Byte)i;
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial pathA ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
+ rOFDM0_XATxIQImbalance, ele_D, OFDM_index_old[0]));
+ break;
+ }
+ }
+
+ //Query OFDM path B default setting
+ if(is2T)
+ {
+ ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord)&bMaskOFDM_D;
+ for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
+ {
+ if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
+ {
+ OFDM_index_old[1] = (u1Byte)i;
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial pathB ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
+ rOFDM0_XBTxIQImbalance, ele_D, OFDM_index_old[1]));
+ break;
+ }
+ }
+ }
+
+ //Query CCK default setting From 0xa24
+ TempCCk = PHY_QueryBBReg(Adapter, rCCK0_TxFilter2, bMaskDWord)&bMaskCCK;
+ for(i=0 ; i<CCK_TABLE_SIZE ; i++)
+ {
+ if(pHalData->bCCKinCH14)
+ {
+ if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch14[i][2], 4)==0)
+ {
+ CCK_index_old =(u1Byte) i;
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch 14 %d\n",
+ rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
+ break;
+ }
+ }
+ else
+ {
+ if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch1_Ch13[i][2], 4)==0)
+ {
+ CCK_index_old =(u1Byte) i;
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch14 %d\n",
+ rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
+ break;
+ }
+ }
+ }
+
+ if(!pHalData->ThermalValue)
+ {
+ pHalData->ThermalValue = pHalData->EEPROMThermalMeter;
+ pHalData->ThermalValue_LCK = ThermalValue;
+ pHalData->ThermalValue_IQK = ThermalValue;
+ pHalData->ThermalValue_DPK = pHalData->EEPROMThermalMeter;
+
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ for(i = 0; i < rf; i++)
+ pHalData->OFDM_index_HP[i] = pHalData->OFDM_index[i] = OFDM_index_old[i];
+ pHalData->CCK_index_HP = pHalData->CCK_index = CCK_index_old;
+#else
+ for(i = 0; i < rf; i++)
+ pHalData->OFDM_index[i] = OFDM_index_old[i];
+ pHalData->CCK_index = CCK_index_old;
+#endif
+ }
+
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
+ {
+ pHalData->ThermalValue_HP[pHalData->ThermalValue_HP_index] = ThermalValue;
+ pHalData->ThermalValue_HP_index++;
+ if(pHalData->ThermalValue_HP_index == HP_THERMAL_NUM)
+ pHalData->ThermalValue_HP_index = 0;
+
+ for(i = 0; i < HP_THERMAL_NUM; i++)
+ {
+ if(pHalData->ThermalValue_HP[i])
+ {
+ ThermalValue_HP += pHalData->ThermalValue_HP[i];
+ ThermalValue_HP_count++;
+ }
+ }
+
+ if(ThermalValue_HP_count)
+ ThermalValue = (u1Byte)(ThermalValue_HP / ThermalValue_HP_count);
+ }
+#endif
+ }
+
+ delta = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
+ {
+ if(pHalData->bDoneTxpower)
+ delta_HP = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
+ else
+ delta_HP = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
+ }
+ else
+#endif
+ {
+ delta_HP = 0;
+ }
+ delta_LCK = (ThermalValue > pHalData->ThermalValue_LCK)?(ThermalValue - pHalData->ThermalValue_LCK):(pHalData->ThermalValue_LCK - ThermalValue);
+ delta_IQK = (ThermalValue > pHalData->ThermalValue_IQK)?(ThermalValue - pHalData->ThermalValue_IQK):(pHalData->ThermalValue_IQK - ThermalValue);
+
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x delta 0x%x delta_LCK 0x%x delta_IQK 0x%x\n", ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter, delta, delta_LCK, delta_IQK));
+
+ if(delta_LCK > 1)
+ {
+ pHalData->ThermalValue_LCK = ThermalValue;
+ PHY_LCCalibrate_8192C(Adapter);
+ }
+
+ if((delta > 0 || delta_HP > 0)&& pHalData->TxPowerTrackControl)
+ {
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
+ {
+ pHalData->bDoneTxpower = TRUE;
+ delta_HP = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
+
+ if(delta_HP > index_mapping_HP_NUM-1)
+ index_HP = index_mapping_HP[index_mapping_HP_NUM-1];
+ else
+ index_HP = index_mapping_HP[delta_HP];
+
+ if(ThermalValue > pHalData->EEPROMThermalMeter) //set larger Tx power
+ {
+ for(i = 0; i < rf; i++)
+ OFDM_index[i] = pHalData->OFDM_index_HP[i] - index_HP;
+ CCK_index = pHalData->CCK_index_HP -index_HP;
+ }
+ else
+ {
+ for(i = 0; i < rf; i++)
+ OFDM_index[i] = pHalData->OFDM_index_HP[i] + index_HP;
+ CCK_index = pHalData->CCK_index_HP + index_HP;
+ }
+
+ delta_HP = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
+
+ }
+ else
+#endif
+ {
+ if(ThermalValue > pHalData->ThermalValue)
+ {
+ for(i = 0; i < rf; i++)
+ pHalData->OFDM_index[i] -= delta;
+ pHalData->CCK_index -= delta;
+ }
+ else
+ {
+ for(i = 0; i < rf; i++)
+ pHalData->OFDM_index[i] += delta;
+ pHalData->CCK_index += delta;
+ }
+ }
+
+ if(is2T)
+ {
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
+ pHalData->OFDM_index[0], pHalData->OFDM_index[1], pHalData->CCK_index));
+ }
+ else
+ {
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, CCK_index=0x%x\n",
+ pHalData->OFDM_index[0], pHalData->CCK_index));
+ }
+
+ //no adjust
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ if(RT_GetInterfaceSelection(Adapter) != INTF_SEL1_USB_High_Power)
+#endif
+ {
+ if(ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ for(i = 0; i < rf; i++)
+ OFDM_index[i] = pHalData->OFDM_index[i]+1;
+ CCK_index = pHalData->CCK_index+1;
+ }
+ else
+ {
+ for(i = 0; i < rf; i++)
+ OFDM_index[i] = pHalData->OFDM_index[i];
+ CCK_index = pHalData->CCK_index;
+ }
+
+#if MP_DRIVER == 1
+ for(i = 0; i < rf; i++)
+ {
+ if(TxPwrLevel[i] >=0 && TxPwrLevel[i] <=26)
+ {
+ if(ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ if (delta < 5)
+ OFDM_index[i] -= 1;
+ else
+ OFDM_index[i] -= 2;
+ }
+ else if(delta > 5 && ThermalValue < pHalData->EEPROMThermalMeter)
+ {
+ OFDM_index[i] += 1;
+ }
+ }
+ else if (TxPwrLevel[i] >= 27 && TxPwrLevel[i] <= 32 && ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ if (delta < 5)
+ OFDM_index[i] -= 1;
+ else
+ OFDM_index[i] -= 2;
+ }
+ else if (TxPwrLevel[i] >= 32 && TxPwrLevel[i] <= 38 && ThermalValue > pHalData->EEPROMThermalMeter && delta > 5)
+ {
+ OFDM_index[i] -= 1;
+ }
+ }
+
+ {
+ if(TxPwrLevel[i] >=0 && TxPwrLevel[i] <=26)
+ {
+ if(ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ if (delta < 5)
+ CCK_index -= 1;
+ else
+ CCK_index -= 2;
+ }
+ else if(delta > 5 && ThermalValue < pHalData->EEPROMThermalMeter)
+ {
+ CCK_index += 1;
+ }
+ }
+ else if (TxPwrLevel[i] >= 27 && TxPwrLevel[i] <= 32 && ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ if (delta < 5)
+ CCK_index -= 1;
+ else
+ CCK_index -= 2;
+ }
+ else if (TxPwrLevel[i] >= 32 && TxPwrLevel[i] <= 38 && ThermalValue > pHalData->EEPROMThermalMeter && delta > 5)
+ {
+ CCK_index -= 1;
+ }
+ }
+#endif
+ }
+
+ for(i = 0; i < rf; i++)
+ {
+ if(OFDM_index[i] > (OFDM_TABLE_SIZE_92C-1))
+ OFDM_index[i] = (OFDM_TABLE_SIZE_92C-1);
+ else if (OFDM_index[i] < OFDM_min_index)
+ OFDM_index[i] = OFDM_min_index;
+ }
+
+ if(CCK_index > (CCK_TABLE_SIZE-1))
+ CCK_index = (CCK_TABLE_SIZE-1);
+ else if (CCK_index < 0)
+ CCK_index = 0;
+
+ if(is2T)
+ {
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
+ OFDM_index[0], OFDM_index[1], CCK_index));
+ }
+ else
+ {
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, CCK_index=0x%x\n",
+ OFDM_index[0], CCK_index));
+ }
+ }
+
+ if(pHalData->TxPowerTrackControl && (delta != 0 || delta_HP != 0))
+ {
+ //Adujst OFDM Ant_A according to IQK result
+ ele_D = (OFDMSwingTable[OFDM_index[0]] & 0xFFC00000)>>22;
+ X = pHalData->RegE94;
+ Y = pHalData->RegE9C;
+
+ if(X != 0)
+ {
+ if ((X & 0x00000200) != 0)
+ X = X | 0xFFFFFC00;
+ ele_A = ((X * ele_D)>>8)&0x000003FF;
+
+ //new element C = element D x Y
+ if ((Y & 0x00000200) != 0)
+ Y = Y | 0xFFFFFC00;
+ ele_C = ((Y * ele_D)>>8)&0x000003FF;
+
+ //wirte new elements A, C, D to regC80 and regC94, element B is always 0
+ value32 = (ele_D<<22)|((ele_C&0x3F)<<16)|ele_A;
+ PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, value32);
+
+ value32 = (ele_C&0x000003C0)>>6;
+ PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, value32);
+
+ value32 = ((X * ele_D)>>7)&0x01;
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT31, value32);
+
+ value32 = ((Y * ele_D)>>7)&0x01;
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT29, value32);
+
+ }
+ else
+ {
+ PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[0]]);
+ PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, 0x00);
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT31|BIT29, 0x00);
+ }
+
+ RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking path A: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x\n", X, Y, ele_A, ele_C, ele_D));
+
+ //Adjust CCK according to IQK result
+ if(!pHalData->bCCKinCH14){
+ PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch1_Ch13[CCK_index][0]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch1_Ch13[CCK_index][1]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch1_Ch13[CCK_index][2]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch1_Ch13[CCK_index][3]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch1_Ch13[CCK_index][4]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch1_Ch13[CCK_index][5]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch1_Ch13[CCK_index][6]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch1_Ch13[CCK_index][7]);
+ }
+ else{
+ PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch14[CCK_index][0]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch14[CCK_index][1]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch14[CCK_index][2]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch14[CCK_index][3]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch14[CCK_index][4]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch14[CCK_index][5]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch14[CCK_index][6]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch14[CCK_index][7]);
+ }
+
+ if(is2T)
+ {
+ ele_D = (OFDMSwingTable[OFDM_index[1]] & 0xFFC00000)>>22;
+
+ //new element A = element D x X
+ X = pHalData->RegEB4;
+ Y = pHalData->RegEBC;
+
+ if(X != 0){
+ if ((X & 0x00000200) != 0) //consider minus
+ X = X | 0xFFFFFC00;
+ ele_A = ((X * ele_D)>>8)&0x000003FF;
+
+ //new element C = element D x Y
+ if ((Y & 0x00000200) != 0)
+ Y = Y | 0xFFFFFC00;
+ ele_C = ((Y * ele_D)>>8)&0x00003FF;
+
+ //wirte new elements A, C, D to regC88 and regC9C, element B is always 0
+ value32=(ele_D<<22)|((ele_C&0x3F)<<16) |ele_A;
+ PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, value32);
+
+ value32 = (ele_C&0x000003C0)>>6;
+ PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, value32);
+
+ value32 = ((X * ele_D)>>7)&0x01;
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT27, value32);
+
+ value32 = ((Y * ele_D)>>7)&0x01;
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT25, value32);
+
+ }
+ else{
+ PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[1]]);
+ PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, 0x00);
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT27|BIT25, 0x00);
+ }
+
+ RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking path B: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x\n", X, Y, ele_A, ele_C, ele_D));
+ }
+
+ RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n", PHY_QueryBBReg(Adapter, 0xc80, bMaskDWord), PHY_QueryBBReg(Adapter, 0xc94, bMaskDWord), PHY_QueryRFReg(Adapter, RF_PATH_A, 0x24, bRFRegOffsetMask)));
+ }
+
+#if MP_DRIVER == 1
+ if(delta_IQK > 1)
+#else
+ if(delta_IQK > 3)
+#endif
+ {
+ pHalData->ThermalValue_IQK = ThermalValue;
+ PHY_IQCalibrate_8192C(Adapter, FALSE);
+ }
+
+#if 1
+ if(delta > 0 && IS_HARDWARE_TYPE_8723A(Adapter))
+ {
+ if(ThermalValue >= 15)
+ PHY_SetBBReg(Adapter, REG_AFE_XTAL_CTRL, bMaskDWord, 0x038180fd );
+ else
+ PHY_SetBBReg(Adapter, REG_AFE_XTAL_CTRL, bMaskDWord, 0x0381808d );
+ }
+#endif
+
+ //update thermal meter value
+ if(pHalData->TxPowerTrackControl)
+ Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_THERMAL_VALUE, &ThermalValue);
+
+ }
+
+ PlatformAtomicExchange(&Adapter->IntrCCKRefCount, FALSE);
+ pHalData->TXPowercount = 0;
+
+ // 2011/08/23 MH Add for power tracking after S3/S4 turn off RF. In this case, we need to execute IQK again. Otherwise
+ // The IQK scheme will use old value to save and cause incorrect BB value.
+ {
+ RT_RF_POWER_STATE rtState;
+
+ Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState));
+
+ if(Adapter->bDriverStopped || Adapter->bDriverIsGoingToPnpSetPowerSleep || rtState == eRfOff)
+ {
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Incorrect pwrtrack point, re-iqk next time\n"));
+ pHalData->bIQKInitialized = FALSE;
+ }
+ }
+
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("<===odm_TXPowerTrackingCallback_ThermalMeter_92C\n"));
+#endif
+}
+
+VOID
+odm_TXPowerTrackingCallback_ThermalMeter_8723A(
+ IN PADAPTER Adapter)
+{
+#if ((RT_PLATFORM == PLATFORM_WINDOWS) || (RT_PLATFORM == PLATFORM_LINUX)) && (HAL_CODE_BASE==RTL8192_C)
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ u1Byte ThermalValue = 0, delta, delta_LCK, delta_IQK, delta_HP, TimeOut = 100;
+ s4Byte ele_A=0, ele_D, TempCCk, X, value32;
+ s4Byte Y, ele_C=0;
+ s1Byte OFDM_index[2], CCK_index=0, OFDM_index_old[2], CCK_index_old=0;
+ int i = 0;
+ BOOLEAN is2T = IS_92C_SERIAL(pHalData->VersionID);
+
+#if MP_DRIVER == 1
+ PMPT_CONTEXT pMptCtx = &(Adapter->MptCtx);
+ pu1Byte TxPwrLevel = pMptCtx->TxPwrLevel;
+#endif
+ u1Byte OFDM_min_index = 6, rf; //OFDM BB Swing should be less than +3.0dB, which is required by Arthur
+#if 0
+ u4Byte DPK_delta_mapping[2][DPK_DELTA_MAPPING_NUM] = {
+ {0x1c, 0x1c, 0x1d, 0x1d, 0x1e,
+ 0x1f, 0x00, 0x00, 0x01, 0x01,
+ 0x02, 0x02, 0x03},
+ {0x1c, 0x1d, 0x1e, 0x1e, 0x1e,
+ 0x1f, 0x00, 0x00, 0x01, 0x02,
+ 0x02, 0x03, 0x03}};
+#endif
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ u1Byte ThermalValue_HP_count = 0;
+ u4Byte ThermalValue_HP = 0;
+ s1Byte index_mapping_HP[index_mapping_HP_NUM] = {
+ 0, 1, 3, 4, 6,
+ 7, 9, 10, 12, 13,
+ 15, 16, 18, 19, 21
+ };
+
+ s1Byte index_HP;
+#endif
+
+ if (ODM_CheckPowerStatus(Adapter) == FALSE)
+ return;
+
+ pHalData->TXPowerTrackingCallbackCnt++; //cosa add for debug
+ pHalData->bTXPowerTrackingInit = TRUE;
+
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("===>odm_TXPowerTrackingCallback_ThermalMeter_92C\n"));
+
+ ThermalValue = (u1Byte)PHY_QueryRFReg(Adapter, RF_PATH_A, RF_T_METER, 0x1f); // 0x24: RF Reg[4:0]
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x\n", ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter));
+
+
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ if (ThermalValue <= 0x16)
+ { // <20120307, Kordan> Asked by Alex.
+ PlatformEFIOWrite2Byte(Adapter, REG_AFE_XTAL_CTRL,
+ ((PlatformEFIORead2Byte(Adapter, REG_AFE_XTAL_CTRL))&~(BIT4|BIT5|BIT6|BIT7)) | (BIT7));
+ }
+ else
+ {
+ PlatformEFIOWrite2Byte(Adapter, REG_AFE_XTAL_CTRL,
+ ((PlatformEFIORead2Byte(Adapter, REG_AFE_XTAL_CTRL))&~(BIT4|BIT5|BIT6|BIT7)) | (BIT4|BIT5|BIT6|BIT7));
+ }
+#endif
+
+ PHY_APCalibrate_8192C(Adapter, (ThermalValue - pHalData->EEPROMThermalMeter));
+
+ if(is2T)
+ rf = 2;
+ else
+ rf = 1;
+
+ while(PlatformAtomicExchange(&Adapter->IntrCCKRefCount, TRUE) == TRUE)
+ {
+ PlatformSleepUs(100);
+ TimeOut--;
+ if(TimeOut <= 0)
+ {
+ RTPRINT(FINIT, INIT_TxPower,
+ ("!!!odm_TXPowerTrackingCallback_ThermalMeter_92C Wait for check CCK gain index too long!!!\n" ));
+ break;
+ }
+ }
+
+ if(ThermalValue)
+ {
+// if(!pHalData->ThermalValue)
+ {
+ //Query OFDM path A default setting
+ ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord)&bMaskOFDM_D;
+ for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
+ {
+ if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
+ {
+ OFDM_index_old[0] = (u1Byte)i;
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial pathA ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
+ rOFDM0_XATxIQImbalance, ele_D, OFDM_index_old[0]));
+ break;
+ }
+ }
+
+ //Query OFDM path B default setting
+ if(is2T)
+ {
+ ele_D = PHY_QueryBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord)&bMaskOFDM_D;
+ for(i=0; i<OFDM_TABLE_SIZE_92C; i++) //find the index
+ {
+ if(ele_D == (OFDMSwingTable[i]&bMaskOFDM_D))
+ {
+ OFDM_index_old[1] = (u1Byte)i;
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial pathB ele_D reg0x%x = 0x%x, OFDM_index=0x%x\n",
+ rOFDM0_XBTxIQImbalance, ele_D, OFDM_index_old[1]));
+ break;
+ }
+ }
+ }
+
+ //Query CCK default setting From 0xa24
+ TempCCk = PHY_QueryBBReg(Adapter, rCCK0_TxFilter2, bMaskDWord)&bMaskCCK;
+ for(i=0 ; i<CCK_TABLE_SIZE ; i++)
+ {
+ if(pHalData->bCCKinCH14)
+ {
+ if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch14[i][2], 4)==0)
+ {
+ CCK_index_old =(u1Byte) i;
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch 14 %d\n",
+ rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
+ break;
+ }
+ }
+ else
+ {
+ if(PlatformCompareMemory((void*)&TempCCk, (void*)&CCKSwingTable_Ch1_Ch13[i][2], 4)==0)
+ {
+ CCK_index_old =(u1Byte) i;
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Initial reg0x%x = 0x%x, CCK_index=0x%x, ch14 %d\n",
+ rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
+ break;
+ }
+ }
+ }
+
+ if(!pHalData->ThermalValue)
+ {
+ pHalData->ThermalValue = pHalData->EEPROMThermalMeter;
+ pHalData->ThermalValue_LCK = ThermalValue;
+ pHalData->ThermalValue_IQK = ThermalValue;
+ pHalData->ThermalValue_DPK = pHalData->EEPROMThermalMeter;
+
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ for(i = 0; i < rf; i++)
+ pHalData->OFDM_index_HP[i] = pHalData->OFDM_index[i] = OFDM_index_old[i];
+ pHalData->CCK_index_HP = pHalData->CCK_index = CCK_index_old;
+#else
+ for(i = 0; i < rf; i++)
+ pHalData->OFDM_index[i] = OFDM_index_old[i];
+ pHalData->CCK_index = CCK_index_old;
+#endif
+ }
+
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
+ {
+ pHalData->ThermalValue_HP[pHalData->ThermalValue_HP_index] = ThermalValue;
+ pHalData->ThermalValue_HP_index++;
+ if(pHalData->ThermalValue_HP_index == HP_THERMAL_NUM)
+ pHalData->ThermalValue_HP_index = 0;
+
+ for(i = 0; i < HP_THERMAL_NUM; i++)
+ {
+ if(pHalData->ThermalValue_HP[i])
+ {
+ ThermalValue_HP += pHalData->ThermalValue_HP[i];
+ ThermalValue_HP_count++;
+ }
+ }
+
+ if(ThermalValue_HP_count)
+ ThermalValue = (u1Byte)(ThermalValue_HP / ThermalValue_HP_count);
+ }
+#endif
+ }
+
+ delta = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
+ {
+ if(pHalData->bDoneTxpower)
+ delta_HP = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
+ else
+ delta_HP = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
+ }
+ else
+#endif
+ {
+ delta_HP = 0;
+ }
+ delta_LCK = (ThermalValue > pHalData->ThermalValue_LCK)?(ThermalValue - pHalData->ThermalValue_LCK):(pHalData->ThermalValue_LCK - ThermalValue);
+ delta_IQK = (ThermalValue > pHalData->ThermalValue_IQK)?(ThermalValue - pHalData->ThermalValue_IQK):(pHalData->ThermalValue_IQK - ThermalValue);
+
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Readback Thermal Meter = 0x%x pre thermal meter 0x%x EEPROMthermalmeter 0x%x delta 0x%x delta_LCK 0x%x delta_IQK 0x%x\n", ThermalValue, pHalData->ThermalValue, pHalData->EEPROMThermalMeter, delta, delta_LCK, delta_IQK));
+
+ if(delta_LCK > 1)
+ {
+ pHalData->ThermalValue_LCK = ThermalValue;
+ PHY_LCCalibrate(Adapter);
+ }
+
+ if((delta > 0 || delta_HP > 0)&& pHalData->TxPowerTrackControl)
+ {
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ if(RT_GetInterfaceSelection(Adapter) == INTF_SEL1_USB_High_Power)
+ {
+ pHalData->bDoneTxpower = TRUE;
+ delta_HP = ThermalValue > pHalData->EEPROMThermalMeter?(ThermalValue - pHalData->EEPROMThermalMeter):(pHalData->EEPROMThermalMeter - ThermalValue);
+
+ if(delta_HP > index_mapping_HP_NUM-1)
+ index_HP = index_mapping_HP[index_mapping_HP_NUM-1];
+ else
+ index_HP = index_mapping_HP[delta_HP];
+
+ if(ThermalValue > pHalData->EEPROMThermalMeter) //set larger Tx power
+ {
+ for(i = 0; i < rf; i++)
+ OFDM_index[i] = pHalData->OFDM_index_HP[i] - index_HP;
+ CCK_index = pHalData->CCK_index_HP -index_HP;
+ }
+ else
+ {
+ for(i = 0; i < rf; i++)
+ OFDM_index[i] = pHalData->OFDM_index_HP[i] + index_HP;
+ CCK_index = pHalData->CCK_index_HP + index_HP;
+ }
+
+ delta_HP = (ThermalValue > pHalData->ThermalValue)?(ThermalValue - pHalData->ThermalValue):(pHalData->ThermalValue - ThermalValue);
+
+ }
+ else
+#endif
+ {
+ if(ThermalValue > pHalData->ThermalValue)
+ {
+ for(i = 0; i < rf; i++)
+ pHalData->OFDM_index[i] -= delta;
+ pHalData->CCK_index -= delta;
+ }
+ else
+ {
+ for(i = 0; i < rf; i++)
+ pHalData->OFDM_index[i] += delta;
+ pHalData->CCK_index += delta;
+ }
+ }
+
+ if(is2T)
+ {
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
+ pHalData->OFDM_index[0], pHalData->OFDM_index[1], pHalData->CCK_index));
+ }
+ else
+ {
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("temp OFDM_A_index=0x%x, CCK_index=0x%x\n",
+ pHalData->OFDM_index[0], pHalData->CCK_index));
+ }
+
+ //no adjust
+#if DEV_BUS_TYPE==RT_USB_INTERFACE
+ if(RT_GetInterfaceSelection(Adapter) != INTF_SEL1_USB_High_Power)
+#endif
+ {
+ if(ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ for(i = 0; i < rf; i++)
+ OFDM_index[i] = pHalData->OFDM_index[i]+1;
+ CCK_index = pHalData->CCK_index+1;
+ }
+ else
+ {
+ for(i = 0; i < rf; i++)
+ OFDM_index[i] = pHalData->OFDM_index[i];
+ CCK_index = pHalData->CCK_index;
+ }
+
+#if MP_DRIVER == 1
+ for(i = 0; i < rf; i++)
+ {
+ if(TxPwrLevel[i] >=0 && TxPwrLevel[i] <=26)
+ {
+ if(ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ if (delta < 5)
+ OFDM_index[i] -= 1;
+ else
+ OFDM_index[i] -= 2;
+ }
+ else if(delta >= 5 && ThermalValue < pHalData->EEPROMThermalMeter)
+ {
+ OFDM_index[i] += 2;
+ }
+ else if(delta < 5 && ThermalValue < pHalData->EEPROMThermalMeter)
+ {
+ OFDM_index[i] += 1;
+ }
+ }
+ else if (TxPwrLevel[i] >= 27 && TxPwrLevel[i] <= 32 && ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ if (delta < 5)
+ OFDM_index[i] -= 1;
+ else
+ OFDM_index[i] -= 2;
+ }
+ else if (TxPwrLevel[i] >= 32 && TxPwrLevel[i] <= 38 && ThermalValue > pHalData->EEPROMThermalMeter && delta > 5)
+ {
+ OFDM_index[i] -= 1;
+ }
+ }
+
+ {
+ if(TxPwrLevel[i] >=0 && TxPwrLevel[i] <=26)
+ {
+ if(ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ if (delta < 5)
+ CCK_index -= 1;
+ else
+ CCK_index -= 2;
+ }
+ else if(delta > 5 && ThermalValue < pHalData->EEPROMThermalMeter)
+ {
+ CCK_index += 1;
+ }
+ }
+ else if (TxPwrLevel[i] >= 27 && TxPwrLevel[i] <= 32 && ThermalValue > pHalData->EEPROMThermalMeter)
+ {
+ if (delta < 5)
+ CCK_index -= 1;
+ else
+ CCK_index -= 2;
+ }
+ else if (TxPwrLevel[i] >= 32 && TxPwrLevel[i] <= 38 && ThermalValue > pHalData->EEPROMThermalMeter && delta > 5)
+ {
+ CCK_index -= 1;
+ }
+ }
+#endif
+ }
+
+ for(i = 0; i < rf; i++)
+ {
+ if(OFDM_index[i] > (OFDM_TABLE_SIZE_92C-1))
+ OFDM_index[i] = (OFDM_TABLE_SIZE_92C-1);
+ else if (OFDM_index[i] < OFDM_min_index)
+ OFDM_index[i] = OFDM_min_index;
+ }
+
+ if(CCK_index > (CCK_TABLE_SIZE-1))
+ CCK_index = (CCK_TABLE_SIZE-1);
+ else if (CCK_index < 0)
+ CCK_index = 0;
+
+ if(is2T)
+ {
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, OFDM_B_index=0x%x, CCK_index=0x%x\n",
+ OFDM_index[0], OFDM_index[1], CCK_index));
+ }
+ else
+ {
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("new OFDM_A_index=0x%x, CCK_index=0x%x\n",
+ OFDM_index[0], CCK_index));
+ }
+ }
+
+ if(pHalData->TxPowerTrackControl && (delta != 0 || delta_HP != 0))
+ {
+ //Adujst OFDM Ant_A according to IQK result
+ ele_D = (OFDMSwingTable[OFDM_index[0]] & 0xFFC00000)>>22;
+ X = pHalData->RegE94;
+ Y = pHalData->RegE9C;
+
+ if(X != 0)
+ {
+ if ((X & 0x00000200) != 0)
+ X = X | 0xFFFFFC00;
+ ele_A = ((X * ele_D)>>8)&0x000003FF;
+
+ //new element C = element D x Y
+ if ((Y & 0x00000200) != 0)
+ Y = Y | 0xFFFFFC00;
+ ele_C = ((Y * ele_D)>>8)&0x000003FF;
+
+ //wirte new elements A, C, D to regC80 and regC94, element B is always 0
+ value32 = (ele_D<<22)|((ele_C&0x3F)<<16)|ele_A;
+ PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, value32);
+
+ value32 = (ele_C&0x000003C0)>>6;
+ PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, value32);
+
+ value32 = ((X * ele_D)>>7)&0x01;
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT31, value32);
+
+ value32 = ((Y * ele_D)>>7)&0x01;
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT29, value32);
+
+ }
+ else
+ {
+ PHY_SetBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[0]]);
+ PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, 0x00);
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT31|BIT29, 0x00);
+ }
+
+ RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking path A: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x\n", X, Y, ele_A, ele_C, ele_D));
+
+ //Adjust CCK according to IQK result
+ if(!pHalData->bCCKinCH14){
+ PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch1_Ch13[CCK_index][0]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch1_Ch13[CCK_index][1]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch1_Ch13[CCK_index][2]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch1_Ch13[CCK_index][3]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch1_Ch13[CCK_index][4]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch1_Ch13[CCK_index][5]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch1_Ch13[CCK_index][6]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch1_Ch13[CCK_index][7]);
+ }
+ else{
+ PlatformEFIOWrite1Byte(Adapter, 0xa22, CCKSwingTable_Ch14[CCK_index][0]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa23, CCKSwingTable_Ch14[CCK_index][1]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa24, CCKSwingTable_Ch14[CCK_index][2]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa25, CCKSwingTable_Ch14[CCK_index][3]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa26, CCKSwingTable_Ch14[CCK_index][4]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa27, CCKSwingTable_Ch14[CCK_index][5]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa28, CCKSwingTable_Ch14[CCK_index][6]);
+ PlatformEFIOWrite1Byte(Adapter, 0xa29, CCKSwingTable_Ch14[CCK_index][7]);
+ }
+
+ if(is2T)
+ {
+ ele_D = (OFDMSwingTable[OFDM_index[1]] & 0xFFC00000)>>22;
+
+ //new element A = element D x X
+ X = pHalData->RegEB4;
+ Y = pHalData->RegEBC;
+
+ if(X != 0){
+ if ((X & 0x00000200) != 0) //consider minus
+ X = X | 0xFFFFFC00;
+ ele_A = ((X * ele_D)>>8)&0x000003FF;
+
+ //new element C = element D x Y
+ if ((Y & 0x00000200) != 0)
+ Y = Y | 0xFFFFFC00;
+ ele_C = ((Y * ele_D)>>8)&0x00003FF;
+
+ //wirte new elements A, C, D to regC88 and regC9C, element B is always 0
+ value32=(ele_D<<22)|((ele_C&0x3F)<<16) |ele_A;
+ PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, value32);
+
+ value32 = (ele_C&0x000003C0)>>6;
+ PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, value32);
+
+ value32 = ((X * ele_D)>>7)&0x01;
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT27, value32);
+
+ value32 = ((Y * ele_D)>>7)&0x01;
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT25, value32);
+
+ }
+ else{
+ PHY_SetBBReg(Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, OFDMSwingTable[OFDM_index[1]]);
+ PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, 0x00);
+ PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold, BIT27|BIT25, 0x00);
+ }
+
+ RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking path B: X = 0x%x, Y = 0x%x ele_A = 0x%x ele_C = 0x%x ele_D = 0x%x\n", X, Y, ele_A, ele_C, ele_D));
+ }
+
+ RTPRINT(FINIT, INIT_IQK, ("TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n", PHY_QueryBBReg(Adapter, 0xc80, bMaskDWord), PHY_QueryBBReg(Adapter, 0xc94, bMaskDWord), PHY_QueryRFReg(Adapter, RF_PATH_A, 0x24, bRFRegOffsetMask)));
+ }
+
+#if MP_DRIVER == 1
+ if(delta_IQK > 1)
+#else
+ if(delta_IQK > 3)
+#endif
+ {
+ pHalData->ThermalValue_IQK = ThermalValue;
+ PHY_IQCalibrate(Adapter, FALSE);
+ }
+
+#if 1
+ if(delta > 0)
+ {
+ if(ThermalValue >= 15)
+ PHY_SetBBReg(Adapter, REG_AFE_XTAL_CTRL, bMaskDWord, 0x038180fd );
+ else
+ PHY_SetBBReg(Adapter, REG_AFE_XTAL_CTRL, bMaskDWord, 0x0381808d );
+ }
+#endif
+ //update thermal meter value
+ if(pHalData->TxPowerTrackControl)
+ Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_THERMAL_VALUE, &ThermalValue);
+
+ }
+
+ PlatformAtomicExchange(&Adapter->IntrCCKRefCount, FALSE);
+ pHalData->TXPowercount = 0;
+
+ // 2011/08/23 MH Add for power tracking after S3/S4 turn off RF. In this case, we need to execute IQK again. Otherwise
+ // The IQK scheme will use old value to save and cause incorrect BB value.
+ {
+ RT_RF_POWER_STATE rtState;
+
+ Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState));
+
+ if(Adapter->bDriverStopped || Adapter->bDriverIsGoingToPnpSetPowerSleep || rtState == eRfOff)
+ {
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("Incorrect pwrtrack point, re-iqk next time\n"));
+ pHalData->bIQKInitialized = FALSE;
+ }
+ }
+
+ RT_TRACE(COMP_POWER_TRACKING, DBG_LOUD,("<===odm_TXPowerTrackingCallback_ThermalMeter_92C\n"));
+#endif
+}
+
+//
+// ==================================================
+// Tx power tracking relative code.
+// ==================================================
+//
+
+
+#endif
+
+#else //#if (RTL8192C_SUPPORT == 1)
+VOID
+odm_TXPowerTrackingCallback_ThermalMeter_92C(
+ IN PADAPTER Adapter
+ )
+{
+}
+VOID
+odm_TXPowerTrackingCallback_ThermalMeter_8723A(
+ IN PADAPTER Adapter)
+{
+}
+
+#endif //#if (RTL8192C_SUPPORT == 1)
+
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/odm_RTL8192C.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/odm_RTL8192C.h
index cc9c57f9b242..684db25a5035 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/odm_RTL8192C.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8192c/odm_RTL8192C.h
@@ -1,86 +1,86 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __ODM_RTL8192C_H__
-#define __ODM_RTL8192C_H__
-
-
-VOID
-odm_ResetFACounter_92C(
- IN PDM_ODM_T pDM_Odm
- );
-
-#if (DM_ODM_SUPPORT_TYPE & ODM_MP)
-
-
-//
-// ==================================================
-// Tx power tracking relative code.
-// ==================================================
-//
-
-VOID
-odm_TXPowerTrackingCallbackThermalMeter92C(
- IN PADAPTER Adapter
- );
-
-
-VOID
-odm_TXPowerTrackingCallbackRXGainThermalMeter92D(
- IN PADAPTER Adapter
- );
-
-VOID
-odm_TXPowerTrackingDirectCall92C(
- IN PADAPTER Adapter
- );
-
-VOID
-odm_TXPowerTrackingDirectCall92C(
- IN PADAPTER Adapter
- );
-
-VOID
-odm_TXPowerTrackingCallback_ThermalMeter_92C(
- IN PADAPTER Adapter
- );
-
-VOID
-odm_TXPowerTrackingCallback_ThermalMeter_8723A(
- IN PADAPTER Adapter
- );
-
-//
-// ==================================================
-// Tx power tracking relative code.
-// ==================================================
-//
-
-void
-ODM_RF_Saving_8188E(
- IN PDM_ODM_T pDM_Odm,
- IN u1Byte bForceInNormal
- );
-
-
-#endif
-
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __ODM_RTL8192C_H__
+#define __ODM_RTL8192C_H__
+
+
+VOID
+odm_ResetFACounter_92C(
+ IN PDM_ODM_T pDM_Odm
+ );
+
+#if (DM_ODM_SUPPORT_TYPE & ODM_MP)
+
+
+//
+// ==================================================
+// Tx power tracking relative code.
+// ==================================================
+//
+
+VOID
+odm_TXPowerTrackingCallbackThermalMeter92C(
+ IN PADAPTER Adapter
+ );
+
+
+VOID
+odm_TXPowerTrackingCallbackRXGainThermalMeter92D(
+ IN PADAPTER Adapter
+ );
+
+VOID
+odm_TXPowerTrackingDirectCall92C(
+ IN PADAPTER Adapter
+ );
+
+VOID
+odm_TXPowerTrackingDirectCall92C(
+ IN PADAPTER Adapter
+ );
+
+VOID
+odm_TXPowerTrackingCallback_ThermalMeter_92C(
+ IN PADAPTER Adapter
+ );
+
+VOID
+odm_TXPowerTrackingCallback_ThermalMeter_8723A(
+ IN PADAPTER Adapter
+ );
+
+//
+// ==================================================
+// Tx power tracking relative code.
+// ==================================================
+//
+
+void
+ODM_RF_Saving_8188E(
+ IN PDM_ODM_T pDM_Odm,
+ IN u1Byte bForceInNormal
+ );
+
+
+#endif
+
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723Reg.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723Reg.h
index 16329cd46a55..2e04792e7fe8 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723Reg.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723Reg.h
@@ -1,45 +1,45 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-//============================================================
-// File Name: Hal8723Reg.h
-//
-// Description:
-//
-// This file is for RTL8723 register definition.
-//
-//
-//============================================================
-#ifndef __HAL_8723_REG_H__
-#define __HAL_8723_REG_H__
-
-//
-// Register Definition
-//
-#define ODM_R_A_AGC_CORE1_8723A 0xc50
-
-
-//
-// Bitmap Definition
-//
-#define BIT_FA_RESET_8723A BIT0
-
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+//============================================================
+// File Name: Hal8723Reg.h
+//
+// Description:
+//
+// This file is for RTL8723 register definition.
+//
+//
+//============================================================
+#ifndef __HAL_8723_REG_H__
+#define __HAL_8723_REG_H__
+
+//
+// Register Definition
+//
+#define ODM_R_A_AGC_CORE1_8723A 0xc50
+
+
+//
+// Bitmap Definition
+//
+#define BIT_FA_RESET_8723A BIT0
+
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723SHWImg_CE.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723SHWImg_CE.c
index d495f7e33a04..db70fd79a870 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723SHWImg_CE.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723SHWImg_CE.c
@@ -1,7245 +1,5972 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-/*Created on 2013/02/26, 18:59*/
-#include "../odm_precomp.h"
-
-const u8 Rtl8723SFwImgArray[Rtl8723SImgArrayLength] = {
-0x01,0x23,0x02,0x00,0x0e,0x00,0x00,0x00,0x11,0x16,0x12,0x05,0x5e,0x50,0x01,0x00,
-0x31,0x84,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x02,0x44,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x02,0x58,0x67,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x02,0x60,0xbf,0x00,0x00,0x00,0x00,0x00,0x02,0x53,0x36,0x00,0x00,
-0x00,0x00,0x00,0x02,0x51,0x6b,0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,
-0x00,0x04,0x06,0x05,0x04,0x02,0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,
-0x08,0x06,0x00,0x08,0x0a,0x09,0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,
-0x0a,0x09,0x08,0x00,0x00,0x08,0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,
-0x00,0x18,0x22,0x21,0x20,0x18,0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,
-0x20,0x08,0x00,0x20,0x22,0x21,0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,
-0x22,0x20,0x18,0x08,0x00,0x20,0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,
-0x00,0x30,0x31,0x2f,0x10,0x10,0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,
-0x10,0x00,0x00,0x30,0x31,0x20,0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,
-0x04,0x04,0x04,0x05,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x04,0x05,
-0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,
-0x05,0x05,0x06,0x07,0x0a,0x0b,0x0d,0x10,0x04,0x05,0x05,0x06,0x06,0x09,0x0c,0x11,
-0x08,0x08,0x09,0x09,0x0a,0x0c,0x10,0x11,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x07,
-0x07,0x07,0x08,0x0a,0x04,0x04,0x04,0x04,0x06,0x0a,0x0b,0x0d,0x05,0x05,0x07,0x07,
-0x08,0x0b,0x0d,0x0f,0x04,0x04,0x04,0x05,0x07,0x07,0x09,0x09,0x0c,0x0e,0x10,0x12,
-0x04,0x04,0x05,0x05,0x06,0x0a,0x11,0x13,0x09,0x09,0x09,0x09,0x0c,0x0e,0x11,0x13,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,
-0x21,0x27,0x29,0x2a,0x00,0x00,0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,
-0x00,0x08,0x00,0x10,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,
-0x00,0xc0,0x00,0xd8,0x00,0x50,0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,
-0x01,0xe0,0x02,0x30,0x01,0x2c,0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,
-0x06,0x40,0x07,0xd0,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,
-0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,
-0x00,0x50,0x00,0x64,0x00,0xa0,0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,
-0x00,0xf0,0x01,0x68,0x01,0xf4,0x02,0x58,0x03,0x20,0x03,0xe8,0x02,0x02,0x02,0x02,
-0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x07,0x04,0x04,0x07,0x0a,0x0a,0x0c,0x0c,0x12,
-0x05,0x07,0x07,0x08,0x0b,0x12,0x24,0x3c,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,
-0x05,0x06,0x07,0x08,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,
-0x09,0x0a,0x0b,0x0c,0x20,0x1e,0x1c,0x18,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
-0xbb,0x01,0x06,0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,0xf7,0x22,0xbb,0xfe,0x01,
-0xf3,0x22,0xf8,0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,
-0xe8,0xf0,0x22,0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,0xbb,0xfe,0x05,0xe9,0x25,
-0x82,0xc8,0xf2,0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,
-0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,
-0x83,0xe0,0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,
-0xfe,0x07,0xe3,0xf5,0xf0,0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,
-0xf0,0x74,0x01,0x93,0x22,0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,
-0xf5,0x83,0xe0,0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,
-0x08,0xe6,0x22,0xbb,0xfe,0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,
-0xe5,0x83,0x2a,0xf5,0x83,0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,
-0x89,0x82,0x8a,0x83,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,
-0x19,0x22,0xbb,0xfe,0x06,0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,
-0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,
-0x22,0x50,0x09,0xe9,0x25,0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,
-0x25,0x82,0xc8,0xf2,0xe5,0xf0,0x08,0xf2,0x22,0xef,0x4b,0xff,0xee,0x4a,0xfe,0xed,
-0x49,0xfd,0xec,0x48,0xfc,0x22,0xbb,0x01,0x07,0x89,0x82,0x8a,0x83,0x02,0x43,0x46,
-0x50,0x05,0xe9,0xf8,0x02,0x43,0xda,0xbb,0xfe,0x05,0xe9,0xf8,0x02,0x43,0xe6,0x89,
-0x82,0x8a,0x83,0x02,0x43,0xf2,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,
-0xff,0x22,0xa4,0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,0x22,0xe0,0xfb,
-0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x22,0xf8,0xe0,0xfb,0xa3,0xa3,0xe0,0xf9,0x25,0xf0,
-0xf0,0xe5,0x82,0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,
-0xa3,0xea,0xf0,0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,
-0x74,0x01,0x93,0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,
-0xe4,0x73,0x74,0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0xd0,0x83,0xd0,
-0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,
-0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,0x02,0x93,0xb5,0xf0,0x06,0x74,0x03,
-0x93,0x68,0x60,0xe9,0xa3,0xa3,0xa3,0xa3,0x80,0xd8,0xe6,0xfc,0x08,0xe6,0xfd,0x08,
-0xe6,0xfe,0x08,0xe6,0xff,0x22,0xe2,0xfc,0x08,0xe2,0xfd,0x08,0xe2,0xfe,0x08,0xe2,
-0xff,0x22,0xe4,0x93,0xfc,0x74,0x01,0x93,0xfd,0x74,0x02,0x93,0xfe,0x74,0x03,0x93,
-0xff,0x22,0x02,0x44,0x40,0x02,0x4b,0x85,0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,
-0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,
-0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,
-0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
-0x90,0x44,0x85,0xe4,0x7e,0x01,0x93,0x60,0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,
-0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,
-0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,
-0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,
-0xe9,0xde,0xe7,0x80,0xbe,0x48,0x9e,0x8d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x48,0x9e,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x9e,0x8c,0x00,0x41,
-0x9f,0x14,0x00,0x41,0x9e,0x9e,0x80,0x41,0x9e,0x9f,0x80,0x41,0x9d,0xa8,0x00,0x41,
-0x9d,0xa9,0x00,0x41,0x9d,0xa7,0x00,0x41,0x9e,0xb3,0x00,0x00,0x90,0x9e,0x69,0xe0,
-0xfe,0xa3,0xe0,0xff,0x90,0x02,0x84,0xef,0xf0,0xa3,0xee,0xf0,0xa3,0x74,0x05,0xf0,
-0x22,0xe5,0x68,0x30,0xe3,0x04,0xe4,0xff,0x80,0x02,0x7f,0x01,0xe1,0xd6,0x8f,0x82,
-0x8e,0x83,0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0x90,0x9e,0xd1,0xe0,0x30,0xe0,0x05,0xaf,
-0x69,0x02,0x56,0x5f,0x02,0x4c,0x80,0x22,0x7f,0x00,0x22,0x90,0x01,0x64,0x74,0x20,
-0xf0,0x22,0x22,0x02,0x61,0x15,0x02,0x61,0x1c,0xef,0x8e,0xf0,0x71,0xad,0x45,0x26,
-0x00,0x40,0x45,0x4e,0x00,0x80,0x45,0x79,0x01,0x00,0x45,0x8d,0x02,0x00,0x45,0xa5,
-0x04,0x00,0x00,0x00,0x45,0xc2,0xed,0x54,0x3f,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,
-0x00,0x7f,0x40,0xef,0x2d,0xff,0xee,0x3c,0xfe,0xef,0x78,0x06,0xce,0xc3,0x13,0xce,
-0x13,0xd8,0xf9,0x78,0x06,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0x80,0x26,0xed,0x54,
-0x7f,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,0x00,0x7f,0x80,0xef,0x2d,0xff,0xee,0x3c,
-0xfe,0xef,0x78,0x07,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x78,0x07,0xc3,0x33,0xce,
-0x33,0xce,0xd8,0xf9,0xfd,0xac,0x06,0x80,0x49,0xed,0x70,0x04,0xfe,0xff,0x80,0x04,
-0x7e,0x01,0x7f,0x00,0xef,0x2d,0xee,0x3c,0x7d,0x00,0xfc,0x80,0x35,0xec,0x54,0x01,
-0x4d,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,0x02,0x7f,0x00,0xef,0x2d,0xee,0x3c,0xc3,
-0x13,0x7d,0x00,0x80,0x1a,0xec,0x54,0x03,0x4d,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,
-0x04,0x7f,0x00,0xef,0x2d,0xee,0x3c,0x13,0x13,0x54,0x3f,0x7d,0x00,0x25,0xe0,0x25,
-0xe0,0xfc,0xae,0x04,0xaf,0x05,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0x90,
-0x9e,0x6f,0xf0,0xa3,0x74,0x08,0xf0,0xa3,0xf0,0x90,0x01,0x1f,0xe0,0xfe,0x90,0x01,
-0x1e,0xe0,0x7c,0x00,0x24,0x00,0xff,0xec,0x3e,0x90,0x9e,0x69,0xf0,0xa3,0xef,0xf0,
-0x90,0x02,0x87,0xe0,0x90,0x9e,0x6e,0xf0,0x90,0x9e,0xbc,0xe0,0x20,0xe0,0x02,0xe1,
-0x49,0xe4,0x90,0x9e,0x6d,0xf0,0x90,0x9e,0x6e,0xe0,0xff,0x90,0x9e,0x6d,0xe0,0xc3,
-0x9f,0x40,0x02,0xe1,0x49,0x90,0x9e,0x69,0xe0,0xfc,0xa3,0xe0,0xfd,0xec,0x90,0xfd,
-0x11,0xf0,0x74,0x02,0x2d,0xf5,0x82,0xe4,0x34,0xfb,0xf5,0x83,0xe0,0x54,0x0f,0xfc,
-0x33,0x33,0x33,0x54,0xf8,0xff,0xed,0x24,0x18,0x2f,0x90,0x9e,0x6b,0xf0,0xe0,0x24,
-0x00,0xf5,0x82,0xe4,0x34,0xfb,0xf5,0x83,0xe0,0x54,0xfc,0x90,0x9e,0x6c,0xf0,0x74,
-0x01,0x2d,0xf5,0x82,0xe4,0x34,0xfb,0xf5,0x83,0xe0,0xfe,0x74,0x00,0x2d,0xf5,0x82,
-0xe4,0x34,0xfb,0xf5,0x83,0xe0,0x7a,0x00,0x24,0x00,0xff,0xea,0x3e,0x54,0x3f,0xab,
-0x07,0xfa,0xaf,0x04,0xef,0x75,0xf0,0x08,0xa4,0x24,0x18,0xff,0xe4,0x35,0xf0,0xfe,
-0xef,0x2b,0xfb,0xee,0x3a,0xfa,0x90,0x9e,0xc2,0xe0,0xfe,0xa3,0xe0,0xff,0xad,0x03,
-0xac,0x02,0xb1,0x09,0xaa,0x06,0xab,0x07,0x90,0x9e,0x69,0xee,0x8f,0xf0,0x51,0x54,
-0x90,0x9e,0xc0,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x9e,0x69,0xe0,0xfc,0xa3,0xe0,0xfd,
-0xd3,0x9f,0xec,0x9e,0x40,0x1b,0x90,0x9e,0xc1,0xe0,0x24,0x01,0xff,0x90,0x9e,0xc0,
-0xe0,0x34,0x00,0xfe,0xc3,0xed,0x9f,0xff,0xec,0x9e,0x90,0x9e,0x69,0xf0,0xa3,0xef,
-0xf0,0x90,0x9e,0x6c,0xe0,0xff,0x24,0x40,0x60,0x04,0x24,0x20,0x70,0x24,0x90,0x9e,
-0xbc,0xe0,0xfe,0xc4,0x13,0x13,0x13,0x54,0x01,0x30,0xe0,0x29,0xef,0x90,0x00,0x81,
-0xb4,0xa0,0x06,0xe0,0x44,0x04,0xf0,0x80,0x04,0xe0,0x44,0x08,0xf0,0x90,0x9e,0xbf,
-0x80,0x0f,0x90,0x9e,0xbc,0xe0,0xff,0xc4,0x13,0x13,0x54,0x03,0x30,0xe0,0x06,0x80,
-0x04,0xe0,0x44,0x01,0xf0,0x90,0x9e,0xbf,0xe0,0x20,0xe0,0x07,0x90,0x01,0x3f,0xe0,
-0x30,0xe2,0x10,0xf1,0x4e,0x90,0x9e,0xbc,0xe0,0xc4,0x54,0x0f,0x30,0xe0,0x12,0x91,
-0xbc,0x80,0x0e,0x91,0xbc,0x90,0x01,0xbf,0xe0,0x04,0xf0,0x90,0x00,0xe2,0xe0,0x04,
-0xf0,0x90,0x9e,0x6d,0xe0,0x04,0xf0,0xc1,0x06,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,
-0x9b,0xe0,0x64,0x02,0x70,0x33,0x90,0x9e,0xbd,0xe0,0xff,0x90,0x9e,0xbc,0xe0,0xfe,
-0xc4,0x13,0x54,0x01,0xfd,0x12,0x4e,0xa4,0x90,0x9e,0xbe,0xe0,0x75,0xf0,0x20,0xa4,
-0xff,0xae,0xf0,0x12,0x3b,0x3b,0x90,0x9e,0xbd,0xe0,0xff,0x90,0x9e,0xbc,0xe0,0xfe,
-0xc4,0x13,0x54,0x01,0xf4,0xfd,0x02,0x4e,0xa4,0x90,0x06,0x90,0xe0,0x44,0x01,0xf0,
-0x22,0x90,0x9e,0xb4,0xe0,0x30,0xe0,0x3d,0xe5,0x67,0x64,0x01,0x70,0x37,0x90,0x9e,
-0xb8,0xe0,0x60,0x31,0x90,0x9e,0x8e,0xe0,0xc4,0x13,0x13,0x54,0x03,0x30,0xe0,0x02,
-0x80,0x15,0x90,0x9e,0xb8,0xe0,0xff,0x90,0x9e,0xb6,0xe0,0xb5,0x07,0x0f,0xf1,0x4e,
-0x90,0x00,0x81,0xe0,0x44,0x10,0xf0,0xe4,0x90,0x9e,0xb8,0xf0,0x22,0x91,0xd1,0x90,
-0x9e,0xb8,0xe0,0x04,0xf0,0x22,0x8f,0x27,0x12,0x4f,0xf8,0xef,0x64,0x01,0x70,0x2e,
-0x90,0x9e,0x97,0x12,0x50,0x26,0xe5,0x27,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,
-0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,
-0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xd3,
-0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8b,0x60,0x8a,0x61,0x89,0x62,0x90,0x9e,0xe6,0x12,
-0x43,0x7e,0xab,0x63,0xaa,0x64,0xa9,0x65,0x90,0x9e,0xe9,0x12,0x43,0x7e,0xaf,0x66,
-0x15,0x66,0xef,0x60,0x1e,0x90,0x9e,0xe9,0xe4,0x75,0xf0,0x01,0x12,0x43,0x67,0x12,
-0x1f,0x04,0xff,0x90,0x9e,0xe6,0xe4,0x75,0xf0,0x01,0x12,0x43,0x67,0xef,0x12,0x42,
-0x20,0x80,0xdb,0xab,0x60,0xaa,0x61,0xa9,0x62,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,
-0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xec,0x12,0x43,0x7e,0x90,0x9e,0x9b,0xe0,0x64,
-0x01,0x60,0x66,0x90,0x9e,0x9b,0xe0,0x70,0x60,0x90,0x9d,0xa7,0xe0,0xff,0x04,0xf0,
-0x90,0x9e,0xec,0x12,0x43,0x5e,0x90,0x00,0x01,0xef,0x12,0x42,0x32,0x31,0x8f,0xef,
-0x60,0x47,0x90,0x9e,0xec,0x12,0x43,0x5e,0x8b,0x63,0x8a,0x64,0x89,0x65,0x75,0x66,
-0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x11,0x0f,0x90,0x9e,0xef,0x12,0x43,0x5e,0x8b,
-0x63,0x8a,0x64,0x89,0x65,0x90,0x9e,0xec,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0xc4,
-0x54,0x0f,0xf5,0x66,0x7b,0x01,0x7a,0x01,0x79,0xa2,0x11,0x0f,0x90,0x01,0xaf,0x74,
-0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,
-0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xf2,0x12,0x43,0x7e,0x90,0x9d,0xa9,0xe0,0xff,
-0x90,0x9d,0xa8,0xe0,0xb5,0x07,0x07,0x7d,0x02,0x7f,0x03,0x12,0x3a,0xdf,0x90,0x9d,
-0xa8,0xe0,0x70,0x06,0xa3,0xe0,0x64,0x09,0x60,0x0b,0x90,0x9d,0xa8,0xe0,0x14,0xff,
-0xa3,0xe0,0xb5,0x07,0x0d,0x31,0x8f,0xef,0x60,0x70,0x31,0xe9,0x90,0x01,0x3f,0x74,
-0x02,0xf0,0x90,0x9d,0xa9,0xe0,0x75,0xf0,0x0f,0xa4,0x24,0xad,0xf9,0x74,0x9d,0x35,
-0xf0,0xa8,0x01,0xfc,0x7d,0x01,0x90,0x9e,0xf2,0x12,0x43,0x5e,0x7e,0x00,0x7f,0x02,
-0x12,0x1e,0xde,0x90,0x9d,0xa9,0xe0,0x75,0xf0,0x0f,0xa4,0x24,0xaf,0xf9,0x74,0x9d,
-0x35,0xf0,0xfa,0x7b,0x01,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x90,0x9e,0xf5,0x12,0x43,
-0x5e,0x8b,0x63,0x8a,0x64,0x89,0x65,0x90,0x9e,0xf2,0x12,0x43,0x5e,0x12,0x1f,0x04,
-0xff,0xc4,0x54,0x0f,0xf5,0x66,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x11,0x0f,0x90,0x9d,
-0xa9,0xe0,0x04,0xf0,0xe0,0xb4,0x0a,0x02,0xe4,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x7f,
-0xaf,0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xfd,0xee,0xf0,0xa3,
-0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0xfd,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,
-0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9f,0x00,0xe0,0x94,0xe8,0x90,0x9e,0xff,0xe0,
-0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x7f,0x00,0x80,0x15,0x90,
-0x9e,0xff,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,0x0a,0x7e,0x00,0x12,0x3b,0x3b,
-0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
-0x90,0x9d,0xa8,0xe0,0x75,0xf0,0x0f,0xa4,0x24,0xad,0xf9,0x74,0x9d,0x35,0xf0,0xfa,
-0x7b,0x01,0xc0,0x02,0xc0,0x01,0xe0,0x75,0xf0,0x0f,0xa4,0x24,0xaf,0xf9,0x74,0x9d,
-0x35,0xf0,0xfa,0x90,0x9e,0xef,0x12,0x43,0x7e,0xd0,0x01,0xd0,0x02,0x11,0x5e,0x90,
-0x9d,0xa8,0xe0,0x04,0xf0,0xe0,0xb4,0x0a,0x02,0xe4,0xf0,0x90,0x9d,0xa9,0xe0,0xff,
-0x90,0x9d,0xa8,0xe0,0xb5,0x07,0x07,0x7d,0x02,0x7f,0x03,0x12,0x3a,0x71,0xd0,0xd0,
-0x92,0xaf,0x22,0x90,0x01,0xcc,0xe0,0x54,0x0f,0x90,0x9e,0x69,0xf0,0x90,0x9e,0x69,
-0xe0,0xfd,0x70,0x02,0x61,0x84,0x90,0x9f,0x14,0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,
-0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xef,0x5d,0x70,0x02,
-0x61,0x7d,0x90,0x9f,0x14,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd0,0x12,0x43,0x52,0xe0,
-0x90,0x9e,0x6a,0xf0,0x75,0x63,0x01,0x75,0x64,0x9e,0x75,0x65,0x6a,0x75,0x66,0x01,
-0x7b,0x01,0x7a,0x9e,0x79,0x6b,0x11,0x0f,0x90,0x9e,0x6b,0xe0,0xff,0xc4,0x13,0x13,
-0x13,0x54,0x01,0x90,0x9f,0x14,0x30,0xe0,0x59,0xe0,0x75,0xf0,0x02,0x90,0x00,0x88,
-0x12,0x43,0x52,0xe0,0x90,0x9e,0x6c,0xf0,0x90,0x9f,0x14,0xe0,0x75,0xf0,0x02,0x90,
-0x00,0x89,0x12,0x43,0x52,0xe0,0x90,0x9e,0x6d,0xf0,0x90,0x9f,0x14,0xe0,0x75,0xf0,
-0x04,0x90,0x01,0xd1,0x12,0x43,0x52,0xe0,0x90,0x9e,0x6e,0xf0,0x90,0x9f,0x14,0xe0,
-0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x52,0xe0,0x90,0x9e,0x6f,0xf0,0x90,0x9f,
-0x14,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x52,0xe0,0x90,0x9e,0x70,0xf0,
-0x80,0x33,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x52,0xe0,0x90,0x9e,0x6c,
-0xf0,0x90,0x9f,0x14,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x52,0xe0,0x90,
-0x9e,0x6d,0xf0,0x90,0x9f,0x14,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x52,
-0xe0,0x90,0x9e,0x6e,0xf0,0xef,0x54,0x7f,0xff,0x7b,0x01,0x7a,0x9e,0x79,0x6c,0x12,
-0x80,0x07,0x90,0x9e,0x69,0xe0,0xff,0x90,0x9f,0x14,0xe0,0xfe,0x74,0x01,0xa8,0x06,
-0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,0x90,0x9e,0x69,0xf0,0x90,0x9f,0x14,
-0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x90,0x01,0xcc,
-0xf0,0x90,0x9f,0x14,0xe0,0x04,0xf0,0xe0,0x54,0x03,0xf0,0x41,0x4d,0x90,0x01,0xc6,
-0xe0,0x44,0x02,0xf0,0x22,0xe4,0x90,0x9e,0x66,0xf0,0xa3,0xf0,0x12,0x60,0x87,0x75,
-0x8e,0x02,0xf1,0xe8,0x12,0x44,0xf8,0x90,0x9e,0x9b,0xef,0xf0,0x12,0x60,0x24,0x90,
-0x9e,0x9d,0xef,0xf0,0xe4,0xf5,0x57,0x12,0x78,0x90,0x12,0x61,0x60,0x12,0x37,0x4e,
-0x12,0x67,0x5a,0x12,0x57,0xfe,0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,
-0x74,0x10,0xf0,0x90,0x05,0x5a,0xf0,0xa3,0xe4,0xf0,0x12,0x44,0xfb,0x12,0x58,0x1c,
-0x12,0x44,0xf7,0x12,0x60,0x8f,0x12,0x8d,0xfb,0x12,0x8d,0xf2,0x12,0x8d,0xca,0x90,
-0x9e,0x68,0xe5,0xd9,0xf0,0x12,0x5f,0xf5,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,
-0xf0,0xd1,0x94,0x75,0xe8,0x03,0x43,0xa8,0x85,0x12,0x8e,0x69,0xd2,0xaf,0x12,0x87,
-0xdd,0x12,0x60,0x31,0x90,0x9e,0x66,0xe0,0x64,0x01,0xf0,0x24,0x85,0x90,0x01,0xc4,
-0xf0,0x74,0x4b,0xa3,0xf0,0xe5,0x57,0x30,0xe0,0x0a,0xc2,0xaf,0x53,0x57,0xfe,0x12,
-0x8e,0xca,0xd2,0xaf,0xe5,0x57,0x30,0xe2,0x10,0x12,0x61,0x23,0xbf,0x01,0x0a,0xc2,
-0xaf,0x53,0x57,0xfb,0xd2,0xaf,0x12,0x45,0xc7,0xe5,0x57,0x30,0xe4,0x09,0xc2,0xaf,
-0x53,0x57,0xef,0xd2,0xaf,0x51,0x43,0xe5,0x57,0x30,0xe6,0x0a,0xc2,0xaf,0x53,0x57,
-0xbf,0xd2,0xaf,0x12,0x72,0x3b,0xe5,0x57,0x30,0xe7,0x09,0xc2,0xaf,0x53,0x57,0x7f,
-0xd2,0xaf,0x31,0xe9,0xc2,0xaf,0xe5,0x69,0x54,0x0f,0xff,0xbf,0x01,0x0e,0x90,0x9e,
-0xa5,0x74,0x01,0xf0,0x12,0x44,0xe8,0xe4,0x90,0x9e,0xa5,0xf0,0xd2,0xaf,0x80,0x84,
-0x7d,0x01,0xaf,0x69,0x90,0x9f,0x09,0xed,0xf0,0x90,0x9f,0x08,0xef,0xf0,0x54,0x0f,
-0xff,0xe5,0x68,0x54,0x0f,0x6f,0x60,0x73,0x90,0x9f,0x08,0xe0,0x30,0xe2,0x2b,0xe5,
-0x68,0x20,0xe2,0x05,0x7f,0x01,0x12,0x67,0x85,0xe5,0x68,0x30,0xe3,0x0a,0x90,0x9f,
-0x08,0xe0,0x20,0xe3,0x03,0x02,0x68,0x03,0xe5,0x68,0x20,0xe3,0x4e,0x90,0x9f,0x08,
-0xe0,0x30,0xe3,0x47,0xa3,0xe0,0xff,0x02,0x62,0x72,0xe5,0x68,0x54,0x0f,0xff,0xbf,
-0x0c,0x10,0x90,0x9f,0x08,0xe0,0x20,0xe3,0x09,0x12,0x5e,0xac,0xef,0x60,0x2c,0x12,
-0x68,0x03,0xe5,0x68,0x54,0x0f,0xff,0xbf,0x04,0x10,0x90,0x9f,0x08,0xe0,0x20,0xe2,
-0x09,0x12,0x5f,0x93,0xef,0x60,0x14,0x12,0x68,0x29,0xe5,0x68,0x54,0x0f,0xff,0xbf,
-0x02,0x09,0x12,0x61,0xfc,0xef,0x60,0x03,0x12,0x6b,0x0b,0x22,0xef,0x64,0x01,0x70,
-0x38,0x7d,0x7c,0x7f,0x02,0x12,0x3a,0x54,0x7d,0x02,0x7f,0x03,0x12,0x3a,0x54,0x90,
-0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x7d,0x01,0x7f,0x0c,0x91,0x84,
-0x90,0x9e,0xd1,0xe0,0x30,0xe0,0x03,0x12,0x56,0x83,0x90,0x06,0x04,0xe0,0x54,0x7f,
-0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,0x7c,0xf0,0xa3,
-0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x3a,0xc5,0x7d,0x02,0x7f,0x03,0x12,0x3a,0xc5,
-0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,0xf0,0x90,0x9e,
-0xa9,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0xe5,0x67,0x30,0xe0,0x22,0x90,0x9e,0xa3,
-0xe0,0x70,0x21,0xe0,0x04,0xf0,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x04,0x50,0x06,0x7d,
-0x01,0x7f,0x04,0x91,0x84,0x90,0x9e,0xd1,0xe0,0x30,0xe0,0x08,0x02,0x56,0x83,0xe4,
-0x90,0x9e,0xa3,0xf0,0x22,0x8b,0x13,0x8a,0x14,0x89,0x15,0x12,0x61,0xc6,0xab,0x13,
-0xaa,0x14,0xa9,0x15,0x12,0x1f,0x04,0xf5,0x6a,0x12,0x43,0x87,0x4d,0xd5,0x00,0x4d,
-0xdd,0x01,0x4d,0xf0,0x02,0x4e,0x04,0x03,0x4e,0x0a,0x04,0x4e,0x21,0x05,0x4e,0x39,
-0x06,0x00,0x00,0x4e,0x44,0x7f,0x01,0xb1,0x0c,0x7f,0x01,0x80,0x64,0xab,0x13,0xaa,
-0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,0xe4,0xff,0xd1,0x54,0x80,0x18,
-0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,0x7f,0x01,0xd1,
-0x54,0x1f,0x80,0x04,0xd1,0x45,0xe4,0xff,0xa1,0x0c,0xab,0x13,0xaa,0x14,0xa9,0x15,
-0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,0xe4,0xff,0xd1,0x54,0xb1,0x0c,0xe4,0xff,0x80,
-0x20,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,0x7f,0x01,
-0xd1,0x54,0x1f,0xb1,0x0c,0xe4,0xff,0x80,0x08,0xd1,0x45,0xe4,0xff,0xb1,0x0c,0xe4,
-0xff,0x12,0x61,0xd2,0x22,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x1f,
-0x1d,0xfd,0x7f,0x02,0xef,0x24,0xfe,0x60,0x12,0x04,0x70,0x2f,0x90,0x9e,0xaf,0x74,
-0x01,0xf0,0x90,0x9e,0xa1,0xf0,0x90,0x9e,0xb2,0xf0,0x22,0xed,0x70,0x0a,0x90,0x9e,
-0xac,0xe0,0x90,0x9e,0xaf,0xf0,0x80,0x05,0x90,0x9e,0xaf,0xed,0xf0,0x90,0x9e,0xaf,
-0xe0,0x90,0x9e,0xa1,0xf0,0x90,0x9e,0xb2,0x74,0x01,0xf0,0x22,0xf4,0xff,0x90,0x00,
-0x63,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x7f,0x10,0xdf,0xfe,0xd0,
-0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9f,0x13,0xed,0xf0,
-0x90,0x9f,0x12,0xef,0xf0,0xd3,0x94,0x07,0x50,0x63,0xe0,0xff,0x74,0x01,0xa8,0x07,
-0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,0xd1,
-0x94,0x90,0x9f,0x12,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
-0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,0xf0,0xd1,0x94,0x90,0x9f,0x13,0xe0,0x60,0x16,
-0x90,0x9f,0x12,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,
-0xff,0x90,0x00,0x45,0x80,0x60,0x90,0x9f,0x12,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
-0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x45,0x80,0x62,0x90,0x9f,0x12,
-0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
-0xfc,0xd1,0x8c,0x90,0x9f,0x12,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,
-0x33,0xd8,0xfc,0xff,0x90,0x00,0x62,0xe0,0x4f,0xf0,0xd1,0x94,0x90,0x9f,0x13,0xe0,
-0x60,0x18,0x90,0x9f,0x12,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
-0xd8,0xfc,0xff,0x90,0x00,0x61,0xe0,0x4f,0x80,0x17,0x90,0x9f,0x12,0xe0,0xff,0x74,
-0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x61,0xe0,
-0x5f,0xf0,0xd1,0x94,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
-0x8f,0x82,0x75,0x83,0x00,0xed,0xf0,0xd1,0x94,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x00,
-0x20,0xe0,0x44,0x01,0xfd,0x7f,0x20,0xf1,0x89,0x7f,0xf4,0x7e,0x01,0x12,0x3b,0x3b,
-0x90,0x00,0x00,0xe0,0x54,0xdf,0xfd,0xe4,0xff,0xf1,0x89,0x90,0x00,0x28,0xe0,0x44,
-0x03,0xfd,0x7f,0x28,0xf1,0x89,0x90,0x00,0x08,0xe0,0x54,0xef,0xfd,0x7f,0x08,0xf1,
-0x89,0xe4,0xff,0x12,0x6a,0x44,0x7f,0x64,0x7e,0x00,0x12,0x3b,0x3b,0x90,0x00,0x29,
-0xe0,0x44,0xc0,0xfd,0x7f,0x29,0x80,0xa1,0xe4,0x90,0x9e,0x9a,0xf0,0x90,0x00,0x80,
-0xe0,0x44,0x80,0xfd,0x7f,0x80,0x80,0x91,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,
-0x04,0x1d,0xe0,0x60,0x1a,0x90,0x05,0x22,0xe0,0x54,0x90,0x60,0x07,0x90,0x01,0xc6,
-0xe0,0x44,0x40,0xf0,0x90,0x01,0xc7,0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,0x02,0x7f,
-0x01,0xd0,0xd0,0x92,0xaf,0x22,0xe0,0xff,0x7d,0x01,0xe4,0xfb,0xfa,0xef,0x30,0xe0,
-0x02,0x7b,0x80,0xef,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x90,0x04,0x25,0xef,0xf0,0xed,
-0x60,0x0e,0x74,0x0f,0x2b,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,
-0xaf,0x03,0x74,0x08,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,
-0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2b,0xf5,
-0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf7,0xf0,0xae,0x02,0xaf,0x03,0x22,0xe0,
-0x54,0xef,0xf0,0x90,0xfd,0x63,0xe0,0x54,0x3f,0x25,0xe0,0x25,0xe0,0xff,0x90,0xfd,
-0x62,0xe0,0x54,0x03,0x4f,0x90,0x9e,0x5d,0xf0,0x90,0xfd,0x64,0xe0,0x54,0x3f,0x25,
-0xe0,0x25,0xe0,0xff,0x90,0xfd,0x63,0xe0,0x54,0x03,0x4f,0x90,0x9e,0x5e,0xf0,0x90,
-0x9e,0x5d,0xe0,0xfd,0xa3,0xe0,0xfb,0xe4,0xff,0x90,0x9e,0x62,0xef,0xf0,0xa3,0xed,
-0xf0,0xa3,0xeb,0xf0,0x12,0x4f,0xf8,0xef,0x64,0x01,0x60,0x02,0x21,0x6a,0x90,0x9e,
-0x99,0x11,0x26,0x90,0x9e,0x62,0xe0,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,
-0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,
-0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0xad,0x07,0x74,0x06,0x2d,0xf5,0x82,0xe4,0x34,
-0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x74,0x11,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
-0x83,0xe0,0x54,0xef,0xf0,0xad,0x07,0x74,0x16,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
-0x83,0xe0,0x44,0x02,0xf0,0x74,0x16,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,
-0x54,0x03,0xf0,0x90,0x9e,0x63,0xe0,0xfd,0xac,0x07,0x74,0x22,0x2c,0xf5,0x82,0xe4,
-0x34,0xfc,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x64,0xe0,0xfd,0x74,0x23,0x2c,0xf5,0x82,
-0xe4,0x34,0xfc,0xf5,0x83,0xed,0xf0,0x74,0x24,0x2c,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
-0x83,0xe0,0x04,0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,
-0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,
-0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x53,0x91,0xbf,0x90,0xfd,0x68,0xe0,0x20,
-0xe0,0x02,0x41,0xfb,0x90,0xfd,0x60,0xe0,0x64,0x0e,0x60,0x02,0x41,0x3f,0x90,0x9e,
-0x43,0xe0,0xff,0x13,0x13,0x13,0x54,0x1f,0x20,0xe0,0x02,0x41,0x3f,0x90,0xfd,0x62,
-0xe0,0x54,0xc0,0xfe,0x90,0x07,0x90,0xe0,0x54,0x3f,0x4e,0xf0,0x90,0xfd,0x63,0xe0,
-0x90,0x07,0x91,0xf0,0x90,0xfd,0x64,0xe0,0x90,0x07,0x92,0xf0,0x90,0xfd,0x65,0xe0,
-0x90,0x07,0x93,0xf0,0x90,0x07,0x95,0x74,0x01,0xf0,0xef,0x20,0xe0,0x42,0x90,0x9e,
-0x43,0xe0,0x13,0x13,0x54,0x3f,0x30,0xe0,0x18,0x90,0x07,0x78,0x11,0x7f,0x90,0x9e,
-0x43,0xe0,0xff,0xc3,0x13,0x30,0xe0,0x47,0x90,0x07,0x83,0xe0,0x44,0x40,0xf0,0x80,
-0x3e,0x90,0x9e,0x43,0xe0,0xff,0xc3,0x13,0x30,0xe0,0x10,0xe4,0xff,0x71,0x16,0x90,
-0x07,0x95,0xe0,0x44,0x01,0xf0,0xa3,0xe0,0x44,0x01,0xf0,0x90,0x07,0x78,0x80,0x13,
-0x90,0x9e,0x43,0xe0,0xff,0x13,0x13,0x54,0x3f,0x90,0x07,0x78,0x30,0xe0,0x04,0x11,
-0x7f,0x80,0x0c,0xe0,0x44,0x10,0xf0,0xe0,0x44,0x20,0xf0,0xe0,0x54,0xdf,0xf0,0x90,
-0xfd,0x60,0xe0,0xb4,0x0f,0x0b,0x90,0xfd,0x62,0xe0,0xff,0xa3,0xe0,0xfd,0x12,0x8f,
-0x02,0x90,0xfd,0x60,0xe0,0x64,0x15,0x70,0x64,0x90,0xfd,0x62,0xe0,0x90,0x9e,0x60,
-0xf0,0x90,0xfd,0x62,0xe0,0x30,0xe0,0x15,0x90,0x9e,0x60,0xe0,0xf4,0x54,0x3f,0x04,
-0xff,0x90,0x9e,0x4e,0xe0,0x13,0x13,0x54,0x3f,0xc3,0x9f,0x80,0x10,0x90,0x9e,0x4e,
-0xe0,0x13,0x13,0x54,0x3f,0xff,0x90,0x9e,0x60,0xe0,0x54,0x3f,0x2f,0x90,0x9e,0x5f,
-0xf0,0x90,0x9e,0x5f,0xe0,0xff,0x54,0x30,0xc4,0x54,0x0f,0xfe,0xef,0x25,0xe0,0x25,
-0xe0,0x4e,0x90,0x9e,0x61,0xf0,0x90,0x00,0x2e,0xf0,0x90,0x9e,0x5f,0xe0,0xc4,0x54,
-0xf0,0xff,0x90,0x9e,0x4f,0xe0,0x54,0x0f,0x4f,0x90,0x00,0x2d,0xf0,0x90,0xfd,0x60,
-0xe0,0xb4,0x16,0x08,0x90,0xfd,0x62,0xe0,0xff,0x12,0x8f,0x55,0x90,0xfd,0x60,0xe0,
-0xb4,0x21,0x08,0x90,0xfd,0x62,0xe0,0xff,0x12,0x8f,0x7d,0x90,0xfd,0x60,0xe0,0xb4,
-0x22,0x03,0x12,0x90,0x34,0x90,0xfd,0x60,0xe0,0xb4,0x23,0x08,0x90,0xfd,0x62,0xe0,
-0xff,0x12,0x90,0x11,0x90,0xfd,0x68,0xe0,0x44,0x01,0xf0,0xd0,0x07,0xd0,0x06,0xd0,
-0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,
-0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x90,0x9e,0x43,0xe0,0xc3,0x13,0x30,0xe0,0x16,0xef,
-0x7b,0x01,0xb4,0x01,0x06,0x7a,0x9e,0x79,0x4a,0x80,0x04,0x7a,0x9e,0x79,0x46,0x7f,
-0x80,0x7e,0x08,0xf1,0x70,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,
-0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,
-0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0x36,0xf0,0x74,0x53,0xa3,0xf0,0x53,0x91,0xdf,
-0x90,0x01,0x3c,0xe0,0x55,0x30,0xf5,0x34,0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,
-0x55,0x32,0xf5,0x36,0xa3,0xe0,0x55,0x33,0xf5,0x37,0xe5,0x34,0x30,0xe0,0x06,0x90,
-0x01,0x3c,0x74,0x01,0xf0,0xe5,0x34,0x30,0xe1,0x0b,0x90,0x01,0x3c,0x74,0x02,0xf0,
-0x12,0x6c,0xb1,0xf1,0xb7,0xe5,0x34,0x30,0xe2,0x36,0x90,0x01,0x3c,0x74,0x04,0xf0,
-0x90,0x06,0x92,0xe0,0x30,0xe0,0x21,0x75,0x48,0x00,0x90,0x9e,0xa6,0xe0,0xf5,0x49,
-0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x5b,0x74,0x05,0xf0,
-0x90,0x06,0x92,0x74,0x01,0xf0,0x80,0x08,0x90,0x9e,0xae,0xe4,0xf0,0x12,0x44,0xe8,
-0xe5,0x34,0x30,0xe3,0x36,0x90,0x01,0x3c,0x74,0x08,0xf0,0x90,0x06,0x92,0xe0,0x30,
-0xe1,0x21,0x75,0x48,0x00,0x90,0x9e,0xa6,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x5c,
-0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,
-0xf0,0x80,0x08,0x90,0x9e,0xad,0xe4,0xf0,0x12,0x44,0xe8,0xe5,0x34,0x30,0xe4,0x06,
-0x90,0x01,0x3c,0x74,0x10,0xf0,0xe5,0x34,0x30,0xe5,0x06,0x90,0x01,0x3c,0x74,0x20,
-0xf0,0xe5,0x35,0x30,0xe0,0x19,0x90,0x01,0x3d,0x74,0x01,0xf0,0x90,0x01,0x2f,0xe0,
-0x44,0x7f,0xf0,0x90,0x00,0x83,0xe0,0xf5,0x69,0x12,0x6b,0x1d,0x12,0x44,0xe8,0xe5,
-0x35,0x30,0xe2,0x0c,0x90,0x01,0x3d,0x74,0x04,0xf0,0x53,0x6b,0xfb,0x12,0x44,0xe8,
-0xe5,0x36,0x30,0xe0,0x69,0x90,0x01,0x3e,0x74,0x01,0xf0,0x90,0x9e,0xd7,0xe0,0x30,
-0xe0,0x12,0xa3,0xe0,0x64,0x03,0x60,0x0c,0x7f,0x01,0xd1,0x0b,0xef,0x60,0x05,0x7f,
-0x01,0x12,0x68,0x90,0x90,0x9e,0xd1,0xe0,0x30,0xe0,0x43,0xe4,0xff,0xd1,0x0b,0xef,
-0x60,0x3c,0xd1,0x2f,0x90,0x9e,0xd2,0xe0,0xff,0x64,0x06,0x60,0x31,0xef,0xb4,0x04,
-0x02,0x80,0x07,0x90,0x9e,0xd2,0xe0,0xb4,0x05,0x04,0xe4,0xff,0x80,0x14,0x90,0x9e,
-0xd2,0xe0,0xb4,0x03,0x04,0x7f,0x01,0x80,0x09,0x90,0x9e,0xd2,0xe0,0xb4,0x02,0x05,
-0x7f,0x01,0x12,0x62,0xa5,0x7d,0x01,0xaf,0x69,0x12,0x4c,0x84,0xd1,0x83,0xe5,0x36,
-0x30,0xe1,0x3b,0x90,0x01,0x3e,0x74,0x02,0xf0,0x90,0x9e,0xd7,0xe0,0x30,0xe0,0x12,
-0xa3,0xe0,0x64,0x03,0x60,0x0c,0x7f,0x01,0xd1,0x0b,0xef,0x70,0x05,0x7f,0x02,0x12,
-0x68,0x90,0x90,0x9e,0xd1,0xe0,0x30,0xe0,0x15,0x12,0x8b,0xdb,0x90,0x9e,0xd2,0xe0,
-0x64,0x06,0x60,0x0a,0xe4,0xff,0xd1,0x0b,0xef,0x70,0x03,0x12,0x67,0xbb,0xe5,0x36,
-0x30,0xe3,0x09,0x90,0x01,0x3e,0x74,0x08,0xf0,0x43,0x6b,0x04,0xe5,0x36,0x30,0xe4,
-0x06,0x90,0x01,0x3e,0x74,0x10,0xf0,0xe5,0x36,0x30,0xe2,0x72,0x90,0x01,0x3e,0x74,
-0x04,0xf0,0x90,0x07,0x8f,0xe0,0x30,0xe7,0x12,0x74,0x80,0xf0,0x90,0x07,0x95,0x74,
-0x04,0xf0,0xa3,0xe0,0x44,0x04,0xf0,0xe4,0xff,0x71,0x16,0x90,0x07,0x8f,0xe0,0x30,
-0xe6,0x12,0x74,0x40,0xf0,0x90,0x07,0x7c,0xe0,0xb4,0x06,0x08,0x90,0x07,0x80,0xe0,
-0xff,0x12,0x8f,0x2d,0x90,0x07,0x8f,0xe0,0x30,0xe5,0x13,0x74,0x20,0xf0,0xe4,0xff,
-0x71,0x16,0x90,0x07,0x95,0xe0,0x44,0x01,0xf0,0xa3,0xe0,0x44,0x01,0xf0,0x90,0x07,
-0x95,0xe0,0x30,0xe2,0x0c,0x74,0x04,0xf0,0xa3,0xe0,0x54,0xfb,0xf0,0x7f,0x01,0x71,
-0x16,0x90,0x07,0x95,0xe0,0x30,0xe0,0x06,0x74,0x01,0xf0,0xff,0x71,0x16,0xe5,0x36,
-0x30,0xe5,0x06,0x90,0x01,0x3e,0x74,0x20,0xf0,0xe5,0x36,0x30,0xe6,0x08,0x90,0x01,
-0x3e,0x74,0x40,0xf0,0xd1,0x19,0xe5,0x36,0x30,0xe7,0x0c,0x90,0x01,0x3e,0x74,0x80,
-0xf0,0x53,0x6b,0xfe,0x12,0x44,0xe8,0xe5,0x37,0x30,0xe1,0x09,0x90,0x01,0x3f,0x74,
-0x02,0xf0,0x43,0x57,0x80,0xe5,0x37,0x30,0xe4,0x1b,0x90,0x01,0x3f,0x74,0x10,0xf0,
-0xd1,0xc8,0x90,0x9e,0xaf,0xe0,0x90,0x05,0x73,0xf0,0x90,0x01,0x36,0x74,0x02,0xf0,
-0xfd,0xff,0x12,0x3a,0xc5,0x74,0x36,0x04,0x90,0x01,0xc4,0xf0,0x74,0x53,0xa3,0xf0,
-0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,
-0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x8f,0x6c,0x90,0x05,0x43,
-0xe0,0x7f,0x00,0x30,0xe7,0x02,0x7f,0x01,0x22,0x12,0x4f,0xf8,0xbf,0x01,0x0f,0x90,
-0x9e,0x96,0xe0,0xff,0xe4,0xfd,0x11,0x2a,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x90,
-0x9e,0xd1,0xe0,0xff,0xc4,0x13,0x13,0x54,0x03,0x30,0xe0,0x0b,0xa3,0xe0,0x64,0x06,
-0x60,0x05,0x7f,0x06,0x12,0x62,0xa5,0x90,0x9e,0xd2,0xe0,0x64,0x06,0x60,0x02,0xd1,
-0x52,0x22,0x90,0x9e,0xd6,0xe0,0xb4,0x01,0x05,0xe4,0xf0,0x12,0x5d,0x03,0x22,0xae,
-0x07,0xe4,0xff,0xd1,0x0b,0xef,0x60,0x18,0x90,0x9e,0xd1,0xe0,0xc4,0x13,0x13,0x54,
-0x03,0x20,0xe0,0x0c,0xaf,0x06,0x7d,0x01,0x12,0x4c,0x84,0xd1,0x83,0x7f,0x01,0x22,
-0x7f,0x00,0x22,0x90,0x9e,0xd2,0xe0,0x64,0x06,0x60,0x3c,0xe5,0x68,0x54,0x0f,0x14,
-0x60,0x2e,0x14,0x60,0x1e,0x24,0xfe,0x60,0x0e,0x24,0xf8,0x70,0x2a,0xe4,0x90,0x9e,
-0xd2,0xf0,0x90,0x05,0x22,0xf0,0x22,0x90,0x9e,0xd2,0x74,0x01,0xf0,0x90,0x05,0x22,
-0xe4,0xf0,0x22,0x90,0x9e,0xd2,0x74,0x03,0xf0,0x90,0x05,0x22,0x74,0xff,0xf0,0x22,
-0x90,0x01,0xc6,0xe0,0x44,0x08,0xf0,0x22,0xe4,0x90,0x9f,0x16,0xf0,0xe5,0x6a,0x70,
-0x02,0xe1,0x6b,0xe5,0x67,0x64,0x01,0x60,0x02,0xe1,0x6b,0xe5,0x6a,0x14,0x60,0x28,
-0x24,0xfd,0x60,0x24,0x24,0x02,0x24,0xfb,0x50,0x02,0x80,0x22,0xe4,0x90,0x9e,0xa1,
-0xf0,0xe0,0x60,0x04,0xa3,0xe0,0x60,0x16,0x90,0x9e,0xa1,0xe0,0x70,0x0a,0x90,0x9e,
-0xaf,0xe0,0x90,0x9e,0xa1,0xf0,0x80,0x00,0x90,0x9f,0x16,0x74,0x01,0xf0,0x90,0x9e,
-0xd1,0xe0,0x30,0xe0,0x15,0xa3,0xe0,0xb4,0x06,0x05,0xe4,0x90,0x9f,0x16,0xf0,0xe4,
-0xff,0xd1,0x0b,0xef,0x70,0x04,0x90,0x9f,0x16,0xf0,0x90,0x9f,0x16,0xe0,0x60,0x3b,
-0x43,0x6b,0x10,0xe4,0xf5,0x48,0x90,0x9e,0xab,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,
-0x54,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x68,0x54,0x0f,
-0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x4c,0x84,0x90,0x9e,0xd1,0xe0,
-0x30,0xe0,0x08,0xd1,0x83,0x90,0x05,0x22,0x74,0xff,0xf0,0x22,0x7f,0x70,0x7e,0x08,
-0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0x54,0xfc,0xff,0x90,0x01,0xe8,0xf0,0xee,
-0x44,0xf0,0xa3,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0x01,0xec,0xf0,0x90,0x00,
-0x02,0x12,0x1f,0x1d,0x90,0x01,0xed,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x01,
-0xee,0xf0,0x12,0x1f,0x04,0x90,0x01,0xef,0xf0,0x90,0x01,0xeb,0x74,0x40,0xf0,0x12,
-0x5f,0x3e,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0x51,0xe0,0xff,0x90,0x9e,0x50,0xe0,
-0x5f,0x60,0x24,0x12,0x5d,0x8a,0xef,0x54,0x9f,0xff,0xec,0x90,0x9f,0x01,0x12,0x1f,
-0xd7,0x7b,0x01,0x7a,0x9f,0x79,0x01,0xf1,0x6c,0x90,0x00,0x40,0x74,0x24,0xf0,0xe5,
-0x6a,0x70,0x04,0x90,0x01,0x57,0xf0,0x22,0x12,0x4f,0xf8,0xbf,0x01,0x0f,0x90,0x02,
-0x09,0xe0,0xff,0x7d,0x01,0x11,0x2a,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x75,0x28,
-0x33,0xe4,0xf5,0x29,0x75,0x2a,0x07,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,
-0xe5,0x29,0xf0,0xa3,0xe5,0x2a,0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0x75,0x30,0x1f,0x75,
-0x31,0x01,0xe4,0xf5,0x32,0x43,0x32,0x20,0x90,0x01,0x38,0xe5,0x30,0xf0,0xa3,0xe5,
-0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0x90,0x01,0x30,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,
-0xa3,0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x50,0x12,
-0x4f,0x89,0xe4,0xfd,0x7f,0x51,0x12,0x4f,0x89,0xe4,0xfd,0x7f,0x52,0x12,0x4f,0x89,
-0xe4,0xfd,0x7f,0x53,0x02,0x4f,0x89,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,
-0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,
-0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0x67,0xf0,0x74,0x58,0xa3,0xf0,0x90,0x01,
-0x34,0xe0,0x55,0x28,0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,0xa3,0xe0,
-0x55,0x2b,0xf5,0x2f,0xe5,0x2c,0x20,0xe0,0x02,0x41,0x20,0x90,0x01,0x34,0x74,0x01,
-0xf0,0x85,0xd1,0x4d,0x85,0xd3,0x4f,0x85,0xd4,0x50,0x85,0xd5,0x51,0x85,0xd6,0x52,
-0x85,0xd7,0x53,0x85,0xd9,0x54,0x85,0xd2,0x4e,0x78,0x8d,0x7c,0x9e,0xfd,0x7b,0x00,
-0x7a,0x00,0x79,0x4d,0x7e,0x00,0x7f,0x08,0x12,0x1e,0xde,0x90,0x9e,0x8e,0xe0,0xff,
-0xc4,0x13,0x54,0x01,0xfe,0xef,0xc4,0x13,0x13,0x54,0x01,0x6e,0x70,0x02,0x21,0xcf,
-0x90,0x9e,0x8e,0xe0,0xff,0xc4,0x13,0x13,0x13,0x54,0x01,0x30,0xe0,0x02,0x21,0xcf,
-0xef,0x54,0x1f,0xf5,0x08,0x90,0x9e,0x8f,0xe0,0x54,0x3f,0xf5,0x09,0x90,0x9e,0x91,
-0xe0,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,
-0x83,0xe4,0x8f,0xf0,0x12,0x42,0x54,0xe5,0x09,0xd3,0x94,0x04,0x40,0x03,0x75,0x09,
-0x04,0x75,0xf0,0x0a,0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x52,0x75,0xf0,0x02,0xe5,
-0x09,0x12,0x43,0x52,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x9e,0x91,0xe0,0x54,0x1f,0x2f,
-0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x52,0x75,
-0xf0,0x02,0xe5,0x09,0x12,0x43,0x52,0xee,0xf0,0xa3,0xef,0xf0,0x90,0x9e,0x8e,0xe0,
-0xc4,0x13,0x13,0x54,0x03,0x20,0xe0,0x28,0x90,0x9e,0x91,0xe0,0x54,0x1f,0xff,0xe5,
-0x08,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
-0x42,0x54,0x90,0x9e,0x90,0xe0,0x30,0xe7,0x36,0xaf,0x08,0x12,0x6d,0xe9,0x80,0x2f,
-0x90,0x9e,0x91,0xe0,0x54,0x1f,0xff,0xfd,0xe5,0x08,0x25,0xe0,0x24,0x44,0xf5,0x82,
-0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8d,0xf0,0x12,0x42,0x54,0x90,0x9e,0x90,0xe0,0xfe,
-0x30,0xe7,0x0c,0x54,0x7f,0xfd,0x8f,0x0d,0xab,0x09,0xaf,0x08,0x12,0x6d,0x86,0xe5,
-0x6a,0x14,0x24,0xfd,0x50,0x02,0x80,0x45,0x90,0x9e,0xb0,0xe0,0x60,0x37,0x90,0x01,
-0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0x91,0xea,0xef,0x64,0x01,0x70,0x2d,
-0x90,0x9e,0xa6,0xe0,0xf5,0x48,0x75,0x49,0x00,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,
-0x12,0x39,0xa9,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,
-0x9e,0xae,0xf0,0x80,0x08,0x91,0xea,0xbf,0x01,0x03,0x12,0x44,0xe8,0x12,0x47,0x91,
-0xe5,0x2c,0x30,0xe1,0x7b,0x90,0x01,0x34,0x74,0x02,0xf0,0x90,0xfd,0x10,0x74,0x7f,
-0xf0,0x90,0x04,0x7f,0xe0,0x54,0x07,0xf5,0x55,0x90,0x04,0x7e,0xe0,0x54,0x07,0xf5,
-0x56,0x65,0x55,0x60,0x5b,0xe4,0xff,0x75,0xf0,0x08,0xe5,0x55,0xa4,0x2f,0xf5,0x82,
-0xe4,0x35,0xf0,0xf5,0x83,0xe5,0x82,0x24,0xc0,0xf5,0x82,0xe5,0x83,0x34,0xfc,0xf5,
-0x83,0xe0,0xfe,0x74,0x58,0x2f,0xf8,0xa6,0x06,0x0f,0xbf,0x08,0xda,0x78,0x84,0x7c,
-0x9e,0x7d,0x01,0x7b,0x00,0x7a,0x00,0x79,0x58,0x7e,0x00,0x7f,0x08,0x12,0x1e,0xde,
-0x90,0x9e,0x84,0xe0,0xff,0xc4,0x13,0x13,0x54,0x03,0x30,0xe0,0x02,0xb1,0xe3,0xe5,
-0x55,0x24,0x01,0xff,0xef,0x54,0x07,0xf5,0x55,0x90,0x04,0x7f,0xf0,0xb5,0x56,0xa5,
-0xe5,0x2c,0x30,0xe3,0x10,0x90,0x01,0x34,0x74,0x08,0xf0,0x90,0x9e,0xbc,0xe0,0x30,
-0xe0,0x03,0x43,0x57,0x04,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,0x74,0x10,0xf0,
-0x43,0x57,0x10,0xe5,0x2c,0x30,0xe5,0x25,0x90,0x01,0xcf,0xe0,0x30,0xe5,0x1e,0xe0,
-0x54,0xdf,0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,0xe8,0x00,0x11,
-0x37,0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0x12,0x4e,0x94,0x80,0xfe,0xe5,0x2c,0x30,
-0xe6,0x06,0x90,0x01,0x34,0x74,0x40,0xf0,0xe5,0x2e,0x30,0xe0,0x41,0x90,0x9e,0x9c,
-0x74,0x01,0xf0,0x90,0x01,0x36,0xf0,0xb1,0x43,0xd1,0x05,0x90,0x9e,0xd7,0xe0,0x30,
-0xe0,0x0d,0x13,0x13,0x54,0x3f,0x30,0xe0,0x06,0x90,0x9e,0xd9,0x74,0x01,0xf0,0x90,
-0x9e,0xd1,0xe0,0xff,0x30,0xe0,0x0d,0x13,0x13,0x54,0x3f,0x30,0xe0,0x06,0x90,0x9e,
-0xd3,0x74,0x01,0xf0,0x12,0x56,0xc8,0xd1,0x36,0x90,0x9e,0x9c,0xe4,0xf0,0xe5,0x2e,
-0x30,0xe1,0x5f,0x90,0x01,0x36,0x74,0x02,0xf0,0x43,0x57,0x40,0x90,0x01,0x02,0xe0,
-0x54,0x03,0x64,0x01,0x70,0x29,0x90,0x01,0x37,0xe0,0x30,0xe0,0x0a,0x74,0x01,0xf0,
-0x90,0x9e,0x8c,0xe4,0xf0,0x80,0x18,0x90,0x9e,0x8c,0xe0,0x04,0xf0,0xe0,0xc3,0x94,
-0x0a,0x40,0x0c,0xe4,0xf0,0x90,0x04,0x19,0xe0,0x30,0xe0,0x03,0x12,0x57,0xe8,0x90,
-0x9e,0xd1,0xe0,0x30,0xe0,0x0d,0xe4,0xff,0x12,0x56,0x0b,0xef,0x60,0x05,0x90,0x05,
-0x22,0xe4,0xf0,0xd1,0x6c,0x90,0x9e,0xb2,0xe0,0x60,0x07,0x7d,0x02,0x7f,0x02,0x12,
-0x3a,0x54,0xe5,0x2e,0x30,0xe2,0x46,0x90,0x01,0x36,0x74,0x04,0xf0,0x90,0x9e,0xd1,
-0xe0,0x30,0xe0,0x06,0xa3,0xe0,0x64,0x06,0x60,0x30,0x12,0x6b,0xe1,0x90,0x9e,0xb2,
-0xe0,0x60,0x27,0x90,0x9e,0xaf,0xe0,0xff,0x90,0x9e,0xa1,0xe0,0xb5,0x07,0x1b,0x90,
-0x9e,0xaf,0xe0,0x90,0x05,0x73,0xf0,0x90,0x01,0x3f,0x74,0x10,0xf0,0xfd,0x7f,0x03,
-0x12,0x3a,0xdf,0x7d,0x01,0x7f,0x02,0x12,0x3a,0x54,0x12,0x57,0xb7,0xe5,0x2e,0x30,
-0xe3,0x34,0x90,0x01,0x36,0x74,0x08,0xf0,0xe5,0x67,0x64,0x01,0x70,0x28,0xe5,0x6a,
-0x60,0x24,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x75,0x48,0x00,
-0x90,0x9e,0xa8,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x39,0xa9,
-0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,0x2b,0x90,0x01,0x36,0x74,0x10,
-0xf0,0xe5,0x67,0xb4,0x01,0x20,0xe5,0x6a,0x60,0x1c,0x90,0x01,0x57,0xe4,0xf0,0x90,
-0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0xb1,0xe4,0xf0,0x53,0x6b,0xfd,0xe5,0x6b,0x54,
-0x07,0x70,0x03,0x12,0x44,0xe8,0xe5,0x2e,0x30,0xe5,0x1e,0x90,0x01,0x36,0x74,0x20,
-0xf0,0xe5,0x67,0xb4,0x01,0x13,0xe5,0x6a,0x60,0x0f,0x90,0x9e,0xb0,0xe0,0x64,0x02,
-0x60,0x05,0x12,0x56,0x19,0x80,0x02,0xd1,0xf4,0xe5,0x2e,0x30,0xe6,0x1b,0x90,0x01,
-0x36,0x74,0x40,0xf0,0xe5,0x67,0xb4,0x01,0x10,0xe5,0x6a,0x60,0x0c,0x53,0x6b,0xfe,
-0xe5,0x6b,0x54,0x07,0x70,0x03,0x12,0x44,0xe8,0xe5,0x2f,0x30,0xe1,0x26,0x90,0x01,
-0x37,0x74,0x02,0xf0,0x90,0x9e,0xd1,0xe0,0x30,0xe0,0x17,0xe4,0xff,0x12,0x56,0x0b,
-0xef,0x60,0x07,0xb1,0x03,0x12,0x56,0x83,0x80,0x0a,0x90,0x9e,0xd6,0x74,0x01,0xf0,
-0x80,0x02,0xb1,0x03,0x74,0x67,0x04,0x90,0x01,0xc4,0xf0,0x74,0x58,0xa3,0xf0,0xd0,
-0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,
-0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x90,0x04,0x1a,0xe0,0xf4,0x60,
-0x03,0x7f,0x00,0x22,0x90,0x04,0x1b,0xe0,0x54,0x07,0x64,0x07,0x7f,0x01,0x60,0x02,
-0x7f,0x00,0x22,0x7d,0x02,0x7f,0x03,0x12,0x3a,0x54,0xe5,0x6a,0x14,0x24,0xfd,0x50,
-0x06,0x24,0xfd,0x50,0x1d,0x80,0x2b,0x90,0x9e,0xb0,0xe0,0x60,0x06,0x7d,0x01,0x7f,
-0x0c,0x80,0x1c,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x04,0x50,0x16,0x7d,0x01,0x7f,0x04,
-0x80,0x0d,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,
-0x4c,0x84,0x22,0x90,0x9e,0x51,0xe0,0xff,0x90,0x9e,0x50,0xe0,0x5f,0x60,0x3a,0x90,
-0x00,0x40,0x74,0x04,0xf0,0xb1,0x8a,0xef,0x44,0x60,0xff,0xec,0x90,0x9e,0x52,0x12,
-0x1f,0xd7,0x7f,0x60,0x7e,0x08,0xb1,0x8e,0xef,0x44,0x20,0xff,0xec,0x90,0x9e,0x56,
-0x12,0x1f,0xd7,0x7b,0x01,0x7a,0x9e,0x79,0x52,0x12,0x57,0x6c,0x7b,0x01,0x7a,0x9e,
-0x79,0x56,0x7f,0x60,0x7e,0x08,0x12,0x57,0x70,0x22,0x7f,0x70,0x7e,0x08,0xd3,0x10,
-0xaf,0x01,0xc3,0xc0,0xd0,0xef,0x54,0xfc,0xff,0x90,0x01,0xe8,0xf0,0xee,0xa3,0xf0,
-0x90,0x01,0xeb,0x74,0x80,0xf0,0xf1,0x3e,0x90,0x01,0xec,0xe0,0xff,0x90,0x9f,0x05,
-0x12,0x43,0x5e,0x90,0x00,0x03,0xef,0x12,0x42,0x32,0x90,0x01,0xed,0xe0,0x90,0x00,
-0x02,0x12,0x42,0x32,0x90,0x01,0xee,0xe0,0x90,0x00,0x01,0x12,0x42,0x32,0x90,0x01,
-0xef,0xe0,0x12,0x42,0x20,0x90,0x9f,0x05,0x12,0x43,0x5e,0x12,0x43,0x26,0xd0,0xd0,
-0x92,0xaf,0x22,0x90,0x9e,0x52,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,0x0f,0x44,0x80,
-0xf0,0x7b,0x00,0x7a,0x00,0x79,0x58,0x90,0x9e,0xf5,0x12,0x43,0x7e,0x0b,0x7a,0x9e,
-0x79,0x52,0x02,0x48,0xde,0x90,0x9e,0x51,0xe0,0xff,0x90,0x9e,0x50,0xe0,0x5f,0xff,
-0xe5,0x6a,0x7e,0x00,0x70,0x02,0x7e,0x01,0xee,0x5f,0x60,0x19,0xe4,0xf5,0x48,0x90,
-0x9e,0xab,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x39,0xa9,0x90,
-0x01,0x57,0x74,0x05,0xf0,0x22,0x90,0x9e,0xb9,0xe0,0x30,0xe0,0x2e,0xe5,0x67,0xb4,
-0x01,0x29,0x90,0x9e,0xb3,0xe0,0x04,0xf0,0xe0,0xb4,0x0a,0x0b,0x90,0x9e,0xbb,0xe0,
-0x04,0xf0,0xe4,0x90,0x9e,0xb3,0xf0,0x90,0x9e,0xbb,0xe0,0xff,0x90,0x9e,0xba,0xe0,
-0xb5,0x07,0x08,0x12,0x44,0xd1,0xe4,0x90,0x9e,0xbb,0xf0,0x22,0x90,0x9e,0xb4,0xe0,
-0x30,0xe0,0x38,0xe5,0x67,0x64,0x01,0x70,0x32,0x90,0x9e,0xb7,0xe0,0x04,0xf0,0xe0,
-0xff,0x90,0x9e,0xb5,0xe0,0xb5,0x07,0x23,0x90,0x06,0x92,0xe0,0x54,0x1c,0x70,0x0b,
-0x12,0x44,0xd1,0x90,0x9e,0xb8,0xe0,0x04,0xf0,0x80,0x0b,0x90,0x06,0x92,0x74,0x1c,
-0xf0,0xe4,0x90,0x9e,0xb8,0xf0,0xe4,0x90,0x9e,0xb7,0xf0,0x22,0x91,0xea,0xef,0x64,
-0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x30,0x90,0x9e,0xae,0xe0,0x60,
-0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x22,0x90,0x9e,0xad,0xe0,0x60,0x08,0x90,
-0x01,0xb9,0x74,0x04,0xf0,0x80,0x14,0xe5,0x69,0x54,0x0f,0xd3,0x94,0x04,0x40,0x08,
-0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x08,
-0xf0,0x7f,0x00,0x22,0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe4,
-0xf5,0x48,0x90,0x9e,0xa6,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x12,
-0x39,0xa9,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,
-0xad,0x14,0xf0,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x0c,0x50,0x11,0x7d,0x01,0x7f,0x0c,
-0x12,0x4c,0x84,0x90,0x9e,0xd1,0xe0,0x30,0xe0,0x03,0x12,0x56,0x83,0x22,0xe4,0x90,
-0x9f,0x0c,0xf0,0xa3,0xf0,0x90,0x01,0xeb,0xe0,0x54,0xc0,0x60,0x43,0xc3,0x90,0x9f,
-0x0d,0xe0,0x94,0x88,0x90,0x9f,0x0c,0xe0,0x94,0x13,0x40,0x0a,0x90,0x01,0xc6,0xe0,
-0x44,0x04,0xf0,0x7f,0x00,0x22,0x90,0x9f,0x0c,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,
-0x7f,0x14,0x7e,0x00,0x12,0x3b,0x3b,0xd3,0x90,0x9f,0x0d,0xe0,0x94,0x64,0x90,0x9f,
-0x0c,0xe0,0x94,0x00,0x40,0xbf,0x90,0x01,0xc7,0xe0,0x30,0xe2,0xb8,0x7f,0x00,0x22,
-0x7f,0x01,0x22,0x91,0xea,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,
-0x80,0x4a,0xe5,0x6b,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x3c,
-0xe5,0x69,0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,
-0x2b,0xe5,0x6b,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x1e,0xe5,0x6b,
-0x30,0xe4,0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x11,0x90,0x9e,0xa3,0xe0,0x60,
-0x08,0x90,0x01,0xb9,0x74,0x20,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,
-0x04,0xf0,0x7f,0x00,0x22,0x90,0x01,0x3c,0x74,0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,
-0x01,0x34,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x54,0x12,0x4f,0x89,0x7d,
-0xff,0x7f,0x55,0x12,0x4f,0x89,0x7d,0xff,0x7f,0x56,0x12,0x4f,0x89,0x7d,0xff,0x7f,
-0x57,0x02,0x4f,0x89,0x90,0x00,0xf3,0xe0,0x7f,0x00,0x30,0xe3,0x03,0x7f,0x01,0x22,
-0x22,0xe4,0x90,0x9e,0x69,0xf0,0xa3,0xf0,0x90,0x01,0x98,0xe0,0x7f,0x00,0x30,0xe4,
-0x02,0x7f,0x01,0xef,0x64,0x01,0x60,0x3e,0xc3,0x90,0x9e,0x6a,0xe0,0x94,0x88,0x90,
-0x9e,0x69,0xe0,0x94,0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,
-0x9e,0x69,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,0x14,0x7e,0x00,0x12,0x3b,0x3b,
-0xd3,0x90,0x9e,0x6a,0xe0,0x94,0x32,0x90,0x9e,0x69,0xe0,0x94,0x00,0x40,0xb9,0x90,
-0x01,0xc7,0xe0,0x30,0xe0,0xb2,0x22,0x90,0x01,0x94,0xe0,0x44,0x01,0xf0,0x22,0x90,
-0x01,0x01,0xe0,0x44,0x04,0xf0,0x90,0x01,0x9c,0x74,0x7e,0xf0,0xa3,0x74,0x92,0xf0,
-0xa3,0x74,0xa0,0xf0,0xa3,0x74,0x24,0xf0,0x90,0x01,0x9b,0x74,0x49,0xf0,0x90,0x01,
-0x9a,0x74,0xe0,0xf0,0x90,0x01,0x99,0xe4,0xf0,0x90,0x01,0x98,0x04,0xf0,0x22,0xc0,
-0xe0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x05,0xc0,0x06,0xc0,0x07,
-0x7d,0xbf,0x90,0x01,0xc4,0xed,0xf0,0x74,0x60,0xff,0xa3,0xf0,0x53,0x91,0xef,0x90,
-0x00,0x51,0xe0,0xfe,0x90,0x00,0x55,0xe0,0x5e,0xf5,0x3d,0xe5,0x3d,0x30,0xe6,0x03,
-0x74,0x40,0xf0,0xe5,0x3d,0x30,0xe7,0x06,0x90,0x00,0x55,0x74,0x80,0xf0,0x90,0x01,
-0xc4,0xed,0xf0,0xa3,0xef,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0xd0,0xd0,0x82,
-0xd0,0x83,0xd0,0xe0,0x32,0x8f,0x1f,0x8c,0x20,0x8d,0x21,0x22,0x8f,0x22,0x8c,0x23,
-0x8d,0x24,0x22,0xe4,0x90,0x9e,0x69,0xf0,0xa3,0xf0,0x90,0x02,0x86,0xe0,0x20,0xe1,
-0x2c,0xc3,0x90,0x9e,0x6a,0xe0,0x94,0xd0,0x90,0x9e,0x69,0xe0,0x94,0x07,0x40,0x0a,
-0x90,0x01,0xc6,0xe0,0x44,0x20,0xf0,0x7f,0x00,0x22,0x90,0x9e,0x69,0xe4,0x75,0xf0,
-0x01,0x12,0x42,0x54,0x7f,0x0a,0x7e,0x00,0x12,0x3b,0x3b,0x80,0xcd,0x7f,0x01,0x22,
-0xe4,0xf5,0x67,0xf5,0x6b,0xf5,0x6a,0x75,0x69,0x0c,0x75,0x68,0x0c,0x90,0x9e,0xb0,
-0xf0,0x90,0x9e,0xae,0xf0,0x90,0x9e,0xad,0xf0,0x90,0x9e,0xaf,0x04,0xf0,0x90,0x9e,
-0xa1,0xf0,0xe4,0x90,0x9e,0xb1,0xf0,0x90,0x9e,0xa3,0xf0,0x90,0x9e,0xab,0x74,0x07,
-0xf0,0xe4,0x90,0x9e,0xa2,0xf0,0x90,0x9e,0xa9,0xf0,0xa3,0x74,0x0b,0xf0,0x90,0x9e,
-0xa7,0x74,0x01,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0xa6,0x74,0x14,0xf0,0x90,0x9e,
-0xac,0x74,0x05,0xf0,0xe4,0x90,0x9e,0xa5,0xf0,0x90,0x9e,0xa0,0xf0,0x90,0x9e,0x9c,
-0xf0,0x90,0x9e,0xb2,0xf0,0x22,0xe4,0x90,0x9e,0xb1,0xf0,0x90,0x9e,0xa2,0xf0,0xf5,
-0x6b,0x22,0xef,0xb4,0x01,0x07,0x7d,0xc8,0x7f,0x02,0x02,0x3a,0x71,0x7d,0x60,0x7f,
-0x02,0x12,0x3a,0x54,0x90,0x01,0x3d,0x74,0x04,0xf0,0xa3,0x74,0xc8,0xf0,0x7d,0x04,
-0x7f,0x01,0x12,0x3a,0xdf,0x7d,0xc8,0x7f,0x02,0x02,0x3a,0xdf,0xe5,0x57,0x60,0x08,
-0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x61,0xe5,0x69,0x54,0x0f,0xd3,0x94,0x01,0x40,
-0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x50,0x90,0x02,0x87,0xe0,0x60,0x08,0x90,
-0x01,0xb9,0x74,0x04,0xf0,0x80,0x42,0x90,0x9e,0x9b,0xe0,0xb4,0x01,0x10,0x90,0x9e,
-0x82,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x1c,0x80,0x2b,0x90,0x9e,
-0x9b,0xe0,0x70,0x14,0x90,0x9d,0xa9,0xe0,0xff,0x90,0x9d,0xa8,0xe0,0x6f,0x60,0x08,
-0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x11,0x90,0x9e,0xa5,0xe0,0x70,0x08,0x90,0x01,
-0xb9,0x74,0x10,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x02,0xf0,0x7f,
-0x00,0x22,0x90,0x06,0x04,0xe0,0x54,0xbf,0xf0,0xef,0x60,0x0a,0xe5,0x67,0xb4,0x01,
-0x05,0xe4,0xff,0x12,0x47,0xd6,0x53,0x68,0xf0,0x43,0x68,0x0c,0x90,0x9e,0xd1,0xe0,
-0x30,0xe0,0x07,0x90,0x05,0x27,0xe0,0x54,0x7f,0xf0,0x22,0x7f,0x01,0x51,0x72,0xe4,
-0x90,0x9e,0xd2,0xf0,0x22,0x90,0x9e,0xd2,0xe0,0xfe,0x6f,0x70,0x02,0x81,0x59,0xef,
-0x12,0x43,0x87,0x62,0xcc,0x00,0x63,0x00,0x01,0x63,0x3e,0x02,0x63,0x77,0x03,0x63,
-0xae,0x04,0x63,0xe6,0x05,0x64,0x20,0x06,0x00,0x00,0x64,0x59,0xee,0xb4,0x04,0x04,
-0x7f,0x01,0x81,0x8e,0x90,0x9e,0xd2,0xe0,0xff,0xb4,0x05,0x02,0x81,0x63,0xef,0xb4,
-0x06,0x06,0x7f,0x01,0x91,0x78,0x80,0x16,0x90,0x9e,0xd2,0xe0,0xb4,0x03,0x06,0x7f,
-0x01,0x91,0x5a,0x80,0x09,0x90,0x9e,0xd2,0xe0,0xb4,0x02,0x02,0x91,0x6d,0x80,0x9b,
-0x90,0x9e,0xd2,0xe0,0xb4,0x04,0x06,0x7f,0x01,0x91,0x8e,0x80,0x09,0x90,0x9e,0xd2,
-0xe0,0xb4,0x05,0x02,0x91,0x63,0x90,0x9e,0xd2,0xe0,0x70,0x02,0x81,0xa6,0x90,0x9e,
-0xd2,0xe0,0xfe,0xb4,0x06,0x04,0x7f,0x01,0x81,0x78,0xee,0xb4,0x03,0x04,0x7f,0x01,
-0x81,0x5a,0x90,0x9e,0xd2,0xe0,0x64,0x02,0x60,0x02,0x81,0x59,0x81,0x6d,0x90,0x9e,
-0xd2,0xe0,0xb4,0x04,0x06,0x7f,0x01,0x91,0x8e,0x80,0x09,0x90,0x9e,0xd2,0xe0,0xb4,
-0x05,0x02,0x91,0x63,0x90,0x9e,0xd2,0xe0,0x70,0x04,0x91,0xa6,0x80,0x16,0x90,0x9e,
-0xd2,0xe0,0xfe,0xb4,0x06,0x06,0x7f,0x01,0x91,0x78,0x80,0x08,0xee,0xb4,0x03,0x04,
-0x7f,0x01,0x91,0x5a,0x02,0x8b,0xba,0x90,0x9e,0xd2,0xe0,0xb4,0x04,0x06,0x7f,0x01,
-0x91,0x8e,0x80,0x09,0x90,0x9e,0xd2,0xe0,0xb4,0x05,0x02,0x91,0x63,0x90,0x9e,0xd2,
-0xe0,0x70,0x04,0x91,0xa6,0x80,0x14,0x90,0x9e,0xd2,0xe0,0xfe,0xb4,0x06,0x06,0xe4,
-0xff,0x91,0x78,0x80,0x06,0xee,0xb4,0x02,0x02,0x91,0x6d,0x02,0x68,0x4a,0x90,0x9e,
-0xd2,0xe0,0xfe,0xb4,0x06,0x06,0xe4,0xff,0x91,0x78,0x80,0x13,0xee,0xb4,0x03,0x06,
-0x7f,0x01,0x91,0x5a,0x80,0x09,0x90,0x9e,0xd2,0xe0,0xb4,0x02,0x02,0x91,0x6d,0x90,
-0x9e,0xd2,0xe0,0xb4,0x01,0x04,0x51,0x9b,0x80,0x09,0x90,0x9e,0xd2,0xe0,0xb4,0x05,
-0x02,0x91,0x63,0x02,0x6a,0x3b,0x90,0x9e,0xd2,0xe0,0xfe,0xb4,0x06,0x06,0xe4,0xff,
-0x91,0x78,0x80,0x13,0xee,0xb4,0x03,0x06,0x7f,0x01,0x91,0x5a,0x80,0x09,0x90,0x9e,
-0xd2,0xe0,0xb4,0x02,0x02,0x91,0x6d,0x90,0x9e,0xd2,0xe0,0xb4,0x01,0x04,0x51,0x9b,
-0x80,0x0b,0x90,0x9e,0xd2,0xe0,0xb4,0x04,0x04,0x7f,0x01,0x91,0x8e,0x02,0x8b,0xad,
-0x90,0x9e,0xd2,0xe0,0xb4,0x04,0x06,0x7f,0x01,0x91,0x8e,0x80,0x09,0x90,0x9e,0xd2,
-0xe0,0xb4,0x05,0x02,0x91,0x63,0x90,0x9e,0xd2,0xe0,0x70,0x04,0x91,0xa6,0x80,0x16,
-0x90,0x9e,0xd2,0xe0,0xb4,0x03,0x06,0xe4,0xff,0x91,0x5a,0x80,0x09,0x90,0x9e,0xd2,
-0xe0,0xb4,0x02,0x02,0x91,0x6d,0x12,0x8b,0xc7,0x22,0xf1,0x85,0x90,0x9e,0xd2,0x74,
-0x01,0xf0,0x22,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xd2,0xf0,0x22,0x90,0x05,0x22,
-0xe4,0xf0,0x90,0x9e,0xd2,0x04,0xf0,0x22,0x90,0x05,0x27,0xe0,0x44,0x40,0xf0,0xef,
-0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xd2,0x74,0x01,0xf0,0x22,0x90,0x9f,
-0x18,0xef,0xf0,0xf1,0x9e,0x90,0x9f,0x18,0xe0,0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,
-0xe4,0x90,0x9e,0xd2,0xf0,0x22,0x12,0x68,0x03,0x90,0x9e,0xd2,0x74,0x01,0xf0,0x22,
-0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x74,0x12,0x43,0x7e,0xe4,0x90,0x9e,
-0x77,0xf0,0x12,0x1f,0x04,0xc3,0x13,0x20,0xe0,0x02,0xc1,0x06,0x90,0x9e,0x74,0x12,
-0x43,0x5e,0x12,0x1f,0x04,0xff,0x54,0x02,0xfe,0x90,0x9e,0xd7,0xe0,0x54,0xfd,0x4e,
-0xfe,0xf0,0xef,0x54,0x01,0xff,0xee,0x54,0xfe,0x4f,0xff,0xf0,0x12,0x1f,0x04,0xfe,
-0x54,0x08,0xfd,0xef,0x54,0xf7,0x4d,0xff,0x90,0x9e,0xd7,0xf0,0xee,0x54,0x10,0xfe,
-0xef,0x54,0xef,0x4e,0xff,0xf0,0x12,0x1f,0x04,0xfe,0x54,0x20,0xfd,0xef,0x54,0xdf,
-0x4d,0xff,0x90,0x9e,0xd7,0xf0,0xee,0x54,0x40,0xfe,0xef,0x54,0xbf,0x4e,0xf0,0x20,
-0xe0,0x02,0xa1,0xf5,0xf1,0x5a,0x90,0x9e,0x77,0x74,0x21,0xf0,0x90,0x9e,0x74,0x12,
-0x43,0x5e,0x12,0x1f,0x04,0xff,0x13,0x13,0x54,0x01,0xfe,0x90,0x9e,0xd7,0xe0,0xfd,
-0x13,0x13,0x54,0x01,0x6e,0x60,0x31,0xef,0x54,0x04,0xff,0xed,0x54,0xfb,0x4f,0xf0,
-0xe0,0x13,0x13,0x54,0x3f,0x30,0xe0,0x15,0x90,0x01,0x34,0x74,0x40,0xf0,0xfd,0xe4,
-0xff,0x12,0x3a,0xc5,0x90,0x9e,0x77,0xe0,0x44,0x08,0xf0,0x80,0x0b,0xe4,0x90,0x9e,
-0xd9,0xf0,0x7d,0x40,0xff,0x12,0x3a,0x54,0x90,0x9e,0xd7,0xe0,0xfd,0x13,0x13,0x13,
-0x54,0x1f,0x30,0xe0,0x07,0x90,0x9e,0x77,0xe0,0x44,0x12,0xf0,0xed,0xc4,0x54,0x0f,
-0x30,0xe0,0x07,0x90,0x9e,0x77,0xe0,0x44,0x14,0xf0,0x90,0x9e,0xd7,0xe0,0xc4,0x13,
-0x54,0x07,0x30,0xe0,0x07,0x90,0x9e,0x77,0xe0,0x44,0x80,0xf0,0x90,0x9e,0xd7,0xe0,
-0xc4,0x13,0x13,0x54,0x03,0x20,0xe0,0x07,0x90,0x9e,0x77,0xe0,0x44,0x40,0xf0,0x90,
-0x9e,0x77,0xe0,0x90,0x05,0x27,0xf0,0x90,0x9e,0xd8,0xe0,0x70,0x05,0x7f,0x01,0x12,
-0x68,0x90,0x90,0x9e,0xd7,0xe0,0xc4,0x13,0x13,0x54,0x03,0x30,0xe0,0x04,0x7f,0x03,
-0x80,0x0e,0x7f,0x01,0x12,0x56,0x0b,0xef,0x60,0x04,0x7f,0x01,0x80,0x02,0x7f,0x02,
-0x12,0x68,0x90,0xe1,0x55,0x90,0x9e,0x77,0x74,0x01,0xf0,0x90,0x05,0x27,0xf0,0xe4,
-0xff,0x12,0x68,0x90,0xe1,0x53,0x90,0x9e,0x74,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,
-0x54,0x02,0xfe,0x90,0x9e,0xd1,0xe0,0x54,0xfd,0x4e,0xfe,0xf0,0xef,0x54,0x01,0xff,
-0xee,0x54,0xfe,0x4f,0xff,0xf0,0x12,0x1f,0x04,0xfe,0x54,0x08,0xfd,0xef,0x54,0xf7,
-0x4d,0xff,0x90,0x9e,0xd1,0xf0,0xee,0x54,0x10,0xfe,0xef,0x54,0xef,0x4e,0xff,0xf0,
-0x12,0x1f,0x04,0x54,0x40,0xfe,0xef,0x54,0xbf,0x4e,0x90,0x9e,0xd1,0xf0,0x20,0xe0,
-0x02,0xe1,0x26,0xf1,0x5a,0x90,0x9e,0x77,0x74,0x31,0xf0,0x90,0x9e,0x74,0x12,0x43,
-0x5e,0x12,0x1f,0x04,0xff,0x13,0x13,0x54,0x01,0xfe,0x90,0x9e,0xd1,0xe0,0xfd,0x13,
-0x13,0x54,0x01,0x6e,0x60,0x31,0xef,0x54,0x04,0xff,0xed,0x54,0xfb,0x4f,0xf0,0xe0,
-0x13,0x13,0x54,0x3f,0x30,0xe0,0x15,0x90,0x01,0x34,0x74,0x40,0xf0,0xfd,0xe4,0xff,
-0x12,0x3a,0xc5,0x90,0x9e,0x77,0xe0,0x44,0x08,0xf0,0x80,0x0b,0xe4,0x90,0x9e,0xd3,
-0xf0,0x7d,0x40,0xff,0x12,0x3a,0x54,0x90,0x9e,0xd1,0xe0,0xfd,0x13,0x13,0x13,0x54,
-0x1f,0x30,0xe0,0x07,0x90,0x9e,0x77,0xe0,0x44,0x02,0xf0,0xed,0xc4,0x54,0x0f,0x30,
-0xe0,0x07,0x90,0x9e,0x77,0xe0,0x44,0x04,0xf0,0x90,0x9e,0x77,0xe0,0x54,0x0e,0x60,
-0x0c,0x90,0x01,0x3e,0x74,0x03,0xf0,0xfd,0x7f,0x02,0x12,0x3a,0xdf,0x90,0x9e,0x77,
-0xe0,0x90,0x05,0x27,0xf0,0x90,0x9e,0xd1,0xe0,0xff,0xc4,0x13,0x13,0x54,0x03,0x30,
-0xe0,0x0c,0xa3,0xe0,0x64,0x06,0x60,0x5d,0x7f,0x06,0x51,0xa5,0x80,0x57,0x90,0x05,
-0x27,0xe0,0x44,0x40,0xf0,0x90,0x9e,0xd2,0xe0,0xb4,0x06,0x15,0x7f,0x01,0x51,0xa5,
-0xe4,0xff,0x12,0x56,0x0b,0xef,0x60,0x05,0x12,0x4c,0x80,0x80,0x04,0xf1,0xbb,0x80,
-0x34,0x12,0x56,0x83,0x80,0x2f,0x90,0x9e,0x77,0x74,0x01,0xf0,0x90,0x05,0x27,0xf0,
-0x7d,0x03,0x7f,0x02,0x12,0x3a,0x71,0x90,0x9e,0xd2,0xe0,0xb4,0x06,0x04,0x7f,0x01,
-0x80,0x09,0x90,0x9e,0xd2,0xe0,0xb4,0x04,0x04,0xe4,0xff,0x51,0xa5,0x12,0x56,0x52,
-0x12,0x44,0xe8,0xf1,0x5a,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0xd7,0xe0,0x54,0xfe,
-0xf0,0x54,0xfb,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,
-0x9e,0xd1,0xe0,0x54,0xfe,0xf0,0x54,0xfb,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
-0xa3,0xf0,0xa3,0xf0,0x22,0x90,0x9f,0x15,0xef,0xf0,0xf1,0x9e,0x90,0x9f,0x15,0xe0,
-0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,0x53,0x68,0xf0,0x43,0x68,0x04,0x22,0x90,0x01,
-0x01,0xe0,0x44,0x02,0xf0,0x90,0x01,0x00,0x74,0xff,0xf0,0x90,0x00,0x02,0xe0,0x44,
-0x01,0xf0,0x12,0x4e,0x94,0x90,0x01,0xba,0xe4,0xf0,0x22,0x90,0x9e,0xa3,0xe0,0x60,
-0x16,0x90,0x9e,0xd2,0xe0,0x70,0x04,0x7f,0x05,0x80,0x1f,0x90,0x9e,0xd2,0xe0,0x64,
-0x01,0x70,0x19,0x7f,0x02,0x80,0x13,0x90,0x9e,0xd2,0xe0,0xb4,0x01,0x04,0x7f,0x03,
-0x80,0x08,0x90,0x9e,0xd2,0xe0,0x70,0x04,0x7f,0x04,0x51,0xa5,0x22,0xf1,0x9e,0x90,
-0x05,0x22,0x74,0x6f,0xf0,0x90,0x05,0x27,0xe0,0x54,0xbf,0xf0,0x90,0x9e,0xd8,0x74,
-0x03,0xf0,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x67,0xb4,0x01,0x05,0x7f,
-0x01,0x12,0x47,0xd6,0x53,0x68,0xf0,0x43,0x68,0x04,0x90,0x9e,0xd1,0xe0,0x30,0xe0,
-0x07,0x90,0x05,0x27,0xe0,0x44,0x80,0xf0,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,0x31,
-0xe2,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x3a,
-0xc5,0x11,0x59,0x53,0x68,0xf0,0x43,0x68,0x02,0x22,0x11,0x29,0x90,0x9e,0xd2,0x74,
-0x03,0xf0,0x22,0x90,0x05,0x22,0x74,0xff,0xf0,0x90,0x00,0x02,0xe0,0x54,0xfe,0xf0,
-0x12,0x4e,0x94,0x90,0x01,0x00,0x74,0x3f,0xf0,0xa3,0xe0,0x54,0xfd,0xf0,0x90,0x05,
-0x53,0xe0,0x44,0x20,0xf0,0x90,0x01,0xba,0x74,0xcc,0xf0,0x22,0x31,0xe2,0xef,0x70,
-0x06,0x90,0x01,0xc8,0x74,0xfd,0xf0,0x11,0x59,0x90,0x9e,0xd8,0x74,0x02,0xf0,0x22,
-0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xd8,0xe0,0x90,0x9f,0x17,0xf0,0x6f,
-0x70,0x02,0x21,0x5c,0xef,0x14,0x60,0x3b,0x14,0x60,0x5f,0x14,0x70,0x02,0x21,0x35,
-0x24,0x03,0x60,0x02,0x21,0x5c,0x90,0x9f,0x17,0xe0,0xb4,0x03,0x04,0x31,0x7d,0x21,
-0x5c,0x90,0x9f,0x17,0xe0,0xb4,0x02,0x04,0x31,0x95,0x21,0x5c,0x90,0x9f,0x17,0xe0,
-0xb4,0x04,0x04,0x31,0x99,0x21,0x5c,0x90,0x9f,0x17,0xe0,0x64,0x01,0x70,0x7d,0x31,
-0x7f,0x80,0x79,0x90,0x9f,0x17,0xe0,0xff,0xb4,0x03,0x04,0x31,0xcf,0x80,0x6d,0xef,
-0xb4,0x02,0x04,0x31,0xb1,0x80,0x65,0x90,0x9f,0x17,0xe0,0xff,0xb4,0x04,0x04,0x31,
-0xa6,0x80,0x59,0xef,0x70,0x56,0x31,0x6a,0x80,0x52,0x90,0x9f,0x17,0xe0,0xb4,0x03,
-0x04,0x31,0xbf,0x80,0x47,0x90,0x9f,0x17,0xe0,0xb4,0x01,0x04,0x11,0x7c,0x80,0x3c,
-0x90,0x9f,0x17,0xe0,0xb4,0x04,0x04,0x31,0x9d,0x80,0x31,0x90,0x9f,0x17,0xe0,0x70,
-0x2b,0x31,0x61,0x80,0x27,0x90,0x9f,0x17,0xe0,0xff,0xb4,0x01,0x05,0x12,0x67,0xef,
-0x80,0x1a,0xef,0xb4,0x02,0x05,0x12,0x67,0xed,0x80,0x11,0x90,0x9f,0x17,0xe0,0xff,
-0xb4,0x04,0x04,0x51,0x29,0x80,0x05,0xef,0x70,0x02,0x31,0x65,0xd0,0xd0,0x92,0xaf,
-0x22,0x31,0x6a,0x01,0x7c,0x31,0x6a,0x02,0x67,0xef,0x90,0x01,0x3e,0x74,0x03,0xf0,
-0xfd,0x7f,0x02,0x12,0x3a,0xdf,0x90,0x9e,0xd8,0x74,0x01,0xf0,0x22,0x31,0xcf,0x7d,
-0x03,0x7f,0x02,0x12,0x3a,0x71,0x90,0x05,0x27,0xe4,0xf0,0xe0,0x54,0xbf,0xf0,0xe4,
-0x90,0x9e,0xd8,0xf0,0x22,0x31,0xb1,0x80,0xe6,0x31,0xa6,0x80,0xe2,0x11,0x59,0x90,
-0x9e,0xd8,0x74,0x02,0xf0,0x22,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xd8,0x04,0xf0,
-0x22,0x12,0x67,0x9e,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xd8,0x04,0xf0,0x22,0x90,
-0x05,0x27,0xe0,0x44,0x40,0xf0,0x11,0x53,0x90,0x9e,0xd8,0x74,0x02,0xf0,0x22,0x90,
-0x05,0x22,0xe4,0xf0,0x90,0x05,0x27,0xe0,0x44,0x40,0xf0,0x90,0x9e,0xd8,0x74,0x01,
-0xf0,0x22,0x90,0x05,0x22,0x74,0xff,0xf0,0xe4,0x90,0x9f,0x0e,0xf0,0xa3,0xf0,0x90,
-0x05,0xf8,0xe0,0x70,0x0f,0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,0xe0,0x70,
-0x03,0x7f,0x01,0x22,0xd3,0x90,0x9f,0x0f,0xe0,0x94,0xe8,0x90,0x9f,0x0e,0xe0,0x94,
-0x03,0x40,0x03,0x7f,0x00,0x22,0x7f,0x32,0x7e,0x00,0x12,0x3b,0x3b,0x90,0x9f,0x0e,
-0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x80,0xc6,0x02,0x67,0xef,0x31,0x6a,0x90,0x05,
-0x22,0x74,0xff,0xf0,0x90,0x9e,0xd8,0x74,0x04,0xf0,0x22,0x11,0x53,0x90,0x9e,0xd2,
-0x74,0x04,0xf0,0x22,0x8f,0x25,0xe4,0x90,0x9f,0x0a,0xf0,0xa3,0xf0,0x90,0x01,0x09,
-0xe0,0x7f,0x00,0x30,0xe7,0x02,0x7f,0x01,0xef,0x65,0x25,0x60,0x3e,0xc3,0x90,0x9f,
-0x0b,0xe0,0x94,0x88,0x90,0x9f,0x0a,0xe0,0x94,0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,
-0x44,0x80,0xf0,0x22,0x90,0x9f,0x0a,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,0x14,
-0x7e,0x00,0x12,0x3b,0x3b,0xd3,0x90,0x9f,0x0b,0xe0,0x94,0x32,0x90,0x9f,0x0a,0xe0,
-0x94,0x00,0x40,0xb9,0x90,0x01,0xc7,0xe0,0x30,0xe0,0xb2,0x22,0x90,0x9e,0x9b,0xe0,
-0xb4,0x01,0x04,0x7d,0x91,0x80,0x0c,0x90,0x9e,0x9b,0xe0,0x70,0x04,0x7d,0x90,0x80,
-0x02,0xe4,0xfd,0x7f,0x93,0x12,0x4f,0x89,0x90,0x00,0x29,0xe0,0x54,0x3f,0xfd,0x7f,
-0x29,0x12,0x4f,0x89,0x90,0x00,0x28,0xe0,0x54,0xfc,0xfd,0x7f,0x28,0x12,0x4f,0x89,
-0x90,0x00,0x08,0xe0,0x44,0x10,0xfd,0x7f,0x08,0x12,0x4f,0x89,0x7f,0x01,0x51,0x44,
-0x90,0x00,0x00,0xe0,0x44,0x20,0xfd,0xe4,0xff,0x12,0x4f,0x89,0x90,0x00,0x20,0xe0,
-0x54,0xfe,0xfd,0x7f,0x20,0x12,0x4f,0x89,0x90,0x00,0x90,0xe0,0x44,0x01,0xfd,0x7f,
-0x90,0x12,0x4f,0x89,0x7f,0x14,0x7e,0x00,0x02,0x3b,0x3b,0x53,0x68,0xf0,0x43,0x68,
-0x01,0x51,0x9c,0x12,0x4f,0x9e,0x53,0x68,0xf0,0x43,0x68,0x02,0x22,0xe5,0x69,0x30,
-0xe6,0x19,0xe5,0x69,0x54,0x0f,0xff,0x90,0x9e,0x9f,0xe0,0xfe,0x4f,0x90,0x01,0x2f,
-0xf0,0xee,0x64,0x80,0x90,0x9e,0x9f,0xf0,0x53,0x69,0xbf,0x22,0x8f,0x26,0x12,0x4f,
-0xf8,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x98,0x12,0x50,0x26,0xe5,0x26,0x60,0x10,
-0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,
-0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x90,0x04,
-0x1f,0x74,0x20,0xf0,0x22,0x90,0x06,0xa9,0xe0,0x90,0x9e,0x52,0xf0,0xe0,0x54,0xc0,
-0x70,0x09,0x53,0x6b,0xfe,0x53,0x6b,0xfd,0x02,0x44,0xe8,0x90,0x9e,0x52,0xe0,0x30,
-0xe6,0x1e,0x90,0x9e,0xa0,0xe0,0x70,0x08,0x43,0x6b,0x01,0x12,0x56,0x19,0x80,0x13,
-0x90,0x9e,0xb0,0xe0,0xb4,0x01,0x0c,0x43,0x6b,0x04,0x7f,0x01,0x71,0x3c,0x80,0x03,
-0x53,0x6b,0xfe,0x90,0x9e,0x52,0xe0,0x30,0xe7,0x23,0x43,0x6b,0x02,0xe4,0xf5,0x48,
-0x90,0x9e,0xa8,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x39,0xa9,
-0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0xb1,0x74,0x01,0xf0,0x22,0x53,0x6b,0xfd,
-0x22,0xe5,0x67,0x64,0x01,0x70,0x66,0xe5,0x6a,0x60,0x62,0xe5,0x6a,0x64,0x02,0x60,
-0x06,0xe5,0x6a,0x64,0x05,0x70,0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0xa1,0xf0,0x90,
-0x06,0xaa,0xe0,0x90,0x9e,0xaf,0xf0,0x90,0x9e,0xa1,0xe0,0x70,0x07,0x90,0x9e,0xaf,
-0xe0,0xff,0x80,0x05,0x90,0x9e,0xa1,0xe0,0xff,0x90,0x9e,0xa1,0xef,0xf0,0x90,0x9e,
-0xa3,0xe0,0x60,0x03,0xe0,0x14,0xf0,0xe4,0x90,0x9e,0xa2,0xf0,0x90,0x01,0x57,0xf0,
-0x90,0x01,0x3c,0x74,0x02,0xf0,0x53,0x6b,0xfd,0x53,0x6b,0xef,0xe5,0x6a,0x14,0x24,
-0xfd,0x50,0x06,0x24,0xfd,0x50,0x04,0x80,0x04,0x80,0x03,0x71,0x75,0x22,0x90,0x06,
-0xa9,0xe0,0x90,0x9e,0x52,0xf0,0xe0,0x54,0xc0,0x70,0x09,0x53,0x6b,0xfe,0x53,0x6b,
-0xfd,0x12,0x44,0xe8,0x90,0x9e,0x52,0xe0,0x30,0xe6,0x15,0x43,0x6b,0x01,0x90,0x9e,
-0xb0,0xe0,0x64,0x02,0x60,0x05,0x12,0x56,0x19,0x80,0x08,0x12,0x5e,0xf4,0x80,0x03,
-0x53,0x6b,0xfe,0x90,0x9e,0x52,0xe0,0x30,0xe7,0x23,0x43,0x6b,0x02,0xe4,0xf5,0x48,
-0x90,0x9e,0xa8,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x39,0xa9,
-0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0xb1,0x74,0x01,0xf0,0x22,0x53,0x6b,0xfd,
-0x22,0xe5,0x6a,0x60,0x39,0x90,0x9e,0xb1,0xe0,0x60,0x0d,0xe4,0xf0,0x53,0x6b,0xfd,
-0xe5,0x6b,0x54,0x07,0x70,0x28,0x80,0x23,0x90,0x9e,0xa2,0xe0,0x04,0xf0,0x53,0x6b,
-0xef,0x90,0x9e,0xa7,0xe0,0xff,0x90,0x9e,0xa2,0xe0,0xd3,0x9f,0x40,0x0d,0xe5,0x67,
-0xb4,0x01,0x0b,0xa3,0xe0,0x70,0x07,0xe0,0x04,0xf0,0x22,0x12,0x44,0xe8,0x22,0xd3,
-0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xf8,0x12,0x43,0x7e,0x90,0x9e,0xfb,0xe0,
-0x54,0xf0,0x44,0x06,0xff,0xf0,0xed,0x54,0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,
-0x4e,0xf0,0x90,0x9e,0xf8,0x12,0x43,0x5e,0x90,0x9e,0xf5,0x12,0x43,0x7e,0x7b,0x01,
-0x7a,0x9e,0x79,0xfb,0x12,0x48,0xde,0xd0,0xd0,0x92,0xaf,0x22,0xe0,0xfd,0x74,0x26,
-0x25,0x13,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xed,0xf0,0xaf,0x13,0xd3,0x10,0xaf,
-0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,0x50,0x0e,0x74,0x84,0x2f,0xf5,0x82,0xe4,
-0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,0x74,0xa6,0x2f,0xf5,0x82,0xe4,0x34,0x9c,
-0xf5,0x83,0xed,0xf0,0x90,0x9e,0xc4,0xef,0xf0,0x24,0xa6,0xf5,0x82,0xe4,0x34,0x9c,
-0xf5,0x83,0xe0,0x90,0x9e,0xc5,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0xc4,0x7d,0x02,0x91,
-0xef,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x0a,0x8d,0x0b,0xe5,0x0b,0x54,0x1f,0xf5,0x10,
-0x74,0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xf5,0x0e,0x90,0x04,0xfd,
-0xe0,0xb4,0x01,0x05,0x75,0x11,0x03,0x80,0x03,0x75,0x11,0x01,0xeb,0xc3,0x95,0x11,
-0x40,0x04,0xaf,0x0a,0x80,0x33,0xe5,0x0e,0x25,0x0d,0xf5,0x0f,0xe5,0x10,0x90,0x41,
-0xdc,0x93,0xff,0xe5,0x0f,0xd3,0x9f,0x74,0x01,0x40,0x11,0x25,0x0a,0xf5,0x82,0xe4,
-0x34,0x94,0xf5,0x83,0xe4,0xf0,0xad,0x0b,0xaf,0x0a,0xa1,0x3d,0x25,0x0a,0xf5,0x82,
-0xe4,0x34,0x94,0xf5,0x83,0xe5,0x0f,0xf0,0x22,0xad,0x07,0x75,0xf0,0x09,0xed,0x90,
-0x96,0x48,0x12,0x43,0x52,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
-0x83,0xe0,0x54,0x1f,0xf5,0x12,0xd3,0x9f,0x40,0x02,0x8f,0x12,0xe5,0x12,0x25,0xe0,
-0x24,0xa4,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,
-0xe5,0x12,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,
-0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,
-0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x05,0xad,0x12,
-0xb1,0x3d,0xaf,0x12,0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,0x17,0xed,
-0xc4,0x54,0xf0,0xfd,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,
-0x83,0xe0,0x54,0x0f,0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,
-0x04,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,0x04,0xf5,
-0x83,0xe0,0x4d,0xf0,0x22,0xad,0x07,0xed,0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2d,
-0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2d,0xf5,0x82,0xe4,
-0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x1e,0xe5,0x1e,0x54,0x1f,0xfc,0x75,0xf0,
-0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x52,0xe0,0xff,0x90,0x9e,0x73,0xf0,0xed,0x25,
-0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,
-0x74,0xcb,0xf0,0xa3,0xeb,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
-0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x76,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,
-0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfa,0x74,0x01,0x93,
-0xfb,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xea,0xf0,0xa3,
-0xeb,0xf0,0xec,0xc3,0x9f,0x40,0x02,0xe1,0xb3,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,
-0x9d,0xf5,0x83,0xec,0xf0,0x04,0xfb,0x90,0x9e,0x73,0xe0,0xff,0xeb,0xd3,0x9f,0x40,
-0x02,0xe1,0xe4,0xeb,0xc3,0x94,0x10,0x40,0x21,0xeb,0x24,0xf0,0xff,0x74,0x01,0x7e,
-0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,
-0x74,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x23,0xeb,0xc3,0x94,0x10,0x50,0x40,
-0x74,0x01,0x7e,0x00,0xa8,0x03,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,
-0xff,0x90,0x9e,0x76,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x23,0xbb,0x11,0x09,
-0x90,0x9e,0x75,0xe0,0x30,0xe7,0x02,0x7b,0x17,0xeb,0x64,0x13,0x60,0x03,0xbb,0x12,
-0x09,0x90,0x9e,0x74,0xe0,0x30,0xe0,0x02,0x7b,0x18,0xac,0x03,0x8c,0x1e,0x80,0x34,
-0x0b,0x80,0x84,0x90,0x9e,0x73,0xe0,0xfb,0x6c,0x70,0x69,0x74,0x67,0x2d,0xf5,0x82,
-0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,
-0x52,0xe0,0xb4,0x01,0x0c,0xe5,0x1e,0x20,0xe6,0x07,0xec,0x44,0x40,0xf5,0x1e,0x80,
-0x03,0xaf,0x1e,0x22,0xec,0x25,0xe0,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
-0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,
-0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,
-0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,
-0xef,0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,0x90,0x9e,0x73,0xe0,0xff,0x74,0x67,
-0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0xac,0x07,0x8f,0x1e,0xec,0x25,
-0xe0,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,
-0xff,0xec,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,
-0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,
-0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x1e,0x22,0x74,
-0x01,0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xaf,0x05,0xe5,0x1e,0x44,
-0x80,0xfd,0x12,0x6d,0x3d,0xe5,0x1e,0x44,0x80,0xff,0x22,0xac,0x07,0xec,0xc3,0x94,
-0x20,0x50,0x0d,0x74,0x84,0x2c,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,
-0x74,0xa6,0x2c,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x1e,0xe5,
-0x1e,0x54,0x1f,0xff,0x90,0x9e,0x75,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x49,0x12,
-0x43,0x52,0xe0,0x90,0x9e,0x77,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x48,0x12,0x43,
-0x52,0xe0,0xfe,0x90,0x9e,0x78,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,
-0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x79,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,
-0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,
-0x9e,0x7b,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,0x78,0xe0,
-0x90,0x9e,0x75,0xf0,0xf5,0x1e,0xed,0x70,0x02,0x21,0xf1,0x90,0x9e,0x76,0xed,0xf0,
-0xe5,0x1e,0x30,0xe6,0x0a,0x90,0x9e,0x75,0xe0,0xf5,0x1e,0xa3,0xe0,0x14,0xf0,0x90,
-0x9e,0x76,0xe0,0x70,0x02,0x21,0xf1,0x90,0x9e,0x75,0xe0,0xff,0xd3,0x94,0x00,0x50,
-0x02,0x21,0xf1,0xe4,0x90,0x9e,0x74,0xf0,0xef,0x14,0x90,0x9e,0x73,0xf0,0x90,0x9e,
-0x77,0xe0,0xfd,0x90,0x9e,0x73,0xe0,0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,0x10,0x40,
-0x21,0xef,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,
-0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x7b,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,
-0x70,0x27,0x90,0x9e,0x73,0xe0,0xff,0xc3,0x94,0x10,0x50,0x33,0x74,0x01,0x7e,0x00,
-0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x79,
-0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,0x9e,0x73,0xe0,0xf5,0x1e,0xa3,
-0xe0,0x04,0xf0,0x90,0x9e,0x76,0xe0,0xff,0x90,0x9e,0x74,0xe0,0x6f,0x60,0x08,0x90,
-0x9e,0x73,0xe0,0x14,0xf0,0x80,0x87,0x90,0x9e,0x76,0xe0,0xff,0x90,0x9e,0x74,0xe0,
-0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x73,0xe0,0xb5,0x05,0x06,0x90,0x9e,0x77,0xe0,0xf5,
-0x1e,0xe5,0x1e,0x25,0xe0,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,
-0xfe,0x74,0x01,0x93,0xff,0xe5,0x1e,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,
-0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,
-0xec,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,
-0xf0,0xaf,0x04,0xad,0x1e,0x12,0x6d,0x3d,0xaf,0x1e,0x22,0xe4,0xf5,0x13,0xe5,0x13,
-0xb4,0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,0x95,0x01,0xe0,0xff,0x90,0x9a,
-0xc5,0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x4b,0x12,
-0x43,0x52,0xe0,0x64,0x01,0x60,0x03,0x02,0x78,0x83,0xe5,0x13,0x25,0xe0,0x24,0x80,
-0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xd3,0x94,0x00,0xee,0x94,
-0x00,0x50,0x03,0x02,0x78,0x83,0xe5,0x13,0x94,0x20,0x40,0x09,0x90,0x9a,0xc5,0xe0,
-0x60,0x03,0x02,0x78,0x8f,0xe5,0x13,0x75,0xf0,0x0a,0xa4,0x24,0x00,0xf9,0x74,0x90,
-0x35,0xf0,0x75,0x18,0x01,0xf5,0x19,0x89,0x1a,0xe5,0x13,0x25,0xe0,0x24,0x80,0xf5,
-0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x6d,0xcf,0xf0,0xa3,
-0xef,0xf0,0xe5,0x13,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,
-0xff,0xa3,0xe0,0x90,0x9e,0x6f,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x13,0xc3,0x94,0x20,
-0x50,0x14,0x74,0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x3f,
-0x90,0x9e,0x69,0xf0,0x80,0x12,0x74,0xa6,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,
-0x83,0xe0,0x54,0x3f,0x90,0x9e,0x69,0xf0,0x90,0x9e,0x69,0xe0,0xfe,0x54,0x1f,0xa3,
-0xf0,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x48,0x12,0x43,0x52,0xe0,0x90,0x9e,0x72,
-0xf0,0x74,0xe6,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xc3,0x94,0x05,
-0x40,0x02,0xa1,0x5c,0x90,0x9e,0x72,0xe0,0xff,0x90,0x9e,0x6a,0xe0,0x9f,0x40,0x13,
-0x90,0x9e,0x72,0xe0,0x90,0x9e,0x6a,0xf0,0xee,0x54,0x40,0xfe,0x90,0x9e,0x69,0xf0,
-0xef,0x4e,0xf0,0x90,0x04,0xfd,0xe0,0x54,0x05,0x64,0x01,0x70,0x29,0x90,0x9e,0x6a,
-0xe0,0xff,0x90,0x41,0x50,0x93,0xfe,0x74,0x44,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,
-0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,0xe0,0x80,0x30,0x90,0x9e,0x6a,
-0xe0,0x90,0x40,0xfc,0x80,0x27,0x90,0x9e,0x6a,0xe0,0xff,0x90,0x41,0x50,0x93,0xfe,
-0x74,0x44,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,
-0xef,0x90,0x41,0x18,0x80,0x07,0x90,0x9e,0x6a,0xe0,0x90,0x41,0x34,0x93,0x90,0x9e,
-0x71,0xf0,0x90,0x9e,0x71,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x56,0xf9,0x74,0x40,0x35,
-0xf0,0x75,0x15,0xff,0xf5,0x16,0x89,0x17,0x90,0x9e,0x69,0xe0,0x90,0x41,0xf8,0x93,
-0xff,0xd3,0x90,0x9e,0x70,0xe0,0x9f,0x90,0x9e,0x6f,0xe0,0x94,0x00,0x40,0x09,0xe4,
-0xfd,0xaf,0x13,0x11,0x9b,0x02,0x78,0x1a,0xe5,0x13,0x25,0xe0,0x24,0xc2,0xf5,0x82,
-0xe4,0x34,0x95,0xf5,0x83,0xe0,0xf5,0x1b,0xa3,0xe0,0xf5,0x1c,0xab,0x15,0xaa,0x16,
-0xa9,0x17,0x12,0x1f,0x04,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,
-0x6a,0xfd,0xac,0xf0,0x12,0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,
-0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x01,0x12,0x1f,0x1d,0xff,0x7e,0x00,
-0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x02,0x12,0x42,0x95,0xfd,0xac,0xf0,0x12,
-0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,
-0xa9,0x17,0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,
-0x1a,0x90,0x00,0x04,0x12,0x42,0x95,0xfd,0xac,0xf0,0x12,0x1f,0x4a,0xef,0x25,0x1c,
-0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x03,
-0x12,0x1f,0x1d,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x06,0x12,
-0x42,0x95,0xfd,0xac,0xf0,0x12,0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,
-0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x04,0x12,0x1f,0x1d,0xff,0x7e,
-0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x08,0x12,0x42,0x95,0xfd,0xac,0xf0,
-0x12,0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,
-0x16,0xa9,0x17,0x90,0x00,0x05,0x12,0x1f,0x1d,0xff,0x7e,0x00,0x90,0x9e,0x6d,0xe0,
-0xfc,0xa3,0xe0,0xfd,0x12,0x1f,0x4a,0xd3,0xe5,0x1c,0x9f,0xe5,0x1b,0x9e,0x40,0x0c,
-0xe5,0x1c,0x9f,0xf5,0x1c,0xe5,0x1b,0x9e,0xf5,0x1b,0x80,0x05,0xe4,0xf5,0x1b,0xf5,
-0x1c,0xe5,0x13,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,0x1b,
-0xf0,0xa3,0xe5,0x1c,0xf0,0x90,0x9e,0x69,0xe0,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,
-0x34,0x41,0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,0x95,0x1b,0x50,0x07,
-0xaf,0x13,0x12,0x6e,0x95,0xe1,0xee,0x90,0x9e,0x69,0xe0,0x25,0xe0,0x24,0xa4,0xf5,
-0x82,0xe4,0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,0x95,0x1b,
-0x50,0x02,0xe1,0xee,0x7d,0x01,0xaf,0x13,0x11,0x9b,0xe1,0xee,0x74,0xe6,0x25,0x13,
-0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,0xc1,0xf7,0x90,
-0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x6a,0xe0,0xc3,0x94,0x19,0x40,0x3d,
-0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x6a,0xe0,0xc3,0x94,0x11,0x40,0x2e,0x80,
-0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x6a,0xe0,0xc3,0x94,0x0a,
-0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x6a,0xe0,0xc3,0x94,0x03,0x40,0x0d,
-0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,0x74,0x84,0x25,
-0x13,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1d,0x74,0x44,0x25,0x13,0xf5,
-0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,0xc1,0xa4,0x90,
-0x9a,0x84,0xe0,0x64,0x01,0x60,0x02,0xc1,0xa4,0x74,0x85,0x25,0x13,0xf5,0x82,0xe4,
-0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,0xe4,0x33,0xfe,
-0x74,0x41,0x25,0x13,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,0xd3,0x9f,0xee,
-0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,0x33,0xfe,0x74,
-0x44,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,0xee,0x64,0x80,
-0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
-0x83,0xe0,0xff,0x90,0x9e,0x6a,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,0x13,0xf5,0x82,
-0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,0x1d,0x05,0x80,
-0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x1d,0x03,0x80,0x03,0x75,0x1d,0x01,0x74,
-0x41,0x25,0x13,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,0x85,0x25,0x13,
-0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,
-0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,
-0x04,0xf0,0x80,0x10,0xe4,0xf5,0x1d,0x74,0xe6,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,
-0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x6a,0xe0,0xff,0x74,0x26,0x25,0x13,0xf5,0x82,0xe4,
-0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x98,0xf5,
-0x83,0xe5,0x1d,0xf0,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x4c,0x12,0x43,0x52,0xe0,
-0xb4,0x01,0x10,0xe4,0xf5,0x1d,0x74,0xe6,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,
-0x83,0xe4,0xf0,0xad,0x1d,0xe1,0xe9,0xec,0x64,0x06,0x60,0x02,0xe1,0xee,0xf5,0x1b,
-0xf5,0x1c,0x90,0x42,0x19,0x93,0xff,0x7e,0x00,0x90,0x9e,0x6d,0xe0,0xfc,0xa3,0xe0,
-0xfd,0x12,0x1f,0x4a,0x90,0x9e,0x6b,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,0x25,0x13,
-0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1d,0xe4,0xf5,0x14,0xab,0x18,0xaa,
-0x19,0xa9,0x1a,0x75,0xf0,0x02,0xe5,0x14,0xa4,0xf5,0x82,0x85,0xf0,0x83,0x12,0x42,
-0x95,0xfd,0xac,0xf0,0xe5,0x14,0x90,0x42,0x14,0x93,0xff,0x7e,0x00,0x12,0x1f,0x4a,
-0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xc3,0x90,0x9e,0x6c,0xe0,0x95,
-0x1c,0x90,0x9e,0x6b,0xe0,0x95,0x1b,0x40,0x07,0x05,0x14,0xe5,0x14,0xb4,0x05,0xbd,
-0xe5,0x14,0xc3,0x13,0xf5,0x14,0xe5,0x1d,0xb4,0x01,0x06,0xe5,0x14,0x70,0x46,0x80,
-0x13,0xe5,0x1d,0xb4,0x03,0x15,0xe5,0x14,0x70,0x05,0x75,0x1d,0x03,0x80,0x39,0xe5,
-0x14,0xb4,0x01,0x05,0x75,0x1d,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x1d,0xb4,0x05,0x28,
-0xe5,0x14,0x70,0x05,0x75,0x1d,0x05,0x80,0x0d,0xe5,0x14,0xb4,0x01,0x05,0x75,0x1d,
-0x03,0x80,0x03,0x75,0x1d,0x01,0xd3,0x90,0x9e,0x70,0xe0,0x94,0x03,0x90,0x9e,0x6f,
-0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1d,0xd3,0x90,0x9e,0x70,0xe0,0x94,0x03,0x90,
-0x9e,0x6f,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1d,0x74,0x84,0x25,0x13,0xf5,0x82,
-0xe4,0x34,0x98,0xf5,0x83,0xe5,0x1d,0xf0,0xfd,0xaf,0x13,0x12,0x6e,0x55,0x74,0xe6,
-0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,0x74,0xe6,0x50,
-0x0e,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,0x80,0x0b,0x25,
-0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xab,0x18,0xaa,0x19,0xa9,0x1a,
-0xe4,0xf5,0xf0,0x12,0x42,0xcd,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x02,0xe4,
-0xf5,0xf0,0x12,0x42,0xec,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,0x42,0xec,0x90,0x00,
-0x06,0xe4,0xf5,0xf0,0x12,0x42,0xec,0x90,0x00,0x08,0xe4,0xf5,0xf0,0x12,0x42,0xec,
-0xe5,0x13,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,
-0xf0,0xe5,0x13,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,
-0xa3,0xf0,0xe5,0x13,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,
-0xf0,0xa3,0xf0,0x05,0x13,0xe5,0x13,0xc3,0x94,0x40,0x50,0x03,0x02,0x72,0x3e,0x22,
-0x90,0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0xe4,
-0xf0,0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe4,0xf0,0x0d,0xbd,
-0x10,0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,0x01,0x04,0xf0,0xe4,0xfd,0x75,0xf0,
-0x0a,0xed,0x90,0x90,0x00,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,
-0x90,0x90,0x02,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,
-0x04,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x06,0x12,
-0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x08,0x12,0x43,0x52,
-0xe4,0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0x74,0x13,
-0xf0,0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0x74,0x84,0x2d,
-0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xed,0x25,0xe0,0x24,0x80,0xf5,0x82,
-0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,
-0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,
-0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x44,0xf5,0x82,
-0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,
-0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,
-0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x86,0x2d,0xf5,0x82,0xe4,0x34,
-0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,
-0xf0,0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x41,0xca,
-0x93,0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x92,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,
-0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,
-0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4b,0x12,
-0x43,0x52,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x52,0x74,
-0x01,0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0c,0xf0,0x75,
-0xf0,0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x52,0x74,0xff,0xf0,0xa3,0xf0,0x75,0xf0,
-0x09,0xed,0x90,0x96,0x44,0x12,0x43,0x52,0xe4,0xf0,0xa3,0x74,0x0f,0xf0,0x75,0xf0,
-0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x52,0x74,0x13,0xf0,0x75,0xf0,0x09,0xed,0x90,
-0x96,0x49,0x12,0x43,0x52,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,0x0f,0x74,0x84,0x2d,
-0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,0x74,0xa6,0x2d,0xf5,
-0x82,0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,0x40,0x60,0x02,0x01,
-0xbe,0x22,0x8f,0x13,0xef,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,
-0xf5,0x15,0x8f,0x16,0xe5,0x13,0x75,0xf0,0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,
-0xf0,0x75,0x17,0x01,0xf5,0x18,0x89,0x19,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x46,
-0x12,0x43,0x52,0xaf,0x82,0x85,0x83,0x1a,0x8f,0x1b,0xe5,0x13,0x75,0xf0,0x09,0xa4,
-0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0x75,0x1c,0x01,0xf5,0x1d,0x89,0x1e,0x74,0x82,
-0x25,0x13,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x12,0x43,0x87,0x7a,0xe2,0x00,
-0x7a,0xf7,0x01,0x7b,0x0c,0x02,0x7b,0x21,0x03,0x7b,0x4a,0x04,0x7b,0x5f,0x05,0x7b,
-0x74,0x06,0x7b,0x9a,0x0c,0x7b,0xc7,0x0d,0x7b,0xf4,0x0e,0x7c,0x21,0x0f,0x00,0x00,
-0x7c,0x55,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,
-0xf0,0xf0,0xa3,0x74,0x15,0x80,0x3c,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,
-0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x10,0x80,0x27,0xe5,0x13,0x25,0xe0,
-0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,
-0x12,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,
-0xf0,0xa3,0xe4,0xf0,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,
-0x83,0x74,0x0f,0xf0,0xa3,0x74,0x8f,0xf0,0x81,0x55,0xe5,0x13,0x25,0xe0,0x24,0xc6,
-0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,
-0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,
-0x74,0xf0,0x80,0x12,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
-0x83,0xe4,0xf0,0xa3,0x74,0x0d,0xf0,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,
-0x34,0x95,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x81,0x55,0x90,0x04,0x47,0xe0,0xab,0x17,
-0xaa,0x18,0xa9,0x19,0x12,0x42,0x20,0x90,0x04,0x46,0xe0,0xab,0x17,0xaa,0x18,0xa9,
-0x19,0x90,0x00,0x01,0x12,0x42,0x32,0x90,0x04,0x45,0xe0,0x85,0x16,0x82,0x85,0x15,
-0x83,0xf0,0x90,0x04,0x44,0x81,0x4c,0x90,0x04,0x4b,0xe0,0xab,0x17,0xaa,0x18,0xa9,
-0x19,0x12,0x42,0x20,0x90,0x04,0x4a,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x90,0x00,
-0x01,0x12,0x42,0x32,0x90,0x04,0x49,0xe0,0x85,0x16,0x82,0x85,0x15,0x83,0xf0,0x90,
-0x04,0x48,0x80,0x58,0x90,0x04,0x4f,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x12,0x42,
-0x20,0x90,0x04,0x4e,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x90,0x00,0x01,0x12,0x42,
-0x32,0x90,0x04,0x4d,0xe0,0x85,0x16,0x82,0x85,0x15,0x83,0xf0,0x90,0x04,0x4c,0x80,
-0x2b,0x90,0x04,0x53,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x12,0x42,0x20,0x90,0x04,
-0x52,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x90,0x00,0x01,0x12,0x42,0x32,0x90,0x04,
-0x51,0xe0,0x85,0x16,0x82,0x85,0x15,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x16,0x82,
-0x85,0x15,0x83,0xa3,0xf0,0xab,0x17,0xaa,0x18,0xa9,0x19,0xc0,0x03,0xc0,0x02,0xc0,
-0x01,0x12,0x1f,0x04,0xff,0xab,0x1c,0xaa,0x1d,0xa9,0x1e,0x12,0x1f,0x04,0x5f,0xd0,
-0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x20,0xab,0x17,0xe5,0x19,0x24,0x01,0xf9,0xe4,
-0x35,0x18,0xfa,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x1f,0x04,0xff,0xab,0x1c,0xaa,
-0x1d,0xa9,0x1e,0x90,0x00,0x01,0x12,0x1f,0x1d,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,
-0x12,0x42,0x20,0x85,0x16,0x82,0x85,0x15,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,
-0x1b,0x82,0x85,0x1a,0x83,0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x16,
-0x82,0x85,0x15,0x83,0xa3,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x1b,0x82,0x85,0x1a,
-0x83,0xa3,0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x13,0x25,0xe0,0x24,
-0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,
-0x14,0x0b,0x74,0x01,0x7e,0x00,0xa8,0x14,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
-0xd8,0xf9,0xff,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
-0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x14,0x24,0x10,0x80,0x5d,0x15,
-0x14,0xe5,0x14,0xc3,0x94,0x00,0x50,0xca,0x80,0x56,0xe5,0x13,0x25,0xe0,0x24,0xc6,
-0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x14,
-0x0f,0x74,0x01,0x7e,0x00,0xa8,0x14,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
-0xf9,0xff,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,
-0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x80,0xe5,0x14,0xf0,0x80,0x10,
-0x15,0x14,0xe5,0x14,0xc3,0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x80,0xf0,
-0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,
-0xe0,0x4e,0x60,0x3b,0xe4,0xf5,0x14,0x74,0x01,0x7e,0x00,0xa8,0x14,0x08,0x80,0x05,
-0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,
-0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,
-0x81,0xe5,0x14,0xf0,0x80,0x5b,0x05,0x14,0xe5,0x14,0xb4,0x10,0xca,0x80,0x52,0xe5,
-0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,
-0x4e,0x60,0x39,0xe4,0xf5,0x14,0x74,0x01,0x7e,0x00,0xa8,0x14,0x08,0x80,0x05,0xc3,
-0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,
-0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x14,0x24,
-0x10,0x80,0x0a,0x05,0x14,0xe5,0x14,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x81,
-0xf0,0x90,0x9e,0x80,0xe0,0xff,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x48,0x12,0x43,
-0x52,0xef,0xf0,0x90,0x9e,0x81,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x49,
-0x12,0x43,0x52,0xee,0xf0,0x74,0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
-0xe0,0xd3,0x9f,0x40,0x06,0x90,0x9e,0x80,0x12,0x6d,0x2c,0x74,0x84,0x25,0x13,0xf5,
-0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xff,0x90,0x9e,0x81,0xe0,0xfe,0xef,0xc3,0x9e,
-0x50,0x03,0x12,0x6d,0x2c,0x90,0x9e,0x80,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,
-0x96,0x43,0x74,0x03,0xf0,0x22,0xef,0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,
-0x02,0xf0,0x22,0xef,0xd3,0x94,0x03,0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,
-0xe4,0x90,0x96,0x43,0xf0,0x22,0x90,0x9e,0x74,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,
-0x43,0x7e,0x90,0x9e,0x76,0x12,0x43,0x5e,0x90,0x00,0x03,0x12,0x1f,0x1d,0x54,0xf0,
-0xc4,0x54,0x0f,0x90,0x9e,0x79,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0x54,0x40,0xc4,
-0x13,0x13,0x54,0x03,0x90,0x9e,0x7a,0xf0,0x90,0x9e,0x74,0xe0,0xff,0x75,0xf0,0x09,
-0x90,0x96,0x46,0x12,0x43,0x52,0xad,0x82,0xac,0x83,0x90,0x9e,0x7b,0xec,0xf0,0xa3,
-0xed,0xf0,0xef,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,
-0x01,0xa3,0x12,0x43,0x7e,0x90,0x9e,0x76,0x12,0x43,0x5e,0x90,0x00,0x03,0x12,0x1f,
-0x1d,0x54,0x0f,0xff,0x90,0x9e,0x7d,0x12,0x43,0x5e,0xef,0x12,0x42,0x20,0x90,0x9e,
-0x76,0x12,0x43,0x5e,0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,0x90,0x9e,0x7d,0x12,0x43,
-0x5e,0x90,0x00,0x01,0xef,0x12,0x42,0x32,0x90,0x9e,0x76,0x12,0x43,0x5e,0x90,0x00,
-0x01,0x12,0x1f,0x1d,0xff,0x90,0x9e,0x7b,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,
-0x83,0xef,0xf0,0x12,0x1f,0x04,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x79,0xe0,
-0xfe,0x90,0x9e,0x74,0xe0,0xff,0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,
-0xf0,0x90,0x9e,0x75,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x52,
-0xee,0xf0,0x75,0xf0,0x09,0xef,0x90,0x96,0x4b,0x12,0x43,0x52,0x74,0x01,0xf0,0x90,
-0x9e,0x7a,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x52,0xee,0xf0,
-0x41,0x62,0x90,0x00,0x04,0x12,0x1f,0x1d,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,
-0x13,0x54,0x07,0xfd,0xaf,0x06,0xc1,0xa6,0x90,0x00,0x04,0x12,0x1f,0x1d,0xff,0x54,
-0x3f,0xfe,0xef,0x54,0x80,0xc4,0x13,0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0xc1,0xa6,
-0x12,0x1f,0x04,0xf5,0x13,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,
-0xff,0x74,0x44,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xef,0xf0,0x22,0xe5,
-0x13,0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0x96,0x42,0xf0,0x22,0x12,
-0x1f,0x04,0x90,0x95,0x01,0xf0,0x22,0x90,0x9e,0x71,0x12,0x43,0x7e,0xef,0x12,0x43,
-0x87,0x80,0x93,0x01,0x80,0x9b,0x02,0x80,0xbb,0x03,0x80,0xc4,0x05,0x80,0xcd,0x06,
-0x81,0xf7,0x07,0x80,0xd6,0x08,0x80,0xdf,0x10,0x80,0xe8,0x11,0x80,0xf0,0x12,0x80,
-0xf8,0x13,0x81,0x00,0x14,0x81,0x09,0x15,0x81,0x12,0x16,0x81,0x1c,0x17,0x81,0x26,
-0x18,0x81,0x30,0x19,0x81,0xc6,0x1a,0x81,0xce,0x1b,0x81,0xd7,0x1c,0x81,0x39,0x1d,
-0x81,0x43,0x1e,0x81,0x4e,0x21,0x81,0x56,0x22,0x81,0x5e,0x23,0x81,0x66,0x24,0x81,
-0x6e,0x25,0x81,0x76,0x26,0x81,0x7e,0x27,0x81,0x86,0x28,0x81,0x8e,0x29,0x80,0xa3,
-0x2d,0x80,0xab,0x2e,0x81,0x96,0x2f,0x81,0xe0,0x30,0x81,0xe8,0x31,0x81,0xa6,0x32,
-0x81,0x9e,0x33,0x80,0xb3,0x34,0x81,0xae,0x36,0x81,0xb6,0x37,0x81,0xbe,0x38,0x00,
-0x00,0x81,0xf0,0x90,0x9e,0x71,0x12,0x43,0x5e,0xc1,0xe1,0x90,0x9e,0x71,0x12,0x43,
-0x5e,0x81,0x7c,0x90,0x9e,0x71,0x12,0x43,0x5e,0xe1,0xe9,0x90,0x9e,0x71,0x12,0x43,
-0x5e,0xe1,0x35,0x90,0x9e,0x71,0x12,0x43,0x5e,0x81,0xae,0x90,0x9e,0x71,0x12,0x43,
-0x5e,0x02,0x88,0x31,0x90,0x9e,0x71,0x12,0x43,0x5e,0x02,0x7f,0xd0,0x90,0x9e,0x71,
-0x12,0x43,0x5e,0x02,0x7f,0xa2,0x90,0x9e,0x71,0x12,0x43,0x5e,0x02,0x64,0xb0,0x90,
-0x9e,0x71,0x12,0x43,0x5e,0x02,0x88,0x79,0x90,0x9e,0x71,0x12,0x43,0x5e,0xa1,0x08,
-0x90,0x9e,0x71,0x12,0x43,0x5e,0x81,0xc9,0x90,0x9e,0x71,0x12,0x43,0x5e,0x81,0x94,
-0x90,0x9e,0x71,0x12,0x43,0x5e,0x02,0x88,0xc0,0x90,0x9e,0x71,0x12,0x43,0x5e,0x02,
-0x89,0x98,0x90,0x9e,0x71,0x12,0x43,0x5e,0x7f,0x01,0x80,0x2f,0x90,0x9e,0x71,0x12,
-0x43,0x5e,0x7f,0x02,0x80,0x25,0x90,0x9e,0x71,0x12,0x43,0x5e,0x7f,0x03,0x80,0x1b,
-0x90,0x9e,0x71,0x12,0x43,0x5e,0x02,0x8b,0x1d,0x90,0x9e,0x71,0x12,0x43,0x5e,0xe4,
-0xff,0x80,0x08,0x90,0x9e,0x71,0x12,0x43,0x5e,0x7f,0x04,0x02,0x8a,0x3b,0x90,0x9e,
-0x71,0x12,0x43,0x5e,0xa1,0x2f,0x90,0x9e,0x71,0x12,0x43,0x5e,0xa1,0x56,0x90,0x9e,
-0x71,0x12,0x43,0x5e,0xa1,0x7d,0x90,0x9e,0x71,0x12,0x43,0x5e,0xa1,0xa4,0x90,0x9e,
-0x71,0x12,0x43,0x5e,0xa1,0xcb,0x90,0x9e,0x71,0x12,0x43,0x5e,0xa1,0xf2,0x90,0x9e,
-0x71,0x12,0x43,0x5e,0xe1,0x63,0x90,0x9e,0x71,0x12,0x43,0x5e,0xc1,0x19,0x90,0x9e,
-0x71,0x12,0x43,0x5e,0xc1,0x67,0x90,0x9e,0x71,0x12,0x43,0x5e,0xe1,0x9a,0x90,0x9e,
-0x71,0x12,0x43,0x5e,0xc1,0x8f,0x90,0x9e,0x71,0x12,0x43,0x5e,0xc1,0xb8,0x90,0x9e,
-0x71,0x12,0x43,0x5e,0x80,0x42,0x90,0x9e,0x71,0x12,0x43,0x5e,0x81,0x82,0x90,0x9e,
-0x71,0x12,0x43,0x5e,0xc1,0x40,0x90,0x9e,0x71,0x12,0x43,0x5e,0x61,0x77,0x90,0x9e,
-0x71,0x12,0x43,0x5e,0x02,0x7f,0xff,0x90,0x9e,0x71,0x12,0x43,0x5e,0x02,0x7f,0xb8,
-0x90,0x9e,0x71,0x12,0x43,0x5e,0x81,0xe8,0x90,0x9e,0x71,0x12,0x43,0x5e,0xe1,0x0b,
-0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,0x12,0x1f,0x04,0x60,0x44,0x90,0xfd,0x58,
-0xe0,0x20,0xe0,0x3d,0x90,0xfd,0x50,0x74,0x0a,0xf0,0xa3,0x74,0x06,0xf0,0x90,0x00,
-0x01,0x12,0x1f,0x1d,0x90,0xfd,0x52,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0xfd,
-0x53,0xf0,0xa3,0xe4,0xf0,0xa3,0x74,0xc0,0xf0,0xa3,0x74,0x10,0xf0,0xa3,0x74,0x80,
-0xf0,0x90,0xfd,0x50,0x74,0x0a,0xf0,0xa3,0x74,0x06,0xf0,0x90,0xfd,0x58,0x74,0x01,
-0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfe,0x90,0x00,0x01,0x12,0x1f,0x1d,0x7c,0x00,
-0x24,0x00,0xff,0xec,0x3e,0xfe,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0xfc,0x74,
-0x20,0x2f,0xff,0xe4,0x3e,0xfe,0x90,0x9e,0x74,0xef,0xf0,0xee,0xf9,0x90,0x02,0x09,
-0xe0,0xc3,0x13,0x90,0xfd,0x10,0xf0,0xec,0xc3,0x99,0x50,0x43,0xec,0x70,0x04,0x7d,
-0x04,0x80,0x02,0xe4,0xfd,0xed,0xc3,0x94,0x20,0x50,0x07,0xaf,0x05,0x51,0xcb,0x0d,
-0x80,0xf3,0x0c,0x90,0xfd,0x10,0xe0,0x04,0xf0,0xec,0xb5,0x01,0xda,0xe4,0xfd,0xed,
-0x75,0xf0,0x08,0xa4,0xff,0x90,0x9e,0x74,0xe0,0xfb,0xc3,0xef,0x9b,0x74,0x80,0xf8,
-0x65,0xf0,0x98,0x50,0x07,0xaf,0x05,0x51,0xcb,0x0d,0x80,0xe3,0x0c,0x80,0xb8,0x90,
-0x00,0x81,0xe0,0x44,0x80,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0xfd,0x58,0xe0,0x30,
-0xe0,0x08,0x90,0x01,0xb8,0xe0,0x04,0xf0,0x80,0xf1,0xef,0x75,0xf0,0x08,0xa4,0x24,
-0x00,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x50,0xf0,0xef,0x75,0xf0,
-0x08,0xa4,0x24,0x01,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x51,0xf0,
-0xef,0x75,0xf0,0x08,0xa4,0x24,0x02,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,
-0xfd,0x52,0xf0,0xef,0x75,0xf0,0x08,0xa4,0x24,0x03,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
-0x83,0xe0,0x90,0xfd,0x53,0xf0,0xef,0x75,0xf0,0x08,0xa4,0x24,0x04,0xf5,0x82,0xe4,
-0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x54,0xf0,0xef,0x75,0xf0,0x08,0xa4,0x24,0x05,
-0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x55,0xf0,0xef,0x75,0xf0,0x08,
-0xa4,0x24,0x06,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x56,0xf0,0xef,
-0x75,0xf0,0x08,0xa4,0x24,0x07,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,
-0x57,0xf0,0xa3,0x74,0x01,0xf0,0x22,0x90,0x9e,0x74,0x12,0x43,0x7e,0x12,0x1f,0x04,
-0x20,0xe0,0x1d,0x7d,0x08,0xe4,0xff,0x12,0x3a,0x54,0x90,0x06,0x90,0xe4,0xf0,0x12,
-0x8d,0xfb,0x90,0x01,0x3f,0x74,0x04,0xf0,0x90,0x02,0x86,0xe0,0x54,0xfb,0xf0,0x22,
-0x90,0x9e,0x74,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0x54,0x01,0xfe,0x90,0x9e,0xbc,
-0xe0,0x54,0xfe,0x4e,0xf0,0xef,0x54,0x04,0xff,0xe0,0x54,0xfb,0x4f,0xf0,0x12,0x1f,
-0x04,0xff,0x54,0x02,0xfe,0x90,0x9e,0xbc,0xe0,0x54,0xfd,0x4e,0xf0,0xef,0x54,0x08,
-0xff,0xe0,0x54,0xf7,0x4f,0xf0,0x12,0x1f,0x04,0xff,0x54,0x10,0xfe,0x90,0x9e,0xbc,
-0xe0,0x54,0xef,0x4e,0xf0,0xef,0x54,0x20,0xff,0xe0,0x54,0xdf,0x4f,0xf0,0x12,0x1f,
-0x04,0xff,0x54,0x40,0xfe,0x90,0x9e,0xbc,0xe0,0x54,0xbf,0x4e,0xf0,0xef,0x54,0x80,
-0xff,0xe0,0x54,0x7f,0x4f,0xf0,0x90,0x00,0x81,0xe4,0xf0,0x90,0x9e,0xbf,0xe0,0x54,
-0xfe,0xf0,0x90,0x06,0x09,0xe0,0x54,0xfe,0xf0,0x12,0x1f,0x04,0xc3,0x13,0x30,0xe0,
-0x07,0x90,0x06,0x90,0xe0,0x44,0x02,0xf0,0x90,0x9e,0x74,0x12,0x43,0x5e,0x12,0x1f,
-0x04,0xff,0x13,0x13,0x54,0x3f,0x30,0xe0,0x07,0x90,0x06,0x90,0xe0,0x44,0x04,0xf0,
-0xef,0x13,0x13,0x13,0x54,0x1f,0x30,0xe0,0x07,0x90,0x06,0x90,0xe0,0x44,0x08,0xf0,
-0x90,0x9e,0x9b,0xe0,0xb4,0x02,0x14,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x9e,0xbd,
-0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0x9e,0xbe,0xf0,0x90,0x02,0x86,0xe0,0x44,
-0x04,0xf0,0x43,0x57,0x04,0x7d,0x08,0xe4,0xff,0x02,0x3a,0xc5,0x12,0x1f,0x04,0xf5,
-0x67,0x22,0x12,0x1f,0x04,0x90,0xfe,0x10,0x60,0x05,0xe0,0x44,0x01,0xf0,0x22,0xe0,
-0x54,0xfe,0xf0,0x22,0x12,0x1f,0x04,0x30,0xe0,0x0e,0x90,0x07,0x78,0xe0,0x54,0xfd,
-0xf0,0x90,0x9e,0x50,0x74,0x01,0xf0,0x22,0xe4,0x90,0x9e,0x50,0xf0,0x22,0x12,0x1f,
-0x04,0x30,0xe0,0x07,0x54,0x01,0x90,0x9e,0xb2,0xf0,0x22,0x7d,0x10,0x7f,0x03,0x12,
-0x3a,0x71,0x7d,0x01,0x7f,0x02,0x02,0x3a,0xc5,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x17,
-0x90,0xfd,0x50,0x74,0x0d,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,
-0xf0,0x90,0xfd,0x58,0x74,0x01,0xf0,0x22,0x12,0x1f,0x04,0xff,0x54,0x01,0xfe,0x90,
-0x9e,0xb9,0xe0,0x54,0xfe,0x4e,0xf0,0xef,0xc3,0x13,0x30,0xe0,0x0a,0x90,0x00,0x01,
-0x12,0x1f,0x1d,0x90,0x9e,0xba,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,
-0xfd,0x50,0x74,0x0c,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,
-0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0xfd,0x58,0x04,0xf0,0x22,0x90,
-0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x17,0xf0,0xa3,0x74,0x01,0xf0,
-0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
-0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,
-0x74,0x18,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,
-0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,
-0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x19,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,
-0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
-0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x1a,
-0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,
-0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,
-0xe0,0x1f,0x90,0xfd,0x50,0x74,0x1b,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,
-0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,
-0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x1c,0xf0,0xa3,
-0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,
-0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,
-0x90,0xfd,0x50,0x74,0x1e,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,
-0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,
-0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x23,0xf0,0xa3,0x74,0x01,
-0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
-0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x12,0x1f,0x04,0xff,0xe4,0xfc,0xfd,0xfe,0x78,
-0x18,0x12,0x1f,0xc4,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x4a,0x12,
-0x43,0x46,0xec,0x54,0x03,0xfc,0x12,0x43,0x19,0x90,0x9e,0x46,0x02,0x1f,0xd7,0x90,
-0xfd,0x58,0xe0,0x20,0xe0,0x21,0x90,0xfd,0x50,0x74,0x1f,0xf0,0xa3,0x74,0x01,0xf0,
-0x12,0x1f,0x04,0x54,0x01,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,
-0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x21,0x90,
-0xfd,0x50,0x74,0x20,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x54,0x01,0x90,0xfd,
-0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,
-0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x9e,
-0xb0,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0x9e,0xa0,0xf0,0x12,0x1f,0x04,0x65,
-0x6a,0x60,0x03,0x12,0x4d,0xa5,0xd0,0xd0,0x92,0xaf,0x22,0x12,0x1f,0x04,0xff,0x54,
-0x01,0xfe,0x90,0x9e,0xb4,0xe0,0x54,0xfe,0x4e,0xf0,0xef,0xc3,0x13,0x30,0xe0,0x14,
-0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x9e,0xb5,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,
-0x90,0x9e,0xb6,0xf0,0x22,0x12,0x1f,0x04,0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,
-0x9e,0xab,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0xff,0x90,0x9e,0xa9,0xe4,0xf0,0xa3,
-0xef,0xf0,0x22,0x90,0x9e,0xab,0x74,0x07,0xf0,0x90,0x9e,0xa9,0xe4,0xf0,0xa3,0x74,
-0x0b,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x2f,0x90,0xfd,0x50,0x74,0x1d,0xf0,
-0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0x90,0x00,0x01,0x12,0x1f,
-0x1d,0x90,0xfd,0x53,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0xfd,0x54,0xf0,0xa3,
-0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,
-0x3b,0x12,0x1f,0x04,0x90,0xfd,0x50,0xf0,0xa3,0x74,0x04,0xf0,0x90,0x00,0x01,0x12,
-0x1f,0x1d,0x90,0xfd,0x52,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0xfd,0x53,0xf0,
-0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0xfd,0x54,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,
-0x90,0xfd,0x55,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0xe4,0x90,0x9d,
-0xa8,0xf0,0xa3,0xf0,0x90,0x01,0xaf,0xf0,0x22,0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,
-0x30,0xe0,0x25,0x12,0x1f,0x04,0x90,0x9e,0xa7,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,
-0x90,0x9e,0xa8,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0xa6,0xf0,0x90,0x00,0x03,
-0x12,0x1f,0x1d,0x90,0x9e,0xac,0xf0,0x22,0x90,0x9e,0xa7,0x74,0x01,0xf0,0x90,0x9e,
-0xa8,0x74,0x03,0xf0,0x90,0x9e,0xa6,0x74,0x14,0xf0,0x90,0x9e,0xac,0x74,0x05,0xf0,
-0x22,0x90,0x02,0x09,0xe0,0xfd,0x12,0x1f,0x04,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,
-0x95,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0xff,0xed,0x2f,0x90,0x9e,0x96,0xf0,0x90,
-0x00,0x02,0x12,0x1f,0x1d,0xff,0xed,0x2f,0x90,0x9e,0x97,0xf0,0x90,0x00,0x03,0x12,
-0x1f,0x1d,0xff,0xed,0x2f,0x90,0x9e,0x98,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0xff,
-0xae,0x05,0xed,0x2f,0x90,0x9e,0x99,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x3f,
-0x90,0xfd,0x50,0x74,0x0b,0xf0,0xa3,0x74,0x05,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,
-0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0xfd,0x53,0xf0,0x90,0x00,0x02,0x12,0x1f,
-0x1d,0x90,0xfd,0x54,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0xfd,0x55,0xf0,0x90,
-0x00,0x04,0x12,0x1f,0x1d,0x90,0xfd,0x56,0xf0,0x90,0xfd,0x58,0x74,0x01,0xf0,0x22,
-0x90,0x07,0x78,0xe0,0x44,0x0c,0xf0,0x12,0x1f,0x04,0xff,0x30,0xe0,0x75,0x90,0xfd,
-0x58,0xe0,0x20,0xe0,0x10,0x90,0xfd,0x50,0x74,0x14,0xf0,0xa3,0x74,0x01,0xf0,0xa3,
-0xf0,0x90,0xfd,0x58,0xf0,0x90,0x9e,0x43,0xe0,0x44,0x08,0xf0,0xef,0x30,0xe1,0x0d,
-0xe0,0x44,0x01,0xf0,0x90,0x07,0x78,0xe0,0x54,0xfd,0xf0,0x80,0x07,0x90,0x07,0x78,
-0xe0,0x44,0x02,0xf0,0x12,0x1f,0x04,0xff,0x30,0xe2,0x1e,0x90,0x9e,0x43,0xe0,0x44,
-0x04,0xf0,0x90,0x04,0x26,0xe0,0x44,0x40,0xf0,0x90,0x07,0x78,0xe0,0x54,0xef,0xf0,
-0x90,0x07,0x83,0xe0,0x44,0x40,0xf0,0x80,0x07,0x90,0x07,0x78,0xe0,0x44,0x10,0xf0,
-0xef,0x30,0xe4,0x63,0x90,0x9e,0x43,0xe0,0x44,0x02,0xf0,0x90,0x04,0x26,0xe0,0x44,
-0x80,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x12,0x90,0xfd,0x50,0x74,0x14,0xf0,
-0xa3,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0x90,0xfd,0x58,0x04,0xf0,0x90,0x9e,0x43,0xe0,
-0x54,0xfe,0xf0,0xe0,0x54,0xfb,0xf0,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xf7,0xf0,0x90,
-0x07,0x78,0xe0,0x54,0xe3,0xf0,0x90,0x07,0x83,0xe0,0x54,0x3f,0xf0,0x90,0x04,0x26,
-0xe0,0x54,0x3f,0xf0,0x90,0x9e,0x4a,0x12,0x43,0x46,0x90,0x81,0x57,0x12,0x1f,0xd7,
-0x7f,0x80,0x7e,0x08,0x12,0x34,0x55,0x22,0x12,0x1f,0x04,0xff,0x30,0xe0,0x4b,0x90,
-0x07,0x78,0xe0,0x44,0x02,0xf0,0x90,0x07,0x83,0xe0,0x44,0x02,0xf0,0x90,0x07,0x78,
-0xe0,0x44,0x80,0x54,0xbf,0xf0,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1a,0x90,0xfd,0x50,
-0x74,0x1a,0xf0,0xa3,0x74,0x01,0xf0,0xa3,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,
-0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0xef,0x30,0xe1,0x5f,0x90,0x9e,0x43,0xe0,0x44,
-0x02,0xf0,0x90,0x07,0x95,0xe0,0x44,0x06,0xf0,0x22,0x90,0x9e,0x43,0xe0,0x54,0xfd,
-0xf0,0x90,0x07,0x78,0xe0,0x54,0x3f,0xf0,0x90,0x07,0x83,0xe0,0x54,0xfd,0xf0,0x90,
-0x07,0x95,0xe0,0x54,0xf9,0xf0,0x90,0x9e,0x4a,0x12,0x43,0x46,0x90,0x81,0x57,0x12,
-0x1f,0xd7,0x7f,0x80,0x7e,0x08,0x12,0x34,0x55,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1a,
-0x90,0xfd,0x50,0x74,0x1a,0xf0,0xa3,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,
-0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0xef,0x70,0x21,0x12,0x1f,
-0x04,0x30,0xe0,0x14,0x90,0x00,0x40,0xe0,0x44,0x20,0xf0,0xe0,0x54,0x3f,0xf0,0x90,
-0x07,0x78,0xe0,0x44,0x01,0xf0,0x80,0x07,0x90,0x07,0x78,0xe0,0x54,0xfe,0xf0,0xef,
-0x64,0x01,0x70,0x6a,0x12,0x1f,0x04,0x90,0x00,0x01,0x30,0xe0,0x2e,0x12,0x1f,0x1d,
-0x90,0x06,0xc0,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0x06,0xc1,0xf0,0x90,0x00,
-0x03,0x12,0x1f,0x1d,0x90,0x06,0xc2,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0x90,0x06,
-0xc3,0xf0,0x90,0x06,0xcc,0xe0,0x54,0xfe,0xf0,0x80,0x2c,0x12,0x1f,0x1d,0x90,0x06,
-0xc4,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0x06,0xc5,0xf0,0x90,0x00,0x03,0x12,
-0x1f,0x1d,0x90,0x06,0xc6,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0x90,0x06,0xc7,0xf0,
-0x90,0x06,0xcc,0xe0,0x44,0x01,0xf0,0x90,0x06,0xcc,0xe0,0x44,0x02,0xf0,0xef,0xb4,
-0x02,0x11,0x12,0x1f,0x04,0x90,0x06,0xc8,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,
-0x06,0xc9,0xf0,0xef,0xb4,0x03,0x11,0x12,0x1f,0x04,0x90,0x06,0xca,0xf0,0x90,0x00,
-0x01,0x12,0x1f,0x1d,0x90,0x06,0xcb,0xf0,0xef,0x64,0x04,0x70,0x1f,0x12,0x1f,0x04,
-0xff,0x90,0x07,0x83,0x30,0xe0,0x06,0xe0,0x44,0x10,0xf0,0x80,0x04,0xe0,0x54,0x6f,
-0xf0,0xef,0x30,0xe1,0x07,0x90,0x07,0x83,0xe0,0x44,0x80,0xf0,0x22,0x90,0x9e,0x74,
-0x12,0x43,0x7e,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x37,0x90,0xfd,0x50,0x74,0x11,0xf0,
-0xa3,0x74,0x03,0xf0,0x90,0x9e,0x74,0x12,0x43,0x5e,0x12,0x1f,0x04,0x90,0xfd,0x52,
-0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0xfd,0x53,0xf0,0x90,0x00,0x02,0x12,0x1f,
-0x1d,0x90,0xfd,0x54,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x80,
-0x16,0x43,0x57,0x01,0x78,0xaa,0x7c,0x9d,0x7d,0x01,0x90,0x9e,0x74,0x12,0x43,0x5e,
-0x7e,0x00,0x7f,0x03,0x12,0x1e,0xde,0x90,0x9e,0x74,0x12,0x43,0x5e,0x12,0x1f,0x04,
-0x60,0x07,0x90,0x9e,0x51,0x74,0x01,0xf0,0x22,0xe4,0x90,0x9e,0x51,0xf0,0x22,0x90,
-0x05,0x22,0x74,0xff,0xf0,0x90,0x05,0x27,0xe0,0x44,0x40,0xf0,0x90,0x9e,0xd8,0x74,
-0x04,0xf0,0x22,0x12,0x67,0x9e,0x90,0x9e,0xd8,0x74,0x04,0xf0,0x22,0x90,0x05,0x22,
-0x74,0xff,0xf0,0x90,0x9e,0xd2,0x74,0x05,0xf0,0x22,0x90,0x05,0x22,0x74,0xff,0xf0,
-0x90,0x9e,0xd2,0x74,0x02,0xf0,0x22,0x90,0x05,0x27,0xe0,0x54,0xbf,0xf0,0x90,0x05,
-0x22,0x74,0x6f,0xf0,0x90,0x9e,0xd2,0x74,0x06,0xf0,0x22,0x90,0x01,0x57,0xe0,0x60,
-0x3c,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0xb1,0xe0,
-0x60,0x07,0xe4,0xf0,0x53,0x6b,0xfd,0x80,0x24,0x90,0x9e,0xa2,0xe0,0x04,0xf0,0x53,
-0x6b,0xef,0x90,0x9e,0xa7,0xe0,0xff,0x90,0x9e,0xa2,0xe0,0xd3,0x9f,0x40,0x0e,0xe5,
-0x67,0xb4,0x01,0x09,0x90,0x9e,0xa3,0xe0,0x70,0x03,0xe0,0x04,0xf0,0x90,0x01,0x5b,
-0xe0,0x60,0x10,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0xe4,0x90,
-0x9e,0xae,0xf0,0x90,0x01,0x5f,0xe0,0x60,0x10,0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,
-0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0xad,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
-0xd0,0x90,0x9f,0x19,0xef,0xf0,0xd3,0x94,0x07,0x50,0x47,0xe0,0xff,0x74,0x01,0xa8,
-0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,0x5f,0xf0,
-0x12,0x4e,0x94,0x90,0x9f,0x19,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,
-0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,0xe4,0xfe,
-0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,
-0x80,0x4c,0x90,0x9f,0x19,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
-0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x62,0xe0,0x5f,0xf0,0x12,0x4e,
-0x94,0x90,0x9f,0x19,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,0x05,0xc3,
-0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x60,0xe0,0xfb,0xe4,0xfe,0xef,0x5b,
-0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,0xd0,0xd0,
-0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9f,0x11,0xed,0xf0,0x90,
-0x9f,0x10,0xef,0xf0,0xd3,0x94,0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,0x9f,0x10,
-0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,
-0x00,0x47,0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9f,0x10,0xe0,0xff,0x74,0x01,0xa8,0x07,
-0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,0x12,0x4e,
-0x94,0x90,0x9f,0x10,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
-0xfc,0xf4,0xff,0x90,0x00,0x46,0x80,0x67,0x90,0x9f,0x10,0xe0,0x24,0xf8,0xf0,0xa3,
-0xe0,0x70,0x1a,0x90,0x9f,0x10,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,
-0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x63,0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9f,0x10,
-0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,
-0x63,0xe0,0x4f,0xf0,0x12,0x4e,0x94,0x90,0x9f,0x10,0xe0,0xff,0x74,0x01,0xa8,0x07,
-0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x12,0x4e,0x8c,0x90,0x9f,0x10,0xe0,0xff,0x74,
-0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x62,0xe0,
-0x5f,0xf0,0x12,0x4e,0x94,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0xb4,0xe0,0x54,0xfe,
-0xf0,0xe4,0x90,0x9e,0xb7,0xf0,0xa3,0xf0,0x90,0x9e,0xb5,0x74,0x03,0xf0,0xa3,0xf0,
-0x22,0xe4,0x90,0x9e,0xbb,0xf0,0x90,0x9e,0xb9,0xe0,0x54,0x7f,0xf0,0xa3,0x74,0x0a,
-0xf0,0x22,0x90,0x9e,0xb9,0xe0,0x54,0xfe,0xf0,0x80,0xe6,0x90,0x9e,0xbc,0xe0,0x54,
-0xfe,0xf0,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xfb,0xf0,0xe0,0x54,0xf7,0xf0,0xe0,0x54,
-0xef,0xf0,0xe0,0x54,0xdf,0xf0,0xe0,0x54,0xbf,0xf0,0xe0,0x54,0x7f,0xf0,0xe4,0xa3,
-0xf0,0xa3,0xf0,0xa3,0xe0,0x54,0xfe,0xf0,0xe0,0x54,0xfd,0xf0,0x90,0x01,0x17,0xe0,
-0xfe,0x90,0x01,0x16,0xe0,0x7c,0x00,0x24,0x00,0xff,0xec,0x3e,0x90,0x9e,0xc0,0xf0,
-0xa3,0xef,0xf0,0x90,0x01,0x04,0xe0,0x54,0x0f,0x90,0x9e,0x77,0xf0,0xe0,0xff,0x74,
-0x40,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0x90,
-0x9e,0xc3,0xf0,0xee,0x90,0x9e,0xc2,0xf0,0x22,0x75,0xe8,0x07,0x90,0xfd,0x68,0x74,
-0x02,0xf0,0x90,0x9e,0x43,0xe0,0x54,0xfe,0xf0,0x54,0xfb,0xf0,0x54,0xfd,0xf0,0x54,
-0xf7,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0x12,0x1f,0xe3,0x00,0x00,0x00,0x00,0x7f,
-0x80,0x7e,0x08,0x12,0x2c,0x87,0x90,0x9e,0x4a,0x12,0x1f,0xd7,0x90,0x00,0x2e,0xe0,
-0x90,0x9e,0x4e,0xf0,0x90,0x00,0x2d,0xe0,0x90,0x9e,0x4f,0xf0,0xe4,0xa3,0xf0,0xa3,
-0xf0,0x90,0x04,0x26,0xe0,0x44,0x10,0xf0,0x90,0x07,0x83,0xe4,0xf0,0x90,0x07,0x78,
-0x74,0x03,0xf0,0x7d,0x04,0x7f,0x02,0x02,0x3a,0xdf,0x90,0xfd,0x58,0xe0,0x20,0xe0,
-0x2d,0x90,0xfd,0x50,0x74,0x11,0xf0,0xa3,0x74,0x04,0xf0,0x90,0x9d,0xaa,0xe0,0x90,
-0xfd,0x52,0xf0,0x90,0x9d,0xab,0xe0,0x90,0xfd,0x53,0xf0,0x90,0x9d,0xac,0xe0,0x90,
-0xfd,0x54,0xf0,0xa3,0x74,0x28,0xf0,0x90,0xfd,0x58,0x74,0x01,0xf0,0x22,0x43,0x57,
-0x01,0x22,0xae,0x07,0x90,0x9e,0x62,0xe0,0x54,0xf0,0x44,0x04,0xf0,0x54,0x0f,0x44,
-0x20,0xf0,0x90,0x9e,0x64,0xee,0xf0,0xa3,0xed,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x64,
-0x90,0x9e,0xf5,0x12,0x43,0x7e,0x7a,0x9e,0x79,0x62,0x02,0x48,0xde,0xad,0x07,0x90,
-0x9e,0x5a,0xe0,0x54,0xf0,0x44,0x05,0xf0,0x54,0x0f,0x44,0x10,0xf0,0x90,0x9e,0x5c,
-0xef,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x5c,0x90,0x9e,0xf5,0x12,0x43,0x7e,0x7a,0x9e,
-0x79,0x5a,0x02,0x48,0xde,0xad,0x07,0x90,0x9e,0x62,0xe0,0x54,0xf0,0x44,0x07,0xf0,
-0x54,0x0f,0x44,0x10,0xf0,0x90,0x9e,0x64,0xef,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x64,
-0x90,0x9e,0xf5,0x12,0x43,0x7e,0x7a,0x9e,0x79,0x62,0x02,0x48,0xde,0xad,0x07,0x90,
-0x9e,0x62,0xe0,0x54,0xf0,0x44,0x09,0xf0,0x54,0x0f,0x44,0x10,0xf0,0x90,0x9e,0x64,
-0xef,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x64,0x90,0x9e,0xf5,0x12,0x43,0x7e,0x7a,0x9e,
-0x79,0x62,0x02,0x48,0xde,0x90,0x9e,0xdd,0xe0,0x54,0xf0,0x44,0x0a,0xf0,0x90,0xfd,
-0x60,0xe0,0x90,0x9e,0xdf,0xf0,0x90,0xfd,0x62,0xe0,0x90,0x9e,0xe0,0xf0,0x90,0xfd,
-0x63,0xe0,0x90,0x9e,0xe1,0xf0,0x90,0xfd,0x64,0xe0,0x90,0x9e,0xe2,0xf0,0x90,0xfd,
-0x65,0xe0,0x90,0x9e,0xe3,0xf0,0x90,0xfd,0x60,0xe0,0x90,0x9e,0xdd,0x30,0xe6,0x08,
-0xe0,0x54,0x0f,0x44,0x50,0xf0,0x80,0x16,0xe0,0x54,0x0f,0x44,0x70,0xf0,0x90,0xfd,
-0x66,0xe0,0x90,0x9e,0xe4,0xf0,0x90,0xfd,0x67,0xe0,0x90,0x9e,0xe5,0xf0,0x7b,0x01,
-0x7a,0x9e,0x79,0xdf,0x90,0x9e,0xf5,0x12,0x43,0x7e,0x7a,0x9e,0x79,0xdd,0x02,0x48,
-0xde,0x90,0x9e,0x62,0xef,0xf0,0xa3,0xe0,0x54,0xf0,0x44,0x0c,0xf0,0x54,0x0f,0x44,
-0x10,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x62,0x90,0x9e,0xf5,0x12,0x43,0x7e,0x7a,0x9e,
-0x09,0x02,0x48,0xde,0x90,0x00,0x75,0xe0,0x44,0x01,0xf0,0x7f,0x01,0x7e,0x00,0x12,
-0x3a,0xaa,0x90,0xfe,0x13,0x74,0x03,0xf0,0x7f,0x02,0x7e,0x00,0x12,0x3a,0xaa,0x90,
-0xfe,0x13,0xe4,0xf0,0x90,0x00,0x75,0xe0,0x54,0xfe,0xf0,0x22,0x1b,0x4f,};
-
-
- //WiFi for BT MP New FW 0326
-const u8 Rtl8723SFwUMCBCutMPImgArray[Rtl8723SUMCBCutMPImgArrayLength] = {
-0x02, 0x23, 0x02, 0x00, 0x21, 0x00, 0x00, 0x00, 0x03, 0x27, 0x23, 0x01, 0x4E, 0x5E, 0x01, 0x00,
-0x73, 0x22, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x02, 0x4A, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x61, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x67, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x68, 0x81, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x6B, 0xB7, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03,
-0x00, 0x04, 0x06, 0x05, 0x04, 0x02, 0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09,
-0x08, 0x06, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08,
-0x0A, 0x09, 0x08, 0x00, 0x00, 0x08, 0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10,
-0x00, 0x18, 0x22, 0x21, 0x20, 0x18, 0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21,
-0x20, 0x08, 0x00, 0x20, 0x22, 0x21, 0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20,
-0x22, 0x20, 0x18, 0x08, 0x00, 0x20, 0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00,
-0x00, 0x30, 0x31, 0x2F, 0x10, 0x10, 0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28,
-0x10, 0x00, 0x00, 0x30, 0x31, 0x20, 0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30,
-0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04,
-0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05,
-0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13,
-0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A, 0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F,
-0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24,
-0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78,
-0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40, 0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40,
-0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8, 0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02,
-0x00, 0x04, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48,
-0x00, 0x60, 0x00, 0x6C, 0x00, 0x28, 0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8,
-0x00, 0xF0, 0x01, 0x18, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58,
-0x03, 0x20, 0x03, 0xE8, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07,
-0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04,
-0x05, 0x06, 0x07, 0x08, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18,
-0x10, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0xBB, 0x01, 0x0F, 0xF8, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x28,
-0xF0, 0x22, 0x50, 0x09, 0xC5, 0x82, 0x29, 0xF8, 0xE5, 0x82, 0x26, 0xF6, 0x22, 0xBB, 0xFE, 0x09,
-0xC5, 0x82, 0x29, 0xF8, 0xE2, 0x25, 0x82, 0xF2, 0x22, 0xF8, 0xEA, 0x25, 0x83, 0xF5, 0x83, 0xE9,
-0x93, 0x28, 0x22, 0xBB, 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22,
-0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8, 0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83,
-0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22, 0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE,
-0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0,
-0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A,
-0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7,
-0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3, 0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83,
-0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01, 0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82,
-0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82,
-0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22, 0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0,
-0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A, 0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22,
-0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7,
-0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB, 0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8,
-0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5,
-0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB,
-0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x5B, 0xFF, 0xEE,
-0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED,
-0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, 0xCF, 0xF4, 0xCF, 0xCE, 0xF4, 0xCE, 0xCD, 0xF4, 0xCD, 0xCC,
-0xF4, 0xCC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8,
-0x9C, 0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22,
-0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5,
-0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9,
-0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82, 0x15, 0x82, 0x70,
-0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0,
-0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3,
-0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68,
-0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12,
-0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83,
-0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60, 0xE9, 0xA3, 0xA3,
-0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0xFB, 0x90, 0x93, 0x63, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00,
-0xE5, 0x65, 0x70, 0x03, 0x02, 0x44, 0xF0, 0xE5, 0x62, 0x64, 0x01, 0x60, 0x03, 0x02, 0x44, 0xF0,
-0x0B, 0x90, 0x93, 0x40, 0xF0, 0x04, 0x70, 0x03, 0x02, 0x44, 0xF0, 0x43, 0x66, 0x10, 0x90, 0x93,
-0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A, 0xE0, 0x54, 0x0F, 0xFF, 0x90,
-0x93, 0x58, 0xE0, 0xD3, 0x9F, 0x50, 0x0D, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0xE0, 0xF5, 0x49,
-0xE4, 0x1B, 0x80, 0x56, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93,
-0x58, 0xE0, 0xC3, 0x9F, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x37, 0xE0, 0x04, 0x2F, 0xF5,
-0x49, 0xE4, 0xFB, 0x80, 0x35, 0x90, 0x93, 0x58, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x13,
-0xE4, 0xF5, 0x48, 0x90, 0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x2F, 0xF5, 0x49, 0xE4,
-0xFB, 0x80, 0x17, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x58, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF,
-0x90, 0x93, 0x4F, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12,
-0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
-0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x12, 0x9B, 0x79, 0x90, 0x05, 0x22, 0xE4, 0xF0,
-0x22, 0xE4, 0x90, 0x93, 0x5A, 0xF0, 0x90, 0x93, 0x41, 0xF0, 0xF5, 0x66, 0x22, 0x22, 0xE4, 0xFF,
-0x02, 0x4E, 0x27, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0xE4, 0xFB, 0x90, 0x93, 0x5D, 0x12, 0x1F,
-0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x46, 0x78, 0xE5, 0x62, 0x64, 0x01,
-0x60, 0x03, 0x02, 0x46, 0x78, 0xE5, 0x65, 0x14, 0x60, 0x2B, 0x24, 0xFD, 0x60, 0x27, 0x24, 0x02,
-0x24, 0xFB, 0x50, 0x02, 0x80, 0x21, 0x90, 0x93, 0x40, 0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3,
-0xE0, 0x60, 0x14, 0x90, 0x93, 0x40, 0xE0, 0x70, 0x08, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x93, 0x40,
-0xF0, 0x7B, 0x01, 0x80, 0x02, 0x7B, 0x01, 0xEB, 0x70, 0x03, 0x02, 0x46, 0x78, 0x43, 0x66, 0x10,
-0x90, 0x93, 0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x44, 0xE0, 0x54, 0x0F,
-0xFF, 0x90, 0x93, 0x58, 0xE0, 0xC3, 0x9F, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0x80,
-0x2D, 0x90, 0x93, 0x36, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33,
-0xFE, 0x90, 0x93, 0x58, 0xE0, 0xC3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x08,
-0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3A, 0x80, 0x06, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0xE0, 0x80,
-0x2D, 0x90, 0x93, 0x58, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4, 0xF5, 0x48, 0x90,
-0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x93,
-0x58, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x04, 0x2F, 0xF5, 0x49,
-0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0,
-0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69,
-0xE5, 0x63, 0x64, 0x0C, 0x60, 0x6F, 0x90, 0x93, 0x13, 0xE0, 0xFF, 0x90, 0x93, 0x58, 0xE0, 0xD3,
-0x9F, 0x40, 0x08, 0x90, 0x93, 0x14, 0xE0, 0x04, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x93, 0x14, 0xF0,
-0x90, 0x93, 0x58, 0xE0, 0x90, 0x93, 0x13, 0xF0, 0xA3, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x46, 0xE4,
-0xF0, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8,
-0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x70, 0x21, 0x12, 0x4A, 0x65, 0xE4, 0xF5, 0x48, 0x90, 0x93,
-0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
-0x5B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x55, 0x80, 0x09, 0x43, 0x66, 0x01, 0x12, 0x51, 0x48, 0x90,
-0x93, 0x51, 0x74, 0x01, 0xF0, 0x12, 0x9B, 0x79, 0x22, 0xE4, 0x90, 0x93, 0x63, 0xF0, 0xE5, 0x65,
-0x70, 0x03, 0x02, 0x47, 0x32, 0x90, 0x93, 0x5A, 0xE0, 0x60, 0x11, 0xE4, 0xF0, 0x53, 0x66, 0xFD,
-0xE5, 0x66, 0x54, 0x07, 0x60, 0x03, 0x02, 0x47, 0x32, 0x02, 0x47, 0x2F, 0x90, 0x93, 0x41, 0xE0,
-0x04, 0xF0, 0x53, 0x66, 0xEF, 0x90, 0x93, 0x58, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x36, 0xE0, 0xC4,
-0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A, 0x90, 0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x36,
-0xE0, 0x54, 0x0F, 0xB5, 0x07, 0x0A, 0x90, 0x93, 0x39, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x80, 0x22,
-0x90, 0x93, 0x36, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE,
-0x90, 0x93, 0x58, 0xE0, 0xB5, 0x07, 0x0B, 0xE4, 0xB5, 0x06, 0x07, 0xF0, 0x90, 0x05, 0x58, 0x74,
-0x03, 0xF0, 0x90, 0x93, 0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x06, 0x90,
-0x93, 0x63, 0x74, 0x5A, 0xF0, 0x90, 0x93, 0x63, 0xE0, 0xFF, 0x90, 0x93, 0x48, 0xE0, 0x2F, 0xFF,
-0xE4, 0x33, 0xFE, 0x90, 0x93, 0x41, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
-0x40, 0x0D, 0xE5, 0x62, 0xB4, 0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12,
-0x52, 0x17, 0x22, 0xE4, 0xF5, 0x66, 0xF5, 0x65, 0x75, 0x64, 0x0C, 0x75, 0x63, 0x0C, 0x90, 0x93,
-0x59, 0xF0, 0x90, 0x93, 0x55, 0xF0, 0x90, 0x93, 0x52, 0xF0, 0x90, 0x93, 0x57, 0x04, 0xF0, 0x90,
-0x93, 0x40, 0xF0, 0xE4, 0x90, 0x93, 0x5A, 0xF0, 0x90, 0x93, 0x42, 0xF0, 0x90, 0x93, 0x4F, 0x74,
-0x05, 0xF0, 0xE4, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x93, 0x4D, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90,
-0x93, 0x48, 0xF0, 0x90, 0x93, 0x4B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x45, 0x74, 0x14, 0xF0, 0x90,
-0x93, 0x50, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x43, 0xF0, 0x90, 0x93, 0x3C, 0xF0, 0x90, 0x93,
-0xB2, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x90, 0x93, 0x5C, 0xF0, 0x90, 0x93, 0x58, 0xF0, 0x90, 0x93,
-0x3D, 0xF0, 0x90, 0x93, 0x56, 0xF0, 0x90, 0x93, 0x47, 0xF0, 0x90, 0x93, 0x44, 0xF0, 0x90, 0x93,
-0x51, 0xF0, 0x90, 0x93, 0x4A, 0xF0, 0x90, 0x93, 0x46, 0xF0, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x93,
-0x49, 0xF0, 0x90, 0x93, 0xB1, 0xE0, 0xB4, 0x02, 0x05, 0x90, 0x00, 0x93, 0xE4, 0xF0, 0x90, 0x93,
-0x36, 0xE0, 0x54, 0x7F, 0xF0, 0xE0, 0x54, 0xF0, 0xF0, 0xE0, 0x54, 0x8F, 0xF0, 0xE4, 0xA3, 0xF0,
-0xA3, 0xF0, 0x90, 0x93, 0x3A, 0xF0, 0x90, 0x93, 0x39, 0xF0, 0x22, 0xEF, 0x60, 0x5F, 0xAF, 0x05,
-0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x93,
-0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07,
-0x30, 0xE0, 0x6B, 0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x13, 0xE0, 0x25, 0xE0, 0x25,
-0xE0, 0xFF, 0x74, 0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0x74,
-0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x74, 0x7F, 0xF0, 0x22, 0xAF, 0x05, 0x74,
-0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0x93, 0x19,
-0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xBF, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30,
-0xE0, 0x0C, 0x74, 0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x22, 0x90,
-0x93, 0x15, 0xE0, 0x30, 0xE0, 0x22, 0x90, 0x93, 0x26, 0xE0, 0x60, 0x09, 0x90, 0x01, 0xB9, 0x74,
-0x40, 0xF0, 0x02, 0x49, 0x29, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x02, 0x80, 0x2F,
-0x90, 0x93, 0x4C, 0xE0, 0x60, 0x67, 0x80, 0x5D, 0x12, 0x51, 0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08,
-0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x61, 0xE5, 0x66, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01,
-0xB9, 0x74, 0x02, 0xF0, 0x80, 0x53, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x08, 0x90,
-0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x42, 0xE5, 0x66, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB9, 0x74,
-0x08, 0xF0, 0x80, 0x35, 0xE5, 0x66, 0x30, 0xE4, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80,
-0x28, 0x90, 0x93, 0x42, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x1A, 0x90,
-0x93, 0x4C, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x80, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9,
-0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F,
-0x00, 0x22, 0xE4, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x93, 0x5D, 0xF0, 0xE0,
-0x54, 0xC0, 0x70, 0x18, 0x90, 0x93, 0x51, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0x53, 0x66, 0xFD,
-0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x14, 0x12, 0x52, 0x17, 0x80, 0x0F, 0x90, 0x93, 0x3D, 0xE0,
-0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x90, 0x93, 0x5D, 0xE0, 0x30,
-0xE6, 0x1B, 0x43, 0x66, 0x01, 0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64,
-0x0C, 0x60, 0x13, 0x12, 0x51, 0x48, 0x80, 0x0E, 0x12, 0x50, 0x77, 0x80, 0x09, 0x90, 0x93, 0x51,
-0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0xE4, 0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x5D, 0xE0, 0x30,
-0xE7, 0x2A, 0x43, 0x66, 0x02, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x4B, 0xE0, 0xF5, 0x49, 0xE4, 0xFB,
-0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90, 0x93,
-0x5A, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x53, 0x66, 0xFD, 0x22,
-0x8E, 0x25, 0x8F, 0x26, 0xAD, 0x26, 0xAC, 0x25, 0xAF, 0x24, 0x12, 0x47, 0xEB, 0xAF, 0x26, 0xAE,
-0x25, 0x90, 0x04, 0x80, 0xE0, 0x54, 0x0F, 0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x01, 0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, 0xAC, 0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0x44, 0xFA, 0xF0, 0x74, 0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
-0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
-0xE0, 0x44, 0x0F, 0xF0, 0x90, 0x04, 0x53, 0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51,
-0x74, 0xFF, 0xF0, 0x90, 0x04, 0x50, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xED, 0xF0, 0x22, 0x7D, 0x01, 0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x8F, 0x68, 0x8D, 0x69, 0xE5, 0x68, 0x54, 0x0F, 0xFF, 0xE5, 0x63, 0x54, 0x0F, 0x6F, 0x60, 0x72,
-0xE5, 0x68, 0x30, 0xE2, 0x30, 0xE5, 0x63, 0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x51, 0xA1, 0xE5,
-0x63, 0x30, 0xE3, 0x10, 0xE5, 0x68, 0x20, 0xE3, 0x0B, 0x12, 0x4D, 0x55, 0xEF, 0x60, 0x53, 0x12,
-0x51, 0xD4, 0x80, 0x4E, 0xE5, 0x63, 0x20, 0xE3, 0x49, 0xE5, 0x68, 0x30, 0xE3, 0x44, 0xAF, 0x69,
-0x12, 0x51, 0x86, 0x80, 0x3D, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x68, 0x20,
-0xE3, 0x09, 0x12, 0x4D, 0x55, 0xEF, 0x60, 0x2A, 0x12, 0x51, 0xD4, 0xE5, 0x63, 0x54, 0x0F, 0xFF,
-0xBF, 0x04, 0x0E, 0xE5, 0x68, 0x20, 0xE2, 0x09, 0x12, 0x48, 0x8F, 0xEF, 0x60, 0x14, 0x12, 0x51,
-0x1F, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x02, 0x09, 0x12, 0x4B, 0xF7, 0xEF, 0x60, 0x03, 0x12,
-0x52, 0x04, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x02, 0x4B, 0x35, 0x02, 0x52, 0xF4, 0xE4, 0x93, 0xA3,
-0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4,
-0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8,
-0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04,
-0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x4F, 0x75, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF,
-0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54,
-0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4,
-0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8,
-0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0xEF, 0x64, 0x01, 0x70, 0x3E, 0x7D,
-0x78, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x22, 0x90, 0x01, 0x36,
-0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F,
-0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x4A, 0x65, 0x90, 0x06,
-0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36,
-0x74, 0x7B, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x3A, 0x93, 0x7D, 0x02, 0x7F,
-0x03, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x06, 0x04, 0xE0, 0x44,
-0x80, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, 0xF0, 0x12, 0x4F, 0x28, 0xE5, 0x62, 0x20, 0xE0,
-0x05, 0xE4, 0x90, 0x93, 0x42, 0xF0, 0x22, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x10, 0x12, 0x51,
-0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x5C, 0xE5, 0x14,
-0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x50, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94,
-0x01, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x3F, 0x90, 0x02, 0x87, 0xE0, 0x60,
-0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x31, 0x90, 0x01, 0xAF, 0xE0, 0x60, 0x02, 0x80,
-0x07, 0x90, 0x02, 0x86, 0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x1A,
-0x90, 0x93, 0x43, 0xE0, 0x70, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x0C, 0x90, 0x01,
-0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x02, 0xF0,
-0x7F, 0x00, 0x22, 0xE5, 0x62, 0x64, 0x01, 0x70, 0x6B, 0xE5, 0x65, 0x60, 0x67, 0xE5, 0x65, 0x64,
-0x02, 0x60, 0x06, 0xE5, 0x65, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x93, 0x40,
-0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x93, 0x57, 0xF0, 0x90, 0x93, 0x40, 0xE0, 0x70, 0x07, 0x90,
-0x93, 0x57, 0xE0, 0xFF, 0x80, 0x05, 0x90, 0x93, 0x40, 0xE0, 0xFF, 0x90, 0x93, 0x40, 0xEF, 0xF0,
-0x90, 0x93, 0x42, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x93, 0x58,
-0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
-0x02, 0xF0, 0x53, 0x66, 0xFD, 0x53, 0x66, 0xEF, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80,
-0x03, 0x12, 0x49, 0x32, 0x22, 0x90, 0x93, 0xB1, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x91, 0x80, 0x0C,
-0x90, 0x93, 0xB1, 0xE0, 0x70, 0x04, 0x7D, 0xD4, 0x80, 0x02, 0x7D, 0x40, 0x7F, 0x93, 0x12, 0x54,
-0x0A, 0x90, 0x00, 0x29, 0xE0, 0x54, 0x3F, 0xFD, 0x7F, 0x29, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x28,
-0xE0, 0x54, 0xFC, 0xFD, 0x7F, 0x28, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x08, 0xE0, 0x44, 0x10, 0xFD,
-0x7F, 0x08, 0x12, 0x54, 0x0A, 0x7F, 0x01, 0x12, 0x4E, 0x81, 0x90, 0x00, 0x00, 0xE0, 0x44, 0x20,
-0xFD, 0xE4, 0xFF, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x20, 0xE0, 0x54, 0xFE, 0xFD, 0x7F, 0x20, 0x12,
-0x54, 0x0A, 0x90, 0x00, 0x90, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x54, 0x0A, 0x7F, 0x14,
-0x7E, 0x00, 0x02, 0x3B, 0x09, 0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0, 0x13, 0x90, 0x93, 0x1A, 0xE0,
-0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x18, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x49, 0x12,
-0x51, 0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x39, 0x90,
-0x93, 0x55, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x2B, 0x90, 0x93, 0x52,
-0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x1D, 0xE5, 0x64, 0x54, 0x0F, 0xD3,
-0x94, 0x04, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4,
-0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x7F, 0x00,
-0x22, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xC8, 0x12, 0x44, 0xF1, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8,
-0x12, 0x1E, 0xF6, 0xF5, 0x65, 0x14, 0x60, 0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03,
-0x70, 0x44, 0x7F, 0x01, 0x80, 0x3D, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12,
-0x1F, 0x0F, 0xFD, 0xE4, 0xFF, 0x12, 0x50, 0x39, 0x80, 0x29, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8,
-0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x01, 0x12, 0x50, 0x39, 0x1F, 0x80, 0x14, 0x90,
-0x93, 0x8A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x02, 0x12, 0x50,
-0x39, 0xE4, 0xFF, 0x12, 0x4B, 0x7A, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x24,
-0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x90,
-0x04, 0x1D, 0xE0, 0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x27, 0x74, 0xFF, 0xF0, 0x12, 0x5E,
-0x42, 0xBF, 0x01, 0x0D, 0x90, 0x93, 0xAA, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x1F, 0x12, 0x49,
-0xD0, 0x90, 0x05, 0x22, 0xE5, 0x27, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0xAA, 0xE0, 0xFF, 0x7D, 0x01,
-0x12, 0x58, 0x1F, 0x12, 0x49, 0xD0, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0x8F, 0x6C, 0xE4, 0x90, 0x94, 0x44, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00,
-0x30, 0xE7, 0x02, 0x7F, 0x01, 0xEF, 0x65, 0x6C, 0x60, 0x3E, 0xC3, 0x90, 0x94, 0x45, 0xE0, 0x94,
-0x88, 0x90, 0x94, 0x44, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x80, 0xF0,
-0x22, 0x90, 0x94, 0x44, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00, 0x12,
-0x3B, 0x09, 0xD3, 0x90, 0x94, 0x45, 0xE0, 0x94, 0x32, 0x90, 0x94, 0x44, 0xE0, 0x94, 0x00, 0x40,
-0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE0, 0xB2, 0x22, 0x90, 0x00, 0x20, 0xE0, 0x44, 0x01, 0xFD,
-0x7F, 0x20, 0x12, 0x54, 0x0A, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x00, 0xE0,
-0x54, 0xDF, 0xFD, 0xE4, 0xFF, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x28, 0xE0, 0x44, 0x03, 0xFD, 0x7F,
-0x28, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x08, 0xE0, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x54, 0x0A,
-0xE4, 0xFF, 0x12, 0x4E, 0x81, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x29, 0xE0,
-0x44, 0xC0, 0xFD, 0x7F, 0x29, 0x02, 0x54, 0x0A, 0xE4, 0xFF, 0x90, 0x00, 0x6A, 0xE0, 0x30, 0xE2,
-0x22, 0xE0, 0x30, 0xE0, 0x20, 0xE0, 0x30, 0xE1, 0x0D, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x02, 0x30,
-0xE3, 0x13, 0x7F, 0x03, 0x80, 0x0F, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x03, 0x30, 0xE3, 0x06, 0x7F,
-0x02, 0x80, 0x02, 0x7F, 0x03, 0xEF, 0xFD, 0xD3, 0x90, 0x93, 0x4E, 0xE0, 0x9D, 0x90, 0x93, 0x4D,
-0xE0, 0x94, 0x00, 0x50, 0x05, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0xA3, 0xE0,
-0x90, 0x05, 0x58, 0xF0, 0x22, 0x48, 0x93, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x48, 0x93, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x93, 0x9F, 0x00, 0x41,
-0x93, 0xAE, 0x00, 0x41, 0x93, 0x94, 0x00, 0x41, 0x94, 0x4C, 0x00, 0x41, 0x93, 0x13, 0x00, 0x41,
-0x93, 0x14, 0x00, 0x41, 0x92, 0x69, 0x00, 0x41, 0x92, 0x6A, 0x00, 0x41, 0x92, 0x68, 0x00, 0x41,
-0x94, 0x3D, 0x00, 0x41, 0x94, 0x4A, 0x00, 0x00, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
-0x93, 0x56, 0x74, 0x01, 0xF0, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x94, 0x31, 0x12,
-0x1F, 0xC9, 0x90, 0x94, 0x31, 0x12, 0x43, 0x84, 0xEC, 0x44, 0x02, 0xFC, 0x90, 0x94, 0x31, 0x12,
-0x1F, 0xC9, 0x90, 0x94, 0x31, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00,
-0x7E, 0x08, 0x12, 0x34, 0x30, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50,
-0x02, 0x80, 0x35, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x2E, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09,
-0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x12, 0x9B, 0x79, 0x90, 0x93, 0x59, 0xE0,
-0x60, 0x06, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x0D, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
-0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x22, 0xEF, 0x14, 0x60, 0x09, 0x14, 0x60, 0x16,
-0x24, 0x02, 0x70, 0x32, 0x80, 0x0A, 0x90, 0x93, 0x57, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x40, 0xF0,
-0xE4, 0x90, 0x93, 0x5C, 0xF0, 0x22, 0xED, 0x70, 0x0A, 0x90, 0x93, 0x50, 0xE0, 0x90, 0x93, 0x57,
-0xF0, 0x80, 0x05, 0x90, 0x93, 0x57, 0xED, 0xF0, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x93, 0x40, 0xF0,
-0x90, 0x93, 0x5C, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
-0x08, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C,
-0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02,
-0xF0, 0x90, 0x93, 0x52, 0x14, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x0C, 0x50, 0x03, 0x12,
-0x4A, 0x65, 0x22, 0x90, 0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00,
-0xFF, 0xEC, 0x3E, 0x90, 0x93, 0x3E, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x01, 0x04, 0xE0, 0x54, 0x0F,
-0xFF, 0x74, 0x40, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
-0xF9, 0x90, 0x93, 0x54, 0xF0, 0xEE, 0x90, 0x93, 0x53, 0xF0, 0x22, 0xEF, 0x70, 0x0B, 0x90, 0x93,
-0xB0, 0xE0, 0x90, 0x94, 0x35, 0x60, 0x0B, 0x80, 0x12, 0x90, 0x93, 0xB0, 0xE0, 0x90, 0x94, 0x35,
-0x60, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x02, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00,
-0x01, 0x10, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x35, 0x7F, 0x60, 0x7E, 0x08, 0x02, 0x55, 0x6B, 0x90,
-0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x5E, 0x42, 0xEF, 0x70,
-0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93, 0x12, 0x54,
-0x62, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x90, 0x93, 0x46, 0xE0, 0x70, 0x1A, 0x90, 0x04,
-0x1D, 0xE0, 0x70, 0x14, 0x90, 0x93, 0xA9, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x58, 0x1F, 0x8E, 0x6A,
-0x8F, 0x6B, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0x47, 0xE0, 0x60, 0x16, 0x90,
-0x93, 0x4A, 0xE0, 0x70, 0x10, 0x90, 0x93, 0x44, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74, 0x0D,
-0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF, 0xF0, 0xEF, 0x60, 0x0A,
-0xE5, 0x62, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x4E, 0x27, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x0C,
-0x22, 0x90, 0x94, 0x4D, 0xEF, 0xF0, 0x12, 0x98, 0x8F, 0x90, 0x94, 0x4D, 0xE0, 0x60, 0x05, 0x90,
-0x05, 0x22, 0xE4, 0xF0, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4,
-0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60,
-0x02, 0x7F, 0x00, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x05,
-0x7F, 0x01, 0x12, 0x4E, 0x27, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0xE5, 0x64, 0x30, 0xE6,
-0x12, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0x90, 0x01, 0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0,
-0x53, 0x64, 0xBF, 0x22, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x01, 0x12, 0x4C, 0xE5, 0x12, 0x4E, 0xD9,
-0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x7D, 0x01, 0xAF, 0x64, 0x02, 0x4A, 0x69, 0x90, 0x02,
-0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12, 0x43,
-0xF7, 0x52, 0x49, 0x00, 0x40, 0x52, 0x71, 0x00, 0x80, 0x52, 0x9C, 0x01, 0x00, 0x52, 0xB0, 0x02,
-0x00, 0x52, 0xC8, 0x04, 0x00, 0x00, 0x00, 0x52, 0xE5, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE, 0xFF,
-0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06, 0xCE,
-0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x80,
-0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF, 0x2D,
-0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x07,
-0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04, 0xFE,
-0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80, 0x35,
-0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF, 0x2D,
-0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE, 0xFF,
-0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D, 0x00,
-0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x21, 0xF0,
-0xA3, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x75, 0xF0, 0xA3, 0xF0, 0xF1, 0x9F, 0x75, 0x8E, 0x02,
-0xB1, 0x34, 0xF1, 0xBF, 0x90, 0x93, 0xB1, 0xEF, 0xF0, 0xF1, 0xA7, 0x90, 0x93, 0xB3, 0xEF, 0xF0,
-0x12, 0x60, 0x3E, 0x90, 0x93, 0x95, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x14, 0xF5, 0x09,
-0xF5, 0x62, 0x90, 0x93, 0xB0, 0xF0, 0x90, 0x00, 0xCC, 0xE0, 0x54, 0xF7, 0xF0, 0x12, 0x88, 0x65,
-0x12, 0x47, 0x33, 0x12, 0x37, 0x1C, 0xF1, 0xB3, 0x71, 0xE1, 0x12, 0x60, 0x02, 0xF1, 0xD2, 0xF1,
-0x98, 0x12, 0x60, 0x20, 0x12, 0x44, 0xFD, 0x12, 0x60, 0xAC, 0xB1, 0x1C, 0x90, 0x93, 0x77, 0xE5,
-0xD9, 0xF0, 0xC2, 0xAF, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40, 0xF0, 0x91, 0x52, 0x75, 0xE8, 0x03,
-0x43, 0xA8, 0x85, 0x12, 0x96, 0x00, 0xD2, 0xAF, 0x51, 0xEA, 0x12, 0x60, 0x56, 0x90, 0x93, 0x75,
-0xE0, 0x64, 0x01, 0xF0, 0x24, 0xF4, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x52, 0xA3, 0xF0, 0xE5, 0x14,
-0x30, 0xE0, 0x09, 0xC2, 0xAF, 0x53, 0x14, 0xFE, 0xB1, 0x44, 0xD2, 0xAF, 0xE5, 0x14, 0x30, 0xE4,
-0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xEF, 0xD2, 0xAF, 0x12, 0x6F, 0xBB, 0xE5, 0x14, 0x30, 0xE6, 0x0A,
-0xC2, 0xAF, 0x53, 0x14, 0xBF, 0xD2, 0xAF, 0x12, 0x80, 0x62, 0xE5, 0x14, 0x30, 0xE7, 0x09, 0xC2,
-0xAF, 0x53, 0x14, 0x7F, 0xD2, 0xAF, 0xB1, 0xD2, 0xC2, 0xAF, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0xBF,
-0x01, 0x0D, 0x90, 0x93, 0x43, 0x74, 0x01, 0xF0, 0x51, 0x17, 0xE4, 0x90, 0x93, 0x43, 0xF0, 0xD2,
-0xAF, 0x90, 0x01, 0xBD, 0xE5, 0x63, 0xF0, 0x90, 0x93, 0x59, 0xE0, 0x90, 0x01, 0xBC, 0xF0, 0x80,
-0x8C, 0x90, 0x01, 0x3C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3,
-0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x54, 0x91, 0x0A, 0x7D, 0xFF, 0x7F, 0x55, 0x91, 0x0A,
-0x7D, 0xFF, 0x7F, 0x56, 0x91, 0x0A, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
-0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xED, 0xF0, 0x91, 0x52, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
-0x01, 0x30, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0,
-0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x91, 0x0A, 0xE4, 0xFD, 0x7F, 0x51, 0x91, 0x0A, 0xE4,
-0xFD, 0x7F, 0x52, 0x91, 0x0A, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0x90, 0x00, 0x02, 0xE0, 0x44,
-0x01, 0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xF2, 0x12, 0x1F, 0xD5, 0x00,
-0x00, 0x00, 0x00, 0x90, 0x93, 0xF6, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x02,
-0xE0, 0x54, 0xFE, 0xF0, 0x91, 0x52, 0x91, 0x4B, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x90,
-0x01, 0x00, 0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20,
-0xF0, 0x90, 0x93, 0x4A, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x3D,
-0xE0, 0x60, 0x34, 0xE4, 0x90, 0x93, 0x56, 0xF0, 0xFF, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93,
-0xF2, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF2, 0x12, 0x43, 0x84, 0xEC, 0x54, 0xFD, 0xFC, 0x90, 0x93,
-0xF2, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF2, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9,
-0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x47, 0xE0, 0x60, 0x22, 0xE4, 0xFF, 0x11,
-0xEB, 0x90, 0x93, 0x5B, 0xE0, 0x60, 0x12, 0x90, 0x93, 0xF6, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03,
-0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xF6, 0xB1, 0x67, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90,
-0x93, 0x51, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x94, 0x3E, 0xE0,
-0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x94, 0x40, 0xF0, 0x90, 0x94, 0x3E, 0xE0, 0x54, 0x7F, 0xF0, 0xA3,
-0x74, 0x0A, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0xAD, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD,
-0x7F, 0x80, 0x81, 0x0A, 0xE4, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x6B, 0x12, 0x73, 0x5E, 0xEF, 0xB4,
-0x02, 0x14, 0x90, 0x94, 0x4A, 0xE0, 0x64, 0x04, 0x60, 0x07, 0x43, 0x14, 0x01, 0xE0, 0x04, 0xF0,
-0x22, 0xE4, 0x90, 0x94, 0x4A, 0xF0, 0x22, 0x7F, 0x70, 0x7E, 0x08, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
-0xC0, 0xD0, 0xEF, 0x54, 0xFC, 0xFF, 0x90, 0x01, 0xE8, 0xF0, 0xEE, 0x44, 0xF0, 0xA3, 0xF0, 0x90,
-0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEC, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90,
-0x01, 0xED, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEE, 0xF0, 0x12, 0x1E, 0xF6,
-0x90, 0x01, 0xEF, 0xF0, 0x90, 0x01, 0xEB, 0x74, 0x40, 0xF0, 0x12, 0x97, 0x34, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0x90, 0x93, 0x04, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x16, 0xEF, 0x7B, 0x01, 0xB4, 0x01,
-0x06, 0x7A, 0x93, 0x79, 0x0B, 0x80, 0x04, 0x7A, 0x93, 0x79, 0x07, 0x7F, 0x80, 0x7E, 0x08, 0xB1,
-0x6B, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1, 0x40, 0xEF, 0x60, 0x4E, 0x90, 0x92,
-0x69, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6E, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01,
-0xC0, 0x02, 0xC0, 0x01, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74, 0x92, 0x35, 0xF0,
-0xFA, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0xD0, 0x01, 0xD0, 0x02, 0xD1, 0x31, 0x90, 0x92, 0x69,
-0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92,
-0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x10, 0x12, 0x43, 0xC8, 0x90, 0x92,
-0x68, 0xE0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0xF1, 0x40, 0xEF, 0x70, 0x02, 0xC1, 0xEC, 0x90,
-0x94, 0x10, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x75, 0x23, 0x02, 0x7B, 0x01,
-0x7A, 0x01, 0x79, 0xA0, 0xD1, 0xF1, 0x90, 0x94, 0x13, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21,
-0x89, 0x22, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5,
-0x23, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2, 0xD1, 0xF1, 0x90, 0x01, 0xAF, 0x74, 0xFF, 0xF0, 0x90,
-0x93, 0xB1, 0xE0, 0x64, 0x01, 0x70, 0x48, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A,
-0x21, 0x89, 0x22, 0x75, 0x23, 0x02, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x20, 0xD1, 0xF1, 0x90, 0x94,
-0x13, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8,
-0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x22, 0xD1,
-0xF1, 0x90, 0x93, 0x95, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0x74, 0xFF, 0xF0, 0x90,
-0x92, 0x68, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x94,
-0x0A, 0x12, 0x43, 0xC8, 0xAB, 0x20, 0xAA, 0x21, 0xA9, 0x22, 0x90, 0x94, 0x0D, 0x12, 0x43, 0xC8,
-0xAF, 0x23, 0x15, 0x23, 0xEF, 0x60, 0x1E, 0x90, 0x94, 0x0D, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43,
-0xB1, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x94, 0x0A, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0xEF,
-0x12, 0x42, 0x53, 0x80, 0xDB, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9, 0x1F, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0x7F, 0xAF, 0x7E, 0x01, 0x90, 0x94, 0x39, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3,
-0xF0, 0x90, 0x94, 0x39, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C, 0xC3,
-0x90, 0x94, 0x3C, 0xE0, 0x94, 0xE8, 0x90, 0x94, 0x3B, 0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01,
-0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x94, 0x3B, 0xE4, 0x75, 0xF0, 0x01, 0x12,
-0x42, 0x87, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x80, 0xC6, 0x7F, 0x01, 0x22, 0x8F, 0x82,
-0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x64, 0x74, 0x20, 0xF0, 0x22, 0x90,
-0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30, 0xE3, 0x02,
-0x7F, 0x01, 0x22, 0xE4, 0x90, 0x92, 0x69, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xAF, 0xF0, 0x22, 0x90,
-0x00, 0xF4, 0xE0, 0x20, 0xE3, 0x09, 0xE0, 0x7F, 0x01, 0x20, 0xE2, 0x05, 0x7F, 0x02, 0x22, 0x7F,
-0x00, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74, 0x10, 0xF0, 0x90,
-0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01,
-0xC4, 0x74, 0xE7, 0xF0, 0x74, 0x57, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05,
-0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7,
-0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3,
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF,
-0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x0E, 0x74, 0x0F,
-0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0,
-0x54, 0xEF, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x3F, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0xFD,
-0x62, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x93, 0x67, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x54, 0x3F, 0x25,
-0xE0, 0x25, 0xE0, 0xFF, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x93, 0x68, 0xF0, 0x90,
-0x93, 0x67, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xE4, 0xFF, 0x90, 0x94, 0x1C, 0xEF, 0xF0, 0xA3, 0xED,
-0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x19, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x94,
-0x21, 0xF0, 0xD1, 0x3C, 0xBF, 0x01, 0x02, 0x11, 0xEC, 0x90, 0x94, 0x21, 0xE0, 0x90, 0x05, 0x22,
-0xF0, 0x80, 0x02, 0x11, 0xEC, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0xAC, 0xE0,
-0xFF, 0x7D, 0x01, 0x11, 0x1F, 0x90, 0x94, 0x1F, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90,
-0x94, 0x1C, 0xE0, 0xFF, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x94, 0x2B, 0xF0, 0xEF, 0x60, 0x10,
-0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x0E,
-0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05,
-0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x74, 0x11,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05, 0x74, 0x16,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x02, 0xF0, 0x74, 0x16, 0x2F, 0xF5,
-0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0x03, 0xF0, 0xAE, 0x05, 0x74, 0x22, 0x2E, 0xF5,
-0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEB, 0xF0, 0x90, 0x94, 0x2B, 0xE0, 0xFF, 0x74, 0x23, 0x2E,
-0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x63, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0x12, 0x9B, 0xA7, 0x90, 0x93, 0x27, 0xE0,
-0x64, 0x01, 0x60, 0x02, 0x41, 0xAE, 0x90, 0x93, 0x1A, 0xE0, 0x30, 0xE0, 0x18, 0xE0, 0xC3, 0x13,
-0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90, 0x93, 0x1A, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x06, 0xA3,
-0xE0, 0x90, 0x93, 0x63, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x63, 0xE0, 0x24, 0x03, 0xF5, 0x49,
-0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0,
-0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x27, 0x30, 0xE0, 0x05, 0x74, 0x05, 0xF0,
-0x80, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F,
-0x90, 0x93, 0x16, 0xE0, 0xFF, 0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90,
-0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x54, 0x07, 0x30, 0xE0, 0x6E, 0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25,
-0xE0, 0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xB9,
-0x80, 0x51, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0,
-0x54, 0xDF, 0xF0, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x30, 0xE0, 0x27, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB,
-0xF0, 0xE4, 0x90, 0x93, 0x2A, 0xF0, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x06, 0xF0,
-0x90, 0x93, 0x4C, 0xE0, 0x60, 0x07, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22,
-0x74, 0x6F, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0xA1, 0xAC, 0x90, 0x93,
-0x27, 0xE0, 0x64, 0x02, 0x60, 0x02, 0x61, 0x8D, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54,
-0x3F, 0x30, 0xE0, 0x08, 0xD1, 0x3C, 0xBF, 0x01, 0x03, 0x12, 0x54, 0x62, 0xE4, 0xFF, 0xD1, 0xE6,
-0x90, 0x93, 0x1A, 0xE0, 0x30, 0xE0, 0x1F, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90,
-0x93, 0x1A, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x90, 0x93, 0x63, 0xF0, 0x90,
-0x93, 0x1A, 0xE0, 0x54, 0xEF, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x16, 0xE0, 0x24, 0x03, 0xFF,
-0x90, 0x93, 0x63, 0xE0, 0x2F, 0xFF, 0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0xFF, 0x90, 0x93, 0x64,
-0xE0, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
-0x63, 0x74, 0x05, 0xF0, 0xE4, 0xFF, 0xD1, 0x83, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x93,
-0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80,
-0x2F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4,
-0x13, 0x54, 0x07, 0x20, 0xE0, 0x14, 0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x80, 0x0B, 0xE5,
-0x65, 0x60, 0x0D, 0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0,
-0x90, 0x93, 0x18, 0xE0, 0x30, 0xE0, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0,
-0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0xC1, 0x36, 0x90, 0x93, 0x27,
-0xE0, 0x64, 0x03, 0x60, 0x02, 0x81, 0xE1, 0x7F, 0x01, 0xD1, 0xE6, 0x90, 0x93, 0x19, 0xE0, 0xFF,
-0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x98, 0x8F, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x20, 0xE0, 0x02, 0x81, 0x3D, 0x90, 0x93, 0x1F, 0xE0, 0xFF, 0x90, 0x93, 0x29,
-0xE0, 0xD3, 0x9F, 0x40, 0x4D, 0xE0, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0xFE,
-0xC3, 0xEF, 0x9E, 0xFF, 0x24, 0x03, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x93, 0x17, 0xE0, 0xD3, 0x9D,
-0xEC, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x40, 0x08, 0xE0, 0x9F, 0x90, 0x93, 0x66, 0xF0, 0x80,
-0x06, 0x90, 0x93, 0x66, 0x74, 0x03, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x66, 0xE0, 0xF5, 0x49,
-0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0,
-0x80, 0x24, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x22, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60,
-0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x1D, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x27, 0xF0,
-0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x29, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48,
-0x90, 0x93, 0x65, 0xE0, 0xFF, 0x90, 0x93, 0x17, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD,
-0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x63,
-0x74, 0x05, 0xF0, 0x7F, 0x01, 0xD1, 0x83, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20,
-0xE0, 0x2F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1A, 0x90, 0x93, 0x1A, 0xE0,
-0x44, 0x20, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x02, 0x80, 0x0F, 0x90, 0x05, 0x22, 0xE4, 0xF0,
-0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x08, 0xE5, 0x65, 0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A,
-0x69, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90,
-0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0x13,
-0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x51, 0x48, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93,
-0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0x7F, 0x01, 0xC1,
-0x38, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x04, 0x60, 0x02, 0xA1, 0xB2, 0xF5, 0x48, 0x75, 0x49, 0x03,
-0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90,
-0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F,
-0x90, 0x93, 0x17, 0xE0, 0xFF, 0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90,
-0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x54, 0x07, 0x30, 0xE0, 0x6E, 0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25,
-0xE0, 0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xB9,
-0x80, 0x51, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0,
-0x54, 0xDF, 0xF0, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x30, 0xE0, 0x27, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB,
-0xF0, 0xE4, 0x90, 0x93, 0x2A, 0xF0, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x07, 0xF0,
-0x90, 0x93, 0x4C, 0xE0, 0x60, 0x07, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22,
-0x74, 0x6F, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0x90, 0x05, 0x22, 0xE4,
-0xF0, 0x22, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x05, 0x60, 0x02, 0xC1, 0x3B, 0x90, 0x93, 0x19, 0xE0,
-0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x08, 0xD1, 0x3C, 0xBF, 0x01, 0x03, 0x12, 0x54, 0x62,
-0xE4, 0xFF, 0xD1, 0xE6, 0xD1, 0x83, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4,
-0x13, 0x54, 0x07, 0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F, 0x90, 0x93,
-0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07,
-0x20, 0xE0, 0x14, 0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x80, 0x0B, 0xE5, 0x65, 0x60, 0x0D,
-0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x18,
-0xE0, 0x30, 0xE0, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13,
-0x13, 0x54, 0x01, 0x30, 0xE0, 0x05, 0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x22, 0x90, 0x05, 0x22, 0x74,
-0xFF, 0xF0, 0xE4, 0x90, 0x94, 0x48, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3,
-0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90,
-0x94, 0x49, 0xE0, 0x94, 0xE8, 0x90, 0x94, 0x48, 0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22,
-0x7F, 0x32, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x94, 0x48, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42,
-0x87, 0x80, 0xC6, 0x90, 0x94, 0x2C, 0xEF, 0xF0, 0x12, 0x9D, 0x50, 0x90, 0x93, 0x18, 0xE0, 0xFF,
-0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x08, 0x90, 0x94, 0x2C, 0xE0, 0xFF, 0x12, 0x50, 0xEB, 0x90,
-0x94, 0x2D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x90, 0x94, 0x2C, 0xE0, 0xB4, 0x01, 0x10,
-0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x16, 0x80, 0x0A,
-0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90, 0x94, 0x2D, 0x12, 0x1F, 0xD5,
-0x00, 0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x2D, 0x12, 0x55, 0x67, 0x90, 0x94, 0x2C,
-0xE0, 0x90, 0x93, 0x26, 0xF0, 0x22, 0xEF, 0x64, 0x03, 0x60, 0x02, 0xE1, 0xB4, 0x90, 0x94, 0x02,
-0x74, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0x13, 0x13, 0x13,
-0x54, 0x1F, 0x30, 0xE0, 0x30, 0x90, 0x94, 0x06, 0x74, 0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0, 0xA3,
-0x74, 0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0,
-0x41, 0x90, 0x94, 0x02, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3,
-0x74, 0x55, 0xF0, 0x80, 0x2D, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x17, 0x90,
-0x94, 0x02, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55,
-0xF0, 0xA3, 0x74, 0x5A, 0x80, 0x05, 0x90, 0x94, 0x06, 0x74, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0xA3, 0xF0, 0x90, 0x94, 0x02, 0xE0, 0x90, 0x06, 0xC0, 0xF0, 0x90, 0x94, 0x03, 0xE0, 0x90, 0x06,
-0xC1, 0xF0, 0x90, 0x94, 0x04, 0xE0, 0x90, 0x06, 0xC2, 0xF0, 0x90, 0x94, 0x05, 0xE0, 0x90, 0x06,
-0xC3, 0xF0, 0x90, 0x94, 0x06, 0xE0, 0x90, 0x06, 0xC4, 0xF0, 0x90, 0x94, 0x07, 0xE0, 0x90, 0x06,
-0xC5, 0xF0, 0x90, 0x94, 0x08, 0xE0, 0x90, 0x06, 0xC6, 0xF0, 0x90, 0x94, 0x09, 0xE0, 0x90, 0x06,
-0xC7, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x06, 0xCC, 0x30, 0xE0,
-0x17, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xEF, 0x90,
-0x06, 0xCC, 0xB4, 0x01, 0x03, 0xE4, 0xF0, 0x22, 0x74, 0x03, 0xF0, 0x22, 0x12, 0x57, 0xE7, 0xBF,
-0x01, 0x0F, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x1F, 0x90, 0x04, 0x1F, 0x74, 0x20,
-0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC, 0xEF, 0x30, 0xE0, 0x02,
-0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5, 0x2B, 0x90, 0x01, 0x30,
-0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3, 0xE5, 0x2B, 0xF0, 0x22,
-0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32, 0x43, 0x32, 0x20, 0x90,
-0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32, 0xF0, 0x22, 0x90, 0x93,
-0xB3, 0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E, 0xFD, 0x7F, 0x33,
-0x22, 0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0xE4, 0x90, 0x93, 0x78, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x98,
-0xE0, 0x7F, 0x00, 0x30, 0xE4, 0x02, 0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E, 0xC3, 0x90, 0x93,
-0x79, 0xE0, 0x94, 0x88, 0x90, 0x93, 0x78, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0,
-0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0x78, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14,
-0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0x79, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x78, 0xE0,
-0x94, 0x00, 0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0x90, 0x01, 0x01, 0xE0,
-0x44, 0x04, 0xF0, 0x90, 0x01, 0x9C, 0x74, 0x7E, 0xF0, 0xA3, 0x74, 0x92, 0xF0, 0xA3, 0x74, 0xA0,
-0xF0, 0xA3, 0x74, 0x24, 0xF0, 0x90, 0x01, 0x9B, 0x74, 0x49, 0xF0, 0x90, 0x01, 0x9A, 0x74, 0xE0,
-0xF0, 0x90, 0x01, 0x99, 0xE4, 0xF0, 0x90, 0x01, 0x98, 0x04, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0,
-0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04,
-0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x93, 0x5D, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01,
-0x80, 0x18, 0xEE, 0x64, 0x01, 0x60, 0x07, 0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3C, 0x90, 0x93,
-0x5D, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x3D, 0xF0, 0x79, 0x40, 0x90, 0x93, 0x5D, 0xE0, 0xFE, 0xA3,
-0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x93, 0x9F,
-0xF0, 0x22, 0x90, 0x93, 0x9F, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0C, 0xE4, 0xF0,
-0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x5F, 0xCC, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0,
-0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03,
-0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x4B, 0xF0, 0x74, 0x61,
-0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x28, 0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D,
-0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E, 0xA3, 0xE0, 0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0,
-0x02, 0x61, 0x45, 0x90, 0x01, 0x34, 0x74, 0x01, 0xF0, 0x85, 0xD1, 0x0A, 0x85, 0xD3, 0x0C, 0x85,
-0xD4, 0x0D, 0x85, 0xD5, 0x0E, 0x85, 0xD6, 0x0F, 0x85, 0xD7, 0x10, 0x85, 0xD9, 0x11, 0x85, 0xD2,
-0x0B, 0x75, 0x20, 0x00, 0x75, 0x21, 0x00, 0x75, 0x22, 0x0A, 0x75, 0x23, 0x08, 0xFB, 0x7A, 0x93,
-0x79, 0xA0, 0x12, 0x56, 0xF1, 0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x01, 0xFE, 0xEF,
-0xC4, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x70, 0x02, 0x41, 0xF0, 0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4,
-0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0x41, 0xF0, 0xEF, 0x54, 0x1F, 0xF5, 0x4D, 0x90,
-0x93, 0xA2, 0xE0, 0x54, 0x3F, 0xF5, 0x4E, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D,
-0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42,
-0x87, 0xE5, 0x4E, 0xD3, 0x94, 0x04, 0x40, 0x03, 0x75, 0x4E, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x4D,
-0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xE0, 0xFE,
-0xA3, 0xE0, 0xFF, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0,
-0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43,
-0x9C, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0xA1, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0,
-0x2F, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82,
-0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0xA3, 0xE0, 0xFF,
-0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x67, 0xAF, 0x4D, 0x12, 0x7A, 0xA1, 0x80, 0x60,
-0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x53, 0x90, 0x93, 0xA4,
-0xE0, 0x54, 0x1F, 0xFF, 0xFD, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D,
-0xF5, 0x83, 0xE4, 0x8D, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0xA3, 0xE0, 0xFE, 0xC4, 0x13, 0x13,
-0x13, 0x54, 0x01, 0x30, 0xE0, 0x0F, 0xEE, 0x54, 0x7F, 0xFD, 0x8F, 0x55, 0xAB, 0x4E, 0xAF, 0x4D,
-0x12, 0x7A, 0x3D, 0x80, 0x1B, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x11, 0x90,
-0x04, 0x30, 0xE0, 0xB4, 0x01, 0x0A, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x04, 0xCF, 0xF0,
-0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x46, 0x90, 0x93, 0x59, 0xE0, 0x60, 0x37, 0x90,
-0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x12, 0x51, 0xBB, 0xEF, 0x64, 0x01,
-0x70, 0x2D, 0xF5, 0x48, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E,
-0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0,
-0x90, 0x93, 0x55, 0xF0, 0x80, 0x09, 0x12, 0x51, 0xBB, 0xBF, 0x01, 0x03, 0x12, 0x52, 0x17, 0x90,
-0x94, 0x4B, 0xE0, 0x04, 0xF0, 0xE5, 0x2C, 0x20, 0xE1, 0x02, 0x61, 0xE7, 0x90, 0x01, 0x34, 0x74,
-0x02, 0xF0, 0x90, 0xFD, 0x10, 0x74, 0x7F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x30, 0xE5, 0x0B, 0x75,
-0x4F, 0x88, 0x75, 0x50, 0x0F, 0x75, 0x51, 0x0F, 0x80, 0x09, 0x75, 0x4F, 0xC0, 0x75, 0x50, 0x08,
-0x75, 0x51, 0x07, 0x90, 0x04, 0x7F, 0xE0, 0x55, 0x51, 0xF5, 0x12, 0x90, 0x04, 0x7E, 0xE0, 0x55,
-0x51, 0xF5, 0x13, 0x65, 0x12, 0x60, 0x60, 0xE4, 0xFF, 0xE5, 0x12, 0x75, 0xF0, 0x08, 0xA4, 0x25,
-0x4F, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x15, 0x2F,
-0xF8, 0xA6, 0x06, 0x0F, 0xBF, 0x08, 0xE2, 0x75, 0x20, 0x00, 0x75, 0x21, 0x00, 0x75, 0x22, 0x15,
-0x75, 0x23, 0x08, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x97, 0x12, 0x56, 0xF1, 0x90, 0x93, 0x97, 0xE0,
-0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0xD1, 0x6A, 0xE5, 0x12, 0x24, 0x01,
-0xFF, 0xE4, 0x33, 0xFE, 0xAD, 0x50, 0x7C, 0x00, 0x12, 0x1F, 0x4E, 0xAF, 0x05, 0x8F, 0x12, 0x90,
-0x04, 0x7F, 0xEF, 0xF0, 0xB5, 0x13, 0xA0, 0xE5, 0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x34, 0x74,
-0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90, 0x01, 0x34, 0x74, 0x10, 0xF0, 0x43, 0x14, 0x10,
-0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF, 0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54, 0xDF, 0xF0,
-0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8, 0x00, 0x75, 0xE8, 0x00, 0x12, 0x54, 0x1F, 0x90,
-0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x54, 0x52, 0x80, 0xFE, 0xE5, 0x2C, 0x30, 0xE6, 0x06,
-0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0x81, 0xF1, 0x90, 0x93, 0xB2,
-0x74, 0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x93, 0xAF, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90,
-0x05, 0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x12, 0x45, 0x09, 0x90,
-0x93, 0x2D, 0xE0, 0x20, 0xE0, 0x02, 0x81, 0xE6, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF,
-0x12, 0x50, 0xEB, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00,
-0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x13,
-0x54, 0x07, 0xFF, 0xE0, 0xFE, 0xC3, 0x13, 0x54, 0x0F, 0xC3, 0x9F, 0x40, 0x30, 0xE0, 0x54, 0xFE,
-0xF0, 0xE0, 0x54, 0xE1, 0xF0, 0x90, 0x93, 0x32, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F,
-0xC9, 0x7F, 0x60, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x2E, 0x12, 0x43, 0x84, 0x90, 0x81,
-0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x80, 0x1C, 0x90, 0x93, 0x2D,
-0xE0, 0xFF, 0xC3, 0x13, 0x54, 0x0F, 0xFE, 0xEF, 0x54, 0xE1, 0xFF, 0xEE, 0x04, 0x54, 0x0F, 0xFE,
-0x25, 0xE0, 0x4F, 0xF0, 0x80, 0x03, 0x12, 0x6B, 0x40, 0x12, 0x6B, 0x09, 0x90, 0x93, 0xB2, 0xE4,
-0xF0, 0xE5, 0x2E, 0x30, 0xE1, 0x45, 0x90, 0x01, 0x36, 0x74, 0x02, 0xF0, 0x43, 0x14, 0x40, 0x12,
-0x9D, 0xA9, 0x11, 0xDC, 0x90, 0x93, 0x5C, 0xE0, 0x60, 0x1D, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4,
-0x16, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90,
-0x93, 0x57, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x05, 0x08, 0xE5, 0x08, 0xC3, 0x94, 0xFF, 0x40, 0x0B,
-0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x43,
-0x90, 0x01, 0x36, 0x74, 0x04, 0xF0, 0x12, 0x4C, 0x73, 0x90, 0x93, 0x5C, 0xE0, 0x60, 0x34, 0x90,
-0x93, 0x57, 0xE0, 0xFF, 0x90, 0x93, 0x40, 0xE0, 0x6F, 0x70, 0x28, 0x90, 0x93, 0x57, 0xE0, 0x90,
-0x05, 0x73, 0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x7D,
-0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93, 0x40,
-0xE0, 0x14, 0xF0, 0xE5, 0x2E, 0x30, 0xE3, 0x34, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0, 0xE5, 0x62,
-0x64, 0x01, 0x70, 0x28, 0xE5, 0x65, 0x60, 0x24, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C,
-0x74, 0x02, 0xF0, 0x75, 0x48, 0x00, 0x90, 0x93, 0x4B, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F,
-0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4,
-0x2B, 0x90, 0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x20, 0xE5, 0x65, 0x60, 0x1C,
-0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x5A, 0xE4, 0xF0,
-0x53, 0x66, 0xFD, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x52, 0x17, 0xE5, 0x2E, 0x30, 0xE5,
-0x25, 0x90, 0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x1A, 0xE5, 0x65, 0x60, 0x16,
-0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64, 0x0C, 0x60, 0x08, 0x12, 0x51,
-0x48, 0x80, 0x03, 0x12, 0x50, 0x77, 0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40,
-0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x10, 0xE5, 0x65, 0x60, 0x0C, 0x53, 0x66, 0xFE, 0xE5, 0x66, 0x54,
-0x07, 0x70, 0x03, 0x12, 0x52, 0x17, 0xE5, 0x2F, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x37, 0x74, 0x02,
-0xF0, 0x12, 0x4F, 0xFA, 0x74, 0x4B, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0xD0,
-0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0,
-0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x93, 0x5D, 0xE0, 0x54, 0xF0,
-0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x15, 0x90, 0x94,
-0x19, 0x12, 0x43, 0xC8, 0x0B, 0x7A, 0x93, 0x79, 0x5D, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x90, 0x94, 0x16, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92, 0x69, 0xE0, 0xB5,
-0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x90, 0x92, 0x69, 0xE0, 0x70, 0x06, 0xA3,
-0xE0, 0x64, 0x09, 0x60, 0x0B, 0x90, 0x92, 0x69, 0xE0, 0x14, 0xFF, 0xA3, 0xE0, 0xB5, 0x07, 0x0F,
-0x12, 0x57, 0x40, 0xEF, 0x60, 0x72, 0x12, 0x55, 0xD2, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x90,
-0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6E, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xA8, 0x01,
-0xFC, 0x7D, 0x01, 0x90, 0x94, 0x16, 0x12, 0x43, 0xA8, 0x7E, 0x00, 0x7F, 0x02, 0x12, 0x1E, 0xD0,
-0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA,
-0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x94, 0x19, 0x12, 0x43, 0xA8, 0x8B, 0x20,
-0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x16, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54,
-0x0F, 0xF5, 0x23, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x56, 0xF1, 0x90, 0x92, 0x6A, 0xE0,
-0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAD, 0x07, 0x90,
-0x93, 0x63, 0xE0, 0x54, 0xF0, 0x44, 0x05, 0xF0, 0x54, 0x0F, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x65,
-0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x65, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93,
-0x79, 0x63, 0xC1, 0x89, 0xAD, 0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x07, 0xF0, 0x54,
-0x0F, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x6E, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90,
-0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0xC1, 0x89, 0xAD, 0x07, 0x90, 0x93, 0x6C,
-0xE0, 0x54, 0xF0, 0x44, 0x09, 0xF0, 0x54, 0x0F, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x6E, 0xEF, 0xF0,
-0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C,
-0xC1, 0x89, 0x90, 0x93, 0x8F, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x92, 0xE0, 0x54, 0xF0, 0x44, 0x02,
-0xF0, 0x54, 0x0F, 0x44, 0xC0, 0xF0, 0x90, 0x93, 0x8F, 0x12, 0x43, 0xA8, 0x90, 0x94, 0x19, 0x12,
-0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x92, 0xC1, 0x89, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82,
-0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x7D, 0xDA, 0x90, 0x01, 0xC4,
-0xED, 0xF0, 0x74, 0x67, 0xFF, 0xA3, 0xF0, 0x53, 0x91, 0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE, 0x90,
-0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90, 0x00, 0x52, 0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0, 0x5E,
-0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06, 0x90, 0x00, 0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D, 0x30,
-0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20, 0xF0, 0xE5, 0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00, 0x55,
-0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7, 0x06, 0x90, 0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5, 0x3E,
-0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74, 0x01, 0xF0, 0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90, 0x00,
-0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30, 0xE2, 0x06, 0x90, 0x00, 0x56, 0x74, 0x04, 0xF0, 0xE5,
-0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56, 0x74, 0x08, 0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0xA3,
-0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0,
-0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00,
-0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x75, 0x56,
-0x00, 0x90, 0x01, 0xC4, 0x74, 0x81, 0xF0, 0x74, 0x68, 0xA3, 0xF0, 0x53, 0x91, 0xDF, 0x90, 0x01,
-0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0, 0x55, 0x31, 0xF5, 0x35, 0xA3, 0xE0, 0x55, 0x32,
-0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37, 0xE5, 0x34, 0x30, 0xE0, 0x06, 0x90, 0x01, 0x3C,
-0x74, 0x01, 0xF0, 0xE5, 0x34, 0x30, 0xE1, 0x10, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93,
-0x15, 0xE0, 0x20, 0xE0, 0x03, 0x12, 0x46, 0x79, 0xE5, 0x34, 0x30, 0xE2, 0x36, 0x90, 0x01, 0x3C,
-0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE0, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93, 0x45,
-0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B,
-0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x55, 0xE4, 0xF0,
-0x12, 0x52, 0x17, 0xE5, 0x34, 0x30, 0xE3, 0x36, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0x90, 0x06,
-0x92, 0xE0, 0x30, 0xE1, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB,
-0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06,
-0x92, 0x74, 0x02, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x52, 0xE4, 0xF0, 0x12, 0x52, 0x17, 0xE5, 0x34,
-0x30, 0xE4, 0x34, 0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x30, 0xE0, 0x24,
-0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x07, 0x78, 0x74, 0x01,
-0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12,
-0x34, 0x30, 0x80, 0x03, 0x12, 0x59, 0x97, 0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3C, 0x74,
-0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x18, 0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90, 0x00, 0x83,
-0xE0, 0xF5, 0x64, 0x90, 0x01, 0xBB, 0xE5, 0x64, 0xF0, 0x12, 0x51, 0xEC, 0x12, 0x52, 0x17, 0xE5,
-0x35, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3D, 0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90,
-0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90, 0x93, 0xAE, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53,
-0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0xFD, 0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x06, 0x90,
-0x01, 0x3E, 0x74, 0x01, 0xF0, 0xE5, 0x36, 0x30, 0xE1, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0,
-0xE5, 0x36, 0x30, 0xE3, 0x08, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xD1, 0x50, 0xE5, 0x36, 0x30,
-0xE4, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x10, 0xF0, 0xE5, 0x36, 0x30, 0xE2, 0x76, 0x90, 0x01, 0x3E,
-0x74, 0x04, 0xF0, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE7, 0x13, 0x74, 0x80, 0xF0, 0x90, 0x07, 0x95,
-0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x44, 0x04, 0xF0, 0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x90, 0x07, 0x8F,
-0xE0, 0x30, 0xE6, 0x12, 0x74, 0x40, 0xF0, 0x90, 0x07, 0x7C, 0xE0, 0xB4, 0x06, 0x08, 0x90, 0x07,
-0x80, 0xE0, 0xFF, 0x12, 0x67, 0x3D, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE5, 0x14, 0x74, 0x20, 0xF0,
-0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3, 0xE0, 0x44, 0x01,
-0xF0, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE2, 0x0D, 0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x54, 0xFB, 0xF0,
-0x7F, 0x01, 0x12, 0x55, 0xB2, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE0, 0x07, 0x74, 0x01, 0xF0, 0xFF,
-0x12, 0x55, 0xB2, 0xE5, 0x36, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x20, 0xF0, 0xE5, 0x36,
-0x30, 0xE6, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x40, 0xF0, 0xE5, 0x36, 0x30, 0xE7, 0x06, 0x90, 0x01,
-0x3E, 0x74, 0x80, 0xF0, 0xE5, 0x37, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x43,
-0x14, 0x80, 0xE5, 0x37, 0x30, 0xE4, 0x1C, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0x12, 0x44, 0x24,
-0x90, 0x93, 0x57, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x71,
-0x40, 0x71, 0x09, 0x74, 0x81, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x68, 0xA3, 0xF0, 0xD0, 0x07,
-0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0,
-0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x94, 0x3E, 0xE0, 0x30, 0xE0, 0x2F,
-0xE5, 0x62, 0xB4, 0x01, 0x2A, 0x90, 0x94, 0x3D, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x0B, 0x90,
-0x94, 0x40, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x3D, 0xF0, 0x90, 0x94, 0x40, 0xE0, 0xFF, 0x90,
-0x94, 0x3F, 0xE0, 0xD3, 0x9F, 0x50, 0x08, 0x12, 0x44, 0xFE, 0xE4, 0x90, 0x94, 0x40, 0xF0, 0x22,
-0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0, 0x6F, 0x7F, 0x01, 0x12, 0x5E, 0xE6, 0x90, 0x93, 0x19, 0xE0,
-0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x98, 0x8F, 0x7F, 0x01, 0x12, 0x5E, 0x83,
-0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x29, 0x90, 0x93, 0x15, 0xE0, 0xC4,
-0x54, 0x0F, 0x30, 0xE0, 0x1F, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x4C, 0xE0,
-0x60, 0x06, 0x7D, 0x01, 0x7F, 0x04, 0x80, 0x09, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x7D, 0x01, 0x7F,
-0x0C, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x4C, 0xE0, 0x90, 0x05, 0x22, 0x60, 0x05, 0x74, 0x6F, 0xF0,
-0x80, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0,
-0x05, 0x7F, 0x01, 0x12, 0x55, 0xB2, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0,
-0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05,
-0xC0, 0x06, 0xC0, 0x07, 0x53, 0x91, 0xBF, 0x90, 0xFD, 0x68, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x35,
-0x90, 0x93, 0x94, 0xE0, 0x70, 0x16, 0x90, 0x00, 0x2E, 0xE0, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x00,
-0x2D, 0xE0, 0x90, 0x93, 0x10, 0xF0, 0x90, 0x93, 0x94, 0x74, 0x01, 0xF0, 0x90, 0xFD, 0x60, 0xE0,
-0x54, 0x3F, 0xD3, 0x94, 0x09, 0x50, 0x03, 0x12, 0x99, 0xED, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x0E,
-0x60, 0x02, 0x81, 0xB8, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x20, 0xE0,
-0x02, 0x81, 0xB8, 0x90, 0xFD, 0x62, 0xE0, 0x54, 0xC0, 0xFE, 0x90, 0x07, 0x90, 0xE0, 0x54, 0x3F,
-0x4E, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x07, 0x91, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x07,
-0x92, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x07, 0x93, 0xF0, 0x90, 0x07, 0x95, 0x74, 0x01, 0xF0,
-0xEF, 0x20, 0xE0, 0x44, 0x90, 0x93, 0x04, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x19, 0x90,
-0x07, 0x78, 0x12, 0x58, 0x7F, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x49, 0x90,
-0x07, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x80, 0x40, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13, 0x30,
-0xE0, 0x11, 0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3, 0xE0,
-0x44, 0x01, 0xF0, 0x90, 0x07, 0x78, 0x80, 0x14, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0x13, 0x13, 0x54,
-0x3F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x12, 0x58, 0x7F, 0x80, 0x0C, 0xE0, 0x44, 0x10, 0xF0,
-0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x0F, 0x0A, 0x90,
-0xFD, 0x62, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xD1, 0xBF, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x15, 0x70,
-0x76, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6A, 0xF0, 0xE0, 0x30, 0xE6, 0x1C, 0xF4, 0x54, 0x3F,
-0x04, 0xFF, 0x90, 0x93, 0x0F, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0xC3, 0x9F, 0x90, 0x93, 0x69, 0xF0,
-0xD3, 0x94, 0x3F, 0x40, 0x20, 0xE4, 0xF0, 0x80, 0x1C, 0x90, 0x93, 0x0F, 0xE0, 0x13, 0x13, 0x54,
-0x3F, 0xFF, 0x90, 0x93, 0x6A, 0xE0, 0x54, 0x3F, 0x2F, 0x90, 0x93, 0x69, 0xF0, 0xD3, 0x94, 0x3F,
-0x40, 0x03, 0x74, 0x3F, 0xF0, 0x90, 0x93, 0x69, 0xE0, 0xFF, 0x90, 0x01, 0xE7, 0xF0, 0xEF, 0x54,
-0x30, 0xC4, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x69, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x4F, 0x90,
-0x93, 0x6B, 0xF0, 0x90, 0x00, 0x2E, 0xF0, 0xEE, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x93, 0x10, 0xE0,
-0x54, 0x0F, 0x4F, 0x90, 0x00, 0x2D, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x16, 0x08, 0x90, 0xFD,
-0x62, 0xE0, 0xFF, 0x12, 0x67, 0x64, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x21, 0x08, 0x90, 0xFD, 0x62,
-0xE0, 0xFF, 0x12, 0x67, 0x8B, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x22, 0x02, 0xD1, 0x6E, 0x90, 0xFD,
-0x60, 0xE0, 0x64, 0x23, 0x70, 0x7B, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x2C, 0x30, 0xE0, 0x05,
-0x74, 0x01, 0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x30, 0xE1, 0x5B, 0x90, 0x93,
-0x2D, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x7F, 0x60, 0x7E, 0x08, 0x12,
-0x2C, 0x6E, 0x90, 0x93, 0x32, 0x12, 0x1F, 0xC9, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x7F, 0x70, 0x7E,
-0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0x2E, 0x12, 0x1F, 0xC9, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5,
-0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x01, 0xBE, 0xE0, 0x04,
-0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0x2D, 0x30, 0xE2, 0x08, 0xE0, 0x54, 0x1F, 0x44, 0x20,
-0xF0, 0x80, 0x06, 0xE0, 0x54, 0x1F, 0x44, 0x60, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0xFF, 0x12, 0x9A,
-0x59, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x24, 0x02, 0xD1, 0x96, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x25,
-0x13, 0x90, 0xFD, 0x62, 0xE0, 0x60, 0x0D, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x93,
-0x24, 0x74, 0x04, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x26, 0x05, 0x7F, 0x01, 0x12, 0x9A, 0xF5,
-0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x30, 0x07, 0xE4, 0xFB, 0xFD, 0x7F, 0x01, 0xD1, 0xEA, 0x90, 0xFD,
-0x68, 0xE0, 0x44, 0x01, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0,
-0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32,
-0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x11, 0x90, 0x93, 0x1C, 0xE0,
-0xC3, 0x13, 0x30, 0xE0, 0x08, 0xE0, 0x44, 0x04, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, 0x00,
-0x75, 0xE0, 0x44, 0x01, 0xF0, 0x7F, 0x01, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0x74,
-0x03, 0xF0, 0x7F, 0x02, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0xE4, 0xF0, 0x90, 0x00,
-0x75, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x0D, 0xF0, 0x54,
-0x0F, 0x44, 0x10, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6E, 0xF0, 0x7B, 0x01, 0x7A, 0x93,
-0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x66, 0x89, 0xAE,
-0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x04, 0xF0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90,
-0x93, 0x6E, 0xEE, 0xF0, 0xA3, 0xED, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19,
-0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x66, 0x89, 0xAC, 0x07, 0x90, 0x93, 0xD9, 0xE0,
-0x44, 0x0F, 0xF0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0x93, 0xDB, 0xEC, 0xF0, 0x60, 0x32, 0x90,
-0xFD, 0x63, 0xE0, 0x90, 0x93, 0xDC, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0x90, 0x93, 0xDD, 0xF0, 0x90,
-0xFD, 0x64, 0xE0, 0x90, 0x93, 0xDE, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0xDF, 0xF0, 0x90,
-0xFD, 0x66, 0xE0, 0x90, 0x93, 0xE0, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0xE1, 0xF0, 0x80,
-0x11, 0x90, 0x93, 0xDC, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xDB, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93,
-0x79, 0xD9, 0x02, 0x66, 0x89, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x1E, 0xF6, 0x90,
-0x93, 0x83, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x84, 0xF0, 0x90, 0x00, 0x02,
-0x12, 0x1F, 0x0F, 0x90, 0x93, 0x85, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x86,
-0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x87, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0,
-0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x15, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x83, 0x7F, 0x30, 0x12,
-0x96, 0xD8, 0x90, 0x93, 0x83, 0xE0, 0xFB, 0x7D, 0x01, 0xE4, 0x80, 0x07, 0x90, 0x93, 0x83, 0xE0,
-0xFB, 0xE4, 0xFD, 0xFF, 0xD1, 0xEA, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
-0xC0, 0xD0, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0,
-0xFD, 0x70, 0x03, 0x02, 0x71, 0x06, 0x90, 0x94, 0x4C, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8,
-0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x03,
-0x02, 0x70, 0xFF, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12, 0x43, 0x9C,
-0xE0, 0x90, 0x93, 0x79, 0xF0, 0x75, 0x20, 0x01, 0x75, 0x21, 0x93, 0x75, 0x22, 0x79, 0x75, 0x23,
-0x01, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x7A, 0x12, 0x56, 0xF1, 0x90, 0x93, 0x7A, 0xE0, 0xFF, 0xC4,
-0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x94, 0x4C, 0x30, 0xE0, 0x59, 0xE0, 0x75, 0xF0, 0x02, 0x90,
-0x00, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7B, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0,
-0x02, 0x90, 0x00, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90, 0x94, 0x4C, 0xE0,
-0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D, 0xF0, 0x90, 0x94,
-0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7E, 0xF0,
-0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
-0x7F, 0xF0, 0x80, 0x33, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C, 0xE0, 0x90,
-0x93, 0x7B, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x9C,
-0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12,
-0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01, 0x7A, 0x93, 0x79,
-0x7B, 0x31, 0x0B, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x90, 0x94, 0x4C, 0xE0, 0xFE, 0x74, 0x01, 0xA8,
-0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x94,
-0x4C, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01,
-0xCC, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x02, 0x6F, 0xCC, 0x90,
-0x01, 0xC6, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xC8, 0xEF, 0x12, 0x43, 0xD1, 0x71, 0xAF, 0x01, 0x71, 0xA6, 0x02, 0x71, 0xF7, 0x03, 0x72, 0x00,
-0x05, 0x72, 0x09, 0x06, 0x73, 0x4B, 0x07, 0x72, 0x11, 0x0B, 0x72, 0x1A, 0x10, 0x72, 0x22, 0x11,
-0x72, 0x2A, 0x12, 0x72, 0x32, 0x16, 0x72, 0x3C, 0x17, 0x72, 0x46, 0x18, 0x72, 0x50, 0x19, 0x73,
-0x17, 0x1B, 0x73, 0x20, 0x1C, 0x72, 0x59, 0x1D, 0x72, 0x63, 0x1E, 0x72, 0x6E, 0x21, 0x72, 0x77,
-0x22, 0x72, 0x80, 0x23, 0x72, 0x89, 0x24, 0x72, 0x92, 0x25, 0x72, 0x9B, 0x26, 0x72, 0xA4, 0x27,
-0x72, 0xAD, 0x28, 0x72, 0xB6, 0x29, 0x71, 0xB8, 0x2D, 0x71, 0xC1, 0x2E, 0x72, 0xBF, 0x2F, 0x73,
-0x29, 0x30, 0x72, 0xD0, 0x32, 0x72, 0xC7, 0x33, 0x71, 0xD3, 0x34, 0x72, 0xD9, 0x36, 0x72, 0xE2,
-0x37, 0x72, 0xEB, 0x38, 0x72, 0xF3, 0x3A, 0x71, 0xCA, 0x3B, 0x72, 0xFC, 0x3E, 0x73, 0x05, 0x3F,
-0x73, 0x0E, 0x41, 0x73, 0x32, 0x46, 0x71, 0xDC, 0x47, 0x71, 0xEE, 0x48, 0x71, 0xE5, 0x49, 0x73,
-0x3B, 0x4B, 0x00, 0x00, 0x73, 0x44, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8B, 0x7D, 0x90,
-0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8B, 0x83, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8C,
-0x64, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8C, 0xAC, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8,
-0x02, 0x8C, 0xE5, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0x17, 0x90, 0x93, 0x80, 0x12,
-0x43, 0xA8, 0x02, 0x8D, 0x1D, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0xDD, 0x90, 0x93,
-0x80, 0x12, 0x43, 0xA8, 0x02, 0x96, 0xD0, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0xEE,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0x5F, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x81,
-0x1C, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0xAC, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8,
-0x61, 0x4C, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x61, 0x52, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8,
-0x61, 0x58, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x01, 0x80, 0x2F, 0x90, 0x93, 0x80, 0x12,
-0x43, 0xA8, 0x7F, 0x02, 0x80, 0x25, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x03, 0x80, 0x1B,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x18, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xE4,
-0xFF, 0x80, 0x08, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x04, 0x02, 0x8E, 0x36, 0x90, 0x93,
-0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x50, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x69,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x82, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x8F, 0x9B, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0xB4, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x02, 0x8F, 0xCD, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0xE6, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xA8, 0x02, 0x8F, 0xFF, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x18, 0x90,
-0x93, 0x80, 0x12, 0x43, 0xA8, 0x81, 0x0D, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x40,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x59, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x90, 0x72, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x92, 0x25, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x61, 0xEB, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x92, 0x37, 0x90, 0x93, 0x80, 0x12,
-0x43, 0xA8, 0x02, 0x96, 0x63, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x96, 0x7C, 0x90, 0x93,
-0x80, 0x12, 0x43, 0xA8, 0x02, 0x96, 0xB7, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0xA4,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0x8B, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x99, 0xB9, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x6F, 0x55, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x02, 0x97, 0x22, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x7D, 0x05, 0x7F, 0x0B,
-0x80, 0x10, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x0A, 0x7D, 0x01, 0x7F, 0x0D, 0x80, 0x04, 0x7D, 0x03,
-0x7F, 0x11, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x41, 0x12, 0x43, 0xC8, 0xE4,
-0xFE, 0x90, 0x00, 0xA3, 0xE0, 0x54, 0xF8, 0x44, 0x05, 0xF0, 0x90, 0x00, 0xA0, 0xE0, 0x54, 0x0F,
-0x64, 0x04, 0x70, 0x5A, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x49, 0x90, 0xFD, 0x50, 0xEF, 0xF0,
-0xA3, 0xED, 0xF0, 0xEE, 0xC3, 0x9D, 0x50, 0x1E, 0x90, 0x94, 0x41, 0x12, 0x43, 0xA8, 0x8E, 0x82,
-0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x52, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5,
-0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDD, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x0F, 0x74, 0x52, 0x2E, 0xF5,
-0x82, 0xE4, 0x34, 0xFD, 0xF5, 0x83, 0xE4, 0xF0, 0x0E, 0x80, 0xEB, 0x90, 0xFD, 0x58, 0x74, 0x01,
-0xF0, 0xFF, 0x80, 0x12, 0x90, 0x01, 0x43, 0xE0, 0x04, 0xF0, 0x7F, 0x02, 0x80, 0x08, 0x90, 0x01,
-0x42, 0xE0, 0x04, 0xF0, 0x7F, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F,
-0x23, 0x71, 0x62, 0xEF, 0xB4, 0x03, 0x05, 0x7F, 0xFF, 0x12, 0x9A, 0x59, 0x22, 0x12, 0x1E, 0xF6,
-0xFF, 0xE9, 0x24, 0x01, 0xF9, 0xE4, 0x3A, 0xFA, 0x7D, 0x04, 0x61, 0x62, 0x90, 0x00, 0x04, 0x12,
-0x1F, 0x0F, 0xFF, 0x54, 0x1F, 0xFE, 0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06,
-0x90, 0x93, 0x83, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x85, 0x12,
-0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x88,
-0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x93,
-0x89, 0xF0, 0x90, 0x93, 0x83, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C,
-0xAD, 0x82, 0xAC, 0x83, 0x90, 0x93, 0x8A, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09,
-0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43, 0xC8, 0x90,
-0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0x0F, 0xFF, 0x90, 0x93,
-0x8C, 0x12, 0x43, 0xA8, 0xEF, 0x12, 0x42, 0x53, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00,
-0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x8C, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0xEF, 0x12,
-0x42, 0x65, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90,
-0x93, 0x8A, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x1E, 0xF6,
-0x8D, 0x82, 0x8C, 0x83, 0xA3, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0xFE, 0x90, 0x93, 0x83, 0xE0, 0xFF,
-0x24, 0xC2, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x84, 0xE0, 0xFE,
-0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF,
-0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x89, 0xE0, 0xFE, 0x75, 0xF0,
-0x09, 0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x8F, 0x57, 0xEF, 0x25, 0xE0, 0x24,
-0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xAF, 0x82, 0xF5, 0x58, 0x8F, 0x59, 0xE5, 0x57, 0x75, 0xF0,
-0x02, 0xA4, 0x24, 0x02, 0xF9, 0x74, 0x89, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C,
-0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAF, 0x82, 0x85, 0x83, 0x5D,
-0x8F, 0x5E, 0xE5, 0x57, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35, 0xF0, 0x75,
-0x5F, 0x01, 0xF5, 0x60, 0x89, 0x61, 0x74, 0xC2, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
-0x83, 0xE0, 0x12, 0x43, 0xD1, 0x75, 0xAA, 0x00, 0x75, 0xBF, 0x01, 0x75, 0xD4, 0x02, 0x75, 0xE9,
-0x03, 0x76, 0x12, 0x04, 0x76, 0x27, 0x05, 0x76, 0x3C, 0x06, 0x76, 0x62, 0x0C, 0x76, 0x8F, 0x0D,
-0x76, 0xBC, 0x0E, 0x76, 0xE9, 0x0F, 0x00, 0x00, 0x77, 0x1D, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47,
-0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80, 0x3C, 0xE5,
-0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3,
-0x74, 0x10, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
-0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x05, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5,
-0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x57, 0x25, 0xE0,
-0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0x8F, 0xF0,
-0xE1, 0x1D, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74,
-0x0F, 0xF0, 0xA3, 0x74, 0xF5, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
-0x34, 0x90, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0,
-0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0xE5,
-0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0,
-0xE1, 0x1D, 0x90, 0x04, 0x47, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90,
-0x04, 0x46, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90,
-0x04, 0x45, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x44, 0xE1, 0x14, 0x90,
-0x04, 0x4B, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4A, 0xE0,
-0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x49, 0xE0,
-0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04, 0x4F, 0xE0,
-0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4E, 0xE0, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x4D, 0xE0, 0x85, 0x59, 0x82,
-0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x52, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
-0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x51, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83,
-0xF0, 0x90, 0x04, 0x50, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB, 0x5F, 0xAA,
-0x60, 0xA9, 0x61, 0x12, 0x1E, 0xF6, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53,
-0xAB, 0x5A, 0xE5, 0x5C, 0x24, 0x01, 0xF9, 0xE4, 0x35, 0x5B, 0xFA, 0xC0, 0x03, 0xC0, 0x02, 0xC0,
-0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x90, 0x00, 0x01, 0x12, 0x1F,
-0x0F, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0x85, 0x59, 0x82, 0x85, 0x58,
-0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xE0, 0xFE, 0xEF,
-0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xC0, 0x83, 0xC0,
-0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82,
-0xD0, 0x83, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
-0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x4C, 0x90, 0x93, 0x8F, 0x74, 0x0B, 0xF0, 0x90, 0x93, 0x8F,
-0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x50, 0x03, 0x02, 0x78, 0x63, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07,
-0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24,
-0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60,
-0x0A, 0x90, 0x93, 0x8F, 0xE0, 0x24, 0x10, 0xA3, 0xF0, 0x80, 0x68, 0x90, 0x93, 0x8F, 0xE0, 0x14,
-0xF0, 0x80, 0xBA, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83,
-0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x47, 0x90, 0x93, 0x8F, 0x74, 0x0F, 0xF0, 0x90, 0x93, 0x8F,
-0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x40, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05,
-0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82,
-0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x93,
-0x8F, 0xE0, 0xA3, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0x8F, 0xE0, 0x14, 0xF0, 0x80, 0xBF, 0xE4, 0x90,
-0x93, 0x90, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83,
-0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x8F, 0xF0, 0x90, 0x93, 0x8F, 0xE0,
-0xFF, 0xC3, 0x94, 0x10, 0x40, 0x02, 0x21, 0x1C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
-0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5,
-0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x06, 0x90,
-0x93, 0x8F, 0xE0, 0x80, 0x63, 0x90, 0x93, 0x8F, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5, 0x57, 0x25,
-0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60,
-0x46, 0xE4, 0x90, 0x93, 0x8F, 0xF0, 0x90, 0x93, 0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x0C, 0x50, 0x3C,
-0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
-0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E,
-0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x93, 0x8F, 0xE0, 0x24, 0x10, 0x80, 0x09, 0x90,
-0x93, 0x8F, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x91, 0xF0, 0x90, 0x93, 0x90, 0xE0,
-0xFF, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xEF, 0xF0, 0x90, 0x93,
-0x91, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xEE, 0xF0,
-0xE5, 0x57, 0xC3, 0x94, 0x20, 0x50, 0x2C, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x04,
-0xF5, 0x83, 0xE0, 0xD3, 0x9F, 0x40, 0x02, 0x80, 0x47, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4,
-0x34, 0x04, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x91, 0xE0, 0xA3, 0xF0, 0x80,
-0x37, 0x80, 0x2D, 0x74, 0x27, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF,
-0x90, 0x93, 0x90, 0xE0, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x07, 0x90, 0x93, 0x92, 0xEE, 0xF0, 0x80,
-0x17, 0x90, 0x93, 0x91, 0xE0, 0xFE, 0xEF, 0xC3, 0x9E, 0x50, 0x05, 0xA3, 0xEE, 0xF0, 0x80, 0x08,
-0x90, 0x93, 0x90, 0xE0, 0x90, 0x93, 0x92, 0xF0, 0x90, 0x93, 0x92, 0xE0, 0xFD, 0xAF, 0x57, 0x31,
-0xF4, 0x90, 0x93, 0x92, 0xE0, 0xFF, 0x74, 0xA7, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
-0x83, 0xEF, 0xF0, 0x90, 0x93, 0x90, 0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90, 0x8A, 0x83,
-0x74, 0x03, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x0B, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x02, 0xF0,
-0x22, 0xEF, 0xD3, 0x94, 0x03, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90,
-0x8A, 0x83, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0xC3, 0x94, 0x20, 0x50,
-0x0E, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED, 0xF0, 0x80, 0x29, 0x74,
-0x27, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xED, 0xF0, 0x90, 0x93, 0xCC, 0xEF, 0xF0,
-0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0xCD, 0xF0, 0x7B, 0x01,
-0x7A, 0x93, 0x79, 0xCC, 0x7D, 0x02, 0x71, 0xB9, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F, 0x52, 0x8D,
-0x53, 0xE5, 0x53, 0x54, 0x1F, 0x90, 0x93, 0x5F, 0xF0, 0x74, 0x01, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
-0x88, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x93, 0x60, 0x74, 0x01, 0xF0, 0xEB, 0xC3,
-0x94, 0x01, 0x40, 0x02, 0x80, 0x3B, 0x90, 0x93, 0x5D, 0xE0, 0x25, 0x55, 0xFF, 0xA3, 0xF0, 0xA3,
-0xE0, 0x90, 0x41, 0xA4, 0x93, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x13, 0x74, 0x01, 0x25, 0x52, 0xF5,
-0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAD, 0x53, 0xAF, 0x52, 0x21, 0xF4, 0x90, 0x93,
-0x5E, 0xE0, 0xFF, 0x74, 0x01, 0x25, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEF, 0xF0,
-0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
-0x62, 0xF0, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x54, 0x1F, 0x90,
-0x93, 0x61, 0xF0, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0,
-0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x5D,
-0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x85, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89,
-0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x85, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x25,
-0xE0, 0x25, 0xE0, 0xFF, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEF, 0xF0,
-0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0xC8, 0x40, 0x0D,
-0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0x74, 0xC8, 0xF0, 0x90, 0x93, 0x62,
-0xE0, 0xFF, 0x90, 0x93, 0x61, 0xE0, 0xD3, 0x9F, 0x40, 0x02, 0xEF, 0xF0, 0x90, 0x93, 0x61, 0xE0,
-0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74,
-0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74,
-0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0,
-0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x05,
-0x90, 0x93, 0x61, 0xE0, 0xFD, 0x31, 0xF4, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60,
-0x12, 0x90, 0x04, 0x30, 0xE0, 0x70, 0x0C, 0x04, 0xF0, 0xA3, 0xF0, 0xA3, 0x04, 0xF0, 0x90, 0x04,
-0xCF, 0x04, 0xF0, 0x90, 0x93, 0x61, 0xE0, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x90, 0x94, 0x22, 0x12, 0x43, 0xC8, 0x90, 0x94, 0x25, 0xE0, 0x54, 0xF0, 0x44, 0x06, 0xFF, 0xF0,
-0xED, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFE, 0xEF, 0x54, 0x0F, 0x4E, 0xF0, 0x90, 0x94, 0x22, 0x12,
-0x43, 0xA8, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x25, 0x12, 0x66,
-0x89, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAC, 0x07, 0xEC, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84,
-0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x80,
-0x11, 0x74, 0x27, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93,
-0x88, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x93, 0x8B, 0xF0, 0x75, 0xF0, 0x09,
-0xEC, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x8D, 0xF0, 0x75, 0xF0, 0x09, 0xEC,
-0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0x90, 0x93, 0x8E, 0xF0, 0xEC, 0x25, 0xE0, 0x24,
-0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x8F, 0xCB,
-0xF0, 0xA3, 0xEB, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
-0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x91, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x74, 0xC6, 0x2C, 0xF5,
-0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C, 0x90, 0x93, 0x8E,
-0xE0, 0x90, 0x93, 0x8B, 0xF0, 0x90, 0x93, 0x88, 0xF0, 0xED, 0x70, 0x02, 0xA1, 0x70, 0x90, 0x93,
-0x8C, 0xED, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x93, 0x8B, 0xE0, 0x90, 0x93,
-0x88, 0xF0, 0x90, 0x93, 0x8C, 0xE0, 0x14, 0xF0, 0x90, 0x93, 0x8C, 0xE0, 0x70, 0x02, 0xA1, 0x70,
-0x90, 0x93, 0x8B, 0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02, 0xA1, 0x70, 0xE4, 0x90, 0x93, 0x8A,
-0xF0, 0xEF, 0x14, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x8D, 0xE0, 0xFD, 0x90, 0x93, 0x89, 0xE0,
-0xFF, 0xD3, 0x9D, 0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0, 0xFF, 0x74, 0x01,
-0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90,
-0x93, 0x91, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93, 0x89, 0xE0, 0xFF,
-0xC3, 0x94, 0x10, 0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33,
-0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8F, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E,
-0x60, 0x1A, 0x90, 0x93, 0x89, 0xE0, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0x04, 0xF0,
-0x90, 0x93, 0x8C, 0xE0, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0x6F, 0x60, 0x08, 0x90, 0x93, 0x89, 0xE0,
-0x14, 0xF0, 0x80, 0x83, 0x90, 0x93, 0x8C, 0xE0, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0xC3, 0x9F, 0x50,
-0x0F, 0x90, 0x93, 0x89, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x93, 0x8D, 0xE0, 0x90, 0x93, 0x88, 0xF0,
-0x90, 0x93, 0x88, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83,
-0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34,
-0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13,
-0xFF, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3,
-0xEF, 0xF0, 0xAF, 0x04, 0x90, 0x93, 0x88, 0xE0, 0xFD, 0x31, 0xF4, 0x90, 0x93, 0x88, 0xE0, 0xFF,
-0x22, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x39, 0xEF, 0x30, 0xE0, 0x17, 0xED, 0xC4, 0x54, 0xF0, 0xFD,
-0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x0F,
-0x80, 0x10, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
-0x54, 0xF0, 0xF0, 0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x4D, 0xF0,
-0x22, 0xAD, 0x07, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
-0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x80, 0x11, 0x74, 0x27, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x88,
-0xE0, 0xF9, 0x54, 0x1F, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C,
-0xE0, 0xFF, 0x90, 0x93, 0x8B, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89,
-0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x8C, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xED, 0x25,
-0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93,
-0x8E, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x93, 0x89, 0xE0, 0xFE, 0x25, 0xE0, 0x24, 0x34, 0xF5,
-0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xED, 0x25, 0xE0,
-0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB, 0xF0, 0xEE, 0xC3,
-0x9F, 0x40, 0x02, 0xE1, 0x5E, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4,
-0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0xEF, 0x04, 0x90, 0x93, 0x8A, 0xF0, 0x90, 0x93, 0x8B, 0xE0,
-0xFF, 0x90, 0x93, 0x8A, 0xE0, 0xFE, 0xD3, 0x9F, 0x40, 0x02, 0xE1, 0x98, 0xEE, 0xC3, 0x94, 0x10,
-0x40, 0x21, 0xEE, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3,
-0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8C, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F,
-0x4E, 0x70, 0x27, 0x90, 0x93, 0x8A, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59, 0x74, 0x01, 0x7E,
-0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93,
-0x8E, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x93, 0x8A, 0xE0, 0xB4, 0x11,
-0x0D, 0x90, 0x93, 0x8D, 0xE0, 0x30, 0xE7, 0x06, 0x90, 0x93, 0x8A, 0x74, 0x17, 0xF0, 0x90, 0x93,
-0x8A, 0xE0, 0xFF, 0x64, 0x13, 0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x93, 0x8C, 0xE0, 0x30,
-0xE0, 0x06, 0x90, 0x93, 0x8A, 0x74, 0x18, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0x90, 0x93, 0x89, 0xF0,
-0x90, 0x93, 0x88, 0xF0, 0x80, 0x42, 0x90, 0x93, 0x8A, 0xE0, 0x04, 0xF0, 0xC1, 0xBC, 0x90, 0x93,
-0x8B, 0xE0, 0xFC, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0x28, 0x2D, 0xF5, 0x82,
-0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43,
-0x9C, 0xE0, 0xB4, 0x01, 0x10, 0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x93, 0x89, 0xE0, 0x44, 0x40, 0x90,
-0x93, 0x88, 0xF0, 0x80, 0x03, 0xAF, 0x01, 0x22, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x25, 0xE0, 0x24,
-0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF,
-0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF,
-0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82,
-0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90, 0x93, 0x89, 0xE0,
-0xD3, 0x9C, 0x40, 0x5E, 0x90, 0x93, 0x8B, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
-0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x89, 0xEF, 0xF0, 0x90, 0x93, 0x88, 0xF0, 0xFC, 0xA3,
-0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA,
-0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83,
-0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25,
-0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF,
-0x04, 0x22, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0x05,
-0x90, 0x93, 0x88, 0xE0, 0x44, 0x80, 0xFD, 0x12, 0x79, 0xF4, 0x90, 0x93, 0x88, 0xE0, 0x44, 0x80,
-0xFF, 0x22, 0xE4, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x40, 0x40,
-0x03, 0x02, 0x88, 0x64, 0xEF, 0xB4, 0x20, 0x14, 0x90, 0x8F, 0x46, 0xE0, 0x04, 0xF0, 0x90, 0x89,
-0x01, 0xE0, 0xFF, 0x90, 0x8F, 0x46, 0xE0, 0xB5, 0x07, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x78, 0xE0,
-0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02,
-0x88, 0x5B, 0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xFE,
-0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEE, 0x94, 0x00, 0x50, 0x03, 0x02, 0x88, 0x5B, 0x90, 0x93, 0x78,
-0xE0, 0x94, 0x20, 0x40, 0x09, 0x90, 0x8F, 0x46, 0xE0, 0x60, 0x03, 0x02, 0x88, 0x64, 0x90, 0x93,
-0x78, 0xE0, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75, 0x5A, 0x01,
-0xF5, 0x5B, 0x89, 0x5C, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5,
-0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x93, 0x7D, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0,
-0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93, 0x7F,
-0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74,
-0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93, 0x79, 0xF0,
-0x80, 0x14, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0,
-0x54, 0x3F, 0x90, 0x93, 0x79, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFE, 0x54, 0x1F, 0xA3, 0xF0, 0x90,
-0x93, 0x78, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
-0x82, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05,
-0x40, 0x02, 0x61, 0xF9, 0x90, 0x93, 0x82, 0xE0, 0xFF, 0x90, 0x93, 0x7A, 0xE0, 0x9F, 0x40, 0x13,
-0x90, 0x93, 0x82, 0xE0, 0x90, 0x93, 0x7A, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0x90, 0x93, 0x79, 0xF0,
-0xEF, 0x4E, 0xF0, 0x90, 0x93, 0x7A, 0xE0, 0xFF, 0x90, 0x41, 0x18, 0x93, 0xFE, 0x90, 0x93, 0x78,
-0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x40, 0x06, 0xEF,
-0x90, 0x40, 0xE0, 0x80, 0x07, 0x90, 0x93, 0x7A, 0xE0, 0x90, 0x40, 0xFC, 0x93, 0x90, 0x93, 0x81,
-0xF0, 0x90, 0x93, 0x81, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x56, 0xF9, 0x74, 0x40, 0x35, 0xF0,
-0xFA, 0x7B, 0xFF, 0x8B, 0x57, 0xF5, 0x58, 0x89, 0x59, 0x90, 0x93, 0x78, 0xE0, 0x25, 0xE0, 0x24,
-0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93, 0x7B, 0xCF,
-0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
-0x12, 0x42, 0x9D, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12,
-0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x7E,
-0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0,
-0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58,
-0xA9, 0x59, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9,
-0x5C, 0x90, 0x00, 0x04, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B,
-0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x03, 0x12,
-0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x06, 0x12, 0x42,
-0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87,
-0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB,
-0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x08, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F,
-0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59,
-0x90, 0x00, 0x05, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7D, 0xE0, 0xFC, 0xA3, 0xE0,
-0xFD, 0x12, 0x1F, 0x3C, 0xD3, 0x90, 0x93, 0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x40,
-0x0C, 0xA3, 0xE0, 0x9F, 0xF0, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0xF0, 0x80, 0x07, 0xE4, 0x90, 0x93,
-0x7B, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x7B, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0x78, 0xE0,
-0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
-0x90, 0x93, 0x79, 0xE0, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4,
-0x93, 0xFC, 0x74, 0x01, 0x93, 0xFD, 0xD3, 0xEF, 0x9D, 0xEE, 0x9C, 0x50, 0x02, 0x61, 0xC8, 0x90,
-0x93, 0x78, 0xE0, 0xFF, 0x24, 0x82, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0x74,
-0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9E, 0x40, 0x03, 0xEF,
-0x80, 0x1C, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
-0xE0, 0xFE, 0x74, 0x82, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x90,
-0x93, 0x83, 0xF0, 0x90, 0x93, 0x83, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x02, 0x80, 0x23, 0x90, 0x93,
-0x78, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x01,
-0x40, 0x0F, 0x74, 0xC6, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x14, 0xF0, 0x80,
-0x0F, 0x90, 0x93, 0x78, 0xE0, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0,
-0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x60,
-0x02, 0xE1, 0x09, 0x12, 0x7E, 0x01, 0xE1, 0x09, 0x90, 0x93, 0x79, 0xE0, 0x25, 0xE0, 0x24, 0x6C,
-0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xC3, 0x90,
-0x93, 0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x40, 0x02, 0xE1, 0x09, 0x90, 0x93, 0x78,
-0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x7B, 0xF6, 0xE1, 0x09, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x67,
-0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x02, 0xA1, 0xD7, 0x90,
-0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x03, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x19, 0x40, 0x3D,
-0x80, 0x2E, 0xEE, 0xB4, 0x02, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x11, 0x40, 0x2E, 0x80,
-0x1F, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x0A,
-0x40, 0x1B, 0x80, 0x0C, 0xEE, 0x70, 0x11, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x03, 0x40, 0x0D,
-0x90, 0x8E, 0xC5, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x8E, 0xC5, 0xF0, 0x90, 0x93, 0x78,
-0xE0, 0xFE, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x87, 0xF0,
-0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0xC3, 0x94, 0x30, 0x50,
-0x0A, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0x74, 0x67, 0x2F, 0xA1, 0x82, 0x90, 0x8E, 0xC5, 0xE0, 0x64,
-0x01, 0x60, 0x02, 0xA1, 0x77, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE0, 0x64, 0x0A, 0x60, 0x5B, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xEE, 0x24, 0x05, 0xFB,
-0xE4, 0x33, 0xFA, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xFF, 0xD3,
-0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x38, 0x90, 0x93, 0x78, 0xE0, 0xFE, 0xEF,
-0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
-0xE0, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x16, 0x90, 0x93, 0x78, 0xE0,
-0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x7A, 0xE0, 0x6F,
-0x60, 0x56, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0,
-0xFF, 0xD3, 0x94, 0x42, 0x40, 0x08, 0x90, 0x93, 0x87, 0x74, 0x05, 0xF0, 0x80, 0x11, 0xEF, 0xD3,
-0x94, 0x39, 0x90, 0x93, 0x87, 0x40, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0x90,
-0x93, 0x78, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0x74,
-0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x24,
-0x06, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0x80, 0x2F, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x67, 0xF5,
-0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x14, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0x90, 0x93, 0x78, 0xE0,
-0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x7A, 0xE0, 0xFE,
-0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xEE, 0xF0,
-0x90, 0x93, 0x87, 0xE0, 0xFE, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xEE,
-0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01, 0x11, 0xE4,
-0x90, 0x93, 0x87, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0,
-0x90, 0x93, 0x87, 0xE0, 0xFD, 0xE1, 0x06, 0xEC, 0x64, 0x06, 0x60, 0x02, 0xE1, 0x09, 0x90, 0x93,
-0x7B, 0xF0, 0xA3, 0xF0, 0x90, 0x41, 0xE1, 0x93, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7D, 0xE0, 0xFC,
-0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x85, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93,
-0x78, 0xE0, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x87, 0xF0,
-0xE4, 0x90, 0x93, 0x84, 0xF0, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0xD3, 0x94, 0x04, 0x50, 0x47, 0xAB,
-0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x75, 0xF0, 0x02, 0xEF, 0xA4, 0xF5, 0x82, 0x85, 0xF0, 0x83, 0x12,
-0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0xEF, 0x90, 0x41, 0xDC, 0x93, 0xFF, 0x7E, 0x00, 0x12, 0x1F, 0x3C,
-0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0x85, 0xE0, 0xFE, 0xA3, 0xE0,
-0xFF, 0xD3, 0x90, 0x93, 0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x50, 0x08, 0x90, 0x93,
-0x84, 0xE0, 0x04, 0xF0, 0x80, 0xAF, 0x90, 0x93, 0x84, 0xE0, 0xC3, 0x13, 0xF0, 0x90, 0x93, 0x87,
-0xE0, 0xFF, 0xB4, 0x01, 0x0D, 0x90, 0x93, 0x84, 0xE0, 0x70, 0x5D, 0x90, 0x93, 0x87, 0x04, 0xF0,
-0x80, 0x5B, 0xEF, 0xB4, 0x03, 0x1D, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93, 0x87,
-0x74, 0x03, 0xF0, 0x80, 0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x87, 0x74, 0x01, 0xF0, 0x80,
-0x3C, 0x80, 0x35, 0x90, 0x93, 0x87, 0xE0, 0x64, 0x05, 0x70, 0x32, 0x90, 0x93, 0x84, 0xE0, 0xFF,
-0x70, 0x08, 0x90, 0x93, 0x87, 0x74, 0x05, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x93, 0x87, 0xB4, 0x01,
-0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3, 0x90, 0x93, 0x80, 0xE0, 0x94, 0x03,
-0x90, 0x93, 0x7F, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0xD3, 0x90, 0x93,
-0x80, 0xE0, 0x94, 0x03, 0x90, 0x93, 0x7F, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x87,
-0xF0, 0x90, 0x93, 0x87, 0xE0, 0xFD, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xC4, 0xF5, 0x82, 0xE4,
-0x34, 0x8C, 0xF5, 0x83, 0xED, 0xF0, 0x12, 0x7D, 0xC1, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x67,
-0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x05, 0x50, 0x0F, 0x74, 0x67, 0x2F,
-0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x78, 0xE0,
-0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x7F, 0xE0, 0xFE,
-0xA3, 0xE0, 0xFF, 0xC3, 0x74, 0xFF, 0x9F, 0xFF, 0x74, 0xFF, 0x9E, 0xFE, 0x90, 0x93, 0x78, 0xE0,
-0xFD, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0,
-0xD3, 0x9F, 0xEA, 0x9E, 0x50, 0x1C, 0x90, 0x93, 0x7F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xED, 0x25,
-0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87,
-0x80, 0x14, 0x90, 0x93, 0x78, 0xE0, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5,
-0x83, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x84, 0xF5,
-0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0x74, 0xFF, 0x9D, 0xFB,
-0x74, 0xFF, 0x9C, 0xFA, 0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83,
-0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x9B, 0xEE, 0x9A, 0x90, 0x93, 0x78, 0xE0, 0x50, 0x13, 0x25, 0xE0,
-0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEC, 0x8D, 0xF0, 0x12, 0x42, 0x87, 0x80,
-0x10, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xA3,
-0xF0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x00, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x04, 0xE4,
-0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00,
-0x08, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80,
-0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04,
-0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x84,
-0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x04,
-0xF0, 0x02, 0x80, 0x67, 0x22, 0x90, 0x04, 0x44, 0x74, 0x11, 0xF0, 0xA3, 0x74, 0xF0, 0xF0, 0xA3,
-0x74, 0x0F, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3,
-0x94, 0x10, 0x50, 0x14, 0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE4, 0xF0,
-0x90, 0x93, 0x78, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8F, 0x46, 0xF0, 0x90, 0x89, 0x01,
-0x04, 0xF0, 0xE4, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x40, 0x40,
-0x02, 0x41, 0x5E, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3,
-0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75,
-0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x04, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A,
-0xEF, 0x90, 0x84, 0x06, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90,
-0x84, 0x08, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0xA7, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
-0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83,
-0xE4, 0xF0, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0x07,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC7, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83,
-0xE4, 0xF0, 0x90, 0x8E, 0x04, 0xF0, 0x90, 0x41, 0x92, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0x90,
-0x41, 0x5A, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF,
-0x90, 0x93, 0x78, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83,
-0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0x74,
-0x01, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x74,
-0xC2, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0C, 0xF0, 0x75, 0xF0, 0x09, 0xED,
-0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90,
-0x8A, 0x84, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90,
-0x8A, 0x88, 0x12, 0x43, 0x9C, 0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x89, 0x12,
-0x43, 0x9C, 0xE4, 0xF0, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x0F, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4,
-0x34, 0x04, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x80, 0x0D, 0x74, 0x27, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
-0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x04, 0xF0, 0x01, 0xA7, 0x22, 0x12,
-0x1E, 0xF6, 0xFF, 0xC3, 0x94, 0x40, 0x50, 0x14, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFE, 0x74,
-0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0xB4, 0x40, 0x0A,
-0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x8A, 0x82, 0xF0, 0x22, 0x90, 0x00, 0x04, 0x12, 0x1F,
-0x0F, 0xFF, 0x54, 0x3F, 0xFE, 0xEF, 0x54, 0x80, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0xFD, 0xAF,
-0x06, 0x02, 0x74, 0x30, 0x12, 0x1E, 0xF6, 0x90, 0x89, 0x01, 0xF0, 0x22, 0x90, 0x00, 0x02, 0x12,
-0x1F, 0x0F, 0xFD, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFC, 0xED, 0xC3, 0x94, 0x40, 0x40, 0x02,
-0xE4, 0xFD, 0xEC, 0xC3, 0x94, 0x40, 0x40, 0x02, 0xE4, 0xFC, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5,
-0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x83, 0xF0, 0xEE, 0xA3,
-0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3,
-0xE0, 0x90, 0x93, 0x85, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xEC,
-0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90,
-0x93, 0x89, 0xF0, 0xEE, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x8B, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xEC, 0xF0,
-0xA3, 0x74, 0xFF, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83,
-0xE4, 0xF0, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83,
-0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83,
-0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83,
-0xE4, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x83, 0x02, 0x67, 0xB2, 0x12, 0x1E, 0xF6,
-0xF5, 0x62, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8,
-0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8,
-0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x59, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F,
-0x90, 0x93, 0x3C, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x01, 0x90, 0x93, 0x3D,
-0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x01, 0x90, 0x93, 0x47, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F,
-0xFF, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x44, 0xF0, 0xEF, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90,
-0x93, 0x4A, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x54, 0x01, 0x90, 0x93, 0x46,
-0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x01, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F,
-0xFF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x49, 0xF0, 0xE0, 0x70, 0x38, 0x90, 0x93, 0x47,
-0xE0, 0x70, 0x10, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03,
-0x10, 0x80, 0x0F, 0x7F, 0x01, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5, 0x00, 0x00,
-0x03, 0x00, 0x90, 0x93, 0x86, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x70,
-0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x3D, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x90, 0x93,
-0x83, 0x12, 0x43, 0xA8, 0x12, 0x4D, 0xC1, 0x90, 0x93, 0x59, 0xE0, 0x90, 0x01, 0xE6, 0xF0, 0xD0,
-0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x30, 0xE0, 0x25, 0x12, 0x1E,
-0xF6, 0x90, 0x93, 0x48, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x4B, 0xF0, 0xEF,
-0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x45, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93,
-0x50, 0xF0, 0x22, 0x90, 0x93, 0x48, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4B, 0x74, 0x05, 0xF0, 0x90,
-0x93, 0x45, 0x74, 0x14, 0xF0, 0x90, 0x93, 0x50, 0x74, 0x05, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x30,
-0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F,
-0xFF, 0x90, 0x93, 0x4D, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x4F, 0x74, 0x05,
-0xF0, 0x90, 0x93, 0x4D, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0xA3, 0xE0,
-0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x4C, 0xF0, 0x60, 0x20, 0x90, 0x93,
-0x15, 0xE0, 0x20, 0xE0, 0x19, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x3D, 0xE0,
-0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x12, 0x51, 0x69, 0x90, 0x93,
-0x4C, 0xE0, 0x90, 0x01, 0xE7, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x02, 0x43, 0xC8, 0x12, 0x1E, 0xF6,
-0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x0F, 0xFF,
-0xE0, 0x54, 0xF0, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54, 0x70, 0xFF, 0x90, 0x93, 0x36, 0xE0, 0x54,
-0x8F, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x38, 0xF0, 0x90, 0x00, 0x03,
-0x12, 0x1F, 0x0F, 0x90, 0x93, 0x39, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x3A,
-0xF0, 0x90, 0x00, 0x01, 0x74, 0x19, 0x12, 0x42, 0x20, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF,
-0xD3, 0x94, 0x20, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x01, 0xF0, 0x80, 0x57, 0xEF, 0xD3, 0x94,
-0x40, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x02, 0xF0, 0x80, 0x49, 0xEF, 0xD3, 0x94, 0x60, 0x50,
-0x08, 0x90, 0x93, 0x37, 0x74, 0x03, 0xF0, 0x80, 0x3B, 0xEF, 0xD3, 0x94, 0x80, 0x50, 0x08, 0x90,
-0x93, 0x37, 0x74, 0x04, 0xF0, 0x80, 0x2D, 0xEF, 0xD3, 0x94, 0xA0, 0x50, 0x08, 0x90, 0x93, 0x37,
-0x74, 0x05, 0xF0, 0x80, 0x1F, 0xEF, 0xD3, 0x94, 0xC0, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x06,
-0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0xE0, 0x90, 0x93, 0x37, 0x50, 0x05, 0x74, 0x07, 0xF0, 0x80,
-0x03, 0x74, 0x08, 0xF0, 0x90, 0x93, 0x37, 0xE0, 0x90, 0x93, 0x3B, 0xF0, 0x22, 0x12, 0x1E, 0xF6,
-0x60, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x02,
-0x09, 0xE0, 0xFD, 0x12, 0x1E, 0xF6, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90, 0x93, 0xA8, 0xF0, 0x90,
-0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xA9, 0xF0, 0x90, 0x00, 0x02, 0x12,
-0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xAA, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF,
-0xED, 0x2F, 0x90, 0x93, 0xAB, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xAE, 0x05, 0xED,
-0x2F, 0x90, 0x93, 0xAC, 0xF0, 0x22, 0xEF, 0x70, 0x21, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x14, 0x90,
-0x00, 0x40, 0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0x3F, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x44, 0x01,
-0xF0, 0x80, 0x07, 0x90, 0x07, 0x78, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x64, 0x01, 0x70, 0x6A, 0x12,
-0x1E, 0xF6, 0x90, 0x00, 0x01, 0x30, 0xE0, 0x2E, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC0, 0xF0, 0x90,
-0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC1, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90,
-0x06, 0xC2, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC3, 0xF0, 0x90, 0x06, 0xCC,
-0xE0, 0x54, 0xFE, 0xF0, 0x80, 0x2C, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC4, 0xF0, 0x90, 0x00, 0x02,
-0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC5, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC6,
-0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC7, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x44,
-0x01, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x44, 0x02, 0xF0, 0xEF, 0xB4, 0x02, 0x11, 0x12, 0x1E, 0xF6,
-0x90, 0x06, 0xC8, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC9, 0xF0, 0xEF, 0xB4,
-0x03, 0x11, 0x12, 0x1E, 0xF6, 0x90, 0x06, 0xCA, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
-0x06, 0xCB, 0xF0, 0xEF, 0x64, 0x04, 0x70, 0x1F, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x07, 0x83, 0x30,
-0xE0, 0x06, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0x6F, 0xF0, 0xEF, 0x30, 0xE1, 0x07,
-0x90, 0x07, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93,
-0x83, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0x90, 0x92, 0x6B, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F,
-0x0F, 0x90, 0x92, 0x6C, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x92, 0x6D, 0xF0, 0x90,
-0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x73, 0x5E, 0xEF, 0xB4, 0x02, 0x03, 0x43, 0x14, 0x01, 0x22,
-0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12,
-0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x17, 0x02, 0x73, 0x62, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90,
-0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x18, 0x02,
-0x73, 0x62, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93,
-0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x19, 0x02, 0x73, 0x62, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F,
-0x1A, 0x02, 0x73, 0x62, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8,
-0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1B, 0x02, 0x73, 0x62, 0x90, 0x93, 0x83,
-0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D,
-0x01, 0x7F, 0x1C, 0x02, 0x73, 0x62, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12,
-0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x03, 0x7F, 0x1D, 0x02, 0x73, 0x62, 0x90,
-0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xA8, 0x7D, 0x01, 0x7F, 0x1E, 0x02, 0x73, 0x62, 0x12, 0x1E, 0xF6, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE,
-0x78, 0x18, 0x12, 0x1F, 0xB6, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0x90, 0x93, 0x0B,
-0x12, 0x43, 0x84, 0xEC, 0x54, 0x03, 0xFC, 0x12, 0x43, 0x59, 0x90, 0x93, 0x07, 0x02, 0x1F, 0xC9,
-0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12,
-0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1F, 0x02, 0x73, 0x62, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90,
-0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x20, 0x02,
-0x73, 0x62, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0x90, 0x01, 0xBC, 0xF0, 0xEF, 0x30, 0xE0, 0x5C,
-0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x4E, 0x90, 0xFD, 0x50, 0x74, 0x0A, 0xF0, 0xA3, 0x74, 0x06,
-0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0xFD, 0x52, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F,
-0x0F, 0x90, 0xFD, 0x53, 0xF0, 0xA3, 0xE4, 0xF0, 0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x90, 0xFD, 0x55,
-0x30, 0xE0, 0x05, 0x74, 0xA0, 0xF0, 0x80, 0x03, 0x74, 0xC0, 0xF0, 0x90, 0xFD, 0x56, 0x74, 0x10,
-0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x90, 0xFD, 0x50, 0x74, 0x0A, 0xF0, 0xA3, 0x74, 0x06, 0xF0, 0x90,
-0xFD, 0x58, 0x74, 0x01, 0xF0, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x00, 0x02, 0x12,
-0x1F, 0x0F, 0xFE, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E,
-0xFE, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFC, 0x74, 0x20, 0x2F, 0xFF, 0xE4, 0x3E,
-0xFE, 0x90, 0x93, 0x83, 0xEF, 0xF0, 0xEE, 0xF9, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x02, 0xF0, 0x90,
-0x02, 0x09, 0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xEC, 0xC3, 0x99, 0x50, 0x43, 0xEC, 0x70,
-0x04, 0x7D, 0x04, 0x80, 0x02, 0xE4, 0xFD, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x07, 0xAF, 0x05, 0x31,
-0x79, 0x0D, 0x80, 0xF3, 0x0C, 0x90, 0xFD, 0x10, 0xE0, 0x04, 0xF0, 0xEC, 0xB5, 0x01, 0xDA, 0xE4,
-0xFD, 0xED, 0x75, 0xF0, 0x08, 0xA4, 0xFF, 0x90, 0x93, 0x83, 0xE0, 0xFB, 0xC3, 0xEF, 0x9B, 0x74,
-0x80, 0xF8, 0x65, 0xF0, 0x98, 0x50, 0x07, 0xAF, 0x05, 0x31, 0x79, 0x0D, 0x80, 0xE3, 0x0C, 0x80,
-0xB8, 0x90, 0x00, 0x81, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x81, 0x12, 0x54, 0x0A, 0x90, 0x01, 0xBD,
-0xE0, 0x44, 0x04, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xFD, 0x58, 0xE0, 0x30, 0xE0, 0x08,
-0x90, 0x01, 0xB8, 0xE0, 0x04, 0xF0, 0x80, 0xF1, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5,
-0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x50, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4,
-0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x51, 0xF0, 0xEF, 0x75,
-0xF0, 0x08, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x52,
-0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
-0x90, 0xFD, 0x53, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x54, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x05, 0xF5, 0x82,
-0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x55, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24,
-0x06, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x56, 0xF0, 0xEF, 0x75, 0xF0,
-0x08, 0xA4, 0x24, 0x07, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x57, 0xF0,
-0xA3, 0x74, 0x01, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0xFE, 0x10, 0x60, 0x05, 0xE0, 0x44, 0x01,
-0xF0, 0x22, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93,
-0x87, 0x12, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x15, 0xE0, 0x54,
-0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF,
-0x54, 0x04, 0xFE, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x10, 0xFF, 0xE0,
-0x54, 0xEF, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x15, 0xE0, 0x54,
-0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFC,
-0x54, 0x80, 0xFF, 0x90, 0x93, 0x15, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
-0x0F, 0xFD, 0x54, 0x01, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xED, 0x54, 0x02,
-0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFD, 0x54, 0x04, 0xFF,
-0x90, 0x93, 0x18, 0xE0, 0x54, 0xFB, 0x4F, 0xF0, 0xED, 0x54, 0x10, 0xFF, 0xE0, 0x54, 0xEF, 0x4F,
-0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x18, 0xE0, 0x54,
-0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12,
-0x1F, 0x0F, 0x54, 0x80, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x00, 0x04,
-0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF,
-0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54,
-0x80, 0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x10, 0xFF, 0xE0, 0x54,
-0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x19,
-0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54, 0xF7, 0x4F, 0xF0, 0xEC, 0x20,
-0xE0, 0x02, 0x81, 0xB1, 0x90, 0x05, 0x54, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x25, 0xF0, 0x90, 0x93,
-0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1C, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00,
-0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x16, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93,
-0x17, 0xF0, 0x80, 0x4E, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F,
-0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03, 0x90, 0x93, 0x16, 0x50, 0x05, 0x74,
-0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x93, 0x16, 0x74, 0x2A, 0xF0, 0x90, 0x00,
-0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03, 0x90, 0x93,
-0x17, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x93, 0x17, 0x74,
-0x2A, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x3D, 0x90, 0x93,
-0x16, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x1E, 0xF0, 0xE0, 0xC3, 0x13, 0xA3, 0xF0, 0x90,
-0x93, 0x17, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x20, 0xF0, 0x90, 0x93, 0x16, 0xE0, 0xC3,
-0x13, 0x90, 0x93, 0x21, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x22, 0xF0, 0x90,
-0x01, 0x3E, 0x74, 0x08, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0xAD, 0xE4, 0x90, 0x93, 0x11, 0xF0,
-0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xC4, 0x13, 0x13, 0x54,
-0x03, 0x20, 0xE0, 0x14, 0x12, 0x1E, 0xF6, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x04, 0x7F,
-0x01, 0x80, 0x02, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30,
-0xE0, 0x18, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x03, 0x75, 0x64, 0x04,
-0x90, 0x05, 0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x11, 0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0,
-0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x27, 0x74, 0x01, 0xF0, 0x80, 0x2B, 0x90,
-0x93, 0x1D, 0xE0, 0xB4, 0x04, 0x08, 0x90, 0x93, 0x27, 0x74, 0x04, 0xF0, 0x80, 0x1C, 0x90, 0x93,
-0x1D, 0xE0, 0xB4, 0x06, 0x08, 0x90, 0x93, 0x27, 0x74, 0x02, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0x1D,
-0xE0, 0xB4, 0x07, 0x06, 0x90, 0x93, 0x27, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x80,
-0x64, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F,
-0x90, 0x93, 0x83, 0x30, 0xE0, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x80, 0x07, 0x12,
-0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0xB1, 0x4D, 0x90, 0x00, 0x40, 0x74, 0x20, 0xF0, 0x90, 0x93,
-0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x90,
-0x07, 0x78, 0x30, 0xE0, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0x7B, 0x01, 0x7A,
-0x93, 0x79, 0x83, 0x12, 0x55, 0x67, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x05, 0x00, 0x74, 0x1C,
-0xF0, 0xA3, 0x74, 0x43, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0x90, 0x93, 0x26,
-0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x09, 0x90, 0x93,
-0x04, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x0C, 0x7F, 0x01, 0x12, 0x55, 0xB2, 0x90, 0x93, 0x04, 0xE0,
-0x54, 0xFD, 0xF0, 0x7F, 0x03, 0x12, 0x5E, 0xE6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x15,
-0xE0, 0x54, 0xFE, 0xF0, 0xA3, 0x74, 0x0B, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x93, 0x26,
-0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54,
-0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x93,
-0x18, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54, 0xEF,
-0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0xA3, 0xE0, 0x54,
-0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x93, 0x28, 0x74, 0x02, 0xF0,
-0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE4,
-0xA3, 0xF0, 0x90, 0x93, 0x25, 0xF0, 0x90, 0x93, 0x1C, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x93,
-0x23, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x29, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x1C, 0xE0, 0x54, 0xFD,
-0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xFB, 0xF0,
-0xE0, 0x54, 0xF7, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xE1, 0xF0, 0x22,
-0x90, 0x93, 0x04, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0x54, 0xFD, 0xF0, 0x54, 0xF7, 0xF0,
-0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0x12, 0x1F, 0xD5, 0x20, 0x08, 0x30, 0x70, 0x90, 0x93, 0x0B,
-0x12, 0x1F, 0xD5, 0xC0, 0x08, 0x30, 0x70, 0xE4, 0x90, 0x93, 0x11, 0xF0, 0xA3, 0xF0, 0x43, 0xE8,
-0x04, 0x90, 0xFD, 0x68, 0x74, 0x02, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x07,
-0x83, 0xE4, 0xF0, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x04, 0x64, 0xE4, 0xF0, 0x90, 0x00,
-0x40, 0x74, 0x20, 0xF0, 0xB1, 0x4D, 0x90, 0x93, 0x2C, 0x74, 0x01, 0xF0, 0x7D, 0x04, 0x7F, 0x02,
-0x02, 0x3A, 0xAD, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90,
-0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x24, 0x02, 0x73, 0x62, 0x12, 0x1E, 0xF6, 0xFF,
-0x54, 0x01, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0,
-0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0x54,
-0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54, 0xF7, 0x4F, 0xF0, 0x90, 0x00, 0x01, 0x12,
-0x1F, 0x0F, 0x90, 0x93, 0x1B, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86,
-0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x03, 0x7F, 0x26, 0x02, 0x73, 0x62,
-0x12, 0x1E, 0xF6, 0x90, 0x93, 0xB0, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
-0x93, 0x8A, 0x12, 0x43, 0xC8, 0xE4, 0xFE, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x2F, 0x90, 0xFD,
-0x50, 0xEF, 0xF0, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x1E, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8, 0x8E,
-0x82, 0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x51, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD,
-0xF5, 0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDC, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0xAE, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
-0x93, 0xAF, 0xF0, 0x22, 0xE4, 0x90, 0x94, 0x46, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xEB, 0xE0, 0x54,
-0xC0, 0x60, 0x43, 0xC3, 0x90, 0x94, 0x47, 0xE0, 0x94, 0x88, 0x90, 0x94, 0x46, 0xE0, 0x94, 0x13,
-0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x04, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x94, 0x46, 0xE4,
-0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x94,
-0x47, 0xE0, 0x94, 0x64, 0x90, 0x94, 0x46, 0xE0, 0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC7, 0xE0,
-0x30, 0xE2, 0xB8, 0x7F, 0x00, 0x22, 0x7F, 0x01, 0x22, 0x90, 0x93, 0xE2, 0x12, 0x1F, 0xC9, 0x90,
-0x93, 0xE6, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x7F, 0x1F, 0xFE, 0xFD, 0xFC, 0x90,
-0x93, 0xE6, 0x12, 0x43, 0x90, 0xD3, 0x12, 0x43, 0x73, 0x50, 0x41, 0x90, 0x93, 0xE6, 0x12, 0x43,
-0x84, 0xA9, 0x07, 0x90, 0x93, 0xE2, 0x12, 0x43, 0x84, 0xA8, 0x01, 0x12, 0x1F, 0xA3, 0xEF, 0x54,
-0x01, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0x7B, 0x01, 0xFA, 0xF9, 0xF8, 0xC3, 0x12, 0x43, 0x73, 0x60,
-0x1B, 0x90, 0x93, 0xE6, 0x12, 0x43, 0x84, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D,
-0xFD, 0xE4, 0x3C, 0xFC, 0x90, 0x93, 0xE6, 0x12, 0x1F, 0xC9, 0x80, 0xAD, 0x90, 0x93, 0xE6, 0x02,
-0x43, 0x84, 0x90, 0x93, 0xB4, 0x12, 0x1F, 0xC9, 0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, 0x93,
-0xB8, 0x12, 0x43, 0x90, 0xC3, 0x12, 0x43, 0x73, 0x90, 0x93, 0xB4, 0x60, 0x68, 0x12, 0x43, 0x84,
-0x12, 0x2C, 0x6E, 0x90, 0x93, 0xC0, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB8, 0x12, 0x43, 0x84, 0x12,
-0x97, 0x89, 0x90, 0x93, 0xC4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB8, 0x12, 0x43, 0x84, 0x12, 0x43,
-0x66, 0x90, 0x93, 0xC0, 0x12, 0x43, 0x90, 0x12, 0x43, 0x4C, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06,
-0xC0, 0x07, 0x90, 0x93, 0xC4, 0x12, 0x43, 0x84, 0xA9, 0x07, 0x90, 0x93, 0xBC, 0x12, 0x43, 0x84,
-0xA8, 0x01, 0x12, 0x1F, 0xB6, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0x59,
-0x90, 0x93, 0xC8, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB4, 0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07,
-0x90, 0x93, 0xC8, 0x80, 0x0A, 0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0xBC, 0x12,
-0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0xD0, 0x07, 0xD0, 0x06, 0x02, 0x34, 0x30, 0xD3,
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xEA, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00,
-0x90, 0x93, 0xEE, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x02,
-0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x4A, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78,
-0x74, 0x03, 0xF0, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x14, 0x12, 0x51, 0xBB, 0xBF, 0x01, 0x0B, 0x90,
-0x93, 0x15, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03, 0x12, 0x4F, 0xB8, 0x90, 0x93, 0x2D,
-0xE0, 0x20, 0xE0, 0x24, 0x90, 0x93, 0x47, 0xE0, 0x60, 0x1E, 0x7F, 0x01, 0x12, 0x50, 0xEB, 0x90,
-0x93, 0x5B, 0xE0, 0x60, 0x13, 0x90, 0x93, 0xEE, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x7B,
-0x01, 0x7A, 0x93, 0x79, 0xEE, 0x12, 0x55, 0x67, 0x12, 0x54, 0x4B, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x4E, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50,
-0x47, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF,
-0x90, 0x00, 0x46, 0xE0, 0x5F, 0xF0, 0x12, 0x54, 0x52, 0x90, 0x94, 0x4E, 0xE0, 0xFD, 0x74, 0x01,
-0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90,
-0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7,
-0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4C, 0x90, 0x94, 0x4E, 0xE0, 0x24, 0xF8, 0xF0, 0xE0,
-0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00,
-0x62, 0xE0, 0x5F, 0xF0, 0x12, 0x54, 0x52, 0x90, 0x94, 0x4E, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00,
-0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x60,
-0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE,
-0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x12,
-0x1E, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x94, 0x3E, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xE0, 0x30, 0xE0,
-0x03, 0x12, 0x44, 0xFE, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x30,
-0xE0, 0x0A, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x94, 0x3F, 0xF0, 0x22, 0x90, 0x93, 0x6C,
-0xE0, 0x54, 0xF0, 0x44, 0x0A, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90, 0x93, 0x6E, 0xF0, 0x90, 0xFD,
-0x62, 0xE0, 0x90, 0x93, 0x6F, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93, 0x70, 0xF0, 0x90, 0xFD,
-0x64, 0xE0, 0x90, 0x93, 0x71, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0x72, 0xF0, 0x90, 0xFD,
-0x60, 0xE0, 0x90, 0x93, 0x6C, 0x30, 0xE6, 0x08, 0xE0, 0x54, 0x0F, 0x44, 0x50, 0xF0, 0x80, 0x16,
-0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93, 0x73, 0xF0, 0x90, 0xFD,
-0x67, 0xE0, 0x90, 0x93, 0x74, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12,
-0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x66, 0x89, 0xAD, 0x07, 0x90, 0x93, 0xFA, 0xE0, 0x54,
-0xF0, 0x44, 0x0C, 0xF0, 0x54, 0x0F, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0xFC, 0xF0, 0x90,
-0xFD, 0x63, 0xE0, 0x90, 0x93, 0xFD, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0xFE, 0xF0, 0x90,
-0xFD, 0x65, 0xE0, 0x90, 0x93, 0xFF, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x94, 0x00, 0xF0, 0x90,
-0xFD, 0x67, 0xE0, 0x90, 0x94, 0x01, 0xF0, 0xED, 0xB4, 0x02, 0x0B, 0x90, 0x93, 0xFA, 0xE0, 0x54,
-0x0F, 0x44, 0x20, 0xF0, 0x80, 0x3C, 0xED, 0xB4, 0x04, 0x0B, 0x90, 0x93, 0xFA, 0xE0, 0x54, 0x0F,
-0x44, 0x60, 0xF0, 0x80, 0x2D, 0xED, 0xF4, 0x70, 0x29, 0x90, 0x93, 0xFA, 0xE0, 0x54, 0x0F, 0x44,
-0x60, 0xF0, 0x90, 0x93, 0x2C, 0xE0, 0x60, 0x08, 0x90, 0x93, 0xFC, 0x74, 0x01, 0xF0, 0x80, 0x05,
-0xE4, 0x90, 0x93, 0xFC, 0xF0, 0xE4, 0x90, 0x93, 0xFD, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xFC, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93,
-0x79, 0xFA, 0x02, 0x66, 0x89, 0xAD, 0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x0E, 0xF0,
-0x54, 0x0F, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6F, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90,
-0x93, 0x70, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0x71, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90,
-0x93, 0x72, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93, 0x73, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90,
-0x93, 0x74, 0xF0, 0xED, 0xB4, 0x01, 0x11, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0x0F, 0x44, 0x20, 0xF0,
-0x90, 0x93, 0x6E, 0x74, 0x01, 0xF0, 0x80, 0x13, 0xED, 0xB4, 0x02, 0x0F, 0x90, 0x93, 0x6C, 0xE0,
-0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0x93, 0x6E, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x6C, 0xE0, 0xFF,
-0xC4, 0x54, 0x0F, 0x60, 0x13, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43,
-0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x12, 0x66, 0x89, 0x22, 0x90, 0x93, 0x47, 0xE0, 0x60, 0x27, 0x90,
-0x93, 0x4A, 0xE0, 0x70, 0x21, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90,
-0x07, 0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x93, 0x44, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74,
-0x0D, 0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03,
-0x20, 0xE0, 0x02, 0xA1, 0x4F, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x01, 0x70, 0x39, 0x90, 0x06, 0x92,
-0xE0, 0x20, 0xE2, 0x06, 0x90, 0x94, 0x4B, 0xE0, 0x60, 0x21, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0,
-0x90, 0x93, 0x29, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x4B, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFF,
-0x90, 0x93, 0x29, 0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02, 0xA1, 0x3A, 0xE4, 0x90, 0x93, 0x1D, 0xF0,
-0x90, 0x93, 0x27, 0x04, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x04, 0x70, 0x3A, 0x90, 0x06,
-0x92, 0xE0, 0x20, 0xE2, 0x06, 0x90, 0x94, 0x4B, 0xE0, 0x60, 0x21, 0x90, 0x06, 0x92, 0x74, 0x04,
-0xF0, 0x90, 0x93, 0x29, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x4B, 0xF0, 0x90, 0x93, 0x20, 0xE0,
-0xFF, 0x90, 0x93, 0x29, 0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02, 0xA1, 0x3A, 0xE4, 0x90, 0x93, 0x1D,
-0xF0, 0x90, 0x93, 0x27, 0x74, 0x04, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x06, 0x60, 0x02,
-0x81, 0xFE, 0x90, 0x93, 0x2A, 0xE0, 0xB4, 0x04, 0x0F, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F,
-0x90, 0x93, 0x27, 0x30, 0xE0, 0x4E, 0xA1, 0x4C, 0x90, 0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54, 0x3F,
-0x30, 0xE0, 0x45, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54,
-0x0F, 0x30, 0xE0, 0x02, 0xA1, 0x0D, 0x90, 0x93, 0x2A, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0x2F,
-0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x21, 0xE0, 0x2F,
-0xFF, 0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x90, 0x93, 0x27,
-0x40, 0x02, 0xA1, 0x4C, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01,
-0x12, 0x4E, 0x27, 0x90, 0x93, 0x2A, 0xE0, 0x04, 0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB,
-0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93,
-0x2A, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03,
-0x12, 0x1F, 0x3C, 0x90, 0x93, 0x21, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32,
-0xEE, 0x64, 0x80, 0x94, 0x80, 0x40, 0x58, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x93,
-0x1D, 0xE0, 0x64, 0x07, 0x70, 0x49, 0x90, 0x93, 0x2A, 0xE0, 0xB4, 0x04, 0x05, 0x90, 0x93, 0x27,
-0x80, 0x3A, 0x90, 0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0C, 0xE0, 0x54, 0xFB,
-0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x27, 0x80, 0x23, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F,
-0x01, 0x12, 0x4E, 0x27, 0x90, 0x93, 0x2A, 0xE0, 0x04, 0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03,
-0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x22,
-0xEF, 0x64, 0x01, 0x70, 0x3C, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0,
-0x07, 0x90, 0x07, 0x78, 0x74, 0x0D, 0xF0, 0x22, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30,
-0xE0, 0x0D, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x24, 0x80, 0x0E, 0x90,
-0x93, 0x18, 0xE0, 0xC3, 0x13, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x02, 0x80, 0x14, 0x74, 0x09, 0xF0,
-0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x07, 0x78, 0x30, 0xE0,
-0x04, 0x74, 0x03, 0xF0, 0x22, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x93,
-0x15, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x4B, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03,
-0x30, 0xE0, 0x2A, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x21, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F,
-0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x1D, 0x74,
-0x01, 0xF0, 0xE4, 0x90, 0x93, 0x29, 0xF0, 0x90, 0x93, 0x27, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48,
-0x90, 0x93, 0x5D, 0xE0, 0xFF, 0x90, 0x93, 0x16, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD,
-0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0x74, 0x01, 0xF0, 0x90, 0x01, 0x63,
-0x74, 0x05, 0xF0, 0x90, 0x93, 0x26, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x08, 0x90,
-0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x15, 0xE0,
-0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F,
-0x30, 0xE0, 0x03, 0x12, 0x51, 0x48, 0xE4, 0x90, 0x94, 0x4B, 0xF0, 0x22, 0x85, 0xD2,
-};
-
-
-
-const u8 Rtl8723SFwUMCBCutImgArrayWithBT[Rtl8723SUMCBCutImgArrayWithBTLength] = {
-0x02, 0x23, 0x02, 0x00, 0x21, 0x00, 0x00, 0x00, 0x03, 0x28, 0x14, 0x04, 0x16, 0x5E, 0x01, 0x00,
-0x73, 0x22, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x02, 0x4A, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x61, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x67, 0xDB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x68, 0x82, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x6B, 0xB8, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03,
-0x00, 0x04, 0x06, 0x05, 0x04, 0x02, 0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09,
-0x08, 0x06, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08,
-0x0A, 0x09, 0x08, 0x00, 0x00, 0x08, 0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10,
-0x00, 0x18, 0x22, 0x21, 0x20, 0x18, 0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21,
-0x20, 0x08, 0x00, 0x20, 0x22, 0x21, 0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20,
-0x22, 0x20, 0x18, 0x08, 0x00, 0x20, 0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00,
-0x00, 0x30, 0x31, 0x2F, 0x10, 0x10, 0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28,
-0x10, 0x00, 0x00, 0x30, 0x31, 0x20, 0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30,
-0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04,
-0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05,
-0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13,
-0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A, 0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F,
-0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24,
-0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78,
-0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40, 0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40,
-0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8, 0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02,
-0x00, 0x04, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48,
-0x00, 0x60, 0x00, 0x6C, 0x00, 0x28, 0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8,
-0x00, 0xF0, 0x01, 0x18, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58,
-0x03, 0x20, 0x03, 0xE8, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07,
-0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04,
-0x05, 0x06, 0x07, 0x08, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18,
-0x10, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0xBB, 0x01, 0x0F, 0xF8, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x28,
-0xF0, 0x22, 0x50, 0x09, 0xC5, 0x82, 0x29, 0xF8, 0xE5, 0x82, 0x26, 0xF6, 0x22, 0xBB, 0xFE, 0x09,
-0xC5, 0x82, 0x29, 0xF8, 0xE2, 0x25, 0x82, 0xF2, 0x22, 0xF8, 0xEA, 0x25, 0x83, 0xF5, 0x83, 0xE9,
-0x93, 0x28, 0x22, 0xBB, 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22,
-0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8, 0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83,
-0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22, 0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE,
-0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0,
-0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A,
-0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7,
-0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3, 0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83,
-0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01, 0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82,
-0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82,
-0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22, 0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0,
-0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A, 0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22,
-0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7,
-0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB, 0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8,
-0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5,
-0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB,
-0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x5B, 0xFF, 0xEE,
-0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED,
-0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, 0xCF, 0xF4, 0xCF, 0xCE, 0xF4, 0xCE, 0xCD, 0xF4, 0xCD, 0xCC,
-0xF4, 0xCC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8,
-0x9C, 0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22,
-0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5,
-0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9,
-0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82, 0x15, 0x82, 0x70,
-0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0,
-0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3,
-0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68,
-0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12,
-0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83,
-0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60, 0xE9, 0xA3, 0xA3,
-0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0xFB, 0x90, 0x93, 0x63, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00,
-0xE5, 0x65, 0x70, 0x03, 0x02, 0x44, 0xF0, 0xE5, 0x62, 0x64, 0x01, 0x60, 0x03, 0x02, 0x44, 0xF0,
-0x0B, 0x90, 0x93, 0x40, 0xF0, 0x04, 0x70, 0x03, 0x02, 0x44, 0xF0, 0x43, 0x66, 0x10, 0x90, 0x93,
-0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A, 0xE0, 0x54, 0x0F, 0xFF, 0x90,
-0x93, 0x58, 0xE0, 0xD3, 0x9F, 0x50, 0x0D, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0xE0, 0xF5, 0x49,
-0xE4, 0x1B, 0x80, 0x56, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93,
-0x58, 0xE0, 0xC3, 0x9F, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x37, 0xE0, 0x04, 0x2F, 0xF5,
-0x49, 0xE4, 0xFB, 0x80, 0x35, 0x90, 0x93, 0x58, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x13,
-0xE4, 0xF5, 0x48, 0x90, 0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x2F, 0xF5, 0x49, 0xE4,
-0xFB, 0x80, 0x17, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x58, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF,
-0x90, 0x93, 0x4F, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12,
-0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
-0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x12, 0x9B, 0x40, 0x90, 0x05, 0x22, 0xE4, 0xF0,
-0x22, 0xE4, 0x90, 0x93, 0x5A, 0xF0, 0x90, 0x93, 0x41, 0xF0, 0xF5, 0x66, 0x22, 0x22, 0xE4, 0xFF,
-0x02, 0x4E, 0x27, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0xE4, 0xFB, 0x90, 0x93, 0x5D, 0x12, 0x1F,
-0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x46, 0x78, 0xE5, 0x62, 0x64, 0x01,
-0x60, 0x03, 0x02, 0x46, 0x78, 0xE5, 0x65, 0x14, 0x60, 0x2B, 0x24, 0xFD, 0x60, 0x27, 0x24, 0x02,
-0x24, 0xFB, 0x50, 0x02, 0x80, 0x21, 0x90, 0x93, 0x40, 0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3,
-0xE0, 0x60, 0x14, 0x90, 0x93, 0x40, 0xE0, 0x70, 0x08, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x93, 0x40,
-0xF0, 0x7B, 0x01, 0x80, 0x02, 0x7B, 0x01, 0xEB, 0x70, 0x03, 0x02, 0x46, 0x78, 0x43, 0x66, 0x10,
-0x90, 0x93, 0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x44, 0xE0, 0x54, 0x0F,
-0xFF, 0x90, 0x93, 0x58, 0xE0, 0xC3, 0x9F, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0x80,
-0x2D, 0x90, 0x93, 0x36, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33,
-0xFE, 0x90, 0x93, 0x58, 0xE0, 0xC3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x08,
-0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3A, 0x80, 0x06, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0xE0, 0x80,
-0x2D, 0x90, 0x93, 0x58, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4, 0xF5, 0x48, 0x90,
-0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x93,
-0x58, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x04, 0x2F, 0xF5, 0x49,
-0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0,
-0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69,
-0xE5, 0x63, 0x64, 0x0C, 0x60, 0x6F, 0x90, 0x93, 0x13, 0xE0, 0xFF, 0x90, 0x93, 0x58, 0xE0, 0xD3,
-0x9F, 0x40, 0x08, 0x90, 0x93, 0x14, 0xE0, 0x04, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x93, 0x14, 0xF0,
-0x90, 0x93, 0x58, 0xE0, 0x90, 0x93, 0x13, 0xF0, 0xA3, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x46, 0xE4,
-0xF0, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8,
-0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x70, 0x21, 0x12, 0x4A, 0x65, 0xE4, 0xF5, 0x48, 0x90, 0x93,
-0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
-0x5B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x55, 0x80, 0x09, 0x43, 0x66, 0x01, 0x12, 0x51, 0x48, 0x90,
-0x93, 0x51, 0x74, 0x01, 0xF0, 0x12, 0x9B, 0x40, 0x22, 0xE4, 0x90, 0x93, 0x63, 0xF0, 0xE5, 0x65,
-0x70, 0x03, 0x02, 0x47, 0x32, 0x90, 0x93, 0x5A, 0xE0, 0x60, 0x11, 0xE4, 0xF0, 0x53, 0x66, 0xFD,
-0xE5, 0x66, 0x54, 0x07, 0x60, 0x03, 0x02, 0x47, 0x32, 0x02, 0x47, 0x2F, 0x90, 0x93, 0x41, 0xE0,
-0x04, 0xF0, 0x53, 0x66, 0xEF, 0x90, 0x93, 0x58, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x36, 0xE0, 0xC4,
-0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A, 0x90, 0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x36,
-0xE0, 0x54, 0x0F, 0xB5, 0x07, 0x0A, 0x90, 0x93, 0x39, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x80, 0x22,
-0x90, 0x93, 0x36, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE,
-0x90, 0x93, 0x58, 0xE0, 0xB5, 0x07, 0x0B, 0xE4, 0xB5, 0x06, 0x07, 0xF0, 0x90, 0x05, 0x58, 0x74,
-0x03, 0xF0, 0x90, 0x93, 0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x06, 0x90,
-0x93, 0x63, 0x74, 0x5A, 0xF0, 0x90, 0x93, 0x63, 0xE0, 0xFF, 0x90, 0x93, 0x48, 0xE0, 0x2F, 0xFF,
-0xE4, 0x33, 0xFE, 0x90, 0x93, 0x41, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
-0x40, 0x0D, 0xE5, 0x62, 0xB4, 0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12,
-0x52, 0x17, 0x22, 0xE4, 0xF5, 0x66, 0xF5, 0x65, 0x75, 0x64, 0x0C, 0x75, 0x63, 0x0C, 0x90, 0x93,
-0x59, 0xF0, 0x90, 0x93, 0x55, 0xF0, 0x90, 0x93, 0x52, 0xF0, 0x90, 0x93, 0x57, 0x04, 0xF0, 0x90,
-0x93, 0x40, 0xF0, 0xE4, 0x90, 0x93, 0x5A, 0xF0, 0x90, 0x93, 0x42, 0xF0, 0x90, 0x93, 0x4F, 0x74,
-0x05, 0xF0, 0xE4, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x93, 0x4D, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90,
-0x93, 0x48, 0xF0, 0x90, 0x93, 0x4B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x45, 0x74, 0x14, 0xF0, 0x90,
-0x93, 0x50, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x43, 0xF0, 0x90, 0x93, 0x3C, 0xF0, 0x90, 0x93,
-0xB2, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x90, 0x93, 0x5C, 0xF0, 0x90, 0x93, 0x58, 0xF0, 0x90, 0x93,
-0x3D, 0xF0, 0x90, 0x93, 0x56, 0xF0, 0x90, 0x93, 0x47, 0xF0, 0x90, 0x93, 0x44, 0xF0, 0x90, 0x93,
-0x51, 0xF0, 0x90, 0x93, 0x4A, 0xF0, 0x90, 0x93, 0x46, 0xF0, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x93,
-0x49, 0xF0, 0x90, 0x93, 0xB1, 0xE0, 0xB4, 0x02, 0x05, 0x90, 0x00, 0x93, 0xE4, 0xF0, 0x90, 0x93,
-0x36, 0xE0, 0x54, 0x7F, 0xF0, 0xE0, 0x54, 0xF0, 0xF0, 0xE0, 0x54, 0x8F, 0xF0, 0xE4, 0xA3, 0xF0,
-0xA3, 0xF0, 0x90, 0x93, 0x3A, 0xF0, 0x90, 0x93, 0x39, 0xF0, 0x22, 0xEF, 0x60, 0x5F, 0xAF, 0x05,
-0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x93,
-0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07,
-0x30, 0xE0, 0x6B, 0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x13, 0xE0, 0x25, 0xE0, 0x25,
-0xE0, 0xFF, 0x74, 0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0x74,
-0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x74, 0x7F, 0xF0, 0x22, 0xAF, 0x05, 0x74,
-0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0x93, 0x19,
-0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xBF, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30,
-0xE0, 0x0C, 0x74, 0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x22, 0x90,
-0x93, 0x15, 0xE0, 0x30, 0xE0, 0x22, 0x90, 0x93, 0x26, 0xE0, 0x60, 0x09, 0x90, 0x01, 0xB9, 0x74,
-0x40, 0xF0, 0x02, 0x49, 0x29, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x02, 0x80, 0x2F,
-0x90, 0x93, 0x4C, 0xE0, 0x60, 0x67, 0x80, 0x5D, 0x12, 0x51, 0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08,
-0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x61, 0xE5, 0x66, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01,
-0xB9, 0x74, 0x02, 0xF0, 0x80, 0x53, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x08, 0x90,
-0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x42, 0xE5, 0x66, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB9, 0x74,
-0x08, 0xF0, 0x80, 0x35, 0xE5, 0x66, 0x30, 0xE4, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80,
-0x28, 0x90, 0x93, 0x42, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x1A, 0x90,
-0x93, 0x4C, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x80, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9,
-0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F,
-0x00, 0x22, 0xE4, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x93, 0x5D, 0xF0, 0xE0,
-0x54, 0xC0, 0x70, 0x18, 0x90, 0x93, 0x51, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0x53, 0x66, 0xFD,
-0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x14, 0x12, 0x52, 0x17, 0x80, 0x0F, 0x90, 0x93, 0x3D, 0xE0,
-0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x90, 0x93, 0x5D, 0xE0, 0x30,
-0xE6, 0x1B, 0x43, 0x66, 0x01, 0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64,
-0x0C, 0x60, 0x13, 0x12, 0x51, 0x48, 0x80, 0x0E, 0x12, 0x50, 0x77, 0x80, 0x09, 0x90, 0x93, 0x51,
-0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0xE4, 0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x5D, 0xE0, 0x30,
-0xE7, 0x2A, 0x43, 0x66, 0x02, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x4B, 0xE0, 0xF5, 0x49, 0xE4, 0xFB,
-0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90, 0x93,
-0x5A, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x53, 0x66, 0xFD, 0x22,
-0x8E, 0x25, 0x8F, 0x26, 0xAD, 0x26, 0xAC, 0x25, 0xAF, 0x24, 0x12, 0x47, 0xEB, 0xAF, 0x26, 0xAE,
-0x25, 0x90, 0x04, 0x80, 0xE0, 0x54, 0x0F, 0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x01, 0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, 0xAC, 0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0x44, 0xFA, 0xF0, 0x74, 0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
-0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
-0xE0, 0x44, 0x0F, 0xF0, 0x90, 0x04, 0x53, 0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51,
-0x74, 0xFF, 0xF0, 0x90, 0x04, 0x50, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xED, 0xF0, 0x22, 0x7D, 0x01, 0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x8F, 0x68, 0x8D, 0x69, 0xE5, 0x68, 0x54, 0x0F, 0xFF, 0xE5, 0x63, 0x54, 0x0F, 0x6F, 0x60, 0x72,
-0xE5, 0x68, 0x30, 0xE2, 0x30, 0xE5, 0x63, 0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x51, 0xA1, 0xE5,
-0x63, 0x30, 0xE3, 0x10, 0xE5, 0x68, 0x20, 0xE3, 0x0B, 0x12, 0x4D, 0x55, 0xEF, 0x60, 0x53, 0x12,
-0x51, 0xD4, 0x80, 0x4E, 0xE5, 0x63, 0x20, 0xE3, 0x49, 0xE5, 0x68, 0x30, 0xE3, 0x44, 0xAF, 0x69,
-0x12, 0x51, 0x86, 0x80, 0x3D, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x68, 0x20,
-0xE3, 0x09, 0x12, 0x4D, 0x55, 0xEF, 0x60, 0x2A, 0x12, 0x51, 0xD4, 0xE5, 0x63, 0x54, 0x0F, 0xFF,
-0xBF, 0x04, 0x0E, 0xE5, 0x68, 0x20, 0xE2, 0x09, 0x12, 0x48, 0x8F, 0xEF, 0x60, 0x14, 0x12, 0x51,
-0x1F, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x02, 0x09, 0x12, 0x4B, 0xF7, 0xEF, 0x60, 0x03, 0x12,
-0x52, 0x04, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x02, 0x4B, 0x35, 0x02, 0x52, 0xF4, 0xE4, 0x93, 0xA3,
-0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4,
-0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8,
-0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04,
-0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x4F, 0x75, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF,
-0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54,
-0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4,
-0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8,
-0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0xEF, 0x64, 0x01, 0x70, 0x3E, 0x7D,
-0x78, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x22, 0x90, 0x01, 0x36,
-0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F,
-0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x4A, 0x65, 0x90, 0x06,
-0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36,
-0x74, 0x7B, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x3A, 0x93, 0x7D, 0x02, 0x7F,
-0x03, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x06, 0x04, 0xE0, 0x44,
-0x80, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, 0xF0, 0x12, 0x4F, 0x28, 0xE5, 0x62, 0x20, 0xE0,
-0x05, 0xE4, 0x90, 0x93, 0x42, 0xF0, 0x22, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x10, 0x12, 0x51,
-0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x5C, 0xE5, 0x14,
-0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x50, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94,
-0x01, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x3F, 0x90, 0x02, 0x87, 0xE0, 0x60,
-0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x31, 0x90, 0x01, 0xAF, 0xE0, 0x60, 0x02, 0x80,
-0x07, 0x90, 0x02, 0x86, 0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x1A,
-0x90, 0x93, 0x43, 0xE0, 0x70, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x0C, 0x90, 0x01,
-0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x02, 0xF0,
-0x7F, 0x00, 0x22, 0xE5, 0x62, 0x64, 0x01, 0x70, 0x6B, 0xE5, 0x65, 0x60, 0x67, 0xE5, 0x65, 0x64,
-0x02, 0x60, 0x06, 0xE5, 0x65, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x93, 0x40,
-0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x93, 0x57, 0xF0, 0x90, 0x93, 0x40, 0xE0, 0x70, 0x07, 0x90,
-0x93, 0x57, 0xE0, 0xFF, 0x80, 0x05, 0x90, 0x93, 0x40, 0xE0, 0xFF, 0x90, 0x93, 0x40, 0xEF, 0xF0,
-0x90, 0x93, 0x42, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x93, 0x58,
-0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
-0x02, 0xF0, 0x53, 0x66, 0xFD, 0x53, 0x66, 0xEF, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80,
-0x03, 0x12, 0x49, 0x32, 0x22, 0x90, 0x93, 0xB1, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x91, 0x80, 0x0C,
-0x90, 0x93, 0xB1, 0xE0, 0x70, 0x04, 0x7D, 0xD4, 0x80, 0x02, 0x7D, 0x40, 0x7F, 0x93, 0x12, 0x54,
-0x0A, 0x90, 0x00, 0x29, 0xE0, 0x54, 0x3F, 0xFD, 0x7F, 0x29, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x28,
-0xE0, 0x54, 0xFC, 0xFD, 0x7F, 0x28, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x08, 0xE0, 0x44, 0x10, 0xFD,
-0x7F, 0x08, 0x12, 0x54, 0x0A, 0x7F, 0x01, 0x12, 0x4E, 0x81, 0x90, 0x00, 0x00, 0xE0, 0x44, 0x20,
-0xFD, 0xE4, 0xFF, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x20, 0xE0, 0x54, 0xFE, 0xFD, 0x7F, 0x20, 0x12,
-0x54, 0x0A, 0x90, 0x00, 0x90, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x54, 0x0A, 0x7F, 0x14,
-0x7E, 0x00, 0x02, 0x3B, 0x09, 0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0, 0x13, 0x90, 0x93, 0x1A, 0xE0,
-0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x18, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x49, 0x12,
-0x51, 0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x39, 0x90,
-0x93, 0x55, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x2B, 0x90, 0x93, 0x52,
-0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x1D, 0xE5, 0x64, 0x54, 0x0F, 0xD3,
-0x94, 0x04, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4,
-0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x7F, 0x00,
-0x22, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xC8, 0x12, 0x44, 0xF1, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8,
-0x12, 0x1E, 0xF6, 0xF5, 0x65, 0x14, 0x60, 0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03,
-0x70, 0x44, 0x7F, 0x01, 0x80, 0x3D, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12,
-0x1F, 0x0F, 0xFD, 0xE4, 0xFF, 0x12, 0x50, 0x39, 0x80, 0x29, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8,
-0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x01, 0x12, 0x50, 0x39, 0x1F, 0x80, 0x14, 0x90,
-0x93, 0x8A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x02, 0x12, 0x50,
-0x39, 0xE4, 0xFF, 0x12, 0x4B, 0x7A, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x24,
-0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x90,
-0x04, 0x1D, 0xE0, 0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x27, 0x74, 0xFF, 0xF0, 0x12, 0x5E,
-0x42, 0xBF, 0x01, 0x0D, 0x90, 0x93, 0xAA, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x1F, 0x12, 0x49,
-0xD0, 0x90, 0x05, 0x22, 0xE5, 0x27, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0xAA, 0xE0, 0xFF, 0x7D, 0x01,
-0x12, 0x58, 0x1F, 0x12, 0x49, 0xD0, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0x8F, 0x6C, 0xE4, 0x90, 0x94, 0x44, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00,
-0x30, 0xE7, 0x02, 0x7F, 0x01, 0xEF, 0x65, 0x6C, 0x60, 0x3E, 0xC3, 0x90, 0x94, 0x45, 0xE0, 0x94,
-0x88, 0x90, 0x94, 0x44, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x80, 0xF0,
-0x22, 0x90, 0x94, 0x44, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00, 0x12,
-0x3B, 0x09, 0xD3, 0x90, 0x94, 0x45, 0xE0, 0x94, 0x32, 0x90, 0x94, 0x44, 0xE0, 0x94, 0x00, 0x40,
-0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE0, 0xB2, 0x22, 0x90, 0x00, 0x20, 0xE0, 0x44, 0x01, 0xFD,
-0x7F, 0x20, 0x12, 0x54, 0x0A, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x00, 0xE0,
-0x54, 0xDF, 0xFD, 0xE4, 0xFF, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x28, 0xE0, 0x44, 0x03, 0xFD, 0x7F,
-0x28, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x08, 0xE0, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x54, 0x0A,
-0xE4, 0xFF, 0x12, 0x4E, 0x81, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x29, 0xE0,
-0x44, 0xC0, 0xFD, 0x7F, 0x29, 0x02, 0x54, 0x0A, 0xE4, 0xFF, 0x90, 0x00, 0x6A, 0xE0, 0x30, 0xE2,
-0x22, 0xE0, 0x30, 0xE0, 0x20, 0xE0, 0x30, 0xE1, 0x0D, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x02, 0x30,
-0xE3, 0x13, 0x7F, 0x03, 0x80, 0x0F, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x03, 0x30, 0xE3, 0x06, 0x7F,
-0x02, 0x80, 0x02, 0x7F, 0x03, 0xEF, 0xFD, 0xD3, 0x90, 0x93, 0x4E, 0xE0, 0x9D, 0x90, 0x93, 0x4D,
-0xE0, 0x94, 0x00, 0x50, 0x05, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0xA3, 0xE0,
-0x90, 0x05, 0x58, 0xF0, 0x22, 0x48, 0x93, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x48, 0x93, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x93, 0x9F, 0x00, 0x41,
-0x93, 0xAE, 0x00, 0x41, 0x93, 0x94, 0x00, 0x41, 0x94, 0x4C, 0x00, 0x41, 0x93, 0x13, 0x00, 0x41,
-0x93, 0x14, 0x00, 0x41, 0x92, 0x69, 0x00, 0x41, 0x92, 0x6A, 0x00, 0x41, 0x92, 0x68, 0x00, 0x41,
-0x94, 0x3D, 0x00, 0x41, 0x94, 0x4A, 0x00, 0x00, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
-0x93, 0x56, 0x74, 0x01, 0xF0, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x94, 0x31, 0x12,
-0x1F, 0xC9, 0x90, 0x94, 0x31, 0x12, 0x43, 0x84, 0xEC, 0x44, 0x02, 0xFC, 0x90, 0x94, 0x31, 0x12,
-0x1F, 0xC9, 0x90, 0x94, 0x31, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00,
-0x7E, 0x08, 0x12, 0x34, 0x30, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50,
-0x02, 0x80, 0x35, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x2E, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09,
-0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x12, 0x9B, 0x40, 0x90, 0x93, 0x59, 0xE0,
-0x60, 0x06, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x0D, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
-0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x22, 0xEF, 0x14, 0x60, 0x09, 0x14, 0x60, 0x16,
-0x24, 0x02, 0x70, 0x32, 0x80, 0x0A, 0x90, 0x93, 0x57, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x40, 0xF0,
-0xE4, 0x90, 0x93, 0x5C, 0xF0, 0x22, 0xED, 0x70, 0x0A, 0x90, 0x93, 0x50, 0xE0, 0x90, 0x93, 0x57,
-0xF0, 0x80, 0x05, 0x90, 0x93, 0x57, 0xED, 0xF0, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x93, 0x40, 0xF0,
-0x90, 0x93, 0x5C, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
-0x08, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C,
-0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02,
-0xF0, 0x90, 0x93, 0x52, 0x14, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x0C, 0x50, 0x03, 0x12,
-0x4A, 0x65, 0x22, 0x90, 0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00,
-0xFF, 0xEC, 0x3E, 0x90, 0x93, 0x3E, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x01, 0x04, 0xE0, 0x54, 0x0F,
-0xFF, 0x74, 0x40, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
-0xF9, 0x90, 0x93, 0x54, 0xF0, 0xEE, 0x90, 0x93, 0x53, 0xF0, 0x22, 0xEF, 0x70, 0x0B, 0x90, 0x93,
-0xB0, 0xE0, 0x90, 0x94, 0x35, 0x60, 0x0B, 0x80, 0x12, 0x90, 0x93, 0xB0, 0xE0, 0x90, 0x94, 0x35,
-0x60, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x02, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00,
-0x01, 0x10, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x35, 0x7F, 0x60, 0x7E, 0x08, 0x02, 0x55, 0x6B, 0x90,
-0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x5E, 0x42, 0xEF, 0x70,
-0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93, 0x12, 0x54,
-0x62, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x90, 0x93, 0x46, 0xE0, 0x70, 0x1A, 0x90, 0x04,
-0x1D, 0xE0, 0x70, 0x14, 0x90, 0x93, 0xA9, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x58, 0x1F, 0x8E, 0x6A,
-0x8F, 0x6B, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0x47, 0xE0, 0x60, 0x16, 0x90,
-0x93, 0x4A, 0xE0, 0x70, 0x10, 0x90, 0x93, 0x44, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74, 0x0D,
-0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF, 0xF0, 0xEF, 0x60, 0x0A,
-0xE5, 0x62, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x4E, 0x27, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x0C,
-0x22, 0x90, 0x94, 0x4D, 0xEF, 0xF0, 0x12, 0x98, 0x56, 0x90, 0x94, 0x4D, 0xE0, 0x60, 0x05, 0x90,
-0x05, 0x22, 0xE4, 0xF0, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4,
-0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60,
-0x02, 0x7F, 0x00, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x05,
-0x7F, 0x01, 0x12, 0x4E, 0x27, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0xE5, 0x64, 0x30, 0xE6,
-0x12, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0x90, 0x01, 0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0,
-0x53, 0x64, 0xBF, 0x22, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x01, 0x12, 0x4C, 0xE5, 0x12, 0x4E, 0xD9,
-0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x7D, 0x01, 0xAF, 0x64, 0x02, 0x4A, 0x69, 0x90, 0x02,
-0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12, 0x43,
-0xF7, 0x52, 0x49, 0x00, 0x40, 0x52, 0x71, 0x00, 0x80, 0x52, 0x9C, 0x01, 0x00, 0x52, 0xB0, 0x02,
-0x00, 0x52, 0xC8, 0x04, 0x00, 0x00, 0x00, 0x52, 0xE5, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE, 0xFF,
-0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06, 0xCE,
-0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x80,
-0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF, 0x2D,
-0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x07,
-0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04, 0xFE,
-0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80, 0x35,
-0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF, 0x2D,
-0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE, 0xFF,
-0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D, 0x00,
-0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x21, 0xF0,
-0xA3, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x75, 0xF0, 0xA3, 0xF0, 0xF1, 0x9F, 0x75, 0x8E, 0x02,
-0xB1, 0x34, 0xF1, 0xBF, 0x90, 0x93, 0xB1, 0xEF, 0xF0, 0xF1, 0xA7, 0x90, 0x93, 0xB3, 0xEF, 0xF0,
-0x12, 0x60, 0x3E, 0x90, 0x93, 0x95, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x14, 0xF5, 0x09,
-0xF5, 0x62, 0x90, 0x93, 0xB0, 0xF0, 0x90, 0x00, 0xCC, 0xE0, 0x54, 0xF7, 0xF0, 0x12, 0x88, 0x77,
-0x12, 0x47, 0x33, 0x12, 0x37, 0x1C, 0xF1, 0xB3, 0x71, 0xE1, 0x12, 0x60, 0x02, 0xF1, 0xD2, 0xF1,
-0x98, 0x12, 0x60, 0x20, 0x12, 0x44, 0xFD, 0x12, 0x60, 0xAC, 0xB1, 0x1C, 0x90, 0x93, 0x77, 0xE5,
-0xD9, 0xF0, 0xC2, 0xAF, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40, 0xF0, 0x91, 0x52, 0x75, 0xE8, 0x03,
-0x43, 0xA8, 0x85, 0x12, 0x96, 0x12, 0xD2, 0xAF, 0x51, 0xEA, 0x12, 0x60, 0x56, 0x90, 0x93, 0x75,
-0xE0, 0x64, 0x01, 0xF0, 0x24, 0xF4, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x52, 0xA3, 0xF0, 0xE5, 0x14,
-0x30, 0xE0, 0x09, 0xC2, 0xAF, 0x53, 0x14, 0xFE, 0xB1, 0x44, 0xD2, 0xAF, 0xE5, 0x14, 0x30, 0xE4,
-0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xEF, 0xD2, 0xAF, 0x12, 0x6F, 0xCE, 0xE5, 0x14, 0x30, 0xE6, 0x0A,
-0xC2, 0xAF, 0x53, 0x14, 0xBF, 0xD2, 0xAF, 0x12, 0x80, 0x74, 0xE5, 0x14, 0x30, 0xE7, 0x09, 0xC2,
-0xAF, 0x53, 0x14, 0x7F, 0xD2, 0xAF, 0xB1, 0xD2, 0xC2, 0xAF, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0xBF,
-0x01, 0x0D, 0x90, 0x93, 0x43, 0x74, 0x01, 0xF0, 0x51, 0x17, 0xE4, 0x90, 0x93, 0x43, 0xF0, 0xD2,
-0xAF, 0x90, 0x01, 0xBD, 0xE5, 0x63, 0xF0, 0x90, 0x93, 0x59, 0xE0, 0x90, 0x01, 0xBC, 0xF0, 0x80,
-0x8C, 0x90, 0x01, 0x3C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3,
-0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x54, 0x91, 0x0A, 0x7D, 0xFF, 0x7F, 0x55, 0x91, 0x0A,
-0x7D, 0xFF, 0x7F, 0x56, 0x91, 0x0A, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
-0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xED, 0xF0, 0x91, 0x52, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
-0x01, 0x30, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0,
-0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x91, 0x0A, 0xE4, 0xFD, 0x7F, 0x51, 0x91, 0x0A, 0xE4,
-0xFD, 0x7F, 0x52, 0x91, 0x0A, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0x90, 0x00, 0x02, 0xE0, 0x44,
-0x01, 0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xF2, 0x12, 0x1F, 0xD5, 0x00,
-0x00, 0x00, 0x00, 0x90, 0x93, 0xF6, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x02,
-0xE0, 0x54, 0xFE, 0xF0, 0x91, 0x52, 0x91, 0x4B, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x90,
-0x01, 0x00, 0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20,
-0xF0, 0x90, 0x93, 0x4A, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x3D,
-0xE0, 0x60, 0x34, 0xE4, 0x90, 0x93, 0x56, 0xF0, 0xFF, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93,
-0xF2, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF2, 0x12, 0x43, 0x84, 0xEC, 0x54, 0xFD, 0xFC, 0x90, 0x93,
-0xF2, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF2, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9,
-0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x47, 0xE0, 0x60, 0x22, 0xE4, 0xFF, 0x11,
-0xEB, 0x90, 0x93, 0x5B, 0xE0, 0x60, 0x12, 0x90, 0x93, 0xF6, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03,
-0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xF6, 0xB1, 0x67, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90,
-0x93, 0x51, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x94, 0x3E, 0xE0,
-0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x94, 0x40, 0xF0, 0x90, 0x94, 0x3E, 0xE0, 0x54, 0x7F, 0xF0, 0xA3,
-0x74, 0x0A, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0xAD, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD,
-0x7F, 0x80, 0x81, 0x0A, 0xE4, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x6B, 0x12, 0x73, 0x70, 0xEF, 0xB4,
-0x02, 0x14, 0x90, 0x94, 0x4A, 0xE0, 0x64, 0x04, 0x60, 0x07, 0x43, 0x14, 0x01, 0xE0, 0x04, 0xF0,
-0x22, 0xE4, 0x90, 0x94, 0x4A, 0xF0, 0x22, 0x7F, 0x70, 0x7E, 0x08, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
-0xC0, 0xD0, 0xEF, 0x54, 0xFC, 0xFF, 0x90, 0x01, 0xE8, 0xF0, 0xEE, 0x44, 0xF0, 0xA3, 0xF0, 0x90,
-0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEC, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90,
-0x01, 0xED, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEE, 0xF0, 0x12, 0x1E, 0xF6,
-0x90, 0x01, 0xEF, 0xF0, 0x90, 0x01, 0xEB, 0x74, 0x40, 0xF0, 0x12, 0x96, 0xFC, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0x90, 0x93, 0x04, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x16, 0xEF, 0x7B, 0x01, 0xB4, 0x01,
-0x06, 0x7A, 0x93, 0x79, 0x0B, 0x80, 0x04, 0x7A, 0x93, 0x79, 0x07, 0x7F, 0x80, 0x7E, 0x08, 0xB1,
-0x6B, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1, 0x40, 0xEF, 0x60, 0x4E, 0x90, 0x92,
-0x69, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6E, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01,
-0xC0, 0x02, 0xC0, 0x01, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74, 0x92, 0x35, 0xF0,
-0xFA, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0xD0, 0x01, 0xD0, 0x02, 0xD1, 0x31, 0x90, 0x92, 0x69,
-0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92,
-0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x10, 0x12, 0x43, 0xC8, 0x90, 0x92,
-0x68, 0xE0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0xF1, 0x40, 0xEF, 0x70, 0x02, 0xC1, 0xEC, 0x90,
-0x94, 0x10, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x75, 0x23, 0x02, 0x7B, 0x01,
-0x7A, 0x01, 0x79, 0xA0, 0xD1, 0xF1, 0x90, 0x94, 0x13, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21,
-0x89, 0x22, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5,
-0x23, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2, 0xD1, 0xF1, 0x90, 0x01, 0xAF, 0x74, 0xFF, 0xF0, 0x90,
-0x93, 0xB1, 0xE0, 0x64, 0x01, 0x70, 0x48, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A,
-0x21, 0x89, 0x22, 0x75, 0x23, 0x02, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x20, 0xD1, 0xF1, 0x90, 0x94,
-0x13, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8,
-0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x22, 0xD1,
-0xF1, 0x90, 0x93, 0x95, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0x74, 0xFF, 0xF0, 0x90,
-0x92, 0x68, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x94,
-0x0A, 0x12, 0x43, 0xC8, 0xAB, 0x20, 0xAA, 0x21, 0xA9, 0x22, 0x90, 0x94, 0x0D, 0x12, 0x43, 0xC8,
-0xAF, 0x23, 0x15, 0x23, 0xEF, 0x60, 0x1E, 0x90, 0x94, 0x0D, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43,
-0xB1, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x94, 0x0A, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0xEF,
-0x12, 0x42, 0x53, 0x80, 0xDB, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9, 0x1F, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0x7F, 0xAF, 0x7E, 0x01, 0x90, 0x94, 0x39, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3,
-0xF0, 0x90, 0x94, 0x39, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C, 0xC3,
-0x90, 0x94, 0x3C, 0xE0, 0x94, 0xE8, 0x90, 0x94, 0x3B, 0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01,
-0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x94, 0x3B, 0xE4, 0x75, 0xF0, 0x01, 0x12,
-0x42, 0x87, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x80, 0xC6, 0x7F, 0x01, 0x22, 0x8F, 0x82,
-0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x64, 0x74, 0x20, 0xF0, 0x22, 0x90,
-0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30, 0xE3, 0x02,
-0x7F, 0x01, 0x22, 0xE4, 0x90, 0x92, 0x69, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xAF, 0xF0, 0x22, 0x90,
-0x00, 0xF4, 0xE0, 0x20, 0xE3, 0x09, 0xE0, 0x7F, 0x01, 0x20, 0xE2, 0x05, 0x7F, 0x02, 0x22, 0x7F,
-0x00, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74, 0x10, 0xF0, 0x90,
-0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01,
-0xC4, 0x74, 0xE7, 0xF0, 0x74, 0x57, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05,
-0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7,
-0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3,
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF,
-0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x0E, 0x74, 0x0F,
-0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0,
-0x54, 0xEF, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x3F, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0xFD,
-0x62, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x93, 0x67, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x54, 0x3F, 0x25,
-0xE0, 0x25, 0xE0, 0xFF, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x93, 0x68, 0xF0, 0x90,
-0x93, 0x67, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xE4, 0xFF, 0x90, 0x94, 0x1C, 0xEF, 0xF0, 0xA3, 0xED,
-0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x19, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x94,
-0x21, 0xF0, 0xD1, 0x3C, 0xBF, 0x01, 0x02, 0x11, 0xEC, 0x90, 0x94, 0x21, 0xE0, 0x90, 0x05, 0x22,
-0xF0, 0x80, 0x02, 0x11, 0xEC, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0xAC, 0xE0,
-0xFF, 0x7D, 0x01, 0x11, 0x1F, 0x90, 0x94, 0x1F, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90,
-0x94, 0x1C, 0xE0, 0xFF, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x94, 0x2B, 0xF0, 0xEF, 0x60, 0x10,
-0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x0E,
-0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05,
-0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x74, 0x11,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05, 0x74, 0x16,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x02, 0xF0, 0x74, 0x16, 0x2F, 0xF5,
-0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0x03, 0xF0, 0xAE, 0x05, 0x74, 0x22, 0x2E, 0xF5,
-0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEB, 0xF0, 0x90, 0x94, 0x2B, 0xE0, 0xFF, 0x74, 0x23, 0x2E,
-0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x63, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0x12, 0x9B, 0x6E, 0x90, 0x93, 0x27, 0xE0,
-0x64, 0x01, 0x60, 0x02, 0x41, 0xAE, 0x90, 0x93, 0x1A, 0xE0, 0x30, 0xE0, 0x18, 0xE0, 0xC3, 0x13,
-0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90, 0x93, 0x1A, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x06, 0xA3,
-0xE0, 0x90, 0x93, 0x63, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x63, 0xE0, 0x24, 0x03, 0xF5, 0x49,
-0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0,
-0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x27, 0x30, 0xE0, 0x05, 0x74, 0x05, 0xF0,
-0x80, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F,
-0x90, 0x93, 0x16, 0xE0, 0xFF, 0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90,
-0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x54, 0x07, 0x30, 0xE0, 0x6E, 0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25,
-0xE0, 0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xB9,
-0x80, 0x51, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0,
-0x54, 0xDF, 0xF0, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x30, 0xE0, 0x27, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB,
-0xF0, 0xE4, 0x90, 0x93, 0x2A, 0xF0, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x06, 0xF0,
-0x90, 0x93, 0x4C, 0xE0, 0x60, 0x07, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22,
-0x74, 0x6F, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0xA1, 0xAC, 0x90, 0x93,
-0x27, 0xE0, 0x64, 0x02, 0x60, 0x02, 0x61, 0x8D, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54,
-0x3F, 0x30, 0xE0, 0x08, 0xD1, 0x3C, 0xBF, 0x01, 0x03, 0x12, 0x54, 0x62, 0xE4, 0xFF, 0xD1, 0xE6,
-0x90, 0x93, 0x1A, 0xE0, 0x30, 0xE0, 0x1F, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90,
-0x93, 0x1A, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x90, 0x93, 0x63, 0xF0, 0x90,
-0x93, 0x1A, 0xE0, 0x54, 0xEF, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x16, 0xE0, 0x24, 0x03, 0xFF,
-0x90, 0x93, 0x63, 0xE0, 0x2F, 0xFF, 0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0xFF, 0x90, 0x93, 0x64,
-0xE0, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
-0x63, 0x74, 0x05, 0xF0, 0xE4, 0xFF, 0xD1, 0x83, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x93,
-0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80,
-0x2F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4,
-0x13, 0x54, 0x07, 0x20, 0xE0, 0x14, 0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x80, 0x0B, 0xE5,
-0x65, 0x60, 0x0D, 0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0,
-0x90, 0x93, 0x18, 0xE0, 0x30, 0xE0, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0,
-0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0xC1, 0x36, 0x90, 0x93, 0x27,
-0xE0, 0x64, 0x03, 0x60, 0x02, 0x81, 0xE1, 0x7F, 0x01, 0xD1, 0xE6, 0x90, 0x93, 0x19, 0xE0, 0xFF,
-0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x98, 0x56, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x20, 0xE0, 0x02, 0x81, 0x3D, 0x90, 0x93, 0x1F, 0xE0, 0xFF, 0x90, 0x93, 0x29,
-0xE0, 0xD3, 0x9F, 0x40, 0x4D, 0xE0, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0xFE,
-0xC3, 0xEF, 0x9E, 0xFF, 0x24, 0x03, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x93, 0x17, 0xE0, 0xD3, 0x9D,
-0xEC, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x40, 0x08, 0xE0, 0x9F, 0x90, 0x93, 0x66, 0xF0, 0x80,
-0x06, 0x90, 0x93, 0x66, 0x74, 0x03, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x66, 0xE0, 0xF5, 0x49,
-0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0,
-0x80, 0x24, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x22, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60,
-0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x1D, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x27, 0xF0,
-0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x29, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48,
-0x90, 0x93, 0x65, 0xE0, 0xFF, 0x90, 0x93, 0x17, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD,
-0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x63,
-0x74, 0x05, 0xF0, 0x7F, 0x01, 0xD1, 0x83, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20,
-0xE0, 0x2F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1A, 0x90, 0x93, 0x1A, 0xE0,
-0x44, 0x20, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x02, 0x80, 0x0F, 0x90, 0x05, 0x22, 0xE4, 0xF0,
-0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x08, 0xE5, 0x65, 0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A,
-0x69, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90,
-0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0x13,
-0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x51, 0x48, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93,
-0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0x7F, 0x01, 0xC1,
-0x38, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x04, 0x60, 0x02, 0xA1, 0xB2, 0xF5, 0x48, 0x75, 0x49, 0x03,
-0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90,
-0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F,
-0x90, 0x93, 0x17, 0xE0, 0xFF, 0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90,
-0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x54, 0x07, 0x30, 0xE0, 0x6E, 0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25,
-0xE0, 0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xB9,
-0x80, 0x51, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0,
-0x54, 0xDF, 0xF0, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x30, 0xE0, 0x27, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB,
-0xF0, 0xE4, 0x90, 0x93, 0x2A, 0xF0, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x07, 0xF0,
-0x90, 0x93, 0x4C, 0xE0, 0x60, 0x07, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22,
-0x74, 0x6F, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0x90, 0x05, 0x22, 0xE4,
-0xF0, 0x22, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x05, 0x60, 0x02, 0xC1, 0x3B, 0x90, 0x93, 0x19, 0xE0,
-0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x08, 0xD1, 0x3C, 0xBF, 0x01, 0x03, 0x12, 0x54, 0x62,
-0xE4, 0xFF, 0xD1, 0xE6, 0xD1, 0x83, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4,
-0x13, 0x54, 0x07, 0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F, 0x90, 0x93,
-0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07,
-0x20, 0xE0, 0x14, 0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x80, 0x0B, 0xE5, 0x65, 0x60, 0x0D,
-0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x18,
-0xE0, 0x30, 0xE0, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13,
-0x13, 0x54, 0x01, 0x30, 0xE0, 0x05, 0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x22, 0x90, 0x05, 0x22, 0x74,
-0xFF, 0xF0, 0xE4, 0x90, 0x94, 0x48, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3,
-0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90,
-0x94, 0x49, 0xE0, 0x94, 0xE8, 0x90, 0x94, 0x48, 0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22,
-0x7F, 0x32, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x94, 0x48, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42,
-0x87, 0x80, 0xC6, 0x90, 0x94, 0x2C, 0xEF, 0xF0, 0x12, 0x9D, 0x17, 0x90, 0x93, 0x18, 0xE0, 0xFF,
-0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x08, 0x90, 0x94, 0x2C, 0xE0, 0xFF, 0x12, 0x50, 0xEB, 0x90,
-0x94, 0x2D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x90, 0x94, 0x2C, 0xE0, 0xB4, 0x01, 0x10,
-0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x16, 0x80, 0x0A,
-0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90, 0x94, 0x2D, 0x12, 0x1F, 0xD5,
-0x00, 0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x2D, 0x12, 0x55, 0x67, 0x90, 0x94, 0x2C,
-0xE0, 0x90, 0x93, 0x26, 0xF0, 0x22, 0xEF, 0x64, 0x03, 0x60, 0x02, 0xE1, 0xB4, 0x90, 0x94, 0x02,
-0x74, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0x13, 0x13, 0x13,
-0x54, 0x1F, 0x30, 0xE0, 0x30, 0x90, 0x94, 0x06, 0x74, 0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0, 0xA3,
-0x74, 0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0,
-0x41, 0x90, 0x94, 0x02, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3,
-0x74, 0x55, 0xF0, 0x80, 0x2D, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x17, 0x90,
-0x94, 0x02, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55,
-0xF0, 0xA3, 0x74, 0x5A, 0x80, 0x05, 0x90, 0x94, 0x06, 0x74, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0xA3, 0xF0, 0x90, 0x94, 0x02, 0xE0, 0x90, 0x06, 0xC0, 0xF0, 0x90, 0x94, 0x03, 0xE0, 0x90, 0x06,
-0xC1, 0xF0, 0x90, 0x94, 0x04, 0xE0, 0x90, 0x06, 0xC2, 0xF0, 0x90, 0x94, 0x05, 0xE0, 0x90, 0x06,
-0xC3, 0xF0, 0x90, 0x94, 0x06, 0xE0, 0x90, 0x06, 0xC4, 0xF0, 0x90, 0x94, 0x07, 0xE0, 0x90, 0x06,
-0xC5, 0xF0, 0x90, 0x94, 0x08, 0xE0, 0x90, 0x06, 0xC6, 0xF0, 0x90, 0x94, 0x09, 0xE0, 0x90, 0x06,
-0xC7, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x06, 0xCC, 0x30, 0xE0,
-0x17, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xEF, 0x90,
-0x06, 0xCC, 0xB4, 0x01, 0x03, 0xE4, 0xF0, 0x22, 0x74, 0x03, 0xF0, 0x22, 0x12, 0x57, 0xE7, 0xBF,
-0x01, 0x0F, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x1F, 0x90, 0x04, 0x1F, 0x74, 0x20,
-0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC, 0xEF, 0x30, 0xE0, 0x02,
-0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5, 0x2B, 0x90, 0x01, 0x30,
-0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3, 0xE5, 0x2B, 0xF0, 0x22,
-0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32, 0x43, 0x32, 0x20, 0x90,
-0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32, 0xF0, 0x22, 0x90, 0x93,
-0xB3, 0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E, 0xFD, 0x7F, 0x33,
-0x22, 0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0xE4, 0x90, 0x93, 0x78, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x98,
-0xE0, 0x7F, 0x00, 0x30, 0xE4, 0x02, 0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E, 0xC3, 0x90, 0x93,
-0x79, 0xE0, 0x94, 0x88, 0x90, 0x93, 0x78, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0,
-0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0x78, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14,
-0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0x79, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x78, 0xE0,
-0x94, 0x00, 0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0x90, 0x01, 0x01, 0xE0,
-0x44, 0x04, 0xF0, 0x90, 0x01, 0x9C, 0x74, 0x7E, 0xF0, 0xA3, 0x74, 0x92, 0xF0, 0xA3, 0x74, 0xA0,
-0xF0, 0xA3, 0x74, 0x24, 0xF0, 0x90, 0x01, 0x9B, 0x74, 0x49, 0xF0, 0x90, 0x01, 0x9A, 0x74, 0xE0,
-0xF0, 0x90, 0x01, 0x99, 0xE4, 0xF0, 0x90, 0x01, 0x98, 0x04, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0,
-0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04,
-0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x93, 0x5D, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01,
-0x80, 0x18, 0xEE, 0x64, 0x01, 0x60, 0x07, 0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3C, 0x90, 0x93,
-0x5D, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x3D, 0xF0, 0x79, 0x40, 0x90, 0x93, 0x5D, 0xE0, 0xFE, 0xA3,
-0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x93, 0x9F,
-0xF0, 0x22, 0x90, 0x93, 0x9F, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0C, 0xE4, 0xF0,
-0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x5F, 0xCC, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0,
-0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03,
-0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x4B, 0xF0, 0x74, 0x61,
-0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x28, 0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D,
-0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E, 0xA3, 0xE0, 0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0,
-0x02, 0x61, 0x45, 0x90, 0x01, 0x34, 0x74, 0x01, 0xF0, 0x85, 0xD1, 0x0A, 0x85, 0xD3, 0x0C, 0x85,
-0xD4, 0x0D, 0x85, 0xD5, 0x0E, 0x85, 0xD6, 0x0F, 0x85, 0xD7, 0x10, 0x85, 0xD9, 0x11, 0x85, 0xD2,
-0x0B, 0x75, 0x20, 0x00, 0x75, 0x21, 0x00, 0x75, 0x22, 0x0A, 0x75, 0x23, 0x08, 0xFB, 0x7A, 0x93,
-0x79, 0xA0, 0x12, 0x56, 0xF1, 0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x01, 0xFE, 0xEF,
-0xC4, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x70, 0x02, 0x41, 0xF0, 0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4,
-0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0x41, 0xF0, 0xEF, 0x54, 0x1F, 0xF5, 0x4D, 0x90,
-0x93, 0xA2, 0xE0, 0x54, 0x3F, 0xF5, 0x4E, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D,
-0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42,
-0x87, 0xE5, 0x4E, 0xD3, 0x94, 0x04, 0x40, 0x03, 0x75, 0x4E, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x4D,
-0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xE0, 0xFE,
-0xA3, 0xE0, 0xFF, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0,
-0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43,
-0x9C, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0xA1, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0,
-0x2F, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82,
-0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0xA3, 0xE0, 0xFF,
-0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x67, 0xAF, 0x4D, 0x12, 0x7A, 0xB3, 0x80, 0x60,
-0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x53, 0x90, 0x93, 0xA4,
-0xE0, 0x54, 0x1F, 0xFF, 0xFD, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D,
-0xF5, 0x83, 0xE4, 0x8D, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0xA3, 0xE0, 0xFE, 0xC4, 0x13, 0x13,
-0x13, 0x54, 0x01, 0x30, 0xE0, 0x0F, 0xEE, 0x54, 0x7F, 0xFD, 0x8F, 0x55, 0xAB, 0x4E, 0xAF, 0x4D,
-0x12, 0x7A, 0x4F, 0x80, 0x1B, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x11, 0x90,
-0x04, 0x30, 0xE0, 0xB4, 0x01, 0x0A, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x04, 0xCF, 0xF0,
-0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x46, 0x90, 0x93, 0x59, 0xE0, 0x60, 0x37, 0x90,
-0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x12, 0x51, 0xBB, 0xEF, 0x64, 0x01,
-0x70, 0x2D, 0xF5, 0x48, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E,
-0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0,
-0x90, 0x93, 0x55, 0xF0, 0x80, 0x09, 0x12, 0x51, 0xBB, 0xBF, 0x01, 0x03, 0x12, 0x52, 0x17, 0x90,
-0x94, 0x4B, 0xE0, 0x04, 0xF0, 0xE5, 0x2C, 0x20, 0xE1, 0x02, 0x61, 0xE7, 0x90, 0x01, 0x34, 0x74,
-0x02, 0xF0, 0x90, 0xFD, 0x10, 0x74, 0x7F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x30, 0xE5, 0x0B, 0x75,
-0x4F, 0x88, 0x75, 0x50, 0x0F, 0x75, 0x51, 0x0F, 0x80, 0x09, 0x75, 0x4F, 0xC0, 0x75, 0x50, 0x08,
-0x75, 0x51, 0x07, 0x90, 0x04, 0x7F, 0xE0, 0x55, 0x51, 0xF5, 0x12, 0x90, 0x04, 0x7E, 0xE0, 0x55,
-0x51, 0xF5, 0x13, 0x65, 0x12, 0x60, 0x60, 0xE4, 0xFF, 0xE5, 0x12, 0x75, 0xF0, 0x08, 0xA4, 0x25,
-0x4F, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x15, 0x2F,
-0xF8, 0xA6, 0x06, 0x0F, 0xBF, 0x08, 0xE2, 0x75, 0x20, 0x00, 0x75, 0x21, 0x00, 0x75, 0x22, 0x15,
-0x75, 0x23, 0x08, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x97, 0x12, 0x56, 0xF1, 0x90, 0x93, 0x97, 0xE0,
-0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0xD1, 0x6A, 0xE5, 0x12, 0x24, 0x01,
-0xFF, 0xE4, 0x33, 0xFE, 0xAD, 0x50, 0x7C, 0x00, 0x12, 0x1F, 0x4E, 0xAF, 0x05, 0x8F, 0x12, 0x90,
-0x04, 0x7F, 0xEF, 0xF0, 0xB5, 0x13, 0xA0, 0xE5, 0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x34, 0x74,
-0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90, 0x01, 0x34, 0x74, 0x10, 0xF0, 0x43, 0x14, 0x10,
-0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF, 0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54, 0xDF, 0xF0,
-0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8, 0x00, 0x75, 0xE8, 0x00, 0x12, 0x54, 0x1F, 0x90,
-0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x54, 0x52, 0x80, 0xFE, 0xE5, 0x2C, 0x30, 0xE6, 0x06,
-0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0x81, 0xF1, 0x90, 0x93, 0xB2,
-0x74, 0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x93, 0xAF, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90,
-0x05, 0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x12, 0x45, 0x09, 0x90,
-0x93, 0x2D, 0xE0, 0x20, 0xE0, 0x02, 0x81, 0xE6, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF,
-0x12, 0x50, 0xEB, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00,
-0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x13,
-0x54, 0x07, 0xFF, 0xE0, 0xFE, 0xC3, 0x13, 0x54, 0x0F, 0xC3, 0x9F, 0x40, 0x30, 0xE0, 0x54, 0xFE,
-0xF0, 0xE0, 0x54, 0xE1, 0xF0, 0x90, 0x93, 0x32, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F,
-0xC9, 0x7F, 0x60, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x2E, 0x12, 0x43, 0x84, 0x90, 0x81,
-0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x80, 0x1C, 0x90, 0x93, 0x2D,
-0xE0, 0xFF, 0xC3, 0x13, 0x54, 0x0F, 0xFE, 0xEF, 0x54, 0xE1, 0xFF, 0xEE, 0x04, 0x54, 0x0F, 0xFE,
-0x25, 0xE0, 0x4F, 0xF0, 0x80, 0x03, 0x12, 0x6B, 0x41, 0x12, 0x6B, 0x0A, 0x90, 0x93, 0xB2, 0xE4,
-0xF0, 0xE5, 0x2E, 0x30, 0xE1, 0x45, 0x90, 0x01, 0x36, 0x74, 0x02, 0xF0, 0x43, 0x14, 0x40, 0x12,
-0x9D, 0x70, 0x11, 0xDC, 0x90, 0x93, 0x5C, 0xE0, 0x60, 0x1D, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4,
-0x16, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90,
-0x93, 0x57, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x05, 0x08, 0xE5, 0x08, 0xC3, 0x94, 0xFF, 0x40, 0x0B,
-0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x43,
-0x90, 0x01, 0x36, 0x74, 0x04, 0xF0, 0x12, 0x4C, 0x73, 0x90, 0x93, 0x5C, 0xE0, 0x60, 0x34, 0x90,
-0x93, 0x57, 0xE0, 0xFF, 0x90, 0x93, 0x40, 0xE0, 0x6F, 0x70, 0x28, 0x90, 0x93, 0x57, 0xE0, 0x90,
-0x05, 0x73, 0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x7D,
-0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93, 0x40,
-0xE0, 0x14, 0xF0, 0xE5, 0x2E, 0x30, 0xE3, 0x34, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0, 0xE5, 0x62,
-0x64, 0x01, 0x70, 0x28, 0xE5, 0x65, 0x60, 0x24, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C,
-0x74, 0x02, 0xF0, 0x75, 0x48, 0x00, 0x90, 0x93, 0x4B, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F,
-0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4,
-0x2B, 0x90, 0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x20, 0xE5, 0x65, 0x60, 0x1C,
-0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x5A, 0xE4, 0xF0,
-0x53, 0x66, 0xFD, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x52, 0x17, 0xE5, 0x2E, 0x30, 0xE5,
-0x25, 0x90, 0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x1A, 0xE5, 0x65, 0x60, 0x16,
-0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64, 0x0C, 0x60, 0x08, 0x12, 0x51,
-0x48, 0x80, 0x03, 0x12, 0x50, 0x77, 0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40,
-0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x10, 0xE5, 0x65, 0x60, 0x0C, 0x53, 0x66, 0xFE, 0xE5, 0x66, 0x54,
-0x07, 0x70, 0x03, 0x12, 0x52, 0x17, 0xE5, 0x2F, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x37, 0x74, 0x02,
-0xF0, 0x12, 0x4F, 0xFA, 0x74, 0x4B, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0xD0,
-0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0,
-0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x93, 0x5D, 0xE0, 0x54, 0xF0,
-0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x15, 0x90, 0x94,
-0x19, 0x12, 0x43, 0xC8, 0x0B, 0x7A, 0x93, 0x79, 0x5D, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x90, 0x94, 0x16, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92, 0x69, 0xE0, 0xB5,
-0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x90, 0x92, 0x69, 0xE0, 0x70, 0x06, 0xA3,
-0xE0, 0x64, 0x09, 0x60, 0x0B, 0x90, 0x92, 0x69, 0xE0, 0x14, 0xFF, 0xA3, 0xE0, 0xB5, 0x07, 0x0F,
-0x12, 0x57, 0x40, 0xEF, 0x60, 0x72, 0x12, 0x55, 0xD2, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x90,
-0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6E, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xA8, 0x01,
-0xFC, 0x7D, 0x01, 0x90, 0x94, 0x16, 0x12, 0x43, 0xA8, 0x7E, 0x00, 0x7F, 0x02, 0x12, 0x1E, 0xD0,
-0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA,
-0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x94, 0x19, 0x12, 0x43, 0xA8, 0x8B, 0x20,
-0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x16, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54,
-0x0F, 0xF5, 0x23, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x56, 0xF1, 0x90, 0x92, 0x6A, 0xE0,
-0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAD, 0x07, 0x90,
-0x93, 0x63, 0xE0, 0x54, 0xF0, 0x44, 0x05, 0xF0, 0x54, 0x0F, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x65,
-0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x65, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93,
-0x79, 0x63, 0xC1, 0x89, 0xAD, 0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x09, 0xF0, 0x54,
-0x0F, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x6E, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90,
-0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0xC1, 0x89, 0x90, 0x93, 0x8F, 0x12, 0x43,
-0xC8, 0x90, 0x93, 0x92, 0xE0, 0x54, 0xF0, 0x44, 0x02, 0xF0, 0x54, 0x0F, 0x44, 0xC0, 0xF0, 0x90,
-0x93, 0x8F, 0x12, 0x43, 0xA8, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79,
-0x92, 0xC1, 0x89, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x0D, 0xF0, 0x54, 0x0F, 0x44, 0x10,
-0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6E, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90,
-0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0xC1, 0x89, 0xC0, 0xE0, 0xC0, 0x83, 0xC0,
-0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x7D, 0xDB, 0x90, 0x01,
-0xC4, 0xED, 0xF0, 0x74, 0x67, 0xFF, 0xA3, 0xF0, 0x53, 0x91, 0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE,
-0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90, 0x00, 0x52, 0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0,
-0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06, 0x90, 0x00, 0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D,
-0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20, 0xF0, 0xE5, 0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00,
-0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7, 0x06, 0x90, 0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5,
-0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74, 0x01, 0xF0, 0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90,
-0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30, 0xE2, 0x06, 0x90, 0x00, 0x56, 0x74, 0x04, 0xF0,
-0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56, 0x74, 0x08, 0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0,
-0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0,
-0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0,
-0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x75,
-0x56, 0x00, 0x90, 0x01, 0xC4, 0x74, 0x82, 0xF0, 0x74, 0x68, 0xA3, 0xF0, 0x53, 0x91, 0xDF, 0x90,
-0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0, 0x55, 0x31, 0xF5, 0x35, 0xA3, 0xE0, 0x55,
-0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37, 0xE5, 0x34, 0x30, 0xE0, 0x06, 0x90, 0x01,
-0x3C, 0x74, 0x01, 0xF0, 0xE5, 0x34, 0x30, 0xE1, 0x10, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90,
-0x93, 0x15, 0xE0, 0x20, 0xE0, 0x03, 0x12, 0x46, 0x79, 0xE5, 0x34, 0x30, 0xE2, 0x36, 0x90, 0x01,
-0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE0, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93,
-0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
-0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x55, 0xE4,
-0xF0, 0x12, 0x52, 0x17, 0xE5, 0x34, 0x30, 0xE3, 0x36, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0x90,
-0x06, 0x92, 0xE0, 0x30, 0xE1, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4,
-0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90,
-0x06, 0x92, 0x74, 0x02, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x52, 0xE4, 0xF0, 0x12, 0x52, 0x17, 0xE5,
-0x34, 0x30, 0xE4, 0x34, 0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x30, 0xE0,
-0x24, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x07, 0x78, 0x74,
-0x01, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08,
-0x12, 0x34, 0x30, 0x80, 0x03, 0x12, 0x59, 0x97, 0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3C,
-0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x18, 0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90, 0x00,
-0x83, 0xE0, 0xF5, 0x64, 0x90, 0x01, 0xBB, 0xE5, 0x64, 0xF0, 0x12, 0x51, 0xEC, 0x12, 0x52, 0x17,
-0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3D, 0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B,
-0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90, 0x93, 0xAE, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05,
-0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0xFD, 0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x06,
-0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0xE5, 0x36, 0x30, 0xE1, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x02,
-0xF0, 0xE5, 0x36, 0x30, 0xE3, 0x08, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xD1, 0x43, 0xE5, 0x36,
-0x30, 0xE4, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x10, 0xF0, 0xE5, 0x36, 0x30, 0xE2, 0x76, 0x90, 0x01,
-0x3E, 0x74, 0x04, 0xF0, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE7, 0x13, 0x74, 0x80, 0xF0, 0x90, 0x07,
-0x95, 0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x44, 0x04, 0xF0, 0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x90, 0x07,
-0x8F, 0xE0, 0x30, 0xE6, 0x12, 0x74, 0x40, 0xF0, 0x90, 0x07, 0x7C, 0xE0, 0xB4, 0x06, 0x08, 0x90,
-0x07, 0x80, 0xE0, 0xFF, 0x12, 0x67, 0x3D, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE5, 0x14, 0x74, 0x20,
-0xF0, 0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3, 0xE0, 0x44,
-0x01, 0xF0, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE2, 0x0D, 0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x54, 0xFB,
-0xF0, 0x7F, 0x01, 0x12, 0x55, 0xB2, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE0, 0x07, 0x74, 0x01, 0xF0,
-0xFF, 0x12, 0x55, 0xB2, 0xE5, 0x36, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x20, 0xF0, 0xE5,
-0x36, 0x30, 0xE6, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x40, 0xF0, 0xE5, 0x36, 0x30, 0xE7, 0x06, 0x90,
-0x01, 0x3E, 0x74, 0x80, 0xF0, 0xE5, 0x37, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0,
-0x43, 0x14, 0x80, 0xE5, 0x37, 0x30, 0xE4, 0x1C, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0x12, 0x44,
-0x24, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x93,
-0x71, 0x41, 0x71, 0x0A, 0x74, 0x82, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x68, 0xA3, 0xF0, 0xD0,
-0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0,
-0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x94, 0x3E, 0xE0, 0x30, 0xE0,
-0x2F, 0xE5, 0x62, 0xB4, 0x01, 0x2A, 0x90, 0x94, 0x3D, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x0B,
-0x90, 0x94, 0x40, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x3D, 0xF0, 0x90, 0x94, 0x40, 0xE0, 0xFF,
-0x90, 0x94, 0x3F, 0xE0, 0xD3, 0x9F, 0x50, 0x08, 0x12, 0x44, 0xFE, 0xE4, 0x90, 0x94, 0x40, 0xF0,
-0x22, 0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0, 0x6F, 0x7F, 0x01, 0x12, 0x5E, 0xE6, 0x90, 0x93, 0x19,
-0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x98, 0x56, 0x7F, 0x01, 0x12, 0x5E,
-0x83, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x29, 0x90, 0x93, 0x15, 0xE0,
-0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1F, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x4C,
-0xE0, 0x60, 0x06, 0x7D, 0x01, 0x7F, 0x04, 0x80, 0x09, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x7D, 0x01,
-0x7F, 0x0C, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x4C, 0xE0, 0x90, 0x05, 0x22, 0x60, 0x05, 0x74, 0x6F,
-0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30,
-0xE0, 0x05, 0x7F, 0x01, 0x12, 0x55, 0xB2, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82,
-0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0,
-0x05, 0xC0, 0x06, 0xC0, 0x07, 0x53, 0x91, 0xBF, 0x90, 0xFD, 0x68, 0xE0, 0x20, 0xE0, 0x02, 0xC1,
-0x28, 0x90, 0x93, 0x94, 0xE0, 0x70, 0x16, 0x90, 0x00, 0x2E, 0xE0, 0x90, 0x93, 0x0F, 0xF0, 0x90,
-0x00, 0x2D, 0xE0, 0x90, 0x93, 0x10, 0xF0, 0x90, 0x93, 0x94, 0x74, 0x01, 0xF0, 0x90, 0xFD, 0x60,
-0xE0, 0x54, 0x3F, 0xD3, 0x94, 0x09, 0x50, 0x03, 0x12, 0x99, 0xB4, 0x90, 0xFD, 0x60, 0xE0, 0x64,
-0x0E, 0x60, 0x02, 0x81, 0xB9, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x20,
-0xE0, 0x02, 0x81, 0xB9, 0x90, 0xFD, 0x62, 0xE0, 0x54, 0xC0, 0xFE, 0x90, 0x07, 0x90, 0xE0, 0x54,
-0x3F, 0x4E, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x07, 0x91, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90,
-0x07, 0x92, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x07, 0x93, 0xF0, 0x90, 0x07, 0x95, 0x74, 0x01,
-0xF0, 0xEF, 0x20, 0xE0, 0x44, 0x90, 0x93, 0x04, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x19,
-0x90, 0x07, 0x78, 0x12, 0x58, 0x7F, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x49,
-0x90, 0x07, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x80, 0x40, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13,
-0x30, 0xE0, 0x11, 0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3,
-0xE0, 0x44, 0x01, 0xF0, 0x90, 0x07, 0x78, 0x80, 0x14, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0x13, 0x13,
-0x54, 0x3F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x12, 0x58, 0x7F, 0x80, 0x0C, 0xE0, 0x44, 0x10,
-0xF0, 0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x0F, 0x0A,
-0x90, 0xFD, 0x62, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xD1, 0x89, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x15,
-0x70, 0x76, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6A, 0xF0, 0xE0, 0x30, 0xE6, 0x1C, 0xF4, 0x54,
-0x3F, 0x04, 0xFF, 0x90, 0x93, 0x0F, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0xC3, 0x9F, 0x90, 0x93, 0x69,
-0xF0, 0xD3, 0x94, 0x3F, 0x40, 0x20, 0xE4, 0xF0, 0x80, 0x1C, 0x90, 0x93, 0x0F, 0xE0, 0x13, 0x13,
-0x54, 0x3F, 0xFF, 0x90, 0x93, 0x6A, 0xE0, 0x54, 0x3F, 0x2F, 0x90, 0x93, 0x69, 0xF0, 0xD3, 0x94,
-0x3F, 0x40, 0x03, 0x74, 0x3F, 0xF0, 0x90, 0x93, 0x69, 0xE0, 0xFF, 0x90, 0x01, 0xE7, 0xF0, 0xEF,
-0x54, 0x30, 0xC4, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x69, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x4F,
-0x90, 0x93, 0x6B, 0xF0, 0x90, 0x00, 0x2E, 0xF0, 0xEE, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x93, 0x10,
-0xE0, 0x54, 0x0F, 0x4F, 0x90, 0x00, 0x2D, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x21, 0x08, 0x90,
-0xFD, 0x62, 0xE0, 0xFF, 0x12, 0x67, 0x64, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x22, 0x02, 0xD1, 0x61,
-0x90, 0xFD, 0x60, 0xE0, 0x64, 0x23, 0x70, 0x7B, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x2C, 0x30,
-0xE0, 0x05, 0x74, 0x01, 0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x30, 0xE1, 0x5B,
-0x90, 0x93, 0x2D, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x7F, 0x60, 0x7E,
-0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0x32, 0x12, 0x1F, 0xC9, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x7F,
-0x70, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0x2E, 0x12, 0x1F, 0xC9, 0x90, 0x81, 0x57, 0x12,
-0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x01, 0xBE,
-0xE0, 0x04, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0x2D, 0x30, 0xE2, 0x08, 0xE0, 0x54, 0x1F,
-0x44, 0x20, 0xF0, 0x80, 0x06, 0xE0, 0x54, 0x1F, 0x44, 0x60, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0xFF,
-0x12, 0x9A, 0x20, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x24, 0x03, 0x12, 0x67, 0xB3, 0x90, 0xFD, 0x60,
-0xE0, 0xB4, 0x25, 0x13, 0x90, 0xFD, 0x62, 0xE0, 0x60, 0x0D, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x01,
-0xF0, 0x90, 0x93, 0x24, 0x74, 0x04, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x26, 0x05, 0x7F, 0x01,
-0x12, 0x9A, 0xBC, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x30, 0x07, 0xE4, 0xFB, 0xFD, 0x7F, 0x01, 0xD1,
-0xB4, 0x90, 0xFD, 0x68, 0xE0, 0x44, 0x01, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04,
-0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0,
-0xD0, 0xE0, 0x32, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x11, 0x90,
-0x93, 0x1C, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x08, 0xE0, 0x44, 0x04, 0xF0, 0xE0, 0x54, 0xFD, 0xF0,
-0x22, 0x90, 0x00, 0x75, 0xE0, 0x44, 0x01, 0xF0, 0x7F, 0x01, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90,
-0xFE, 0x13, 0x74, 0x03, 0xF0, 0x7F, 0x02, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0xE4,
-0xF0, 0x90, 0x00, 0x75, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0xAE, 0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54,
-0xF0, 0x44, 0x04, 0xF0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x6E, 0xEE, 0xF0, 0xA3, 0xED,
-0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79,
-0x6C, 0x02, 0x66, 0x89, 0xAC, 0x07, 0x90, 0x93, 0xD9, 0xE0, 0x44, 0x0F, 0xF0, 0x54, 0x0F, 0x44,
-0x70, 0xF0, 0x90, 0x93, 0xDB, 0xEC, 0xF0, 0x60, 0x32, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93, 0xDC,
-0xF0, 0x90, 0xFD, 0x61, 0xE0, 0x90, 0x93, 0xDD, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0xDE,
-0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0xDF, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93, 0xE0,
-0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0xE1, 0xF0, 0x80, 0x11, 0x90, 0x93, 0xDC, 0xED, 0xF0,
-0xA3, 0xEB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93,
-0x79, 0xDB, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0xD9, 0x02, 0x66, 0x89, 0xD3,
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x83, 0xF0, 0x90, 0x00, 0x01,
-0x12, 0x1F, 0x0F, 0x90, 0x93, 0x84, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x85,
-0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x86, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F,
-0x0F, 0x90, 0x93, 0x87, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0,
-0x14, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x83, 0x7F, 0x30, 0xF1, 0x84, 0x90, 0x93, 0x83, 0xE0, 0xFB,
-0x7D, 0x01, 0xE4, 0x80, 0x07, 0x90, 0x93, 0x83, 0xE0, 0xFB, 0xE4, 0xFD, 0xFF, 0xD1, 0xB4, 0xD0,
-0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x8A, 0x12, 0x43,
-0xC8, 0xE4, 0xFE, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x2F, 0x90, 0xFD, 0x50, 0xEF, 0xF0, 0xEE,
-0xC3, 0x94, 0x07, 0x50, 0x1E, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8, 0x8E, 0x82, 0x75, 0x83, 0x00,
-0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x51, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5, 0x83, 0xEF, 0xF0,
-0x0E, 0x80, 0xDC, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10,
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x93, 0x78, 0xF0, 0x90,
-0x93, 0x78, 0xE0, 0xFD, 0x70, 0x03, 0x02, 0x71, 0x18, 0x90, 0x94, 0x4C, 0xE0, 0xFF, 0x74, 0x01,
-0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF,
-0x5D, 0x70, 0x02, 0x21, 0x11, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12,
-0x43, 0x9C, 0xE0, 0x90, 0x93, 0x79, 0xF0, 0x75, 0x20, 0x01, 0x75, 0x21, 0x93, 0x75, 0x22, 0x79,
-0x75, 0x23, 0x01, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x7A, 0x12, 0x56, 0xF1, 0x90, 0x93, 0x7A, 0xE0,
-0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x94, 0x4C, 0x30, 0xE0, 0x59, 0xE0, 0x75, 0xF0,
-0x02, 0x90, 0x00, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7B, 0xF0, 0x90, 0x94, 0x4C, 0xE0,
-0x75, 0xF0, 0x02, 0x90, 0x00, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90, 0x94,
-0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D, 0xF0,
-0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
-0x7E, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x9C, 0xE0,
-0x90, 0x93, 0x7F, 0xF0, 0x80, 0x33, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C,
-0xE0, 0x90, 0x93, 0x7B, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12,
-0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01,
-0xD3, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01, 0x7A,
-0x93, 0x79, 0x7B, 0x31, 0x1D, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x90, 0x94, 0x4C, 0xE0, 0xFE, 0x74,
-0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x93, 0x78, 0xF0,
-0x90, 0x94, 0x4C, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC,
-0x90, 0x01, 0xCC, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x02, 0x6F,
-0xDF, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xC8, 0xEF, 0x12, 0x43, 0xD1, 0x71, 0xC1, 0x01, 0x71, 0xB8, 0x02, 0x72, 0x09, 0x03,
-0x72, 0x12, 0x05, 0x72, 0x1B, 0x06, 0x73, 0x5D, 0x07, 0x72, 0x23, 0x0B, 0x72, 0x2C, 0x10, 0x72,
-0x34, 0x11, 0x72, 0x3C, 0x12, 0x72, 0x44, 0x16, 0x72, 0x4E, 0x17, 0x72, 0x58, 0x18, 0x72, 0x62,
-0x19, 0x73, 0x29, 0x1B, 0x73, 0x32, 0x1C, 0x72, 0x6B, 0x1D, 0x72, 0x75, 0x1E, 0x72, 0x80, 0x21,
-0x72, 0x89, 0x22, 0x72, 0x92, 0x23, 0x72, 0x9B, 0x24, 0x72, 0xA4, 0x25, 0x72, 0xAD, 0x26, 0x72,
-0xB6, 0x27, 0x72, 0xBF, 0x28, 0x72, 0xC8, 0x29, 0x71, 0xCA, 0x2D, 0x71, 0xD3, 0x2E, 0x72, 0xD1,
-0x2F, 0x73, 0x3B, 0x30, 0x72, 0xE2, 0x32, 0x72, 0xD9, 0x33, 0x71, 0xE5, 0x34, 0x72, 0xEB, 0x36,
-0x72, 0xF4, 0x37, 0x72, 0xFD, 0x38, 0x73, 0x05, 0x3A, 0x71, 0xDC, 0x3B, 0x73, 0x0E, 0x3E, 0x73,
-0x17, 0x3F, 0x73, 0x20, 0x41, 0x73, 0x44, 0x46, 0x71, 0xEE, 0x47, 0x72, 0x00, 0x48, 0x71, 0xF7,
-0x49, 0x73, 0x4D, 0x4B, 0x00, 0x00, 0x73, 0x56, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8B,
-0x8F, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8B, 0x95, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8,
-0x02, 0x8C, 0x76, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8C, 0xBE, 0x90, 0x93, 0x80, 0x12,
-0x43, 0xA8, 0x02, 0x8C, 0xF7, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0x29, 0x90, 0x93,
-0x80, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0x2F, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0xEF,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x96, 0xE2, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x8E, 0x00, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0x71, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x81, 0x2E, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0xBE, 0x90, 0x93, 0x80, 0x12,
-0x43, 0xA8, 0x61, 0x5E, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x61, 0x64, 0x90, 0x93, 0x80, 0x12,
-0x43, 0xA8, 0x61, 0x6A, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x01, 0x80, 0x2F, 0x90, 0x93,
-0x80, 0x12, 0x43, 0xA8, 0x7F, 0x02, 0x80, 0x25, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x03,
-0x80, 0x1B, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x2A, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0xE4, 0xFF, 0x80, 0x08, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x04, 0x02, 0x8E, 0x48,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x62, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x8F, 0x7B, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x94, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x02, 0x8F, 0xAD, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0xC6, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xA8, 0x02, 0x8F, 0xDF, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0xF8, 0x90,
-0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x11, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x90,
-0x2A, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x81, 0x1F, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x90, 0x52, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x6B, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x02, 0x90, 0x84, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x92, 0x37, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xA8, 0x61, 0xFD, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x92, 0x49, 0x90, 0x93,
-0x80, 0x12, 0x43, 0xA8, 0x02, 0x96, 0x75, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x96, 0x8E,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x96, 0xC9, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x8A, 0xB6, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0x9D, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x02, 0x99, 0x80, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x6F, 0x1F, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xA8, 0x02, 0x96, 0xEA, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x7D, 0x05,
-0x7F, 0x0B, 0x80, 0x10, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x0A, 0x7D, 0x01, 0x7F, 0x0D, 0x80, 0x04,
-0x7D, 0x03, 0x7F, 0x11, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x41, 0x12, 0x43,
-0xC8, 0xE4, 0xFE, 0x90, 0x00, 0xA3, 0xE0, 0x54, 0xF8, 0x44, 0x05, 0xF0, 0x90, 0x00, 0xA0, 0xE0,
-0x54, 0x0F, 0x64, 0x04, 0x70, 0x5A, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x49, 0x90, 0xFD, 0x50,
-0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xEE, 0xC3, 0x9D, 0x50, 0x1E, 0x90, 0x94, 0x41, 0x12, 0x43, 0xA8,
-0x8E, 0x82, 0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x52, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
-0xFD, 0xF5, 0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDD, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x0F, 0x74, 0x52,
-0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5, 0x83, 0xE4, 0xF0, 0x0E, 0x80, 0xEB, 0x90, 0xFD, 0x58,
-0x74, 0x01, 0xF0, 0xFF, 0x80, 0x12, 0x90, 0x01, 0x43, 0xE0, 0x04, 0xF0, 0x7F, 0x02, 0x80, 0x08,
-0x90, 0x01, 0x42, 0xE0, 0x04, 0xF0, 0x7F, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x83,
-0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D,
-0x01, 0x7F, 0x23, 0x71, 0x74, 0xEF, 0xB4, 0x03, 0x05, 0x7F, 0xFF, 0x12, 0x9A, 0x20, 0x22, 0x12,
-0x1E, 0xF6, 0xFF, 0xE9, 0x24, 0x01, 0xF9, 0xE4, 0x3A, 0xFA, 0x7D, 0x04, 0x61, 0x74, 0x90, 0x00,
-0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x1F, 0xFE, 0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD,
-0xAF, 0x06, 0x90, 0x93, 0x83, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93,
-0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90,
-0x93, 0x88, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03,
-0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x83, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x86, 0x12,
-0x43, 0x9C, 0xAD, 0x82, 0xAC, 0x83, 0x90, 0x93, 0x8A, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75,
-0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43,
-0xC8, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0x0F, 0xFF,
-0x90, 0x93, 0x8C, 0x12, 0x43, 0xA8, 0xEF, 0x12, 0x42, 0x53, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8,
-0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x8C, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01,
-0xEF, 0x12, 0x42, 0x65, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F,
-0xFF, 0x90, 0x93, 0x8A, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12,
-0x1E, 0xF6, 0x8D, 0x82, 0x8C, 0x83, 0xA3, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0xFE, 0x90, 0x93, 0x83,
-0xE0, 0xFF, 0x24, 0xC2, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x84,
-0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x75, 0xF0,
-0x09, 0xEF, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x89, 0xE0, 0xFE,
-0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x8F, 0x57, 0xEF, 0x25,
-0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xAF, 0x82, 0xF5, 0x58, 0x8F, 0x59, 0xE5, 0x57,
-0x75, 0xF0, 0x02, 0xA4, 0x24, 0x02, 0xF9, 0x74, 0x89, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5, 0x5B,
-0x89, 0x5C, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAF, 0x82, 0x85,
-0x83, 0x5D, 0x8F, 0x5E, 0xE5, 0x57, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35,
-0xF0, 0x75, 0x5F, 0x01, 0xF5, 0x60, 0x89, 0x61, 0x74, 0xC2, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34,
-0x89, 0xF5, 0x83, 0xE0, 0x12, 0x43, 0xD1, 0x75, 0xBC, 0x00, 0x75, 0xD1, 0x01, 0x75, 0xE6, 0x02,
-0x75, 0xFB, 0x03, 0x76, 0x24, 0x04, 0x76, 0x39, 0x05, 0x76, 0x4E, 0x06, 0x76, 0x74, 0x0C, 0x76,
-0xA1, 0x0D, 0x76, 0xCE, 0x0E, 0x76, 0xFB, 0x0F, 0x00, 0x00, 0x77, 0x2F, 0xE5, 0x57, 0x25, 0xE0,
-0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80,
-0x3C, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0,
-0xF0, 0xA3, 0x74, 0x10, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34,
-0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x05, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24,
-0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x57,
-0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74,
-0x8F, 0xF0, 0xE1, 0x2F, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
-0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF5, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5,
-0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x57,
-0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D,
-0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0,
-0xA3, 0xF0, 0xE1, 0x2F, 0x90, 0x04, 0x47, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42,
-0x53, 0x90, 0x04, 0x46, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42,
-0x65, 0x90, 0x04, 0x45, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x44, 0xE1,
-0x26, 0x90, 0x04, 0x4B, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04,
-0x4A, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04,
-0x49, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04,
-0x4F, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4E, 0xE0, 0xAB,
-0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x4D, 0xE0, 0x85,
-0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB,
-0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x52, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B,
-0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x51, 0xE0, 0x85, 0x59, 0x82, 0x85,
-0x58, 0x83, 0xF0, 0x90, 0x04, 0x50, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xF0, 0xAB,
-0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB,
-0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x12, 0x1E, 0xF6, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12,
-0x42, 0x53, 0xAB, 0x5A, 0xE5, 0x5C, 0x24, 0x01, 0xF9, 0xE4, 0x35, 0x5B, 0xFA, 0xC0, 0x03, 0xC0,
-0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x90, 0x00, 0x01,
-0x12, 0x1F, 0x0F, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0x85, 0x59, 0x82,
-0x85, 0x58, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xE0,
-0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xC0,
-0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E,
-0xD0, 0x82, 0xD0, 0x83, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89,
-0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x4C, 0x90, 0x93, 0x8F, 0x74, 0x0B, 0xF0, 0x90,
-0x93, 0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x50, 0x03, 0x02, 0x78, 0x75, 0x74, 0x01, 0x7E, 0x00,
-0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25,
-0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F,
-0x4E, 0x60, 0x0A, 0x90, 0x93, 0x8F, 0xE0, 0x24, 0x10, 0xA3, 0xF0, 0x80, 0x68, 0x90, 0x93, 0x8F,
-0xE0, 0x14, 0xF0, 0x80, 0xBA, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
-0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x47, 0x90, 0x93, 0x8F, 0x74, 0x0F, 0xF0, 0x90,
-0x93, 0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x40, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
-0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47,
-0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08,
-0x90, 0x93, 0x8F, 0xE0, 0xA3, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0x8F, 0xE0, 0x14, 0xF0, 0x80, 0xBF,
-0xE4, 0x90, 0x93, 0x90, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
-0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x8F, 0xF0, 0x90, 0x93,
-0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x40, 0x02, 0x21, 0x2E, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07,
-0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24,
-0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60,
-0x06, 0x90, 0x93, 0x8F, 0xE0, 0x80, 0x63, 0x90, 0x93, 0x8F, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5,
-0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
-0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x8F, 0xF0, 0x90, 0x93, 0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x0C,
-0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
-0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
-0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x93, 0x8F, 0xE0, 0x24, 0x10, 0x80,
-0x09, 0x90, 0x93, 0x8F, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x91, 0xF0, 0x90, 0x93,
-0x90, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xEF, 0xF0,
-0x90, 0x93, 0x91, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C,
-0xEE, 0xF0, 0xE5, 0x57, 0xC3, 0x94, 0x20, 0x50, 0x2C, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4,
-0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3, 0x9F, 0x40, 0x02, 0x80, 0x47, 0x74, 0x84, 0x25, 0x57, 0xF5,
-0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x91, 0xE0, 0xA3,
-0xF0, 0x80, 0x37, 0x80, 0x2D, 0x74, 0x27, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83,
-0xE0, 0xFF, 0x90, 0x93, 0x90, 0xE0, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x07, 0x90, 0x93, 0x92, 0xEE,
-0xF0, 0x80, 0x17, 0x90, 0x93, 0x91, 0xE0, 0xFE, 0xEF, 0xC3, 0x9E, 0x50, 0x05, 0xA3, 0xEE, 0xF0,
-0x80, 0x08, 0x90, 0x93, 0x90, 0xE0, 0x90, 0x93, 0x92, 0xF0, 0x90, 0x93, 0x92, 0xE0, 0xFD, 0xAF,
-0x57, 0x51, 0x06, 0x90, 0x93, 0x92, 0xE0, 0xFF, 0x74, 0xA7, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34,
-0x91, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x90, 0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90,
-0x8A, 0x83, 0x74, 0x03, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x0B, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74,
-0x02, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x03, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x01, 0xF0, 0x22,
-0xE4, 0x90, 0x8A, 0x83, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0xC3, 0x94,
-0x20, 0x50, 0x0E, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED, 0xF0, 0x80,
-0x29, 0x74, 0x27, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xED, 0xF0, 0x90, 0x93, 0xCC,
-0xEF, 0xF0, 0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0xCD, 0xF0,
-0x7B, 0x01, 0x7A, 0x93, 0x79, 0xCC, 0x7D, 0x02, 0x71, 0xCB, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F,
-0x52, 0x8D, 0x53, 0xE5, 0x53, 0x54, 0x1F, 0x90, 0x93, 0x5F, 0xF0, 0x74, 0x01, 0x2F, 0xF5, 0x82,
-0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x93, 0x60, 0x74, 0x01, 0xF0,
-0xEB, 0xC3, 0x94, 0x01, 0x40, 0x02, 0x80, 0x3B, 0x90, 0x93, 0x5D, 0xE0, 0x25, 0x55, 0xFF, 0xA3,
-0xF0, 0xA3, 0xE0, 0x90, 0x41, 0xA4, 0x93, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x13, 0x74, 0x01, 0x25,
-0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAD, 0x53, 0xAF, 0x52, 0x41, 0x06,
-0x90, 0x93, 0x5E, 0xE0, 0xFF, 0x74, 0x01, 0x25, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
-0xEF, 0xF0, 0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0,
-0x90, 0x93, 0x62, 0xF0, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x54,
-0x1F, 0x90, 0x93, 0x61, 0xF0, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0,
-0x04, 0xF0, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05,
-0x40, 0x5D, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x85,
-0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x82, 0x2D, 0xF5, 0x82, 0xE4,
-0x34, 0x89, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x85, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
-0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
-0xEF, 0xF0, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0xC8,
-0x40, 0x0D, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0x74, 0xC8, 0xF0, 0x90,
-0x93, 0x62, 0xE0, 0xFF, 0x90, 0x93, 0x61, 0xE0, 0xD3, 0x9F, 0x40, 0x02, 0xEF, 0xF0, 0x90, 0x93,
-0x61, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93,
-0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5,
-0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED,
-0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
-0xAF, 0x05, 0x90, 0x93, 0x61, 0xE0, 0xFD, 0x51, 0x06, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64,
-0x03, 0x60, 0x12, 0x90, 0x04, 0x30, 0xE0, 0x70, 0x0C, 0x04, 0xF0, 0xA3, 0xF0, 0xA3, 0x04, 0xF0,
-0x90, 0x04, 0xCF, 0x04, 0xF0, 0x90, 0x93, 0x61, 0xE0, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
-0xC0, 0xD0, 0x90, 0x94, 0x22, 0x12, 0x43, 0xC8, 0x90, 0x94, 0x25, 0xE0, 0x54, 0xF0, 0x44, 0x06,
-0xFF, 0xF0, 0xED, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFE, 0xEF, 0x54, 0x0F, 0x4E, 0xF0, 0x90, 0x94,
-0x22, 0x12, 0x43, 0xA8, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x25,
-0x12, 0x66, 0x89, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAC, 0x07, 0xEC, 0xC3, 0x94, 0x20, 0x50, 0x13,
-0x74, 0x84, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88,
-0xF0, 0x80, 0x11, 0x74, 0x27, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F,
-0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x93, 0x8B, 0xF0, 0x75,
-0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x8D, 0xF0, 0x75, 0xF0,
-0x09, 0xEC, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0x90, 0x93, 0x8E, 0xF0, 0xEC, 0x25,
-0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93,
-0x8F, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89,
-0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x91, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x74, 0xC6,
-0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C, 0x90,
-0x93, 0x8E, 0xE0, 0x90, 0x93, 0x8B, 0xF0, 0x90, 0x93, 0x88, 0xF0, 0xED, 0x70, 0x02, 0xA1, 0x82,
-0x90, 0x93, 0x8C, 0xED, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x93, 0x8B, 0xE0,
-0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x8C, 0xE0, 0x14, 0xF0, 0x90, 0x93, 0x8C, 0xE0, 0x70, 0x02,
-0xA1, 0x82, 0x90, 0x93, 0x8B, 0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02, 0xA1, 0x82, 0xE4, 0x90,
-0x93, 0x8A, 0xF0, 0xEF, 0x14, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x8D, 0xE0, 0xFD, 0x90, 0x93,
-0x89, 0xE0, 0xFF, 0xD3, 0x9D, 0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0, 0xFF,
-0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
-0xFF, 0x90, 0x93, 0x91, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93, 0x89,
-0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05,
-0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8F, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0,
-0x5F, 0x4E, 0x60, 0x1A, 0x90, 0x93, 0x89, 0xE0, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x8A, 0xE0,
-0x04, 0xF0, 0x90, 0x93, 0x8C, 0xE0, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0x6F, 0x60, 0x08, 0x90, 0x93,
-0x89, 0xE0, 0x14, 0xF0, 0x80, 0x83, 0x90, 0x93, 0x8C, 0xE0, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0xC3,
-0x9F, 0x50, 0x0F, 0x90, 0x93, 0x89, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x93, 0x8D, 0xE0, 0x90, 0x93,
-0x88, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41,
-0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82,
-0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE,
-0xEF, 0x13, 0xFF, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE,
-0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x90, 0x93, 0x88, 0xE0, 0xFD, 0x51, 0x06, 0x90, 0x93, 0x88,
-0xE0, 0xFF, 0x22, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x39, 0xEF, 0x30, 0xE0, 0x17, 0xED, 0xC4, 0x54,
-0xF0, 0xFD, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
-0x54, 0x0F, 0x80, 0x10, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5,
-0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
-0x4D, 0xF0, 0x22, 0xAD, 0x07, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2D, 0xF5, 0x82,
-0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x80, 0x11, 0x74, 0x27,
-0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x90,
-0x93, 0x88, 0xE0, 0xF9, 0x54, 0x1F, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12,
-0x43, 0x9C, 0xE0, 0xFF, 0x90, 0x93, 0x8B, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
-0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x8C, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0,
-0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0,
-0x90, 0x93, 0x8E, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x93, 0x89, 0xE0, 0xFE, 0x25, 0xE0, 0x24,
-0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xED,
-0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB, 0xF0,
-0xEE, 0xC3, 0x9F, 0x40, 0x02, 0xE1, 0x70, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0xEF, 0x04, 0x90, 0x93, 0x8A, 0xF0, 0x90, 0x93,
-0x8B, 0xE0, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0xFE, 0xD3, 0x9F, 0x40, 0x02, 0xE1, 0xAA, 0xEE, 0xC3,
-0x94, 0x10, 0x40, 0x21, 0xEE, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
-0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8C, 0xE0, 0x5E, 0xFE, 0xA3,
-0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93, 0x8A, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59, 0x74,
-0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF,
-0x90, 0x93, 0x8E, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x93, 0x8A, 0xE0,
-0xB4, 0x11, 0x0D, 0x90, 0x93, 0x8D, 0xE0, 0x30, 0xE7, 0x06, 0x90, 0x93, 0x8A, 0x74, 0x17, 0xF0,
-0x90, 0x93, 0x8A, 0xE0, 0xFF, 0x64, 0x13, 0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x93, 0x8C,
-0xE0, 0x30, 0xE0, 0x06, 0x90, 0x93, 0x8A, 0x74, 0x18, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0x90, 0x93,
-0x89, 0xF0, 0x90, 0x93, 0x88, 0xF0, 0x80, 0x42, 0x90, 0x93, 0x8A, 0xE0, 0x04, 0xF0, 0xC1, 0xCE,
-0x90, 0x93, 0x8B, 0xE0, 0xFC, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0x28, 0x2D,
-0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A,
-0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01, 0x10, 0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x93, 0x89, 0xE0, 0x44,
-0x40, 0x90, 0x93, 0x88, 0xF0, 0x80, 0x03, 0xAF, 0x01, 0x22, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x25,
-0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93,
-0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93,
-0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02,
-0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90, 0x93,
-0x89, 0xE0, 0xD3, 0x9C, 0x40, 0x5E, 0x90, 0x93, 0x8B, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5, 0x82,
-0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x89, 0xEF, 0xF0, 0x90, 0x93, 0x88, 0xF0,
-0xFC, 0xA3, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4,
-0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41,
-0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF,
-0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF,
-0xF0, 0xAF, 0x04, 0x22, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0,
-0xAF, 0x05, 0x90, 0x93, 0x88, 0xE0, 0x44, 0x80, 0xFD, 0x12, 0x7A, 0x06, 0x90, 0x93, 0x88, 0xE0,
-0x44, 0x80, 0xFF, 0x22, 0xE4, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94,
-0x40, 0x40, 0x03, 0x02, 0x88, 0x76, 0xEF, 0xB4, 0x20, 0x14, 0x90, 0x8F, 0x46, 0xE0, 0x04, 0xF0,
-0x90, 0x89, 0x01, 0xE0, 0xFF, 0x90, 0x8F, 0x46, 0xE0, 0xB5, 0x07, 0x02, 0xE4, 0xF0, 0x90, 0x93,
-0x78, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0xE0, 0x64, 0x01, 0x60,
-0x03, 0x02, 0x88, 0x6D, 0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83,
-0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEE, 0x94, 0x00, 0x50, 0x03, 0x02, 0x88, 0x6D, 0x90,
-0x93, 0x78, 0xE0, 0x94, 0x20, 0x40, 0x09, 0x90, 0x8F, 0x46, 0xE0, 0x60, 0x03, 0x02, 0x88, 0x76,
-0x90, 0x93, 0x78, 0xE0, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75,
-0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34,
-0x87, 0xF5, 0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x93, 0x7D, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF,
-0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
-0x93, 0x7F, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x50,
-0x13, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93,
-0x79, 0xF0, 0x80, 0x14, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
-0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93, 0x79, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFE, 0x54, 0x1F, 0xA3,
-0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0,
-0x90, 0x93, 0x82, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3,
-0x94, 0x05, 0x40, 0x02, 0x81, 0x0B, 0x90, 0x93, 0x82, 0xE0, 0xFF, 0x90, 0x93, 0x7A, 0xE0, 0x9F,
-0x40, 0x13, 0x90, 0x93, 0x82, 0xE0, 0x90, 0x93, 0x7A, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0x90, 0x93,
-0x79, 0xF0, 0xEF, 0x4E, 0xF0, 0x90, 0x93, 0x7A, 0xE0, 0xFF, 0x90, 0x41, 0x18, 0x93, 0xFE, 0x90,
-0x93, 0x78, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x40,
-0x06, 0xEF, 0x90, 0x40, 0xE0, 0x80, 0x07, 0x90, 0x93, 0x7A, 0xE0, 0x90, 0x40, 0xFC, 0x93, 0x90,
-0x93, 0x81, 0xF0, 0x90, 0x93, 0x81, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x56, 0xF9, 0x74, 0x40,
-0x35, 0xF0, 0xFA, 0x7B, 0xFF, 0x8B, 0x57, 0xF5, 0x58, 0x89, 0x59, 0x90, 0x93, 0x78, 0xE0, 0x25,
-0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93,
-0x7B, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B,
-0xA9, 0x5C, 0x12, 0x42, 0x9D, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F,
-0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F,
-0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0x12, 0x42, 0xC8, 0xFD,
-0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57,
-0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x04, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90,
-0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00,
-0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x06,
-0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12,
-0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x7E,
-0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x08, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0,
-0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58,
-0xA9, 0x59, 0x90, 0x00, 0x05, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7D, 0xE0, 0xFC,
-0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0xD3, 0x90, 0x93, 0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0,
-0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F, 0xF0, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0xF0, 0x80, 0x07, 0xE4,
-0x90, 0x93, 0x7B, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x7B, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93,
-0x78, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3,
-0xEF, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5,
-0x83, 0xE4, 0x93, 0xFC, 0x74, 0x01, 0x93, 0xFD, 0xD3, 0xEF, 0x9D, 0xEE, 0x9C, 0x50, 0x02, 0x61,
-0xDA, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x82, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0,
-0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9E, 0x40,
-0x03, 0xEF, 0x80, 0x1C, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E,
-0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x82, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xC3,
-0x9E, 0x90, 0x93, 0x83, 0xF0, 0x90, 0x93, 0x83, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x02, 0x80, 0x23,
-0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3,
-0x94, 0x01, 0x40, 0x0F, 0x74, 0xC6, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x14,
-0xF0, 0x80, 0x0F, 0x90, 0x93, 0x78, 0xE0, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
-0xE4, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
-0xE0, 0x60, 0x02, 0xE1, 0x1B, 0x12, 0x7E, 0x13, 0xE1, 0x1B, 0x90, 0x93, 0x79, 0xE0, 0x25, 0xE0,
-0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF,
-0xC3, 0x90, 0x93, 0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x40, 0x02, 0xE1, 0x1B, 0x90,
-0x93, 0x78, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x7C, 0x08, 0xE1, 0x1B, 0x90, 0x93, 0x78, 0xE0, 0xFF,
-0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x02, 0xA1,
-0xE9, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x03, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x19,
-0x40, 0x3D, 0x80, 0x2E, 0xEE, 0xB4, 0x02, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x11, 0x40,
-0x2E, 0x80, 0x1F, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3,
-0x94, 0x0A, 0x40, 0x1B, 0x80, 0x0C, 0xEE, 0x70, 0x11, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x03,
-0x40, 0x0D, 0x90, 0x8E, 0xC5, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x8E, 0xC5, 0xF0, 0x90,
-0x93, 0x78, 0xE0, 0xFE, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93,
-0x87, 0xF0, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0xC3, 0x94,
-0x30, 0x50, 0x0A, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0x74, 0x67, 0x2F, 0xA1, 0x94, 0x90, 0x8E, 0xC5,
-0xE0, 0x64, 0x01, 0x60, 0x02, 0xA1, 0x89, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x64, 0x0A, 0x60, 0x5B, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xEE, 0x24,
-0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0,
-0xFF, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x38, 0x90, 0x93, 0x78, 0xE0,
-0xFE, 0xEF, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E,
-0xF5, 0x83, 0xE0, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x16, 0x90, 0x93,
-0x78, 0xE0, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x7A,
-0xE0, 0x6F, 0x60, 0x56, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5,
-0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x42, 0x40, 0x08, 0x90, 0x93, 0x87, 0x74, 0x05, 0xF0, 0x80, 0x11,
-0xEF, 0xD3, 0x94, 0x39, 0x90, 0x93, 0x87, 0x40, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01,
-0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0,
-0xFE, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x78,
-0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0x80, 0x2F, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24,
-0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x14, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0x90, 0x93,
-0x78, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x7A,
-0xE0, 0xFE, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83,
-0xEE, 0xF0, 0x90, 0x93, 0x87, 0xE0, 0xFE, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5,
-0x83, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01,
-0x11, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83,
-0xE4, 0xF0, 0x90, 0x93, 0x87, 0xE0, 0xFD, 0xE1, 0x18, 0xEC, 0x64, 0x06, 0x60, 0x02, 0xE1, 0x1B,
-0x90, 0x93, 0x7B, 0xF0, 0xA3, 0xF0, 0x90, 0x41, 0xE1, 0x93, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7D,
-0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x85, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
-0x90, 0x93, 0x78, 0xE0, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93,
-0x87, 0xF0, 0xE4, 0x90, 0x93, 0x84, 0xF0, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0xD3, 0x94, 0x04, 0x50,
-0x47, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x75, 0xF0, 0x02, 0xEF, 0xA4, 0xF5, 0x82, 0x85, 0xF0,
-0x83, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0xEF, 0x90, 0x41, 0xDC, 0x93, 0xFF, 0x7E, 0x00, 0x12,
-0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0x85, 0xE0, 0xFE,
-0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x93, 0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x50, 0x08,
-0x90, 0x93, 0x84, 0xE0, 0x04, 0xF0, 0x80, 0xAF, 0x90, 0x93, 0x84, 0xE0, 0xC3, 0x13, 0xF0, 0x90,
-0x93, 0x87, 0xE0, 0xFF, 0xB4, 0x01, 0x0D, 0x90, 0x93, 0x84, 0xE0, 0x70, 0x5D, 0x90, 0x93, 0x87,
-0x04, 0xF0, 0x80, 0x5B, 0xEF, 0xB4, 0x03, 0x1D, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0x70, 0x08, 0x90,
-0x93, 0x87, 0x74, 0x03, 0xF0, 0x80, 0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x87, 0x74, 0x01,
-0xF0, 0x80, 0x3C, 0x80, 0x35, 0x90, 0x93, 0x87, 0xE0, 0x64, 0x05, 0x70, 0x32, 0x90, 0x93, 0x84,
-0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93, 0x87, 0x74, 0x05, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x93, 0x87,
-0xB4, 0x01, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3, 0x90, 0x93, 0x80, 0xE0,
-0x94, 0x03, 0x90, 0x93, 0x7F, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0xD3,
-0x90, 0x93, 0x80, 0xE0, 0x94, 0x03, 0x90, 0x93, 0x7F, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90,
-0x93, 0x87, 0xF0, 0x90, 0x93, 0x87, 0xE0, 0xFD, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xC4, 0xF5,
-0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xED, 0xF0, 0x12, 0x7D, 0xD3, 0x90, 0x93, 0x78, 0xE0, 0xFF,
-0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x05, 0x50, 0x0F, 0x74,
-0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x0F, 0x90, 0x93,
-0x78, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x7F,
-0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x74, 0xFF, 0x9F, 0xFF, 0x74, 0xFF, 0x9E, 0xFE, 0x90, 0x93,
-0x78, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFA,
-0xA3, 0xE0, 0xD3, 0x9F, 0xEA, 0x9E, 0x50, 0x1C, 0x90, 0x93, 0x7F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF,
-0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEE, 0x8F, 0xF0, 0x12,
-0x42, 0x87, 0x80, 0x14, 0x90, 0x93, 0x78, 0xE0, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34,
-0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x25, 0xE0, 0x24,
-0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0x74, 0xFF,
-0x9D, 0xFB, 0x74, 0xFF, 0x9C, 0xFA, 0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x9B, 0xEE, 0x9A, 0x90, 0x93, 0x78, 0xE0, 0x50, 0x13,
-0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEC, 0x8D, 0xF0, 0x12, 0x42,
-0x87, 0x80, 0x10, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF,
-0xF0, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x00, 0xAB,
-0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00,
-0x04, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F,
-0x90, 0x00, 0x08, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x25, 0xE0,
-0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0,
-0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0,
-0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x78,
-0xE0, 0x04, 0xF0, 0x02, 0x80, 0x79, 0x22, 0x90, 0x04, 0x44, 0x74, 0x11, 0xF0, 0xA3, 0x74, 0xF0,
-0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0,
-0xFF, 0xC3, 0x94, 0x10, 0x50, 0x14, 0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83,
-0xE4, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8F, 0x46, 0xF0, 0x90,
-0x89, 0x01, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94,
-0x40, 0x40, 0x02, 0x41, 0x70, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0xE4,
-0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3,
-0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x04, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75,
-0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x06, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A,
-0xEF, 0x90, 0x84, 0x08, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0xA7, 0x2F, 0xF5, 0x82,
-0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE4, 0xF0,
-0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0,
-0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0,
-0xEF, 0x25, 0xE0, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0,
-0xEF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0,
-0xEF, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0,
-0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0,
-0x74, 0x07, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC7, 0x2F, 0xF5,
-0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91,
-0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8E, 0x04, 0xF0, 0x90, 0x41, 0x92, 0x93, 0xFE, 0x74, 0x01, 0x93,
-0xFF, 0x90, 0x41, 0x5A, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE, 0xEF,
-0x13, 0xFF, 0x90, 0x93, 0x78, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A,
-0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8B, 0x12, 0x43,
-0x9C, 0x74, 0x01, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0x74, 0x01,
-0xF0, 0x74, 0xC2, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0C, 0xF0, 0x75, 0xF0,
-0x09, 0xED, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x09,
-0xED, 0x90, 0x8A, 0x84, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0x75, 0xF0, 0x09,
-0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A,
-0x89, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x0F, 0x74, 0x84, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x80, 0x0D, 0x74, 0x27, 0x2D, 0xF5, 0x82,
-0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x04, 0xF0, 0x01, 0xB9,
-0x22, 0x12, 0x1E, 0xF6, 0xFF, 0xC3, 0x94, 0x40, 0x50, 0x14, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
-0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0xB4,
-0x40, 0x0A, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x8A, 0x82, 0xF0, 0x22, 0x90, 0x00, 0x04,
-0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x3F, 0xFE, 0xEF, 0x54, 0x80, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
-0xFD, 0xAF, 0x06, 0x02, 0x74, 0x42, 0x12, 0x1E, 0xF6, 0x90, 0x89, 0x01, 0xF0, 0x22, 0x90, 0x00,
-0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFC, 0xED, 0xC3, 0x94, 0x40,
-0x40, 0x02, 0xE4, 0xFD, 0xEC, 0xC3, 0x94, 0x40, 0x40, 0x02, 0xE4, 0xFC, 0xED, 0x25, 0xE0, 0x24,
-0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x83, 0xF0,
-0xEE, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
-0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x85, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x74, 0xFF,
-0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3,
-0xE0, 0x90, 0x93, 0x89, 0xF0, 0xEE, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x8B, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3,
-0xEC, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x83, 0x02, 0x67, 0x8B, 0x12,
-0x1E, 0xF6, 0xF5, 0x62, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x83, 0x12,
-0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0x83, 0x12,
-0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x59, 0xF0, 0x90, 0x00, 0x03, 0x12,
-0x1F, 0x0F, 0x90, 0x93, 0x3C, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x01, 0x90,
-0x93, 0x3D, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x01, 0x90, 0x93, 0x47, 0xF0, 0x90, 0x00, 0x04, 0x12,
-0x1F, 0x0F, 0xFF, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x44, 0xF0, 0xEF, 0x13, 0x13, 0x13, 0x54,
-0x01, 0x90, 0x93, 0x4A, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x54, 0x01, 0x90,
-0x93, 0x46, 0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x01, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x00, 0x04, 0x12,
-0x1F, 0x0F, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x49, 0xF0, 0xE0, 0x70, 0x38, 0x90,
-0x93, 0x47, 0xE0, 0x70, 0x10, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5, 0x00,
-0x00, 0x03, 0x10, 0x80, 0x0F, 0x7F, 0x01, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5,
-0x00, 0x00, 0x03, 0x00, 0x90, 0x93, 0x86, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9,
-0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x3D, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8,
-0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x4D, 0xC1, 0x90, 0x93, 0x59, 0xE0, 0x90, 0x01, 0xE6,
-0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x30, 0xE0, 0x25,
-0x12, 0x1E, 0xF6, 0x90, 0x93, 0x48, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x4B,
-0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x45, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F,
-0x90, 0x93, 0x50, 0xF0, 0x22, 0x90, 0x93, 0x48, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4B, 0x74, 0x05,
-0xF0, 0x90, 0x93, 0x45, 0x74, 0x14, 0xF0, 0x90, 0x93, 0x50, 0x74, 0x05, 0xF0, 0x22, 0x12, 0x1E,
-0xF6, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x00, 0x01, 0x12,
-0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x4D, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x4F,
-0x74, 0x05, 0xF0, 0x90, 0x93, 0x4D, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4D, 0xE0,
-0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x4C, 0xF0, 0x60, 0x20,
-0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x19, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93,
-0x3D, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x12, 0x51, 0x69,
-0x90, 0x93, 0x4C, 0xE0, 0x90, 0x01, 0xE7, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x02, 0x43, 0xC8, 0x12,
-0x1E, 0xF6, 0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54,
-0x0F, 0xFF, 0xE0, 0x54, 0xF0, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54, 0x70, 0xFF, 0x90, 0x93, 0x36,
-0xE0, 0x54, 0x8F, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x38, 0xF0, 0x90,
-0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x39, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90,
-0x93, 0x3A, 0xF0, 0x90, 0x00, 0x01, 0x74, 0x19, 0x12, 0x42, 0x20, 0x90, 0x00, 0x01, 0x12, 0x1F,
-0x0F, 0xFF, 0xD3, 0x94, 0x20, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x01, 0xF0, 0x80, 0x57, 0xEF,
-0xD3, 0x94, 0x40, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x02, 0xF0, 0x80, 0x49, 0xEF, 0xD3, 0x94,
-0x60, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x03, 0xF0, 0x80, 0x3B, 0xEF, 0xD3, 0x94, 0x80, 0x50,
-0x08, 0x90, 0x93, 0x37, 0x74, 0x04, 0xF0, 0x80, 0x2D, 0xEF, 0xD3, 0x94, 0xA0, 0x50, 0x08, 0x90,
-0x93, 0x37, 0x74, 0x05, 0xF0, 0x80, 0x1F, 0xEF, 0xD3, 0x94, 0xC0, 0x50, 0x08, 0x90, 0x93, 0x37,
-0x74, 0x06, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0xE0, 0x90, 0x93, 0x37, 0x50, 0x05, 0x74, 0x07,
-0xF0, 0x80, 0x03, 0x74, 0x08, 0xF0, 0x90, 0x93, 0x37, 0xE0, 0x90, 0x93, 0x3B, 0xF0, 0x22, 0x12,
-0x1E, 0xF6, 0x60, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x22,
-0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x1E, 0xF6, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90, 0x93, 0xA8,
-0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xA9, 0xF0, 0x90, 0x00,
-0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xAA, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
-0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xAB, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xAE,
-0x05, 0xED, 0x2F, 0x90, 0x93, 0xAC, 0xF0, 0x22, 0xEF, 0x70, 0x21, 0x12, 0x1E, 0xF6, 0x30, 0xE0,
-0x14, 0x90, 0x00, 0x40, 0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0x3F, 0xF0, 0x90, 0x07, 0x78, 0xE0,
-0x44, 0x01, 0xF0, 0x80, 0x07, 0x90, 0x07, 0x78, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x64, 0x01, 0x70,
-0x6A, 0x12, 0x1E, 0xF6, 0x90, 0x00, 0x01, 0x30, 0xE0, 0x2E, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC0,
-0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC1, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
-0x0F, 0x90, 0x06, 0xC2, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC3, 0xF0, 0x90,
-0x06, 0xCC, 0xE0, 0x54, 0xFE, 0xF0, 0x80, 0x2C, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC4, 0xF0, 0x90,
-0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC5, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90,
-0x06, 0xC6, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC7, 0xF0, 0x90, 0x06, 0xCC,
-0xE0, 0x44, 0x01, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x44, 0x02, 0xF0, 0xEF, 0xB4, 0x02, 0x11, 0x12,
-0x1E, 0xF6, 0x90, 0x06, 0xC8, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC9, 0xF0,
-0xEF, 0xB4, 0x03, 0x11, 0x12, 0x1E, 0xF6, 0x90, 0x06, 0xCA, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F,
-0x0F, 0x90, 0x06, 0xCB, 0xF0, 0xEF, 0x64, 0x04, 0x70, 0x1F, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x07,
-0x83, 0x30, 0xE0, 0x06, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0x6F, 0xF0, 0xEF, 0x30,
-0xE1, 0x07, 0x90, 0x07, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8,
-0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0x90, 0x92, 0x6B, 0xF0, 0x90, 0x00, 0x01,
-0x12, 0x1F, 0x0F, 0x90, 0x92, 0x6C, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x92, 0x6D,
-0xF0, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x73, 0x70, 0xEF, 0xB4, 0x02, 0x03, 0x43, 0x14,
-0x01, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93,
-0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x17, 0x02, 0x73, 0x74, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F,
-0x18, 0x02, 0x73, 0x74, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8,
-0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x19, 0x02, 0x73, 0x74, 0x90, 0x93, 0x83,
-0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D,
-0x01, 0x7F, 0x1A, 0x02, 0x73, 0x74, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12,
-0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1B, 0x02, 0x73, 0x74, 0x90,
-0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xA8, 0x7D, 0x01, 0x7F, 0x1C, 0x02, 0x73, 0x74, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93,
-0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x03, 0x7F, 0x1D, 0x02, 0x73,
-0x74, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83,
-0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1E, 0x02, 0x73, 0x74, 0x12, 0x1E, 0xF6, 0xFF, 0xE4, 0xFC,
-0xFD, 0xFE, 0x78, 0x18, 0x12, 0x1F, 0xB6, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0x90,
-0x93, 0x0B, 0x12, 0x43, 0x84, 0xEC, 0x54, 0x03, 0xFC, 0x12, 0x43, 0x59, 0x90, 0x93, 0x07, 0x02,
-0x1F, 0xC9, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93,
-0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1F, 0x02, 0x73, 0x74, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F,
-0x20, 0x02, 0x73, 0x74, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0x90, 0x01, 0xBC, 0xF0, 0xEF, 0x30,
-0xE0, 0x5C, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x4E, 0x90, 0xFD, 0x50, 0x74, 0x0A, 0xF0, 0xA3,
-0x74, 0x06, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0xFD, 0x52, 0xF0, 0x90, 0x00, 0x02,
-0x12, 0x1F, 0x0F, 0x90, 0xFD, 0x53, 0xF0, 0xA3, 0xE4, 0xF0, 0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x90,
-0xFD, 0x55, 0x30, 0xE0, 0x05, 0x74, 0xA0, 0xF0, 0x80, 0x03, 0x74, 0xC0, 0xF0, 0x90, 0xFD, 0x56,
-0x74, 0x10, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x90, 0xFD, 0x50, 0x74, 0x0A, 0xF0, 0xA3, 0x74, 0x06,
-0xF0, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x00,
-0x02, 0x12, 0x1F, 0x0F, 0xFE, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x7C, 0x00, 0x24, 0x00, 0xFF,
-0xEC, 0x3E, 0xFE, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFC, 0x74, 0x20, 0x2F, 0xFF,
-0xE4, 0x3E, 0xFE, 0x90, 0x93, 0x83, 0xEF, 0xF0, 0xEE, 0xF9, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x02,
-0xF0, 0x90, 0x02, 0x09, 0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xEC, 0xC3, 0x99, 0x50, 0x43,
-0xEC, 0x70, 0x04, 0x7D, 0x04, 0x80, 0x02, 0xE4, 0xFD, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x07, 0xAF,
-0x05, 0x31, 0x8B, 0x0D, 0x80, 0xF3, 0x0C, 0x90, 0xFD, 0x10, 0xE0, 0x04, 0xF0, 0xEC, 0xB5, 0x01,
-0xDA, 0xE4, 0xFD, 0xED, 0x75, 0xF0, 0x08, 0xA4, 0xFF, 0x90, 0x93, 0x83, 0xE0, 0xFB, 0xC3, 0xEF,
-0x9B, 0x74, 0x80, 0xF8, 0x65, 0xF0, 0x98, 0x50, 0x07, 0xAF, 0x05, 0x31, 0x8B, 0x0D, 0x80, 0xE3,
-0x0C, 0x80, 0xB8, 0x90, 0x00, 0x81, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x81, 0x12, 0x54, 0x0A, 0x90,
-0x01, 0xBD, 0xE0, 0x44, 0x04, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xFD, 0x58, 0xE0, 0x30,
-0xE0, 0x08, 0x90, 0x01, 0xB8, 0xE0, 0x04, 0xF0, 0x80, 0xF1, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24,
-0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x50, 0xF0, 0xEF, 0x75, 0xF0,
-0x08, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x51, 0xF0,
-0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90,
-0xFD, 0x52, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
-0x83, 0xE0, 0x90, 0xFD, 0x53, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x04, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x54, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x05,
-0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x55, 0xF0, 0xEF, 0x75, 0xF0, 0x08,
-0xA4, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x56, 0xF0, 0xEF,
-0x75, 0xF0, 0x08, 0xA4, 0x24, 0x07, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD,
-0x57, 0xF0, 0xA3, 0x74, 0x01, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0xFE, 0x10, 0x60, 0x05, 0xE0,
-0x44, 0x01, 0xF0, 0x22, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x15,
-0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E,
-0xF6, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x10,
-0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x15,
-0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x12, 0x1E,
-0xF6, 0xFC, 0x54, 0x80, 0xFF, 0x90, 0x93, 0x15, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x00, 0x03,
-0x12, 0x1F, 0x0F, 0xFD, 0x54, 0x01, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xED,
-0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFD, 0x54,
-0x04, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xFB, 0x4F, 0xF0, 0xED, 0x54, 0x10, 0xFF, 0xE0, 0x54,
-0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x18,
-0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00,
-0x03, 0x12, 0x1F, 0x0F, 0x54, 0x80, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90,
-0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xDF, 0x4E,
-0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F,
-0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x10, 0xFF,
-0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x04, 0xFE, 0x90,
-0x93, 0x19, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54, 0xF7, 0x4F, 0xF0,
-0xEC, 0x20, 0xE0, 0x02, 0x81, 0xC3, 0x90, 0x05, 0x54, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x25, 0xF0,
-0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1C, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8,
-0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x16, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
-0x90, 0x93, 0x17, 0xF0, 0x80, 0x4E, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12,
-0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03, 0x90, 0x93, 0x16, 0x50,
-0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x93, 0x16, 0x74, 0x2A, 0xF0,
-0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03,
-0x90, 0x93, 0x17, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x93,
-0x17, 0x74, 0x2A, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x3D,
-0x90, 0x93, 0x16, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x1E, 0xF0, 0xE0, 0xC3, 0x13, 0xA3,
-0xF0, 0x90, 0x93, 0x17, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x20, 0xF0, 0x90, 0x93, 0x16,
-0xE0, 0xC3, 0x13, 0x90, 0x93, 0x21, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x22,
-0xF0, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0xAD, 0xE4, 0x90, 0x93,
-0x11, 0xF0, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x20, 0xE0, 0x14, 0x12, 0x1E, 0xF6, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0,
-0x04, 0x7F, 0x01, 0x80, 0x02, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54,
-0x0F, 0x30, 0xE0, 0x18, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x03, 0x75,
-0x64, 0x04, 0x90, 0x05, 0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x11, 0xF0, 0x90, 0x05, 0x58, 0x74,
-0x03, 0xF0, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x27, 0x74, 0x01, 0xF0, 0x80,
-0x2B, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x04, 0x08, 0x90, 0x93, 0x27, 0x74, 0x04, 0xF0, 0x80, 0x1C,
-0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x06, 0x08, 0x90, 0x93, 0x27, 0x74, 0x02, 0xF0, 0x80, 0x0D, 0x90,
-0x93, 0x1D, 0xE0, 0xB4, 0x07, 0x06, 0x90, 0x93, 0x27, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x1D,
-0xF0, 0x80, 0x64, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0x13, 0x13, 0x13,
-0x54, 0x1F, 0x90, 0x93, 0x83, 0x30, 0xE0, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x80,
-0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0xB1, 0x5F, 0x90, 0x00, 0x40, 0x74, 0x20, 0xF0,
-0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x13, 0x13, 0x13, 0x54,
-0x1F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0x7B,
-0x01, 0x7A, 0x93, 0x79, 0x83, 0x12, 0x55, 0x67, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x05, 0x00,
-0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x43, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0x90,
-0x93, 0x26, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x09,
-0x90, 0x93, 0x04, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x0C, 0x7F, 0x01, 0x12, 0x55, 0xB2, 0x90, 0x93,
-0x04, 0xE0, 0x54, 0xFD, 0xF0, 0x7F, 0x03, 0x12, 0x5E, 0xE6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
-0x93, 0x15, 0xE0, 0x54, 0xFE, 0xF0, 0xA3, 0x74, 0x0B, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xE4, 0x90,
-0x93, 0x26, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0,
-0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0,
-0x90, 0x93, 0x18, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0,
-0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0xA3,
-0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x93, 0x28, 0x74,
-0x02, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF,
-0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x25, 0xF0, 0x90, 0x93, 0x1C, 0xE0, 0x54, 0xFE, 0xF0, 0xE4,
-0x90, 0x93, 0x23, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x29, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x1C, 0xE0,
-0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54,
-0xFB, 0xF0, 0xE0, 0x54, 0xF7, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xE1,
-0xF0, 0x22, 0x90, 0x93, 0x04, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0x54, 0xFD, 0xF0, 0x54,
-0xF7, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0x12, 0x1F, 0xD5, 0x20, 0x08, 0x30, 0x70, 0x90,
-0x93, 0x0B, 0x12, 0x1F, 0xD5, 0xC0, 0x08, 0x30, 0x70, 0xE4, 0x90, 0x93, 0x11, 0xF0, 0xA3, 0xF0,
-0x43, 0xE8, 0x04, 0x90, 0xFD, 0x68, 0x74, 0x02, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x44, 0x10, 0xF0,
-0x90, 0x07, 0x83, 0xE4, 0xF0, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x04, 0x64, 0xE4, 0xF0,
-0x90, 0x00, 0x40, 0x74, 0x20, 0xF0, 0xB1, 0x5F, 0x90, 0x93, 0x2C, 0x74, 0x01, 0xF0, 0x7D, 0x04,
-0x7F, 0x02, 0x02, 0x3A, 0xAD, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43,
-0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x24, 0x02, 0x73, 0x74, 0x12, 0x1E,
-0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02,
-0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x1A,
-0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54, 0xF7, 0x4F, 0xF0, 0x90, 0x00,
-0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x1B, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90,
-0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x03, 0x7F, 0x26, 0x02,
-0x73, 0x74, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0xB0, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0xAE,
-0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0xAF, 0xF0, 0x22, 0xE4, 0x90, 0x94, 0x46,
-0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xEB, 0xE0, 0x54, 0xC0, 0x60, 0x43, 0xC3, 0x90, 0x94, 0x47, 0xE0,
-0x94, 0x88, 0x90, 0x94, 0x46, 0xE0, 0x94, 0x13, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x04,
-0xF0, 0x7F, 0x00, 0x22, 0x90, 0x94, 0x46, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14,
-0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x94, 0x47, 0xE0, 0x94, 0x64, 0x90, 0x94, 0x46, 0xE0,
-0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE2, 0xB8, 0x7F, 0x00, 0x22, 0x7F, 0x01,
-0x22, 0x90, 0x93, 0xE2, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xE6, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00,
-0x00, 0xE4, 0x7F, 0x1F, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0xE6, 0x12, 0x43, 0x90, 0xD3, 0x12, 0x43,
-0x73, 0x50, 0x41, 0x90, 0x93, 0xE6, 0x12, 0x43, 0x84, 0xA9, 0x07, 0x90, 0x93, 0xE2, 0x12, 0x43,
-0x84, 0xA8, 0x01, 0x12, 0x1F, 0xA3, 0xEF, 0x54, 0x01, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0x7B, 0x01,
-0xFA, 0xF9, 0xF8, 0xC3, 0x12, 0x43, 0x73, 0x60, 0x1B, 0x90, 0x93, 0xE6, 0x12, 0x43, 0x84, 0xEF,
-0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, 0x93, 0xE6, 0x12,
-0x1F, 0xC9, 0x80, 0xAD, 0x90, 0x93, 0xE6, 0x02, 0x43, 0x84, 0x90, 0x93, 0xB4, 0x12, 0x1F, 0xC9,
-0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0xB8, 0x12, 0x43, 0x90, 0xC3, 0x12, 0x43, 0x73,
-0x90, 0x93, 0xB4, 0x60, 0x67, 0x12, 0x43, 0x84, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0xC0, 0x12, 0x1F,
-0xC9, 0x90, 0x93, 0xB8, 0x12, 0x43, 0x84, 0xF1, 0x51, 0x90, 0x93, 0xC4, 0x12, 0x1F, 0xC9, 0x90,
-0x93, 0xB8, 0x12, 0x43, 0x84, 0x12, 0x43, 0x66, 0x90, 0x93, 0xC0, 0x12, 0x43, 0x90, 0x12, 0x43,
-0x4C, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0xC4, 0x12, 0x43, 0x84, 0xA9,
-0x07, 0x90, 0x93, 0xBC, 0x12, 0x43, 0x84, 0xA8, 0x01, 0x12, 0x1F, 0xB6, 0xD0, 0x03, 0xD0, 0x02,
-0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0x59, 0x90, 0x93, 0xC8, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB4,
-0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0xC8, 0x80, 0x0A, 0x12, 0x43, 0x84, 0xC0,
-0x06, 0xC0, 0x07, 0x90, 0x93, 0xBC, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0xD0,
-0x07, 0xD0, 0x06, 0x02, 0x34, 0x30, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xEA,
-0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xEE, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00,
-0x00, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x93,
-0x4A, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x14,
-0x12, 0x51, 0xBB, 0xBF, 0x01, 0x0B, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x30, 0xE0,
-0x03, 0x12, 0x4F, 0xB8, 0x90, 0x93, 0x2D, 0xE0, 0x20, 0xE0, 0x24, 0x90, 0x93, 0x47, 0xE0, 0x60,
-0x1E, 0x7F, 0x01, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x5B, 0xE0, 0x60, 0x13, 0x90, 0x93, 0xEE, 0x12,
-0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xEE, 0x12, 0x55, 0x67, 0x12,
-0x54, 0x4B, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94,
-0x4E, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x47, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80,
-0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46, 0xE0, 0x5F, 0xF0, 0x12, 0x54, 0x52,
-0x90, 0x94, 0x4E, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33,
-0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8,
-0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4C, 0x90,
-0x94, 0x4E, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3,
-0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x62, 0xE0, 0x5F, 0xF0, 0x12, 0x54, 0x52, 0x90, 0x94,
-0x4E, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
-0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x60, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08,
-0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x94, 0x3E, 0xE0,
-0x54, 0xFE, 0x4F, 0xF0, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x44, 0xFE, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xA8, 0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
-0x94, 0x3F, 0xF0, 0x22, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x0A, 0xF0, 0x90, 0xFD, 0x60,
-0xE0, 0x90, 0x93, 0x6E, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6F, 0xF0, 0x90, 0xFD, 0x63,
-0xE0, 0x90, 0x93, 0x70, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0x71, 0xF0, 0x90, 0xFD, 0x65,
-0xE0, 0x90, 0x93, 0x72, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90, 0x93, 0x6C, 0x30, 0xE6, 0x08, 0xE0,
-0x54, 0x0F, 0x44, 0x50, 0xF0, 0x80, 0x16, 0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0xFD, 0x66,
-0xE0, 0x90, 0x93, 0x73, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0x74, 0xF0, 0x7B, 0x01, 0x7A,
-0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x66, 0x89,
-0xAD, 0x07, 0x90, 0x93, 0xFA, 0xE0, 0x54, 0xF0, 0x44, 0x0C, 0xF0, 0x54, 0x0F, 0xF0, 0x90, 0xFD,
-0x62, 0xE0, 0x90, 0x93, 0xFC, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93, 0xFD, 0xF0, 0x90, 0xFD,
-0x64, 0xE0, 0x90, 0x93, 0xFE, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0xFF, 0xF0, 0x90, 0xFD,
-0x66, 0xE0, 0x90, 0x94, 0x00, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x94, 0x01, 0xF0, 0xED, 0xB4,
-0x02, 0x0B, 0x90, 0x93, 0xFA, 0xE0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x80, 0x3C, 0xED, 0xB4, 0x04,
-0x0B, 0x90, 0x93, 0xFA, 0xE0, 0x54, 0x0F, 0x44, 0x60, 0xF0, 0x80, 0x2D, 0xED, 0xF4, 0x70, 0x29,
-0x90, 0x93, 0xFA, 0xE0, 0x54, 0x0F, 0x44, 0x60, 0xF0, 0x90, 0x93, 0x2C, 0xE0, 0x60, 0x08, 0x90,
-0x93, 0xFC, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x93, 0xFC, 0xF0, 0xE4, 0x90, 0x93, 0xFD,
-0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xFC, 0x90,
-0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0xFA, 0x02, 0x66, 0x89, 0xAD, 0x07, 0x90, 0x93,
-0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x0E, 0xF0, 0x54, 0x0F, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93,
-0x6F, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93, 0x70, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93,
-0x71, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0x72, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93,
-0x73, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0x74, 0xF0, 0xED, 0xB4, 0x01, 0x11, 0x90, 0x93,
-0x6C, 0xE0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x6E, 0x74, 0x01, 0xF0, 0x80, 0x13, 0xED,
-0xB4, 0x02, 0x0F, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0x93, 0x6E, 0x74,
-0x02, 0xF0, 0x90, 0x93, 0x6C, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x60, 0x13, 0x7B, 0x01, 0x7A, 0x93,
-0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x12, 0x66, 0x89, 0x22,
-0x90, 0x93, 0x47, 0xE0, 0x60, 0x27, 0x90, 0x93, 0x4A, 0xE0, 0x70, 0x21, 0x90, 0x93, 0x18, 0xE0,
-0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x93, 0x44,
-0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74, 0x0D, 0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93,
-0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x02, 0xA1, 0x16, 0x90, 0x93, 0x1D, 0xE0,
-0x64, 0x01, 0x70, 0x39, 0x90, 0x06, 0x92, 0xE0, 0x20, 0xE2, 0x06, 0x90, 0x94, 0x4B, 0xE0, 0x60,
-0x21, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x29, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94,
-0x4B, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02,
-0xA1, 0x01, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x90, 0x93, 0x27, 0x04, 0xF0, 0x22, 0x90, 0x93, 0x1D,
-0xE0, 0x64, 0x04, 0x70, 0x3A, 0x90, 0x06, 0x92, 0xE0, 0x20, 0xE2, 0x06, 0x90, 0x94, 0x4B, 0xE0,
-0x60, 0x21, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x29, 0xE0, 0x04, 0xF0, 0xE4, 0x90,
-0x94, 0x4B, 0xF0, 0x90, 0x93, 0x20, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0xB5, 0x07, 0x02, 0x80,
-0x02, 0xA1, 0x01, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x90, 0x93, 0x27, 0x74, 0x04, 0xF0, 0x22, 0x90,
-0x93, 0x1D, 0xE0, 0x64, 0x06, 0x60, 0x02, 0x81, 0xC5, 0x90, 0x93, 0x2A, 0xE0, 0xB4, 0x04, 0x0F,
-0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x27, 0x30, 0xE0, 0x4E, 0xA1, 0x13, 0x90,
-0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x45, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3,
-0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x02, 0x81, 0xD4, 0x90, 0x93, 0x2A,
-0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12,
-0x1F, 0x3C, 0x90, 0x93, 0x21, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE,
-0x64, 0x80, 0x94, 0x80, 0x90, 0x93, 0x27, 0x40, 0x02, 0xA1, 0x13, 0x74, 0x02, 0xF0, 0x22, 0x90,
-0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4E, 0x27, 0x90, 0x93, 0x2A, 0xE0, 0x04, 0xF0,
-0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90,
-0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x2A, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0x2F, 0xFF,
-0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x21, 0xE0, 0x2F, 0xFF,
-0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x40, 0x58, 0x90, 0x07,
-0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x07, 0x70, 0x49, 0x90, 0x93, 0x2A,
-0xE0, 0xB4, 0x04, 0x05, 0x90, 0x93, 0x27, 0x80, 0x3A, 0x90, 0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54,
-0x3F, 0x30, 0xE0, 0x0C, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x27, 0x80, 0x23,
-0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4E, 0x27, 0x90, 0x93, 0x2A, 0xE0, 0x04,
-0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77,
-0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x64, 0x01, 0x70, 0x3C, 0x90, 0x93, 0x15, 0xE0,
-0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x07, 0x90, 0x07, 0x78, 0x74, 0x0D, 0xF0, 0x22, 0x90,
-0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x90, 0x07,
-0x78, 0x30, 0xE0, 0x24, 0x80, 0x0E, 0x90, 0x93, 0x18, 0xE0, 0xC3, 0x13, 0x90, 0x07, 0x78, 0x30,
-0xE0, 0x02, 0x80, 0x14, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x13,
-0x54, 0x01, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x04, 0x74, 0x03, 0xF0, 0x22, 0x74, 0x01, 0xF0, 0x22,
-0xE4, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x12, 0x90, 0x93,
-0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x2A, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x21,
-0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x06, 0x92,
-0x74, 0x04, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x93, 0x29, 0xF0, 0x90, 0x93,
-0x27, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x5D, 0xE0, 0xFF, 0x90, 0x93, 0x16, 0xE0,
-0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93,
-0x27, 0x74, 0x01, 0xF0, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x26, 0x74, 0x01, 0xF0,
-0x90, 0x93, 0x4C, 0xE0, 0x60, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90, 0x05,
-0x22, 0xE4, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93,
-0x15, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x51, 0x48, 0xE4, 0x90, 0x94,
-0x4B, 0xF0, 0x22, 0x00, 0x8C, 0xC1,
-};
-
-
-
-const u8 Rtl8723SFwUMCBCutImgArrayWithoutBT[Rtl8723SUMCBCutImgArrayWithoutBTLength] = {
-0x02, 0x23, 0x02, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x02, 0x01, 0x10, 0x06, 0xE0, 0x4A, 0x01, 0x00,
-0x03, 0x21, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x02, 0x4A, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x59, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x61, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x61, 0xDA, 0x00, 0x00,
-0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03, 0x00, 0x04, 0x06, 0x05, 0x04, 0x02,
-0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09, 0x08, 0x06, 0x00, 0x08, 0x0A, 0x09,
-0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x00, 0x00, 0x08,
-0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10, 0x00, 0x18, 0x22, 0x21, 0x20, 0x18,
-0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21, 0x20, 0x08, 0x00, 0x20, 0x22, 0x21,
-0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20, 0x22, 0x20, 0x18, 0x08, 0x00, 0x20,
-0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00, 0x00, 0x30, 0x31, 0x2F, 0x10, 0x10,
-0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28, 0x10, 0x00, 0x00, 0x30, 0x31, 0x20,
-0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04,
-0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05,
-0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05, 0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E,
-0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E,
-0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A,
-0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F, 0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04,
-0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60,
-0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78, 0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40,
-0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40, 0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8,
-0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0C,
-0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x6C, 0x00, 0x28,
-0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8, 0x00, 0xF0, 0x01, 0x18, 0x00, 0x64,
-0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58, 0x03, 0x20, 0x03, 0xE8, 0x02, 0x02,
-0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07, 0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E,
-0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
-0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x05, 0x06,
-0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0xBB, 0x01, 0x0F, 0xF8, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x28,
-0xF0, 0x22, 0x50, 0x09, 0xC5, 0x82, 0x29, 0xF8, 0xE5, 0x82, 0x26, 0xF6, 0x22, 0xBB, 0xFE, 0x09,
-0xC5, 0x82, 0x29, 0xF8, 0xE2, 0x25, 0x82, 0xF2, 0x22, 0xF8, 0xEA, 0x25, 0x83, 0xF5, 0x83, 0xE9,
-0x93, 0x28, 0x22, 0xBB, 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22,
-0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8, 0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83,
-0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22, 0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE,
-0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0,
-0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A,
-0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7,
-0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3, 0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83,
-0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01, 0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82,
-0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82,
-0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22, 0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0,
-0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A, 0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22,
-0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7,
-0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB, 0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8,
-0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5,
-0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB,
-0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x5B, 0xFF, 0xEE,
-0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED,
-0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, 0xCF, 0xF4, 0xCF, 0xCE, 0xF4, 0xCE, 0xCD, 0xF4, 0xCD, 0xCC,
-0xF4, 0xCC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8,
-0x9C, 0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22,
-0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5,
-0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9,
-0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82, 0x15, 0x82, 0x70,
-0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0,
-0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3,
-0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68,
-0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12,
-0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83,
-0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60, 0xE9, 0xA3, 0xA3,
-0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0x90, 0x93, 0x07, 0xF0, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x44, 0xDD,
-0x90, 0x93, 0x51, 0xE0, 0x60, 0x11, 0xE4, 0xF0, 0x53, 0x66, 0xFD, 0xE5, 0x66, 0x54, 0x07, 0x60,
-0x03, 0x02, 0x44, 0xDD, 0x02, 0x44, 0xDA, 0x90, 0x93, 0x38, 0xE0, 0x04, 0xF0, 0x53, 0x66, 0xEF,
-0x90, 0x93, 0x4F, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
-0x30, 0xE0, 0x3A, 0x90, 0x93, 0x4F, 0xE0, 0xFF, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0x0F, 0xB5, 0x07,
-0x0A, 0x90, 0x93, 0x30, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x80, 0x22, 0x90, 0x93, 0x2D, 0xE0, 0xC4,
-0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93, 0x4F, 0xE0, 0xB5,
-0x07, 0x0B, 0xE4, 0xB5, 0x06, 0x07, 0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x2D,
-0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x06, 0x90, 0x93, 0x07, 0x74, 0x5A, 0xF0,
-0x90, 0x93, 0x07, 0xE0, 0xFF, 0x90, 0x93, 0x3F, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93,
-0x38, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x40, 0x0D, 0xE5, 0x62, 0xB4,
-0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12, 0x51, 0x9C, 0x22, 0xEF, 0x60,
-0x0F, 0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22,
-0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x02,
-0x55, 0xE5, 0x22, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0xE4, 0x90, 0x93, 0x01, 0xF0, 0xA3, 0x12,
-0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x46, 0xAB, 0xE5, 0x62, 0x64,
-0x01, 0x60, 0x03, 0x02, 0x46, 0xAB, 0xE5, 0x65, 0x14, 0x60, 0x29, 0x24, 0xFD, 0x60, 0x25, 0x24,
-0x02, 0x24, 0xFB, 0x50, 0x02, 0x80, 0x23, 0x90, 0x93, 0x37, 0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04,
-0xA3, 0xE0, 0x60, 0x16, 0x90, 0x93, 0x37, 0xE0, 0x70, 0x0A, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x93,
-0x37, 0xF0, 0x80, 0x00, 0x90, 0x93, 0x01, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0,
-0x16, 0xA3, 0xE0, 0xB4, 0x06, 0x05, 0xE4, 0x90, 0x93, 0x01, 0xF0, 0xE4, 0xFF, 0x12, 0x5E, 0x91,
-0xEF, 0x70, 0x04, 0x90, 0x93, 0x01, 0xF0, 0x90, 0x93, 0x01, 0xE0, 0x70, 0x03, 0x02, 0x46, 0x9B,
-0x43, 0x66, 0x10, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x44,
-0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0xC3, 0x9F, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90,
-0x93, 0x2E, 0x80, 0x2D, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F,
-0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93, 0x4F, 0xE0, 0xC3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80,
-0x98, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x31, 0x80, 0x06, 0xE4, 0xF5, 0x48, 0x90, 0x93,
-0x2E, 0xE0, 0x80, 0x2D, 0x90, 0x93, 0x4F, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4,
-0xF5, 0x48, 0x90, 0x93, 0x4F, 0xE0, 0xFF, 0x90, 0x93, 0x46, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5,
-0x48, 0x90, 0x93, 0x4F, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x46, 0xE0, 0x04,
-0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57,
-0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04,
-0x12, 0x48, 0xF4, 0xE5, 0x63, 0x64, 0x0C, 0x60, 0x6F, 0x90, 0x93, 0x2B, 0xE0, 0xFF, 0x90, 0x93,
-0x4F, 0xE0, 0xD3, 0x9F, 0x40, 0x08, 0x90, 0x93, 0x2C, 0xE0, 0x04, 0xF0, 0x80, 0x05, 0xE4, 0x90,
-0x93, 0x2C, 0xF0, 0x90, 0x93, 0x4F, 0xE0, 0x90, 0x93, 0x2B, 0xF0, 0xA3, 0xE0, 0xC3, 0x94, 0x05,
-0x40, 0x46, 0xE4, 0xF0, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x4D, 0xE0, 0x70, 0x03,
-0x12, 0x4F, 0x63, 0x90, 0x93, 0x50, 0xE0, 0x64, 0x02, 0x70, 0x21, 0x12, 0x48, 0xF0, 0xE4, 0xF5,
-0x48, 0x90, 0x93, 0x3C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39,
-0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x4C, 0x80, 0x09, 0x43, 0x66, 0x01, 0x12,
-0x51, 0x2B, 0x90, 0x93, 0x48, 0x74, 0x01, 0xF0, 0x12, 0x51, 0x4C, 0x90, 0x93, 0x98, 0xE0, 0x30,
-0xE0, 0x09, 0x12, 0x67, 0x4A, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x07,
-0xF0, 0xA3, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x47, 0xA2,
-0xE5, 0x62, 0x64, 0x01, 0x60, 0x03, 0x02, 0x47, 0xA2, 0x90, 0x93, 0x07, 0x04, 0xF0, 0xE4, 0x90,
-0x93, 0x37, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x16, 0xA3, 0xE0, 0xB4, 0x06, 0x05, 0xE4,
-0x90, 0x93, 0x07, 0xF0, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x70, 0x04, 0x90, 0x93, 0x07, 0xF0,
-0x90, 0x93, 0x07, 0xE0, 0x70, 0x03, 0x02, 0x47, 0xA2, 0x43, 0x66, 0x10, 0x90, 0x93, 0x2D, 0xE0,
-0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x32, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x4F,
-0xE0, 0xD3, 0x9F, 0x50, 0x09, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x2E, 0xE0, 0x80, 0x4A, 0xE4, 0xF5,
-0x48, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0xC3, 0x9F, 0x75, 0xF0,
-0x03, 0xA4, 0xFF, 0x90, 0x93, 0x2E, 0xE0, 0x04, 0x2F, 0x80, 0x2D, 0x90, 0x93, 0x4F, 0xE0, 0x64,
-0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x4F, 0xE0, 0xFF, 0x90, 0x93,
-0x46, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x4F, 0xE0, 0x14, 0x75, 0xF0, 0x03,
-0xA4, 0xFF, 0x90, 0x93, 0x46, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E,
-0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94,
-0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x48, 0xF4, 0x12, 0x51, 0x4C, 0x90, 0x05, 0x22,
-0xE4, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x09, 0x12, 0x67, 0x4A, 0x90, 0x05, 0x22, 0x74,
-0xFF, 0xF0, 0x22, 0xE4, 0xF5, 0x66, 0xF5, 0x65, 0x75, 0x64, 0x0C, 0x75, 0x63, 0x0C, 0x90, 0x93,
-0x50, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x90, 0x93, 0x49, 0xF0, 0x90, 0x93, 0x4E, 0x04, 0xF0, 0x90,
-0x93, 0x37, 0xF0, 0xE4, 0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x39, 0xF0, 0x90, 0x93, 0x46, 0x74,
-0x05, 0xF0, 0xE4, 0x90, 0x93, 0x38, 0xF0, 0x90, 0x93, 0x44, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90,
-0x93, 0x3F, 0xF0, 0x90, 0x93, 0x42, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x3C, 0x74, 0x14, 0xF0, 0x90,
-0x93, 0x47, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x3A, 0xF0, 0x90, 0x93, 0x33, 0xF0, 0x90, 0x93,
-0x71, 0xF0, 0x90, 0x93, 0x43, 0xF0, 0x90, 0x93, 0x53, 0xF0, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x93,
-0x34, 0xF0, 0x90, 0x93, 0x4D, 0xF0, 0x90, 0x93, 0x3E, 0xF0, 0x90, 0x93, 0x3B, 0xF0, 0x90, 0x93,
-0x48, 0xF0, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x93, 0x3D, 0xF0, 0x90, 0x93, 0x52, 0xF0, 0x90, 0x93,
-0x40, 0xF0, 0x90, 0x93, 0x70, 0xE0, 0xB4, 0x02, 0x05, 0x90, 0x00, 0x93, 0xE4, 0xF0, 0x90, 0x93,
-0x2D, 0xE0, 0x54, 0x7F, 0xF0, 0xE0, 0x54, 0xF0, 0xF0, 0xE0, 0x54, 0x8F, 0xF0, 0xE4, 0xA3, 0xF0,
-0xA3, 0xF0, 0x90, 0x93, 0x31, 0xF0, 0x90, 0x93, 0x30, 0xF0, 0x22, 0x8E, 0x69, 0x8F, 0x6A, 0xAD,
-0x6A, 0xAC, 0x69, 0xAF, 0x68, 0x12, 0x44, 0xDE, 0xAF, 0x6A, 0xAE, 0x69, 0x90, 0x04, 0x80, 0xE0,
-0x54, 0x0F, 0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
-0x44, 0x01, 0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xFB,
-0xF0, 0xAC, 0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0xFA,
-0xF0, 0x74, 0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F, 0xF0, 0xAC,
-0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F, 0xF0, 0x90,
-0x04, 0x53, 0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0, 0x90, 0x04,
-0x50, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54,
-0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED, 0xF0, 0x22,
-0x7D, 0x01, 0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x6C, 0x8D, 0x6D, 0xE5,
-0x6C, 0x54, 0x0F, 0xFF, 0xE5, 0x63, 0x54, 0x0F, 0x6F, 0x60, 0x72, 0xE5, 0x6C, 0x30, 0xE2, 0x30,
-0xE5, 0x63, 0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x51, 0x69, 0xE5, 0x63, 0x30, 0xE3, 0x10, 0xE5,
-0x6C, 0x20, 0xE3, 0x0B, 0x12, 0x4D, 0x9D, 0xEF, 0x60, 0x53, 0x12, 0x51, 0x05, 0x80, 0x4E, 0xE5,
-0x63, 0x20, 0xE3, 0x49, 0xE5, 0x6C, 0x30, 0xE3, 0x44, 0xAF, 0x6D, 0x12, 0x50, 0x8A, 0x80, 0x3D,
-0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x6C, 0x20, 0xE3, 0x09, 0x12, 0x4D, 0x9D,
-0xEF, 0x60, 0x2A, 0x12, 0x51, 0x05, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x04, 0x0E, 0xE5, 0x6C,
-0x20, 0xE2, 0x09, 0x12, 0x4B, 0x16, 0xEF, 0x60, 0x14, 0x12, 0x50, 0xB3, 0xE5, 0x63, 0x54, 0x0F,
-0xFF, 0xBF, 0x02, 0x09, 0x12, 0x4C, 0x72, 0xEF, 0x60, 0x03, 0x12, 0x51, 0xB0, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0xE4, 0x90, 0x93, 0x01, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x93, 0x01, 0xF0, 0xE0,
-0x54, 0xC0, 0x70, 0x11, 0x90, 0x93, 0x48, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0x53, 0x66, 0xFD,
-0x12, 0x51, 0x9C, 0x80, 0x0F, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x4D, 0xE0, 0x70,
-0x03, 0x12, 0x4F, 0x63, 0x90, 0x93, 0x01, 0xE0, 0x30, 0xE6, 0x15, 0x43, 0x66, 0x01, 0x90, 0x93,
-0x50, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x51, 0x2B, 0x80, 0x0E, 0x12, 0x4F, 0x1D, 0x80, 0x09,
-0x90, 0x93, 0x48, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0xE4, 0x90, 0x93, 0x48, 0xF0, 0x90, 0x93,
-0x01, 0xE0, 0x30, 0xE7, 0x23, 0x43, 0x66, 0x02, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x42, 0xE0, 0xF5,
-0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05,
-0xF0, 0x90, 0x93, 0x51, 0x74, 0x01, 0xF0, 0x22, 0x53, 0x66, 0xFD, 0x22, 0xEF, 0x64, 0x01, 0x70,
-0x48, 0x7D, 0x78, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x22, 0x90,
-0x01, 0x36, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12,
-0x3A, 0x3F, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x48, 0xF0,
-0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x67, 0x4A, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F,
-0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36, 0x74, 0x7B, 0xF0, 0xA3,
-0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x3A, 0x93, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93,
-0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x06,
-0x0A, 0xE0, 0x44, 0x07, 0xF0, 0x12, 0x4E, 0x3E, 0xE5, 0x62, 0x20, 0xE0, 0x05, 0xE4, 0x90, 0x93,
-0x39, 0xF0, 0x22, 0x02, 0x4A, 0xD1, 0x02, 0x52, 0xA5, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3,
-0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54,
-0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4,
-0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40,
-0x80, 0x90, 0x4F, 0xE3, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5,
-0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60,
-0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5,
-0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA,
-0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0x12, 0x51, 0x83, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01,
-0xB9, 0x74, 0x01, 0xF0, 0x80, 0x61, 0xE5, 0x66, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74,
-0x02, 0xF0, 0x80, 0x53, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x08, 0x90, 0x01, 0xB9,
-0x74, 0x04, 0xF0, 0x80, 0x42, 0xE5, 0x66, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0,
-0x80, 0x35, 0xE5, 0x66, 0x30, 0xE4, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x28, 0x90,
-0x93, 0x39, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x1A, 0x90, 0x93, 0x43,
-0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x80, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0,
-0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F, 0x00, 0x22,
-0xE5, 0x62, 0x64, 0x01, 0x70, 0x6B, 0xE5, 0x65, 0x60, 0x67, 0xE5, 0x65, 0x64, 0x02, 0x60, 0x06,
-0xE5, 0x65, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x93, 0x37, 0xF0, 0x90, 0x06,
-0xAA, 0xE0, 0x90, 0x93, 0x4E, 0xF0, 0x90, 0x93, 0x37, 0xE0, 0x70, 0x07, 0x90, 0x93, 0x4E, 0xE0,
-0xFF, 0x80, 0x05, 0x90, 0x93, 0x37, 0xE0, 0xFF, 0x90, 0x93, 0x37, 0xEF, 0xF0, 0x90, 0x93, 0x39,
-0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x38, 0xF0, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x05,
-0x58, 0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x53,
-0x66, 0xFD, 0x53, 0x66, 0xEF, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x03, 0x12, 0x49,
-0x82, 0x22, 0x90, 0x93, 0x70, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x91, 0x80, 0x0C, 0x90, 0x93, 0x70,
-0xE0, 0x70, 0x04, 0x7D, 0xD4, 0x80, 0x02, 0x7D, 0x40, 0x7F, 0x93, 0x12, 0x53, 0xB6, 0x90, 0x00,
-0x29, 0xE0, 0x54, 0x3F, 0xFD, 0x7F, 0x29, 0x12, 0x53, 0xB6, 0x90, 0x00, 0x28, 0xE0, 0x54, 0xFC,
-0xFD, 0x7F, 0x28, 0x12, 0x53, 0xB6, 0x90, 0x00, 0x08, 0xE0, 0x44, 0x10, 0xFD, 0x7F, 0x08, 0x12,
-0x53, 0xB6, 0x7F, 0x01, 0x12, 0x4D, 0x45, 0x90, 0x00, 0x00, 0xE0, 0x44, 0x20, 0xFD, 0xE4, 0xFF,
-0x12, 0x53, 0xB6, 0x90, 0x00, 0x20, 0xE0, 0x54, 0xFE, 0xFD, 0x7F, 0x20, 0x12, 0x53, 0xB6, 0x90,
-0x00, 0x90, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x53, 0xB6, 0x7F, 0x14, 0x7E, 0x00, 0x02,
-0x3B, 0x09, 0x12, 0x51, 0x83, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0,
-0x80, 0x54, 0xE5, 0x18, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x48, 0xE5, 0x64,
-0x54, 0x0F, 0xD3, 0x94, 0x01, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x37, 0x90,
-0x02, 0x87, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x29, 0x90, 0x02, 0x86,
-0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x1A, 0x90, 0x93, 0x3A, 0xE0,
-0x70, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90,
-0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x02, 0xF0, 0x7F, 0x00, 0x22, 0x90,
-0x93, 0x21, 0x12, 0x43, 0xC8, 0x12, 0x51, 0xC3, 0x90, 0x93, 0x21, 0x12, 0x43, 0xA8, 0x12, 0x1E,
-0xF6, 0xF5, 0x65, 0x14, 0x60, 0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03, 0x70, 0x44,
-0x7F, 0x01, 0x80, 0x3D, 0x90, 0x93, 0x21, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
-0xFD, 0xE4, 0xFF, 0x12, 0x4F, 0xA5, 0x80, 0x29, 0x90, 0x93, 0x21, 0x12, 0x43, 0xA8, 0x90, 0x00,
-0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x01, 0x12, 0x4F, 0xA5, 0x1F, 0x80, 0x14, 0x90, 0x93, 0x21,
-0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x02, 0x12, 0x4F, 0xA5, 0xE4,
-0xFF, 0x12, 0x4A, 0x0C, 0x22, 0x8F, 0x70, 0xE4, 0x90, 0x93, 0xE3, 0xF0, 0xA3, 0xF0, 0x90, 0x01,
-0x09, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0xEF, 0x65, 0x70, 0x60, 0x3E, 0xC3, 0x90,
-0x93, 0xE4, 0xE0, 0x94, 0x88, 0x90, 0x93, 0xE3, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6,
-0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0xE3, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F,
-0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0xE4, 0xE0, 0x94, 0x32, 0x90, 0x93, 0xE3,
-0xE0, 0x94, 0x00, 0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE0, 0xB2, 0x22, 0x12, 0x51, 0x83,
-0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x39, 0x90, 0x93, 0x4C,
-0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x2B, 0x90, 0x93, 0x49, 0xE0, 0x60,
-0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x1D, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x04,
-0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90,
-0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x7F, 0x00, 0x22, 0x90,
-0x00, 0x20, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x20, 0x12, 0x53, 0xB6, 0x7F, 0xF4, 0x7E, 0x01, 0x12,
-0x3B, 0x09, 0x90, 0x00, 0x00, 0xE0, 0x54, 0xDF, 0xFD, 0xE4, 0xFF, 0x12, 0x53, 0xB6, 0x90, 0x00,
-0x28, 0xE0, 0x44, 0x03, 0xFD, 0x7F, 0x28, 0x12, 0x53, 0xB6, 0x90, 0x00, 0x08, 0xE0, 0x54, 0xEF,
-0xFD, 0x7F, 0x08, 0x12, 0x53, 0xB6, 0xE4, 0xFF, 0x12, 0x4D, 0x45, 0x7F, 0x64, 0x7E, 0x00, 0x12,
-0x3B, 0x09, 0x90, 0x00, 0x29, 0xE0, 0x44, 0xC0, 0xFD, 0x7F, 0x29, 0x02, 0x53, 0xB6, 0xE4, 0xFF,
-0x90, 0x00, 0x6A, 0xE0, 0x30, 0xE2, 0x22, 0xE0, 0x30, 0xE0, 0x20, 0xE0, 0x30, 0xE1, 0x0D, 0x90,
-0x00, 0x60, 0xE0, 0x7F, 0x02, 0x30, 0xE3, 0x13, 0x7F, 0x03, 0x80, 0x0F, 0x90, 0x00, 0x60, 0xE0,
-0x7F, 0x03, 0x30, 0xE3, 0x06, 0x7F, 0x02, 0x80, 0x02, 0x7F, 0x03, 0xEF, 0xFD, 0xD3, 0x90, 0x93,
-0x45, 0xE0, 0x9D, 0x90, 0x93, 0x44, 0xE0, 0x94, 0x00, 0x50, 0x05, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0,
-0x90, 0x93, 0x44, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
-0xC0, 0xD0, 0x8F, 0x68, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x6B,
-0x74, 0xFF, 0xF0, 0x12, 0x8A, 0x65, 0xBF, 0x01, 0x0D, 0x90, 0x93, 0x69, 0xE0, 0xFF, 0x7D, 0x01,
-0x12, 0x58, 0x95, 0x12, 0x48, 0x5B, 0x90, 0x05, 0x22, 0xE5, 0x6B, 0xF0, 0x80, 0x0D, 0x90, 0x93,
-0x69, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x95, 0x12, 0x48, 0x5B, 0x90, 0x04, 0x1F, 0x74, 0x20,
-0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x3D, 0x90,
-0x93, 0x50, 0xE0, 0x60, 0x27, 0x12, 0x48, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3C, 0xE0, 0xF5,
-0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05,
-0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x22, 0xE5, 0x63, 0x54, 0x0F,
-0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x48, 0xF4, 0x22, 0x90, 0x01, 0x5F,
-0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3C, 0xE0, 0xF5,
-0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05,
-0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x49, 0x14, 0xF0, 0xE5, 0x63, 0x54, 0x0F,
-0xC3, 0x94, 0x0C, 0x50, 0x0D, 0x12, 0x48, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x03, 0x12,
-0x67, 0x4A, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x4D, 0x74, 0x01, 0xF0,
-0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0xD3, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xD3,
-0x12, 0x43, 0x84, 0xEC, 0x44, 0x02, 0xFC, 0x90, 0x93, 0xD3, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xD3,
-0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30,
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x14, 0x60, 0x09, 0x14, 0x60, 0x16, 0x24, 0x02, 0x70, 0x32,
-0x80, 0x0A, 0x90, 0x93, 0x4E, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x37, 0xF0, 0xE4, 0x90, 0x93, 0x53,
-0xF0, 0x22, 0xED, 0x70, 0x0A, 0x90, 0x93, 0x47, 0xE0, 0x90, 0x93, 0x4E, 0xF0, 0x80, 0x05, 0x90,
-0x93, 0x4E, 0xED, 0xF0, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x93, 0x37, 0xF0, 0x90, 0x93, 0x53, 0x74,
-0x01, 0xF0, 0x22, 0x48, 0x93, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x93,
-0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x93, 0x5E, 0x00, 0x41, 0x93, 0x6D,
-0x00, 0x41, 0x93, 0xE9, 0x00, 0x41, 0x93, 0x2B, 0x00, 0x41, 0x93, 0x2C, 0x00, 0x41, 0x92, 0x69,
-0x00, 0x41, 0x92, 0x6A, 0x00, 0x41, 0x92, 0x68, 0x00, 0x41, 0x93, 0xDF, 0x00, 0x00, 0x90, 0x01,
-0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0x90, 0x93,
-0x35, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x01, 0x04, 0xE0, 0x54, 0x0F, 0xFF, 0x74, 0x40, 0x7E, 0x00,
-0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x90, 0x93, 0x4B, 0xF0,
-0xEE, 0x90, 0x93, 0x4A, 0xF0, 0x22, 0xEF, 0x70, 0x0B, 0x90, 0x93, 0x6F, 0xE0, 0x90, 0x93, 0xD7,
-0x60, 0x0B, 0x80, 0x12, 0x90, 0x93, 0x6F, 0xE0, 0x90, 0x93, 0xD7, 0x60, 0x09, 0x12, 0x1F, 0xD5,
-0x00, 0x00, 0x02, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x01, 0x10, 0x7B, 0x01, 0x7A,
-0x93, 0x79, 0xD7, 0x7F, 0x60, 0x7E, 0x08, 0x02, 0x56, 0x9D, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF,
-0xF0, 0xEF, 0x60, 0x0A, 0xE5, 0x62, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x4E, 0x8B, 0x53, 0x63,
-0xF0, 0x43, 0x63, 0x0C, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x07, 0x90, 0x05, 0x27, 0xE0, 0x54,
-0x7F, 0xF0, 0x22, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12,
-0x8A, 0x65, 0xEF, 0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12,
-0x3A, 0x93, 0x12, 0x54, 0x14, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0xE5, 0x64, 0x30, 0xE6,
-0x12, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0x90, 0x01, 0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0,
-0x53, 0x64, 0xBF, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x0A, 0x90, 0x00, 0x83, 0xE0, 0x30, 0xE0,
-0x03, 0x75, 0x64, 0x02, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01,
-0x05, 0x7F, 0x01, 0x12, 0x4E, 0x8B, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x90, 0x93, 0x98, 0xE0,
-0x30, 0xE0, 0x07, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0x3D, 0xE0, 0x70,
-0x1A, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x14, 0x90, 0x93, 0x68, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x58,
-0x95, 0x8E, 0x6E, 0x8F, 0x6F, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0x3E, 0xE0,
-0x60, 0x16, 0x90, 0x93, 0x41, 0xE0, 0x70, 0x10, 0x90, 0x93, 0x3B, 0xE0, 0x90, 0x07, 0x78, 0x60,
-0x04, 0x74, 0x0D, 0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93, 0xEA, 0xEF, 0xF0, 0x12, 0x56,
-0x14, 0x90, 0x93, 0xEA, 0xE0, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x53, 0x63, 0xF0, 0x43,
-0x63, 0x04, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B,
-0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0x90, 0x93, 0x98, 0xE0,
-0x30, 0xE0, 0x05, 0xAF, 0x64, 0x02, 0x5F, 0x72, 0x7D, 0x01, 0xAF, 0x64, 0x12, 0x48, 0xF4, 0x22,
-0x53, 0x63, 0xF0, 0x43, 0x63, 0x01, 0x12, 0x4C, 0x02, 0x12, 0x4D, 0xEF, 0x53, 0x63, 0xF0, 0x43,
-0x63, 0x02, 0x22, 0xE4, 0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x38, 0xF0, 0xF5, 0x66, 0x22, 0x90,
-0x02, 0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12,
-0x43, 0xF7, 0x51, 0xFA, 0x00, 0x40, 0x52, 0x22, 0x00, 0x80, 0x52, 0x4D, 0x01, 0x00, 0x52, 0x61,
-0x02, 0x00, 0x52, 0x79, 0x04, 0x00, 0x00, 0x00, 0x52, 0x96, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE,
-0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06,
-0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
-0x80, 0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF,
-0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78,
-0x07, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04,
-0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80,
-0x35, 0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF,
-0x2D, 0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE,
-0xFF, 0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D,
-0x00, 0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x1F,
-0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x0C, 0xF0, 0xA3, 0xF0, 0x12, 0x60, 0xFB, 0x75,
-0x8E, 0x02, 0x91, 0xE6, 0x12, 0x60, 0x52, 0x90, 0x93, 0x70, 0xEF, 0xF0, 0x12, 0x60, 0x65, 0x90,
-0x93, 0x72, 0xEF, 0xF0, 0x12, 0x60, 0x71, 0x90, 0x93, 0x54, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4,
-0xF5, 0x18, 0xF5, 0x0D, 0xF5, 0x62, 0x90, 0x93, 0x6F, 0xF0, 0x90, 0x00, 0xCC, 0xE0, 0x54, 0xF7,
-0xF0, 0x12, 0x7E, 0x58, 0x12, 0x47, 0xA3, 0x12, 0x37, 0x1C, 0x7F, 0x03, 0x12, 0x88, 0x1B, 0x71,
-0x8D, 0x12, 0x60, 0x16, 0x12, 0x60, 0x89, 0x12, 0x60, 0x9E, 0x12, 0x60, 0x34, 0x12, 0x45, 0x02,
-0x12, 0x61, 0x03, 0x91, 0xCE, 0x90, 0x93, 0x0E, 0xE5, 0xD9, 0xF0, 0xC2, 0xAF, 0x90, 0x00, 0x80,
-0xE0, 0x44, 0x40, 0xF0, 0x71, 0xFE, 0x75, 0xE8, 0x03, 0x43, 0xA8, 0x85, 0xD2, 0xAF, 0x12, 0x82,
-0xBB, 0x51, 0x9B, 0x12, 0x60, 0xA5, 0x90, 0x93, 0x0C, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0xA5, 0x90,
-0x01, 0xC4, 0xF0, 0x74, 0x52, 0xA3, 0xF0, 0xE5, 0x18, 0x30, 0xE4, 0x0A, 0xC2, 0xAF, 0x53, 0x18,
-0xEF, 0xD2, 0xAF, 0x12, 0x67, 0x8F, 0xE5, 0x18, 0x30, 0xE6, 0x0A, 0xC2, 0xAF, 0x53, 0x18, 0xBF,
-0xD2, 0xAF, 0x12, 0x76, 0x54, 0xE5, 0x18, 0x30, 0xE7, 0x0A, 0xC2, 0xAF, 0x53, 0x18, 0x7F, 0xD2,
-0xAF, 0x12, 0x82, 0x61, 0xC2, 0xAF, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0xBF, 0x01, 0x0D, 0x90, 0x93,
-0x3A, 0x74, 0x01, 0xF0, 0x31, 0x9C, 0xE4, 0x90, 0x93, 0x3A, 0xF0, 0xD2, 0xAF, 0x90, 0x01, 0xBD,
-0xE5, 0x63, 0xF0, 0x90, 0x93, 0x50, 0xE0, 0x90, 0x01, 0xBC, 0xF0, 0x80, 0x99, 0x90, 0x01, 0x3C,
-0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
-0xF0, 0xFD, 0x7F, 0x54, 0x71, 0xB6, 0x7D, 0xFF, 0x7F, 0x55, 0x71, 0xB6, 0x7D, 0xFF, 0x7F, 0x56,
-0x71, 0xB6, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75,
-0x83, 0x00, 0xED, 0xF0, 0x71, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x30, 0xE4, 0xF0,
-0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0xFD, 0x7F, 0x50, 0x71, 0xB6, 0xE4, 0xFD, 0x7F, 0x51, 0x71, 0xB6, 0xE4, 0xFD, 0x7F, 0x52, 0x71,
-0xB6, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0x90, 0x00, 0x02, 0xE0, 0x44, 0x01, 0xF0, 0xD3, 0x10,
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x05,
-0x22, 0x74, 0xFF, 0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xB4, 0x12, 0x1F,
-0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xB8, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90,
-0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x71, 0xFE, 0x71, 0xF7, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE,
-0xF0, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0,
-0x44, 0x20, 0xF0, 0x90, 0x93, 0x41, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90,
-0x93, 0x34, 0xE0, 0x60, 0x34, 0xE4, 0x90, 0x93, 0x4D, 0xF0, 0xFF, 0x7E, 0x08, 0x12, 0x2C, 0x6E,
-0x90, 0x93, 0xB4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB4, 0x12, 0x43, 0x84, 0xEC, 0x54, 0xFD, 0xFC,
-0x90, 0x93, 0xB4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB4, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12,
-0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x3E, 0xE0, 0x60, 0x22, 0xE4,
-0xFF, 0x11, 0x56, 0x90, 0x93, 0x52, 0xE0, 0x60, 0x12, 0x90, 0x93, 0xB8, 0x12, 0x1F, 0xD5, 0x00,
-0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xB8, 0xD1, 0x99, 0x90, 0x07, 0x78, 0x74, 0x01,
-0xF0, 0x90, 0x93, 0x48, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93,
-0xE0, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x93, 0xE2, 0xF0, 0x90, 0x93, 0xE0, 0xE0, 0x54, 0x7F,
-0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x6C, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44,
-0x80, 0xFD, 0x7F, 0x80, 0x61, 0xB6, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x8A, 0x65, 0xEF,
-0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x91, 0x14, 0x90, 0x93, 0x9F, 0x74, 0x02, 0xF0,
-0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x9F, 0xE0, 0x90, 0x93, 0xEB, 0xF0,
-0x6F, 0x70, 0x02, 0xA1, 0xDC, 0xEF, 0x14, 0x60, 0x3B, 0x14, 0x60, 0x5F, 0x14, 0x70, 0x02, 0xA1,
-0xB6, 0x24, 0x03, 0x60, 0x02, 0xA1, 0xDC, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x03, 0x04, 0xD1, 0xE4,
-0xA1, 0xDC, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x02, 0x04, 0xD1, 0xFC, 0xA1, 0xDC, 0x90, 0x93, 0xEB,
-0xE0, 0xB4, 0x04, 0x04, 0xF1, 0x00, 0xA1, 0xDC, 0x90, 0x93, 0xEB, 0xE0, 0x64, 0x01, 0x70, 0x7C,
-0xD1, 0xE6, 0x80, 0x78, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4, 0x03, 0x04, 0xF1, 0x35, 0x80, 0x6C,
-0xEF, 0xB4, 0x02, 0x04, 0xF1, 0x04, 0x80, 0x64, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4, 0x04, 0x04,
-0xF1, 0x1A, 0x80, 0x58, 0xEF, 0x70, 0x55, 0xD1, 0x01, 0x80, 0x51, 0x90, 0x93, 0xEB, 0xE0, 0xB4,
-0x03, 0x04, 0xF1, 0x25, 0x80, 0x46, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x01, 0x04, 0x91, 0xF6, 0x80,
-0x3B, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x04, 0x04, 0xF1, 0x11, 0x80, 0x30, 0x90, 0x93, 0xEB, 0xE0,
-0x70, 0x2A, 0xB1, 0xE1, 0x80, 0x26, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4, 0x01, 0x04, 0xB1, 0xE5,
-0x80, 0x1A, 0xEF, 0xB4, 0x02, 0x04, 0xB1, 0xFD, 0x80, 0x12, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4,
-0x04, 0x05, 0x12, 0x44, 0xFF, 0x80, 0x05, 0xEF, 0x70, 0x02, 0xB1, 0xF9, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0xD1, 0x01, 0x81, 0xF6, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x54,
-0xBF, 0xF0, 0x90, 0x93, 0x9F, 0x74, 0x03, 0xF0, 0x22, 0xD1, 0x01, 0x80, 0xE8, 0xD1, 0x14, 0x80,
-0xE4, 0x90, 0x01, 0x3E, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0xAD, 0x90, 0x93, 0x9F,
-0x74, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xAC, 0x12, 0x1F,
-0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xB0, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90,
-0x01, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x41, 0xE0,
-0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x0A, 0x31, 0x83,
-0xEF, 0x64, 0x01, 0x60, 0x03, 0x12, 0x4F, 0x63, 0x90, 0x93, 0x3E, 0xE0, 0x60, 0x1C, 0x7F, 0x01,
-0x11, 0x56, 0x90, 0x93, 0x52, 0xE0, 0x60, 0x12, 0x90, 0x93, 0xB0, 0x12, 0x1F, 0xD5, 0x00, 0x00,
-0x03, 0x10, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xB0, 0xD1, 0x99, 0x71, 0xF7, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0x90, 0x93, 0xEC, 0xEF, 0xF0, 0xD1, 0x14, 0x90, 0x93, 0xEC, 0xE0, 0x60, 0x05, 0x90, 0x05,
-0x22, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x99, 0xF0, 0x22, 0x7F, 0x70, 0x7E, 0x08, 0xD3, 0x10, 0xAF,
-0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0x54, 0xFC, 0xFF, 0x90, 0x01, 0xE8, 0xF0, 0xEE, 0x44, 0xF0, 0xA3,
-0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEC, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F,
-0x0F, 0x90, 0x01, 0xED, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEE, 0xF0, 0x12,
-0x1E, 0xF6, 0x90, 0x01, 0xEF, 0xF0, 0x90, 0x01, 0xEB, 0x74, 0x40, 0xF0, 0x12, 0x88, 0x6C, 0xD0,
-0xD0, 0x92, 0xAF, 0x22, 0xF1, 0x35, 0x7D, 0x03, 0x7F, 0x02, 0x12, 0x3A, 0x3F, 0x90, 0x05, 0x27,
-0xE4, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE4, 0x90, 0x93, 0x9F, 0xF0, 0x22, 0xF1, 0x04, 0x80, 0xE6,
-0xF1, 0x1A, 0x80, 0xE2, 0xD1, 0x14, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x9F, 0x04, 0xF0,
-0x22, 0x91, 0x14, 0x90, 0x93, 0x9F, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90,
-0x93, 0x9F, 0x04, 0xF0, 0x22, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x91, 0x0E, 0x90, 0x93,
-0x9F, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40,
-0xF0, 0x90, 0x93, 0x9F, 0x74, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
-0x93, 0xED, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x46, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08,
-0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46, 0xE0, 0x5F, 0xF0, 0x71, 0xFE,
-0x90, 0x93, 0xED, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33,
-0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8,
-0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4B, 0x90,
-0x93, 0xED, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3,
-0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x62, 0xE0, 0x5F, 0xF0, 0x71, 0xFE, 0x90, 0x93, 0xED,
-0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
-0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x60, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80,
-0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F,
-0x82, 0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x8B, 0x21, 0x8A, 0x22, 0x89, 0x23, 0x90, 0x93, 0xBC, 0x12, 0x43, 0xC8, 0xAB, 0x24, 0xAA, 0x25,
-0xA9, 0x26, 0x90, 0x93, 0xBF, 0x12, 0x43, 0xC8, 0xAF, 0x27, 0x15, 0x27, 0xEF, 0x60, 0x1E, 0x90,
-0x93, 0xBF, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x93, 0xBC,
-0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0xEF, 0x12, 0x42, 0x53, 0x80, 0xDB, 0xAB, 0x21, 0xAA,
-0x22, 0xA9, 0x23, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
-0x01, 0xC4, 0x74, 0x48, 0xF0, 0x74, 0x58, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90,
-0x05, 0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01,
-0xC7, 0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0x11, 0x48, 0xBF, 0x01, 0x0F, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x95, 0x90, 0x04,
-0x1F, 0x74, 0x20, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF,
-0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF,
-0xF0, 0xED, 0x60, 0x0E, 0x74, 0x0F, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44,
-0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0,
-0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21,
-0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03,
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C, 0x13,
-0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x93, 0x01,
-0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01, 0x60, 0x07,
-0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3B, 0x90, 0x93, 0x01, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x3D,
-0xF0, 0x79, 0x40, 0x90, 0x93, 0x01, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83, 0xE0,
-0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x93, 0x5E, 0xF0, 0x22, 0x90, 0x93, 0x5E, 0xE0, 0x04,
-0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0B, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0, 0x02,
-0x11, 0x80, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00,
-0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07,
-0x90, 0x01, 0xC4, 0x74, 0x63, 0xF0, 0x74, 0x59, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x28,
-0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E, 0xA3, 0xE0,
-0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x61, 0x57, 0x90, 0x01, 0x34, 0x74, 0x01,
-0xF0, 0x85, 0xD1, 0x0E, 0x85, 0xD3, 0x10, 0x85, 0xD4, 0x11, 0x85, 0xD5, 0x12, 0x85, 0xD6, 0x13,
-0x85, 0xD7, 0x14, 0x85, 0xD9, 0x15, 0x85, 0xD2, 0x0F, 0x75, 0x24, 0x00, 0x75, 0x25, 0x00, 0x75,
-0x26, 0x0E, 0x75, 0x27, 0x08, 0xFB, 0x7A, 0x93, 0x79, 0x5F, 0x12, 0x57, 0xF9, 0x90, 0x93, 0x60,
-0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x01, 0xFE, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x70, 0x02,
-0x61, 0x08, 0x90, 0x93, 0x60, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02,
-0x61, 0x08, 0xEF, 0x54, 0x1F, 0xF5, 0x4D, 0x90, 0x93, 0x61, 0xE0, 0x54, 0x3F, 0xF5, 0x4E, 0x90,
-0x93, 0x63, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34,
-0x87, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xE5, 0x4E, 0xD3, 0x94, 0x04, 0x40, 0x03,
-0x75, 0x4E, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0x75, 0xF0,
-0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0x63, 0xE0, 0x54,
-0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43,
-0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93,
-0x60, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x2F, 0x90, 0x93, 0x63, 0xE0, 0x54, 0x1F, 0xFF,
-0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8F, 0xF0,
-0x12, 0x42, 0x87, 0x90, 0x93, 0x62, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0,
-0x67, 0xAF, 0x4D, 0x12, 0x71, 0x11, 0x80, 0x60, 0x90, 0x93, 0x60, 0xE0, 0xFF, 0xC4, 0x13, 0x13,
-0x54, 0x03, 0x30, 0xE0, 0x53, 0x90, 0x93, 0x63, 0xE0, 0x54, 0x1F, 0xFF, 0xFD, 0xE5, 0x4D, 0x25,
-0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8D, 0xF0, 0x12, 0x42, 0x87,
-0x90, 0x93, 0x62, 0xE0, 0xFE, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x0F, 0xEE, 0x54,
-0x7F, 0xFD, 0x8F, 0x55, 0xAB, 0x4E, 0xAF, 0x4D, 0x12, 0x70, 0xAD, 0x80, 0x1B, 0x90, 0x01, 0x02,
-0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x11, 0x90, 0x04, 0x30, 0xE0, 0xB4, 0x01, 0x0A, 0xE4, 0xF0,
-0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x04, 0xCF, 0xF0, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80,
-0x46, 0x90, 0x93, 0x50, 0xE0, 0x60, 0x37, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
-0x04, 0xF0, 0x12, 0x51, 0x83, 0xEF, 0x64, 0x01, 0x70, 0x2D, 0xF5, 0x48, 0x90, 0x93, 0x3C, 0xE0,
-0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74,
-0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x80, 0x09, 0x12, 0x51,
-0x83, 0xBF, 0x01, 0x03, 0x12, 0x51, 0x9C, 0xE5, 0x2C, 0x20, 0xE1, 0x02, 0x61, 0xF9, 0x90, 0x01,
-0x34, 0x74, 0x02, 0xF0, 0x90, 0xFD, 0x10, 0x74, 0x7F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x30, 0xE5,
-0x0B, 0x75, 0x4F, 0x88, 0x75, 0x50, 0x0F, 0x75, 0x51, 0x0F, 0x80, 0x09, 0x75, 0x4F, 0xC0, 0x75,
-0x50, 0x08, 0x75, 0x51, 0x07, 0x90, 0x04, 0x7F, 0xE0, 0x55, 0x51, 0xF5, 0x16, 0x90, 0x04, 0x7E,
-0xE0, 0x55, 0x51, 0xF5, 0x17, 0x65, 0x16, 0x60, 0x60, 0xE4, 0xFF, 0xE5, 0x16, 0x75, 0xF0, 0x08,
-0xA4, 0x25, 0x4F, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74,
-0x19, 0x2F, 0xF8, 0xA6, 0x06, 0x0F, 0xBF, 0x08, 0xE2, 0x75, 0x24, 0x00, 0x75, 0x25, 0x00, 0x75,
-0x26, 0x19, 0x75, 0x27, 0x08, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x56, 0x12, 0x57, 0xF9, 0x90, 0x93,
-0x56, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0xD1, 0x9F, 0xE5, 0x16,
-0x24, 0x01, 0xFF, 0xE4, 0x33, 0xFE, 0xAD, 0x50, 0x7C, 0x00, 0x12, 0x1F, 0x4E, 0xAF, 0x05, 0x8F,
-0x16, 0x90, 0x04, 0x7F, 0xEF, 0xF0, 0xB5, 0x17, 0xA0, 0xE5, 0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01,
-0x34, 0x74, 0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90, 0x01, 0x34, 0x74, 0x10, 0xF0, 0x43,
-0x18, 0x10, 0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF, 0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54,
-0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8, 0x00, 0x75, 0xE8, 0x00, 0x12, 0x53,
-0xCB, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x53, 0xFE, 0x80, 0xFE, 0xE5, 0x2C, 0x30,
-0xE6, 0x06, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xE5, 0x2E, 0x30, 0xE0, 0x52, 0x90, 0x93, 0x71,
-0x74, 0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x93, 0x6E, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90,
-0x05, 0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x9E, 0xE0,
-0x30, 0xE0, 0x0D, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x06, 0x90, 0x93, 0xA0, 0x74, 0x01, 0xF0,
-0x90, 0x93, 0x98, 0xE0, 0xFF, 0x30, 0xE0, 0x0D, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x06, 0x90,
-0x93, 0x9A, 0x74, 0x01, 0xF0, 0x12, 0x45, 0x09, 0xF1, 0xBF, 0x90, 0x93, 0x71, 0xE4, 0xF0, 0xE5,
-0x2E, 0x30, 0xE1, 0x7D, 0x90, 0x01, 0x36, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x62, 0xE0, 0xFE, 0x90,
-0x05, 0x61, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xF5, 0x0A, 0xEC, 0x3E, 0xF5, 0x09, 0x90, 0x05, 0x22,
-0xE0, 0xB4, 0xFF, 0x06, 0x90, 0x01, 0xE6, 0xE0, 0x04, 0xF0, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x01,
-0xE4, 0xF0, 0x43, 0x18, 0x40, 0x11, 0xF5, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x0C, 0xE4, 0xFF,
-0xD1, 0x91, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x53, 0xE0, 0x60, 0x1D,
-0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x16, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x01,
-0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x05, 0x08, 0xE5,
-0x08, 0xC3, 0x94, 0xFF, 0x40, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01,
-0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x7B, 0x90, 0x01, 0x36, 0x74, 0x04, 0xF0, 0x90, 0x05, 0x62, 0xE0,
-0xFE, 0x90, 0x05, 0x61, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xF5, 0x0C, 0xEC, 0x3E, 0xF5, 0x0B, 0xD3,
-0xE5, 0x0C, 0x95, 0x0A, 0xE5, 0x0B, 0x95, 0x09, 0x40, 0x06, 0x90, 0x01, 0xE5, 0xE0, 0x04, 0xF0,
-0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x0D, 0x90, 0x93, 0x39, 0xE4, 0xF0, 0x90, 0x93, 0x99, 0xE0,
-0x64, 0x06, 0x60, 0x3D, 0x12, 0x4B, 0x90, 0x90, 0x93, 0x53, 0xE0, 0x60, 0x34, 0x90, 0x93, 0x4E,
-0xE0, 0xFF, 0x90, 0x93, 0x37, 0xE0, 0x6F, 0x70, 0x28, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x05, 0x73,
-0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x7D, 0x01, 0x7F,
-0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93, 0x37, 0xE0, 0x14,
-0xF0, 0xE5, 0x2E, 0x30, 0xE3, 0x34, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0, 0xE5, 0x62, 0x64, 0x01,
-0x70, 0x28, 0xE5, 0x65, 0x60, 0x24, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02,
-0xF0, 0x75, 0x48, 0x00, 0x90, 0x93, 0x42, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E,
-0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4, 0x2B, 0x90,
-0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x20, 0xE5, 0x65, 0x60, 0x1C, 0x90, 0x01,
-0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x51, 0xE4, 0xF0, 0x53, 0x66,
-0xFD, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x51, 0x9C, 0xE5, 0x2E, 0x30, 0xE5, 0x1F, 0x90,
-0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x14, 0xE5, 0x65, 0x60, 0x10, 0x90, 0x93,
-0x50, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x51, 0x2B, 0x80, 0x03, 0x12, 0x4F, 0x1D, 0xE5, 0x2E,
-0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x10, 0xE5, 0x65,
-0x60, 0x0C, 0x53, 0x66, 0xFE, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x51, 0x9C, 0xE5, 0x2F,
-0x30, 0xE1, 0x18, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x08,
-0x90, 0x93, 0x9D, 0x74, 0x01, 0xF0, 0x80, 0x03, 0x12, 0x4E, 0xD6, 0x74, 0x63, 0x04, 0x90, 0x01,
-0xC4, 0xF0, 0x74, 0x59, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03,
-0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0,
-0x32, 0x8F, 0x71, 0x90, 0x05, 0x43, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x22, 0x90,
-0x93, 0x01, 0xE0, 0x54, 0xF0, 0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A,
-0x00, 0x79, 0x19, 0x90, 0x93, 0xCB, 0x12, 0x43, 0xC8, 0x0B, 0x7A, 0x93, 0x79, 0x01, 0xD3, 0x10,
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xC8, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x6A, 0xE0, 0xFF,
-0x90, 0x92, 0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x90, 0x92,
-0x69, 0xE0, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0B, 0x90, 0x92, 0x69, 0xE0, 0x14, 0xFF,
-0xA3, 0xE0, 0xB5, 0x07, 0x0F, 0x12, 0x81, 0x51, 0xEF, 0x60, 0x72, 0x12, 0x82, 0x61, 0x90, 0x01,
-0x3F, 0x74, 0x02, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6B, 0xF9, 0x74,
-0x92, 0x35, 0xF0, 0xA8, 0x01, 0xFC, 0x7D, 0x01, 0x90, 0x93, 0xC8, 0x12, 0x43, 0xA8, 0x7E, 0x00,
-0x7F, 0x02, 0x12, 0x1E, 0xD0, 0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6D, 0xF9,
-0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x93, 0xCB,
-0x12, 0x43, 0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x90, 0x93, 0xC8, 0x12, 0x43, 0xA8, 0x12,
-0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x27, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x57,
-0xF9, 0x90, 0x92, 0x6A, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0xAE, 0x07, 0xE4, 0xFF, 0xD1, 0x91, 0xEF, 0x60, 0x19, 0x90, 0x93, 0x98, 0xE0, 0xC4,
-0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x0D, 0xAF, 0x06, 0x7D, 0x01, 0x12, 0x48, 0xF4, 0x12, 0x67,
-0x4A, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x93, 0x26, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x29,
-0xE0, 0x54, 0xF0, 0x44, 0x02, 0xF0, 0x54, 0x0F, 0x44, 0xC0, 0xF0, 0x90, 0x93, 0x26, 0x12, 0x43,
-0xA8, 0x90, 0x93, 0xCB, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x29, 0xC1, 0xBE, 0x90,
-0x93, 0xE0, 0xE0, 0x30, 0xE0, 0x2F, 0xE5, 0x62, 0xB4, 0x01, 0x2A, 0x90, 0x93, 0xDF, 0xE0, 0x04,
-0xF0, 0xE0, 0xB4, 0x0A, 0x0B, 0x90, 0x93, 0xE2, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0xDF, 0xF0,
-0x90, 0x93, 0xE2, 0xE0, 0xFF, 0x90, 0x93, 0xE1, 0xE0, 0xD3, 0x9F, 0x50, 0x08, 0x12, 0x8A, 0xA6,
-0xE4, 0x90, 0x93, 0xE2, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC,
-0xEF, 0x30, 0xE0, 0x02, 0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF,
-0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5,
-0x2B, 0x90, 0x01, 0x30, 0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3,
-0xE5, 0x2B, 0xF0, 0x22, 0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32,
-0x43, 0x32, 0x20, 0x90, 0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32,
-0xF0, 0x22, 0x90, 0x00, 0xF4, 0xE0, 0x20, 0xE3, 0x09, 0xE0, 0x7F, 0x01, 0x20, 0xE2, 0x05, 0x7F,
-0x02, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30, 0xE3, 0x02, 0x7F, 0x01,
-0x22, 0x90, 0x93, 0x72, 0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E,
-0xFD, 0x7F, 0x33, 0x22, 0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D,
-0x90, 0x05, 0x41, 0x74, 0x10, 0xF0, 0x90, 0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01,
-0x64, 0x74, 0x20, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x0F, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x98, 0xE0,
-0x7F, 0x00, 0x30, 0xE4, 0x02, 0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E, 0xC3, 0x90, 0x93, 0x10,
-0xE0, 0x94, 0x88, 0x90, 0x93, 0x0F, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44,
-0x80, 0xF0, 0x22, 0x90, 0x93, 0x0F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E,
-0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0x10, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x0F, 0xE0, 0x94,
-0x00, 0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0x90, 0x01, 0x94, 0xE0, 0x44,
-0x01, 0xF0, 0x22, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01, 0x9C, 0x74, 0x7E, 0xF0,
-0xA3, 0x74, 0x92, 0xF0, 0xA3, 0x74, 0xA0, 0xF0, 0xA3, 0x74, 0x24, 0xF0, 0x90, 0x01, 0x9B, 0x74,
-0x49, 0xF0, 0x90, 0x01, 0x9A, 0x74, 0xE0, 0xF0, 0x90, 0x01, 0x99, 0xE4, 0xF0, 0x90, 0x01, 0x98,
-0x04, 0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05,
-0xC0, 0x06, 0xC0, 0x07, 0x7D, 0x33, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x61, 0xFF, 0xA3, 0xF0,
-0x53, 0x91, 0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE, 0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90,
-0x00, 0x52, 0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0, 0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06,
-0x90, 0x00, 0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D, 0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20,
-0xF0, 0xE5, 0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00, 0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7,
-0x06, 0x90, 0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5, 0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74,
-0x01, 0xF0, 0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90, 0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30,
-0xE2, 0x06, 0x90, 0x00, 0x56, 0x74, 0x04, 0xF0, 0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56,
-0x74, 0x08, 0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0,
-0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83,
-0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0,
-0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x75, 0x56, 0x00, 0x90, 0x01, 0xC4, 0x74, 0xDA, 0xF0,
-0x74, 0x61, 0xA3, 0xF0, 0x53, 0x91, 0xDF, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3,
-0xE0, 0x55, 0x31, 0xF5, 0x35, 0xA3, 0xE0, 0x55, 0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5,
-0x37, 0xE5, 0x34, 0x30, 0xE0, 0x1A, 0x90, 0x01, 0x3C, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x98, 0xE0,
-0x30, 0xE0, 0x0D, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0,
-0xE5, 0x34, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x44, 0x24, 0xE5, 0x34,
-0x30, 0xE2, 0x36, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE0, 0x21,
-0x75, 0x48, 0x00, 0x90, 0x93, 0x3C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01,
-0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x80,
-0x08, 0x90, 0x93, 0x4C, 0xE4, 0xF0, 0x12, 0x51, 0x9C, 0xE5, 0x34, 0x30, 0xE3, 0x36, 0x90, 0x01,
-0x3C, 0x74, 0x08, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93,
-0x3C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
-0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x49, 0xE4,
-0xF0, 0x12, 0x51, 0x9C, 0xE5, 0x34, 0x30, 0xE4, 0x06, 0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0xE5,
-0x34, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3C, 0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x18, 0x90,
-0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90, 0x00, 0x83, 0xE0, 0xF5, 0x64, 0x90, 0x01, 0xBB, 0xE5, 0x64,
-0xF0, 0x12, 0x50, 0xDC, 0x12, 0x51, 0x9C, 0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3D, 0x74,
-0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90, 0x93, 0x6D,
-0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0xFD, 0xE0,
-0x04, 0xF0, 0xE5, 0x36, 0x20, 0xE0, 0x02, 0x61, 0xAF, 0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0x90,
-0x93, 0x9E, 0xE0, 0x30, 0xE0, 0x13, 0xA3, 0xE0, 0x64, 0x03, 0x60, 0x0D, 0x7F, 0x01, 0x12, 0x5E,
-0x91, 0xEF, 0x60, 0x05, 0x7F, 0x01, 0x12, 0x55, 0x11, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x5F,
-0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x60, 0x3B, 0x91, 0x86, 0x90, 0x93, 0x99, 0xE0, 0xFF, 0x64,
-0x06, 0x60, 0x30, 0xEF, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x04,
-0xE4, 0xFF, 0x80, 0x14, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90,
-0x93, 0x99, 0xE0, 0xB4, 0x02, 0x04, 0x7F, 0x01, 0x91, 0xDA, 0x7D, 0x01, 0xAF, 0x64, 0x12, 0x48,
-0xF4, 0xF1, 0x4A, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x75, 0x48, 0x00, 0x75, 0x49, 0x03, 0xE4,
-0xFB, 0xFD, 0x7F, 0x50, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x53, 0x74, 0x05, 0xF0, 0xE5,
-0x36, 0x30, 0xE1, 0x3C, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x9E, 0xE0, 0x30, 0xE0,
-0x13, 0xA3, 0xE0, 0x64, 0x03, 0x60, 0x0D, 0x7F, 0x01, 0x12, 0x5E, 0x91, 0xEF, 0x70, 0x05, 0x7F,
-0x02, 0x12, 0x55, 0x11, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x15, 0x12, 0x89, 0xF6, 0x90, 0x93,
-0x99, 0xE0, 0x64, 0x06, 0x60, 0x0A, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x70, 0x02, 0x91, 0xA8,
-0xE5, 0x36, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xE5, 0x36, 0x30, 0xE4, 0x06,
-0x90, 0x01, 0x3E, 0x74, 0x10, 0xF0, 0xE5, 0x36, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x04,
-0xF0, 0xE5, 0x36, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x20, 0xF0, 0xE5, 0x36, 0x30, 0xE6,
-0x06, 0x90, 0x01, 0x3E, 0x74, 0x40, 0xF0, 0xE5, 0x36, 0x30, 0xE7, 0x06, 0x90, 0x01, 0x3E, 0x74,
-0x80, 0xF0, 0xE5, 0x37, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x43, 0x18, 0x80,
-0xE5, 0x37, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0x12, 0x46, 0xAC, 0x90, 0x93,
-0x4E, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x12, 0x5F, 0xBF,
-0x74, 0xDA, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0,
-0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0,
-0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x93, 0x98, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03,
-0x30, 0xE0, 0x0A, 0xA3, 0xE0, 0x64, 0x06, 0x60, 0x04, 0x7F, 0x06, 0x91, 0xDA, 0x90, 0x93, 0x99,
-0xE0, 0x64, 0x06, 0x60, 0x02, 0xF1, 0x29, 0x22, 0x90, 0x93, 0x39, 0xE0, 0x60, 0x16, 0x90, 0x93,
-0x99, 0xE0, 0x70, 0x04, 0x7F, 0x05, 0x80, 0x1F, 0x90, 0x93, 0x99, 0xE0, 0x64, 0x01, 0x70, 0x19,
-0x7F, 0x02, 0x80, 0x13, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x01, 0x04, 0x7F, 0x03, 0x80, 0x08, 0x90,
-0x93, 0x99, 0xE0, 0x70, 0x04, 0x7F, 0x04, 0x91, 0xDA, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
-0xD0, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0x6F, 0x70, 0x02, 0xC1, 0xAC, 0xEF, 0x12, 0x43, 0xD1, 0x65,
-0x08, 0x00, 0x65, 0x43, 0x01, 0x65, 0x8A, 0x02, 0x65, 0xC5, 0x03, 0x65, 0xFE, 0x04, 0x66, 0x37,
-0x05, 0x66, 0x73, 0x06, 0x00, 0x00, 0x66, 0xAC, 0xEE, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56,
-0x81, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xFF, 0xB4, 0x05, 0x04, 0xD1, 0xBB, 0xC1, 0xAC, 0xEF,
-0xB4, 0x06, 0x06, 0x7F, 0x01, 0xD1, 0xD0, 0x80, 0x16, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x06,
-0x7F, 0x01, 0xD1, 0xB1, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0xD1,
-0xF0, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56, 0x81, 0x80,
-0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1, 0xBB, 0x90, 0x93, 0x99, 0xE0, 0x70, 0x04,
-0xD1, 0xE6, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0x7F, 0x01, 0xD1, 0xD0,
-0xC1, 0xAC, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xD1, 0xB1, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0,
-0x64, 0x02, 0x60, 0x02, 0xC1, 0xAC, 0xD1, 0xC5, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04,
-0x07, 0x7F, 0x01, 0x12, 0x56, 0x81, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1,
-0xBB, 0x90, 0x93, 0x99, 0xE0, 0x70, 0x04, 0xD1, 0xE6, 0x80, 0x16, 0x90, 0x93, 0x99, 0xE0, 0xFE,
-0xB4, 0x06, 0x06, 0x7F, 0x01, 0xD1, 0xD0, 0x80, 0x08, 0xEE, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0xD1,
-0xB1, 0xF1, 0x1C, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56,
-0x81, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1, 0xBB, 0x90, 0x93, 0x99, 0xE0,
-0x70, 0x04, 0xD1, 0xE6, 0x80, 0x14, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF,
-0xD1, 0xD0, 0x80, 0x06, 0xEE, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0xF1, 0x05, 0xC1, 0xAC, 0x90, 0x93,
-0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xD1, 0xD0, 0x80, 0x13, 0xEE, 0xB4, 0x03, 0x06,
-0x7F, 0x01, 0xD1, 0xB1, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0x90,
-0x93, 0x99, 0xE0, 0xB4, 0x01, 0x04, 0xD1, 0xF0, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05,
-0x02, 0xD1, 0xBB, 0xD1, 0xFB, 0x80, 0x75, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4,
-0xFF, 0xD1, 0xD0, 0x80, 0x13, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xD1, 0xB1, 0x80, 0x09, 0x90,
-0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x01, 0x04, 0xD1,
-0xF0, 0x80, 0x0C, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x05, 0x7F, 0x01, 0x12, 0x56, 0x81, 0xF1,
-0x0F, 0x80, 0x39, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56, 0x81, 0x80,
-0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1, 0xBB, 0x90, 0x93, 0x99, 0xE0, 0x70, 0x04,
-0xD1, 0xE6, 0x80, 0x16, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x06, 0xE4, 0xFF, 0xD1, 0xB1, 0x80,
-0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0xF1, 0x36, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0x12, 0x51, 0x69, 0x90, 0x93, 0x99, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0,
-0x90, 0x93, 0x99, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x99, 0x04, 0xF0, 0x22,
-0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90,
-0x93, 0x99, 0x74, 0x01, 0xF0, 0x22, 0x12, 0x51, 0x05, 0x90, 0x93, 0x99, 0x74, 0x01, 0xF0, 0x22,
-0x7F, 0x01, 0x12, 0x50, 0x8A, 0xE4, 0x90, 0x93, 0x99, 0xF0, 0x22, 0x12, 0x54, 0x0E, 0x90, 0x93,
-0x99, 0x74, 0x04, 0xF0, 0x22, 0x12, 0x50, 0xB3, 0x90, 0x93, 0x99, 0x74, 0x03, 0xF0, 0x22, 0x90,
-0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x99, 0x74, 0x05, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74,
-0xFF, 0xF0, 0x90, 0x93, 0x99, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x93, 0x9D, 0xE0, 0xB4, 0x01, 0x05,
-0xE4, 0xF0, 0x12, 0x4E, 0xD6, 0x22, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, 0x90, 0x05, 0x22,
-0x74, 0x6F, 0xF0, 0x90, 0x93, 0x99, 0x74, 0x06, 0xF0, 0x22, 0x90, 0x93, 0x99, 0xE0, 0x64, 0x06,
-0x60, 0x3C, 0xE5, 0x63, 0x54, 0x0F, 0x14, 0x60, 0x2E, 0x14, 0x60, 0x1E, 0x24, 0xFE, 0x60, 0x0E,
-0x24, 0xF8, 0x70, 0x2A, 0xE4, 0x90, 0x93, 0x99, 0xF0, 0x90, 0x05, 0x22, 0xF0, 0x22, 0x90, 0x93,
-0x99, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x99, 0x74, 0x03, 0xF0,
-0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0xD3,
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x93, 0x0F, 0xF0,
-0x90, 0x93, 0x0F, 0xE0, 0xFD, 0x70, 0x03, 0x02, 0x68, 0xDA, 0x90, 0x93, 0xE9, 0xE0, 0xFF, 0x74,
-0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF,
-0xEF, 0x5D, 0x70, 0x03, 0x02, 0x68, 0xD3, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01,
-0xD0, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x10, 0xF0, 0x75, 0x24, 0x01, 0x75, 0x25, 0x93, 0x75,
-0x26, 0x10, 0x75, 0x27, 0x01, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x11, 0x12, 0x57, 0xF9, 0x90, 0x93,
-0x11, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0xE9, 0x30, 0xE0, 0x59, 0xE0,
-0x75, 0xF0, 0x02, 0x90, 0x00, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x12, 0xF0, 0x90, 0x93,
-0xE9, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x13, 0xF0,
-0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
-0x14, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x9C, 0xE0,
-0x90, 0x93, 0x15, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43,
-0x9C, 0xE0, 0x90, 0x93, 0x16, 0xF0, 0x80, 0x33, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12,
-0x43, 0x9C, 0xE0, 0x90, 0x93, 0x12, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01,
-0xD2, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x13, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04,
-0x90, 0x01, 0xD3, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x14, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B,
-0x01, 0x7A, 0x93, 0x79, 0x12, 0x11, 0xDF, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x90, 0x93, 0xE9, 0xE0,
-0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x93,
-0x0F, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33,
-0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0,
-0x02, 0x67, 0xA0, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
-0x93, 0x17, 0x12, 0x43, 0xC8, 0xEF, 0x12, 0x43, 0xD1, 0x69, 0x2E, 0x01, 0x69, 0x26, 0x02, 0x69,
-0x73, 0x03, 0x69, 0x7C, 0x05, 0x69, 0x85, 0x06, 0x69, 0xC8, 0x07, 0x69, 0x8D, 0x08, 0x69, 0x96,
-0x0B, 0x69, 0x9F, 0x1B, 0x69, 0xA7, 0x1C, 0x69, 0x37, 0x2D, 0x69, 0x40, 0x2E, 0x69, 0xAF, 0x30,
-0x69, 0x52, 0x34, 0x69, 0x49, 0x3B, 0x69, 0x5A, 0x47, 0x69, 0x6B, 0x48, 0x69, 0x63, 0x49, 0x69,
-0xB8, 0x4B, 0x00, 0x00, 0x69, 0xC1, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xB9, 0x90, 0x93,
-0x17, 0x12, 0x43, 0xA8, 0x02, 0x82, 0xC7, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x83, 0xA8,
-0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x83, 0xF0, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02,
-0x84, 0x29, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xBF, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8,
-0x02, 0x84, 0x54, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xD5, 0x90, 0x93, 0x17, 0x12, 0x43,
-0xA8, 0xE1, 0xCD, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x85, 0x14, 0x90, 0x93, 0x17, 0x12,
-0x43, 0xA8, 0x02, 0x80, 0x54, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x80, 0x3C, 0x90, 0x93, 0x17,
-0x12, 0x43, 0xA8, 0x02, 0x85, 0x5C, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x80, 0x80, 0x90,
-0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xC5, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xA1, 0x90,
-0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0xAB, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x88,
-0x5A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF,
-0x54, 0x1F, 0xFE, 0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06, 0x90, 0x93, 0x1A,
-0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x1C, 0x12, 0x43, 0xA8, 0x90,
-0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x00,
-0x04, 0x12, 0x1F, 0x0F, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x93, 0x20, 0xF0, 0x90,
-0x93, 0x1A, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAD, 0x82, 0xAC,
-0x83, 0x90, 0x93, 0x21, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84,
-0xF9, 0x74, 0x8A, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x1C, 0x12,
-0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x23, 0x12, 0x43,
-0xA8, 0xEF, 0x12, 0x42, 0x53, 0x90, 0x93, 0x1C, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F,
-0x0F, 0xFF, 0x90, 0x93, 0x23, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x65, 0x90,
-0x93, 0x1C, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x21, 0xE0,
-0xFC, 0xA3, 0xE0, 0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0x8D, 0x82, 0x8C,
-0x83, 0xA3, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0xFF, 0x24, 0xC2, 0xF5,
-0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x1B, 0xE0, 0xFE, 0x75, 0xF0, 0x09,
-0xEF, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8B,
-0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x20, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90,
-0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x8F, 0x57, 0xEF, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82,
-0xE4, 0x34, 0x90, 0xAF, 0x82, 0xF5, 0x58, 0x8F, 0x59, 0xE5, 0x57, 0x75, 0xF0, 0x02, 0xA4, 0x24,
-0x02, 0xF9, 0x74, 0x89, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C, 0x75, 0xF0, 0x09,
-0xE5, 0x57, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAF, 0x82, 0x85, 0x83, 0x5D, 0x8F, 0x5E, 0xE5,
-0x57, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35, 0xF0, 0x75, 0x5F, 0x01, 0xF5,
-0x60, 0x89, 0x61, 0x74, 0xC2, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x12,
-0x43, 0xD1, 0x6B, 0x57, 0x00, 0x6B, 0x6C, 0x01, 0x6B, 0x81, 0x02, 0x6B, 0x96, 0x03, 0x6B, 0xBF,
-0x04, 0x6B, 0xD4, 0x05, 0x6B, 0xE9, 0x06, 0x6C, 0x0F, 0x0C, 0x6C, 0x3C, 0x0D, 0x6C, 0x69, 0x0E,
-0x6C, 0x96, 0x0F, 0x00, 0x00, 0x6C, 0xCA, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
-0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80, 0x3C, 0xE5, 0x57, 0x25, 0xE0,
-0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x10, 0x80,
-0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0,
-0xF0, 0xA3, 0x74, 0x05, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34,
-0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5,
-0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0x8F, 0xF0, 0x81, 0xCA, 0xE5,
-0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3,
-0x74, 0xF5, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
-0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5,
-0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0xE5, 0x57, 0x25, 0xE0,
-0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x81, 0xCA, 0x90,
-0x04, 0x47, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x46, 0xE0,
-0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x45, 0xE0,
-0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x44, 0x81, 0xC1, 0x90, 0x04, 0x4B, 0xE0,
-0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4A, 0xE0, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x49, 0xE0, 0x85, 0x59, 0x82,
-0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04, 0x4F, 0xE0, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4E, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
-0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x4D, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83,
-0xF0, 0x90, 0x04, 0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
-0x12, 0x42, 0x53, 0x90, 0x04, 0x52, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01,
-0x12, 0x42, 0x65, 0x90, 0x04, 0x51, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04,
-0x50, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
-0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61,
-0x12, 0x1E, 0xF6, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0xAB, 0x5A, 0xE5,
-0x5C, 0x24, 0x01, 0xF9, 0xE4, 0x35, 0x5B, 0xFA, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E,
-0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x5F, 0xD0,
-0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xC0, 0x83,
-0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82,
-0xD0, 0x83, 0xF0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF,
-0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0,
-0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3,
-0xE0, 0x4E, 0x60, 0x4B, 0x90, 0x93, 0x26, 0x74, 0x0B, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3,
-0x94, 0x00, 0x50, 0x02, 0xC1, 0x0F, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3,
-0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
-0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x0A, 0x90, 0x93, 0x26,
-0xE0, 0x24, 0x10, 0xA3, 0xF0, 0x80, 0x68, 0x90, 0x93, 0x26, 0xE0, 0x14, 0xF0, 0x80, 0xBB, 0xE5,
-0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
-0x4E, 0x60, 0x47, 0x90, 0x93, 0x26, 0x74, 0x0F, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3, 0x94,
-0x00, 0x40, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
-0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
-0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x93, 0x26, 0xE0, 0xA3, 0xF0,
-0x80, 0x0D, 0x90, 0x93, 0x26, 0xE0, 0x14, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0xE5,
-0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
-0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x26, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3, 0x94, 0x10,
-0x40, 0x02, 0xC1, 0xC8, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
-0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
-0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x06, 0x90, 0x93, 0x26, 0xE0, 0x80,
-0x63, 0x90, 0x93, 0x26, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5,
-0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93,
-0x26, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3, 0x94, 0x0C, 0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00,
-0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25,
-0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F,
-0x4E, 0x60, 0x08, 0x90, 0x93, 0x26, 0xE0, 0x24, 0x10, 0x80, 0x09, 0x90, 0x93, 0x26, 0xE0, 0x04,
-0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x28, 0xF0, 0x90, 0x93, 0x27, 0xE0, 0xFF, 0x75, 0xF0, 0x09,
-0xE5, 0x57, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xEF, 0xF0, 0x90, 0x93, 0x28, 0xE0, 0xFE, 0x75,
-0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0xE5, 0x57, 0xC3, 0x94,
-0x20, 0x50, 0x2C, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3,
-0x9F, 0x40, 0x02, 0x80, 0x47, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83,
-0xE0, 0xC3, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x28, 0xE0, 0xA3, 0xF0, 0x80, 0x37, 0x80, 0x2D, 0x74,
-0x27, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x27, 0xE0,
-0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x07, 0x90, 0x93, 0x29, 0xEE, 0xF0, 0x80, 0x17, 0x90, 0x93, 0x28,
-0xE0, 0xFE, 0xEF, 0xC3, 0x9E, 0x50, 0x05, 0xA3, 0xEE, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x27, 0xE0,
-0x90, 0x93, 0x29, 0xF0, 0x90, 0x93, 0x29, 0xE0, 0xFD, 0xAF, 0x57, 0x12, 0x70, 0x63, 0x90, 0x93,
-0x29, 0xE0, 0xFF, 0x74, 0xA7, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xEF, 0xF0,
-0x90, 0x93, 0x27, 0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x03, 0xF0,
-0x22, 0xEF, 0xD3, 0x94, 0x0B, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x02, 0xF0, 0x22, 0xEF, 0xD3,
-0x94, 0x03, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x8A, 0x83, 0xF0,
-0x22, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x3F, 0xFE, 0xEF, 0x54, 0x80, 0xC4, 0x13,
-0x13, 0x13, 0x54, 0x01, 0xFD, 0xAF, 0x06, 0x21, 0xDD, 0x12, 0x1E, 0xF6, 0xF5, 0x62, 0x22, 0x90,
-0x93, 0x1A, 0x02, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0x90, 0x89, 0x01, 0xF0, 0x22, 0x12, 0x1E, 0xF6,
-0x90, 0x93, 0x6F, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x60, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE,
-0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xCE,
-0x12, 0x43, 0xC8, 0x90, 0x93, 0xD1, 0xE0, 0x54, 0xF0, 0x44, 0x06, 0xFF, 0xF0, 0xED, 0x54, 0x0F,
-0xC4, 0x54, 0xF0, 0xFE, 0xEF, 0x54, 0x0F, 0x4E, 0xF0, 0x90, 0x93, 0xCE, 0x12, 0x43, 0xA8, 0x90,
-0x93, 0xCB, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xD1, 0x12, 0x5E, 0xBE, 0xD0, 0xD0,
-0x92, 0xAF, 0x22, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x39, 0xEF, 0x30, 0xE0, 0x17, 0xED, 0xC4, 0x54,
-0xF0, 0xFD, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
-0x54, 0x0F, 0x80, 0x10, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5,
-0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
-0x4D, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x0E,
-0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED, 0xF0, 0x80, 0x2A, 0x74, 0x27,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xED, 0xF0, 0x90, 0x93, 0x8B, 0xEF, 0xF0, 0x24,
-0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x8C, 0xF0, 0x7B, 0x01, 0x7A,
-0x93, 0x79, 0x8B, 0x7D, 0x02, 0x12, 0x6F, 0xE6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F, 0x52, 0x8D,
-0x53, 0xE5, 0x53, 0x54, 0x1F, 0x90, 0x93, 0x03, 0xF0, 0x74, 0x01, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
-0x88, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x01, 0xF0, 0x90, 0x93, 0x04, 0x74, 0x01, 0xF0, 0xEB, 0xC3,
-0x94, 0x01, 0x40, 0x02, 0x80, 0x3B, 0x90, 0x93, 0x01, 0xE0, 0x25, 0x55, 0xFF, 0xA3, 0xF0, 0xA3,
-0xE0, 0x90, 0x41, 0x9E, 0x93, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x13, 0x74, 0x01, 0x25, 0x52, 0xF5,
-0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAD, 0x53, 0xAF, 0x52, 0x01, 0x63, 0x90, 0x93,
-0x02, 0xE0, 0xFF, 0x74, 0x01, 0x25, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEF, 0xF0,
-0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
-0x06, 0xF0, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x54, 0x1F, 0x90,
-0x93, 0x05, 0xF0, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0,
-0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x5D,
-0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x85, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89,
-0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x85, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x25,
-0xE0, 0x25, 0xE0, 0xFF, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEF, 0xF0,
-0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0xC8, 0x40, 0x0D,
-0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0x74, 0xC8, 0xF0, 0x90, 0x93, 0x06,
-0xE0, 0xFF, 0x90, 0x93, 0x05, 0xE0, 0xD3, 0x9F, 0x40, 0x02, 0xEF, 0xF0, 0x90, 0x93, 0x05, 0xE0,
-0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74,
-0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74,
-0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0,
-0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x05,
-0x90, 0x93, 0x05, 0xE0, 0xFD, 0x11, 0x63, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60,
-0x12, 0x90, 0x04, 0x30, 0xE0, 0x70, 0x0C, 0x04, 0xF0, 0xA3, 0xF0, 0xA3, 0x04, 0xF0, 0x90, 0x04,
-0xCF, 0x04, 0xF0, 0x90, 0x93, 0x05, 0xE0, 0xFF, 0x22, 0xAC, 0x07, 0xEC, 0xC3, 0x94, 0x20, 0x50,
-0x13, 0x74, 0x84, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93,
-0x1F, 0xF0, 0x80, 0x11, 0x74, 0x27, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54,
-0x7F, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x93, 0x22, 0xF0,
-0x75, 0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x24, 0xF0, 0x75,
-0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0x90, 0x93, 0x25, 0xF0, 0xEC,
-0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90,
-0x93, 0x26, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34,
-0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x28, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x74,
-0xC6, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C,
-0x90, 0x93, 0x25, 0xE0, 0x90, 0x93, 0x22, 0xF0, 0x90, 0x93, 0x1F, 0xF0, 0xED, 0x70, 0x02, 0x61,
-0xA3, 0x90, 0x93, 0x23, 0xED, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x93, 0x22,
-0xE0, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x93, 0x23, 0xE0, 0x14, 0xF0, 0x90, 0x93, 0x23, 0xE0, 0x70,
-0x02, 0x61, 0xA3, 0x90, 0x93, 0x22, 0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02, 0x61, 0xA3, 0xE4,
-0x90, 0x93, 0x21, 0xF0, 0xEF, 0x14, 0x90, 0x93, 0x20, 0xF0, 0x90, 0x93, 0x24, 0xE0, 0xFD, 0x90,
-0x93, 0x20, 0xE0, 0xFF, 0xD3, 0x9D, 0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0,
-0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
-0xF9, 0xFF, 0x90, 0x93, 0x28, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93,
-0x20, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
-0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x26, 0xE0, 0x5E, 0xFE, 0xA3,
-0xE0, 0x5F, 0x4E, 0x60, 0x1A, 0x90, 0x93, 0x20, 0xE0, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x93, 0x21,
-0xE0, 0x04, 0xF0, 0x90, 0x93, 0x23, 0xE0, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0x6F, 0x60, 0x08, 0x90,
-0x93, 0x20, 0xE0, 0x14, 0xF0, 0x80, 0x83, 0x90, 0x93, 0x23, 0xE0, 0xFF, 0x90, 0x93, 0x21, 0xE0,
-0xC3, 0x9F, 0x50, 0x0F, 0x90, 0x93, 0x20, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x93, 0x24, 0xE0, 0x90,
-0x93, 0x1F, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34,
-0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
-0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
-0xFE, 0xEF, 0x13, 0xFF, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83,
-0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x90, 0x93, 0x1F, 0xE0, 0xFD, 0x11, 0x63, 0x90, 0x93,
-0x1F, 0xE0, 0xFF, 0x22, 0xAD, 0x07, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x1F, 0xF0, 0x80, 0x11, 0x74,
-0x27, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x1F, 0xF0,
-0x90, 0x93, 0x1F, 0xE0, 0xF9, 0x54, 0x1F, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88,
-0x12, 0x43, 0x9C, 0xE0, 0xFF, 0x90, 0x93, 0x22, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82,
-0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x23, 0xCB, 0xF0, 0xA3, 0xEB,
-0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3,
-0xE0, 0x90, 0x93, 0x25, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x93, 0x20, 0xE0, 0xFE, 0x25, 0xE0,
-0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB,
-0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB,
-0xF0, 0xEE, 0xC3, 0x9F, 0x40, 0x02, 0xA1, 0x51, 0x90, 0x93, 0x20, 0xE0, 0xFF, 0x74, 0x28, 0x2D,
-0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0xEF, 0x04, 0x90, 0x93, 0x21, 0xF0, 0x90,
-0x93, 0x22, 0xE0, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0xFE, 0xD3, 0x9F, 0x40, 0x02, 0xA1, 0x8B, 0xEE,
-0xC3, 0x94, 0x10, 0x40, 0x21, 0xEE, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
-0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x23, 0xE0, 0x5E, 0xFE,
-0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93, 0x21, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59,
-0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
-0xFF, 0x90, 0x93, 0x25, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x93, 0x21,
-0xE0, 0xB4, 0x11, 0x0D, 0x90, 0x93, 0x24, 0xE0, 0x30, 0xE7, 0x06, 0x90, 0x93, 0x21, 0x74, 0x17,
-0xF0, 0x90, 0x93, 0x21, 0xE0, 0xFF, 0x64, 0x13, 0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x93,
-0x23, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x93, 0x21, 0x74, 0x18, 0xF0, 0x90, 0x93, 0x21, 0xE0, 0x90,
-0x93, 0x20, 0xF0, 0x90, 0x93, 0x1F, 0xF0, 0x80, 0x42, 0x90, 0x93, 0x21, 0xE0, 0x04, 0xF0, 0x81,
-0xAF, 0x90, 0x93, 0x22, 0xE0, 0xFC, 0x90, 0x93, 0x20, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0x28,
-0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A,
-0x8A, 0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01, 0x10, 0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x93, 0x20, 0xE0,
-0x44, 0x40, 0x90, 0x93, 0x1F, 0xF0, 0x80, 0x03, 0xAF, 0x01, 0x22, 0x90, 0x93, 0x20, 0xE0, 0xFF,
-0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01,
-0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01,
-0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24,
-0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90,
-0x93, 0x20, 0xE0, 0xD3, 0x9C, 0x40, 0x5E, 0x90, 0x93, 0x22, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x20, 0xEF, 0xF0, 0x90, 0x93, 0x1F,
-0xF0, 0xFC, 0xA3, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83,
-0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
-0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13,
-0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3,
-0xEF, 0xF0, 0xAF, 0x04, 0x22, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4,
-0xF0, 0xAF, 0x05, 0x90, 0x93, 0x1F, 0xE0, 0x44, 0x80, 0xFD, 0x11, 0x63, 0x90, 0x93, 0x1F, 0xE0,
-0x44, 0x80, 0xFF, 0x22, 0xE4, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xC3, 0x94,
-0x40, 0x40, 0x03, 0x02, 0x7E, 0x57, 0xEF, 0xB4, 0x20, 0x14, 0x90, 0x8F, 0x46, 0xE0, 0x04, 0xF0,
-0x90, 0x89, 0x01, 0xE0, 0xFF, 0x90, 0x8F, 0x46, 0xE0, 0xB5, 0x07, 0x02, 0xE4, 0xF0, 0x90, 0x93,
-0x0F, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0xE0, 0x64, 0x01, 0x60,
-0x03, 0x02, 0x7E, 0x4E, 0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83,
-0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEE, 0x94, 0x00, 0x50, 0x03, 0x02, 0x7E, 0x4E, 0x90,
-0x93, 0x0F, 0xE0, 0x94, 0x20, 0x40, 0x09, 0x90, 0x8F, 0x46, 0xE0, 0x60, 0x03, 0x02, 0x7E, 0x57,
-0x90, 0x93, 0x0F, 0xE0, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75,
-0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34,
-0x87, 0xF5, 0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x93, 0x14, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF,
-0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
-0x93, 0x16, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x50,
-0x13, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93,
-0x10, 0xF0, 0x80, 0x14, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
-0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93, 0x10, 0xF0, 0x90, 0x93, 0x10, 0xE0, 0xFE, 0x54, 0x1F, 0xA3,
-0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0,
-0x90, 0x93, 0x19, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3,
-0x94, 0x05, 0x40, 0x03, 0x02, 0x79, 0xEC, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x90, 0x93, 0x11, 0xE0,
-0x9F, 0x40, 0x13, 0x90, 0x93, 0x19, 0xE0, 0x90, 0x93, 0x11, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0x90,
-0x93, 0x10, 0xF0, 0xEF, 0x4E, 0xF0, 0x90, 0x93, 0x11, 0xE0, 0xFF, 0x90, 0x41, 0x12, 0x93, 0xFE,
-0x90, 0x93, 0x0F, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xC3, 0x9E,
-0x40, 0x06, 0xEF, 0x90, 0x40, 0xDA, 0x80, 0x07, 0x90, 0x93, 0x11, 0xE0, 0x90, 0x40, 0xF6, 0x93,
-0x90, 0x93, 0x18, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x50, 0xF9, 0x74,
-0x40, 0x35, 0xF0, 0xFA, 0x7B, 0xFF, 0x8B, 0x57, 0xF5, 0x58, 0x89, 0x59, 0x90, 0x93, 0x0F, 0xE0,
-0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
-0x93, 0x12, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x9D, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE,
-0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x01, 0x12, 0x1F,
-0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0x12, 0x42, 0xC8,
-0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB,
-0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A,
-0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x04, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C,
-0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90,
-0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00,
-0x06, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0,
-0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF,
-0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x08, 0x12, 0x42, 0xC8, 0xFD, 0xAC,
-0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA,
-0x58, 0xA9, 0x59, 0x90, 0x00, 0x05, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x14, 0xE0,
-0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0xD3, 0x90, 0x93, 0x13, 0xE0, 0x9F, 0x90, 0x93, 0x12,
-0xE0, 0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F, 0xF0, 0x90, 0x93, 0x12, 0xE0, 0x9E, 0xF0, 0x80, 0x07,
-0xE4, 0x90, 0x93, 0x12, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x12, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90,
-0x93, 0x0F, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0,
-0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x10, 0xE0, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41,
-0xF5, 0x83, 0xE4, 0x93, 0xFC, 0x74, 0x01, 0x93, 0xFD, 0xD3, 0xEF, 0x9D, 0xEE, 0x9C, 0x50, 0x02,
-0x21, 0xBB, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0x82, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
-0xE0, 0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9E,
-0x40, 0x03, 0xEF, 0x80, 0x1C, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34,
-0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x82, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0,
-0xC3, 0x9E, 0x90, 0x93, 0x1A, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x02, 0x80,
-0x23, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0,
-0xD3, 0x94, 0x01, 0x40, 0x0F, 0x74, 0xC6, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0,
-0x14, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5,
-0x83, 0xE4, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5,
-0x83, 0xE0, 0x60, 0x02, 0x81, 0xFC, 0x12, 0x73, 0xF4, 0x81, 0xFC, 0x90, 0x93, 0x10, 0xE0, 0x25,
-0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93,
-0xFF, 0xC3, 0x90, 0x93, 0x13, 0xE0, 0x9F, 0x90, 0x93, 0x12, 0xE0, 0x9E, 0x40, 0x02, 0x81, 0xFC,
-0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x72, 0x29, 0x81, 0xFC, 0x90, 0x93, 0x0F, 0xE0,
-0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x02,
-0x61, 0xCA, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x03, 0x0B, 0x90, 0x93, 0x11, 0xE0, 0xC3, 0x94,
-0x19, 0x40, 0x3D, 0x80, 0x2E, 0xEE, 0xB4, 0x02, 0x0B, 0x90, 0x93, 0x11, 0xE0, 0xC3, 0x94, 0x11,
-0x40, 0x2E, 0x80, 0x1F, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x93, 0x11, 0xE0,
-0xC3, 0x94, 0x0A, 0x40, 0x1B, 0x80, 0x0C, 0xEE, 0x70, 0x11, 0x90, 0x93, 0x11, 0xE0, 0xC3, 0x94,
-0x03, 0x40, 0x0D, 0x90, 0x8E, 0xC5, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x8E, 0xC5, 0xF0,
-0x90, 0x93, 0x0F, 0xE0, 0xFE, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90,
-0x93, 0x1E, 0xF0, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0xC3,
-0x94, 0x30, 0x50, 0x0A, 0xE4, 0x90, 0x93, 0x1E, 0xF0, 0x74, 0x67, 0x2F, 0x61, 0x75, 0x90, 0x8E,
-0xC5, 0xE0, 0x64, 0x01, 0x60, 0x02, 0x61, 0x6A, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0x06, 0xF5, 0x82,
-0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x64, 0x0A, 0x60, 0x5B, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xEE,
-0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
-0xE0, 0xFF, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x38, 0x90, 0x93, 0x0F,
-0xE0, 0xFE, 0xEF, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
-0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x16, 0x90,
-0x93, 0x0F, 0xE0, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93,
-0x11, 0xE0, 0x6F, 0x60, 0x56, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E,
-0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x42, 0x40, 0x08, 0x90, 0x93, 0x1E, 0x74, 0x05, 0xF0, 0x80,
-0x11, 0xEF, 0xD3, 0x94, 0x39, 0x90, 0x93, 0x1E, 0x40, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74,
-0x01, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
-0xE0, 0xFE, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93,
-0x0F, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0x80, 0x2F, 0x90, 0x93, 0x0F, 0xE0, 0xFF,
-0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82,
-0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x14, 0xE4, 0x90, 0x93, 0x1E, 0xF0, 0x90,
-0x93, 0x0F, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93,
-0x11, 0xE0, 0xFE, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
-0x83, 0xEE, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFE, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C,
-0xF5, 0x83, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xE0, 0xB4,
-0x01, 0x11, 0xE4, 0x90, 0x93, 0x1E, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
-0x83, 0xE4, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFD, 0x81, 0xF9, 0xEC, 0x64, 0x06, 0x60, 0x02, 0x81,
-0xFC, 0x90, 0x93, 0x12, 0xF0, 0xA3, 0xF0, 0x90, 0x41, 0xDB, 0x93, 0xFF, 0x7E, 0x00, 0x90, 0x93,
-0x14, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x1C, 0xEE, 0xF0, 0xA3, 0xEF,
-0xF0, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90,
-0x93, 0x1E, 0xF0, 0xE4, 0x90, 0x93, 0x1B, 0xF0, 0x90, 0x93, 0x1B, 0xE0, 0xFF, 0xD3, 0x94, 0x04,
-0x50, 0x47, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x75, 0xF0, 0x02, 0xEF, 0xA4, 0xF5, 0x82, 0x85,
-0xF0, 0x83, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0xEF, 0x90, 0x41, 0xD6, 0x93, 0xFF, 0x7E, 0x00,
-0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0x1C, 0xE0,
-0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x93, 0x13, 0xE0, 0x9F, 0x90, 0x93, 0x12, 0xE0, 0x9E, 0x50,
-0x08, 0x90, 0x93, 0x1B, 0xE0, 0x04, 0xF0, 0x80, 0xAF, 0x90, 0x93, 0x1B, 0xE0, 0xC3, 0x13, 0xF0,
-0x90, 0x93, 0x1E, 0xE0, 0xFF, 0xB4, 0x01, 0x0D, 0x90, 0x93, 0x1B, 0xE0, 0x70, 0x5D, 0x90, 0x93,
-0x1E, 0x04, 0xF0, 0x80, 0x5B, 0xEF, 0xB4, 0x03, 0x1D, 0x90, 0x93, 0x1B, 0xE0, 0xFF, 0x70, 0x08,
-0x90, 0x93, 0x1E, 0x74, 0x03, 0xF0, 0x80, 0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x1E, 0x74,
-0x01, 0xF0, 0x80, 0x3C, 0x80, 0x35, 0x90, 0x93, 0x1E, 0xE0, 0x64, 0x05, 0x70, 0x32, 0x90, 0x93,
-0x1B, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93, 0x1E, 0x74, 0x05, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x93,
-0x1E, 0xB4, 0x01, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3, 0x90, 0x93, 0x17,
-0xE0, 0x94, 0x03, 0x90, 0x93, 0x16, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x1E, 0xF0,
-0xD3, 0x90, 0x93, 0x17, 0xE0, 0x94, 0x03, 0x90, 0x93, 0x16, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4,
-0x90, 0x93, 0x1E, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFD, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xC4,
-0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xED, 0xF0, 0x12, 0x70, 0x23, 0x90, 0x93, 0x0F, 0xE0,
-0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x05, 0x50, 0x0F,
-0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x0F, 0x90,
-0x93, 0x0F, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93,
-0x16, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x74, 0xFF, 0x9F, 0xFF, 0x74, 0xFF, 0x9E, 0xFE, 0x90,
-0x93, 0x0F, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
-0xFA, 0xA3, 0xE0, 0xD3, 0x9F, 0xEA, 0x9E, 0x50, 0x1C, 0x90, 0x93, 0x16, 0xE0, 0xFE, 0xA3, 0xE0,
-0xFF, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEE, 0x8F, 0xF0,
-0x12, 0x42, 0x87, 0x80, 0x14, 0x90, 0x93, 0x0F, 0xE0, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x25, 0xE0,
-0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0x74,
-0xFF, 0x9D, 0xFB, 0x74, 0xFF, 0x9C, 0xFA, 0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34,
-0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x9B, 0xEE, 0x9A, 0x90, 0x93, 0x0F, 0xE0, 0x50,
-0x13, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEC, 0x8D, 0xF0, 0x12,
-0x42, 0x87, 0x80, 0x10, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74,
-0xFF, 0xF0, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x00,
-0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90,
-0x00, 0x04, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43,
-0x1F, 0x90, 0x00, 0x08, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x25,
-0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x93,
-0x0F, 0xE0, 0x04, 0xF0, 0x02, 0x76, 0x59, 0x22, 0x90, 0x04, 0x44, 0x74, 0x11, 0xF0, 0xA3, 0x74,
-0xF0, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x93, 0x0F,
-0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x14, 0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5,
-0x83, 0xE4, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8F, 0x46, 0xF0,
-0x90, 0x89, 0x01, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xC3,
-0x94, 0x40, 0x40, 0x03, 0x02, 0x80, 0x53, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x00, 0x12, 0x43,
-0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12, 0x43, 0x9C, 0xE4,
-0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x04, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3,
-0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x06, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75,
-0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x08, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0xA7, 0x2F,
-0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83,
-0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0,
-0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0,
-0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0,
-0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0,
-0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0,
-0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0,
-0xA3, 0xF0, 0x74, 0x07, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC7,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8E, 0x04, 0xF0, 0x90, 0x41, 0x8C, 0x93, 0xFE, 0x74,
-0x01, 0x93, 0xFF, 0x90, 0x41, 0x54, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13,
-0xFE, 0xEF, 0x13, 0xFF, 0x90, 0x93, 0x0F, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
-0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8B,
-0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C,
-0x74, 0x01, 0xF0, 0x74, 0xC2, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0C, 0xF0,
-0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x75,
-0xF0, 0x09, 0xED, 0x90, 0x8A, 0x84, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0x75,
-0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09, 0xED,
-0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x0F, 0x74, 0x84,
-0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x80, 0x0D, 0x74, 0x27, 0x2D,
-0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0x04, 0xF0,
-0x02, 0x7E, 0x9A, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0xC3, 0x94, 0x40, 0x50, 0x14, 0x90, 0x00, 0x02,
-0x12, 0x1F, 0x0F, 0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEE, 0xF0,
-0x22, 0xEF, 0xB4, 0x40, 0x0A, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x8A, 0x82, 0xF0, 0x22,
-0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFC, 0xED, 0xC3,
-0x94, 0x40, 0x40, 0x02, 0xE4, 0xFD, 0xEC, 0xC3, 0x94, 0x40, 0x40, 0x02, 0xE4, 0xFC, 0xED, 0x25,
-0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93,
-0x1A, 0xF0, 0xEE, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5,
-0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x1C, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xED, 0xF0, 0xA3,
-0x74, 0xFF, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
-0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x20, 0xF0, 0xEE, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5,
-0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x22, 0xF0, 0xEE, 0xA3,
-0xF0, 0xA3, 0xEC, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x1A, 0x02, 0x5F,
-0x97, 0x7F, 0xAF, 0x7E, 0x01, 0x90, 0x93, 0xDB, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0,
-0xA3, 0xF0, 0x90, 0x93, 0xDB, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C,
-0xC3, 0x90, 0x93, 0xDE, 0xE0, 0x94, 0xE8, 0x90, 0x93, 0xDD, 0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90,
-0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x93, 0xDD, 0xE4, 0x75, 0xF0, 0x01,
-0x12, 0x42, 0x87, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x80, 0xC6, 0x7F, 0x01, 0x22, 0xD3,
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xC2, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x68, 0xE0,
-0xFF, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x65, 0x31, 0x51, 0xEF, 0x70, 0x02, 0x41,
-0x5C, 0x90, 0x93, 0xC2, 0x12, 0x43, 0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x75, 0x27, 0x02,
-0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0x12, 0x57, 0xF9, 0x90, 0x93, 0xC5, 0x12, 0x43, 0xA8, 0x8B,
-0x24, 0x8A, 0x25, 0x89, 0x26, 0x90, 0x93, 0xC2, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4,
-0x54, 0x0F, 0xF5, 0x27, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2, 0x12, 0x57, 0xF9, 0x90, 0x01, 0xAF,
-0x74, 0xFF, 0xF0, 0x90, 0x93, 0x70, 0xE0, 0x64, 0x01, 0x70, 0x4A, 0x90, 0x93, 0xC2, 0x12, 0x43,
-0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x75, 0x27, 0x02, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x20,
-0x12, 0x57, 0xF9, 0x90, 0x93, 0xC5, 0x12, 0x43, 0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x90,
-0x93, 0xC2, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x27, 0x7B, 0x01,
-0x7A, 0xFD, 0x79, 0x22, 0x12, 0x57, 0xF9, 0x90, 0x93, 0x54, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82,
-0x8E, 0x83, 0x74, 0xFF, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0x69, 0xE0, 0x75, 0xF0, 0x0F, 0xA4,
-0x24, 0x6B, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x02, 0xC0, 0x01, 0xE0, 0x75,
-0xF0, 0x0F, 0xA4, 0x24, 0x6D, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x90, 0x93, 0xC5, 0x12, 0x43,
-0xC8, 0xD0, 0x01, 0xD0, 0x02, 0x31, 0x9F, 0x90, 0x92, 0x69, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A,
-0x02, 0xE4, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92, 0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D,
-0x02, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x92, 0x69, 0xF0,
-0xA3, 0xF0, 0x90, 0x01, 0xAF, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93,
-0x1A, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x1D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93,
-0x1A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x50, 0xF0, 0x90, 0x00,
-0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x33, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54,
-0x01, 0x90, 0x93, 0x34, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x01, 0x90, 0x93, 0x3E, 0xF0, 0x90, 0x00,
-0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x3B, 0xF0, 0xEF, 0x13, 0x13,
-0x13, 0x54, 0x01, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x54,
-0x01, 0x90, 0x93, 0x3D, 0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x01, 0x90, 0x93, 0x52, 0xF0, 0x90, 0x00,
-0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x40, 0xF0, 0xE0, 0x70,
-0x38, 0x90, 0x93, 0x3E, 0xE0, 0x70, 0x10, 0xFF, 0x12, 0x50, 0x56, 0x90, 0x93, 0x1D, 0x12, 0x1F,
-0xD5, 0x00, 0x00, 0x03, 0x10, 0x80, 0x0F, 0x7F, 0x01, 0x12, 0x50, 0x56, 0x90, 0x93, 0x1D, 0x12,
-0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x90, 0x93, 0x1D, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12,
-0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x34, 0xE0, 0x70, 0x03, 0x12,
-0x4F, 0x63, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x4C, 0xDF, 0x90, 0x93, 0x50, 0xE0, 0x90,
-0x01, 0xE6, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x30,
-0xE0, 0x25, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x3F, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
-0x93, 0x42, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x3C, 0xF0, 0x90, 0x00, 0x03, 0x12,
-0x1F, 0x0F, 0x90, 0x93, 0x47, 0xF0, 0x22, 0x90, 0x93, 0x3F, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x42,
-0x74, 0x05, 0xF0, 0x90, 0x93, 0x3C, 0x74, 0x14, 0xF0, 0x90, 0x93, 0x47, 0x74, 0x05, 0xF0, 0x22,
-0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x46, 0xF0, 0x90, 0x00,
-0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x44, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90,
-0x93, 0x46, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x44, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x93,
-0x44, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x43, 0xF0,
-0x60, 0x19, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x48, 0xF4, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x09, 0x90,
-0x93, 0x4D, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0x63, 0x12, 0x51, 0x4C, 0x90, 0x93, 0x43, 0xE0, 0x90,
-0x01, 0xE7, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x2D, 0xE0, 0x54,
-0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x0F, 0xFF, 0xE0, 0x54, 0xF0, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54,
-0x70, 0xFF, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0x8F, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
-0x90, 0x93, 0x2F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x30, 0xF0, 0x90, 0x00,
-0x04, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x31, 0xF0, 0x90, 0x00, 0x01, 0x74, 0x19, 0x12, 0x42, 0x20,
-0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xD3, 0x94, 0x20, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74,
-0x01, 0xF0, 0x80, 0x57, 0xEF, 0xD3, 0x94, 0x40, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x02, 0xF0,
-0x80, 0x49, 0xEF, 0xD3, 0x94, 0x60, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x03, 0xF0, 0x80, 0x3B,
-0xEF, 0xD3, 0x94, 0x80, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x04, 0xF0, 0x80, 0x2D, 0xEF, 0xD3,
-0x94, 0xA0, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x05, 0xF0, 0x80, 0x1F, 0xEF, 0xD3, 0x94, 0xC0,
-0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x06, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0xE0, 0x90, 0x93,
-0x2E, 0x50, 0x05, 0x74, 0x07, 0xF0, 0x80, 0x03, 0x74, 0x08, 0xF0, 0x90, 0x93, 0x2E, 0xE0, 0x90,
-0x93, 0x32, 0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x1E, 0xF6, 0xFE, 0xAF, 0x05, 0xED,
-0x2E, 0x90, 0x93, 0x67, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93,
-0x68, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x69, 0xF0, 0x90,
-0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x6A, 0xF0, 0x90, 0x00, 0x04, 0x12,
-0x1F, 0x0F, 0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90, 0x93, 0x6B, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01,
-0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xC8, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x12, 0x1E,
-0xF6, 0xC3, 0x13, 0x20, 0xE0, 0x02, 0xC1, 0xB6, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E,
-0xF6, 0xFF, 0x54, 0x02, 0xFE, 0x90, 0x93, 0x9E, 0xE0, 0x54, 0xFD, 0x4E, 0xFE, 0xF0, 0xEF, 0x54,
-0x01, 0xFF, 0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x08, 0xFD, 0xEF,
-0x54, 0xF7, 0x4D, 0xFF, 0x90, 0x93, 0x9E, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E,
-0xFF, 0xF0, 0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x20, 0xFD, 0xEF, 0x54, 0xDF, 0x4D, 0xFF, 0x90, 0x93,
-0x9E, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0xEF, 0x54, 0xBF, 0x4E, 0xF0, 0x20, 0xE0, 0x02, 0xC1, 0xA2,
-0x90, 0x93, 0x1D, 0x74, 0x21, 0xF0, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF,
-0x13, 0x13, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x9E, 0xE0, 0xFD, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x60,
-0x31, 0xEF, 0x54, 0x04, 0xFF, 0xED, 0x54, 0xFB, 0x4F, 0xF0, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30,
-0xE0, 0x15, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x3A, 0x93, 0x90, 0x93,
-0x1D, 0xE0, 0x44, 0x08, 0xF0, 0x80, 0x0B, 0xE4, 0x90, 0x93, 0xA0, 0xF0, 0x7D, 0x40, 0xFF, 0x12,
-0x3A, 0x22, 0x90, 0x93, 0x9E, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90,
-0x93, 0x1D, 0xE0, 0x44, 0x12, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x93, 0x1D,
-0xE0, 0x44, 0x14, 0xF0, 0x90, 0x93, 0x9E, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x07, 0x90,
-0x93, 0x1D, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x93, 0x9E, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20,
-0xE0, 0x07, 0x90, 0x93, 0x1D, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93, 0x1D, 0xE0, 0x90, 0x05, 0x27,
-0xF0, 0x90, 0x93, 0x9F, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x55, 0x11, 0x90, 0x93, 0x9E, 0xE0,
-0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x04, 0x7F, 0x03, 0x80, 0x0E, 0x7F, 0x01, 0x12, 0x5E,
-0x91, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x12, 0x55, 0x11, 0x7F, 0x02, 0x02,
-0x88, 0x14, 0x90, 0x93, 0x1D, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27, 0xF0, 0xE4, 0xFF, 0x12, 0x55,
-0x11, 0x7F, 0x03, 0x02, 0x88, 0x14, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF,
-0x54, 0x02, 0xFE, 0x90, 0x93, 0x98, 0xE0, 0x54, 0xFD, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF,
-0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7,
-0x4D, 0xFF, 0x90, 0x93, 0x98, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0,
-0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x40, 0xFD, 0xEF, 0x54, 0xBF, 0x4D, 0xFF, 0x90, 0x93, 0x98, 0xF0,
-0xEE, 0x54, 0x04, 0xFE, 0xEF, 0x54, 0xFB, 0x4E, 0xF0, 0x20, 0xE0, 0x02, 0xE1, 0xC7, 0x90, 0x93,
-0x1D, 0x74, 0x31, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x15, 0x90,
-0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x3A, 0x93, 0x90, 0x93, 0x1D, 0xE0, 0x44,
-0x08, 0xF0, 0x80, 0x0B, 0xE4, 0x90, 0x93, 0x9A, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x3A, 0x22, 0x90,
-0x93, 0x98, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x93, 0x1D, 0xE0,
-0x44, 0x02, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x93, 0x1D, 0xE0, 0x44, 0x04,
-0xF0, 0x90, 0x93, 0x1D, 0xE0, 0x54, 0x0E, 0x60, 0x0C, 0x90, 0x01, 0x3E, 0x74, 0x03, 0xF0, 0xFD,
-0x7F, 0x02, 0x12, 0x3A, 0xAD, 0x90, 0x93, 0x1D, 0xE0, 0x90, 0x05, 0x27, 0xF0, 0x90, 0x93, 0x98,
-0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x64, 0x06, 0x60, 0x33,
-0x7F, 0x06, 0x12, 0x64, 0xDA, 0x80, 0x2C, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93,
-0x99, 0xE0, 0xB4, 0x06, 0x1B, 0x7F, 0x01, 0x12, 0x64, 0xDA, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF,
-0x60, 0x09, 0x7D, 0x01, 0xAF, 0x64, 0x12, 0x48, 0xF4, 0x80, 0x05, 0x12, 0x64, 0xA8, 0x80, 0x03,
-0x12, 0x67, 0x4A, 0x7F, 0x01, 0x80, 0x4D, 0x90, 0x93, 0x1D, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27,
-0xF0, 0x7D, 0x03, 0x7F, 0x02, 0x12, 0x3A, 0x3F, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x06, 0x02, 0x80,
-0x1B, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05,
-0x04, 0xE4, 0xFF, 0x80, 0x14, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09,
-0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x05, 0x7F, 0x01, 0x12, 0x64, 0xDA, 0x12, 0x67, 0x29, 0x12,
-0x51, 0x9C, 0x7F, 0x03, 0x11, 0x1B, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAD, 0x07, 0xEF, 0x64, 0x01,
-0x60, 0x04, 0xEF, 0xB4, 0x03, 0x15, 0x90, 0x93, 0x9E, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0,
-0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xED, 0x64, 0x02, 0x60, 0x04,
-0xED, 0xB4, 0x03, 0x15, 0x90, 0x93, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3,
-0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x6D,
-0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x6E, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0xE5,
-0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xEB, 0xE0, 0x54, 0xC0, 0x60, 0x43, 0xC3, 0x90, 0x93, 0xE6, 0xE0,
-0x94, 0x88, 0x90, 0x93, 0xE5, 0xE0, 0x94, 0x13, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x04,
-0xF0, 0x7F, 0x00, 0x22, 0x90, 0x93, 0xE5, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14,
-0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0xE6, 0xE0, 0x94, 0x64, 0x90, 0x93, 0xE5, 0xE0,
-0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE2, 0xB8, 0x7F, 0x00, 0x22, 0x7F, 0x01,
-0x22, 0x90, 0x93, 0xA4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xA8, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00,
-0x00, 0xE4, 0x7F, 0x1F, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0xA8, 0x12, 0x43, 0x90, 0xD3, 0x12, 0x43,
-0x73, 0x50, 0x41, 0x90, 0x93, 0xA8, 0x12, 0x43, 0x84, 0xA9, 0x07, 0x90, 0x93, 0xA4, 0x12, 0x43,
-0x84, 0xA8, 0x01, 0x12, 0x1F, 0xA3, 0xEF, 0x54, 0x01, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0x7B, 0x01,
-0xFA, 0xF9, 0xF8, 0xC3, 0x12, 0x43, 0x73, 0x60, 0x1B, 0x90, 0x93, 0xA8, 0x12, 0x43, 0x84, 0xEF,
-0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, 0x93, 0xA8, 0x12,
-0x1F, 0xC9, 0x80, 0xAD, 0x90, 0x93, 0xA8, 0x02, 0x43, 0x84, 0x90, 0x93, 0x73, 0x12, 0x1F, 0xC9,
-0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0x77, 0x12, 0x43, 0x90, 0xC3, 0x12, 0x43, 0x73,
-0x90, 0x93, 0x73, 0x60, 0x67, 0x12, 0x43, 0x84, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0x7F, 0x12, 0x1F,
-0xC9, 0x90, 0x93, 0x77, 0x12, 0x43, 0x84, 0x11, 0xC1, 0x90, 0x93, 0x83, 0x12, 0x1F, 0xC9, 0x90,
-0x93, 0x77, 0x12, 0x43, 0x84, 0x12, 0x43, 0x66, 0x90, 0x93, 0x7F, 0x12, 0x43, 0x90, 0x12, 0x43,
-0x4C, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0x83, 0x12, 0x43, 0x84, 0xA9,
-0x07, 0x90, 0x93, 0x7B, 0x12, 0x43, 0x84, 0xA8, 0x01, 0x12, 0x1F, 0xB6, 0xD0, 0x03, 0xD0, 0x02,
-0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0x59, 0x90, 0x93, 0x87, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0x73,
-0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0x87, 0x80, 0x0A, 0x12, 0x43, 0x84, 0xC0,
-0x06, 0xC0, 0x07, 0x90, 0x93, 0x7B, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0xD0,
-0x07, 0xD0, 0x06, 0x02, 0x34, 0x30, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x9F, 0x74,
-0x04, 0xF0, 0x22, 0x12, 0x56, 0x01, 0x80, 0xEE, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x05,
-0x27, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93, 0x9F, 0x74, 0x04, 0xF0, 0x22, 0x12, 0x56, 0x14, 0x90,
-0x93, 0x9F, 0x74, 0x04, 0xF0, 0x22, 0x90, 0x01, 0x57, 0xE0, 0x60, 0x3C, 0x90, 0x01, 0x57, 0xE4,
-0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x51, 0xE0, 0x60, 0x07, 0xE4, 0xF0, 0x53,
-0x66, 0xFD, 0x80, 0x24, 0x90, 0x93, 0x38, 0xE0, 0x04, 0xF0, 0x53, 0x66, 0xEF, 0x90, 0x93, 0x3F,
-0xE0, 0xFF, 0x90, 0x93, 0x38, 0xE0, 0xD3, 0x9F, 0x40, 0x0E, 0xE5, 0x62, 0xB4, 0x01, 0x09, 0x90,
-0x93, 0x39, 0xE0, 0x70, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x5B, 0xE0, 0x60, 0x10, 0x90, 0x01,
-0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x4C, 0xF0, 0x90, 0x01,
-0x5F, 0xE0, 0x60, 0x10, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0xE4,
-0x90, 0x93, 0x49, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0xE7, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0,
-0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01,
-0x22, 0xD3, 0x90, 0x93, 0xE8, 0xE0, 0x94, 0xE8, 0x90, 0x93, 0xE7, 0xE0, 0x94, 0x03, 0x40, 0x03,
-0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x93, 0xE7, 0xE4, 0x75, 0xF0,
-0x01, 0x12, 0x42, 0x87, 0x80, 0xC6, 0xE4, 0xFF, 0x02, 0x4E, 0x8B, 0x90, 0x93, 0x1A, 0x12, 0x43,
-0xC8, 0x12, 0x1E, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x93, 0xE0, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xE0,
-0x30, 0xE0, 0x02, 0x51, 0xA6, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xC3, 0x13,
-0x30, 0xE0, 0x0A, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0xE1, 0xF0, 0x22, 0x7E, 0xBF,
-};
-
-#ifdef CONFIG_MP_INCLUDED
-u8 Rtl8723EFwBTImgArray[Rtl8723EBTImgArrayLength] = {
-0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x4E,0xB2,0xCF,0xF7,0x12,0x6B,0x6B,0xEB,
-0x4F,0xB4,0x60,0xCA,0x4C,0xB2,0x68,0xF1,0x1A,0x6B,0x4E,0xB5,0x60,0xCA,0x4B,0xB2,
-0x00,0x68,0x0A,0x6E,0x00,0x18,0x2E,0x2E,0x00,0xC2,0x44,0xB7,0x4A,0xB2,0x4B,0xB3,
-0xE8,0x4F,0x00,0xC2,0xC0,0xF0,0x58,0x9F,0x40,0xF0,0x0C,0xC7,0x4A,0xB0,0x6D,0xEA,
-0xC0,0xF0,0x58,0xDF,0x45,0xF1,0x09,0x6A,0x00,0xF1,0x50,0xCF,0x0E,0xF0,0x1D,0x6A,
-0x80,0xF1,0x62,0xA7,0x43,0xDF,0x42,0xB2,0x00,0x69,0x25,0xDF,0x44,0xDF,0x68,0x32,
-0x69,0xE2,0x40,0xB3,0x44,0x32,0x26,0xDF,0x27,0xDF,0x28,0xDF,0x29,0xDF,0x40,0xCB,
-0x90,0x67,0xB1,0x67,0x30,0x6E,0x00,0x18,0x64,0x2E,0x04,0xD7,0x01,0x6A,0x4B,0xEA,
-0x47,0xD8,0x3A,0xB3,0x40,0x98,0x3A,0xB4,0xB1,0x67,0x6D,0xEA,0x40,0xD8,0x0A,0x6B,
-0x08,0x6A,0x6C,0xC0,0x0C,0x6E,0x00,0x18,0x64,0x2E,0x4D,0xC0,0x27,0xB3,0x02,0x6C,
-0x8B,0xEC,0x40,0x9B,0x03,0x6B,0x6B,0xEB,0x8C,0xEA,0x6C,0xEA,0x05,0x6B,0x6B,0xEB,
-0x6C,0xEA,0x22,0xB3,0x40,0xDB,0x22,0xB3,0x40,0x9B,0x8C,0xEA,0x40,0xDB,0x04,0x97,
-0x0E,0xF0,0x1D,0x6A,0x2C,0xB3,0x43,0xDF,0x2A,0xB2,0x60,0xDA,0x2C,0xB3,0x2B,0xB2,
-0x60,0xDA,0x2D,0xB3,0x2B,0xB2,0x60,0xDA,0x2D,0xB3,0x2C,0xB2,0x60,0xDA,0x2E,0xB3,
-0x2C,0xB2,0x60,0xDA,0x2E,0xB3,0x2D,0xB2,0x60,0xDA,0x2F,0xB3,0x2D,0xB2,0x60,0xDA,
-0x2F,0xB3,0x2E,0xB2,0x60,0xDA,0x30,0xB3,0x2E,0xB2,0x60,0xDA,0x30,0xB3,0x2F,0xB2,
-0x60,0xDA,0x31,0xB3,0x2F,0xB2,0x60,0xDA,0x30,0xB2,0x32,0xB3,0x20,0xCA,0x30,0xB2,
-0x60,0xDA,0x31,0xB2,0x08,0xF1,0x11,0x6B,0x6B,0xEB,0x20,0xCA,0x2F,0xB2,0x60,0xCA,
-0x2F,0xB2,0x20,0xDA,0x2F,0xB2,0x80,0x18,0x43,0x36,0x20,0xDA,0x08,0x97,0x07,0x91,
-0x06,0x90,0x00,0xEF,0x05,0x63,0x00,0x00,0xF4,0x00,0x11,0x80,0xF0,0x00,0x11,0x80,
-0xD0,0x04,0x11,0x80,0xD2,0x04,0x11,0x80,0xCA,0xA0,0x11,0x80,0xCC,0xA0,0x11,0x80,
-0xC4,0xF5,0x04,0x80,0xD6,0xA0,0x11,0x80,0x00,0x00,0x00,0x18,0x58,0xC5,0xC8,0x19,
-0x14,0xA1,0x11,0x80,0xD8,0xA0,0x11,0x80,0x00,0x00,0x00,0x70,0x08,0xA1,0x11,0x80,
-0xBC,0x00,0x11,0x80,0xA1,0xA9,0x10,0x80,0x44,0x00,0x11,0x80,0x21,0xA3,0x10,0x80,
-0x4C,0x05,0x11,0x80,0x25,0xAD,0x10,0x80,0x44,0x05,0x11,0x80,0x3D,0xCD,0x10,0x80,
-0x58,0x09,0x11,0x80,0x11,0xD1,0x10,0x80,0x3C,0x00,0x11,0x80,0x6D,0xA6,0x10,0x80,
-0xA0,0x05,0x11,0x80,0x41,0xAA,0x10,0x80,0x5C,0x05,0x11,0x80,0x61,0xD7,0x10,0x80,
-0x90,0x06,0x11,0x80,0x45,0xC9,0x10,0x80,0xEC,0x04,0x11,0x80,0xAD,0xAE,0x10,0x80,
-0x6C,0x06,0x11,0x80,0x45,0xD0,0x10,0x80,0x16,0xA1,0x11,0x80,0xD4,0x04,0x11,0x80,
-0xB1,0xCE,0x10,0x80,0xC8,0xA0,0x11,0x80,0x18,0xA1,0x11,0x80,0x1C,0xA1,0x11,0x80,
-0x20,0xA1,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x04,0x67,0x2F,0x24,
-0x80,0x98,0x00,0x6A,0x00,0xF4,0x24,0x98,0xBD,0x67,0x00,0xF4,0x44,0xD8,0xE1,0xF7,
-0x1F,0x6A,0x4C,0xEC,0x00,0x18,0x2A,0xDF,0x10,0x4D,0x12,0x2A,0x5D,0x67,0x68,0xAA,
-0xFF,0xF7,0x1F,0x6A,0x4C,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,
-0x6B,0xE2,0x0E,0xB3,0x48,0x32,0x69,0xE2,0xE0,0xF0,0x4B,0xA2,0x01,0x72,0x0A,0x60,
-0x0B,0xB2,0xB0,0x67,0x00,0x18,0xE0,0x1D,0x83,0x9A,0x07,0x2A,0x00,0x18,0x6A,0x1E,
-0x11,0x67,0x04,0x10,0x00,0x18,0x7B,0x57,0x90,0x67,0x11,0x67,0xD1,0x29,0x08,0x97,
-0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0x9C,0x31,0x11,0x80,
-0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x0A,0xD4,0xFF,0x6C,0x8C,0xEE,0x04,0x76,
-0x04,0xD6,0x34,0x61,0x1F,0xB2,0x03,0x6B,0x40,0x9A,0x42,0x32,0x4A,0x32,0x6C,0xEA,
-0x01,0x72,0x2C,0x61,0x0A,0x93,0x40,0xA3,0x8C,0xEA,0x03,0x72,0x27,0x61,0x22,0xA3,
-0x8C,0xE9,0x24,0x29,0x44,0xA3,0x03,0xA3,0x8C,0xEA,0x40,0x32,0x8C,0xE8,0x00,0x1C,
-0xDD,0x31,0x4D,0xE8,0x14,0xB3,0x1A,0x65,0x40,0xAB,0x0E,0xEA,0x14,0x2A,0x13,0xB2,
-0x98,0x67,0x00,0x9A,0x20,0xDA,0x12,0xB2,0x20,0xDA,0x08,0xF1,0x11,0x6A,0x4B,0xEA,
-0x00,0x1C,0xE5,0x31,0x40,0xCB,0x00,0x18,0xA9,0x1D,0x01,0x6C,0x07,0x20,0x80,0x18,
-0x79,0x28,0x90,0x67,0x03,0x10,0x00,0x1C,0xE5,0x31,0x98,0x67,0x0A,0x94,0x00,0x18,
-0xBD,0x89,0x04,0x95,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x00,0x00,
-0x6C,0x1D,0x11,0x80,0x18,0xA1,0x11,0x80,0x1C,0xA1,0x11,0x80,0x20,0xA1,0x11,0x80,
-0x03,0xB2,0x01,0x6B,0x40,0x9A,0x52,0x32,0x20,0xE8,0x6C,0xEA,0x50,0x60,0x00,0xB0,
-0x03,0xB2,0x01,0x6B,0x40,0x9A,0x4A,0x32,0x20,0xE8,0x6C,0xEA,0x50,0x60,0x00,0xB0,
-0xF3,0x63,0x18,0x62,0x17,0xD1,0x16,0xD0,0x7D,0x67,0x00,0x6A,0x20,0xF0,0x50,0xC3,
-0xB4,0xB3,0x9D,0x67,0x00,0x69,0x58,0xAB,0x40,0xF0,0x48,0xCC,0x20,0xF0,0x5A,0xA3,
-0x20,0xF0,0x79,0xA3,0x40,0x32,0x4D,0xEB,0xAF,0xB2,0x0D,0xD3,0x01,0x6B,0x40,0x9A,
-0x0F,0xD2,0xAE,0xB2,0x40,0x9A,0x0E,0xD2,0xAD,0xB2,0x00,0x9A,0xAD,0xB2,0x40,0x9A,
-0x10,0xD2,0x0E,0x92,0x6C,0xEA,0x3A,0x22,0xBD,0x67,0x83,0x67,0x30,0x4D,0x00,0x6E,
-0x00,0x18,0x71,0x23,0x23,0x67,0x02,0x2A,0x03,0x69,0x26,0x11,0x9D,0x67,0x20,0xF0,
-0x70,0xA4,0x0F,0x94,0xFF,0x6A,0x4C,0xEB,0x80,0xF7,0x82,0x32,0x2C,0xEA,0x4E,0xEB,
-0xA2,0xB4,0x1B,0x2B,0xA0,0xB2,0x4D,0xE8,0x40,0x9C,0x56,0x32,0x2C,0xEA,0x02,0x2A,
-0x9F,0xB2,0x4D,0xE8,0x7D,0x67,0x40,0xF0,0x68,0xAB,0x01,0xF0,0x00,0x6A,0x05,0x69,
-0x6C,0xEA,0xFF,0xF7,0x1F,0x6B,0x6C,0xEA,0x04,0x22,0x00,0x18,0xA4,0x1D,0x0D,0x94,
-0x0D,0x10,0x00,0x18,0xA9,0x1D,0x0D,0x94,0x09,0x10,0x96,0xB2,0x4C,0xE8,0x40,0x9C,
-0x56,0x32,0x2C,0xEA,0x02,0x2A,0x94,0xB2,0x4C,0xE8,0x09,0x69,0x0E,0x94,0x01,0x6F,
-0x86,0x32,0xEC,0xEA,0x41,0x22,0x8D,0xB3,0x40,0x9B,0x56,0x32,0xEC,0xEA,0x3C,0x22,
-0xBD,0x67,0x10,0x6A,0xC7,0x67,0x02,0x6C,0x30,0x4D,0x14,0xD7,0x00,0x18,0x71,0x23,
-0x4D,0xE9,0x14,0x97,0x06,0x2A,0x20,0x6A,0x4D,0xE9,0xFF,0xF7,0x1F,0x6C,0x8C,0xE9,
-0xDB,0x10,0x0F,0x94,0x5D,0x67,0x20,0xF0,0x70,0xA2,0x40,0xF7,0x82,0x32,0xEC,0xEA,
-0x4E,0xEB,0x7E,0xB2,0x80,0x9A,0x19,0x2B,0x7D,0xB2,0x4D,0xE8,0x44,0x67,0xEC,0xEA,
-0x02,0x2A,0x79,0xB2,0x4D,0xE8,0x7D,0x67,0x40,0xF0,0x68,0xAB,0x01,0xF0,0x00,0x6A,
-0xFF,0xF7,0x1F,0x6C,0x6C,0xEA,0x8C,0xEA,0x04,0x22,0x00,0x18,0xA4,0x1D,0x0D,0x94,
-0x0B,0x10,0x00,0x18,0xA9,0x1D,0x0D,0x94,0x07,0x10,0x73,0xB2,0x4C,0xE8,0x44,0x67,
-0xEC,0xEA,0x02,0x2A,0x6F,0xB2,0x4C,0xE8,0x0E,0x93,0x01,0x6C,0x6A,0x32,0x8C,0xEA,
-0x41,0x22,0x6A,0xB3,0x40,0x9B,0x0F,0x6B,0x46,0xEC,0x6C,0xEA,0x03,0x72,0x3A,0x60,
-0xFF,0x6A,0xBD,0x67,0x01,0x4A,0x04,0x6C,0x30,0x4D,0x02,0x6E,0x00,0x18,0x71,0x23,
-0x4D,0xE9,0x03,0x2A,0x00,0xF2,0x00,0x6A,0x45,0x10,0x9D,0x67,0x20,0xF0,0x50,0xA4,
-0x5E,0xB3,0x80,0x9B,0x13,0x22,0x61,0xB2,0x03,0x6B,0x4D,0xE8,0x82,0x32,0x4A,0x32,
-0x6C,0xEA,0x01,0x72,0x04,0x60,0x96,0x32,0x01,0x6C,0x8C,0xEA,0x02,0x2A,0x5C,0xB2,
-0x4D,0xE8,0x00,0xF4,0x00,0x6A,0x4D,0xE9,0x01,0x6B,0x12,0x10,0x5A,0xB2,0x03,0x6B,
-0x4C,0xE8,0x82,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,0x04,0x60,0x96,0x32,0x01,0x6B,
-0x6C,0xEA,0x02,0x2A,0x55,0xB2,0x4C,0xE8,0x01,0xF0,0x00,0x6A,0x4D,0xE9,0x00,0x6B,
-0x50,0xB2,0x60,0xC2,0x0E,0x94,0x01,0x6B,0x8E,0x32,0x6C,0xEA,0x18,0x22,0x47,0xB2,
-0x40,0x9A,0x46,0xEB,0x0F,0x6B,0x6C,0xEA,0x03,0x72,0x11,0x60,0xBD,0x67,0x02,0xF0,
-0x00,0x6A,0x08,0x6C,0x30,0x4D,0x03,0x6E,0x00,0x18,0x71,0x23,0x4D,0xE9,0x07,0x2A,
-0x04,0xF0,0x00,0x6A,0x4D,0xE9,0xFF,0xF7,0x1F,0x6A,0x4C,0xE9,0x4D,0x10,0x44,0xB2,
-0x3E,0xB3,0x0C,0xEA,0x6E,0xEA,0x11,0x2A,0x38,0xB2,0x0F,0x6B,0x40,0x9A,0x46,0x32,
-0x6C,0xEA,0x01,0x72,0x0A,0x61,0x80,0x18,0xC0,0x28,0x00,0x65,0x06,0x22,0x80,0x6A,
-0x4D,0xE9,0x39,0xB2,0x4C,0xE8,0x39,0xB2,0x4C,0xE8,0xC0,0xF5,0x02,0x32,0x01,0x6B,
-0x6C,0xEA,0x0C,0x22,0x2D,0xB2,0x03,0x6B,0x40,0x9A,0x42,0x32,0x4A,0x32,0x6C,0xEA,
-0x01,0x72,0x04,0x61,0x2B,0xB2,0x4C,0xE8,0x2B,0xB2,0x4C,0xE8,0x04,0x6A,0x2C,0xEA,
-0x08,0x2A,0x2D,0xB2,0x4C,0xE8,0x2D,0xB2,0x4C,0xE8,0x26,0xB2,0x4C,0xE8,0x26,0xB2,
-0x4C,0xE8,0x2C,0xB3,0x50,0x67,0x6C,0xEA,0x6E,0xEA,0x0C,0x2A,0x1F,0xB2,0x03,0x6B,
-0x40,0x9A,0x42,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,0x04,0x61,0x1F,0xB2,0x4D,0xE8,
-0x1F,0xB2,0x4D,0xE8,0x24,0xB3,0x50,0x67,0x6C,0xEA,0x6E,0xEA,0x03,0x2A,0x00,0x18,
-0xBB,0x30,0x00,0x6C,0x12,0xB2,0x00,0xDA,0x05,0x6A,0x10,0x94,0x04,0xD2,0x0C,0x0A,
-0x05,0xD2,0x0E,0x93,0x0F,0x92,0x0A,0xD4,0xFA,0x6D,0x04,0x6C,0x21,0xF3,0x1F,0x6E,
-0xA1,0xF1,0x1A,0x6F,0x06,0xD1,0x09,0xD0,0x07,0xD2,0x20,0x18,0x1B,0x32,0x08,0xD3,
-0x18,0x97,0x17,0x91,0x16,0x90,0x00,0xEF,0x0D,0x63,0x00,0x00,0x41,0x00,0x00,0x00,
-0xDC,0x00,0x11,0x80,0x44,0xA0,0x00,0xB0,0x40,0x60,0x00,0xB0,0x40,0xA0,0x00,0xB0,
-0x50,0xA0,0x00,0xB0,0x00,0x00,0x80,0x00,0x6C,0x1D,0x11,0x80,0x00,0x00,0x40,0x00,
-0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xBF,0xFF,0x00,0x00,0x20,0x00,0x00,0x00,0x10,0x00,
-0x17,0x00,0x11,0x80,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xEF,0xFF,0x00,0x00,0xA0,0x00,
-0x00,0x00,0xC0,0x00,0x00,0x00,0x30,0x00,0x01,0x6D,0xA4,0xEC,0x07,0xB2,0x06,0xB4,
-0x60,0x9C,0x40,0x9A,0x6E,0xEA,0xAC,0xEA,0x02,0x2A,0xAE,0xEB,0x60,0xDC,0x20,0xE8,
-0x00,0x65,0x00,0x00,0x3C,0x60,0x00,0xB0,0x50,0x60,0x00,0xB0,0xF8,0x63,0x0E,0x62,
-0x0D,0xD1,0x0C,0xD0,0x6A,0xB2,0x01,0x6F,0x20,0x9A,0x2A,0x65,0x36,0x36,0xEC,0xEE,
-0x0B,0x2E,0x68,0xB4,0x03,0x6B,0x6B,0xEB,0x40,0x9C,0x6C,0xEA,0x40,0xDC,0x66,0xB4,
-0x02,0x6B,0x40,0x9C,0x6D,0xEA,0x40,0xDC,0x64,0xB2,0x00,0x6B,0x0A,0xD3,0xA3,0x67,
-0x60,0x9A,0x63,0xB2,0x40,0x9A,0x0A,0x65,0x62,0xB2,0x00,0x9A,0x51,0x67,0xEC,0xEA,
-0x10,0x22,0x80,0xF7,0x62,0x32,0x88,0x67,0x8E,0xEA,0xEC,0xEA,0x01,0x5A,0xA7,0x67,
-0x08,0x60,0x5D,0xB2,0x03,0x6D,0x4D,0xE8,0x03,0x2E,0x5C,0xB2,0x07,0x6D,0x4D,0xE8,
-0x0A,0xD7,0x29,0x67,0xC0,0x99,0x01,0x6C,0xD6,0x32,0x8C,0xEA,0x1E,0x22,0x08,0x6A,
-0x4D,0xED,0x02,0x32,0x52,0x32,0x8C,0xEA,0xFF,0xF7,0x1F,0x6F,0x16,0x22,0x28,0x67,
-0x26,0x32,0x40,0xF7,0x62,0x33,0x4E,0xEB,0x8C,0xEB,0x83,0xEB,0x0E,0x60,0x10,0x6A,
-0x4D,0xED,0x4E,0xB2,0xEC,0xED,0x4D,0xE8,0x46,0x67,0x8C,0xEA,0x05,0x2A,0x4A,0xB2,
-0x4D,0xE8,0x20,0x6A,0x4D,0xED,0xEC,0xED,0x0A,0xD4,0x68,0x67,0x6A,0x32,0x01,0x6E,
-0xCC,0xEA,0x16,0x22,0x40,0x6A,0x29,0x67,0x4D,0xED,0x80,0x99,0x44,0xB2,0x03,0x6B,
-0x4D,0xE8,0x82,0x32,0x4A,0x32,0x6C,0xEA,0xCA,0xEA,0x03,0x60,0x96,0x32,0xCC,0xEA,
-0x07,0x2A,0x80,0x6A,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x4C,0xED,0x3D,0xB2,0x4D,0xE8,
-0x02,0x6A,0xAC,0xEA,0x08,0x2A,0x3C,0xB2,0x4C,0xE8,0x3C,0xB2,0x4C,0xE8,0x3C,0xB2,
-0x4C,0xE8,0x3C,0xB2,0x4C,0xE8,0x3C,0xB2,0x0C,0xEA,0x07,0x22,0x36,0xB2,0x01,0x6B,
-0x4C,0xE8,0x36,0xB2,0x4C,0xE8,0x39,0xB2,0x60,0xC2,0x29,0xB3,0x03,0x69,0x40,0x9B,
-0x42,0x32,0x4A,0x32,0x2C,0xEA,0x01,0x72,0x04,0x61,0x31,0xB2,0x4C,0xE8,0x2E,0xB2,
-0x4C,0xE8,0x33,0xB2,0x88,0x67,0x06,0xD5,0x07,0xD4,0xFA,0x6D,0x04,0x6C,0x01,0xF4,
-0x00,0x6E,0xA1,0xF1,0x19,0x6F,0x04,0xD1,0x05,0xD2,0x20,0x18,0x1B,0x32,0x08,0xD0,
-0x0A,0x92,0x12,0x22,0x2B,0xB3,0x50,0x67,0x6C,0xEA,0x6E,0xEA,0x0B,0x2A,0x18,0xB3,
-0x40,0x9B,0x42,0x32,0x4A,0x32,0x2C,0xEA,0x01,0x72,0x04,0x61,0x1C,0xB2,0x4D,0xE8,
-0x1C,0xB2,0x4D,0xE8,0x17,0xB2,0x00,0xDA,0x23,0xB2,0x01,0x6C,0xA0,0x9A,0xBE,0x32,
-0x8C,0xEA,0x17,0x22,0x40,0xF5,0x02,0x32,0x8C,0xEA,0x07,0x22,0x1B,0xB2,0x00,0x6B,
-0x80,0xC2,0x1E,0xB2,0x60,0xC2,0x1E,0xB2,0x60,0xC2,0xA2,0x32,0x8C,0xEA,0x05,0x22,
-0x00,0x18,0xA5,0x23,0x00,0x65,0x19,0xB3,0x40,0xC3,0x14,0xB2,0x00,0x18,0x04,0x24,
-0x80,0xA2,0x0E,0x97,0x0D,0x91,0x0C,0x90,0x00,0xEF,0x08,0x63,0x6C,0x1D,0x11,0x80,
-0x30,0x60,0x00,0xB0,0x34,0x60,0x00,0xB0,0x44,0xA0,0x00,0xB0,0x50,0x60,0x00,0xB0,
-0x40,0xA0,0x00,0xB0,0x00,0x00,0x80,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x20,0x00,
-0x00,0x00,0x10,0x00,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,0x7F,0xFF,
-0xFF,0xFF,0xBF,0xFF,0x00,0x00,0x30,0x00,0x17,0x00,0x11,0x80,0xFC,0xA5,0x10,0x80,
-0x00,0x00,0xC0,0x00,0x54,0x45,0x11,0x80,0x16,0x00,0x11,0x80,0x18,0x00,0x11,0x80,
-0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x34,0xB2,0x00,0x6E,0x01,0x6B,0x20,0x6C,
-0xFF,0xF7,0x1F,0x6D,0x0A,0x65,0xE6,0x67,0x06,0x67,0x4B,0x65,0x2C,0x65,0x6D,0x65,
-0x2D,0xB1,0xC8,0x32,0x15,0xE1,0x10,0x27,0x68,0x67,0x69,0xE2,0x80,0x9A,0x6A,0x67,
-0x64,0xEF,0x86,0xEF,0x80,0xDD,0x41,0x9A,0xFF,0x4B,0x29,0x67,0x6C,0xEA,0xEF,0xE1,
-0x44,0xEB,0x4D,0xEC,0x80,0xDD,0x04,0x10,0x68,0x67,0x69,0xE2,0x40,0x9A,0x40,0xDD,
-0x01,0x4E,0xFF,0x69,0x2C,0xEE,0x10,0x76,0x11,0x61,0x88,0x67,0x1E,0xB5,0x01,0x4F,
-0x60,0x9C,0x2C,0xEF,0x4A,0x67,0x44,0xEF,0x11,0xE5,0xFF,0x4A,0xA9,0x67,0x4C,0xEB,
-0xEB,0xE5,0x64,0xEA,0x40,0x9C,0x00,0x6E,0x6D,0xEA,0x40,0xDC,0x04,0x48,0x4B,0x67,
-0x4C,0xE8,0x00,0xF4,0x01,0x58,0xCC,0x61,0x13,0xB4,0xFF,0x6E,0x55,0x6D,0x00,0xF4,
-0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x0F,0xB4,0xFF,0x6E,0x00,0x6D,0x00,0xF5,
-0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x0B,0xB4,0xFF,0x6E,0xB1,0x67,0x00,0xF6,
-0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x07,0xB4,0xFF,0x6E,0x0F,0x6D,0x00,0xF7,
-0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0xEF,
-0x04,0x63,0x00,0x00,0x00,0xF8,0x10,0x80,0xDC,0xF4,0x04,0x80,0xFD,0x63,0x05,0x62,
-0x04,0xD0,0x11,0xB2,0x00,0x68,0xEE,0x6C,0x00,0xDA,0x10,0xB2,0x07,0x6D,0x00,0xDA,
-0x00,0x18,0x9A,0x33,0x00,0x65,0x0E,0xB4,0x4A,0xF5,0x16,0x6B,0x6B,0xEB,0xFF,0xF7,
-0x1F,0x6A,0x01,0x48,0x4C,0xE8,0x00,0xF4,0x00,0x58,0x60,0xCC,0xFA,0x61,0x07,0xB2,
-0x03,0x6B,0x05,0x97,0x60,0xDA,0x04,0x90,0x03,0xB2,0x01,0x6B,0x60,0xDA,0x00,0xEF,
-0x03,0x63,0x00,0x00,0x10,0xA3,0x00,0xB0,0x20,0xA3,0x00,0xB0,0xF0,0x00,0x00,0xB6,
-0xFD,0x63,0x04,0x62,0x17,0xB3,0x16,0xB2,0x80,0x18,0x53,0x2A,0x60,0xDA,0x16,0xB3,
-0x16,0xB2,0x21,0xB4,0x04,0x97,0x52,0xDB,0x15,0xB2,0x55,0xDB,0x15,0xB2,0x49,0xDB,
-0x15,0xB2,0x4C,0xDB,0x15,0xB2,0x4F,0xDB,0x15,0xB2,0x46,0xDB,0x15,0xB2,0x5B,0xDB,
-0x15,0xB2,0x40,0xDB,0x15,0xB2,0x58,0xDB,0x16,0xB3,0x15,0xB2,0x60,0xDA,0xC0,0xF0,
-0x50,0x9C,0x40,0x6B,0x6D,0xEA,0xC0,0xF0,0x50,0xDC,0x14,0xB3,0x49,0x9C,0x6D,0xEA,
-0x13,0xB3,0x6D,0xEA,0x49,0xDC,0x00,0xEF,0x03,0x63,0x00,0x00,0xCC,0x2C,0x11,0x80,
-0xB9,0xAD,0x10,0x80,0xB8,0x95,0x11,0x80,0x45,0xD4,0x10,0x80,0xB9,0xAF,0x10,0x80,
-0x4D,0xB0,0x10,0x80,0x51,0xB1,0x10,0x80,0x95,0xD0,0x10,0x80,0x01,0xD1,0x10,0x80,
-0x01,0xC8,0x10,0x80,0x0D,0xD0,0x10,0x80,0x35,0xC9,0x10,0x80,0x3C,0x1C,0x11,0x80,
-0x61,0xA2,0x10,0x80,0xDC,0x00,0x11,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x80,0x00,
-0xF6,0x63,0x12,0x62,0x11,0xD1,0x10,0xD0,0x14,0xD4,0x16,0xD6,0x80,0xAC,0xFF,0xF7,
-0x1F,0x6B,0x8C,0xEB,0x7F,0xF4,0x08,0x73,0x47,0x60,0x7F,0xF4,0x08,0x6A,0x62,0xEA,
-0x0E,0x61,0x3F,0xF4,0x00,0x73,0x35,0x60,0x3F,0xF4,0x00,0x6A,0x42,0xEB,0x20,0xF1,
-0x04,0x61,0x7F,0xF4,0x06,0x6A,0x42,0xEB,0x00,0xF1,0x1F,0x61,0x0F,0x10,0x7F,0xF4,
-0x0A,0x73,0x5C,0x60,0x7F,0xF4,0x0A,0x6A,0x42,0xEB,0x34,0x61,0x5F,0xF5,0x00,0x73,
-0x5E,0x60,0x5F,0xF5,0x03,0x73,0x00,0xF1,0x02,0x60,0x0F,0x11,0xFF,0xF7,0x1F,0x6A,
-0x8C,0xEA,0x7F,0xF4,0x06,0x72,0x03,0x61,0x88,0xB2,0x00,0x6B,0x60,0xDA,0x88,0xB2,
-0x0F,0x6B,0x40,0x9A,0x46,0x32,0x6C,0xEA,0x03,0x72,0x04,0x61,0x85,0xB2,0x60,0x9A,
-0x85,0xB2,0x60,0xDA,0x86,0xB3,0x85,0xB2,0x60,0xDA,0x87,0xB3,0x85,0xB2,0x60,0xDA,
-0xFF,0x17,0x7E,0xB2,0x85,0xB3,0x40,0x9A,0x6E,0xEA,0xE0,0xF0,0x0E,0x2A,0x14,0x92,
-0x63,0xA2,0x83,0xB2,0x60,0xC2,0xE1,0x10,0x14,0x94,0x82,0xB2,0x63,0xA4,0x80,0xF1,
-0x61,0xC2,0xDB,0x10,0x14,0x93,0x80,0xB1,0xFF,0xF7,0x1F,0x6C,0x43,0xA3,0x44,0x33,
-0x4D,0xE3,0x6C,0x33,0x4D,0xE3,0x40,0x99,0x68,0x30,0x8C,0xE8,0x4F,0xEA,0x03,0x22,
-0x00,0x18,0xFD,0x1D,0x91,0x67,0x0F,0x20,0x00,0x18,0x40,0xA4,0x00,0x65,0x77,0xB6,
-0x00,0x6A,0x01,0x6C,0xB1,0x67,0xE2,0x67,0x00,0x18,0xF3,0x1D,0x04,0xD2,0x80,0x99,
-0x00,0x18,0x0C,0x1E,0xB0,0x67,0x72,0xB2,0x00,0xCA,0xB7,0x10,0x14,0x93,0x00,0x6E,
-0x43,0xA3,0x01,0x22,0x01,0x6E,0x6B,0xB2,0x80,0xF1,0xD1,0xC2,0xAE,0x10,0x14,0x94,
-0x14,0x93,0x61,0xF3,0x06,0x6D,0x85,0xA4,0x0E,0xD4,0x48,0xA3,0x27,0xA3,0xFF,0xF7,
-0x1F,0x6C,0x40,0x32,0x4D,0xE9,0x00,0x6A,0x45,0xC3,0x4A,0xC3,0x8C,0xE9,0x00,0x18,
-0x9A,0x33,0x22,0x6C,0x5F,0xB0,0xF3,0x6A,0xFF,0xF7,0x1F,0x6B,0x20,0xF0,0xBF,0xA0,
-0x24,0x6C,0xA0,0x35,0x4D,0xED,0x00,0x18,0x9A,0x33,0x6C,0xED,0x40,0xF0,0x41,0xA0,
-0x40,0xF0,0xA0,0xA0,0x26,0x6C,0x40,0x32,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x00,0x18,
-0x9A,0x33,0x4C,0xED,0xEB,0xF0,0x12,0x6D,0x00,0x18,0x9A,0x33,0x28,0x6C,0x93,0xF7,
-0x1A,0x6D,0x00,0x18,0x9A,0x33,0x2A,0x6C,0x00,0x18,0xEE,0x33,0x01,0x6C,0x7D,0x21,
-0xFF,0xF7,0x1F,0x6B,0x51,0x67,0x6C,0xE9,0x00,0xF4,0x01,0x59,0x02,0x61,0x00,0xF4,
-0x00,0x6A,0xFF,0xF7,0x1F,0x69,0x4C,0xE9,0x0E,0x92,0xFF,0x6C,0xFF,0x4A,0x8C,0xEA,
-0x04,0x5A,0x28,0x61,0x47,0xB0,0x00,0x6A,0x7D,0x67,0x06,0xD2,0x0C,0xCB,0xE0,0xF7,
-0x1F,0x6A,0x4C,0xE9,0x44,0xB3,0x06,0x92,0x80,0xF4,0x20,0x34,0x01,0x6D,0x6C,0xEA,
-0x8D,0xEA,0x06,0xD2,0x00,0x6C,0x41,0xB2,0x04,0xD4,0x05,0xD4,0x9D,0x67,0x18,0x4C,
-0xC5,0x67,0x00,0x6F,0x07,0xD2,0x3F,0x10,0xE0,0xF7,0x1F,0x6A,0x8C,0xEA,0x88,0x67,
-0x80,0xF4,0x40,0x32,0x8C,0xEB,0x4D,0xEB,0x38,0xB2,0xFF,0x6D,0xEC,0xED,0x60,0xDE,
-0x41,0xDE,0x2B,0x10,0x0E,0x92,0x00,0x6D,0x91,0x67,0x40,0x33,0x34,0xB2,0x25,0x67,
-0x41,0xE3,0x7D,0x67,0x18,0x4B,0x30,0xB2,0x8B,0x65,0x32,0xB3,0x0A,0x65,0xFF,0xF7,
-0x1F,0x6A,0x6B,0x65,0xFF,0x6B,0x4A,0x65,0x2B,0x65,0x6C,0x67,0xAC,0x32,0x79,0xE2,
-0x20,0xDE,0x00,0xF1,0x01,0x5C,0x00,0xCE,0x21,0xDE,0x60,0x9E,0xE1,0x45,0xD4,0x61,
-0x48,0x67,0x6C,0xEA,0xA9,0x67,0x6B,0x67,0x6D,0xEA,0x80,0x4C,0xEC,0xED,0x40,0xDE,
-0x80,0x4C,0x4A,0x67,0x04,0x5D,0x4C,0xEC,0xE8,0x61,0x00,0x6F,0x9D,0x67,0x04,0xD7,
-0x05,0xD7,0x18,0x4C,0x01,0x6E,0x00,0x18,0xF7,0x33,0x00,0x65,0x0E,0x10,0x02,0x6C,
-0x01,0x6D,0x00,0x18,0x1C,0x80,0x00,0x6E,0x08,0x10,0x14,0x93,0x16,0x92,0x80,0xAB,
-0x00,0x18,0xFA,0x8B,0xA0,0xA2,0x01,0x6A,0x01,0x10,0x00,0x6A,0x12,0x97,0x11,0x91,
-0x10,0x90,0x00,0xEF,0x0A,0x63,0x00,0x00,0x38,0x91,0x10,0x80,0x6C,0x1D,0x11,0x80,
-0x2C,0x00,0x00,0xB5,0x48,0x91,0x10,0x80,0x44,0x91,0x10,0x80,0x32,0x97,0x79,0x23,
-0x78,0xA0,0x00,0xB0,0x01,0x00,0xA5,0x01,0xAE,0x23,0x87,0x54,0xD0,0x00,0x11,0x80,
-0xDC,0x00,0x11,0x80,0x88,0x07,0x11,0x80,0x01,0x91,0x02,0x80,0x14,0xA1,0x11,0x80,
-0x00,0xF8,0x10,0x80,0xFF,0xFF,0x03,0xE0,0x00,0x00,0x00,0x80,0x00,0xFB,0x10,0x80,
-0x00,0x00,0x00,0x04,0x03,0xB2,0x00,0x6B,0x60,0xDA,0x20,0xE8,0x00,0x65,0x00,0x00,
-0x04,0x60,0x00,0xB0,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x40,0xAC,0x01,0xF4,
-0x03,0x72,0x2C,0x61,0x80,0x18,0x53,0x2A,0x00,0x69,0x80,0x18,0x45,0x2B,0x00,0x65,
-0x16,0xB2,0x08,0xF1,0x11,0x6B,0x6B,0xEB,0x60,0xCA,0x15,0xB2,0x91,0x67,0x20,0xDA,
-0x14,0xB2,0x20,0x18,0x83,0x39,0x20,0xDA,0x14,0xB2,0x15,0xB0,0xB1,0x67,0x80,0xF1,
-0x62,0xA2,0x90,0x67,0x30,0x6E,0x68,0x32,0x69,0xE2,0x0F,0xB3,0x44,0x32,0x00,0x18,
-0x64,0x2E,0x40,0xCB,0x01,0x6A,0x4B,0xEA,0x47,0xD8,0x0E,0xB3,0x40,0x98,0x0E,0xB4,
-0xB1,0x67,0x6D,0xEA,0x40,0xD8,0x00,0x18,0x64,0x2E,0x0C,0x6E,0x06,0x97,0x05,0x91,
-0x04,0x90,0x00,0x6A,0x00,0xEF,0x04,0x63,0x18,0xA1,0x11,0x80,0x1C,0xA1,0x11,0x80,
-0x20,0xA1,0x11,0x80,0x14,0xA1,0x11,0x80,0xDC,0x00,0x11,0x80,0xD8,0xA0,0x11,0x80,
-0x00,0x00,0x00,0x70,0x08,0xA1,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,
-0xFF,0xF7,0x1F,0x6A,0xCC,0xEA,0x02,0x74,0x0A,0xD4,0x0B,0xD5,0x0D,0xD7,0x04,0xD2,
-0x0D,0x61,0x33,0xB2,0x03,0x6B,0x40,0x9A,0x42,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,
-0x05,0x61,0x30,0xB3,0x40,0x9B,0xC0,0xF7,0x42,0x32,0xFC,0x2A,0x0A,0x93,0x04,0x73,
-0x3A,0x61,0x0B,0x95,0xFF,0x6C,0x44,0x67,0x60,0xA5,0x6C,0xEA,0x10,0x72,0x0A,0x61,
-0x42,0xA5,0x8C,0xEA,0x02,0x72,0x06,0x61,0x27,0xB2,0x00,0x18,0xE0,0x1D,0x81,0x9A,
-0x00,0x6A,0x3E,0x10,0xFF,0x6A,0x6C,0xEA,0x02,0x72,0x01,0x6D,0x04,0x60,0x22,0x72,
-0x02,0x60,0x2F,0x72,0x20,0x61,0xFF,0x6C,0x44,0x67,0x6C,0xEA,0x2F,0x72,0x01,0x6A,
-0x03,0x60,0x0B,0x93,0x42,0xA3,0x8C,0xEA,0xFF,0x6E,0x6F,0x42,0xCC,0xEB,0xCA,0xEB,
-0x12,0x60,0xE6,0x67,0x01,0x68,0x0B,0x92,0x06,0x4D,0xCC,0xED,0xB1,0xE2,0x42,0xA4,
-0xCC,0xEA,0x03,0x5A,0x01,0x61,0x02,0xC4,0xFF,0x4B,0xEC,0xEB,0xFF,0x6E,0x08,0x4D,
-0xCA,0xEB,0xEC,0xED,0xF0,0x61,0x00,0x1C,0xDD,0x31,0x00,0x65,0x0F,0xB1,0x02,0x67,
-0x40,0xA1,0x05,0x22,0x00,0x18,0x43,0x30,0x00,0x65,0x00,0x6A,0x40,0xC1,0x00,0x1C,
-0xE5,0x31,0x90,0x67,0x0A,0x94,0x0B,0x95,0x04,0x96,0x00,0x18,0xCA,0x1E,0x0D,0x97,
-0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x00,0x00,0x6C,0x1D,0x11,0x80,
-0x1C,0xA3,0x00,0xB0,0x9C,0x31,0x11,0x80,0x17,0x00,0x11,0x80,0xFD,0x63,0x04,0x62,
-0x09,0xB2,0x0F,0x6B,0x40,0x9A,0x46,0x32,0x6C,0xEA,0x01,0x72,0x07,0x61,0x80,0x18,
-0xC0,0x28,0x00,0x65,0x03,0x22,0x00,0x18,0xA2,0x31,0x00,0x65,0x04,0x97,0x00,0xEF,
-0x03,0x63,0x00,0x00,0x6C,0x1D,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,
-0xFF,0xF7,0x1F,0x69,0x8C,0xE9,0x24,0x32,0x29,0xE2,0x4C,0x32,0x2B,0xE2,0x4C,0x32,
-0x18,0xB3,0x2B,0xE2,0x48,0x32,0x61,0xE2,0x5C,0x98,0x4F,0xEA,0x05,0x22,0x01,0x6A,
-0x00,0x6B,0x20,0xF2,0x5E,0xC0,0x1E,0x10,0x00,0x18,0x41,0x5E,0x91,0x67,0x04,0xD2,
-0x0C,0x6B,0x18,0x2A,0x5F,0x98,0x41,0xA2,0x44,0x72,0x14,0x60,0x00,0x18,0xA5,0x5E,
-0x91,0x67,0x06,0x22,0x00,0x18,0x69,0x5E,0x91,0x67,0x1F,0x6B,0x0B,0x22,0x05,0x10,
-0x00,0x18,0x80,0x49,0x91,0x67,0x62,0x67,0x05,0x10,0x91,0x67,0x20,0x18,0x13,0x26,
-0x0E,0x6D,0x04,0x93,0x08,0x97,0x07,0x91,0x06,0x90,0x43,0x67,0x00,0xEF,0x05,0x63,
-0x48,0x60,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x03,0x44,0x90,0x67,
-0x00,0x18,0xF2,0x5A,0x0B,0xD5,0x22,0x67,0x1A,0x65,0x1E,0x2A,0xBD,0x67,0x90,0x67,
-0x00,0x18,0x07,0xDF,0x10,0x4D,0x7D,0x67,0x48,0xAB,0x0B,0x93,0xFF,0xF7,0x1F,0x6D,
-0x40,0xCB,0x65,0x67,0x4C,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,
-0x6B,0xE2,0x09,0xB3,0x48,0x32,0x69,0xE2,0x20,0xF2,0x3E,0xC2,0x5D,0x67,0x88,0xAA,
-0x80,0x18,0xB6,0x2B,0xAC,0xEC,0x1A,0x65,0x08,0x97,0x07,0x91,0x06,0x90,0x58,0x67,
-0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,
-0x20,0xB0,0x00,0x6A,0x04,0xD2,0x40,0x98,0x01,0x69,0xC0,0xF6,0x42,0x32,0x2C,0xEA,
-0x09,0x22,0x00,0x18,0x4F,0x9A,0x06,0xD4,0x04,0xD1,0x40,0x98,0x1A,0xB3,0x6C,0xEA,
-0x40,0xD8,0x06,0x94,0x44,0xAC,0xFF,0xF7,0x1F,0x6B,0x06,0x72,0x19,0x61,0x40,0x9C,
-0x17,0x2A,0x45,0xAC,0x6C,0xEA,0x17,0x2A,0x41,0x9C,0x82,0x67,0x42,0x32,0x42,0x32,
-0x6C,0xEA,0x01,0xF0,0x0B,0x72,0x6C,0xEC,0x04,0x61,0x80,0x18,0xB6,0x2B,0x00,0x65,
-0x0A,0x10,0x01,0xF0,0x05,0x72,0x07,0x61,0x00,0x18,0x2C,0x48,0x00,0x65,0x03,0x10,
-0x00,0x18,0x74,0x56,0x00,0x65,0x04,0x92,0x05,0x22,0x06,0xB2,0x07,0xB4,0x60,0x9A,
-0x8D,0xEB,0x60,0xDA,0x0A,0x97,0x09,0x91,0x08,0x90,0x00,0xEF,0x06,0x63,0x00,0x00,
-0x54,0x45,0x11,0x80,0xFF,0xFF,0xFF,0xF7,0x00,0x00,0x00,0x08,0xF8,0x63,0x0E,0x62,
-0x0D,0xD1,0x0C,0xD0,0x39,0xB2,0x03,0x6E,0x40,0x9A,0x42,0x32,0x4A,0x32,0xCC,0xEA,
-0x01,0x72,0x61,0x61,0x44,0xAC,0xFF,0xF7,0x1F,0x69,0x07,0x72,0x11,0x61,0x60,0x9C,
-0xFF,0x6E,0x40,0xA3,0x03,0x72,0x57,0x61,0x42,0xA3,0xCC,0xEA,0x54,0x2A,0x43,0xA3,
-0x64,0xA3,0xCC,0xEA,0xCC,0xEB,0x60,0x33,0x6D,0xEA,0x2D,0xB3,0x40,0xCB,0x4B,0x10,
-0x08,0x72,0x49,0x61,0xA0,0x9C,0x60,0x9D,0x62,0x32,0x5A,0x32,0xCC,0xEA,0x2C,0x22,
-0xE1,0xF7,0x1F,0x6A,0x4C,0xEB,0x1C,0x73,0x27,0x61,0x26,0xB2,0x00,0x18,0xE0,0x1D,
-0x83,0x9A,0x00,0x18,0x6A,0x1E,0x00,0x65,0x23,0xB2,0x60,0xF1,0x47,0xA2,0x18,0x2A,
-0x22,0xB2,0x11,0x67,0xFF,0x6C,0x40,0xAA,0x1F,0x4C,0x4C,0xE8,0xFF,0xF7,0x0F,0x6A,
-0x4C,0xE8,0x00,0x18,0x9A,0x33,0xB0,0x67,0x00,0x18,0xE2,0xBF,0x00,0x65,0x10,0x6A,
-0x4D,0xE8,0xB0,0x67,0xFF,0x6C,0x1F,0x4C,0x00,0x18,0x9A,0x33,0x2C,0xED,0x1E,0x10,
-0x00,0x18,0xF7,0x4F,0x33,0x6C,0x1A,0x10,0x66,0x6A,0x7D,0x67,0x50,0xCB,0x14,0xB2,
-0xFD,0x67,0x06,0xD5,0x80,0x9A,0x00,0x6D,0x04,0x06,0x24,0x4F,0xA9,0xE7,0x40,0xA2,
-0xAD,0xE6,0x01,0x4D,0x08,0x5D,0x40,0xC3,0xF9,0x61,0x06,0x95,0x07,0x96,0x00,0x18,
-0x40,0x1E,0x08,0x97,0x03,0x10,0x00,0x18,0x64,0x8B,0x00,0x65,0x0E,0x97,0x0D,0x91,
-0x0C,0x90,0x00,0xEF,0x08,0x63,0x00,0x00,0x6C,0x1D,0x11,0x80,0x18,0xA1,0x11,0x80,
-0x9C,0x31,0x11,0x80,0x48,0x5C,0x11,0x80,0x1E,0x01,0x00,0xB6,0x84,0x21,0x11,0x80,
-0xFD,0x63,0x04,0x62,0x17,0xB2,0x03,0x6B,0xC4,0x67,0x40,0x9A,0x42,0x32,0x4A,0x32,
-0x6C,0xEA,0x01,0x72,0x1E,0x61,0x44,0xAC,0x66,0x72,0x1B,0x61,0xA0,0x9C,0xE1,0xF7,
-0x1F,0x6A,0xFF,0xF7,0x1F,0x6B,0x80,0x9D,0x4C,0xEC,0x0F,0xB2,0x40,0xAA,0x6C,0xEA,
-0x4E,0xEC,0x0F,0x2C,0x0D,0xB3,0x00,0x6A,0x00,0xF4,0x44,0xDD,0x40,0x9B,0x02,0x2A,
-0xA0,0xDB,0x04,0x10,0x0A,0xB2,0x40,0x9A,0x00,0xF4,0xA4,0xDA,0x08,0xB2,0xA0,0xDA,
-0x03,0x10,0x00,0x18,0x18,0x58,0x86,0x67,0x04,0x97,0x00,0xEF,0x03,0x63,0x00,0x00,
-0x6C,0x1D,0x11,0x80,0x18,0xA1,0x11,0x80,0x1C,0xA1,0x11,0x80,0x20,0xA1,0x11,0x80,
-0xFD,0x63,0x05,0x62,0x04,0xD0,0x0B,0xB0,0xE3,0xF7,0x1F,0x6B,0x7C,0x6C,0x40,0x98,
-0x01,0x6D,0x56,0x32,0x6C,0xEA,0x69,0x98,0x58,0xEB,0x12,0xEA,0x00,0x18,0xEB,0x9F,
-0x4A,0xD8,0x6B,0x98,0x05,0x97,0x4D,0xE3,0x6B,0xD8,0x04,0x90,0x00,0xEF,0x03,0x63,
-0xD8,0xA0,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,0x3B,0xB0,0xBD,0x67,
-0x10,0x4D,0x90,0xA0,0x4F,0xA0,0x80,0x34,0x4D,0xEC,0x4E,0xA0,0x80,0x34,0x00,0x18,
-0x3A,0xBA,0x4D,0xEC,0x7D,0x67,0x48,0xAB,0x8F,0xA0,0xFD,0x67,0x4C,0xCB,0x49,0xAB,
-0x4D,0xCB,0x6A,0xAB,0x03,0x6A,0x4C,0xEB,0x4E,0xA0,0x48,0x32,0x4D,0xEB,0x80,0x32,
-0x48,0x32,0x4D,0xEB,0x50,0xA0,0x6E,0xCF,0x70,0x80,0x48,0x32,0x9A,0x34,0x4D,0xEC,
-0x00,0x53,0x8F,0xCF,0x05,0x60,0x09,0xF4,0x00,0x6A,0x8D,0xEA,0x4F,0xCF,0x06,0x10,
-0x0A,0xF0,0x00,0x6A,0x4B,0xEA,0x8D,0xEA,0x7D,0x67,0x4F,0xCB,0x9D,0x67,0x10,0x4C,
-0xFF,0xF7,0x1F,0x6F,0x0F,0x6A,0x00,0x6E,0x2C,0x65,0x0F,0x65,0x01,0x69,0x4A,0x65,
-0x89,0x67,0xC4,0x30,0x89,0xE0,0x84,0xAA,0x00,0x6D,0xE8,0x67,0x65,0x67,0xEC,0xEC,
-0x44,0x67,0x47,0xEB,0x2C,0xEA,0x07,0x22,0xEA,0x67,0x6B,0xE7,0xF1,0x67,0xE4,0xEA,
-0xED,0xED,0x48,0x67,0x4C,0xED,0x01,0x4B,0xFF,0x6F,0xEC,0xEB,0x10,0x5B,0xF0,0x61,
-0x01,0x4E,0x69,0x67,0xEC,0xEE,0x69,0xE0,0x04,0x5E,0xA4,0xCA,0xE1,0x61,0xFD,0x67,
-0xCC,0xAF,0x51,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x5D,0x67,0xCD,0xAA,0x50,0x6C,
-0x00,0x18,0x01,0xA0,0x01,0x6D,0x7D,0x67,0xCE,0xAB,0x4F,0x6C,0x00,0x18,0x01,0xA0,
-0x01,0x6D,0xFD,0x67,0xCF,0xAF,0x4E,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x0A,0x97,
-0x09,0x91,0x08,0x90,0x00,0xEF,0x06,0x63,0xD8,0xA0,0x11,0x80,0xFB,0x63,0x08,0x62,
-0x07,0xD1,0x06,0xD0,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6B,
-0x04,0xD3,0x6C,0xEA,0xFF,0x6B,0x02,0x4B,0x6B,0xEB,0x6C,0xEA,0xFF,0x6B,0x01,0x4B,
-0xC2,0x67,0x6D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x51,0xB1,0x52,0xB3,
-0x07,0x68,0x41,0x99,0x51,0xB4,0x01,0x6D,0x4E,0x32,0x0C,0xEA,0x69,0xE2,0x60,0xA2,
-0x40,0x99,0x0C,0xEB,0x40,0xF6,0x60,0x33,0x8C,0xEA,0x6D,0xEA,0x57,0x6C,0x00,0x18,
-0xEB,0x9F,0x40,0xD9,0x04,0x93,0x57,0x6C,0x01,0x6D,0x4C,0xEB,0x71,0x6A,0x04,0xD3,
-0x4B,0xEA,0x4C,0xEB,0x40,0x99,0xC3,0x67,0x40,0xF6,0x42,0x32,0x0C,0xEA,0x50,0x32,
-0x00,0x18,0x01,0xA0,0x4D,0xEE,0x40,0x99,0x01,0x6B,0x03,0x67,0x6C,0xEA,0x06,0x22,
-0x41,0x99,0x80,0x6B,0x6C,0xEA,0x01,0x5A,0x18,0x67,0x02,0x48,0x56,0x6C,0x00,0x18,
-0xEB,0x9F,0x01,0x6D,0x00,0x36,0x37,0xB0,0xFF,0xF7,0x1F,0x69,0x1C,0xF0,0x00,0x6B,
-0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0x60,0x98,0xE3,0xF7,0x1F,0x6C,0xD8,0x36,0x76,0x33,
-0x8C,0xEB,0x6D,0xEE,0xFB,0xF7,0x1F,0x6B,0x6C,0xEE,0x4D,0xEE,0x56,0x6C,0x00,0x18,
-0x01,0xA0,0x01,0x6D,0x47,0xA0,0xC6,0xA0,0x58,0x6C,0x40,0x32,0x4D,0xEE,0x00,0x18,
-0x01,0xA0,0x01,0x6D,0x59,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xC8,0xA0,0x04,0x6B,
-0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0x03,0x6B,0x6C,0xEE,0x4D,0xEE,0x59,0x6C,0x00,0x18,
-0x01,0xA0,0x01,0x6D,0x80,0x18,0x7D,0x2C,0x00,0x65,0x40,0x98,0xC0,0xF7,0x42,0x32,
-0x24,0x22,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x81,0x6B,0x2C,0xEA,0x6B,0xEB,
-0x6C,0xEA,0xC2,0x67,0x80,0x6B,0x6D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,
-0x59,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x4C,0xE9,0xE0,0xF1,0x1D,0x6A,0x4B,0xEA,
-0x4C,0xE9,0x45,0xA0,0xFF,0x6B,0xD1,0x67,0x6C,0xEA,0x48,0x32,0xE0,0xF1,0x1C,0x6B,
-0x6C,0xEA,0x59,0x6C,0x01,0x6D,0x4D,0xEE,0x0B,0x10,0x57,0x6C,0x00,0x18,0xEB,0x9F,
-0x01,0x6D,0x4C,0xE9,0x81,0x6A,0x4B,0xEA,0xD1,0x67,0x57,0x6C,0x01,0x6D,0x4C,0xEE,
-0x00,0x18,0x01,0xA0,0x00,0x65,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,
-0xD8,0xA0,0x11,0x80,0x78,0xDB,0x10,0x80,0xFF,0xFF,0xFF,0xF1,0xFB,0x63,0x08,0x62,
-0x07,0xD1,0x06,0xD0,0x0F,0xB1,0xFF,0x68,0x8C,0xE8,0x47,0x99,0x4F,0xEA,0x04,0x22,
-0x87,0x41,0x00,0x18,0xFD,0x1D,0x15,0x4C,0x0E,0x20,0x0B,0xB6,0x00,0x68,0xA7,0x41,
-0x01,0x6C,0x15,0x4D,0xF0,0x67,0x00,0x18,0xF3,0x1D,0x04,0xD0,0x87,0x99,0x00,0x18,
-0x0C,0x1E,0x14,0x6D,0x10,0xC9,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,
-0xD8,0xA0,0x11,0x80,0x85,0xB5,0x10,0x80,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,
-0x00,0x6C,0x02,0xF0,0x00,0x6E,0x00,0x18,0x01,0xA0,0xA4,0x67,0x2D,0xB2,0x3C,0x6C,
-0x00,0x6D,0xC0,0x9A,0x7F,0x6A,0xFF,0xF7,0x1F,0x68,0x80,0xF4,0xC2,0x36,0x4C,0xEE,
-0xC4,0x36,0xFF,0x6A,0x01,0x4E,0x4C,0xEE,0x00,0x18,0x01,0xA0,0xC0,0x36,0x57,0x6C,
-0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xEA,0x01,0xF6,0x01,0x69,0x2B,0xE9,0xC2,0x67,
-0x2C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x57,0x6C,0x00,0x18,0xEB,0x9F,
-0x01,0x6D,0x0C,0xEA,0x2C,0xEA,0x01,0xF6,0x00,0x6B,0xC2,0x67,0x6D,0xEE,0x57,0x6C,
-0x00,0x18,0x01,0xA0,0x01,0x6D,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xEA,
-0x03,0x69,0x2B,0xE9,0xC2,0x67,0x2C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,
-0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xEA,0x2C,0xEA,0x02,0x6B,0xC2,0x67,
-0x6D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x57,0x6C,0x00,0x18,0xEB,0x9F,
-0x01,0x6D,0x4C,0xE8,0xD0,0x67,0x2C,0xEE,0x01,0x6D,0x00,0x18,0x01,0xA0,0x57,0x6C,
-0x80,0x18,0x1B,0x2D,0x01,0x6C,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0xEF,0x04,0x63,
-0xD8,0xA0,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x1A,0xB2,0x06,0xD4,0x47,0x9A,
-0x8E,0xEA,0x05,0x22,0x8F,0xEA,0x03,0x22,0x00,0x18,0xFD,0x1D,0x06,0x04,0x15,0xB0,
-0x42,0x6B,0x41,0x98,0x6C,0xEA,0x6A,0xEA,0x08,0x60,0x47,0x98,0x4F,0xEA,0x1C,0x22,
-0x87,0x40,0x00,0x18,0xFD,0x1D,0x15,0x4C,0x17,0x10,0x7D,0x6C,0x00,0x18,0xEB,0x9F,
-0x01,0x6D,0x02,0x6E,0x4C,0xEE,0x04,0x26,0x50,0xA8,0x01,0x4A,0x50,0xC8,0x0C,0x10,
-0x86,0x67,0x00,0x18,0x01,0xA0,0xA6,0x67,0x49,0x98,0x01,0x4A,0x80,0x18,0x70,0x2C,
-0x49,0xD8,0x80,0x18,0x2E,0x2D,0x00,0x65,0x05,0x97,0x04,0x90,0x00,0xEF,0x03,0x63,
-0xD8,0xA0,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x00,0x6C,0xC4,0x67,0x00,0x18,
-0x01,0xA0,0xA4,0x67,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,
-0x4C,0xEE,0xFF,0x6A,0x04,0x4A,0x4B,0xEA,0x4C,0xEE,0x01,0x6D,0x00,0x18,0x01,0xA0,
-0x57,0x6C,0x0A,0xB0,0x41,0x6B,0x6B,0xEB,0x41,0x98,0x00,0x6C,0x6C,0xEA,0x80,0x18,
-0x1B,0x2D,0x41,0xD8,0x80,0x18,0x70,0x2C,0x00,0x65,0x00,0x6A,0x49,0xC0,0x05,0x97,
-0x04,0x90,0x00,0xEF,0x03,0x63,0x00,0x00,0xD8,0xA0,0x11,0x80,0xFD,0x63,0x04,0x62,
-0x80,0x18,0xBB,0x2C,0x00,0x65,0x0D,0xB3,0x00,0x6A,0x59,0x6C,0x4B,0xDB,0x49,0xDB,
-0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x00,0xF2,0x01,0x6A,
-0x4B,0xEA,0x59,0x6C,0x01,0x6D,0x00,0x18,0x01,0xA0,0x4C,0xEE,0x80,0x18,0x2E,0x2D,
-0x00,0x65,0x04,0x97,0x00,0xEF,0x03,0x63,0xD8,0xA0,0x11,0x80,0xFD,0x63,0x04,0x62,
-0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x02,0xF1,
-0x01,0x6A,0x4B,0xEA,0x4C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x00,0x6C,
-0xA4,0x67,0x00,0x18,0x01,0xA0,0xC4,0x67,0x06,0xB4,0x41,0x6B,0x6B,0xEB,0x41,0x9C,
-0x04,0x97,0x6C,0xEA,0x41,0xDC,0x00,0x6A,0x49,0xC4,0x00,0xEF,0x03,0x63,0x00,0x00,
-0xD8,0xA0,0x11,0x80,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x80,0x18,0xBB,0x2C,
-0x00,0x65,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x69,0x02,0xF0,
-0x01,0x6B,0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0x02,0xF0,0x00,0x68,0xC2,0x67,0x0D,0xEE,
-0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x59,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,
-0x2C,0xEA,0x00,0xF2,0x01,0x6B,0x6B,0xEB,0xC2,0x67,0x6C,0xEE,0x59,0x6C,0x00,0x18,
-0x01,0xA0,0x01,0x6D,0x00,0x6C,0xD0,0x67,0x00,0x18,0x01,0xA0,0xA4,0x67,0x28,0xB2,
-0x03,0x6C,0x00,0x6D,0x00,0x9A,0x07,0x6A,0x00,0xF7,0x02,0x30,0x00,0x18,0xEB,0x9F,
-0x4C,0xE8,0x2C,0xEA,0x1F,0xF4,0x01,0x6B,0x6B,0xEB,0x6C,0xEA,0x21,0xB3,0x05,0x48,
-0x1F,0xF4,0x00,0x6C,0x61,0xE0,0x20,0xF1,0x7A,0xA0,0xC2,0x67,0x00,0x6D,0x60,0x33,
-0x68,0x33,0x8C,0xEB,0x6D,0xEE,0x00,0x18,0x01,0xA0,0x03,0x6C,0x18,0xB3,0x7F,0x6A,
-0x3C,0x6C,0xC0,0x9B,0x00,0x6D,0x01,0x68,0x80,0xF4,0xC2,0x36,0x4C,0xEE,0xC4,0x36,
-0xFF,0x6A,0x06,0x4E,0x4C,0xEE,0x00,0x18,0x01,0xA0,0xC0,0x36,0x57,0x6C,0x00,0x18,
-0xEB,0x9F,0x01,0x6D,0x02,0x6B,0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0xC2,0x67,0x0D,0xEE,
-0xB0,0x67,0x00,0x18,0x01,0xA0,0x57,0x6C,0xB0,0x67,0x00,0x18,0xEB,0x9F,0x57,0x6C,
-0x02,0x6E,0x4C,0xE9,0xCB,0xEE,0xB0,0x67,0x2C,0xEE,0x00,0x18,0x01,0xA0,0x57,0x6C,
-0x06,0x97,0x05,0x91,0x04,0x90,0x00,0xEF,0x04,0x63,0x00,0x00,0xD8,0xA0,0x11,0x80,
-0xDC,0x00,0x11,0x80,0xFD,0x63,0x04,0x62,0x7F,0xF7,0x0F,0x6D,0x00,0x18,0x5D,0xBA,
-0x5E,0x6C,0x0E,0xB2,0xFF,0xF6,0x1F,0x6D,0x00,0x18,0x5D,0xBA,0x81,0xA2,0xFF,0x6D,
-0xD8,0x6C,0x00,0x18,0x9A,0x33,0x08,0x4D,0xFF,0x6C,0x09,0x4C,0x00,0x18,0x9A,0x33,
-0x00,0x6D,0x07,0xB4,0x41,0x6B,0x6B,0xEB,0x41,0x9C,0x04,0x97,0x6C,0xEA,0x41,0xDC,
-0x00,0x6A,0x49,0xC4,0x00,0xEF,0x03,0x63,0x30,0xF4,0x04,0x80,0xD8,0xA0,0x11,0x80,
-0xF7,0x63,0x10,0x62,0x0F,0xD1,0x0E,0xD0,0x72,0xB5,0x73,0xB3,0x07,0x6C,0xC0,0x9D,
-0xFF,0xF7,0x1F,0x6F,0xC0,0x32,0x58,0x32,0x80,0xF5,0x42,0x31,0x41,0x9D,0x4E,0x32,
-0x8C,0xEA,0x69,0xE2,0x60,0xA2,0x6D,0xB2,0x8C,0xEB,0x40,0xF6,0x60,0x33,0xCC,0xEA,
-0x6D,0xEA,0x40,0xF6,0x42,0x33,0x40,0xDD,0xFF,0x6E,0x8C,0xEB,0x61,0x21,0x51,0x67,
-0xEC,0xE9,0x00,0xF4,0x01,0x59,0x02,0x61,0x00,0xF4,0x00,0x6A,0x27,0x67,0x4C,0xE9,
-0x4F,0x43,0xCC,0xEA,0x04,0x5A,0x23,0x61,0x61,0xB0,0x00,0x6F,0x5D,0x67,0x06,0xD7,
-0x0C,0xCA,0x06,0x92,0x5F,0xB3,0x80,0xF4,0x20,0x34,0x01,0x6D,0x6C,0xEA,0x8D,0xEA,
-0x06,0xD2,0x5D,0xB2,0x9D,0x67,0x18,0x4C,0xC5,0x67,0x07,0xD2,0x04,0xD7,0x05,0xD7,
-0x3C,0x10,0xE0,0xF7,0x1F,0x6A,0x4C,0xEB,0x49,0x67,0x80,0xF4,0x60,0x33,0xCC,0xEA,
-0x6D,0xEA,0x40,0xDC,0x54,0xB2,0xFF,0x6D,0xEC,0xED,0x41,0xDC,0x28,0x10,0x53,0xB2,
-0x60,0x33,0x00,0x6D,0x41,0xE3,0x5D,0x67,0x18,0x4A,0xAA,0x65,0x4D,0xB2,0x71,0x67,
-0x0D,0x65,0x2A,0x65,0x4E,0xB2,0x6F,0x65,0x4E,0x65,0x8A,0x65,0xAC,0x32,0xCD,0x67,
-0xD1,0xE2,0x48,0x67,0x40,0xDC,0x00,0xF1,0x01,0x5B,0x00,0xCC,0x41,0xDC,0xC0,0x9C,
-0xE1,0x45,0xD7,0x61,0x49,0x67,0xCC,0xEA,0xAC,0x67,0xAD,0xEA,0xAA,0x67,0x80,0x4B,
-0xEC,0xED,0x80,0x4B,0xCB,0x67,0x04,0x5D,0x40,0xDC,0xCC,0xEB,0xE7,0x61,0x00,0x6F,
-0x9D,0x67,0x04,0xD7,0x05,0xD7,0x18,0x4C,0x01,0x6E,0x00,0x18,0xF7,0x33,0x00,0x65,
-0x34,0xB2,0xC4,0x6C,0xA0,0x9A,0x7F,0x6A,0x80,0xF4,0xA2,0x35,0x4C,0xED,0xA0,0x32,
-0x00,0x18,0x9A,0x33,0x4D,0xED,0x5E,0x6C,0x00,0x18,0x78,0xBA,0x60,0x6D,0x35,0xB2,
-0x35,0xB0,0x2C,0xB3,0x81,0xA2,0x01,0xF4,0x00,0x6D,0x09,0xE4,0x40,0xAA,0x4C,0xED,
-0x40,0x9B,0x0F,0x6B,0x46,0x32,0x6C,0xEA,0x40,0x32,0x50,0x32,0x4D,0xED,0x00,0x18,
-0x9A,0x33,0x2D,0xED,0x2D,0xB2,0x23,0xB6,0xEE,0xF1,0x1F,0x6D,0x21,0xA2,0x60,0x9E,
-0x01,0xE1,0x40,0xA8,0x07,0x68,0x91,0x67,0x4C,0xED,0x01,0x6A,0x6C,0xEA,0x00,0xF7,
-0x62,0x33,0x0C,0xEB,0x40,0x32,0x5C,0x32,0x60,0x33,0x64,0x33,0x4D,0xED,0x00,0x18,
-0x9A,0x33,0x6D,0xED,0x17,0xB2,0x01,0x6C,0xA0,0x9A,0x00,0xF7,0xA2,0x35,0x00,0x18,
-0x68,0x91,0x0C,0xED,0x13,0xB3,0x01,0x6C,0xA0,0x9B,0x00,0xF7,0xA2,0x35,0x00,0x18,
-0x82,0x91,0x0C,0xED,0x5E,0x6C,0x00,0x18,0x78,0xBA,0x90,0x6D,0xFF,0x6D,0x91,0x67,
-0x00,0x18,0x78,0xBA,0x01,0x4D,0xFF,0x6C,0x09,0x4C,0x00,0x18,0x9A,0x33,0x03,0x6D,
-0xFF,0x6D,0xD8,0x6C,0x00,0x18,0x9A,0x33,0x08,0x4D,0xFE,0xF7,0x1F,0x6D,0x00,0x18,
-0x5D,0xBA,0x5E,0x6C,0x10,0x97,0x0F,0x91,0x0E,0x90,0x00,0xEF,0x09,0x63,0x00,0x00,
-0xD8,0xA0,0x11,0x80,0x80,0xDB,0x10,0x80,0xFF,0xFF,0xFF,0xF1,0x00,0xF8,0x10,0x80,
-0xFF,0xFF,0x03,0xE0,0x00,0x00,0x00,0x80,0x00,0xFB,0x10,0x80,0x00,0x00,0x00,0x04,
-0x38,0xF4,0x04,0x80,0x00,0x00,0x00,0xB6,0x30,0xF4,0x04,0x80,0xE0,0x63,0x3F,0x62,
-0x3E,0xD0,0x0F,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x00,0x68,
-0x7D,0x67,0x04,0xF0,0x1F,0x6A,0x9D,0x67,0x12,0xC3,0x48,0xCB,0x00,0x18,0xEC,0xC6,
-0x10,0x4C,0x08,0xB4,0x04,0x63,0x41,0x6B,0x41,0x9C,0x09,0xC4,0x3F,0x97,0x3E,0x90,
-0x6B,0xEB,0x6C,0xEA,0x41,0xDC,0x00,0xEF,0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,
-0xD8,0xA0,0x11,0x80,0xE0,0x63,0x3E,0x62,0x18,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,
-0x64,0x2E,0x08,0x6E,0x16,0xB5,0x17,0xB3,0x07,0x6E,0x41,0x9D,0x16,0xB4,0x4E,0x32,
-0xCC,0xEA,0x69,0xE2,0x40,0xA2,0x60,0x9D,0xCC,0xEA,0x40,0xF6,0x40,0x32,0x8C,0xEB,
-0x4D,0xEB,0x9D,0x67,0x04,0xF0,0x1E,0x6A,0x60,0xDD,0x48,0xCC,0x03,0x6A,0x52,0xC4,
-0x80,0xF4,0x62,0x32,0x7F,0x6C,0x8C,0xEA,0x9D,0x67,0x53,0xC4,0x62,0x32,0x40,0xF6,
-0x62,0x33,0xCC,0xEB,0x75,0xC4,0x54,0xC4,0x00,0x18,0xAA,0xC6,0x10,0x4C,0x04,0x63,
-0x3E,0x97,0x00,0xEF,0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,0xD8,0xA0,0x11,0x80,
-0x70,0xDB,0x10,0x80,0xFF,0xFF,0xFF,0xF1,0xE0,0x63,0x3E,0x62,0x3D,0xD1,0x3C,0xD0,
-0x11,0xB4,0xFB,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x7D,0x67,0x04,0xF0,
-0x1F,0x6A,0x48,0xCB,0x0D,0xB2,0x0E,0xB0,0x00,0x69,0xA1,0xF1,0x48,0xAA,0x9D,0x67,
-0x32,0xC3,0x49,0xD8,0x00,0x18,0xEC,0xC6,0x10,0x4C,0x41,0x98,0x41,0x6B,0x6B,0xEB,
-0x05,0x63,0x6C,0xEA,0x29,0xC0,0x41,0xD8,0x3E,0x97,0x3D,0x91,0x3C,0x90,0x00,0xEF,
-0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,0x58,0x46,0x11,0x80,0xD8,0xA0,0x11,0x80,
-0xE0,0x63,0x3E,0x62,0x0E,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,
-0x7D,0x67,0x04,0xF0,0x1D,0x6A,0x48,0xCB,0x01,0x6A,0x52,0xC3,0x09,0xB2,0x7F,0x6B,
-0x9D,0x67,0x40,0x9A,0x10,0x4C,0x80,0xF4,0x42,0x32,0x6C,0xEA,0x7D,0x67,0x00,0x18,
-0x7C,0xC6,0x53,0xC3,0x04,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0x76,0x5D,0x11,0x80,
-0xD8,0xA0,0x11,0x80,0xE0,0x63,0x3E,0x62,0x24,0xB4,0xFC,0x63,0x08,0x6E,0x00,0x18,
-0x64,0x2E,0x00,0x6D,0x7D,0x67,0x04,0xF0,0x0D,0x6A,0x48,0xCB,0x19,0x6A,0x00,0x6C,
-0x52,0xC3,0x60,0x6A,0x4B,0xEA,0x53,0xC3,0x94,0xC3,0x55,0xC3,0x96,0xC3,0x97,0xC3,
-0x98,0xC3,0x1B,0xB3,0xBD,0x67,0x9F,0xC5,0x54,0xA3,0x20,0xF0,0x80,0xC5,0x20,0xF0,
-0x82,0xC5,0x59,0xC5,0x55,0xA3,0x20,0xF0,0x84,0xC5,0x20,0xF0,0x85,0xC5,0x5A,0xC5,
-0x56,0xA3,0x20,0xF0,0x87,0xC5,0x20,0xF0,0x89,0xC5,0x5B,0xC5,0x57,0xA3,0x5C,0xC5,
-0x58,0xA3,0x5D,0xC5,0x59,0xA3,0x5E,0xC5,0x02,0x6A,0x20,0xF0,0x41,0xC5,0x20,0xF0,
-0x43,0xC5,0x1E,0x6A,0x20,0xF0,0x46,0xC5,0x12,0x6A,0x20,0xF0,0x48,0xC5,0x20,0xF0,
-0x4A,0xC5,0x20,0xF0,0x8B,0xC5,0x9D,0x67,0x00,0x18,0xFC,0xC2,0x10,0x4C,0x04,0x63,
-0x3E,0x97,0x00,0xEF,0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,0xD8,0xA0,0x11,0x80,
-0xE0,0x63,0x3E,0x62,0x1A,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,
-0x7D,0x67,0x04,0xF0,0x06,0x6A,0x48,0xCB,0x0F,0x6A,0x9D,0x67,0x52,0xC3,0x00,0x6A,
-0x54,0xC4,0x56,0xC4,0x57,0xC4,0x58,0xC4,0x59,0xC4,0x5A,0xC4,0x5B,0xC4,0x5C,0xC4,
-0x5D,0xC4,0x5E,0xC4,0x5F,0xC4,0x07,0x6A,0x20,0x6B,0x20,0xF0,0x40,0xC4,0x03,0x6A,
-0x73,0xC4,0x75,0xC4,0x20,0xF0,0x41,0xC4,0x00,0x18,0xA8,0xC1,0x10,0x4C,0x7D,0x67,
-0x04,0xF0,0x0A,0x6A,0x48,0xCB,0x9D,0x67,0x01,0x6A,0x52,0xC3,0x53,0xC3,0x00,0x18,
-0x5E,0xC2,0x10,0x4C,0x04,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0x76,0x5D,0x11,0x80,
-0xE0,0x63,0x3E,0x62,0xFB,0x63,0x7D,0x67,0x00,0xF4,0x06,0x6A,0x48,0xCB,0x03,0x6A,
-0x52,0xC3,0x13,0x6A,0x55,0xC3,0x26,0xB2,0x6D,0xA2,0x08,0x73,0x22,0x60,0x70,0x32,
-0x69,0xE2,0x24,0xB6,0x48,0x32,0x6B,0xE2,0x48,0x32,0xD1,0xE2,0x20,0xF1,0x4F,0xA4,
-0x01,0x6D,0xAC,0xEA,0x16,0x22,0x00,0xF1,0x52,0xAE,0x47,0xEB,0xAC,0xEA,0x11,0x22,
-0x20,0xF1,0x6C,0xAC,0xFF,0xF7,0x1F,0x6A,0x9D,0x67,0x4C,0xEB,0x5D,0x67,0x73,0xC2,
-0xBD,0x67,0x62,0x32,0x7D,0x67,0x54,0xC3,0x00,0xF1,0x18,0x4D,0x00,0x18,0xD2,0x48,
-0x10,0x4C,0x13,0xB2,0x6C,0xA2,0x0A,0x73,0x1D,0x60,0x64,0x32,0x69,0xE2,0x4C,0x32,
-0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x10,0xB3,0x48,0x32,0x71,0xE2,0xE0,0xF0,0x4B,0xA4,
-0xFF,0x6B,0x6C,0xEA,0x01,0x72,0x0E,0x61,0x60,0xF2,0x7C,0xAC,0x5D,0x67,0x9D,0x67,
-0x73,0xC2,0xBD,0x67,0x62,0x32,0x7D,0x67,0x54,0xC3,0x00,0xF1,0x18,0x4D,0x00,0x18,
-0xD2,0x48,0x10,0x4C,0x05,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0xD8,0xA0,0x11,0x80,
-0x58,0x46,0x11,0x80,0x48,0x60,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x12,0xB0,
-0x00,0x6A,0xFF,0x6D,0xC0,0xF1,0x46,0xC0,0xC0,0xF1,0x5A,0xC0,0x03,0x6A,0xC0,0xF1,
-0x58,0xC0,0x0E,0xB2,0x02,0x6B,0xAC,0xEC,0xC0,0xF1,0x65,0xC0,0xC0,0xF1,0x64,0xC0,
-0xC0,0xF1,0x79,0xC0,0x40,0xF1,0x9E,0xC0,0x60,0xC2,0x00,0x18,0xEB,0xA4,0xAC,0xEC,
-0x20,0xF1,0x8E,0x40,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x05,0x97,0x04,0x90,
-0x00,0xEF,0x03,0x63,0x48,0x5C,0x11,0x80,0xBD,0x5B,0x11,0x80,0xE0,0x63,0x3E,0x62,
-0x3D,0xD1,0x3C,0xD0,0xF5,0x63,0x7D,0x67,0x00,0xF4,0x05,0x6A,0x7E,0xB5,0x54,0xCB,
-0x9D,0x67,0x0D,0x6A,0x20,0xF0,0x4A,0xC3,0x2B,0x4C,0x00,0x18,0x2E,0x2E,0x06,0x6E,
-0x7A,0xB0,0x00,0x6A,0x9D,0x67,0x01,0x6B,0x20,0xF0,0x51,0xC4,0x20,0xF0,0x52,0xC4,
-0x20,0xF0,0x73,0xC4,0x20,0xF0,0x54,0xC4,0x20,0xF0,0x55,0xC4,0x20,0xF0,0x56,0xC4,
-0x20,0xF0,0x77,0xC4,0xC0,0xF1,0x46,0xC0,0xC0,0xF1,0x5A,0xC0,0x03,0x6A,0xC0,0xF1,
-0x58,0xC0,0x6F,0xB2,0x02,0x6B,0xC0,0xF1,0x65,0xC0,0xC0,0xF1,0x64,0xC0,0xC0,0xF1,
-0x79,0xC0,0x20,0xF1,0x8E,0x40,0x60,0xC2,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,
-0x60,0xF1,0x4E,0xA0,0x02,0x72,0x07,0x60,0x03,0x52,0x02,0x60,0x01,0x72,0x01,0x10,
-0x03,0x72,0x15,0x61,0xAF,0x10,0x63,0xB5,0x00,0x6B,0xFF,0x6C,0x64,0x32,0x69,0xE2,
-0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x48,0x32,0xA9,0xE2,0x20,0xF0,0x58,0xA2,
-0x8C,0xEA,0x80,0xF0,0x1F,0x2A,0x01,0x4B,0x8C,0xEB,0x0A,0x5B,0xEF,0x61,0x00,0x18,
-0xD4,0x5A,0x0A,0x04,0x62,0x67,0x80,0xF0,0x1D,0x2A,0x0A,0x02,0x06,0x4A,0x64,0xA2,
-0xFF,0xF7,0x1F,0x6C,0xBD,0x67,0x60,0x33,0x4C,0xD3,0x43,0xA2,0x22,0x4D,0x4D,0xEB,
-0x8C,0xEB,0x4C,0xD3,0x5D,0x67,0x20,0xF0,0x53,0xA2,0x7D,0x67,0x4D,0xD2,0x20,0xF0,
-0x74,0xA3,0x0A,0x02,0x0A,0x4A,0x4E,0xD3,0x24,0xA2,0x43,0xA2,0x20,0x31,0x8C,0xE9,
-0x4D,0xE9,0x8C,0xE9,0x9D,0x67,0x20,0xF0,0x97,0xA4,0x4F,0xD4,0x9D,0x67,0x00,0x18,
-0x8E,0xDF,0x20,0x4C,0x50,0xD2,0x62,0x67,0x75,0x2A,0x5D,0x67,0x71,0xAA,0xFF,0xF7,
-0x1F,0x6C,0x3D,0xB5,0x8C,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,
-0x6B,0xE2,0x3C,0xB3,0x48,0x32,0x61,0xE2,0xE0,0xF0,0x8D,0x40,0x00,0x18,0x2E,0x2E,
-0x06,0x6E,0x5D,0x67,0x20,0xF1,0x50,0xAA,0x7D,0x67,0x9D,0x67,0x60,0xF2,0x5E,0xC8,
-0x20,0xF1,0x74,0xA3,0x5D,0x67,0xE0,0xF0,0x7A,0xC0,0x20,0xF1,0x98,0xA4,0x7D,0x67,
-0xE0,0xF0,0x9C,0xC0,0x20,0xF1,0x5C,0xA2,0xE0,0xF0,0x5D,0xC0,0x20,0xF0,0x40,0xA3,
-0xE0,0xF0,0x53,0xC0,0x01,0x6A,0x80,0xF2,0x42,0xC0,0x91,0xAB,0xFF,0xF7,0x1F,0x6A,
-0x00,0x18,0x45,0x95,0x4C,0xEC,0x7D,0x67,0x40,0xF1,0x60,0xA3,0x22,0x32,0x5E,0x32,
-0x00,0xF1,0x71,0xC0,0x18,0x22,0xEF,0xF7,0x1F,0x6A,0x4C,0xE9,0x01,0x6A,0x80,0xF0,
-0x3E,0xC8,0x04,0xD2,0x20,0xB2,0xFF,0xF7,0x1F,0x6C,0xFA,0x6D,0x05,0xD2,0x80,0xF0,
-0x5E,0xA8,0x24,0xF2,0x15,0x6E,0x20,0xF5,0x17,0x6F,0x8C,0xEA,0x06,0x6C,0x20,0x18,
-0x1B,0x32,0x06,0xD2,0x05,0x10,0x5D,0x67,0x40,0xF1,0x40,0xAA,0x80,0xF0,0x5E,0xC8,
-0x00,0x18,0x4E,0x9B,0x0A,0x04,0x22,0x67,0x0F,0x22,0x7D,0x67,0x20,0xF0,0x80,0xA3,
-0xE0,0xF0,0xA8,0xA0,0x00,0x18,0xB6,0xDF,0x00,0x65,0x0B,0xB4,0x00,0x18,0xD3,0xDF,
-0x00,0x65,0x07,0x10,0x0C,0x6B,0x06,0x10,0x5D,0x67,0x91,0xAA,0x20,0x18,0x13,0x26,
-0x01,0x6D,0x71,0x67,0x0B,0x63,0x3E,0x97,0x3D,0x91,0x3C,0x90,0x43,0x67,0x00,0xEF,
-0x20,0x63,0x00,0x00,0xEC,0xA0,0x11,0x80,0x48,0x5C,0x11,0x80,0xBD,0x5B,0x11,0x80,
-0x48,0x60,0x11,0x80,0xFC,0xA5,0x10,0x80,0xF4,0x63,0x16,0x62,0x15,0xD1,0x14,0xD0,
-0x00,0x6A,0x0B,0xD2,0x0C,0xD2,0x0D,0xD2,0x7D,0x67,0x01,0xF4,0x03,0x6A,0x18,0xD4,
-0x54,0xCB,0x62,0xA4,0x23,0xA4,0x02,0x6A,0x1E,0x5B,0xC0,0xF3,0x1B,0x60,0x04,0x0A,
-0x64,0x33,0x4D,0xE3,0x60,0x8B,0x4D,0xE3,0x00,0xEB,0x00,0x65,0x3D,0x00,0x49,0x00,
-0x9D,0x00,0x5B,0x02,0x07,0x03,0x47,0x03,0xD3,0x03,0xAB,0x07,0xF5,0x03,0x07,0x04,
-0x21,0x04,0x33,0x04,0x9D,0x06,0x9D,0x05,0x45,0x04,0x6D,0x05,0x85,0x05,0x9D,0x06,
-0xAD,0x05,0xBF,0x05,0xD1,0x05,0xFF,0x05,0x0B,0x06,0x21,0x06,0x2D,0x06,0x41,0x06,
-0x51,0x06,0x61,0x06,0x6D,0x06,0x7F,0x06,0xA0,0xF7,0x00,0xB2,0x03,0x6C,0x40,0xAA,
-0x0B,0xD2,0x0A,0x13,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,
-0x4C,0xEE,0x02,0xF1,0x03,0x6A,0x4B,0xEA,0x4C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,
-0x01,0x6D,0x00,0x6C,0xA4,0x67,0x00,0x18,0x01,0xA0,0xC4,0x67,0x80,0x18,0x1B,0x2D,
-0x00,0x6C,0x00,0x18,0xFE,0x4F,0x00,0x65,0x00,0x6D,0x9D,0x67,0x28,0x4C,0x80,0x18,
-0x49,0x2B,0xC5,0x67,0x40,0xF7,0x18,0xB3,0x0A,0x6A,0x4C,0xC3,0x08,0x6A,0x4D,0xC3,
-0x00,0x6A,0x49,0xC3,0x4A,0xC3,0x87,0x13,0x0B,0x59,0x18,0x67,0x60,0xF3,0x11,0x20,
-0x20,0xF7,0x1C,0xB4,0x05,0x21,0x41,0x9C,0x40,0x6B,0x6C,0xEA,0x07,0x22,0x53,0x13,
-0x41,0x9C,0x40,0x6B,0x6C,0xEA,0x02,0x2A,0x29,0xC4,0x75,0x13,0x20,0xF7,0x00,0xB3,
-0x04,0x6A,0x01,0x6C,0x29,0xC3,0x04,0xD2,0x00,0xF7,0x18,0xB2,0x06,0xD1,0xFA,0x6D,
-0x05,0xD2,0x4A,0xA3,0x43,0xF7,0x0A,0x6E,0xE1,0xF4,0x11,0x6F,0x07,0xD2,0x61,0x9B,
-0x6A,0x32,0x66,0xEC,0x8C,0xEA,0x8C,0xEB,0x08,0xD2,0x20,0x18,0x1B,0x32,0x09,0xD3,
-0xA0,0xF0,0x04,0x20,0x00,0xF0,0x10,0x0A,0x24,0x33,0x4D,0xE3,0x60,0x8B,0x4D,0xE3,
-0x00,0xEB,0x00,0x65,0x17,0x00,0x8D,0x00,0xB9,0x00,0xEF,0x00,0x0F,0x01,0x13,0x01,
-0x17,0x01,0x39,0x01,0x21,0x01,0x29,0x01,0x31,0x01,0xC0,0xF6,0x04,0xB2,0x61,0x9A,
-0x01,0x6A,0x6C,0xEA,0x0B,0x22,0x02,0x6A,0x6C,0xEA,0x04,0x22,0x80,0x18,0x7D,0x2D,
-0x00,0x65,0x15,0x10,0x80,0x18,0xA3,0x2D,0x00,0x65,0x11,0x10,0x02,0x6A,0x6C,0xEA,
-0x04,0x22,0x80,0x18,0xB6,0x2E,0x00,0x65,0x0A,0x10,0x04,0x6A,0x6C,0xEA,0x04,0x22,
-0x80,0x18,0x87,0x2E,0x00,0x65,0x03,0x10,0x80,0x18,0xF5,0x2D,0x00,0x65,0x80,0xF6,
-0x00,0xB0,0x8A,0x98,0x4B,0x98,0x29,0x98,0x0E,0xD4,0x00,0x18,0xFE,0x4F,0x0F,0xD2,
-0x00,0x6D,0x9D,0x67,0x28,0x4C,0x80,0x18,0x49,0x2B,0xC5,0x67,0x0E,0x93,0x0F,0x94,
-0x0A,0x6A,0x4C,0xC0,0x08,0x6A,0x4D,0xC0,0x29,0xD8,0x6A,0xD8,0x8B,0xD8,0x0B,0x13,
-0x40,0xF6,0x0C,0xB4,0x02,0x6A,0x61,0x9C,0x4D,0xEB,0x04,0x6A,0x6C,0xEA,0x61,0xDC,
-0x07,0x22,0x02,0x6A,0x4B,0xEA,0x6C,0xEA,0x80,0x18,0xCC,0x2E,0x41,0xDC,0x1A,0x10,
-0x01,0x6A,0x6D,0xEA,0x80,0x18,0x93,0x2D,0x41,0xDC,0x14,0x10,0x20,0xF6,0x00,0xB4,
-0x03,0x6A,0x4B,0xEA,0x61,0x9C,0x4C,0xEB,0x02,0x6A,0x4B,0xEA,0x4C,0xEB,0x04,0x6A,
-0x6C,0xEA,0x61,0xDC,0x04,0x22,0x80,0x18,0x99,0x2E,0x00,0x65,0x03,0x10,0x80,0x18,
-0x08,0x2E,0x00,0x65,0xE0,0xF5,0x18,0xB2,0x40,0x6C,0x61,0x9A,0x8D,0xEB,0x61,0xDA,
-0xDA,0x12,0xE0,0xF5,0x0C,0xB0,0x03,0x6B,0x6B,0xEB,0x41,0x98,0x6C,0xEA,0x01,0x6B,
-0x6D,0xEA,0x80,0x18,0xB5,0x2D,0x41,0xD8,0x41,0x98,0x40,0x6B,0x6D,0xEA,0x41,0xD8,
-0xCA,0x12,0x01,0x6C,0x03,0x10,0x02,0x6C,0x01,0x10,0x03,0x6C,0x80,0x18,0x4E,0x2F,
-0x00,0x65,0xC1,0x12,0x80,0x18,0xDD,0x2E,0x00,0x65,0xBD,0x12,0x80,0x18,0x04,0x2F,
-0x00,0x65,0xB9,0x12,0x80,0x18,0x20,0x2F,0x00,0x65,0xB5,0x12,0x80,0x18,0x63,0x2F,
-0x00,0x65,0xA0,0xF2,0x10,0x22,0x12,0x72,0x58,0x67,0x01,0x5A,0x78,0x67,0x01,0x5B,
-0x58,0x67,0x03,0x4A,0xA7,0x12,0x04,0x59,0x60,0xF2,0x1D,0x60,0x80,0x18,0x1B,0x2D,
-0x00,0x6C,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,
-0x02,0xF1,0x03,0x6A,0x4B,0xEA,0x4C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,
-0x00,0x6C,0xA4,0x67,0x00,0x18,0x01,0xA0,0xC4,0x67,0x00,0x18,0xFE,0x4F,0x00,0x65,
-0x00,0x6D,0x9D,0x67,0x28,0x4C,0x80,0x18,0x49,0x2B,0xC5,0x67,0x40,0xF5,0x00,0xB0,
-0x0A,0x6A,0x4C,0xC0,0x08,0x6A,0x2A,0xC0,0x00,0x1C,0xDD,0x31,0x4D,0xC0,0x10,0xD2,
-0x41,0x98,0x05,0x6B,0x6B,0xEB,0x6C,0xEA,0x01,0x71,0x41,0xD8,0x06,0x61,0x80,0x18,
-0x4E,0x2F,0x03,0x6C,0x00,0x18,0xC4,0x53,0x00,0x6C,0x02,0x71,0x04,0x61,0x41,0x98,
-0x04,0x6B,0x6D,0xEA,0x41,0xD8,0x00,0x1C,0xE5,0x31,0x10,0x94,0x02,0x6A,0x04,0xD2,
-0x00,0xF5,0x00,0xB2,0x06,0xD1,0x01,0x6C,0x05,0xD2,0x41,0x98,0xFA,0x6D,0xE3,0xF7,
-0x1E,0x6E,0x4A,0x32,0x8C,0xEA,0xE1,0xF4,0x12,0x6F,0x20,0x18,0x1B,0x32,0x07,0xD2,
-0x52,0x12,0x4F,0x59,0x25,0x60,0x18,0x93,0x44,0xA3,0x08,0x5A,0x21,0x60,0xC0,0xF4,
-0x10,0xB5,0x7F,0x6A,0x4C,0xE9,0x80,0x9D,0xC0,0xF4,0x0C,0xB2,0x80,0xF4,0x20,0x33,
-0x4C,0xEC,0x6D,0xEC,0x80,0xDD,0x18,0x92,0x64,0xA2,0xFF,0x6A,0x4C,0xEB,0x07,0x6A,
-0x4C,0xEB,0xA0,0xF4,0x18,0xB2,0x00,0xF7,0x60,0x33,0x8C,0xEA,0x6D,0xEA,0x40,0xDD,
-0x32,0x12,0x18,0x93,0x0A,0x59,0x45,0xA3,0x84,0xA3,0x40,0x32,0x4D,0xEC,0x03,0x61,
-0x03,0x6C,0x0C,0xD4,0x28,0x12,0x80,0xF4,0x08,0xB6,0x80,0xF4,0x14,0xB3,0xE3,0xF7,
-0x1F,0x6A,0xA0,0x9E,0x8C,0xEA,0x54,0x32,0x6C,0xED,0x80,0xF4,0x08,0xB3,0x4D,0xED,
-0x24,0x32,0x69,0xE2,0x40,0xAA,0xFF,0xF7,0x1F,0x6B,0xA0,0xDE,0x6C,0xEA,0x4C,0x32,
-0x82,0xEA,0xE0,0xF1,0x1E,0x61,0x03,0x59,0x05,0x60,0x02,0x6A,0x4B,0xEA,0x4C,0xED,
-0xA0,0xDE,0x0F,0x10,0x06,0x59,0xFF,0x6B,0x58,0x67,0x01,0x6C,0x6C,0xEA,0x61,0x9E,
-0x8D,0xED,0x8C,0xEA,0x81,0x6C,0x8B,0xEC,0x5C,0x32,0x8C,0xEB,0x4D,0xEB,0xA0,0xDE,
-0x61,0xDE,0x40,0xF4,0x04,0xB2,0x1F,0x6B,0x6B,0xEB,0x49,0xE1,0x80,0xA2,0x0F,0x6A,
-0x4C,0xEC,0x40,0x9E,0x84,0x34,0x6C,0xEA,0x8D,0xEA,0x40,0xDE,0xEC,0x11,0x18,0x92,
-0x85,0xA2,0x05,0x5C,0xA0,0xF1,0x1F,0x60,0x00,0xF4,0x04,0xB5,0x07,0x6A,0x4C,0xEC,
-0x41,0x9D,0x39,0x6B,0x6B,0xEB,0x8C,0x34,0x6C,0xEA,0x8D,0xEA,0x41,0xDD,0xDB,0x11,
-0x18,0x94,0xFB,0xB3,0x43,0xA4,0x46,0xC3,0x44,0xA4,0x47,0xC3,0x45,0xA4,0x48,0xC3,
-0xD2,0x11,0xF7,0xB5,0xFD,0xB3,0x3E,0x34,0x40,0x9D,0xC0,0xF7,0x80,0x34,0x6C,0xEA,
-0x8D,0xEA,0x40,0xDD,0x7F,0x6A,0x4C,0xE9,0x25,0xC5,0xC5,0x11,0x18,0x94,0xF0,0xB3,
-0x43,0xA4,0x4E,0xC3,0x44,0xA4,0x4F,0xC3,0x45,0xA4,0x50,0xC3,0xBC,0x11,0x18,0x94,
-0xEB,0xB3,0x43,0xA4,0x51,0xC3,0x44,0xA4,0x52,0xC3,0x45,0xA4,0x53,0xC3,0xB3,0x11,
-0xE7,0xB6,0xFF,0x6C,0xA4,0x67,0x69,0xA6,0x6C,0xED,0x0A,0x75,0x3F,0x61,0x4C,0xA6,
-0x00,0x6F,0x8C,0xEA,0x0A,0x72,0x13,0x60,0x22,0x67,0x44,0x32,0x29,0xE2,0x4C,0x32,
-0x2B,0xE2,0x4C,0x32,0xE6,0xB3,0x2B,0xE2,0x48,0x32,0x69,0xE2,0x20,0xF0,0x58,0xA2,
-0x05,0x6F,0x8C,0xEA,0x04,0x72,0x03,0x60,0x0A,0x6A,0x00,0x6F,0x4C,0xC6,0x4D,0xA6,
-0x08,0x72,0x6A,0x60,0x22,0x67,0x50,0x32,0x29,0xE2,0xDE,0xB4,0x48,0x32,0x2B,0xE2,
-0x48,0x32,0x89,0xE2,0x20,0xF1,0x4F,0xA2,0x01,0x6B,0x05,0x6F,0x6C,0xEA,0x05,0x22,
-0x00,0xF1,0x52,0xAC,0x47,0xE9,0x6C,0xEA,0x57,0x2A,0x08,0x6A,0x00,0x6F,0x4D,0xC6,
-0x53,0x10,0xD5,0xB0,0x7F,0x4D,0x6E,0x4D,0x05,0x6F,0x90,0x67,0xB5,0xE3,0x06,0x6E,
-0x00,0x18,0x2E,0x2E,0x13,0xD7,0xFF,0xF7,0x38,0xC0,0x25,0x10,0x4B,0x43,0x8C,0xEA,
-0x03,0x5A,0x23,0x60,0xCA,0xB5,0x04,0x6F,0x00,0x69,0x24,0x32,0x29,0xE2,0x4C,0x32,
-0x2B,0xE2,0x4C,0x32,0x2B,0xE2,0x48,0x33,0xA9,0xE3,0x20,0xF0,0x58,0xA2,0x8C,0xEA,
-0x04,0x72,0xDF,0x60,0x01,0x49,0x8C,0xE9,0x0A,0x59,0xEF,0x61,0x2D,0x10,0xC2,0xB0,
-0x60,0xF1,0x02,0x4D,0x05,0x6F,0x90,0x67,0xB5,0xE3,0x06,0x6E,0x00,0x18,0x2E,0x2E,
-0x13,0xD7,0xFF,0xF7,0x39,0xC0,0x13,0x97,0x1F,0x10,0x48,0x43,0x8C,0xEA,0x02,0x5A,
-0xE5,0x67,0x1A,0x60,0xB7,0xB5,0x04,0x6F,0x00,0x69,0x01,0x6E,0xFF,0xF7,0x1F,0x68,
-0x30,0x32,0x29,0xE2,0x48,0x32,0x2B,0xE2,0x48,0x33,0xA9,0xE3,0x20,0xF1,0x4F,0xA2,
-0xCC,0xEA,0x06,0x22,0x00,0xF1,0x52,0xAD,0x0C,0xEA,0x47,0xE9,0xCC,0xEA,0xD7,0x2A,
-0x01,0x49,0x8C,0xE9,0x08,0x59,0xEC,0x61,0xA1,0xB2,0x4A,0xA2,0x0B,0xD2,0x0B,0x93,
-0xE0,0x32,0x4D,0xEB,0x0B,0xD3,0x77,0x10,0xA8,0xB2,0x20,0xF0,0x7C,0xA2,0x0B,0xD3,
-0x20,0xF0,0x7D,0xA2,0x0B,0x94,0x20,0xF0,0x5E,0xA2,0x60,0x33,0x6D,0xEC,0x85,0x10,
-0xA2,0xB2,0x20,0xF0,0x7F,0xA2,0x0B,0xD3,0x40,0xF0,0x60,0xA2,0x0B,0x94,0x40,0xF0,
-0x41,0xA2,0x60,0x33,0x6D,0xEC,0x79,0x10,0x18,0x93,0x43,0xA3,0x62,0xAB,0x60,0x33,
-0x6D,0xEA,0x9B,0xB3,0x41,0xDB,0xFF,0x10,0x18,0x94,0x8D,0xB3,0x43,0xA4,0x54,0xC3,
-0x44,0xA4,0x55,0xC3,0x45,0xA4,0x56,0xC3,0xF6,0x10,0x18,0x94,0x88,0xB3,0x43,0xA4,
-0x57,0xC3,0x44,0xA4,0x58,0xC3,0x45,0xA4,0x59,0xC3,0xED,0x10,0x4F,0x41,0xFF,0x6B,
-0x6C,0xEA,0x09,0x5A,0xC0,0xF0,0x15,0x60,0x5C,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,
-0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x79,0x6A,0x4B,0xEA,0x4C,0xEE,0x2C,0x33,0x78,0x6A,
-0x4C,0xEB,0x5C,0x6C,0x01,0x6D,0x6D,0xEE,0xA7,0x10,0x79,0xB2,0x92,0xAA,0x69,0x9A,
-0x0B,0xD4,0x84,0xB4,0x07,0x10,0x76,0xB2,0x69,0x9A,0x62,0x34,0x82,0x34,0x0B,0xD4,
-0xFF,0xF7,0x1F,0x6C,0x8C,0xEB,0x69,0xDA,0x02,0x6A,0x3C,0x10,0x70,0xB2,0x96,0xAA,
-0x6B,0x9A,0x0B,0xD4,0x7B,0xB4,0x07,0x10,0x6D,0xB2,0x6B,0x9A,0x62,0x34,0x82,0x34,
-0x0B,0xD4,0xFF,0xF7,0x1F,0x6C,0x8C,0xEB,0x6B,0xDA,0xEE,0x17,0x78,0x6C,0x00,0x18,
-0xEB,0x9F,0x01,0x6D,0x02,0x6B,0x0B,0xD2,0x0D,0xD3,0xAD,0x10,0x76,0x6C,0x00,0x18,
-0xEB,0x9F,0x01,0x6D,0x0B,0xD2,0x02,0x6C,0x0D,0xD4,0xA5,0x10,0x77,0x6C,0x00,0x18,
-0xEB,0x9F,0x01,0x6D,0x0B,0xD2,0xD8,0x17,0x5D,0xB2,0x74,0xA2,0x0B,0xD3,0x75,0xA2,
-0x0B,0x94,0x56,0xA2,0x60,0x33,0x6D,0xEC,0x08,0x10,0x59,0xB2,0x77,0xA2,0x0B,0xD3,
-0x78,0xA2,0x0B,0x94,0x59,0xA2,0x60,0x33,0x6D,0xEC,0x40,0x32,0x40,0x32,0x4D,0xEC,
-0x0B,0xD4,0x03,0x6A,0x0D,0xD2,0x87,0x10,0x00,0x6B,0x05,0x59,0x11,0xD3,0x78,0x67,
-0x70,0x23,0x18,0x94,0x42,0xA4,0x02,0xAC,0x0C,0x72,0x05,0x61,0x58,0xB2,0x01,0x6F,
-0x41,0x9A,0x11,0xD2,0x03,0x10,0x11,0x97,0x03,0x6A,0x0D,0xD2,0x74,0x23,0x00,0xF0,
-0x12,0x0A,0x24,0x33,0x4D,0xE3,0x60,0x8B,0x4D,0xE3,0x00,0xEB,0x00,0x65,0x0B,0x00,
-0x29,0x00,0x83,0x00,0xA5,0x00,0xAF,0x00,0x06,0x27,0x11,0x96,0x3F,0x6A,0x90,0x67,
-0x4C,0xEC,0x00,0x6D,0x31,0x10,0x3F,0x6A,0x90,0x67,0x4C,0xEC,0x00,0x18,0xEB,0x9F,
-0xA7,0x67,0x0B,0xD2,0x58,0x10,0x02,0x31,0x01,0x6B,0x6C,0xE9,0x09,0x21,0xA3,0x67,
-0x40,0x6C,0xD1,0x67,0x12,0xD3,0x00,0x18,0x01,0xA0,0x13,0xD7,0x13,0x97,0x12,0x93,
-0x0C,0x27,0x7F,0x6A,0x4C,0xE8,0x07,0x34,0x40,0x6A,0x11,0x96,0x4D,0xEC,0xFF,0x6A,
-0x4C,0xEC,0x00,0x18,0x01,0xA0,0xA3,0x67,0x0B,0x10,0x7F,0x6A,0x4C,0xE8,0x07,0x34,
-0x40,0x6A,0x4D,0xEC,0xFF,0x6A,0x4C,0xEC,0x00,0x18,0xEB,0x9F,0xA3,0x67,0x0B,0xD2,
-0x32,0x21,0x40,0x6C,0x01,0x6D,0x00,0x6E,0x00,0x18,0x01,0xA0,0x00,0x65,0x2B,0x10,
-0x01,0x6A,0x0C,0xEA,0x03,0x22,0x03,0x6B,0x0C,0xD3,0x25,0x10,0x08,0x27,0x11,0x95,
-0xFF,0xF7,0x1F,0x6A,0x90,0x67,0x00,0x18,0x9A,0x33,0x4C,0xED,0x1C,0x10,0x2A,0xB2,
-0x12,0x10,0x01,0x6A,0x0C,0xEA,0x05,0x2A,0x28,0xB2,0x06,0x10,0x01,0x6A,0x0C,0xEA,
-0x02,0x22,0x03,0x6A,0x0F,0x10,0x26,0xB2,0x06,0x27,0x7D,0x67,0x40,0xF0,0x64,0xAB,
-0x49,0xE0,0x60,0xCA,0x08,0x10,0x49,0xE0,0x40,0xAA,0xFF,0xF7,0x1F,0x6C,0x4C,0xEC,
-0x0B,0xD4,0x01,0x10,0x0C,0xD2,0x0D,0x93,0x0C,0x94,0x70,0x32,0x4D,0xEC,0x18,0x92,
-0x83,0xC2,0x18,0x93,0x18,0x94,0x41,0xA3,0x10,0x6B,0x6B,0xEB,0x6C,0xEA,0x41,0xC4,
-0x18,0x92,0x0B,0x96,0x02,0x6C,0x00,0x18,0x2C,0x2B,0xA0,0x9A,0x16,0x97,0x15,0x91,
-0x14,0x90,0x00,0xEF,0x0C,0x63,0x00,0x00,0xD2,0x04,0x11,0x80,0xD8,0xA0,0x11,0x80,
-0xFC,0xA5,0x10,0x80,0xFF,0xFF,0x03,0xFE,0xFF,0xFF,0xFF,0x8F,0x1F,0x00,0xFC,0xFF,
-0x88,0xDB,0x10,0x80,0x9C,0xDB,0x10,0x80,0xFF,0xFF,0xFF,0x7F,0x48,0x60,0x11,0x80,
-0x58,0x46,0x11,0x80,0xEC,0xA0,0x11,0x80,0xDC,0x00,0x11,0x80,0x08,0xA1,0x11,0x80,
-0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0xB6,0x00,0xA0,0x00,0xB0,0x00,0x10,0x00,0xB6,
-0xF8,0x63,0x0E,0x62,0x0D,0xD1,0x0C,0xD0,0x44,0xAC,0x24,0x67,0x01,0x72,0x55,0x61,
-0x00,0x9C,0x5D,0x67,0xFA,0x6D,0x20,0xF0,0x08,0xC2,0x02,0x6A,0x04,0xD2,0x3F,0xB2,
-0x06,0xD0,0x44,0xF2,0x1E,0x6E,0x05,0xD2,0x41,0x9C,0xC1,0xF4,0x1C,0x6F,0x04,0x6C,
-0x20,0x18,0x1B,0x32,0x07,0xD2,0x3F,0x6A,0x4C,0xE8,0x20,0x70,0x0A,0x61,0x62,0xA1,
-0xFF,0x6A,0x4C,0xEB,0x06,0x2B,0x36,0xB2,0x60,0xDA,0x36,0xB2,0x60,0xDA,0x01,0x6A,
-0x42,0xC1,0x7D,0x67,0x20,0xF0,0x68,0xA3,0x3F,0x6A,0x6C,0xEA,0x24,0x72,0x03,0x67,
-0x24,0x61,0x7D,0x67,0x01,0xF4,0x03,0x6A,0x00,0x1C,0xDD,0x31,0x50,0xCB,0x00,0x18,
-0xFE,0x4F,0x02,0x67,0x00,0x6D,0x9D,0x67,0x20,0x4C,0x80,0x18,0x49,0x2B,0xC5,0x67,
-0x29,0xB3,0x40,0x99,0x6C,0xEA,0x29,0xB3,0x6E,0xEA,0x06,0x2A,0x80,0x18,0x4E,0x2F,
-0x03,0x6C,0x00,0x18,0xC4,0x53,0x00,0x6C,0xA0,0x99,0x02,0x6C,0x00,0x18,0x2C,0x2B,
-0x00,0x6E,0x00,0x1C,0xE5,0x31,0x90,0x67,0x32,0x10,0xFF,0x6A,0x4C,0xE8,0x30,0x70,
-0x04,0x61,0x80,0x18,0xEA,0x2F,0x91,0x67,0x2A,0x10,0x44,0xA9,0x02,0x72,0x24,0x61,
-0x1B,0xB2,0x40,0xA2,0x21,0x2A,0x40,0x99,0x04,0xF0,0x0F,0x6B,0x6C,0xEA,0x6A,0xEA,
-0x0B,0x61,0x18,0xB2,0xFF,0xF7,0x1F,0x6B,0x40,0xAA,0x6C,0xEA,0x40,0x32,0x40,0x32,
-0x00,0xF2,0x0F,0x6B,0x6D,0xEA,0x40,0xD9,0x02,0x6A,0x04,0xD2,0x0B,0xB2,0x05,0x6C,
-0xFA,0x6D,0x05,0xD2,0x40,0x99,0xA4,0xF2,0x0E,0x6E,0xC1,0xF4,0x1D,0x6F,0x06,0xD2,
-0x41,0x99,0x20,0x18,0x1B,0x32,0x07,0xD2,0x00,0x18,0xF4,0x2C,0x91,0x67,0x0E,0x97,
-0x0D,0x91,0x0C,0x90,0x00,0xEF,0x08,0x63,0xFC,0xA5,0x10,0x80,0xAC,0xDB,0x10,0x80,
-0x38,0x91,0x10,0x80,0x00,0x00,0xFF,0x00,0x00,0x00,0x01,0x00,0x98,0x00,0x11,0x80,
-0x04,0x09,0x11,0x80,0xFD,0x63,0x04,0x62,0x00,0x18,0x23,0xEA,0x00,0x65,0x04,0x97,
-0x00,0xEF,0x03,0x63,0xEF,0x63,0x20,0x62,0x1F,0xD1,0x1E,0xD0,0x80,0xAC,0x00,0x6A,
-0xC6,0xB3,0x11,0xD4,0xA0,0xA5,0x1B,0xD2,0x84,0x32,0x89,0xE2,0x4C,0x32,0x8B,0xE2,
-0x4C,0x32,0x8B,0xE2,0x48,0x32,0x69,0xE2,0x19,0xD2,0x12,0xD5,0xE0,0xF0,0x6C,0xA2,
-0x18,0xD3,0xA0,0xF0,0x9A,0xAA,0x19,0x93,0x13,0xD4,0xA0,0xF0,0x58,0xAA,0x19,0x94,
-0x14,0xD2,0xA0,0xF0,0x7C,0xAB,0x19,0x92,0x15,0xD3,0x7D,0x67,0x60,0xF0,0x6C,0xA3,
-0xC0,0xF0,0x80,0xAC,0x16,0xD4,0xC0,0xF2,0x74,0xC2,0x9D,0x67,0xE0,0xF0,0x13,0xA2,
-0x60,0xF0,0x8C,0xA4,0xE0,0xF0,0x28,0xA2,0xC0,0xF2,0x95,0xC2,0xB1,0x67,0x00,0x18,
-0x7B,0xBB,0x90,0x67,0x17,0xD2,0x17,0x93,0x48,0x32,0x1C,0xD2,0x69,0xE2,0xAC,0xB3,
-0x44,0x32,0x69,0xE2,0x1A,0xD2,0x19,0x92,0xE0,0xF0,0xA8,0xA2,0x00,0x18,0xC3,0x34,
-0x90,0x67,0x12,0x93,0x0E,0x23,0x18,0x94,0x01,0x74,0x0B,0x61,0x1A,0x92,0x03,0xF4,
-0x00,0x6C,0x18,0xF0,0x00,0x6D,0xC3,0xAA,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x8D,0x93,
-0x4C,0xEE,0x14,0x93,0x05,0x23,0x19,0x94,0x00,0xF2,0x57,0xA4,0x01,0x72,0x15,0x60,
-0x03,0x6A,0x04,0xD2,0x9B,0xB2,0x19,0x93,0x12,0x94,0x05,0xD2,0x14,0x92,0xFA,0x6D,
-0xC4,0xF3,0x1C,0x6E,0x06,0xD2,0x00,0xF2,0x57,0xA3,0x64,0xF4,0x18,0x6F,0x08,0xD4,
-0x04,0x6C,0x20,0x18,0x1B,0x32,0x07,0xD2,0x18,0x11,0x00,0x1C,0xDD,0x31,0x00,0x65,
-0x9D,0x67,0x40,0x4C,0xB1,0x67,0x00,0x18,0x3B,0x94,0x1B,0xD2,0x10,0x92,0x8E,0xB6,
-0x46,0x32,0x01,0x4A,0xCC,0xEA,0x10,0xD2,0x19,0x92,0xC0,0xF2,0xEE,0xAA,0x07,0x2F,
-0x12,0x93,0x01,0x73,0x04,0x61,0x00,0x1C,0xE5,0x31,0x1B,0x94,0xFE,0x10,0x10,0x95,
-0x08,0x25,0x14,0x94,0x06,0x24,0x9B,0xED,0x01,0x2C,0xE5,0xE8,0x10,0xEA,0x00,0x65,
-0x01,0x10,0x00,0x6A,0x14,0x93,0xFF,0xF7,0x1F,0x6C,0x4B,0xE3,0x13,0x93,0x8C,0xEA,
-0x65,0xE2,0x14,0x92,0x23,0xEA,0x01,0x60,0x47,0xE1,0x12,0x93,0x01,0x73,0x18,0x61,
-0x19,0x92,0xEC,0xEC,0xA0,0xF2,0x74,0x9A,0x14,0xD4,0xCC,0xEB,0x73,0xE5,0xA3,0xEB,
-0x44,0x67,0x02,0x61,0x75,0xB2,0x49,0xE4,0x14,0x94,0x9A,0xEA,0x01,0x2C,0xE5,0xE8,
-0x12,0xE9,0x41,0x41,0x00,0x65,0x98,0xEA,0x12,0xEA,0x65,0xE2,0xA7,0xE1,0xCC,0xE9,
-0x19,0x94,0xFF,0x6B,0x14,0x35,0xE0,0xF0,0x48,0xA4,0x6C,0xED,0x02,0x6C,0x6C,0xEA,
-0x40,0x32,0x4C,0x32,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x9A,0x33,0x4C,0xED,
-0x10,0x92,0x2D,0xE2,0x1D,0xD3,0x08,0x59,0x06,0x60,0x1D,0x94,0x14,0x93,0x71,0xE4,
-0x65,0xE1,0x1D,0xD4,0xF8,0x17,0x1D,0x94,0x43,0xE4,0x00,0x18,0xC4,0x36,0x04,0x30,
-0x41,0xE0,0x19,0x92,0x4E,0x6C,0x13,0xDA,0x00,0x18,0x9A,0x33,0x14,0x95,0x1D,0x95,
-0xFF,0xF7,0x1F,0x6B,0x48,0x6C,0x00,0x18,0x9A,0x33,0x6C,0xED,0x18,0x94,0x14,0x24,
-0x16,0x92,0x15,0x93,0x63,0xEA,0x06,0x60,0x43,0xE3,0xFF,0xF7,0x1F,0x6C,0xA2,0x67,
-0x8C,0xE8,0x0C,0x10,0x15,0x92,0x16,0x93,0x63,0xEA,0x06,0x60,0x57,0xE3,0xFF,0xF7,
-0x1F,0x6C,0x8C,0xED,0x02,0x67,0x02,0x10,0x16,0x95,0x15,0x90,0x00,0x18,0x9A,0x33,
-0x4C,0x6C,0x4A,0x6C,0x00,0x18,0x9A,0x33,0xB0,0x67,0x00,0x6C,0x00,0x18,0x9A,0x33,
-0x07,0x6D,0x12,0x92,0x0D,0x2A,0x18,0x93,0x01,0x73,0x0A,0x61,0x17,0x94,0x44,0xB2,
-0x7D,0x67,0x40,0xF0,0x68,0xA3,0x49,0xE4,0x60,0xC2,0x42,0xB2,0x49,0xE4,0x60,0xC2,
-0x1B,0x94,0x00,0x1C,0xE5,0x31,0x02,0x49,0x00,0x18,0x4E,0x05,0x00,0x65,0x01,0xF0,
-0x00,0x6D,0x00,0x18,0x78,0xBA,0x5E,0x6C,0x12,0x92,0x21,0x2A,0x18,0x93,0x01,0x73,
-0x0D,0x61,0x1A,0x92,0x18,0xF0,0x00,0x6C,0x03,0xF4,0x00,0x6D,0x00,0x18,0x8D,0x93,
-0xC3,0xAA,0x19,0x93,0x20,0x6A,0x00,0xF2,0x55,0xC3,0x11,0x10,0x51,0x59,0x07,0x61,
-0x11,0x95,0xFF,0xF7,0x1F,0x6A,0x91,0x67,0x00,0x18,0x3A,0x96,0x4C,0xEC,0x1A,0x92,
-0x18,0xF0,0x00,0x6C,0x01,0xF4,0x00,0x6D,0x00,0x18,0x8D,0x93,0xC3,0xAA,0x18,0x93,
-0x14,0x2B,0x12,0x94,0x12,0x24,0x51,0x59,0x10,0x61,0x11,0x95,0xFF,0xF7,0x1F,0x68,
-0x91,0x67,0x00,0x18,0x3A,0x96,0x0C,0xEC,0x1A,0x92,0x01,0xF4,0x00,0x6C,0x18,0xF0,
-0x00,0x6D,0xC3,0xAA,0x00,0x18,0x8D,0x93,0x0C,0xEE,0x2B,0x6A,0x7D,0x67,0x58,0xCB,
-0x14,0x94,0x1D,0xB2,0xFD,0x67,0x0A,0xD4,0x80,0x9A,0x00,0x6D,0x04,0x06,0x34,0x4F,
-0xA9,0xE7,0x40,0xA2,0xAD,0xE6,0x01,0x4D,0x08,0x5D,0x40,0xC3,0xF9,0x61,0x0A,0x95,
-0x0B,0x96,0x00,0x18,0x40,0x1E,0x0C,0x97,0x17,0x92,0x0F,0x22,0x1C,0x93,0x13,0xB2,
-0x49,0xE3,0x00,0x6B,0xFF,0xF7,0x7C,0xDA,0x1C,0x94,0x11,0xB2,0x49,0xE4,0xFF,0xF7,
-0x7C,0xDA,0x10,0xB2,0x49,0xE4,0xFF,0xF7,0x7C,0xDA,0x20,0x97,0x1F,0x91,0x1E,0x90,
-0x01,0x6A,0x00,0xEF,0x11,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x70,0x45,0x11,0x80,
-0xFC,0xA5,0x10,0x80,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x08,0x48,0x06,0x11,0x80,
-0x3C,0x06,0x11,0x80,0x68,0x52,0x11,0x80,0x18,0x07,0x11,0x80,0xE8,0x06,0x11,0x80,
-0xB8,0x06,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,0xFF,0xF7,0x1F,0x6A,
-0x8C,0xEA,0x04,0xD2,0x04,0x93,0x01,0x69,0x44,0xE9,0x69,0xE2,0x4C,0x32,0x6B,0xE2,
-0x4C,0x32,0x6B,0xE2,0x20,0xB3,0x48,0x32,0x0D,0xD5,0x69,0xE2,0x05,0xD2,0x00,0x68,
-0x20,0x18,0xE4,0x06,0x90,0x67,0x01,0x48,0xFF,0x6B,0x6C,0xE8,0x45,0xE1,0x04,0x58,
-0x6C,0xE9,0xF6,0x61,0x05,0x94,0x44,0x41,0xA0,0xF0,0x88,0xAC,0x98,0xEA,0x17,0xB2,
-0x06,0xD4,0x60,0xF1,0x42,0xA2,0x6C,0xEA,0x02,0x5A,0x12,0xE9,0x00,0x65,0x06,0x61,
-0x40,0xF1,0x00,0x59,0x06,0x60,0xFF,0x69,0x41,0x49,0x03,0x10,0xEE,0x59,0x01,0x60,
-0xEE,0x69,0x00,0x1C,0xDD,0x31,0x00,0x65,0x05,0x93,0x02,0x67,0x26,0x32,0xA0,0xF0,
-0x48,0xCB,0x04,0x94,0x00,0x18,0x2A,0xFF,0x0D,0x95,0x9D,0x67,0x4C,0xAC,0x05,0x94,
-0xA0,0xF0,0x48,0xCC,0x00,0x1C,0xE5,0x31,0x90,0x67,0x0A,0x97,0x09,0x91,0x08,0x90,
-0x00,0xEF,0x06,0x63,0x48,0x60,0x11,0x80,0x48,0x5C,0x11,0x80,0xF8,0x63,0x0E,0x62,
-0x0D,0xD1,0x0C,0xD0,0x5D,0x67,0x03,0x46,0x10,0xD4,0x26,0x67,0x13,0xD7,0x06,0x04,
-0x40,0xF0,0xA4,0xCA,0x06,0x6E,0x00,0x18,0x2E,0x2E,0xB0,0x67,0x69,0xA1,0x9D,0x67,
-0x09,0xD3,0x40,0xF0,0x64,0xAC,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,
-0x6B,0xE2,0x4D,0xB3,0x48,0x32,0x69,0xE2,0x0A,0xD2,0x20,0xF0,0x58,0xA2,0x0D,0x72,
-0x3D,0x60,0x0E,0x52,0x03,0x60,0x06,0x72,0x04,0x60,0x7F,0x10,0x1B,0x72,0x36,0x60,
-0x7C,0x10,0x13,0x93,0x01,0x6A,0x00,0x6D,0x40,0xC3,0x80,0xA9,0xFF,0xF7,0x1F,0x6A,
-0x00,0x18,0xC5,0x4A,0x4C,0xEC,0x0A,0x94,0x00,0x18,0xFD,0x1D,0x28,0x4C,0x09,0x93,
-0x9D,0x67,0x40,0xF0,0x44,0xAC,0x01,0x73,0x14,0x60,0xFF,0xF7,0x1F,0x6C,0x20,0x18,
-0x7C,0x2F,0x4C,0xEC,0x62,0x67,0x0A,0x92,0xE0,0xF0,0x9F,0xA2,0xFF,0x6A,0x4C,0xEC,
-0x20,0x6A,0x4C,0xEC,0x01,0x2C,0x64,0x67,0x01,0x73,0x7D,0x67,0x40,0xF0,0x44,0xAB,
-0x06,0x60,0xFF,0xF7,0x1F,0x6C,0x00,0x18,0xAD,0xE1,0x4C,0xEC,0x52,0x10,0xFF,0xF7,
-0x1F,0x6C,0x4C,0xEC,0x80,0x18,0x25,0x33,0x06,0x05,0x4B,0x10,0x00,0x6C,0x40,0x6B,
-0x1F,0x6A,0x66,0xC0,0x00,0xF0,0x47,0xC8,0x8C,0xC1,0x6A,0xC0,0x27,0xB3,0x00,0xF0,
-0x4B,0xC8,0x10,0x6A,0x90,0xC1,0x8F,0xC0,0x4E,0xC0,0x50,0xAB,0xBD,0x67,0xDD,0x67,
-0x50,0xC0,0x50,0xAB,0xE0,0x6B,0x44,0x4D,0x42,0x32,0x54,0xC1,0x20,0xB2,0x92,0xC0,
-0x20,0x4E,0x41,0xA2,0x91,0x67,0x01,0x6F,0x48,0x32,0x6C,0xEA,0x56,0x32,0xC0,0xF3,
-0x00,0x6B,0x6D,0xEA,0x00,0xF0,0x53,0xC8,0x13,0x93,0x01,0x6A,0x00,0x18,0x37,0x40,
-0x40,0xC3,0x02,0x67,0x16,0x22,0x5D,0x67,0x40,0xF0,0x84,0xAA,0xFF,0xF7,0x1F,0x6B,
-0x00,0x18,0xAE,0x5D,0x6C,0xEC,0x0A,0x94,0x0A,0x96,0x00,0x6F,0x60,0xF2,0xBC,0xAC,
-0x7F,0x4E,0x04,0xD2,0xFF,0xF7,0x1F,0x6A,0x90,0x67,0x4C,0xED,0x00,0x18,0x6F,0x4E,
-0x6E,0x4E,0x10,0x93,0x00,0x6C,0x80,0xC3,0x07,0x10,0x10,0x93,0x0C,0x6A,0x40,0xC3,
-0x03,0x10,0x10,0x94,0x00,0x6A,0x40,0xC4,0x0E,0x97,0x0D,0x91,0x0C,0x90,0x00,0xEF,
-0x08,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x48,0x5C,0x11,0x80,0xC0,0x5B,0x11,0x80,
-0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x4C,0xB2,0x60,0xF1,0x42,0xA2,0x3C,0x22,
-0x00,0x6C,0x84,0x32,0x89,0xE2,0x4C,0x32,0x8B,0xE2,0x4C,0x32,0x48,0xB3,0x8B,0xE2,
-0x48,0x32,0x79,0xE2,0x47,0xB2,0xFF,0x6D,0x20,0xF1,0x4C,0xA2,0x28,0x22,0x46,0xB2,
-0x40,0xA2,0xAC,0xEA,0x24,0x22,0x20,0xF0,0x78,0xA6,0xAC,0xEB,0x20,0x23,0x40,0xF2,
-0x41,0xA6,0xAC,0xEA,0x01,0x72,0x1B,0x61,0x0F,0x73,0x19,0x60,0x14,0x73,0x17,0x60,
-0x3E,0xB3,0xFF,0xF7,0x1F,0x6E,0x40,0xAB,0x01,0x4A,0x40,0xCB,0xCC,0xEA,0xE0,0xF3,
-0x08,0x5A,0x12,0x61,0x00,0x6A,0x40,0xCB,0x39,0xB2,0x02,0x6C,0xA0,0xAA,0x04,0xF0,
-0x0F,0x6A,0x4D,0xED,0xCC,0xED,0x00,0x18,0x2C,0x2B,0x00,0x6E,0x05,0x10,0x01,0x4C,
-0xFF,0x6A,0x4C,0xEC,0x0A,0x5C,0xC5,0x61,0x2C,0xB5,0x01,0x68,0xFF,0x6E,0x40,0xF1,
-0x5E,0xA5,0x0C,0xEA,0x4A,0x22,0x2F,0xB2,0x00,0x6F,0xFF,0xF7,0x1F,0x6C,0x60,0xAA,
-0x02,0xF0,0x00,0x6A,0x6C,0xEA,0x25,0x2A,0x60,0xF1,0x42,0xA5,0xCC,0xEA,0x05,0x2A,
-0x01,0x10,0x00,0x6F,0x28,0xB2,0xE0,0xCA,0x2E,0x10,0x06,0x67,0x20,0xB1,0x27,0xB6,
-0x67,0x67,0xA4,0x67,0x64,0x34,0x69,0xE4,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,
-0x48,0x32,0x29,0xE2,0xE0,0xF0,0x4B,0xA2,0x0C,0xEA,0x01,0x72,0x05,0x61,0xC9,0xE4,
-0x40,0xAA,0xAC,0xEA,0x02,0x5A,0xE5,0x61,0x01,0x4B,0xAC,0xEB,0x0A,0x5B,0xEA,0x61,
-0x12,0x10,0x19,0xB2,0x60,0xAA,0x01,0x4B,0x60,0xCA,0x4F,0xAD,0x8C,0xEB,0x8C,0xEA,
-0x4A,0x32,0x8C,0xEA,0x43,0xEB,0x07,0x61,0x4D,0xAD,0x8C,0xEA,0x4A,0x32,0x8C,0xEA,
-0x43,0xEB,0x01,0x61,0xF0,0x67,0x09,0x27,0x00,0x18,0xB7,0xB5,0x00,0x65,0x00,0x18,
-0x31,0xBE,0x00,0x65,0x0C,0xB2,0x00,0x6B,0x60,0xCA,0x06,0x97,0x05,0x91,0x04,0x90,
-0x00,0x6A,0x00,0xEF,0x04,0x63,0x00,0x00,0x48,0x5C,0x11,0x80,0x48,0x60,0x11,0x80,
-0xDC,0x00,0x11,0x80,0xFE,0x08,0x11,0x80,0x16,0xA1,0x11,0x80,0x04,0x09,0x11,0x80,
-0xE0,0x00,0x00,0xB6,0xC8,0xA0,0x11,0x80,0x10,0x06,0x11,0x80,0xFD,0x63,0x04,0x62,
-0x44,0xAC,0x04,0x72,0x0F,0x61,0x0A,0xB2,0x00,0x6B,0x00,0x18,0x3B,0x2B,0x60,0xC2,
-0x08,0xB6,0x00,0x6B,0x0A,0x6D,0xFF,0x6C,0xC9,0xE3,0x01,0x4B,0x8C,0xEB,0x04,0x5B,
-0xA0,0xC2,0xFA,0x61,0x04,0x97,0x00,0xEF,0x03,0x63,0x00,0x00,0xFE,0x08,0x11,0x80,
-0xB4,0x5B,0x11,0x80,0xFD,0x63,0x04,0x62,0x80,0x18,0x45,0x2B,0x00,0x65,0x0E,0xB2,
-0x00,0x6B,0x0F,0xB4,0x60,0xCA,0x0D,0xB2,0x02,0xF0,0x00,0x6D,0x04,0x97,0x60,0xC2,
-0x0C,0xB2,0x01,0xF0,0x00,0x6B,0xA0,0xF0,0x72,0xCC,0x6C,0xCA,0xAE,0xCA,0x80,0xF0,
-0x43,0xA4,0x05,0x6B,0x6B,0xEB,0x6C,0xEA,0xA0,0xF0,0xB6,0xCC,0x80,0xF0,0x43,0xC4,
-0x00,0xEF,0x03,0x63,0xC8,0xA0,0x11,0x80,0xCA,0xA0,0x11,0x80,0xDC,0x00,0x11,0x80,
-0x48,0x5C,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x44,0xAC,0xC9,0x72,
-0x24,0x61,0x00,0x1C,0xDD,0x31,0x00,0x65,0x15,0xB1,0x04,0xD2,0x60,0xF1,0x54,0xA1,
-0x40,0xF1,0x9E,0xA1,0x04,0x99,0x05,0xD2,0x80,0x6A,0x44,0xD9,0x55,0x6A,0x60,0xF1,
-0x54,0xC1,0x00,0x18,0xEB,0xA4,0x00,0x65,0x60,0xF1,0x54,0xA1,0x04,0xD9,0x55,0x72,
-0x04,0x60,0x00,0x18,0x31,0xBE,0x00,0x65,0x04,0x10,0x5D,0x67,0x54,0xA2,0x60,0xF1,
-0x54,0xC1,0x00,0x1C,0xE5,0x31,0x04,0x94,0x03,0x10,0x00,0x18,0x2F,0xB9,0x00,0x65,
-0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x00,0x00,0x48,0x5C,0x11,0x80,
-0xFD,0x63,0x04,0x62,0x00,0x18,0x24,0xB4,0x00,0x65,0x04,0x97,0x00,0xEF,0x03,0x63,
-0x0D,0xB2,0xFF,0xF7,0x1F,0x6B,0xAC,0xEB,0x43,0xA2,0x01,0x6D,0xAC,0xEA,0x10,0x22,
-0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x07,0xB3,0x48,0x32,
-0x69,0xE2,0x60,0xF2,0x4D,0xA2,0xAA,0xEA,0x03,0x61,0x45,0x67,0x20,0xE8,0xA0,0xC4,
-0x20,0xE8,0x00,0x6A,0x00,0x46,0x11,0x80,0x48,0x60,0x11,0x80,0xF8,0x63,0x0E,0x62,
-0x0D,0xD1,0x0C,0xD0,0xC4,0x67,0xFF,0xF7,0x1F,0x6D,0xAC,0xEE,0xFF,0x76,0x68,0x60,
-0xC4,0x32,0xC9,0xE2,0x4C,0x32,0xCB,0xE2,0x35,0xB3,0x4C,0x32,0xCB,0xE2,0x48,0x32,
-0x65,0xE2,0xC0,0xF0,0x74,0xA9,0x40,0x6F,0xAC,0xEB,0x6C,0xEF,0x25,0x27,0x04,0x6A,
-0x6C,0xEA,0x08,0x22,0xE0,0xF0,0x8D,0x41,0x00,0xF1,0xA7,0x41,0x00,0x18,0x47,0x43,
-0x0A,0xD6,0x0A,0x96,0x7D,0x67,0x01,0x6A,0x58,0xC3,0x86,0x67,0x00,0x6A,0x03,0x6E,
-0xBD,0x67,0x5A,0xC3,0x00,0x68,0x00,0xF2,0x4A,0xC1,0x18,0x4D,0x64,0x6A,0xE6,0x67,
-0x04,0xD2,0x00,0x18,0xA0,0xDD,0x05,0xD0,0x02,0x6C,0x00,0x18,0xE0,0xDC,0xB0,0x67,
-0x6F,0x99,0x4D,0xEB,0x6F,0xD9,0x2D,0x10,0xE0,0xF0,0x4C,0xA1,0xFF,0x6C,0x01,0x72,
-0x1C,0xB2,0x15,0x61,0x43,0xA2,0x01,0x6B,0x6C,0xEA,0x04,0x22,0xC0,0xF2,0x58,0xA1,
-0x8C,0xEA,0x1F,0x2A,0x33,0x6A,0x7D,0x67,0xBD,0x67,0x58,0xC3,0x86,0x67,0x64,0x6A,
-0x18,0x4D,0x02,0x6E,0x04,0xD2,0x00,0x18,0xA0,0xDD,0x05,0xD7,0x12,0x10,0x43,0xA2,
-0x01,0x6B,0x6C,0xEA,0x04,0x22,0xC0,0xF2,0x57,0xA1,0x8C,0xEA,0x0A,0x2A,0x60,0xF2,
-0x4D,0xA1,0x8C,0xEA,0x01,0x72,0x05,0x61,0x9D,0x67,0x20,0x4C,0x80,0x18,0x44,0x34,
-0xA6,0x67,0xC0,0xF0,0x54,0xA9,0x07,0x6B,0x6B,0xEB,0x6C,0xEA,0xC0,0xF0,0x54,0xC9,
-0x0E,0x97,0x0D,0x91,0x0C,0x90,0x00,0xEF,0x08,0x63,0x00,0x00,0x48,0x60,0x11,0x80,
-0x00,0x46,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0xFF,0xF7,0x1F,0x6F,
-0xAC,0xEF,0xE4,0x32,0xE9,0xE2,0x4C,0x32,0xEB,0xE2,0x38,0xB3,0x4C,0x32,0xEB,0xE2,
-0x48,0x32,0x65,0xE2,0xC0,0xF0,0x54,0xA9,0xFF,0xF7,0x1F,0x6B,0xC4,0x67,0x6C,0xEA,
-0x02,0x6B,0x6C,0xEA,0x09,0x2A,0xC4,0xA4,0x01,0x6A,0x87,0x67,0x28,0x6D,0x4C,0xEE,
-0x20,0x18,0x9B,0x27,0x24,0x6F,0x52,0x10,0xF0,0xF0,0x0F,0x41,0xA5,0x46,0x90,0x67,
-0x08,0x6E,0x00,0x18,0x2E,0x2E,0x04,0xD7,0x29,0xB2,0x01,0x6D,0xFF,0x6E,0x60,0xA2,
-0x28,0xB2,0x04,0x97,0x83,0xA2,0xAC,0xEC,0x0E,0x24,0xC0,0xF2,0x56,0xA1,0xCC,0xEA,
-0x03,0x2A,0xC0,0xF2,0xB6,0xC1,0x0C,0x10,0x60,0xF2,0xBC,0xA9,0xFF,0xF7,0x1F,0x6A,
-0x00,0x6C,0x4C,0xED,0x29,0x10,0x20,0xF0,0x58,0xA1,0xCC,0xEA,0x03,0x72,0x1F,0x61,
-0x00,0xF1,0x46,0x81,0x00,0x52,0x17,0x60,0x7E,0x32,0x15,0x22,0xC0,0xF0,0x54,0xA9,
-0x04,0x68,0x03,0x6E,0x0D,0xEA,0x87,0x67,0xC0,0xF0,0x54,0xC9,0x00,0xF1,0xAF,0xC1,
-0x00,0x18,0x2D,0xE2,0xE6,0x67,0x7F,0x6C,0x00,0x18,0xE0,0xDC,0xB0,0x67,0x6F,0x99,
-0x4D,0xEB,0x6F,0xD9,0x13,0x10,0x80,0x18,0x53,0x34,0x87,0x67,0x0F,0x10,0x60,0xF2,
-0xBC,0xA9,0xFF,0xF7,0x1F,0x6B,0x6C,0xED,0x00,0x18,0xF8,0x4E,0xD0,0x67,0xC0,0xF0,
-0x54,0xA9,0x03,0x6B,0x6B,0xEB,0x6C,0xEA,0xC0,0xF0,0x54,0xC9,0x08,0x97,0x07,0x91,
-0x06,0x90,0x01,0x6A,0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0xC0,0x5B,0x11,0x80,
-0x00,0x46,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,0xFF,0xF7,0x1F,0x69,
-0xAC,0xE9,0x24,0x32,0x29,0xE2,0x4C,0x32,0x2B,0xE2,0x38,0xB3,0x4C,0x32,0x2B,0xE2,
-0x48,0x32,0x0C,0xD4,0x61,0xE2,0xC0,0xF0,0x54,0xA8,0x66,0xA4,0xFF,0xF7,0x1F,0x6C,
-0x8C,0xEA,0x04,0x6E,0xCC,0xEA,0x06,0x22,0x00,0xF1,0x4F,0xA0,0xFF,0x6D,0xAC,0xEA,
-0x6E,0xEA,0x0D,0x22,0x0C,0x92,0xFF,0x6C,0x7F,0x6D,0xE4,0xA2,0x24,0x6A,0x04,0xD2,
-0x8C,0xEF,0x01,0x6A,0x91,0x67,0x00,0x18,0xEF,0xE1,0x4C,0xEF,0x47,0x10,0x02,0x5B,
-0x0B,0x60,0x0C,0x95,0x6C,0x34,0x11,0xE4,0xE0,0xF0,0x1F,0x4C,0x08,0x4D,0x08,0x6E,
-0x00,0x18,0x2E,0x2E,0x06,0xD3,0x06,0x93,0x21,0xB2,0x01,0x6D,0x83,0xA2,0xAC,0xEC,
-0x15,0x24,0xC0,0xF2,0x57,0xA0,0xFF,0x6C,0x8C,0xEA,0x07,0x2A,0x80,0x18,0x53,0x34,
-0x91,0x67,0x01,0x6D,0xC0,0xF2,0xB7,0xC0,0x29,0x10,0x1A,0xB2,0x60,0xF2,0xBC,0xA8,
-0x00,0x6C,0xF0,0xA2,0x0C,0x92,0x08,0x4A,0x04,0xD2,0x11,0x10,0x20,0xF0,0x58,0xA0,
-0xFF,0x6D,0xAC,0xEA,0x03,0x72,0x04,0x61,0x00,0x18,0xA5,0xFF,0x91,0x67,0x16,0x10,
-0x10,0xB2,0x60,0xF2,0xBC,0xA8,0xF0,0xA2,0x0C,0x92,0x08,0x4A,0x04,0xD2,0xFF,0xF7,
-0x1F,0x6A,0x4C,0xED,0xFF,0x6A,0xC3,0x67,0x00,0x18,0x8A,0x41,0x4C,0xEF,0xC0,0xF0,
-0x54,0xA8,0x05,0x6B,0x6B,0xEB,0x6C,0xEA,0xC0,0xF0,0x54,0xC8,0x0A,0x97,0x09,0x91,
-0x08,0x90,0x00,0xEF,0x06,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x00,0x46,0x11,0x80,
-0xC0,0x5B,0x11,0x80,0xEF,0x63,0x20,0x62,0x1F,0xD1,0x1E,0xD0,0x64,0xAC,0xC4,0x67,
-0x24,0x73,0x22,0x61,0x94,0xB2,0x60,0xF1,0x50,0xA2,0x1E,0x22,0x7D,0x67,0x01,0xF4,
-0x03,0x6A,0x40,0xF0,0x58,0xCB,0x00,0x1C,0xDD,0x31,0x00,0x65,0x00,0x18,0xFE,0x4F,
-0x02,0x67,0x00,0x6D,0x9D,0x67,0xC5,0x67,0x80,0x18,0x49,0x2B,0x58,0x4C,0x80,0x18,
-0x4E,0x2F,0x03,0x6C,0x00,0x18,0xC4,0x53,0x00,0x6C,0x20,0x18,0x10,0x2F,0x00,0x65,
-0x00,0x1C,0xE5,0x31,0x90,0x67,0x01,0x11,0xFF,0xF7,0x1F,0x69,0x51,0x67,0x6C,0xEA,
-0x9C,0x72,0x1A,0x61,0x00,0x9E,0xFF,0x6F,0x44,0xA0,0x46,0x32,0x2C,0xEA,0x18,0x72,
-0x13,0x61,0xBA,0xA0,0x99,0xA0,0xDD,0x67,0xEC,0xED,0xEC,0xEC,0x00,0x18,0x1A,0xDF,
-0x5A,0x4E,0x06,0x2A,0xBD,0x67,0x40,0xF0,0x9A,0xAD,0x20,0x18,0x62,0x23,0x2C,0xEC,
-0x20,0x18,0xCF,0x06,0x90,0x67,0xD8,0x10,0xFF,0xF7,0x1F,0x6C,0x44,0x67,0x6C,0xEA,
-0x93,0x72,0x29,0x61,0x00,0x9E,0x44,0xA0,0x46,0x32,0x11,0x72,0x07,0x60,0x7F,0x72,
-0x22,0x61,0x45,0xA0,0xFF,0x6B,0x6C,0xEA,0x17,0x72,0x1D,0x61,0x6B,0xA8,0x8C,0xEB,
-0xFF,0x73,0x19,0x60,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,
-0x67,0xB3,0x48,0x32,0x69,0xE2,0xBF,0x9A,0x82,0x67,0x00,0x18,0xB2,0x69,0x1C,0xD6,
-0x01,0x72,0x64,0xA0,0x1C,0x96,0x03,0x61,0x01,0x6A,0x6D,0xEA,0x03,0x10,0x02,0x6A,
-0x4B,0xEA,0x6C,0xEA,0x44,0xC0,0x44,0xAE,0xFF,0xF7,0x1F,0x6C,0x93,0x72,0xA0,0xF0,
-0x09,0x61,0x00,0x9E,0xFF,0x6A,0xA2,0x67,0x64,0xA0,0x6C,0xED,0xA6,0x35,0x8C,0xED,
-0x18,0xD5,0xA5,0xA0,0x4C,0xED,0x19,0xD5,0x4B,0xA8,0x18,0x95,0x8C,0xEA,0x7F,0x75,
-0x1A,0xD2,0x03,0x61,0x19,0x92,0x04,0x72,0x04,0x60,0x18,0x95,0x28,0x75,0x80,0xF0,
-0x11,0x61,0xFF,0x69,0xC1,0x9E,0x51,0x67,0x6C,0xEA,0x46,0x32,0x2C,0xEA,0xA6,0x67,
-0x9D,0x67,0x18,0xD2,0x5C,0x4C,0xDA,0xC0,0x2C,0xED,0x00,0x18,0x3B,0x94,0x1C,0xD6,
-0x18,0x92,0x1C,0x96,0x7F,0x72,0x58,0x67,0x1B,0xD2,0x04,0x22,0xE1,0xF4,0x03,0x6F,
-0x00,0x6B,0x04,0x10,0x65,0xA0,0x01,0xF4,0x16,0x6F,0x2C,0xEB,0x10,0x6A,0x04,0xD2,
-0x40,0xB2,0x18,0x95,0x08,0xD3,0x05,0xD2,0x17,0x92,0x07,0xD5,0x01,0x6B,0x06,0xD2,
-0x59,0xA0,0x0A,0xD6,0x04,0x6C,0x09,0xD2,0x44,0xA0,0xFA,0x6D,0x6C,0xEA,0x0B,0xD2,
-0x4B,0xA8,0x0C,0xD2,0x38,0xB2,0x49,0xE6,0x44,0xA2,0xA2,0xF4,0x10,0x6E,0x6C,0xEA,
-0x0D,0xD2,0x44,0xA0,0x0E,0xD2,0x45,0xA0,0x0F,0xD2,0x46,0xA0,0x10,0xD2,0x47,0xA0,
-0x11,0xD2,0x48,0xA0,0x12,0xD2,0x49,0xA0,0x13,0xD2,0x4A,0xA0,0x14,0xD2,0x4B,0xA0,
-0x20,0x18,0x1B,0x32,0x15,0xD2,0x1A,0x92,0xFF,0x72,0x3E,0x60,0x1A,0x93,0x44,0x32,
-0xFF,0x6D,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x24,0xB3,0x48,0x32,
-0x65,0xE2,0xE0,0xF0,0x4B,0xA1,0xAC,0xEA,0x01,0x72,0x2E,0x61,0x20,0xF0,0x58,0xA1,
-0xFF,0x6B,0x6C,0xEA,0x0B,0x72,0x13,0x61,0x1C,0xB2,0xB0,0x67,0x00,0x18,0xE0,0x1D,
-0x80,0x9A,0x00,0xF2,0x54,0xA1,0xFF,0x6D,0xAC,0xEA,0x01,0x72,0x26,0x61,0x8D,0x99,
-0x00,0x18,0x1A,0x1E,0x00,0x6D,0x00,0x6A,0x00,0xF2,0x54,0xC1,0x1E,0x10,0x1A,0x94,
-0x00,0x18,0x5E,0xDE,0xB0,0x67,0x1B,0x92,0x08,0x2A,0x19,0x93,0x04,0x73,0x05,0x61,
-0x1A,0x95,0x80,0x18,0xD1,0x34,0x90,0x67,0x07,0x10,0x18,0x95,0x28,0x75,0x04,0x61,
-0x1A,0x95,0x80,0x18,0x91,0x34,0x90,0x67,0x08,0xB2,0xB0,0x67,0x00,0x18,0xE0,0x1D,
-0x80,0x9A,0x03,0x10,0x20,0x18,0xFA,0x24,0x86,0x67,0x20,0x97,0x1F,0x91,0x1E,0x90,
-0x00,0xEF,0x11,0x63,0x48,0x5C,0x11,0x80,0x64,0x52,0x11,0x80,0x48,0x60,0x11,0x80,
-0xFC,0xA5,0x10,0x80,0x04,0x46,0x11,0x80,0xFF,0x63,0x00,0xD0,0x0F,0xB0,0xFF,0xF7,
-0x1F,0x6A,0x4C,0xEC,0x00,0x6B,0xE2,0x67,0xFF,0x6E,0x64,0x32,0x69,0xE2,0x48,0x32,
-0x6B,0xE2,0x48,0x32,0x15,0xE2,0x43,0xAD,0xEC,0xEA,0x8E,0xEA,0x05,0x2A,0x42,0x9D,
-0x08,0x72,0x02,0x61,0x00,0x6A,0x05,0x10,0x01,0x4B,0xCC,0xEB,0x03,0x5B,0xED,0x61,
-0x01,0x6A,0x00,0x90,0x20,0xE8,0x01,0x63,0x98,0x5F,0x11,0x80,0xFD,0x63,0x04,0x62,
-0x16,0xB2,0x00,0x6B,0x60,0xF1,0x43,0xA2,0x01,0x72,0x14,0x61,0x14,0xB6,0x83,0x67,
-0xFF,0x6D,0x84,0x32,0x89,0xE2,0x4C,0x32,0x8B,0xE2,0x4C,0x32,0x8B,0xE2,0x48,0x32,
-0xC9,0xE2,0xE0,0xF0,0x4B,0xA2,0xAC,0xEA,0x01,0x72,0x0D,0x60,0x01,0x4C,0xAC,0xEC,
-0x0A,0x5C,0xEF,0x61,0x09,0xB2,0x60,0xF1,0x43,0xA2,0x02,0x5A,0x02,0x60,0x43,0x67,
-0x07,0x23,0x0C,0x6A,0x05,0x10,0x80,0x18,0xAE,0x35,0x00,0x65,0x62,0x67,0xF2,0x17,
-0x04,0x97,0x00,0xEF,0x03,0x63,0x00,0x00,0x48,0x5C,0x11,0x80,0x48,0x60,0x11,0x80,
-0xF9,0x63,0x0C,0x62,0x0B,0xD1,0x0A,0xD0,0x00,0x6A,0x0F,0xD5,0x06,0xD2,0x40,0xAC,
-0x24,0x67,0x01,0xF0,0x0B,0x72,0x0C,0x61,0xBD,0x67,0x80,0x18,0xD5,0x2B,0x10,0x4D,
-0x80,0xA9,0xFF,0xF7,0x1F,0x6B,0xA2,0x67,0x00,0x18,0xC5,0x4A,0x6C,0xEC,0xAC,0x10,
-0x00,0xF4,0x19,0x72,0x2C,0x61,0x49,0xA4,0x03,0x5A,0x02,0x61,0x01,0x6A,0x49,0xC4,
-0x7D,0x67,0x58,0xA3,0x00,0x1C,0xDD,0x31,0x52,0xC3,0xBD,0x67,0x91,0x67,0x12,0x4D,
-0x00,0x18,0xB7,0x45,0x07,0xD2,0x02,0x67,0x0C,0x2A,0xA9,0xA1,0xFF,0x6B,0x20,0x6A,
-0x6C,0xED,0xB8,0x35,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0xAA,0x6C,0x00,0x18,0xB6,0x33,
-0x4C,0xED,0x00,0x1C,0xE5,0x31,0x07,0x94,0x7D,0x67,0x52,0xA3,0xFF,0x6B,0x6C,0xEA,
-0x61,0x2A,0x80,0xA9,0xFF,0xF7,0x1F,0x6A,0xB0,0x67,0x4C,0xEC,0x58,0x10,0x00,0xF4,
-0x05,0x72,0x06,0x61,0x4B,0xA4,0x03,0x5A,0x79,0x61,0x01,0x6A,0x4B,0xC4,0x76,0x10,
-0x41,0xF4,0x12,0x72,0x10,0x61,0x00,0x18,0xE5,0x41,0x00,0x65,0x06,0x94,0x00,0x18,
-0x78,0x36,0x02,0x67,0x80,0xA9,0x06,0x96,0xFF,0xF7,0x1F,0x6A,0x4C,0xEC,0x00,0x18,
-0x33,0x4B,0xB0,0x67,0x3F,0x10,0x01,0xF0,0x04,0x72,0x3F,0x61,0x04,0xA4,0xFF,0xF7,
-0x1F,0x6A,0xFF,0xF7,0x1F,0x6B,0x00,0x30,0x4C,0xE8,0x43,0xA4,0xBD,0x67,0x14,0x4D,
-0x4D,0xE8,0x6C,0xE8,0x00,0x18,0x2A,0xDF,0x90,0x67,0x04,0x22,0x5D,0x67,0x0A,0xCA,
-0x02,0x6A,0x23,0x10,0x7D,0x67,0xAA,0xAB,0xFF,0xF7,0x1F,0x6B,0xAC,0xEB,0x64,0x32,
-0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x27,0xB3,0x48,0x32,0x69,0xE2,
-0x20,0xF0,0x78,0xA2,0xFF,0x6A,0x4C,0xEB,0x12,0x73,0x0A,0x60,0x19,0x73,0x08,0x60,
-0x80,0xA9,0xFF,0xF7,0x1F,0x6A,0x0C,0x6D,0x00,0x18,0xC5,0x4A,0x4C,0xEC,0x2E,0x10,
-0xFF,0xF7,0x1F,0x6C,0x00,0x18,0x0C,0x48,0xAC,0xEC,0x80,0xA9,0xA2,0x67,0x00,0x18,
-0xC5,0x4A,0x00,0x65,0x01,0x6B,0x06,0xD3,0x21,0x10,0x21,0xF4,0x06,0x72,0x1E,0x61,
-0x80,0x18,0xBF,0x35,0x00,0x65,0x10,0x2A,0x14,0xB0,0x7D,0x67,0x78,0xA3,0x60,0xF1,
-0x43,0xA0,0x91,0x67,0x60,0xF1,0x63,0xC0,0x00,0x18,0xFC,0x52,0x08,0xD2,0x7D,0x67,
-0x20,0xF0,0x60,0xA3,0x60,0xF1,0x63,0xC0,0x80,0xA9,0x06,0x96,0xFF,0xF7,0x1F,0x6B,
-0x6C,0xEC,0x00,0x18,0x33,0x4B,0xA2,0x67,0x01,0x6A,0x06,0xD2,0x06,0x92,0x03,0x22,
-0x0F,0x93,0x66,0x6A,0x40,0xC3,0x0C,0x97,0x0B,0x91,0x0A,0x90,0x01,0x6A,0x00,0xEF,
-0x07,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x48,0x5C,0x11,0x80,0xF5,0x63,0x14,0x62,
-0x13,0xD1,0x12,0xD0,0x00,0x6D,0x17,0xF7,0x0C,0x6E,0x00,0x18,0x01,0xA0,0x33,0x6C,
-0x61,0xB4,0x20,0x18,0xD6,0x32,0x00,0x69,0x20,0x18,0x5B,0x30,0x00,0x65,0x00,0x18,
-0xA6,0x5C,0x00,0x65,0x00,0x18,0xC8,0x8A,0x00,0x65,0x00,0x18,0xA3,0x9B,0x00,0x65,
-0x5A,0xB4,0x00,0x18,0x44,0x81,0x00,0x65,0x59,0xB0,0x00,0x18,0x4C,0x81,0x90,0x67,
-0x87,0x40,0x00,0x18,0x4C,0x81,0x01,0x4C,0x56,0xB4,0x57,0xB5,0x20,0xC0,0x00,0x18,
-0x2E,0x2E,0x30,0x6E,0x55,0xB5,0x88,0x40,0xD8,0x4C,0x00,0x18,0x2E,0x2E,0x30,0x6E,
-0x53,0xB5,0x87,0x40,0x11,0x4C,0x00,0x18,0x2E,0x2E,0x18,0x6E,0x51,0xB0,0x03,0x6B,
-0x40,0x98,0x42,0x32,0x4A,0x32,0x6C,0xEA,0x6A,0xEA,0x05,0x60,0x4E,0xB2,0x20,0xF1,
-0x2C,0xC2,0x20,0xF1,0x36,0xC2,0x00,0x18,0x04,0xF6,0x00,0x65,0x00,0x18,0x48,0x3C,
-0x00,0x65,0x00,0x18,0x71,0x32,0x00,0x65,0x00,0x18,0xE2,0x24,0x00,0x65,0x00,0x18,
-0x9A,0x7E,0x00,0x65,0x00,0x18,0xB5,0xC8,0x00,0x65,0x45,0xB3,0x43,0xB2,0x60,0xDA,
-0x00,0x18,0x0B,0x2B,0x00,0x65,0x40,0x98,0x0F,0x6B,0x46,0x32,0x6C,0xEA,0x03,0x72,
-0x05,0x61,0x9D,0x67,0x40,0x4C,0x00,0x18,0x1B,0x28,0x00,0x6D,0x00,0x18,0xE9,0x2F,
-0x00,0x65,0x80,0x18,0x68,0x2A,0x00,0x65,0x20,0x18,0xA2,0x39,0x00,0x65,0x80,0x18,
-0x1C,0x2A,0x00,0x65,0x00,0x1C,0xAD,0x31,0x00,0x65,0x29,0xF6,0x00,0x6D,0x00,0x18,
-0x17,0x2D,0x01,0x6C,0x09,0x6A,0x04,0xD2,0x32,0xB2,0x2F,0xB3,0x01,0x6C,0x05,0xD2,
-0x68,0xF1,0x1A,0x6A,0x06,0xD2,0x30,0xF0,0x0E,0x6A,0x07,0xD2,0x2E,0xB2,0xFA,0x6D,
-0x09,0xF6,0x17,0x6E,0x40,0x9A,0xA1,0xF3,0x16,0x6F,0x08,0xD2,0x40,0xF0,0x41,0xA3,
-0x09,0xD2,0x40,0xF0,0x40,0xA3,0x0A,0xD2,0x20,0xF0,0x5F,0xA3,0x0B,0xD2,0x20,0xF0,
-0x5E,0xA3,0x0C,0xD2,0x20,0xF0,0x5D,0xA3,0x0D,0xD2,0x20,0xF0,0x5C,0xA3,0x20,0x18,
-0x1B,0x32,0x0E,0xD2,0x21,0xB2,0x22,0xB3,0x40,0x9A,0x6E,0xEA,0x19,0x2A,0x21,0xB1,
-0x21,0xB3,0x40,0x99,0x6E,0xEA,0x14,0x2A,0x20,0xB0,0x21,0xB2,0x21,0xB3,0x80,0x98,
-0x8C,0xEA,0x6E,0xEA,0x0B,0x2A,0x20,0xB3,0x00,0xF6,0x82,0x32,0x00,0x6D,0x3F,0xF4,
-0x00,0x6C,0x00,0x18,0xFA,0x8B,0x40,0xC3,0x00,0x6A,0x40,0xD8,0x00,0x6A,0x40,0xD9,
-0x13,0xB3,0x12,0xB2,0x20,0x18,0x3D,0x36,0x60,0xDA,0x14,0x97,0x13,0x91,0x12,0x90,
-0x00,0xEF,0x0B,0x63,0x84,0xC8,0x00,0x80,0x03,0x00,0x00,0xC4,0x98,0x24,0x11,0x80,
-0x38,0x24,0x11,0x80,0xF8,0xDA,0x10,0x80,0x40,0xDB,0x10,0x80,0x28,0xDB,0x10,0x80,
-0x6C,0x1D,0x11,0x80,0xDC,0x00,0x11,0x80,0x5C,0xA1,0x00,0xB0,0x00,0x00,0x01,0x00,
-0xFC,0xA5,0x10,0x80,0x90,0x1E,0x11,0x80,0x3C,0x91,0x10,0x80,0xEF,0xBE,0x23,0x87,
-0x44,0x91,0x10,0x80,0x32,0x97,0x79,0x23,0x40,0x91,0x10,0x80,0xFF,0xFF,0xFF,0x00,
-0xEE,0xFF,0xC0,0x00,0xD0,0x00,0x11,0x80,0x2E,0x5A,0x2C,0x4B,0xCF,0x9D,0xF2,0xCB,
-0x74,0x9C,0x13,0xCE,0x57,0xF4,0x4C,0x54,0x48,0xA9,0xD3,0x53,0xC5,0x19,0x73,0x6F,
-0xF7,0xEB,0x68,0x53,0xCC,0xAE,0x50,0xF1,0x57,0x02,0xE2,0x66,0xA3,0x5C,0xBC,0xD3,
-0xB7,0xA6,0x2F,0xC9,0xAE,0xDC,0x77,0x9E,0x07,0x91,0x5F,0x86,0x91,0x8D,0xDC,0x27,
-0x00,0x5D,0xF1,0xD6,0xCF,0x0C,0x14,0x2B,0x62,0x5E,0xD2,0xEF,0xF4,0xA5,0x18,0xFF,
-0x15,0x20,0x70,0x09,0x98,0x44,0x21,0xA6,0x58,0x6F,0x9F,0xC3,0xFE,0x7E,0x43,0x29,
-0xD2,0x80,0x9E,0xA5,0x11,0x25,0xF8,0xED,0xB0,0x9D,0x42,0xB8,0x1B,0xC5,0xBD,0x00,
-0x9F,0x79,0xE4,0xB5,0x9D,0xBB,0xAA,0x85,0x7F,0xCA,0x85,0x6F,0xB9,0xF7,0xEA,0x25,
-0x07,0x04,0x05,0x01,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x02,0x04,0x00,0x00,0x00,
-0x01,0x03,0x02,0x04,0x00,0x00,0x00,0x00,0x1B,0x00,0xB7,0x00,0x53,0x01,0x36,0x00,
-0x6F,0x01,0xA7,0x02,0x53,0x00,0x28,0x02,0xFD,0x03,0x25,0x00,0x04,0x0B,0x0F,0x04,
-0x0A,0x0E,0x08,0x0B,0x0F,0x00,0x00,0x00,0x7A,0x41,0x2E,0x80,};
-
-#endif //CONFIG_MP_INCLUDED
-#ifndef CONFIG_PHY_SETTING_WITH_ODM
-const u32 Rtl8723SPHY_REG_2TArray[Rtl8723SPHY_REG_2TArrayLength] = {
-0x0, };
-
-const u32 Rtl8723SPHY_REG_1TArray[Rtl8723SPHY_REG_1TArrayLength] = {
-0x800,0x80040000,
-0x804,0x00000003,
-0x808,0x0000fc00,
-0x80c,0x0000000a,
-0x810,0x10005388,
-0x814,0x020c3d10,
-0x818,0x02200385,
-0x81c,0x00000000,
-0x820,0x01000100,
-0x824,0x00390004,
-0x828,0x00000000,
-0x82c,0x00000000,
-0x830,0x00000000,
-0x834,0x00000000,
-0x838,0x00000000,
-0x83c,0x00000000,
-0x840,0x00010000,
-0x844,0x00000000,
-0x848,0x00000000,
-0x84c,0x00000000,
-0x850,0x00000000,
-0x854,0x00000000,
-0x858,0x569a569a,
-0x85c,0x001b25a4,
-0x860,0x66f60110,
-0x864,0x061f0130,
-0x868,0x00000000,
-0x86c,0x32323200,
-0x870,0x07000760,
-0x874,0x22004000,
-0x878,0x00000808,
-0x87c,0x00000000,
-0x880,0xc0083070,
-0x884,0x000004d5,
-0x888,0x00000000,
-0x88c,0xccc000c0,
-0x890,0x00000800,
-0x894,0xfffffffe,
-0x898,0x40302010,
-0x89c,0x00706050,
-0x900,0x00000000,
-0x904,0x00000023,
-0x908,0x00000000,
-0x90c,0x81121111,
-0xa00,0x00d047c8,
-0xa04,0x80ff000c,
-0xa08,0x8c838300,
-0xa0c,0x2e68120f,
-0xa10,0x9500bb78,
-0xa14,0x11144028,
-0xa18,0x00881117,
-0xa1c,0x89140f00,
-0xa20,0x1a1b0000,
-0xa24,0x090e1317,
-0xa28,0x00000204,
-0xa2c,0x00d30000,
-0xa70,0x101fbf00,
-0xa74,0x00000007,
-0xa78,0x00000900,
-0xc00,0x48071d40,
-0xc04,0x03a05611,
-0xc08,0x000000e4,
-0xc0c,0x6c6c6c6c,
-0xc10,0x08800000,
-0xc14,0x40000100,
-0xc18,0x08800000,
-0xc1c,0x40000100,
-0xc20,0x00000000,
-0xc24,0x00000000,
-0xc28,0x00000000,
-0xc2c,0x00000000,
-0xc30,0x69e9ac44,
-0xc34,0x469652cf,
-0xc38,0x49795994,
-0xc3c,0x0a97971c,
-0xc40,0x1f7c403f,
-0xc44,0x000100b7,
-0xc48,0xec020107,
-0xc4c,0x007f037f,
-0xc50,0x69543420,
-0xc54,0x43bc0094,
-0xc58,0x69543420,
-0xc5c,0x433c0094,
-0xc60,0x00000000,
-0xc64,0x7116848b,
-0xc68,0x47c00bff,
-0xc6c,0x00000036,
-0xc70,0x2c7f000d,
-0xc74,0x018610db,
-0xc78,0x0000001f,
-0xc7c,0x00b91612,
-0xc80,0x40000100,
-0xc84,0x20f60000,
-0xc88,0x40000100,
-0xc8c,0x20200000,
-0xc90,0x00121820,
-0xc94,0x00000000,
-0xc98,0x00121820,
-0xc9c,0x00007f7f,
-0xca0,0x00000000,
-0xca4,0x00000080,
-0xca8,0x00000000,
-0xcac,0x00000000,
-0xcb0,0x00000000,
-0xcb4,0x00000000,
-0xcb8,0x00000000,
-0xcbc,0x28000000,
-0xcc0,0x00000000,
-0xcc4,0x00000000,
-0xcc8,0x00000000,
-0xccc,0x00000000,
-0xcd0,0x00000000,
-0xcd4,0x00000000,
-0xcd8,0x64b22427,
-0xcdc,0x00766932,
-0xce0,0x00222222,
-0xce4,0x00000000,
-0xce8,0x37644302,
-0xcec,0x2f97d40c,
-0xd00,0x00080740,
-0xd04,0x00020401,
-0xd08,0x0000907f,
-0xd0c,0x20010201,
-0xd10,0xa0633333,
-0xd14,0x3333bc43,
-0xd18,0x7a8f5b6b,
-0xd2c,0xcc979975,
-0xd30,0x00000000,
-0xd34,0x80608000,
-0xd38,0x00000000,
-0xd3c,0x00027293,
-0xd40,0x00000000,
-0xd44,0x00000000,
-0xd48,0x00000000,
-0xd4c,0x00000000,
-0xd50,0x6437140a,
-0xd54,0x00000000,
-0xd58,0x00000000,
-0xd5c,0x30032064,
-0xd60,0x4653de68,
-0xd64,0x04518a3c,
-0xd68,0x00002101,
-0xd6c,0x2a201c16,
-0xd70,0x1812362e,
-0xd74,0x322c2220,
-0xd78,0x000e3c24,
-0xe00,0x2a2a2a2a,
-0xe04,0x2a2a2a2a,
-0xe08,0x03902a2a,
-0xe10,0x2a2a2a2a,
-0xe14,0x2a2a2a2a,
-0xe18,0x2a2a2a2a,
-0xe1c,0x2a2a2a2a,
-0xe28,0x00000000,
-0xe30,0x1000dc1f,
-0xe34,0x10008c1f,
-0xe38,0x02140102,
-0xe3c,0x681604c2,
-0xe40,0x01007c00,
-0xe44,0x01004800,
-0xe48,0xfb000000,
-0xe4c,0x000028d1,
-0xe50,0x1000dc1f,
-0xe54,0x10008c1f,
-0xe58,0x02140102,
-0xe5c,0x28160d05,
-0xe60,0x00000008,
-0xe68,0x001b25a4,
-0xe6c,0x631b25a0,
-0xe70,0x631b25a0,
-0xe74,0x081b25a0,
-0xe78,0x081b25a0,
-0xe7c,0x081b25a0,
-0xe80,0x081b25a0,
-0xe84,0x631b25a0,
-0xe88,0x081b25a0,
-0xe8c,0x631b25a0,
-0xed0,0x631b25a0,
-0xed4,0x631b25a0,
-0xed8,0x631b25a0,
-0xedc,0x001b25a0,
-0xee0,0x001b25a0,
-0xeec,0x6b1b25a0,
-0xf14,0x00000003,
-0xf4c,0x00000000,
-0xf00,0x00000300,
-};
-
-const u32 Rtl8723SPHY_ChangeTo_1T1RArray[Rtl8723SPHY_ChangeTo_1T1RArrayLength] = {
-0x0, };
-
-const u32 Rtl8723SPHY_ChangeTo_1T2RArray[Rtl8723SPHY_ChangeTo_1T2RArrayLength] = {
-0x0, };
-
-const u32 Rtl8723SPHY_ChangeTo_2T2RArray[Rtl8723SPHY_ChangeTo_2T2RArrayLength] = {
-0x0, };
-
-const u32 Rtl8723SRadioA_2TArray[Rtl8723SRadioA_2TArrayLength] = {
-0x0, };
-
-const u32 Rtl8723SRadioB_2TArray[Rtl8723SRadioB_2TArrayLength] = {
-0x0, };
-
-const u32 Rtl8723SRadioA_1TArray[Rtl8723SRadioA_1TArrayLength] = {
-0x000,0x00030159,
-0x001,0x00031284,
-0x002,0x00098000,
-0x003,0x00039c63,
-0x004,0x000210e7,
-0x009,0x0002044f,
-0x00a,0x0001a3f1,
-0x00b,0x00014787,
-0x00c,0x000896fe,
-0x00d,0x0000e02c,
-0x00e,0x00039ce7,
-0x00f,0x00000451,
-0x019,0x00000000,
-0x01a,0x00030355,
-0x01b,0x00060a00,
-0x01c,0x000fc378,
-0x01d,0x000a1250,
-0x01e,0x0000024f,
-0x01f,0x00000000,
-0x020,0x0000b614,
-0x021,0x0006c000,
-0x022,0x00000000,
-0x023,0x00001558,
-0x024,0x00000060,
-0x025,0x00000483,
-0x026,0x0004f000,
-0x027,0x000ec7d9,
-0x028,0x00057730,
-0x029,0x00004783,
-0x02a,0x00000001,
-0x02b,0x00021334,
-0x02a,0x00000000,
-0x02b,0x00000054,
-0x02a,0x00000001,
-0x02b,0x00000808,
-0x02b,0x00053333,
-0x02c,0x0000000c,
-0x02a,0x00000002,
-0x02b,0x00000808,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000003,
-0x02b,0x00000808,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000004,
-0x02b,0x00000808,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x00000005,
-0x02b,0x00000808,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x00000006,
-0x02b,0x00000709,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000007,
-0x02b,0x00000709,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000008,
-0x02b,0x0000060a,
-0x02b,0x0004b333,
-0x02c,0x0000000d,
-0x02a,0x00000009,
-0x02b,0x0000060a,
-0x02b,0x00053333,
-0x02c,0x0000000d,
-0x02a,0x0000000a,
-0x02b,0x0000060a,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x0000000b,
-0x02b,0x0000060a,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x0000000c,
-0x02b,0x0000060a,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x0000000d,
-0x02b,0x0000060a,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x0000000e,
-0x02b,0x0000050b,
-0x02b,0x00066666,
-0x02c,0x0000001a,
-0x02a,0x000e0000,
-0x010,0x0004000f,
-0x011,0x000e31fc,
-0x010,0x0006000f,
-0x011,0x000ff9f8,
-0x010,0x0002000f,
-0x011,0x000203f9,
-0x010,0x0003000f,
-0x011,0x000ff500,
-0x010,0x00000000,
-0x011,0x00000000,
-0x010,0x0008000f,
-0x011,0x0003f100,
-0x010,0x0009000f,
-0x011,0x00023100,
-0x012,0x00032000,
-0x012,0x00071000,
-0x012,0x000b0000,
-0x012,0x000fc000,
-0x013,0x000287b3,
-0x013,0x000244b7,
-0x013,0x000204ab,
-0x013,0x0001c49f,
-0x013,0x00018493,
-0x013,0x0001429b,
-0x013,0x00010299,
-0x013,0x0000c29c,
-0x013,0x000081a0,
-0x013,0x000040ac,
-0x013,0x00000020,
-0x014,0x0001944c,
-0x014,0x00059444,
-0x014,0x0009944c,
-0x014,0x000d9444,
-0x015,0x0000f474,
-0x015,0x0004f477,
-0x015,0x0008f474,
-0x015,0x000cf474,
-0x016,0x00000339,
-0x016,0x00040339,
-0x016,0x00080339,
-0x016,0x000c0366,
-0x000,0x00010159,
-0x018,0x0000f401,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01f,0x00000003,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01e,0x00000247,
-0x01f,0x00000000,
-0x000,0x00030159,
-};
-
-const u32 Rtl8723SRadioB_1TArray[Rtl8723SRadioB_1TArrayLength] = {
-0x0, };
-
-const u32 Rtl8723SRadioB_GM_Array[Rtl8723SRadioB_GM_ArrayLength] = {
-0x0, };
-
-const u32 Rtl8723SMAC_2T_Array[Rtl8723SMAC_2T_ArrayLength] = {
-0x420,0x00000080,
-0x423,0x00000000,
-0x430,0x00000000,
-0x431,0x00000000,
-0x432,0x00000000,
-0x433,0x00000001,
-0x434,0x00000004,
-0x435,0x00000005,
-0x436,0x00000006,
-0x437,0x00000007,
-0x438,0x00000000,
-0x439,0x00000000,
-0x43a,0x00000000,
-0x43b,0x00000001,
-0x43c,0x00000004,
-0x43d,0x00000005,
-0x43e,0x00000006,
-0x43f,0x00000007,
-0x440,0x0000005d,
-0x441,0x00000001,
-0x442,0x00000000,
-0x444,0x00000015,
-0x445,0x000000f0,
-0x446,0x0000000f,
-0x447,0x00000000,
-0x458,0x00000041,
-0x459,0x000000a8,
-0x45a,0x00000072,
-0x45b,0x000000b9,
-0x460,0x00000066,
-0x461,0x00000066,
-0x462,0x00000008,
-0x463,0x00000003,
-0x4c8,0x000000ff,
-0x4c9,0x00000008,
-0x4cc,0x000000ff,
-0x4cd,0x000000ff,
-0x4ce,0x00000001,
-0x500,0x00000026,
-0x501,0x000000a2,
-0x502,0x0000002f,
-0x503,0x00000000,
-0x504,0x00000028,
-0x505,0x000000a3,
-0x506,0x0000005e,
-0x507,0x00000000,
-0x508,0x0000002b,
-0x509,0x000000a4,
-0x50a,0x0000005e,
-0x50b,0x00000000,
-0x50c,0x0000004f,
-0x50d,0x000000a4,
-0x50e,0x00000000,
-0x50f,0x00000000,
-0x512,0x0000001c,
-0x514,0x0000000a,
-0x515,0x00000010,
-0x516,0x0000000a,
-0x517,0x00000010,
-0x51a,0x00000016,
-0x524,0x0000000f,
-0x525,0x0000004f,
-0x546,0x00000040,
-0x547,0x00000000,
-0x550,0x00000010,
-0x551,0x00000010,
-0x559,0x00000002,
-0x55a,0x00000002,
-0x55d,0x000000ff,
-0x605,0x00000030,
-0x608,0x0000000e,
-0x609,0x0000002a,
-0x652,0x00000020,
-0x63c,0x0000000a,
-0x63d,0x0000000e,
-0x63e,0x0000000a,
-0x63f,0x0000000e,
-0x66e,0x00000005,
-0x700,0x00000021,
-0x701,0x00000043,
-0x702,0x00000065,
-0x703,0x00000087,
-0x708,0x00000021,
-0x709,0x00000043,
-0x70a,0x00000065,
-0x70b,0x00000087,
-};
-
-const u32 Rtl8723SAGCTAB_2TArray[Rtl8723SAGCTAB_2TArrayLength] = {
-0x0, };
-
-const u32 Rtl8723SAGCTAB_1TArray[Rtl8723SAGCTAB_1TArrayLength] = {
-0xc78,0x7b000001,
-0xc78,0x7b010001,
-0xc78,0x7b020001,
-0xc78,0x7b030001,
-0xc78,0x7b040001,
-0xc78,0x7b050001,
-0xc78,0x7a060001,
-0xc78,0x79070001,
-0xc78,0x78080001,
-0xc78,0x77090001,
-0xc78,0x760a0001,
-0xc78,0x750b0001,
-0xc78,0x740c0001,
-0xc78,0x730d0001,
-0xc78,0x720e0001,
-0xc78,0x710f0001,
-0xc78,0x70100001,
-0xc78,0x6f110001,
-0xc78,0x6e120001,
-0xc78,0x6d130001,
-0xc78,0x6c140001,
-0xc78,0x6b150001,
-0xc78,0x6a160001,
-0xc78,0x69170001,
-0xc78,0x68180001,
-0xc78,0x67190001,
-0xc78,0x661a0001,
-0xc78,0x651b0001,
-0xc78,0x641c0001,
-0xc78,0x631d0001,
-0xc78,0x621e0001,
-0xc78,0x611f0001,
-0xc78,0x60200001,
-0xc78,0x49210001,
-0xc78,0x48220001,
-0xc78,0x47230001,
-0xc78,0x46240001,
-0xc78,0x45250001,
-0xc78,0x44260001,
-0xc78,0x43270001,
-0xc78,0x42280001,
-0xc78,0x41290001,
-0xc78,0x402a0001,
-0xc78,0x262b0001,
-0xc78,0x252c0001,
-0xc78,0x242d0001,
-0xc78,0x232e0001,
-0xc78,0x222f0001,
-0xc78,0x21300001,
-0xc78,0x20310001,
-0xc78,0x06320001,
-0xc78,0x05330001,
-0xc78,0x04340001,
-0xc78,0x03350001,
-0xc78,0x02360001,
-0xc78,0x01370001,
-0xc78,0x00380001,
-0xc78,0x00390001,
-0xc78,0x003a0001,
-0xc78,0x003b0001,
-0xc78,0x003c0001,
-0xc78,0x003d0001,
-0xc78,0x003e0001,
-0xc78,0x003f0001,
-0xc78,0x7b400001,
-0xc78,0x7b410001,
-0xc78,0x7b420001,
-0xc78,0x7b430001,
-0xc78,0x7b440001,
-0xc78,0x7b450001,
-0xc78,0x7a460001,
-0xc78,0x79470001,
-0xc78,0x78480001,
-0xc78,0x77490001,
-0xc78,0x764a0001,
-0xc78,0x754b0001,
-0xc78,0x744c0001,
-0xc78,0x734d0001,
-0xc78,0x724e0001,
-0xc78,0x714f0001,
-0xc78,0x70500001,
-0xc78,0x6f510001,
-0xc78,0x6e520001,
-0xc78,0x6d530001,
-0xc78,0x6c540001,
-0xc78,0x6b550001,
-0xc78,0x6a560001,
-0xc78,0x69570001,
-0xc78,0x68580001,
-0xc78,0x67590001,
-0xc78,0x665a0001,
-0xc78,0x655b0001,
-0xc78,0x645c0001,
-0xc78,0x635d0001,
-0xc78,0x625e0001,
-0xc78,0x615f0001,
-0xc78,0x60600001,
-0xc78,0x49610001,
-0xc78,0x48620001,
-0xc78,0x47630001,
-0xc78,0x46640001,
-0xc78,0x45650001,
-0xc78,0x44660001,
-0xc78,0x43670001,
-0xc78,0x42680001,
-0xc78,0x41690001,
-0xc78,0x406a0001,
-0xc78,0x266b0001,
-0xc78,0x256c0001,
-0xc78,0x246d0001,
-0xc78,0x236e0001,
-0xc78,0x226f0001,
-0xc78,0x21700001,
-0xc78,0x20710001,
-0xc78,0x06720001,
-0xc78,0x05730001,
-0xc78,0x04740001,
-0xc78,0x03750001,
-0xc78,0x02760001,
-0xc78,0x01770001,
-0xc78,0x00780001,
-0xc78,0x00790001,
-0xc78,0x007a0001,
-0xc78,0x007b0001,
-0xc78,0x007c0001,
-0xc78,0x007d0001,
-0xc78,0x007e0001,
-0xc78,0x007f0001,
-0xc78,0x3800001e,
-0xc78,0x3801001e,
-0xc78,0x3802001e,
-0xc78,0x3803001e,
-0xc78,0x3804001e,
-0xc78,0x3805001e,
-0xc78,0x3806001e,
-0xc78,0x3807001e,
-0xc78,0x3808001e,
-0xc78,0x3c09001e,
-0xc78,0x3e0a001e,
-0xc78,0x400b001e,
-0xc78,0x440c001e,
-0xc78,0x480d001e,
-0xc78,0x4c0e001e,
-0xc78,0x500f001e,
-0xc78,0x5210001e,
-0xc78,0x5611001e,
-0xc78,0x5a12001e,
-0xc78,0x5e13001e,
-0xc78,0x6014001e,
-0xc78,0x6015001e,
-0xc78,0x6016001e,
-0xc78,0x6217001e,
-0xc78,0x6218001e,
-0xc78,0x6219001e,
-0xc78,0x621a001e,
-0xc78,0x621b001e,
-0xc78,0x621c001e,
-0xc78,0x621d001e,
-0xc78,0x621e001e,
-0xc78,0x621f001e,
-};
-
-#endif//endif CONFIG_PHY_SETTING_ODM
-
-const u32 Rtl8723SPHY_REG_Array_PG[Rtl8723SPHY_REG_Array_PGLength] = {
-0xe00,0xffffffff,0x0a0c0c0c,
-0xe04,0xffffffff,0x02040608,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x0a0c0d0e,
-0xe14,0xffffffff,0x02040608,
-0xe18,0xffffffff,0x0a0c0d0e,
-0xe1c,0xffffffff,0x02040608,
-0x830,0xffffffff,0x0a0c0c0c,
-0x834,0xffffffff,0x02040608,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x0a0c0d0e,
-0x848,0xffffffff,0x02040608,
-0x84c,0xffffffff,0x0a0c0d0e,
-0x868,0xffffffff,0x02040608,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x04040404,
-0xe04,0xffffffff,0x00020204,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x06060606,
-0xe14,0xffffffff,0x00020406,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x04040404,
-0x834,0xffffffff,0x00020204,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x06060606,
-0x848,0xffffffff,0x00020406,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x04040404,
-0xe04,0xffffffff,0x00020204,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x04040404,
-0x834,0xffffffff,0x00020204,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-};
-
-const u32 Rtl8723SMACPHY_Array_PG[Rtl8723SMACPHY_Array_PGLength] = {
-0x0, };
-#if MP_DRIVER == 1
-const u32 Rtl8723SPHY_REG_Array_MP[Rtl8723SPHY_REG_Array_MPLength] = {
-0xc30,0x69e9ac4a,
-0xc3c,0x0a979718,
-};
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+/*Created on 2013/02/26, 18:59*/
+#include "../odm_precomp.h"
+
+const u8 Rtl8723SFwImgArray[Rtl8723SImgArrayLength] = {
+0x01,0x23,0x02,0x00,0x0e,0x00,0x00,0x00,0x11,0x16,0x12,0x05,0x5e,0x50,0x01,0x00,
+0x31,0x84,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x02,0x44,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x02,0x58,0x67,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x02,0x60,0xbf,0x00,0x00,0x00,0x00,0x00,0x02,0x53,0x36,0x00,0x00,
+0x00,0x00,0x00,0x02,0x51,0x6b,0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,
+0x00,0x04,0x06,0x05,0x04,0x02,0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,
+0x08,0x06,0x00,0x08,0x0a,0x09,0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,
+0x0a,0x09,0x08,0x00,0x00,0x08,0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,
+0x00,0x18,0x22,0x21,0x20,0x18,0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,
+0x20,0x08,0x00,0x20,0x22,0x21,0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,
+0x22,0x20,0x18,0x08,0x00,0x20,0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,
+0x00,0x30,0x31,0x2f,0x10,0x10,0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,
+0x10,0x00,0x00,0x30,0x31,0x20,0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,
+0x04,0x04,0x04,0x05,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x04,0x05,
+0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,
+0x05,0x05,0x06,0x07,0x0a,0x0b,0x0d,0x10,0x04,0x05,0x05,0x06,0x06,0x09,0x0c,0x11,
+0x08,0x08,0x09,0x09,0x0a,0x0c,0x10,0x11,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x07,
+0x07,0x07,0x08,0x0a,0x04,0x04,0x04,0x04,0x06,0x0a,0x0b,0x0d,0x05,0x05,0x07,0x07,
+0x08,0x0b,0x0d,0x0f,0x04,0x04,0x04,0x05,0x07,0x07,0x09,0x09,0x0c,0x0e,0x10,0x12,
+0x04,0x04,0x05,0x05,0x06,0x0a,0x11,0x13,0x09,0x09,0x09,0x09,0x0c,0x0e,0x11,0x13,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,
+0x21,0x27,0x29,0x2a,0x00,0x00,0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,
+0x00,0x08,0x00,0x10,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,
+0x00,0xc0,0x00,0xd8,0x00,0x50,0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,
+0x01,0xe0,0x02,0x30,0x01,0x2c,0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,
+0x06,0x40,0x07,0xd0,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,
+0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,
+0x00,0x50,0x00,0x64,0x00,0xa0,0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,
+0x00,0xf0,0x01,0x68,0x01,0xf4,0x02,0x58,0x03,0x20,0x03,0xe8,0x02,0x02,0x02,0x02,
+0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x07,0x04,0x04,0x07,0x0a,0x0a,0x0c,0x0c,0x12,
+0x05,0x07,0x07,0x08,0x0b,0x12,0x24,0x3c,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,
+0x05,0x06,0x07,0x08,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,
+0x09,0x0a,0x0b,0x0c,0x20,0x1e,0x1c,0x18,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
+0xbb,0x01,0x06,0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,0xf7,0x22,0xbb,0xfe,0x01,
+0xf3,0x22,0xf8,0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,
+0xe8,0xf0,0x22,0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,0xbb,0xfe,0x05,0xe9,0x25,
+0x82,0xc8,0xf2,0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,
+0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,
+0x83,0xe0,0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,
+0xfe,0x07,0xe3,0xf5,0xf0,0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,
+0xf0,0x74,0x01,0x93,0x22,0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,
+0xf5,0x83,0xe0,0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,
+0x08,0xe6,0x22,0xbb,0xfe,0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,
+0xe5,0x83,0x2a,0xf5,0x83,0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,
+0x89,0x82,0x8a,0x83,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,
+0x19,0x22,0xbb,0xfe,0x06,0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,
+0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,
+0x22,0x50,0x09,0xe9,0x25,0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,
+0x25,0x82,0xc8,0xf2,0xe5,0xf0,0x08,0xf2,0x22,0xef,0x4b,0xff,0xee,0x4a,0xfe,0xed,
+0x49,0xfd,0xec,0x48,0xfc,0x22,0xbb,0x01,0x07,0x89,0x82,0x8a,0x83,0x02,0x43,0x46,
+0x50,0x05,0xe9,0xf8,0x02,0x43,0xda,0xbb,0xfe,0x05,0xe9,0xf8,0x02,0x43,0xe6,0x89,
+0x82,0x8a,0x83,0x02,0x43,0xf2,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,
+0xff,0x22,0xa4,0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,0x22,0xe0,0xfb,
+0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x22,0xf8,0xe0,0xfb,0xa3,0xa3,0xe0,0xf9,0x25,0xf0,
+0xf0,0xe5,0x82,0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,
+0xa3,0xea,0xf0,0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,
+0x74,0x01,0x93,0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,
+0xe4,0x73,0x74,0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0xd0,0x83,0xd0,
+0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,
+0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,0x02,0x93,0xb5,0xf0,0x06,0x74,0x03,
+0x93,0x68,0x60,0xe9,0xa3,0xa3,0xa3,0xa3,0x80,0xd8,0xe6,0xfc,0x08,0xe6,0xfd,0x08,
+0xe6,0xfe,0x08,0xe6,0xff,0x22,0xe2,0xfc,0x08,0xe2,0xfd,0x08,0xe2,0xfe,0x08,0xe2,
+0xff,0x22,0xe4,0x93,0xfc,0x74,0x01,0x93,0xfd,0x74,0x02,0x93,0xfe,0x74,0x03,0x93,
+0xff,0x22,0x02,0x44,0x40,0x02,0x4b,0x85,0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,
+0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,
+0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,
+0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
+0x90,0x44,0x85,0xe4,0x7e,0x01,0x93,0x60,0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,
+0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,
+0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,
+0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,
+0xe9,0xde,0xe7,0x80,0xbe,0x48,0x9e,0x8d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x9e,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x9e,0x8c,0x00,0x41,
+0x9f,0x14,0x00,0x41,0x9e,0x9e,0x80,0x41,0x9e,0x9f,0x80,0x41,0x9d,0xa8,0x00,0x41,
+0x9d,0xa9,0x00,0x41,0x9d,0xa7,0x00,0x41,0x9e,0xb3,0x00,0x00,0x90,0x9e,0x69,0xe0,
+0xfe,0xa3,0xe0,0xff,0x90,0x02,0x84,0xef,0xf0,0xa3,0xee,0xf0,0xa3,0x74,0x05,0xf0,
+0x22,0xe5,0x68,0x30,0xe3,0x04,0xe4,0xff,0x80,0x02,0x7f,0x01,0xe1,0xd6,0x8f,0x82,
+0x8e,0x83,0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0x90,0x9e,0xd1,0xe0,0x30,0xe0,0x05,0xaf,
+0x69,0x02,0x56,0x5f,0x02,0x4c,0x80,0x22,0x7f,0x00,0x22,0x90,0x01,0x64,0x74,0x20,
+0xf0,0x22,0x22,0x02,0x61,0x15,0x02,0x61,0x1c,0xef,0x8e,0xf0,0x71,0xad,0x45,0x26,
+0x00,0x40,0x45,0x4e,0x00,0x80,0x45,0x79,0x01,0x00,0x45,0x8d,0x02,0x00,0x45,0xa5,
+0x04,0x00,0x00,0x00,0x45,0xc2,0xed,0x54,0x3f,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,
+0x00,0x7f,0x40,0xef,0x2d,0xff,0xee,0x3c,0xfe,0xef,0x78,0x06,0xce,0xc3,0x13,0xce,
+0x13,0xd8,0xf9,0x78,0x06,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0x80,0x26,0xed,0x54,
+0x7f,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,0x00,0x7f,0x80,0xef,0x2d,0xff,0xee,0x3c,
+0xfe,0xef,0x78,0x07,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x78,0x07,0xc3,0x33,0xce,
+0x33,0xce,0xd8,0xf9,0xfd,0xac,0x06,0x80,0x49,0xed,0x70,0x04,0xfe,0xff,0x80,0x04,
+0x7e,0x01,0x7f,0x00,0xef,0x2d,0xee,0x3c,0x7d,0x00,0xfc,0x80,0x35,0xec,0x54,0x01,
+0x4d,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,0x02,0x7f,0x00,0xef,0x2d,0xee,0x3c,0xc3,
+0x13,0x7d,0x00,0x80,0x1a,0xec,0x54,0x03,0x4d,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,
+0x04,0x7f,0x00,0xef,0x2d,0xee,0x3c,0x13,0x13,0x54,0x3f,0x7d,0x00,0x25,0xe0,0x25,
+0xe0,0xfc,0xae,0x04,0xaf,0x05,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0x90,
+0x9e,0x6f,0xf0,0xa3,0x74,0x08,0xf0,0xa3,0xf0,0x90,0x01,0x1f,0xe0,0xfe,0x90,0x01,
+0x1e,0xe0,0x7c,0x00,0x24,0x00,0xff,0xec,0x3e,0x90,0x9e,0x69,0xf0,0xa3,0xef,0xf0,
+0x90,0x02,0x87,0xe0,0x90,0x9e,0x6e,0xf0,0x90,0x9e,0xbc,0xe0,0x20,0xe0,0x02,0xe1,
+0x49,0xe4,0x90,0x9e,0x6d,0xf0,0x90,0x9e,0x6e,0xe0,0xff,0x90,0x9e,0x6d,0xe0,0xc3,
+0x9f,0x40,0x02,0xe1,0x49,0x90,0x9e,0x69,0xe0,0xfc,0xa3,0xe0,0xfd,0xec,0x90,0xfd,
+0x11,0xf0,0x74,0x02,0x2d,0xf5,0x82,0xe4,0x34,0xfb,0xf5,0x83,0xe0,0x54,0x0f,0xfc,
+0x33,0x33,0x33,0x54,0xf8,0xff,0xed,0x24,0x18,0x2f,0x90,0x9e,0x6b,0xf0,0xe0,0x24,
+0x00,0xf5,0x82,0xe4,0x34,0xfb,0xf5,0x83,0xe0,0x54,0xfc,0x90,0x9e,0x6c,0xf0,0x74,
+0x01,0x2d,0xf5,0x82,0xe4,0x34,0xfb,0xf5,0x83,0xe0,0xfe,0x74,0x00,0x2d,0xf5,0x82,
+0xe4,0x34,0xfb,0xf5,0x83,0xe0,0x7a,0x00,0x24,0x00,0xff,0xea,0x3e,0x54,0x3f,0xab,
+0x07,0xfa,0xaf,0x04,0xef,0x75,0xf0,0x08,0xa4,0x24,0x18,0xff,0xe4,0x35,0xf0,0xfe,
+0xef,0x2b,0xfb,0xee,0x3a,0xfa,0x90,0x9e,0xc2,0xe0,0xfe,0xa3,0xe0,0xff,0xad,0x03,
+0xac,0x02,0xb1,0x09,0xaa,0x06,0xab,0x07,0x90,0x9e,0x69,0xee,0x8f,0xf0,0x51,0x54,
+0x90,0x9e,0xc0,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x9e,0x69,0xe0,0xfc,0xa3,0xe0,0xfd,
+0xd3,0x9f,0xec,0x9e,0x40,0x1b,0x90,0x9e,0xc1,0xe0,0x24,0x01,0xff,0x90,0x9e,0xc0,
+0xe0,0x34,0x00,0xfe,0xc3,0xed,0x9f,0xff,0xec,0x9e,0x90,0x9e,0x69,0xf0,0xa3,0xef,
+0xf0,0x90,0x9e,0x6c,0xe0,0xff,0x24,0x40,0x60,0x04,0x24,0x20,0x70,0x24,0x90,0x9e,
+0xbc,0xe0,0xfe,0xc4,0x13,0x13,0x13,0x54,0x01,0x30,0xe0,0x29,0xef,0x90,0x00,0x81,
+0xb4,0xa0,0x06,0xe0,0x44,0x04,0xf0,0x80,0x04,0xe0,0x44,0x08,0xf0,0x90,0x9e,0xbf,
+0x80,0x0f,0x90,0x9e,0xbc,0xe0,0xff,0xc4,0x13,0x13,0x54,0x03,0x30,0xe0,0x06,0x80,
+0x04,0xe0,0x44,0x01,0xf0,0x90,0x9e,0xbf,0xe0,0x20,0xe0,0x07,0x90,0x01,0x3f,0xe0,
+0x30,0xe2,0x10,0xf1,0x4e,0x90,0x9e,0xbc,0xe0,0xc4,0x54,0x0f,0x30,0xe0,0x12,0x91,
+0xbc,0x80,0x0e,0x91,0xbc,0x90,0x01,0xbf,0xe0,0x04,0xf0,0x90,0x00,0xe2,0xe0,0x04,
+0xf0,0x90,0x9e,0x6d,0xe0,0x04,0xf0,0xc1,0x06,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,
+0x9b,0xe0,0x64,0x02,0x70,0x33,0x90,0x9e,0xbd,0xe0,0xff,0x90,0x9e,0xbc,0xe0,0xfe,
+0xc4,0x13,0x54,0x01,0xfd,0x12,0x4e,0xa4,0x90,0x9e,0xbe,0xe0,0x75,0xf0,0x20,0xa4,
+0xff,0xae,0xf0,0x12,0x3b,0x3b,0x90,0x9e,0xbd,0xe0,0xff,0x90,0x9e,0xbc,0xe0,0xfe,
+0xc4,0x13,0x54,0x01,0xf4,0xfd,0x02,0x4e,0xa4,0x90,0x06,0x90,0xe0,0x44,0x01,0xf0,
+0x22,0x90,0x9e,0xb4,0xe0,0x30,0xe0,0x3d,0xe5,0x67,0x64,0x01,0x70,0x37,0x90,0x9e,
+0xb8,0xe0,0x60,0x31,0x90,0x9e,0x8e,0xe0,0xc4,0x13,0x13,0x54,0x03,0x30,0xe0,0x02,
+0x80,0x15,0x90,0x9e,0xb8,0xe0,0xff,0x90,0x9e,0xb6,0xe0,0xb5,0x07,0x0f,0xf1,0x4e,
+0x90,0x00,0x81,0xe0,0x44,0x10,0xf0,0xe4,0x90,0x9e,0xb8,0xf0,0x22,0x91,0xd1,0x90,
+0x9e,0xb8,0xe0,0x04,0xf0,0x22,0x8f,0x27,0x12,0x4f,0xf8,0xef,0x64,0x01,0x70,0x2e,
+0x90,0x9e,0x97,0x12,0x50,0x26,0xe5,0x27,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,
+0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,
+0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xd3,
+0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8b,0x60,0x8a,0x61,0x89,0x62,0x90,0x9e,0xe6,0x12,
+0x43,0x7e,0xab,0x63,0xaa,0x64,0xa9,0x65,0x90,0x9e,0xe9,0x12,0x43,0x7e,0xaf,0x66,
+0x15,0x66,0xef,0x60,0x1e,0x90,0x9e,0xe9,0xe4,0x75,0xf0,0x01,0x12,0x43,0x67,0x12,
+0x1f,0x04,0xff,0x90,0x9e,0xe6,0xe4,0x75,0xf0,0x01,0x12,0x43,0x67,0xef,0x12,0x42,
+0x20,0x80,0xdb,0xab,0x60,0xaa,0x61,0xa9,0x62,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,
+0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xec,0x12,0x43,0x7e,0x90,0x9e,0x9b,0xe0,0x64,
+0x01,0x60,0x66,0x90,0x9e,0x9b,0xe0,0x70,0x60,0x90,0x9d,0xa7,0xe0,0xff,0x04,0xf0,
+0x90,0x9e,0xec,0x12,0x43,0x5e,0x90,0x00,0x01,0xef,0x12,0x42,0x32,0x31,0x8f,0xef,
+0x60,0x47,0x90,0x9e,0xec,0x12,0x43,0x5e,0x8b,0x63,0x8a,0x64,0x89,0x65,0x75,0x66,
+0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x11,0x0f,0x90,0x9e,0xef,0x12,0x43,0x5e,0x8b,
+0x63,0x8a,0x64,0x89,0x65,0x90,0x9e,0xec,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0xc4,
+0x54,0x0f,0xf5,0x66,0x7b,0x01,0x7a,0x01,0x79,0xa2,0x11,0x0f,0x90,0x01,0xaf,0x74,
+0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,
+0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xf2,0x12,0x43,0x7e,0x90,0x9d,0xa9,0xe0,0xff,
+0x90,0x9d,0xa8,0xe0,0xb5,0x07,0x07,0x7d,0x02,0x7f,0x03,0x12,0x3a,0xdf,0x90,0x9d,
+0xa8,0xe0,0x70,0x06,0xa3,0xe0,0x64,0x09,0x60,0x0b,0x90,0x9d,0xa8,0xe0,0x14,0xff,
+0xa3,0xe0,0xb5,0x07,0x0d,0x31,0x8f,0xef,0x60,0x70,0x31,0xe9,0x90,0x01,0x3f,0x74,
+0x02,0xf0,0x90,0x9d,0xa9,0xe0,0x75,0xf0,0x0f,0xa4,0x24,0xad,0xf9,0x74,0x9d,0x35,
+0xf0,0xa8,0x01,0xfc,0x7d,0x01,0x90,0x9e,0xf2,0x12,0x43,0x5e,0x7e,0x00,0x7f,0x02,
+0x12,0x1e,0xde,0x90,0x9d,0xa9,0xe0,0x75,0xf0,0x0f,0xa4,0x24,0xaf,0xf9,0x74,0x9d,
+0x35,0xf0,0xfa,0x7b,0x01,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x90,0x9e,0xf5,0x12,0x43,
+0x5e,0x8b,0x63,0x8a,0x64,0x89,0x65,0x90,0x9e,0xf2,0x12,0x43,0x5e,0x12,0x1f,0x04,
+0xff,0xc4,0x54,0x0f,0xf5,0x66,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x11,0x0f,0x90,0x9d,
+0xa9,0xe0,0x04,0xf0,0xe0,0xb4,0x0a,0x02,0xe4,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x7f,
+0xaf,0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xfd,0xee,0xf0,0xa3,
+0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9e,0xfd,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,
+0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9f,0x00,0xe0,0x94,0xe8,0x90,0x9e,0xff,0xe0,
+0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,0x10,0xf0,0x7f,0x00,0x80,0x15,0x90,
+0x9e,0xff,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,0x0a,0x7e,0x00,0x12,0x3b,0x3b,
+0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
+0x90,0x9d,0xa8,0xe0,0x75,0xf0,0x0f,0xa4,0x24,0xad,0xf9,0x74,0x9d,0x35,0xf0,0xfa,
+0x7b,0x01,0xc0,0x02,0xc0,0x01,0xe0,0x75,0xf0,0x0f,0xa4,0x24,0xaf,0xf9,0x74,0x9d,
+0x35,0xf0,0xfa,0x90,0x9e,0xef,0x12,0x43,0x7e,0xd0,0x01,0xd0,0x02,0x11,0x5e,0x90,
+0x9d,0xa8,0xe0,0x04,0xf0,0xe0,0xb4,0x0a,0x02,0xe4,0xf0,0x90,0x9d,0xa9,0xe0,0xff,
+0x90,0x9d,0xa8,0xe0,0xb5,0x07,0x07,0x7d,0x02,0x7f,0x03,0x12,0x3a,0x71,0xd0,0xd0,
+0x92,0xaf,0x22,0x90,0x01,0xcc,0xe0,0x54,0x0f,0x90,0x9e,0x69,0xf0,0x90,0x9e,0x69,
+0xe0,0xfd,0x70,0x02,0x61,0x84,0x90,0x9f,0x14,0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,
+0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xef,0x5d,0x70,0x02,
+0x61,0x7d,0x90,0x9f,0x14,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd0,0x12,0x43,0x52,0xe0,
+0x90,0x9e,0x6a,0xf0,0x75,0x63,0x01,0x75,0x64,0x9e,0x75,0x65,0x6a,0x75,0x66,0x01,
+0x7b,0x01,0x7a,0x9e,0x79,0x6b,0x11,0x0f,0x90,0x9e,0x6b,0xe0,0xff,0xc4,0x13,0x13,
+0x13,0x54,0x01,0x90,0x9f,0x14,0x30,0xe0,0x59,0xe0,0x75,0xf0,0x02,0x90,0x00,0x88,
+0x12,0x43,0x52,0xe0,0x90,0x9e,0x6c,0xf0,0x90,0x9f,0x14,0xe0,0x75,0xf0,0x02,0x90,
+0x00,0x89,0x12,0x43,0x52,0xe0,0x90,0x9e,0x6d,0xf0,0x90,0x9f,0x14,0xe0,0x75,0xf0,
+0x04,0x90,0x01,0xd1,0x12,0x43,0x52,0xe0,0x90,0x9e,0x6e,0xf0,0x90,0x9f,0x14,0xe0,
+0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x52,0xe0,0x90,0x9e,0x6f,0xf0,0x90,0x9f,
+0x14,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x52,0xe0,0x90,0x9e,0x70,0xf0,
+0x80,0x33,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x52,0xe0,0x90,0x9e,0x6c,
+0xf0,0x90,0x9f,0x14,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x52,0xe0,0x90,
+0x9e,0x6d,0xf0,0x90,0x9f,0x14,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x52,
+0xe0,0x90,0x9e,0x6e,0xf0,0xef,0x54,0x7f,0xff,0x7b,0x01,0x7a,0x9e,0x79,0x6c,0x12,
+0x80,0x07,0x90,0x9e,0x69,0xe0,0xff,0x90,0x9f,0x14,0xe0,0xfe,0x74,0x01,0xa8,0x06,
+0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,0x90,0x9e,0x69,0xf0,0x90,0x9f,0x14,
+0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x90,0x01,0xcc,
+0xf0,0x90,0x9f,0x14,0xe0,0x04,0xf0,0xe0,0x54,0x03,0xf0,0x41,0x4d,0x90,0x01,0xc6,
+0xe0,0x44,0x02,0xf0,0x22,0xe4,0x90,0x9e,0x66,0xf0,0xa3,0xf0,0x12,0x60,0x87,0x75,
+0x8e,0x02,0xf1,0xe8,0x12,0x44,0xf8,0x90,0x9e,0x9b,0xef,0xf0,0x12,0x60,0x24,0x90,
+0x9e,0x9d,0xef,0xf0,0xe4,0xf5,0x57,0x12,0x78,0x90,0x12,0x61,0x60,0x12,0x37,0x4e,
+0x12,0x67,0x5a,0x12,0x57,0xfe,0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,
+0x74,0x10,0xf0,0x90,0x05,0x5a,0xf0,0xa3,0xe4,0xf0,0x12,0x44,0xfb,0x12,0x58,0x1c,
+0x12,0x44,0xf7,0x12,0x60,0x8f,0x12,0x8d,0xfb,0x12,0x8d,0xf2,0x12,0x8d,0xca,0x90,
+0x9e,0x68,0xe5,0xd9,0xf0,0x12,0x5f,0xf5,0xc2,0xaf,0x90,0x00,0x80,0xe0,0x44,0x40,
+0xf0,0xd1,0x94,0x75,0xe8,0x03,0x43,0xa8,0x85,0x12,0x8e,0x69,0xd2,0xaf,0x12,0x87,
+0xdd,0x12,0x60,0x31,0x90,0x9e,0x66,0xe0,0x64,0x01,0xf0,0x24,0x85,0x90,0x01,0xc4,
+0xf0,0x74,0x4b,0xa3,0xf0,0xe5,0x57,0x30,0xe0,0x0a,0xc2,0xaf,0x53,0x57,0xfe,0x12,
+0x8e,0xca,0xd2,0xaf,0xe5,0x57,0x30,0xe2,0x10,0x12,0x61,0x23,0xbf,0x01,0x0a,0xc2,
+0xaf,0x53,0x57,0xfb,0xd2,0xaf,0x12,0x45,0xc7,0xe5,0x57,0x30,0xe4,0x09,0xc2,0xaf,
+0x53,0x57,0xef,0xd2,0xaf,0x51,0x43,0xe5,0x57,0x30,0xe6,0x0a,0xc2,0xaf,0x53,0x57,
+0xbf,0xd2,0xaf,0x12,0x72,0x3b,0xe5,0x57,0x30,0xe7,0x09,0xc2,0xaf,0x53,0x57,0x7f,
+0xd2,0xaf,0x31,0xe9,0xc2,0xaf,0xe5,0x69,0x54,0x0f,0xff,0xbf,0x01,0x0e,0x90,0x9e,
+0xa5,0x74,0x01,0xf0,0x12,0x44,0xe8,0xe4,0x90,0x9e,0xa5,0xf0,0xd2,0xaf,0x80,0x84,
+0x7d,0x01,0xaf,0x69,0x90,0x9f,0x09,0xed,0xf0,0x90,0x9f,0x08,0xef,0xf0,0x54,0x0f,
+0xff,0xe5,0x68,0x54,0x0f,0x6f,0x60,0x73,0x90,0x9f,0x08,0xe0,0x30,0xe2,0x2b,0xe5,
+0x68,0x20,0xe2,0x05,0x7f,0x01,0x12,0x67,0x85,0xe5,0x68,0x30,0xe3,0x0a,0x90,0x9f,
+0x08,0xe0,0x20,0xe3,0x03,0x02,0x68,0x03,0xe5,0x68,0x20,0xe3,0x4e,0x90,0x9f,0x08,
+0xe0,0x30,0xe3,0x47,0xa3,0xe0,0xff,0x02,0x62,0x72,0xe5,0x68,0x54,0x0f,0xff,0xbf,
+0x0c,0x10,0x90,0x9f,0x08,0xe0,0x20,0xe3,0x09,0x12,0x5e,0xac,0xef,0x60,0x2c,0x12,
+0x68,0x03,0xe5,0x68,0x54,0x0f,0xff,0xbf,0x04,0x10,0x90,0x9f,0x08,0xe0,0x20,0xe2,
+0x09,0x12,0x5f,0x93,0xef,0x60,0x14,0x12,0x68,0x29,0xe5,0x68,0x54,0x0f,0xff,0xbf,
+0x02,0x09,0x12,0x61,0xfc,0xef,0x60,0x03,0x12,0x6b,0x0b,0x22,0xef,0x64,0x01,0x70,
+0x38,0x7d,0x7c,0x7f,0x02,0x12,0x3a,0x54,0x7d,0x02,0x7f,0x03,0x12,0x3a,0x54,0x90,
+0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x7d,0x01,0x7f,0x0c,0x91,0x84,
+0x90,0x9e,0xd1,0xe0,0x30,0xe0,0x03,0x12,0x56,0x83,0x90,0x06,0x04,0xe0,0x54,0x7f,
+0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,0x01,0x36,0x74,0x7c,0xf0,0xa3,
+0x74,0x02,0xf0,0x7d,0x7c,0xff,0x12,0x3a,0xc5,0x7d,0x02,0x7f,0x03,0x12,0x3a,0xc5,
+0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,0xe0,0x44,0x07,0xf0,0x90,0x9e,
+0xa9,0xe0,0xa3,0xe0,0x90,0x05,0x58,0xf0,0xe5,0x67,0x30,0xe0,0x22,0x90,0x9e,0xa3,
+0xe0,0x70,0x21,0xe0,0x04,0xf0,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x04,0x50,0x06,0x7d,
+0x01,0x7f,0x04,0x91,0x84,0x90,0x9e,0xd1,0xe0,0x30,0xe0,0x08,0x02,0x56,0x83,0xe4,
+0x90,0x9e,0xa3,0xf0,0x22,0x8b,0x13,0x8a,0x14,0x89,0x15,0x12,0x61,0xc6,0xab,0x13,
+0xaa,0x14,0xa9,0x15,0x12,0x1f,0x04,0xf5,0x6a,0x12,0x43,0x87,0x4d,0xd5,0x00,0x4d,
+0xdd,0x01,0x4d,0xf0,0x02,0x4e,0x04,0x03,0x4e,0x0a,0x04,0x4e,0x21,0x05,0x4e,0x39,
+0x06,0x00,0x00,0x4e,0x44,0x7f,0x01,0xb1,0x0c,0x7f,0x01,0x80,0x64,0xab,0x13,0xaa,
+0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,0xe4,0xff,0xd1,0x54,0x80,0x18,
+0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,0x7f,0x01,0xd1,
+0x54,0x1f,0x80,0x04,0xd1,0x45,0xe4,0xff,0xa1,0x0c,0xab,0x13,0xaa,0x14,0xa9,0x15,
+0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,0xe4,0xff,0xd1,0x54,0xb1,0x0c,0xe4,0xff,0x80,
+0x20,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,0x7f,0x01,
+0xd1,0x54,0x1f,0xb1,0x0c,0xe4,0xff,0x80,0x08,0xd1,0x45,0xe4,0xff,0xb1,0x0c,0xe4,
+0xff,0x12,0x61,0xd2,0x22,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x1f,
+0x1d,0xfd,0x7f,0x02,0xef,0x24,0xfe,0x60,0x12,0x04,0x70,0x2f,0x90,0x9e,0xaf,0x74,
+0x01,0xf0,0x90,0x9e,0xa1,0xf0,0x90,0x9e,0xb2,0xf0,0x22,0xed,0x70,0x0a,0x90,0x9e,
+0xac,0xe0,0x90,0x9e,0xaf,0xf0,0x80,0x05,0x90,0x9e,0xaf,0xed,0xf0,0x90,0x9e,0xaf,
+0xe0,0x90,0x9e,0xa1,0xf0,0x90,0x9e,0xb2,0x74,0x01,0xf0,0x22,0xf4,0xff,0x90,0x00,
+0x63,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x7f,0x10,0xdf,0xfe,0xd0,
+0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9f,0x13,0xed,0xf0,
+0x90,0x9f,0x12,0xef,0xf0,0xd3,0x94,0x07,0x50,0x63,0xe0,0xff,0x74,0x01,0xa8,0x07,
+0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,0xd1,
+0x94,0x90,0x9f,0x12,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
+0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,0xf0,0xd1,0x94,0x90,0x9f,0x13,0xe0,0x60,0x16,
+0x90,0x9f,0x12,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,
+0xff,0x90,0x00,0x45,0x80,0x60,0x90,0x9f,0x12,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
+0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x45,0x80,0x62,0x90,0x9f,0x12,
+0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
+0xfc,0xd1,0x8c,0x90,0x9f,0x12,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,
+0x33,0xd8,0xfc,0xff,0x90,0x00,0x62,0xe0,0x4f,0xf0,0xd1,0x94,0x90,0x9f,0x13,0xe0,
+0x60,0x18,0x90,0x9f,0x12,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,
+0xd8,0xfc,0xff,0x90,0x00,0x61,0xe0,0x4f,0x80,0x17,0x90,0x9f,0x12,0xe0,0xff,0x74,
+0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x61,0xe0,
+0x5f,0xf0,0xd1,0x94,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
+0x8f,0x82,0x75,0x83,0x00,0xed,0xf0,0xd1,0x94,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x00,
+0x20,0xe0,0x44,0x01,0xfd,0x7f,0x20,0xf1,0x89,0x7f,0xf4,0x7e,0x01,0x12,0x3b,0x3b,
+0x90,0x00,0x00,0xe0,0x54,0xdf,0xfd,0xe4,0xff,0xf1,0x89,0x90,0x00,0x28,0xe0,0x44,
+0x03,0xfd,0x7f,0x28,0xf1,0x89,0x90,0x00,0x08,0xe0,0x54,0xef,0xfd,0x7f,0x08,0xf1,
+0x89,0xe4,0xff,0x12,0x6a,0x44,0x7f,0x64,0x7e,0x00,0x12,0x3b,0x3b,0x90,0x00,0x29,
+0xe0,0x44,0xc0,0xfd,0x7f,0x29,0x80,0xa1,0xe4,0x90,0x9e,0x9a,0xf0,0x90,0x00,0x80,
+0xe0,0x44,0x80,0xfd,0x7f,0x80,0x80,0x91,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,
+0x04,0x1d,0xe0,0x60,0x1a,0x90,0x05,0x22,0xe0,0x54,0x90,0x60,0x07,0x90,0x01,0xc6,
+0xe0,0x44,0x40,0xf0,0x90,0x01,0xc7,0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,0x02,0x7f,
+0x01,0xd0,0xd0,0x92,0xaf,0x22,0xe0,0xff,0x7d,0x01,0xe4,0xfb,0xfa,0xef,0x30,0xe0,
+0x02,0x7b,0x80,0xef,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x90,0x04,0x25,0xef,0xf0,0xed,
+0x60,0x0e,0x74,0x0f,0x2b,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,
+0xaf,0x03,0x74,0x08,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,
+0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2b,0xf5,
+0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf7,0xf0,0xae,0x02,0xaf,0x03,0x22,0xe0,
+0x54,0xef,0xf0,0x90,0xfd,0x63,0xe0,0x54,0x3f,0x25,0xe0,0x25,0xe0,0xff,0x90,0xfd,
+0x62,0xe0,0x54,0x03,0x4f,0x90,0x9e,0x5d,0xf0,0x90,0xfd,0x64,0xe0,0x54,0x3f,0x25,
+0xe0,0x25,0xe0,0xff,0x90,0xfd,0x63,0xe0,0x54,0x03,0x4f,0x90,0x9e,0x5e,0xf0,0x90,
+0x9e,0x5d,0xe0,0xfd,0xa3,0xe0,0xfb,0xe4,0xff,0x90,0x9e,0x62,0xef,0xf0,0xa3,0xed,
+0xf0,0xa3,0xeb,0xf0,0x12,0x4f,0xf8,0xef,0x64,0x01,0x60,0x02,0x21,0x6a,0x90,0x9e,
+0x99,0x11,0x26,0x90,0x9e,0x62,0xe0,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,
+0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,
+0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0xad,0x07,0x74,0x06,0x2d,0xf5,0x82,0xe4,0x34,
+0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x74,0x11,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
+0x83,0xe0,0x54,0xef,0xf0,0xad,0x07,0x74,0x16,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
+0x83,0xe0,0x44,0x02,0xf0,0x74,0x16,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,
+0x54,0x03,0xf0,0x90,0x9e,0x63,0xe0,0xfd,0xac,0x07,0x74,0x22,0x2c,0xf5,0x82,0xe4,
+0x34,0xfc,0xf5,0x83,0xed,0xf0,0x90,0x9e,0x64,0xe0,0xfd,0x74,0x23,0x2c,0xf5,0x82,
+0xe4,0x34,0xfc,0xf5,0x83,0xed,0xf0,0x74,0x24,0x2c,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
+0x83,0xe0,0x04,0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,
+0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,
+0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x53,0x91,0xbf,0x90,0xfd,0x68,0xe0,0x20,
+0xe0,0x02,0x41,0xfb,0x90,0xfd,0x60,0xe0,0x64,0x0e,0x60,0x02,0x41,0x3f,0x90,0x9e,
+0x43,0xe0,0xff,0x13,0x13,0x13,0x54,0x1f,0x20,0xe0,0x02,0x41,0x3f,0x90,0xfd,0x62,
+0xe0,0x54,0xc0,0xfe,0x90,0x07,0x90,0xe0,0x54,0x3f,0x4e,0xf0,0x90,0xfd,0x63,0xe0,
+0x90,0x07,0x91,0xf0,0x90,0xfd,0x64,0xe0,0x90,0x07,0x92,0xf0,0x90,0xfd,0x65,0xe0,
+0x90,0x07,0x93,0xf0,0x90,0x07,0x95,0x74,0x01,0xf0,0xef,0x20,0xe0,0x42,0x90,0x9e,
+0x43,0xe0,0x13,0x13,0x54,0x3f,0x30,0xe0,0x18,0x90,0x07,0x78,0x11,0x7f,0x90,0x9e,
+0x43,0xe0,0xff,0xc3,0x13,0x30,0xe0,0x47,0x90,0x07,0x83,0xe0,0x44,0x40,0xf0,0x80,
+0x3e,0x90,0x9e,0x43,0xe0,0xff,0xc3,0x13,0x30,0xe0,0x10,0xe4,0xff,0x71,0x16,0x90,
+0x07,0x95,0xe0,0x44,0x01,0xf0,0xa3,0xe0,0x44,0x01,0xf0,0x90,0x07,0x78,0x80,0x13,
+0x90,0x9e,0x43,0xe0,0xff,0x13,0x13,0x54,0x3f,0x90,0x07,0x78,0x30,0xe0,0x04,0x11,
+0x7f,0x80,0x0c,0xe0,0x44,0x10,0xf0,0xe0,0x44,0x20,0xf0,0xe0,0x54,0xdf,0xf0,0x90,
+0xfd,0x60,0xe0,0xb4,0x0f,0x0b,0x90,0xfd,0x62,0xe0,0xff,0xa3,0xe0,0xfd,0x12,0x8f,
+0x02,0x90,0xfd,0x60,0xe0,0x64,0x15,0x70,0x64,0x90,0xfd,0x62,0xe0,0x90,0x9e,0x60,
+0xf0,0x90,0xfd,0x62,0xe0,0x30,0xe0,0x15,0x90,0x9e,0x60,0xe0,0xf4,0x54,0x3f,0x04,
+0xff,0x90,0x9e,0x4e,0xe0,0x13,0x13,0x54,0x3f,0xc3,0x9f,0x80,0x10,0x90,0x9e,0x4e,
+0xe0,0x13,0x13,0x54,0x3f,0xff,0x90,0x9e,0x60,0xe0,0x54,0x3f,0x2f,0x90,0x9e,0x5f,
+0xf0,0x90,0x9e,0x5f,0xe0,0xff,0x54,0x30,0xc4,0x54,0x0f,0xfe,0xef,0x25,0xe0,0x25,
+0xe0,0x4e,0x90,0x9e,0x61,0xf0,0x90,0x00,0x2e,0xf0,0x90,0x9e,0x5f,0xe0,0xc4,0x54,
+0xf0,0xff,0x90,0x9e,0x4f,0xe0,0x54,0x0f,0x4f,0x90,0x00,0x2d,0xf0,0x90,0xfd,0x60,
+0xe0,0xb4,0x16,0x08,0x90,0xfd,0x62,0xe0,0xff,0x12,0x8f,0x55,0x90,0xfd,0x60,0xe0,
+0xb4,0x21,0x08,0x90,0xfd,0x62,0xe0,0xff,0x12,0x8f,0x7d,0x90,0xfd,0x60,0xe0,0xb4,
+0x22,0x03,0x12,0x90,0x34,0x90,0xfd,0x60,0xe0,0xb4,0x23,0x08,0x90,0xfd,0x62,0xe0,
+0xff,0x12,0x90,0x11,0x90,0xfd,0x68,0xe0,0x44,0x01,0xf0,0xd0,0x07,0xd0,0x06,0xd0,
+0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,
+0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x90,0x9e,0x43,0xe0,0xc3,0x13,0x30,0xe0,0x16,0xef,
+0x7b,0x01,0xb4,0x01,0x06,0x7a,0x9e,0x79,0x4a,0x80,0x04,0x7a,0x9e,0x79,0x46,0x7f,
+0x80,0x7e,0x08,0xf1,0x70,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,
+0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,
+0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0x36,0xf0,0x74,0x53,0xa3,0xf0,0x53,0x91,0xdf,
+0x90,0x01,0x3c,0xe0,0x55,0x30,0xf5,0x34,0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,
+0x55,0x32,0xf5,0x36,0xa3,0xe0,0x55,0x33,0xf5,0x37,0xe5,0x34,0x30,0xe0,0x06,0x90,
+0x01,0x3c,0x74,0x01,0xf0,0xe5,0x34,0x30,0xe1,0x0b,0x90,0x01,0x3c,0x74,0x02,0xf0,
+0x12,0x6c,0xb1,0xf1,0xb7,0xe5,0x34,0x30,0xe2,0x36,0x90,0x01,0x3c,0x74,0x04,0xf0,
+0x90,0x06,0x92,0xe0,0x30,0xe0,0x21,0x75,0x48,0x00,0x90,0x9e,0xa6,0xe0,0xf5,0x49,
+0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x5b,0x74,0x05,0xf0,
+0x90,0x06,0x92,0x74,0x01,0xf0,0x80,0x08,0x90,0x9e,0xae,0xe4,0xf0,0x12,0x44,0xe8,
+0xe5,0x34,0x30,0xe3,0x36,0x90,0x01,0x3c,0x74,0x08,0xf0,0x90,0x06,0x92,0xe0,0x30,
+0xe1,0x21,0x75,0x48,0x00,0x90,0x9e,0xa6,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x5c,
+0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,
+0xf0,0x80,0x08,0x90,0x9e,0xad,0xe4,0xf0,0x12,0x44,0xe8,0xe5,0x34,0x30,0xe4,0x06,
+0x90,0x01,0x3c,0x74,0x10,0xf0,0xe5,0x34,0x30,0xe5,0x06,0x90,0x01,0x3c,0x74,0x20,
+0xf0,0xe5,0x35,0x30,0xe0,0x19,0x90,0x01,0x3d,0x74,0x01,0xf0,0x90,0x01,0x2f,0xe0,
+0x44,0x7f,0xf0,0x90,0x00,0x83,0xe0,0xf5,0x69,0x12,0x6b,0x1d,0x12,0x44,0xe8,0xe5,
+0x35,0x30,0xe2,0x0c,0x90,0x01,0x3d,0x74,0x04,0xf0,0x53,0x6b,0xfb,0x12,0x44,0xe8,
+0xe5,0x36,0x30,0xe0,0x69,0x90,0x01,0x3e,0x74,0x01,0xf0,0x90,0x9e,0xd7,0xe0,0x30,
+0xe0,0x12,0xa3,0xe0,0x64,0x03,0x60,0x0c,0x7f,0x01,0xd1,0x0b,0xef,0x60,0x05,0x7f,
+0x01,0x12,0x68,0x90,0x90,0x9e,0xd1,0xe0,0x30,0xe0,0x43,0xe4,0xff,0xd1,0x0b,0xef,
+0x60,0x3c,0xd1,0x2f,0x90,0x9e,0xd2,0xe0,0xff,0x64,0x06,0x60,0x31,0xef,0xb4,0x04,
+0x02,0x80,0x07,0x90,0x9e,0xd2,0xe0,0xb4,0x05,0x04,0xe4,0xff,0x80,0x14,0x90,0x9e,
+0xd2,0xe0,0xb4,0x03,0x04,0x7f,0x01,0x80,0x09,0x90,0x9e,0xd2,0xe0,0xb4,0x02,0x05,
+0x7f,0x01,0x12,0x62,0xa5,0x7d,0x01,0xaf,0x69,0x12,0x4c,0x84,0xd1,0x83,0xe5,0x36,
+0x30,0xe1,0x3b,0x90,0x01,0x3e,0x74,0x02,0xf0,0x90,0x9e,0xd7,0xe0,0x30,0xe0,0x12,
+0xa3,0xe0,0x64,0x03,0x60,0x0c,0x7f,0x01,0xd1,0x0b,0xef,0x70,0x05,0x7f,0x02,0x12,
+0x68,0x90,0x90,0x9e,0xd1,0xe0,0x30,0xe0,0x15,0x12,0x8b,0xdb,0x90,0x9e,0xd2,0xe0,
+0x64,0x06,0x60,0x0a,0xe4,0xff,0xd1,0x0b,0xef,0x70,0x03,0x12,0x67,0xbb,0xe5,0x36,
+0x30,0xe3,0x09,0x90,0x01,0x3e,0x74,0x08,0xf0,0x43,0x6b,0x04,0xe5,0x36,0x30,0xe4,
+0x06,0x90,0x01,0x3e,0x74,0x10,0xf0,0xe5,0x36,0x30,0xe2,0x72,0x90,0x01,0x3e,0x74,
+0x04,0xf0,0x90,0x07,0x8f,0xe0,0x30,0xe7,0x12,0x74,0x80,0xf0,0x90,0x07,0x95,0x74,
+0x04,0xf0,0xa3,0xe0,0x44,0x04,0xf0,0xe4,0xff,0x71,0x16,0x90,0x07,0x8f,0xe0,0x30,
+0xe6,0x12,0x74,0x40,0xf0,0x90,0x07,0x7c,0xe0,0xb4,0x06,0x08,0x90,0x07,0x80,0xe0,
+0xff,0x12,0x8f,0x2d,0x90,0x07,0x8f,0xe0,0x30,0xe5,0x13,0x74,0x20,0xf0,0xe4,0xff,
+0x71,0x16,0x90,0x07,0x95,0xe0,0x44,0x01,0xf0,0xa3,0xe0,0x44,0x01,0xf0,0x90,0x07,
+0x95,0xe0,0x30,0xe2,0x0c,0x74,0x04,0xf0,0xa3,0xe0,0x54,0xfb,0xf0,0x7f,0x01,0x71,
+0x16,0x90,0x07,0x95,0xe0,0x30,0xe0,0x06,0x74,0x01,0xf0,0xff,0x71,0x16,0xe5,0x36,
+0x30,0xe5,0x06,0x90,0x01,0x3e,0x74,0x20,0xf0,0xe5,0x36,0x30,0xe6,0x08,0x90,0x01,
+0x3e,0x74,0x40,0xf0,0xd1,0x19,0xe5,0x36,0x30,0xe7,0x0c,0x90,0x01,0x3e,0x74,0x80,
+0xf0,0x53,0x6b,0xfe,0x12,0x44,0xe8,0xe5,0x37,0x30,0xe1,0x09,0x90,0x01,0x3f,0x74,
+0x02,0xf0,0x43,0x57,0x80,0xe5,0x37,0x30,0xe4,0x1b,0x90,0x01,0x3f,0x74,0x10,0xf0,
+0xd1,0xc8,0x90,0x9e,0xaf,0xe0,0x90,0x05,0x73,0xf0,0x90,0x01,0x36,0x74,0x02,0xf0,
+0xfd,0xff,0x12,0x3a,0xc5,0x74,0x36,0x04,0x90,0x01,0xc4,0xf0,0x74,0x53,0xa3,0xf0,
+0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,
+0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x8f,0x6c,0x90,0x05,0x43,
+0xe0,0x7f,0x00,0x30,0xe7,0x02,0x7f,0x01,0x22,0x12,0x4f,0xf8,0xbf,0x01,0x0f,0x90,
+0x9e,0x96,0xe0,0xff,0xe4,0xfd,0x11,0x2a,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x90,
+0x9e,0xd1,0xe0,0xff,0xc4,0x13,0x13,0x54,0x03,0x30,0xe0,0x0b,0xa3,0xe0,0x64,0x06,
+0x60,0x05,0x7f,0x06,0x12,0x62,0xa5,0x90,0x9e,0xd2,0xe0,0x64,0x06,0x60,0x02,0xd1,
+0x52,0x22,0x90,0x9e,0xd6,0xe0,0xb4,0x01,0x05,0xe4,0xf0,0x12,0x5d,0x03,0x22,0xae,
+0x07,0xe4,0xff,0xd1,0x0b,0xef,0x60,0x18,0x90,0x9e,0xd1,0xe0,0xc4,0x13,0x13,0x54,
+0x03,0x20,0xe0,0x0c,0xaf,0x06,0x7d,0x01,0x12,0x4c,0x84,0xd1,0x83,0x7f,0x01,0x22,
+0x7f,0x00,0x22,0x90,0x9e,0xd2,0xe0,0x64,0x06,0x60,0x3c,0xe5,0x68,0x54,0x0f,0x14,
+0x60,0x2e,0x14,0x60,0x1e,0x24,0xfe,0x60,0x0e,0x24,0xf8,0x70,0x2a,0xe4,0x90,0x9e,
+0xd2,0xf0,0x90,0x05,0x22,0xf0,0x22,0x90,0x9e,0xd2,0x74,0x01,0xf0,0x90,0x05,0x22,
+0xe4,0xf0,0x22,0x90,0x9e,0xd2,0x74,0x03,0xf0,0x90,0x05,0x22,0x74,0xff,0xf0,0x22,
+0x90,0x01,0xc6,0xe0,0x44,0x08,0xf0,0x22,0xe4,0x90,0x9f,0x16,0xf0,0xe5,0x6a,0x70,
+0x02,0xe1,0x6b,0xe5,0x67,0x64,0x01,0x60,0x02,0xe1,0x6b,0xe5,0x6a,0x14,0x60,0x28,
+0x24,0xfd,0x60,0x24,0x24,0x02,0x24,0xfb,0x50,0x02,0x80,0x22,0xe4,0x90,0x9e,0xa1,
+0xf0,0xe0,0x60,0x04,0xa3,0xe0,0x60,0x16,0x90,0x9e,0xa1,0xe0,0x70,0x0a,0x90,0x9e,
+0xaf,0xe0,0x90,0x9e,0xa1,0xf0,0x80,0x00,0x90,0x9f,0x16,0x74,0x01,0xf0,0x90,0x9e,
+0xd1,0xe0,0x30,0xe0,0x15,0xa3,0xe0,0xb4,0x06,0x05,0xe4,0x90,0x9f,0x16,0xf0,0xe4,
+0xff,0xd1,0x0b,0xef,0x70,0x04,0x90,0x9f,0x16,0xf0,0x90,0x9f,0x16,0xe0,0x60,0x3b,
+0x43,0x6b,0x10,0xe4,0xf5,0x48,0x90,0x9e,0xab,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,
+0x54,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x68,0x54,0x0f,
+0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,0x4c,0x84,0x90,0x9e,0xd1,0xe0,
+0x30,0xe0,0x08,0xd1,0x83,0x90,0x05,0x22,0x74,0xff,0xf0,0x22,0x7f,0x70,0x7e,0x08,
+0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0x54,0xfc,0xff,0x90,0x01,0xe8,0xf0,0xee,
+0x44,0xf0,0xa3,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0x01,0xec,0xf0,0x90,0x00,
+0x02,0x12,0x1f,0x1d,0x90,0x01,0xed,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x01,
+0xee,0xf0,0x12,0x1f,0x04,0x90,0x01,0xef,0xf0,0x90,0x01,0xeb,0x74,0x40,0xf0,0x12,
+0x5f,0x3e,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0x51,0xe0,0xff,0x90,0x9e,0x50,0xe0,
+0x5f,0x60,0x24,0x12,0x5d,0x8a,0xef,0x54,0x9f,0xff,0xec,0x90,0x9f,0x01,0x12,0x1f,
+0xd7,0x7b,0x01,0x7a,0x9f,0x79,0x01,0xf1,0x6c,0x90,0x00,0x40,0x74,0x24,0xf0,0xe5,
+0x6a,0x70,0x04,0x90,0x01,0x57,0xf0,0x22,0x12,0x4f,0xf8,0xbf,0x01,0x0f,0x90,0x02,
+0x09,0xe0,0xff,0x7d,0x01,0x11,0x2a,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x75,0x28,
+0x33,0xe4,0xf5,0x29,0x75,0x2a,0x07,0xf5,0x2b,0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,
+0xe5,0x29,0xf0,0xa3,0xe5,0x2a,0xf0,0xa3,0xe5,0x2b,0xf0,0x22,0x75,0x30,0x1f,0x75,
+0x31,0x01,0xe4,0xf5,0x32,0x43,0x32,0x20,0x90,0x01,0x38,0xe5,0x30,0xf0,0xa3,0xe5,
+0x31,0xf0,0xa3,0xe5,0x32,0xf0,0x22,0x90,0x01,0x30,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,
+0xa3,0xf0,0x90,0x01,0x38,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x50,0x12,
+0x4f,0x89,0xe4,0xfd,0x7f,0x51,0x12,0x4f,0x89,0xe4,0xfd,0x7f,0x52,0x12,0x4f,0x89,
+0xe4,0xfd,0x7f,0x53,0x02,0x4f,0x89,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,
+0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,
+0xc0,0x06,0xc0,0x07,0x90,0x01,0xc4,0x74,0x67,0xf0,0x74,0x58,0xa3,0xf0,0x90,0x01,
+0x34,0xe0,0x55,0x28,0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,0xa3,0xe0,
+0x55,0x2b,0xf5,0x2f,0xe5,0x2c,0x20,0xe0,0x02,0x41,0x20,0x90,0x01,0x34,0x74,0x01,
+0xf0,0x85,0xd1,0x4d,0x85,0xd3,0x4f,0x85,0xd4,0x50,0x85,0xd5,0x51,0x85,0xd6,0x52,
+0x85,0xd7,0x53,0x85,0xd9,0x54,0x85,0xd2,0x4e,0x78,0x8d,0x7c,0x9e,0xfd,0x7b,0x00,
+0x7a,0x00,0x79,0x4d,0x7e,0x00,0x7f,0x08,0x12,0x1e,0xde,0x90,0x9e,0x8e,0xe0,0xff,
+0xc4,0x13,0x54,0x01,0xfe,0xef,0xc4,0x13,0x13,0x54,0x01,0x6e,0x70,0x02,0x21,0xcf,
+0x90,0x9e,0x8e,0xe0,0xff,0xc4,0x13,0x13,0x13,0x54,0x01,0x30,0xe0,0x02,0x21,0xcf,
+0xef,0x54,0x1f,0xf5,0x08,0x90,0x9e,0x8f,0xe0,0x54,0x3f,0xf5,0x09,0x90,0x9e,0x91,
+0xe0,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,
+0x83,0xe4,0x8f,0xf0,0x12,0x42,0x54,0xe5,0x09,0xd3,0x94,0x04,0x40,0x03,0x75,0x09,
+0x04,0x75,0xf0,0x0a,0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x52,0x75,0xf0,0x02,0xe5,
+0x09,0x12,0x43,0x52,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x9e,0x91,0xe0,0x54,0x1f,0x2f,
+0xff,0xe4,0x3e,0xfe,0x75,0xf0,0x0a,0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x52,0x75,
+0xf0,0x02,0xe5,0x09,0x12,0x43,0x52,0xee,0xf0,0xa3,0xef,0xf0,0x90,0x9e,0x8e,0xe0,
+0xc4,0x13,0x13,0x54,0x03,0x20,0xe0,0x28,0x90,0x9e,0x91,0xe0,0x54,0x1f,0xff,0xe5,
+0x08,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,
+0x42,0x54,0x90,0x9e,0x90,0xe0,0x30,0xe7,0x36,0xaf,0x08,0x12,0x6d,0xe9,0x80,0x2f,
+0x90,0x9e,0x91,0xe0,0x54,0x1f,0xff,0xfd,0xe5,0x08,0x25,0xe0,0x24,0x44,0xf5,0x82,
+0xe4,0x34,0x99,0xf5,0x83,0xe4,0x8d,0xf0,0x12,0x42,0x54,0x90,0x9e,0x90,0xe0,0xfe,
+0x30,0xe7,0x0c,0x54,0x7f,0xfd,0x8f,0x0d,0xab,0x09,0xaf,0x08,0x12,0x6d,0x86,0xe5,
+0x6a,0x14,0x24,0xfd,0x50,0x02,0x80,0x45,0x90,0x9e,0xb0,0xe0,0x60,0x37,0x90,0x01,
+0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0x91,0xea,0xef,0x64,0x01,0x70,0x2d,
+0x90,0x9e,0xa6,0xe0,0xf5,0x48,0x75,0x49,0x00,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,
+0x12,0x39,0xa9,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,
+0x9e,0xae,0xf0,0x80,0x08,0x91,0xea,0xbf,0x01,0x03,0x12,0x44,0xe8,0x12,0x47,0x91,
+0xe5,0x2c,0x30,0xe1,0x7b,0x90,0x01,0x34,0x74,0x02,0xf0,0x90,0xfd,0x10,0x74,0x7f,
+0xf0,0x90,0x04,0x7f,0xe0,0x54,0x07,0xf5,0x55,0x90,0x04,0x7e,0xe0,0x54,0x07,0xf5,
+0x56,0x65,0x55,0x60,0x5b,0xe4,0xff,0x75,0xf0,0x08,0xe5,0x55,0xa4,0x2f,0xf5,0x82,
+0xe4,0x35,0xf0,0xf5,0x83,0xe5,0x82,0x24,0xc0,0xf5,0x82,0xe5,0x83,0x34,0xfc,0xf5,
+0x83,0xe0,0xfe,0x74,0x58,0x2f,0xf8,0xa6,0x06,0x0f,0xbf,0x08,0xda,0x78,0x84,0x7c,
+0x9e,0x7d,0x01,0x7b,0x00,0x7a,0x00,0x79,0x58,0x7e,0x00,0x7f,0x08,0x12,0x1e,0xde,
+0x90,0x9e,0x84,0xe0,0xff,0xc4,0x13,0x13,0x54,0x03,0x30,0xe0,0x02,0xb1,0xe3,0xe5,
+0x55,0x24,0x01,0xff,0xef,0x54,0x07,0xf5,0x55,0x90,0x04,0x7f,0xf0,0xb5,0x56,0xa5,
+0xe5,0x2c,0x30,0xe3,0x10,0x90,0x01,0x34,0x74,0x08,0xf0,0x90,0x9e,0xbc,0xe0,0x30,
+0xe0,0x03,0x43,0x57,0x04,0xe5,0x2c,0x30,0xe4,0x09,0x90,0x01,0x34,0x74,0x10,0xf0,
+0x43,0x57,0x10,0xe5,0x2c,0x30,0xe5,0x25,0x90,0x01,0xcf,0xe0,0x30,0xe5,0x1e,0xe0,
+0x54,0xdf,0xf0,0x90,0x01,0x34,0x74,0x20,0xf0,0x75,0xa8,0x00,0x75,0xe8,0x00,0x11,
+0x37,0x90,0x00,0x03,0xe0,0x54,0xfb,0xf0,0x12,0x4e,0x94,0x80,0xfe,0xe5,0x2c,0x30,
+0xe6,0x06,0x90,0x01,0x34,0x74,0x40,0xf0,0xe5,0x2e,0x30,0xe0,0x41,0x90,0x9e,0x9c,
+0x74,0x01,0xf0,0x90,0x01,0x36,0xf0,0xb1,0x43,0xd1,0x05,0x90,0x9e,0xd7,0xe0,0x30,
+0xe0,0x0d,0x13,0x13,0x54,0x3f,0x30,0xe0,0x06,0x90,0x9e,0xd9,0x74,0x01,0xf0,0x90,
+0x9e,0xd1,0xe0,0xff,0x30,0xe0,0x0d,0x13,0x13,0x54,0x3f,0x30,0xe0,0x06,0x90,0x9e,
+0xd3,0x74,0x01,0xf0,0x12,0x56,0xc8,0xd1,0x36,0x90,0x9e,0x9c,0xe4,0xf0,0xe5,0x2e,
+0x30,0xe1,0x5f,0x90,0x01,0x36,0x74,0x02,0xf0,0x43,0x57,0x40,0x90,0x01,0x02,0xe0,
+0x54,0x03,0x64,0x01,0x70,0x29,0x90,0x01,0x37,0xe0,0x30,0xe0,0x0a,0x74,0x01,0xf0,
+0x90,0x9e,0x8c,0xe4,0xf0,0x80,0x18,0x90,0x9e,0x8c,0xe0,0x04,0xf0,0xe0,0xc3,0x94,
+0x0a,0x40,0x0c,0xe4,0xf0,0x90,0x04,0x19,0xe0,0x30,0xe0,0x03,0x12,0x57,0xe8,0x90,
+0x9e,0xd1,0xe0,0x30,0xe0,0x0d,0xe4,0xff,0x12,0x56,0x0b,0xef,0x60,0x05,0x90,0x05,
+0x22,0xe4,0xf0,0xd1,0x6c,0x90,0x9e,0xb2,0xe0,0x60,0x07,0x7d,0x02,0x7f,0x02,0x12,
+0x3a,0x54,0xe5,0x2e,0x30,0xe2,0x46,0x90,0x01,0x36,0x74,0x04,0xf0,0x90,0x9e,0xd1,
+0xe0,0x30,0xe0,0x06,0xa3,0xe0,0x64,0x06,0x60,0x30,0x12,0x6b,0xe1,0x90,0x9e,0xb2,
+0xe0,0x60,0x27,0x90,0x9e,0xaf,0xe0,0xff,0x90,0x9e,0xa1,0xe0,0xb5,0x07,0x1b,0x90,
+0x9e,0xaf,0xe0,0x90,0x05,0x73,0xf0,0x90,0x01,0x3f,0x74,0x10,0xf0,0xfd,0x7f,0x03,
+0x12,0x3a,0xdf,0x7d,0x01,0x7f,0x02,0x12,0x3a,0x54,0x12,0x57,0xb7,0xe5,0x2e,0x30,
+0xe3,0x34,0x90,0x01,0x36,0x74,0x08,0xf0,0xe5,0x67,0x64,0x01,0x70,0x28,0xe5,0x6a,
+0x60,0x24,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x75,0x48,0x00,
+0x90,0x9e,0xa8,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x39,0xa9,
+0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,0xe4,0x2b,0x90,0x01,0x36,0x74,0x10,
+0xf0,0xe5,0x67,0xb4,0x01,0x20,0xe5,0x6a,0x60,0x1c,0x90,0x01,0x57,0xe4,0xf0,0x90,
+0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0xb1,0xe4,0xf0,0x53,0x6b,0xfd,0xe5,0x6b,0x54,
+0x07,0x70,0x03,0x12,0x44,0xe8,0xe5,0x2e,0x30,0xe5,0x1e,0x90,0x01,0x36,0x74,0x20,
+0xf0,0xe5,0x67,0xb4,0x01,0x13,0xe5,0x6a,0x60,0x0f,0x90,0x9e,0xb0,0xe0,0x64,0x02,
+0x60,0x05,0x12,0x56,0x19,0x80,0x02,0xd1,0xf4,0xe5,0x2e,0x30,0xe6,0x1b,0x90,0x01,
+0x36,0x74,0x40,0xf0,0xe5,0x67,0xb4,0x01,0x10,0xe5,0x6a,0x60,0x0c,0x53,0x6b,0xfe,
+0xe5,0x6b,0x54,0x07,0x70,0x03,0x12,0x44,0xe8,0xe5,0x2f,0x30,0xe1,0x26,0x90,0x01,
+0x37,0x74,0x02,0xf0,0x90,0x9e,0xd1,0xe0,0x30,0xe0,0x17,0xe4,0xff,0x12,0x56,0x0b,
+0xef,0x60,0x07,0xb1,0x03,0x12,0x56,0x83,0x80,0x0a,0x90,0x9e,0xd6,0x74,0x01,0xf0,
+0x80,0x02,0xb1,0x03,0x74,0x67,0x04,0x90,0x01,0xc4,0xf0,0x74,0x58,0xa3,0xf0,0xd0,
+0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,
+0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x90,0x04,0x1a,0xe0,0xf4,0x60,
+0x03,0x7f,0x00,0x22,0x90,0x04,0x1b,0xe0,0x54,0x07,0x64,0x07,0x7f,0x01,0x60,0x02,
+0x7f,0x00,0x22,0x7d,0x02,0x7f,0x03,0x12,0x3a,0x54,0xe5,0x6a,0x14,0x24,0xfd,0x50,
+0x06,0x24,0xfd,0x50,0x1d,0x80,0x2b,0x90,0x9e,0xb0,0xe0,0x60,0x06,0x7d,0x01,0x7f,
+0x0c,0x80,0x1c,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x04,0x50,0x16,0x7d,0x01,0x7f,0x04,
+0x80,0x0d,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,0x7d,0x01,0x7f,0x04,0x12,
+0x4c,0x84,0x22,0x90,0x9e,0x51,0xe0,0xff,0x90,0x9e,0x50,0xe0,0x5f,0x60,0x3a,0x90,
+0x00,0x40,0x74,0x04,0xf0,0xb1,0x8a,0xef,0x44,0x60,0xff,0xec,0x90,0x9e,0x52,0x12,
+0x1f,0xd7,0x7f,0x60,0x7e,0x08,0xb1,0x8e,0xef,0x44,0x20,0xff,0xec,0x90,0x9e,0x56,
+0x12,0x1f,0xd7,0x7b,0x01,0x7a,0x9e,0x79,0x52,0x12,0x57,0x6c,0x7b,0x01,0x7a,0x9e,
+0x79,0x56,0x7f,0x60,0x7e,0x08,0x12,0x57,0x70,0x22,0x7f,0x70,0x7e,0x08,0xd3,0x10,
+0xaf,0x01,0xc3,0xc0,0xd0,0xef,0x54,0xfc,0xff,0x90,0x01,0xe8,0xf0,0xee,0xa3,0xf0,
+0x90,0x01,0xeb,0x74,0x80,0xf0,0xf1,0x3e,0x90,0x01,0xec,0xe0,0xff,0x90,0x9f,0x05,
+0x12,0x43,0x5e,0x90,0x00,0x03,0xef,0x12,0x42,0x32,0x90,0x01,0xed,0xe0,0x90,0x00,
+0x02,0x12,0x42,0x32,0x90,0x01,0xee,0xe0,0x90,0x00,0x01,0x12,0x42,0x32,0x90,0x01,
+0xef,0xe0,0x12,0x42,0x20,0x90,0x9f,0x05,0x12,0x43,0x5e,0x12,0x43,0x26,0xd0,0xd0,
+0x92,0xaf,0x22,0x90,0x9e,0x52,0xe0,0x54,0xf0,0x44,0x03,0xf0,0x54,0x0f,0x44,0x80,
+0xf0,0x7b,0x00,0x7a,0x00,0x79,0x58,0x90,0x9e,0xf5,0x12,0x43,0x7e,0x0b,0x7a,0x9e,
+0x79,0x52,0x02,0x48,0xde,0x90,0x9e,0x51,0xe0,0xff,0x90,0x9e,0x50,0xe0,0x5f,0xff,
+0xe5,0x6a,0x7e,0x00,0x70,0x02,0x7e,0x01,0xee,0x5f,0x60,0x19,0xe4,0xf5,0x48,0x90,
+0x9e,0xab,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x39,0xa9,0x90,
+0x01,0x57,0x74,0x05,0xf0,0x22,0x90,0x9e,0xb9,0xe0,0x30,0xe0,0x2e,0xe5,0x67,0xb4,
+0x01,0x29,0x90,0x9e,0xb3,0xe0,0x04,0xf0,0xe0,0xb4,0x0a,0x0b,0x90,0x9e,0xbb,0xe0,
+0x04,0xf0,0xe4,0x90,0x9e,0xb3,0xf0,0x90,0x9e,0xbb,0xe0,0xff,0x90,0x9e,0xba,0xe0,
+0xb5,0x07,0x08,0x12,0x44,0xd1,0xe4,0x90,0x9e,0xbb,0xf0,0x22,0x90,0x9e,0xb4,0xe0,
+0x30,0xe0,0x38,0xe5,0x67,0x64,0x01,0x70,0x32,0x90,0x9e,0xb7,0xe0,0x04,0xf0,0xe0,
+0xff,0x90,0x9e,0xb5,0xe0,0xb5,0x07,0x23,0x90,0x06,0x92,0xe0,0x54,0x1c,0x70,0x0b,
+0x12,0x44,0xd1,0x90,0x9e,0xb8,0xe0,0x04,0xf0,0x80,0x0b,0x90,0x06,0x92,0x74,0x1c,
+0xf0,0xe4,0x90,0x9e,0xb8,0xf0,0xe4,0x90,0x9e,0xb7,0xf0,0x22,0x91,0xea,0xef,0x64,
+0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x30,0x90,0x9e,0xae,0xe0,0x60,
+0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x22,0x90,0x9e,0xad,0xe0,0x60,0x08,0x90,
+0x01,0xb9,0x74,0x04,0xf0,0x80,0x14,0xe5,0x69,0x54,0x0f,0xd3,0x94,0x04,0x40,0x08,
+0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x08,
+0xf0,0x7f,0x00,0x22,0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,0xf0,0xe4,
+0xf5,0x48,0x90,0x9e,0xa6,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x12,
+0x39,0xa9,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x90,0x9e,
+0xad,0x14,0xf0,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x0c,0x50,0x11,0x7d,0x01,0x7f,0x0c,
+0x12,0x4c,0x84,0x90,0x9e,0xd1,0xe0,0x30,0xe0,0x03,0x12,0x56,0x83,0x22,0xe4,0x90,
+0x9f,0x0c,0xf0,0xa3,0xf0,0x90,0x01,0xeb,0xe0,0x54,0xc0,0x60,0x43,0xc3,0x90,0x9f,
+0x0d,0xe0,0x94,0x88,0x90,0x9f,0x0c,0xe0,0x94,0x13,0x40,0x0a,0x90,0x01,0xc6,0xe0,
+0x44,0x04,0xf0,0x7f,0x00,0x22,0x90,0x9f,0x0c,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,
+0x7f,0x14,0x7e,0x00,0x12,0x3b,0x3b,0xd3,0x90,0x9f,0x0d,0xe0,0x94,0x64,0x90,0x9f,
+0x0c,0xe0,0x94,0x00,0x40,0xbf,0x90,0x01,0xc7,0xe0,0x30,0xe2,0xb8,0x7f,0x00,0x22,
+0x7f,0x01,0x22,0x91,0xea,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,
+0x80,0x4a,0xe5,0x6b,0x54,0x03,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x3c,
+0xe5,0x69,0x54,0x0f,0xd3,0x94,0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,
+0x2b,0xe5,0x6b,0x30,0xe2,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x1e,0xe5,0x6b,
+0x30,0xe4,0x08,0x90,0x01,0xb9,0x74,0x10,0xf0,0x80,0x11,0x90,0x9e,0xa3,0xe0,0x60,
+0x08,0x90,0x01,0xb9,0x74,0x20,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,
+0x04,0xf0,0x7f,0x00,0x22,0x90,0x01,0x3c,0x74,0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,
+0x01,0x34,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x54,0x12,0x4f,0x89,0x7d,
+0xff,0x7f,0x55,0x12,0x4f,0x89,0x7d,0xff,0x7f,0x56,0x12,0x4f,0x89,0x7d,0xff,0x7f,
+0x57,0x02,0x4f,0x89,0x90,0x00,0xf3,0xe0,0x7f,0x00,0x30,0xe3,0x03,0x7f,0x01,0x22,
+0x22,0xe4,0x90,0x9e,0x69,0xf0,0xa3,0xf0,0x90,0x01,0x98,0xe0,0x7f,0x00,0x30,0xe4,
+0x02,0x7f,0x01,0xef,0x64,0x01,0x60,0x3e,0xc3,0x90,0x9e,0x6a,0xe0,0x94,0x88,0x90,
+0x9e,0x69,0xe0,0x94,0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,
+0x9e,0x69,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,0x14,0x7e,0x00,0x12,0x3b,0x3b,
+0xd3,0x90,0x9e,0x6a,0xe0,0x94,0x32,0x90,0x9e,0x69,0xe0,0x94,0x00,0x40,0xb9,0x90,
+0x01,0xc7,0xe0,0x30,0xe0,0xb2,0x22,0x90,0x01,0x94,0xe0,0x44,0x01,0xf0,0x22,0x90,
+0x01,0x01,0xe0,0x44,0x04,0xf0,0x90,0x01,0x9c,0x74,0x7e,0xf0,0xa3,0x74,0x92,0xf0,
+0xa3,0x74,0xa0,0xf0,0xa3,0x74,0x24,0xf0,0x90,0x01,0x9b,0x74,0x49,0xf0,0x90,0x01,
+0x9a,0x74,0xe0,0xf0,0x90,0x01,0x99,0xe4,0xf0,0x90,0x01,0x98,0x04,0xf0,0x22,0xc0,
+0xe0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x05,0xc0,0x06,0xc0,0x07,
+0x7d,0xbf,0x90,0x01,0xc4,0xed,0xf0,0x74,0x60,0xff,0xa3,0xf0,0x53,0x91,0xef,0x90,
+0x00,0x51,0xe0,0xfe,0x90,0x00,0x55,0xe0,0x5e,0xf5,0x3d,0xe5,0x3d,0x30,0xe6,0x03,
+0x74,0x40,0xf0,0xe5,0x3d,0x30,0xe7,0x06,0x90,0x00,0x55,0x74,0x80,0xf0,0x90,0x01,
+0xc4,0xed,0xf0,0xa3,0xef,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0xd0,0xd0,0x82,
+0xd0,0x83,0xd0,0xe0,0x32,0x8f,0x1f,0x8c,0x20,0x8d,0x21,0x22,0x8f,0x22,0x8c,0x23,
+0x8d,0x24,0x22,0xe4,0x90,0x9e,0x69,0xf0,0xa3,0xf0,0x90,0x02,0x86,0xe0,0x20,0xe1,
+0x2c,0xc3,0x90,0x9e,0x6a,0xe0,0x94,0xd0,0x90,0x9e,0x69,0xe0,0x94,0x07,0x40,0x0a,
+0x90,0x01,0xc6,0xe0,0x44,0x20,0xf0,0x7f,0x00,0x22,0x90,0x9e,0x69,0xe4,0x75,0xf0,
+0x01,0x12,0x42,0x54,0x7f,0x0a,0x7e,0x00,0x12,0x3b,0x3b,0x80,0xcd,0x7f,0x01,0x22,
+0xe4,0xf5,0x67,0xf5,0x6b,0xf5,0x6a,0x75,0x69,0x0c,0x75,0x68,0x0c,0x90,0x9e,0xb0,
+0xf0,0x90,0x9e,0xae,0xf0,0x90,0x9e,0xad,0xf0,0x90,0x9e,0xaf,0x04,0xf0,0x90,0x9e,
+0xa1,0xf0,0xe4,0x90,0x9e,0xb1,0xf0,0x90,0x9e,0xa3,0xf0,0x90,0x9e,0xab,0x74,0x07,
+0xf0,0xe4,0x90,0x9e,0xa2,0xf0,0x90,0x9e,0xa9,0xf0,0xa3,0x74,0x0b,0xf0,0x90,0x9e,
+0xa7,0x74,0x01,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0xa6,0x74,0x14,0xf0,0x90,0x9e,
+0xac,0x74,0x05,0xf0,0xe4,0x90,0x9e,0xa5,0xf0,0x90,0x9e,0xa0,0xf0,0x90,0x9e,0x9c,
+0xf0,0x90,0x9e,0xb2,0xf0,0x22,0xe4,0x90,0x9e,0xb1,0xf0,0x90,0x9e,0xa2,0xf0,0xf5,
+0x6b,0x22,0xef,0xb4,0x01,0x07,0x7d,0xc8,0x7f,0x02,0x02,0x3a,0x71,0x7d,0x60,0x7f,
+0x02,0x12,0x3a,0x54,0x90,0x01,0x3d,0x74,0x04,0xf0,0xa3,0x74,0xc8,0xf0,0x7d,0x04,
+0x7f,0x01,0x12,0x3a,0xdf,0x7d,0xc8,0x7f,0x02,0x02,0x3a,0xdf,0xe5,0x57,0x60,0x08,
+0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x61,0xe5,0x69,0x54,0x0f,0xd3,0x94,0x01,0x40,
+0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x50,0x90,0x02,0x87,0xe0,0x60,0x08,0x90,
+0x01,0xb9,0x74,0x04,0xf0,0x80,0x42,0x90,0x9e,0x9b,0xe0,0xb4,0x01,0x10,0x90,0x9e,
+0x82,0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x1c,0x80,0x2b,0x90,0x9e,
+0x9b,0xe0,0x70,0x14,0x90,0x9d,0xa9,0xe0,0xff,0x90,0x9d,0xa8,0xe0,0x6f,0x60,0x08,
+0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x11,0x90,0x9e,0xa5,0xe0,0x70,0x08,0x90,0x01,
+0xb9,0x74,0x10,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x02,0xf0,0x7f,
+0x00,0x22,0x90,0x06,0x04,0xe0,0x54,0xbf,0xf0,0xef,0x60,0x0a,0xe5,0x67,0xb4,0x01,
+0x05,0xe4,0xff,0x12,0x47,0xd6,0x53,0x68,0xf0,0x43,0x68,0x0c,0x90,0x9e,0xd1,0xe0,
+0x30,0xe0,0x07,0x90,0x05,0x27,0xe0,0x54,0x7f,0xf0,0x22,0x7f,0x01,0x51,0x72,0xe4,
+0x90,0x9e,0xd2,0xf0,0x22,0x90,0x9e,0xd2,0xe0,0xfe,0x6f,0x70,0x02,0x81,0x59,0xef,
+0x12,0x43,0x87,0x62,0xcc,0x00,0x63,0x00,0x01,0x63,0x3e,0x02,0x63,0x77,0x03,0x63,
+0xae,0x04,0x63,0xe6,0x05,0x64,0x20,0x06,0x00,0x00,0x64,0x59,0xee,0xb4,0x04,0x04,
+0x7f,0x01,0x81,0x8e,0x90,0x9e,0xd2,0xe0,0xff,0xb4,0x05,0x02,0x81,0x63,0xef,0xb4,
+0x06,0x06,0x7f,0x01,0x91,0x78,0x80,0x16,0x90,0x9e,0xd2,0xe0,0xb4,0x03,0x06,0x7f,
+0x01,0x91,0x5a,0x80,0x09,0x90,0x9e,0xd2,0xe0,0xb4,0x02,0x02,0x91,0x6d,0x80,0x9b,
+0x90,0x9e,0xd2,0xe0,0xb4,0x04,0x06,0x7f,0x01,0x91,0x8e,0x80,0x09,0x90,0x9e,0xd2,
+0xe0,0xb4,0x05,0x02,0x91,0x63,0x90,0x9e,0xd2,0xe0,0x70,0x02,0x81,0xa6,0x90,0x9e,
+0xd2,0xe0,0xfe,0xb4,0x06,0x04,0x7f,0x01,0x81,0x78,0xee,0xb4,0x03,0x04,0x7f,0x01,
+0x81,0x5a,0x90,0x9e,0xd2,0xe0,0x64,0x02,0x60,0x02,0x81,0x59,0x81,0x6d,0x90,0x9e,
+0xd2,0xe0,0xb4,0x04,0x06,0x7f,0x01,0x91,0x8e,0x80,0x09,0x90,0x9e,0xd2,0xe0,0xb4,
+0x05,0x02,0x91,0x63,0x90,0x9e,0xd2,0xe0,0x70,0x04,0x91,0xa6,0x80,0x16,0x90,0x9e,
+0xd2,0xe0,0xfe,0xb4,0x06,0x06,0x7f,0x01,0x91,0x78,0x80,0x08,0xee,0xb4,0x03,0x04,
+0x7f,0x01,0x91,0x5a,0x02,0x8b,0xba,0x90,0x9e,0xd2,0xe0,0xb4,0x04,0x06,0x7f,0x01,
+0x91,0x8e,0x80,0x09,0x90,0x9e,0xd2,0xe0,0xb4,0x05,0x02,0x91,0x63,0x90,0x9e,0xd2,
+0xe0,0x70,0x04,0x91,0xa6,0x80,0x14,0x90,0x9e,0xd2,0xe0,0xfe,0xb4,0x06,0x06,0xe4,
+0xff,0x91,0x78,0x80,0x06,0xee,0xb4,0x02,0x02,0x91,0x6d,0x02,0x68,0x4a,0x90,0x9e,
+0xd2,0xe0,0xfe,0xb4,0x06,0x06,0xe4,0xff,0x91,0x78,0x80,0x13,0xee,0xb4,0x03,0x06,
+0x7f,0x01,0x91,0x5a,0x80,0x09,0x90,0x9e,0xd2,0xe0,0xb4,0x02,0x02,0x91,0x6d,0x90,
+0x9e,0xd2,0xe0,0xb4,0x01,0x04,0x51,0x9b,0x80,0x09,0x90,0x9e,0xd2,0xe0,0xb4,0x05,
+0x02,0x91,0x63,0x02,0x6a,0x3b,0x90,0x9e,0xd2,0xe0,0xfe,0xb4,0x06,0x06,0xe4,0xff,
+0x91,0x78,0x80,0x13,0xee,0xb4,0x03,0x06,0x7f,0x01,0x91,0x5a,0x80,0x09,0x90,0x9e,
+0xd2,0xe0,0xb4,0x02,0x02,0x91,0x6d,0x90,0x9e,0xd2,0xe0,0xb4,0x01,0x04,0x51,0x9b,
+0x80,0x0b,0x90,0x9e,0xd2,0xe0,0xb4,0x04,0x04,0x7f,0x01,0x91,0x8e,0x02,0x8b,0xad,
+0x90,0x9e,0xd2,0xe0,0xb4,0x04,0x06,0x7f,0x01,0x91,0x8e,0x80,0x09,0x90,0x9e,0xd2,
+0xe0,0xb4,0x05,0x02,0x91,0x63,0x90,0x9e,0xd2,0xe0,0x70,0x04,0x91,0xa6,0x80,0x16,
+0x90,0x9e,0xd2,0xe0,0xb4,0x03,0x06,0xe4,0xff,0x91,0x5a,0x80,0x09,0x90,0x9e,0xd2,
+0xe0,0xb4,0x02,0x02,0x91,0x6d,0x12,0x8b,0xc7,0x22,0xf1,0x85,0x90,0x9e,0xd2,0x74,
+0x01,0xf0,0x22,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xd2,0xf0,0x22,0x90,0x05,0x22,
+0xe4,0xf0,0x90,0x9e,0xd2,0x04,0xf0,0x22,0x90,0x05,0x27,0xe0,0x44,0x40,0xf0,0xef,
+0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xd2,0x74,0x01,0xf0,0x22,0x90,0x9f,
+0x18,0xef,0xf0,0xf1,0x9e,0x90,0x9f,0x18,0xe0,0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,
+0xe4,0x90,0x9e,0xd2,0xf0,0x22,0x12,0x68,0x03,0x90,0x9e,0xd2,0x74,0x01,0xf0,0x22,
+0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0x74,0x12,0x43,0x7e,0xe4,0x90,0x9e,
+0x77,0xf0,0x12,0x1f,0x04,0xc3,0x13,0x20,0xe0,0x02,0xc1,0x06,0x90,0x9e,0x74,0x12,
+0x43,0x5e,0x12,0x1f,0x04,0xff,0x54,0x02,0xfe,0x90,0x9e,0xd7,0xe0,0x54,0xfd,0x4e,
+0xfe,0xf0,0xef,0x54,0x01,0xff,0xee,0x54,0xfe,0x4f,0xff,0xf0,0x12,0x1f,0x04,0xfe,
+0x54,0x08,0xfd,0xef,0x54,0xf7,0x4d,0xff,0x90,0x9e,0xd7,0xf0,0xee,0x54,0x10,0xfe,
+0xef,0x54,0xef,0x4e,0xff,0xf0,0x12,0x1f,0x04,0xfe,0x54,0x20,0xfd,0xef,0x54,0xdf,
+0x4d,0xff,0x90,0x9e,0xd7,0xf0,0xee,0x54,0x40,0xfe,0xef,0x54,0xbf,0x4e,0xf0,0x20,
+0xe0,0x02,0xa1,0xf5,0xf1,0x5a,0x90,0x9e,0x77,0x74,0x21,0xf0,0x90,0x9e,0x74,0x12,
+0x43,0x5e,0x12,0x1f,0x04,0xff,0x13,0x13,0x54,0x01,0xfe,0x90,0x9e,0xd7,0xe0,0xfd,
+0x13,0x13,0x54,0x01,0x6e,0x60,0x31,0xef,0x54,0x04,0xff,0xed,0x54,0xfb,0x4f,0xf0,
+0xe0,0x13,0x13,0x54,0x3f,0x30,0xe0,0x15,0x90,0x01,0x34,0x74,0x40,0xf0,0xfd,0xe4,
+0xff,0x12,0x3a,0xc5,0x90,0x9e,0x77,0xe0,0x44,0x08,0xf0,0x80,0x0b,0xe4,0x90,0x9e,
+0xd9,0xf0,0x7d,0x40,0xff,0x12,0x3a,0x54,0x90,0x9e,0xd7,0xe0,0xfd,0x13,0x13,0x13,
+0x54,0x1f,0x30,0xe0,0x07,0x90,0x9e,0x77,0xe0,0x44,0x12,0xf0,0xed,0xc4,0x54,0x0f,
+0x30,0xe0,0x07,0x90,0x9e,0x77,0xe0,0x44,0x14,0xf0,0x90,0x9e,0xd7,0xe0,0xc4,0x13,
+0x54,0x07,0x30,0xe0,0x07,0x90,0x9e,0x77,0xe0,0x44,0x80,0xf0,0x90,0x9e,0xd7,0xe0,
+0xc4,0x13,0x13,0x54,0x03,0x20,0xe0,0x07,0x90,0x9e,0x77,0xe0,0x44,0x40,0xf0,0x90,
+0x9e,0x77,0xe0,0x90,0x05,0x27,0xf0,0x90,0x9e,0xd8,0xe0,0x70,0x05,0x7f,0x01,0x12,
+0x68,0x90,0x90,0x9e,0xd7,0xe0,0xc4,0x13,0x13,0x54,0x03,0x30,0xe0,0x04,0x7f,0x03,
+0x80,0x0e,0x7f,0x01,0x12,0x56,0x0b,0xef,0x60,0x04,0x7f,0x01,0x80,0x02,0x7f,0x02,
+0x12,0x68,0x90,0xe1,0x55,0x90,0x9e,0x77,0x74,0x01,0xf0,0x90,0x05,0x27,0xf0,0xe4,
+0xff,0x12,0x68,0x90,0xe1,0x53,0x90,0x9e,0x74,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,
+0x54,0x02,0xfe,0x90,0x9e,0xd1,0xe0,0x54,0xfd,0x4e,0xfe,0xf0,0xef,0x54,0x01,0xff,
+0xee,0x54,0xfe,0x4f,0xff,0xf0,0x12,0x1f,0x04,0xfe,0x54,0x08,0xfd,0xef,0x54,0xf7,
+0x4d,0xff,0x90,0x9e,0xd1,0xf0,0xee,0x54,0x10,0xfe,0xef,0x54,0xef,0x4e,0xff,0xf0,
+0x12,0x1f,0x04,0x54,0x40,0xfe,0xef,0x54,0xbf,0x4e,0x90,0x9e,0xd1,0xf0,0x20,0xe0,
+0x02,0xe1,0x26,0xf1,0x5a,0x90,0x9e,0x77,0x74,0x31,0xf0,0x90,0x9e,0x74,0x12,0x43,
+0x5e,0x12,0x1f,0x04,0xff,0x13,0x13,0x54,0x01,0xfe,0x90,0x9e,0xd1,0xe0,0xfd,0x13,
+0x13,0x54,0x01,0x6e,0x60,0x31,0xef,0x54,0x04,0xff,0xed,0x54,0xfb,0x4f,0xf0,0xe0,
+0x13,0x13,0x54,0x3f,0x30,0xe0,0x15,0x90,0x01,0x34,0x74,0x40,0xf0,0xfd,0xe4,0xff,
+0x12,0x3a,0xc5,0x90,0x9e,0x77,0xe0,0x44,0x08,0xf0,0x80,0x0b,0xe4,0x90,0x9e,0xd3,
+0xf0,0x7d,0x40,0xff,0x12,0x3a,0x54,0x90,0x9e,0xd1,0xe0,0xfd,0x13,0x13,0x13,0x54,
+0x1f,0x30,0xe0,0x07,0x90,0x9e,0x77,0xe0,0x44,0x02,0xf0,0xed,0xc4,0x54,0x0f,0x30,
+0xe0,0x07,0x90,0x9e,0x77,0xe0,0x44,0x04,0xf0,0x90,0x9e,0x77,0xe0,0x54,0x0e,0x60,
+0x0c,0x90,0x01,0x3e,0x74,0x03,0xf0,0xfd,0x7f,0x02,0x12,0x3a,0xdf,0x90,0x9e,0x77,
+0xe0,0x90,0x05,0x27,0xf0,0x90,0x9e,0xd1,0xe0,0xff,0xc4,0x13,0x13,0x54,0x03,0x30,
+0xe0,0x0c,0xa3,0xe0,0x64,0x06,0x60,0x5d,0x7f,0x06,0x51,0xa5,0x80,0x57,0x90,0x05,
+0x27,0xe0,0x44,0x40,0xf0,0x90,0x9e,0xd2,0xe0,0xb4,0x06,0x15,0x7f,0x01,0x51,0xa5,
+0xe4,0xff,0x12,0x56,0x0b,0xef,0x60,0x05,0x12,0x4c,0x80,0x80,0x04,0xf1,0xbb,0x80,
+0x34,0x12,0x56,0x83,0x80,0x2f,0x90,0x9e,0x77,0x74,0x01,0xf0,0x90,0x05,0x27,0xf0,
+0x7d,0x03,0x7f,0x02,0x12,0x3a,0x71,0x90,0x9e,0xd2,0xe0,0xb4,0x06,0x04,0x7f,0x01,
+0x80,0x09,0x90,0x9e,0xd2,0xe0,0xb4,0x04,0x04,0xe4,0xff,0x51,0xa5,0x12,0x56,0x52,
+0x12,0x44,0xe8,0xf1,0x5a,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0xd7,0xe0,0x54,0xfe,
+0xf0,0x54,0xfb,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,
+0x9e,0xd1,0xe0,0x54,0xfe,0xf0,0x54,0xfb,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
+0xa3,0xf0,0xa3,0xf0,0x22,0x90,0x9f,0x15,0xef,0xf0,0xf1,0x9e,0x90,0x9f,0x15,0xe0,
+0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,0x53,0x68,0xf0,0x43,0x68,0x04,0x22,0x90,0x01,
+0x01,0xe0,0x44,0x02,0xf0,0x90,0x01,0x00,0x74,0xff,0xf0,0x90,0x00,0x02,0xe0,0x44,
+0x01,0xf0,0x12,0x4e,0x94,0x90,0x01,0xba,0xe4,0xf0,0x22,0x90,0x9e,0xa3,0xe0,0x60,
+0x16,0x90,0x9e,0xd2,0xe0,0x70,0x04,0x7f,0x05,0x80,0x1f,0x90,0x9e,0xd2,0xe0,0x64,
+0x01,0x70,0x19,0x7f,0x02,0x80,0x13,0x90,0x9e,0xd2,0xe0,0xb4,0x01,0x04,0x7f,0x03,
+0x80,0x08,0x90,0x9e,0xd2,0xe0,0x70,0x04,0x7f,0x04,0x51,0xa5,0x22,0xf1,0x9e,0x90,
+0x05,0x22,0x74,0x6f,0xf0,0x90,0x05,0x27,0xe0,0x54,0xbf,0xf0,0x90,0x9e,0xd8,0x74,
+0x03,0xf0,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x67,0xb4,0x01,0x05,0x7f,
+0x01,0x12,0x47,0xd6,0x53,0x68,0xf0,0x43,0x68,0x04,0x90,0x9e,0xd1,0xe0,0x30,0xe0,
+0x07,0x90,0x05,0x27,0xe0,0x44,0x80,0xf0,0x22,0x90,0x01,0x37,0x74,0x02,0xf0,0x31,
+0xe2,0xef,0x70,0x06,0x90,0x01,0xc8,0x74,0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x3a,
+0xc5,0x11,0x59,0x53,0x68,0xf0,0x43,0x68,0x02,0x22,0x11,0x29,0x90,0x9e,0xd2,0x74,
+0x03,0xf0,0x22,0x90,0x05,0x22,0x74,0xff,0xf0,0x90,0x00,0x02,0xe0,0x54,0xfe,0xf0,
+0x12,0x4e,0x94,0x90,0x01,0x00,0x74,0x3f,0xf0,0xa3,0xe0,0x54,0xfd,0xf0,0x90,0x05,
+0x53,0xe0,0x44,0x20,0xf0,0x90,0x01,0xba,0x74,0xcc,0xf0,0x22,0x31,0xe2,0xef,0x70,
+0x06,0x90,0x01,0xc8,0x74,0xfd,0xf0,0x11,0x59,0x90,0x9e,0xd8,0x74,0x02,0xf0,0x22,
+0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xd8,0xe0,0x90,0x9f,0x17,0xf0,0x6f,
+0x70,0x02,0x21,0x5c,0xef,0x14,0x60,0x3b,0x14,0x60,0x5f,0x14,0x70,0x02,0x21,0x35,
+0x24,0x03,0x60,0x02,0x21,0x5c,0x90,0x9f,0x17,0xe0,0xb4,0x03,0x04,0x31,0x7d,0x21,
+0x5c,0x90,0x9f,0x17,0xe0,0xb4,0x02,0x04,0x31,0x95,0x21,0x5c,0x90,0x9f,0x17,0xe0,
+0xb4,0x04,0x04,0x31,0x99,0x21,0x5c,0x90,0x9f,0x17,0xe0,0x64,0x01,0x70,0x7d,0x31,
+0x7f,0x80,0x79,0x90,0x9f,0x17,0xe0,0xff,0xb4,0x03,0x04,0x31,0xcf,0x80,0x6d,0xef,
+0xb4,0x02,0x04,0x31,0xb1,0x80,0x65,0x90,0x9f,0x17,0xe0,0xff,0xb4,0x04,0x04,0x31,
+0xa6,0x80,0x59,0xef,0x70,0x56,0x31,0x6a,0x80,0x52,0x90,0x9f,0x17,0xe0,0xb4,0x03,
+0x04,0x31,0xbf,0x80,0x47,0x90,0x9f,0x17,0xe0,0xb4,0x01,0x04,0x11,0x7c,0x80,0x3c,
+0x90,0x9f,0x17,0xe0,0xb4,0x04,0x04,0x31,0x9d,0x80,0x31,0x90,0x9f,0x17,0xe0,0x70,
+0x2b,0x31,0x61,0x80,0x27,0x90,0x9f,0x17,0xe0,0xff,0xb4,0x01,0x05,0x12,0x67,0xef,
+0x80,0x1a,0xef,0xb4,0x02,0x05,0x12,0x67,0xed,0x80,0x11,0x90,0x9f,0x17,0xe0,0xff,
+0xb4,0x04,0x04,0x51,0x29,0x80,0x05,0xef,0x70,0x02,0x31,0x65,0xd0,0xd0,0x92,0xaf,
+0x22,0x31,0x6a,0x01,0x7c,0x31,0x6a,0x02,0x67,0xef,0x90,0x01,0x3e,0x74,0x03,0xf0,
+0xfd,0x7f,0x02,0x12,0x3a,0xdf,0x90,0x9e,0xd8,0x74,0x01,0xf0,0x22,0x31,0xcf,0x7d,
+0x03,0x7f,0x02,0x12,0x3a,0x71,0x90,0x05,0x27,0xe4,0xf0,0xe0,0x54,0xbf,0xf0,0xe4,
+0x90,0x9e,0xd8,0xf0,0x22,0x31,0xb1,0x80,0xe6,0x31,0xa6,0x80,0xe2,0x11,0x59,0x90,
+0x9e,0xd8,0x74,0x02,0xf0,0x22,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xd8,0x04,0xf0,
+0x22,0x12,0x67,0x9e,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xd8,0x04,0xf0,0x22,0x90,
+0x05,0x27,0xe0,0x44,0x40,0xf0,0x11,0x53,0x90,0x9e,0xd8,0x74,0x02,0xf0,0x22,0x90,
+0x05,0x22,0xe4,0xf0,0x90,0x05,0x27,0xe0,0x44,0x40,0xf0,0x90,0x9e,0xd8,0x74,0x01,
+0xf0,0x22,0x90,0x05,0x22,0x74,0xff,0xf0,0xe4,0x90,0x9f,0x0e,0xf0,0xa3,0xf0,0x90,
+0x05,0xf8,0xe0,0x70,0x0f,0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,0xa3,0xe0,0x70,
+0x03,0x7f,0x01,0x22,0xd3,0x90,0x9f,0x0f,0xe0,0x94,0xe8,0x90,0x9f,0x0e,0xe0,0x94,
+0x03,0x40,0x03,0x7f,0x00,0x22,0x7f,0x32,0x7e,0x00,0x12,0x3b,0x3b,0x90,0x9f,0x0e,
+0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x80,0xc6,0x02,0x67,0xef,0x31,0x6a,0x90,0x05,
+0x22,0x74,0xff,0xf0,0x90,0x9e,0xd8,0x74,0x04,0xf0,0x22,0x11,0x53,0x90,0x9e,0xd2,
+0x74,0x04,0xf0,0x22,0x8f,0x25,0xe4,0x90,0x9f,0x0a,0xf0,0xa3,0xf0,0x90,0x01,0x09,
+0xe0,0x7f,0x00,0x30,0xe7,0x02,0x7f,0x01,0xef,0x65,0x25,0x60,0x3e,0xc3,0x90,0x9f,
+0x0b,0xe0,0x94,0x88,0x90,0x9f,0x0a,0xe0,0x94,0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,
+0x44,0x80,0xf0,0x22,0x90,0x9f,0x0a,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,0x14,
+0x7e,0x00,0x12,0x3b,0x3b,0xd3,0x90,0x9f,0x0b,0xe0,0x94,0x32,0x90,0x9f,0x0a,0xe0,
+0x94,0x00,0x40,0xb9,0x90,0x01,0xc7,0xe0,0x30,0xe0,0xb2,0x22,0x90,0x9e,0x9b,0xe0,
+0xb4,0x01,0x04,0x7d,0x91,0x80,0x0c,0x90,0x9e,0x9b,0xe0,0x70,0x04,0x7d,0x90,0x80,
+0x02,0xe4,0xfd,0x7f,0x93,0x12,0x4f,0x89,0x90,0x00,0x29,0xe0,0x54,0x3f,0xfd,0x7f,
+0x29,0x12,0x4f,0x89,0x90,0x00,0x28,0xe0,0x54,0xfc,0xfd,0x7f,0x28,0x12,0x4f,0x89,
+0x90,0x00,0x08,0xe0,0x44,0x10,0xfd,0x7f,0x08,0x12,0x4f,0x89,0x7f,0x01,0x51,0x44,
+0x90,0x00,0x00,0xe0,0x44,0x20,0xfd,0xe4,0xff,0x12,0x4f,0x89,0x90,0x00,0x20,0xe0,
+0x54,0xfe,0xfd,0x7f,0x20,0x12,0x4f,0x89,0x90,0x00,0x90,0xe0,0x44,0x01,0xfd,0x7f,
+0x90,0x12,0x4f,0x89,0x7f,0x14,0x7e,0x00,0x02,0x3b,0x3b,0x53,0x68,0xf0,0x43,0x68,
+0x01,0x51,0x9c,0x12,0x4f,0x9e,0x53,0x68,0xf0,0x43,0x68,0x02,0x22,0xe5,0x69,0x30,
+0xe6,0x19,0xe5,0x69,0x54,0x0f,0xff,0x90,0x9e,0x9f,0xe0,0xfe,0x4f,0x90,0x01,0x2f,
+0xf0,0xee,0x64,0x80,0x90,0x9e,0x9f,0xf0,0x53,0x69,0xbf,0x22,0x8f,0x26,0x12,0x4f,
+0xf8,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0x98,0x12,0x50,0x26,0xe5,0x26,0x60,0x10,
+0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,
+0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x90,0x04,
+0x1f,0x74,0x20,0xf0,0x22,0x90,0x06,0xa9,0xe0,0x90,0x9e,0x52,0xf0,0xe0,0x54,0xc0,
+0x70,0x09,0x53,0x6b,0xfe,0x53,0x6b,0xfd,0x02,0x44,0xe8,0x90,0x9e,0x52,0xe0,0x30,
+0xe6,0x1e,0x90,0x9e,0xa0,0xe0,0x70,0x08,0x43,0x6b,0x01,0x12,0x56,0x19,0x80,0x13,
+0x90,0x9e,0xb0,0xe0,0xb4,0x01,0x0c,0x43,0x6b,0x04,0x7f,0x01,0x71,0x3c,0x80,0x03,
+0x53,0x6b,0xfe,0x90,0x9e,0x52,0xe0,0x30,0xe7,0x23,0x43,0x6b,0x02,0xe4,0xf5,0x48,
+0x90,0x9e,0xa8,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x39,0xa9,
+0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0xb1,0x74,0x01,0xf0,0x22,0x53,0x6b,0xfd,
+0x22,0xe5,0x67,0x64,0x01,0x70,0x66,0xe5,0x6a,0x60,0x62,0xe5,0x6a,0x64,0x02,0x60,
+0x06,0xe5,0x6a,0x64,0x05,0x70,0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0xa1,0xf0,0x90,
+0x06,0xaa,0xe0,0x90,0x9e,0xaf,0xf0,0x90,0x9e,0xa1,0xe0,0x70,0x07,0x90,0x9e,0xaf,
+0xe0,0xff,0x80,0x05,0x90,0x9e,0xa1,0xe0,0xff,0x90,0x9e,0xa1,0xef,0xf0,0x90,0x9e,
+0xa3,0xe0,0x60,0x03,0xe0,0x14,0xf0,0xe4,0x90,0x9e,0xa2,0xf0,0x90,0x01,0x57,0xf0,
+0x90,0x01,0x3c,0x74,0x02,0xf0,0x53,0x6b,0xfd,0x53,0x6b,0xef,0xe5,0x6a,0x14,0x24,
+0xfd,0x50,0x06,0x24,0xfd,0x50,0x04,0x80,0x04,0x80,0x03,0x71,0x75,0x22,0x90,0x06,
+0xa9,0xe0,0x90,0x9e,0x52,0xf0,0xe0,0x54,0xc0,0x70,0x09,0x53,0x6b,0xfe,0x53,0x6b,
+0xfd,0x12,0x44,0xe8,0x90,0x9e,0x52,0xe0,0x30,0xe6,0x15,0x43,0x6b,0x01,0x90,0x9e,
+0xb0,0xe0,0x64,0x02,0x60,0x05,0x12,0x56,0x19,0x80,0x08,0x12,0x5e,0xf4,0x80,0x03,
+0x53,0x6b,0xfe,0x90,0x9e,0x52,0xe0,0x30,0xe7,0x23,0x43,0x6b,0x02,0xe4,0xf5,0x48,
+0x90,0x9e,0xa8,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x39,0xa9,
+0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0xb1,0x74,0x01,0xf0,0x22,0x53,0x6b,0xfd,
+0x22,0xe5,0x6a,0x60,0x39,0x90,0x9e,0xb1,0xe0,0x60,0x0d,0xe4,0xf0,0x53,0x6b,0xfd,
+0xe5,0x6b,0x54,0x07,0x70,0x28,0x80,0x23,0x90,0x9e,0xa2,0xe0,0x04,0xf0,0x53,0x6b,
+0xef,0x90,0x9e,0xa7,0xe0,0xff,0x90,0x9e,0xa2,0xe0,0xd3,0x9f,0x40,0x0d,0xe5,0x67,
+0xb4,0x01,0x0b,0xa3,0xe0,0x70,0x07,0xe0,0x04,0xf0,0x22,0x12,0x44,0xe8,0x22,0xd3,
+0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xf8,0x12,0x43,0x7e,0x90,0x9e,0xfb,0xe0,
+0x54,0xf0,0x44,0x06,0xff,0xf0,0xed,0x54,0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,
+0x4e,0xf0,0x90,0x9e,0xf8,0x12,0x43,0x5e,0x90,0x9e,0xf5,0x12,0x43,0x7e,0x7b,0x01,
+0x7a,0x9e,0x79,0xfb,0x12,0x48,0xde,0xd0,0xd0,0x92,0xaf,0x22,0xe0,0xfd,0x74,0x26,
+0x25,0x13,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xed,0xf0,0xaf,0x13,0xd3,0x10,0xaf,
+0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,0x50,0x0e,0x74,0x84,0x2f,0xf5,0x82,0xe4,
+0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,0x74,0xa6,0x2f,0xf5,0x82,0xe4,0x34,0x9c,
+0xf5,0x83,0xed,0xf0,0x90,0x9e,0xc4,0xef,0xf0,0x24,0xa6,0xf5,0x82,0xe4,0x34,0x9c,
+0xf5,0x83,0xe0,0x90,0x9e,0xc5,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0xc4,0x7d,0x02,0x91,
+0xef,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x0a,0x8d,0x0b,0xe5,0x0b,0x54,0x1f,0xf5,0x10,
+0x74,0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xf5,0x0e,0x90,0x04,0xfd,
+0xe0,0xb4,0x01,0x05,0x75,0x11,0x03,0x80,0x03,0x75,0x11,0x01,0xeb,0xc3,0x95,0x11,
+0x40,0x04,0xaf,0x0a,0x80,0x33,0xe5,0x0e,0x25,0x0d,0xf5,0x0f,0xe5,0x10,0x90,0x41,
+0xdc,0x93,0xff,0xe5,0x0f,0xd3,0x9f,0x74,0x01,0x40,0x11,0x25,0x0a,0xf5,0x82,0xe4,
+0x34,0x94,0xf5,0x83,0xe4,0xf0,0xad,0x0b,0xaf,0x0a,0xa1,0x3d,0x25,0x0a,0xf5,0x82,
+0xe4,0x34,0x94,0xf5,0x83,0xe5,0x0f,0xf0,0x22,0xad,0x07,0x75,0xf0,0x09,0xed,0x90,
+0x96,0x48,0x12,0x43,0x52,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
+0x83,0xe0,0x54,0x1f,0xf5,0x12,0xd3,0x9f,0x40,0x02,0x8f,0x12,0xe5,0x12,0x25,0xe0,
+0x24,0xa4,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,
+0xe5,0x12,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,
+0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,
+0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x05,0xad,0x12,
+0xb1,0x3d,0xaf,0x12,0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,0x17,0xed,
+0xc4,0x54,0xf0,0xfd,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,
+0x83,0xe0,0x54,0x0f,0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,
+0x04,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,0x04,0xf5,
+0x83,0xe0,0x4d,0xf0,0x22,0xad,0x07,0xed,0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2d,
+0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2d,0xf5,0x82,0xe4,
+0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x1e,0xe5,0x1e,0x54,0x1f,0xfc,0x75,0xf0,
+0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x52,0xe0,0xff,0x90,0x9e,0x73,0xf0,0xed,0x25,
+0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,
+0x74,0xcb,0xf0,0xa3,0xeb,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,
+0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x76,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,
+0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfa,0x74,0x01,0x93,
+0xfb,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xea,0xf0,0xa3,
+0xeb,0xf0,0xec,0xc3,0x9f,0x40,0x02,0xe1,0xb3,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,
+0x9d,0xf5,0x83,0xec,0xf0,0x04,0xfb,0x90,0x9e,0x73,0xe0,0xff,0xeb,0xd3,0x9f,0x40,
+0x02,0xe1,0xe4,0xeb,0xc3,0x94,0x10,0x40,0x21,0xeb,0x24,0xf0,0xff,0x74,0x01,0x7e,
+0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,
+0x74,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x23,0xeb,0xc3,0x94,0x10,0x50,0x40,
+0x74,0x01,0x7e,0x00,0xa8,0x03,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,
+0xff,0x90,0x9e,0x76,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x23,0xbb,0x11,0x09,
+0x90,0x9e,0x75,0xe0,0x30,0xe7,0x02,0x7b,0x17,0xeb,0x64,0x13,0x60,0x03,0xbb,0x12,
+0x09,0x90,0x9e,0x74,0xe0,0x30,0xe0,0x02,0x7b,0x18,0xac,0x03,0x8c,0x1e,0x80,0x34,
+0x0b,0x80,0x84,0x90,0x9e,0x73,0xe0,0xfb,0x6c,0x70,0x69,0x74,0x67,0x2d,0xf5,0x82,
+0xe4,0x34,0x9d,0xf5,0x83,0xec,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,
+0x52,0xe0,0xb4,0x01,0x0c,0xe5,0x1e,0x20,0xe6,0x07,0xec,0x44,0x40,0xf5,0x1e,0x80,
+0x03,0xaf,0x1e,0x22,0xec,0x25,0xe0,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
+0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,
+0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,
+0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,
+0xef,0xf0,0x80,0x5b,0xec,0xd3,0x9b,0x40,0x56,0x90,0x9e,0x73,0xe0,0xff,0x74,0x67,
+0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0xac,0x07,0x8f,0x1e,0xec,0x25,
+0xe0,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,
+0xff,0xec,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,
+0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,
+0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x1e,0x22,0x74,
+0x01,0x2d,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xaf,0x05,0xe5,0x1e,0x44,
+0x80,0xfd,0x12,0x6d,0x3d,0xe5,0x1e,0x44,0x80,0xff,0x22,0xac,0x07,0xec,0xc3,0x94,
+0x20,0x50,0x0d,0x74,0x84,0x2c,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,
+0x74,0xa6,0x2c,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x1e,0xe5,
+0x1e,0x54,0x1f,0xff,0x90,0x9e,0x75,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x49,0x12,
+0x43,0x52,0xe0,0x90,0x9e,0x77,0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x48,0x12,0x43,
+0x52,0xe0,0xfe,0x90,0x9e,0x78,0xf0,0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,
+0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x79,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,
+0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,
+0x9e,0x7b,0xcb,0xf0,0xa3,0xeb,0xf0,0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,0x78,0xe0,
+0x90,0x9e,0x75,0xf0,0xf5,0x1e,0xed,0x70,0x02,0x21,0xf1,0x90,0x9e,0x76,0xed,0xf0,
+0xe5,0x1e,0x30,0xe6,0x0a,0x90,0x9e,0x75,0xe0,0xf5,0x1e,0xa3,0xe0,0x14,0xf0,0x90,
+0x9e,0x76,0xe0,0x70,0x02,0x21,0xf1,0x90,0x9e,0x75,0xe0,0xff,0xd3,0x94,0x00,0x50,
+0x02,0x21,0xf1,0xe4,0x90,0x9e,0x74,0xf0,0xef,0x14,0x90,0x9e,0x73,0xf0,0x90,0x9e,
+0x77,0xe0,0xfd,0x90,0x9e,0x73,0xe0,0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,0x10,0x40,
+0x21,0xef,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,
+0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x7b,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,
+0x70,0x27,0x90,0x9e,0x73,0xe0,0xff,0xc3,0x94,0x10,0x50,0x33,0x74,0x01,0x7e,0x00,
+0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x79,
+0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x16,0x90,0x9e,0x73,0xe0,0xf5,0x1e,0xa3,
+0xe0,0x04,0xf0,0x90,0x9e,0x76,0xe0,0xff,0x90,0x9e,0x74,0xe0,0x6f,0x60,0x08,0x90,
+0x9e,0x73,0xe0,0x14,0xf0,0x80,0x87,0x90,0x9e,0x76,0xe0,0xff,0x90,0x9e,0x74,0xe0,
+0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x73,0xe0,0xb5,0x05,0x06,0x90,0x9e,0x77,0xe0,0xf5,
+0x1e,0xe5,0x1e,0x25,0xe0,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,
+0xfe,0x74,0x01,0x93,0xff,0xe5,0x1e,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,
+0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,
+0xec,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,
+0xf0,0xaf,0x04,0xad,0x1e,0x12,0x6d,0x3d,0xaf,0x1e,0x22,0xe4,0xf5,0x13,0xe5,0x13,
+0xb4,0x20,0x14,0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,0x95,0x01,0xe0,0xff,0x90,0x9a,
+0xc5,0xe0,0xb5,0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x4b,0x12,
+0x43,0x52,0xe0,0x64,0x01,0x60,0x03,0x02,0x78,0x83,0xe5,0x13,0x25,0xe0,0x24,0x80,
+0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xd3,0x94,0x00,0xee,0x94,
+0x00,0x50,0x03,0x02,0x78,0x83,0xe5,0x13,0x94,0x20,0x40,0x09,0x90,0x9a,0xc5,0xe0,
+0x60,0x03,0x02,0x78,0x8f,0xe5,0x13,0x75,0xf0,0x0a,0xa4,0x24,0x00,0xf9,0x74,0x90,
+0x35,0xf0,0x75,0x18,0x01,0xf5,0x19,0x89,0x1a,0xe5,0x13,0x25,0xe0,0x24,0x80,0xf5,
+0x82,0xe4,0x34,0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x6d,0xcf,0xf0,0xa3,
+0xef,0xf0,0xe5,0x13,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,
+0xff,0xa3,0xe0,0x90,0x9e,0x6f,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x13,0xc3,0x94,0x20,
+0x50,0x14,0x74,0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x3f,
+0x90,0x9e,0x69,0xf0,0x80,0x12,0x74,0xa6,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,
+0x83,0xe0,0x54,0x3f,0x90,0x9e,0x69,0xf0,0x90,0x9e,0x69,0xe0,0xfe,0x54,0x1f,0xa3,
+0xf0,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x48,0x12,0x43,0x52,0xe0,0x90,0x9e,0x72,
+0xf0,0x74,0xe6,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xc3,0x94,0x05,
+0x40,0x02,0xa1,0x5c,0x90,0x9e,0x72,0xe0,0xff,0x90,0x9e,0x6a,0xe0,0x9f,0x40,0x13,
+0x90,0x9e,0x72,0xe0,0x90,0x9e,0x6a,0xf0,0xee,0x54,0x40,0xfe,0x90,0x9e,0x69,0xf0,
+0xef,0x4e,0xf0,0x90,0x04,0xfd,0xe0,0x54,0x05,0x64,0x01,0x70,0x29,0x90,0x9e,0x6a,
+0xe0,0xff,0x90,0x41,0x50,0x93,0xfe,0x74,0x44,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,
+0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,0xe0,0x80,0x30,0x90,0x9e,0x6a,
+0xe0,0x90,0x40,0xfc,0x80,0x27,0x90,0x9e,0x6a,0xe0,0xff,0x90,0x41,0x50,0x93,0xfe,
+0x74,0x44,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,
+0xef,0x90,0x41,0x18,0x80,0x07,0x90,0x9e,0x6a,0xe0,0x90,0x41,0x34,0x93,0x90,0x9e,
+0x71,0xf0,0x90,0x9e,0x71,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x56,0xf9,0x74,0x40,0x35,
+0xf0,0x75,0x15,0xff,0xf5,0x16,0x89,0x17,0x90,0x9e,0x69,0xe0,0x90,0x41,0xf8,0x93,
+0xff,0xd3,0x90,0x9e,0x70,0xe0,0x9f,0x90,0x9e,0x6f,0xe0,0x94,0x00,0x40,0x09,0xe4,
+0xfd,0xaf,0x13,0x11,0x9b,0x02,0x78,0x1a,0xe5,0x13,0x25,0xe0,0x24,0xc2,0xf5,0x82,
+0xe4,0x34,0x95,0xf5,0x83,0xe0,0xf5,0x1b,0xa3,0xe0,0xf5,0x1c,0xab,0x15,0xaa,0x16,
+0xa9,0x17,0x12,0x1f,0x04,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,
+0x6a,0xfd,0xac,0xf0,0x12,0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,
+0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x01,0x12,0x1f,0x1d,0xff,0x7e,0x00,
+0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x02,0x12,0x42,0x95,0xfd,0xac,0xf0,0x12,
+0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,
+0xa9,0x17,0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,
+0x1a,0x90,0x00,0x04,0x12,0x42,0x95,0xfd,0xac,0xf0,0x12,0x1f,0x4a,0xef,0x25,0x1c,
+0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x03,
+0x12,0x1f,0x1d,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x06,0x12,
+0x42,0x95,0xfd,0xac,0xf0,0x12,0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,
+0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x04,0x12,0x1f,0x1d,0xff,0x7e,
+0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x08,0x12,0x42,0x95,0xfd,0xac,0xf0,
+0x12,0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,
+0x16,0xa9,0x17,0x90,0x00,0x05,0x12,0x1f,0x1d,0xff,0x7e,0x00,0x90,0x9e,0x6d,0xe0,
+0xfc,0xa3,0xe0,0xfd,0x12,0x1f,0x4a,0xd3,0xe5,0x1c,0x9f,0xe5,0x1b,0x9e,0x40,0x0c,
+0xe5,0x1c,0x9f,0xf5,0x1c,0xe5,0x1b,0x9e,0xf5,0x1b,0x80,0x05,0xe4,0xf5,0x1b,0xf5,
+0x1c,0xe5,0x13,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,0x1b,
+0xf0,0xa3,0xe5,0x1c,0xf0,0x90,0x9e,0x69,0xe0,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,
+0x34,0x41,0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,0x95,0x1b,0x50,0x07,
+0xaf,0x13,0x12,0x6e,0x95,0xe1,0xee,0x90,0x9e,0x69,0xe0,0x25,0xe0,0x24,0xa4,0xf5,
+0x82,0xe4,0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,0x95,0x1b,
+0x50,0x02,0xe1,0xee,0x7d,0x01,0xaf,0x13,0x11,0x9b,0xe1,0xee,0x74,0xe6,0x25,0x13,
+0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x02,0xc1,0xf7,0x90,
+0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x6a,0xe0,0xc3,0x94,0x19,0x40,0x3d,
+0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x6a,0xe0,0xc3,0x94,0x11,0x40,0x2e,0x80,
+0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x6a,0xe0,0xc3,0x94,0x0a,
+0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x6a,0xe0,0xc3,0x94,0x03,0x40,0x0d,
+0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,0x74,0x84,0x25,
+0x13,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1d,0x74,0x44,0x25,0x13,0xf5,
+0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x02,0xc1,0xa4,0x90,
+0x9a,0x84,0xe0,0x64,0x01,0x60,0x02,0xc1,0xa4,0x74,0x85,0x25,0x13,0xf5,0x82,0xe4,
+0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,0xff,0xe4,0x33,0xfe,
+0x74,0x41,0x25,0x13,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xfd,0xd3,0x9f,0xee,
+0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,0xe4,0x33,0xfe,0x74,
+0x44,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,0x9f,0xee,0x64,0x80,
+0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9d,0xf5,
+0x83,0xe0,0xff,0x90,0x9e,0x6a,0xe0,0x6f,0x60,0x3d,0x74,0x44,0x25,0x13,0xf5,0x82,
+0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,0x75,0x1d,0x05,0x80,
+0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x1d,0x03,0x80,0x03,0x75,0x1d,0x01,0x74,
+0x41,0x25,0x13,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,0x74,0x85,0x25,0x13,
+0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,
+0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,
+0x04,0xf0,0x80,0x10,0xe4,0xf5,0x1d,0x74,0xe6,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,
+0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x6a,0xe0,0xff,0x74,0x26,0x25,0x13,0xf5,0x82,0xe4,
+0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x98,0xf5,
+0x83,0xe5,0x1d,0xf0,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x4c,0x12,0x43,0x52,0xe0,
+0xb4,0x01,0x10,0xe4,0xf5,0x1d,0x74,0xe6,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,
+0x83,0xe4,0xf0,0xad,0x1d,0xe1,0xe9,0xec,0x64,0x06,0x60,0x02,0xe1,0xee,0xf5,0x1b,
+0xf5,0x1c,0x90,0x42,0x19,0x93,0xff,0x7e,0x00,0x90,0x9e,0x6d,0xe0,0xfc,0xa3,0xe0,
+0xfd,0x12,0x1f,0x4a,0x90,0x9e,0x6b,0xee,0xf0,0xa3,0xef,0xf0,0x74,0x84,0x25,0x13,
+0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1d,0xe4,0xf5,0x14,0xab,0x18,0xaa,
+0x19,0xa9,0x1a,0x75,0xf0,0x02,0xe5,0x14,0xa4,0xf5,0x82,0x85,0xf0,0x83,0x12,0x42,
+0x95,0xfd,0xac,0xf0,0xe5,0x14,0x90,0x42,0x14,0x93,0xff,0x7e,0x00,0x12,0x1f,0x4a,
+0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xc3,0x90,0x9e,0x6c,0xe0,0x95,
+0x1c,0x90,0x9e,0x6b,0xe0,0x95,0x1b,0x40,0x07,0x05,0x14,0xe5,0x14,0xb4,0x05,0xbd,
+0xe5,0x14,0xc3,0x13,0xf5,0x14,0xe5,0x1d,0xb4,0x01,0x06,0xe5,0x14,0x70,0x46,0x80,
+0x13,0xe5,0x1d,0xb4,0x03,0x15,0xe5,0x14,0x70,0x05,0x75,0x1d,0x03,0x80,0x39,0xe5,
+0x14,0xb4,0x01,0x05,0x75,0x1d,0x01,0x80,0x2f,0x80,0x2a,0xe5,0x1d,0xb4,0x05,0x28,
+0xe5,0x14,0x70,0x05,0x75,0x1d,0x05,0x80,0x0d,0xe5,0x14,0xb4,0x01,0x05,0x75,0x1d,
+0x03,0x80,0x03,0x75,0x1d,0x01,0xd3,0x90,0x9e,0x70,0xe0,0x94,0x03,0x90,0x9e,0x6f,
+0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1d,0xd3,0x90,0x9e,0x70,0xe0,0x94,0x03,0x90,
+0x9e,0x6f,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1d,0x74,0x84,0x25,0x13,0xf5,0x82,
+0xe4,0x34,0x98,0xf5,0x83,0xe5,0x1d,0xf0,0xfd,0xaf,0x13,0x12,0x6e,0x55,0x74,0xe6,
+0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,0x05,0x74,0xe6,0x50,
+0x0e,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,0xf0,0x80,0x0b,0x25,
+0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xab,0x18,0xaa,0x19,0xa9,0x1a,
+0xe4,0xf5,0xf0,0x12,0x42,0xcd,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x02,0xe4,
+0xf5,0xf0,0x12,0x42,0xec,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,0x42,0xec,0x90,0x00,
+0x06,0xe4,0xf5,0xf0,0x12,0x42,0xec,0x90,0x00,0x08,0xe4,0xf5,0xf0,0x12,0x42,0xec,
+0xe5,0x13,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,
+0xf0,0xe5,0x13,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,
+0xa3,0xf0,0xe5,0x13,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,
+0xf0,0xa3,0xf0,0x05,0x13,0xe5,0x13,0xc3,0x94,0x40,0x50,0x03,0x02,0x72,0x3e,0x22,
+0x90,0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,0x0f,0xf0,0xa3,0xe4,
+0xf0,0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe4,0xf0,0x0d,0xbd,
+0x10,0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,0x01,0x04,0xf0,0xe4,0xfd,0x75,0xf0,
+0x0a,0xed,0x90,0x90,0x00,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,
+0x90,0x90,0x02,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,
+0x04,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x06,0x12,
+0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,0x08,0x12,0x43,0x52,
+0xe4,0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0x74,0x13,
+0xf0,0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0x74,0x84,0x2d,
+0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xed,0x25,0xe0,0x24,0x80,0xf5,0x82,
+0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,
+0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc4,0xf5,0x82,
+0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x44,0xf5,0x82,
+0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,
+0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,0x24,0x46,0xf5,0x82,
+0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x86,0x2d,0xf5,0x82,0xe4,0x34,
+0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,
+0xf0,0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x41,0xca,
+0x93,0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x92,0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,
+0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,
+0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4b,0x12,
+0x43,0x52,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x52,0x74,
+0x01,0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0c,0xf0,0x75,
+0xf0,0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x52,0x74,0xff,0xf0,0xa3,0xf0,0x75,0xf0,
+0x09,0xed,0x90,0x96,0x44,0x12,0x43,0x52,0xe4,0xf0,0xa3,0x74,0x0f,0xf0,0x75,0xf0,
+0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x52,0x74,0x13,0xf0,0x75,0xf0,0x09,0xed,0x90,
+0x96,0x49,0x12,0x43,0x52,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,0x0f,0x74,0x84,0x2d,
+0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,0x74,0xa6,0x2d,0xf5,
+0x82,0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,0x40,0x60,0x02,0x01,
+0xbe,0x22,0x8f,0x13,0xef,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,
+0xf5,0x15,0x8f,0x16,0xe5,0x13,0x75,0xf0,0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,
+0xf0,0x75,0x17,0x01,0xf5,0x18,0x89,0x19,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x46,
+0x12,0x43,0x52,0xaf,0x82,0x85,0x83,0x1a,0x8f,0x1b,0xe5,0x13,0x75,0xf0,0x09,0xa4,
+0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0x75,0x1c,0x01,0xf5,0x1d,0x89,0x1e,0x74,0x82,
+0x25,0x13,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x12,0x43,0x87,0x7a,0xe2,0x00,
+0x7a,0xf7,0x01,0x7b,0x0c,0x02,0x7b,0x21,0x03,0x7b,0x4a,0x04,0x7b,0x5f,0x05,0x7b,
+0x74,0x06,0x7b,0x9a,0x0c,0x7b,0xc7,0x0d,0x7b,0xf4,0x0e,0x7c,0x21,0x0f,0x00,0x00,
+0x7c,0x55,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,
+0xf0,0xf0,0xa3,0x74,0x15,0x80,0x3c,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,
+0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x10,0x80,0x27,0xe5,0x13,0x25,0xe0,
+0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,
+0x12,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,
+0xf0,0xa3,0xe4,0xf0,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,
+0x83,0x74,0x0f,0xf0,0xa3,0x74,0x8f,0xf0,0x81,0x55,0xe5,0x13,0x25,0xe0,0x24,0xc6,
+0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,
+0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,
+0x74,0xf0,0x80,0x12,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
+0x83,0xe4,0xf0,0xa3,0x74,0x0d,0xf0,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,
+0x34,0x95,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x81,0x55,0x90,0x04,0x47,0xe0,0xab,0x17,
+0xaa,0x18,0xa9,0x19,0x12,0x42,0x20,0x90,0x04,0x46,0xe0,0xab,0x17,0xaa,0x18,0xa9,
+0x19,0x90,0x00,0x01,0x12,0x42,0x32,0x90,0x04,0x45,0xe0,0x85,0x16,0x82,0x85,0x15,
+0x83,0xf0,0x90,0x04,0x44,0x81,0x4c,0x90,0x04,0x4b,0xe0,0xab,0x17,0xaa,0x18,0xa9,
+0x19,0x12,0x42,0x20,0x90,0x04,0x4a,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x90,0x00,
+0x01,0x12,0x42,0x32,0x90,0x04,0x49,0xe0,0x85,0x16,0x82,0x85,0x15,0x83,0xf0,0x90,
+0x04,0x48,0x80,0x58,0x90,0x04,0x4f,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x12,0x42,
+0x20,0x90,0x04,0x4e,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x90,0x00,0x01,0x12,0x42,
+0x32,0x90,0x04,0x4d,0xe0,0x85,0x16,0x82,0x85,0x15,0x83,0xf0,0x90,0x04,0x4c,0x80,
+0x2b,0x90,0x04,0x53,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x12,0x42,0x20,0x90,0x04,
+0x52,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x90,0x00,0x01,0x12,0x42,0x32,0x90,0x04,
+0x51,0xe0,0x85,0x16,0x82,0x85,0x15,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x16,0x82,
+0x85,0x15,0x83,0xa3,0xf0,0xab,0x17,0xaa,0x18,0xa9,0x19,0xc0,0x03,0xc0,0x02,0xc0,
+0x01,0x12,0x1f,0x04,0xff,0xab,0x1c,0xaa,0x1d,0xa9,0x1e,0x12,0x1f,0x04,0x5f,0xd0,
+0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x20,0xab,0x17,0xe5,0x19,0x24,0x01,0xf9,0xe4,
+0x35,0x18,0xfa,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x1f,0x04,0xff,0xab,0x1c,0xaa,
+0x1d,0xa9,0x1e,0x90,0x00,0x01,0x12,0x1f,0x1d,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,
+0x12,0x42,0x20,0x85,0x16,0x82,0x85,0x15,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,
+0x1b,0x82,0x85,0x1a,0x83,0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x16,
+0x82,0x85,0x15,0x83,0xa3,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x1b,0x82,0x85,0x1a,
+0x83,0xa3,0xe0,0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x13,0x25,0xe0,0x24,
+0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,
+0x14,0x0b,0x74,0x01,0x7e,0x00,0xa8,0x14,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,
+0xd8,0xf9,0xff,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
+0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x14,0x24,0x10,0x80,0x5d,0x15,
+0x14,0xe5,0x14,0xc3,0x94,0x00,0x50,0xca,0x80,0x56,0xe5,0x13,0x25,0xe0,0x24,0xc6,
+0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x14,
+0x0f,0x74,0x01,0x7e,0x00,0xa8,0x14,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
+0xf9,0xff,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,
+0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x80,0xe5,0x14,0xf0,0x80,0x10,
+0x15,0x14,0xe5,0x14,0xc3,0x94,0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x80,0xf0,
+0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,
+0xe0,0x4e,0x60,0x3b,0xe4,0xf5,0x14,0x74,0x01,0x7e,0x00,0xa8,0x14,0x08,0x80,0x05,
+0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,
+0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,
+0x81,0xe5,0x14,0xf0,0x80,0x5b,0x05,0x14,0xe5,0x14,0xb4,0x10,0xca,0x80,0x52,0xe5,
+0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,
+0x4e,0x60,0x39,0xe4,0xf5,0x14,0x74,0x01,0x7e,0x00,0xa8,0x14,0x08,0x80,0x05,0xc3,
+0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,
+0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x14,0x24,
+0x10,0x80,0x0a,0x05,0x14,0xe5,0x14,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x81,
+0xf0,0x90,0x9e,0x80,0xe0,0xff,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x48,0x12,0x43,
+0x52,0xef,0xf0,0x90,0x9e,0x81,0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x49,
+0x12,0x43,0x52,0xee,0xf0,0x74,0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
+0xe0,0xd3,0x9f,0x40,0x06,0x90,0x9e,0x80,0x12,0x6d,0x2c,0x74,0x84,0x25,0x13,0xf5,
+0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xff,0x90,0x9e,0x81,0xe0,0xfe,0xef,0xc3,0x9e,
+0x50,0x03,0x12,0x6d,0x2c,0x90,0x9e,0x80,0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,
+0x96,0x43,0x74,0x03,0xf0,0x22,0xef,0xd3,0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,
+0x02,0xf0,0x22,0xef,0xd3,0x94,0x03,0x40,0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,
+0xe4,0x90,0x96,0x43,0xf0,0x22,0x90,0x9e,0x74,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,
+0x43,0x7e,0x90,0x9e,0x76,0x12,0x43,0x5e,0x90,0x00,0x03,0x12,0x1f,0x1d,0x54,0xf0,
+0xc4,0x54,0x0f,0x90,0x9e,0x79,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0x54,0x40,0xc4,
+0x13,0x13,0x54,0x03,0x90,0x9e,0x7a,0xf0,0x90,0x9e,0x74,0xe0,0xff,0x75,0xf0,0x09,
+0x90,0x96,0x46,0x12,0x43,0x52,0xad,0x82,0xac,0x83,0x90,0x9e,0x7b,0xec,0xf0,0xa3,
+0xed,0xf0,0xef,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,
+0x01,0xa3,0x12,0x43,0x7e,0x90,0x9e,0x76,0x12,0x43,0x5e,0x90,0x00,0x03,0x12,0x1f,
+0x1d,0x54,0x0f,0xff,0x90,0x9e,0x7d,0x12,0x43,0x5e,0xef,0x12,0x42,0x20,0x90,0x9e,
+0x76,0x12,0x43,0x5e,0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,0x90,0x9e,0x7d,0x12,0x43,
+0x5e,0x90,0x00,0x01,0xef,0x12,0x42,0x32,0x90,0x9e,0x76,0x12,0x43,0x5e,0x90,0x00,
+0x01,0x12,0x1f,0x1d,0xff,0x90,0x9e,0x7b,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,
+0x83,0xef,0xf0,0x12,0x1f,0x04,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x79,0xe0,
+0xfe,0x90,0x9e,0x74,0xe0,0xff,0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,
+0xf0,0x90,0x9e,0x75,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x52,
+0xee,0xf0,0x75,0xf0,0x09,0xef,0x90,0x96,0x4b,0x12,0x43,0x52,0x74,0x01,0xf0,0x90,
+0x9e,0x7a,0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x52,0xee,0xf0,
+0x41,0x62,0x90,0x00,0x04,0x12,0x1f,0x1d,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,
+0x13,0x54,0x07,0xfd,0xaf,0x06,0xc1,0xa6,0x90,0x00,0x04,0x12,0x1f,0x1d,0xff,0x54,
+0x3f,0xfe,0xef,0x54,0x80,0xc4,0x13,0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0xc1,0xa6,
+0x12,0x1f,0x04,0xf5,0x13,0xc3,0x94,0x40,0x50,0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,
+0xff,0x74,0x44,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xef,0xf0,0x22,0xe5,
+0x13,0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0x96,0x42,0xf0,0x22,0x12,
+0x1f,0x04,0x90,0x95,0x01,0xf0,0x22,0x90,0x9e,0x71,0x12,0x43,0x7e,0xef,0x12,0x43,
+0x87,0x80,0x93,0x01,0x80,0x9b,0x02,0x80,0xbb,0x03,0x80,0xc4,0x05,0x80,0xcd,0x06,
+0x81,0xf7,0x07,0x80,0xd6,0x08,0x80,0xdf,0x10,0x80,0xe8,0x11,0x80,0xf0,0x12,0x80,
+0xf8,0x13,0x81,0x00,0x14,0x81,0x09,0x15,0x81,0x12,0x16,0x81,0x1c,0x17,0x81,0x26,
+0x18,0x81,0x30,0x19,0x81,0xc6,0x1a,0x81,0xce,0x1b,0x81,0xd7,0x1c,0x81,0x39,0x1d,
+0x81,0x43,0x1e,0x81,0x4e,0x21,0x81,0x56,0x22,0x81,0x5e,0x23,0x81,0x66,0x24,0x81,
+0x6e,0x25,0x81,0x76,0x26,0x81,0x7e,0x27,0x81,0x86,0x28,0x81,0x8e,0x29,0x80,0xa3,
+0x2d,0x80,0xab,0x2e,0x81,0x96,0x2f,0x81,0xe0,0x30,0x81,0xe8,0x31,0x81,0xa6,0x32,
+0x81,0x9e,0x33,0x80,0xb3,0x34,0x81,0xae,0x36,0x81,0xb6,0x37,0x81,0xbe,0x38,0x00,
+0x00,0x81,0xf0,0x90,0x9e,0x71,0x12,0x43,0x5e,0xc1,0xe1,0x90,0x9e,0x71,0x12,0x43,
+0x5e,0x81,0x7c,0x90,0x9e,0x71,0x12,0x43,0x5e,0xe1,0xe9,0x90,0x9e,0x71,0x12,0x43,
+0x5e,0xe1,0x35,0x90,0x9e,0x71,0x12,0x43,0x5e,0x81,0xae,0x90,0x9e,0x71,0x12,0x43,
+0x5e,0x02,0x88,0x31,0x90,0x9e,0x71,0x12,0x43,0x5e,0x02,0x7f,0xd0,0x90,0x9e,0x71,
+0x12,0x43,0x5e,0x02,0x7f,0xa2,0x90,0x9e,0x71,0x12,0x43,0x5e,0x02,0x64,0xb0,0x90,
+0x9e,0x71,0x12,0x43,0x5e,0x02,0x88,0x79,0x90,0x9e,0x71,0x12,0x43,0x5e,0xa1,0x08,
+0x90,0x9e,0x71,0x12,0x43,0x5e,0x81,0xc9,0x90,0x9e,0x71,0x12,0x43,0x5e,0x81,0x94,
+0x90,0x9e,0x71,0x12,0x43,0x5e,0x02,0x88,0xc0,0x90,0x9e,0x71,0x12,0x43,0x5e,0x02,
+0x89,0x98,0x90,0x9e,0x71,0x12,0x43,0x5e,0x7f,0x01,0x80,0x2f,0x90,0x9e,0x71,0x12,
+0x43,0x5e,0x7f,0x02,0x80,0x25,0x90,0x9e,0x71,0x12,0x43,0x5e,0x7f,0x03,0x80,0x1b,
+0x90,0x9e,0x71,0x12,0x43,0x5e,0x02,0x8b,0x1d,0x90,0x9e,0x71,0x12,0x43,0x5e,0xe4,
+0xff,0x80,0x08,0x90,0x9e,0x71,0x12,0x43,0x5e,0x7f,0x04,0x02,0x8a,0x3b,0x90,0x9e,
+0x71,0x12,0x43,0x5e,0xa1,0x2f,0x90,0x9e,0x71,0x12,0x43,0x5e,0xa1,0x56,0x90,0x9e,
+0x71,0x12,0x43,0x5e,0xa1,0x7d,0x90,0x9e,0x71,0x12,0x43,0x5e,0xa1,0xa4,0x90,0x9e,
+0x71,0x12,0x43,0x5e,0xa1,0xcb,0x90,0x9e,0x71,0x12,0x43,0x5e,0xa1,0xf2,0x90,0x9e,
+0x71,0x12,0x43,0x5e,0xe1,0x63,0x90,0x9e,0x71,0x12,0x43,0x5e,0xc1,0x19,0x90,0x9e,
+0x71,0x12,0x43,0x5e,0xc1,0x67,0x90,0x9e,0x71,0x12,0x43,0x5e,0xe1,0x9a,0x90,0x9e,
+0x71,0x12,0x43,0x5e,0xc1,0x8f,0x90,0x9e,0x71,0x12,0x43,0x5e,0xc1,0xb8,0x90,0x9e,
+0x71,0x12,0x43,0x5e,0x80,0x42,0x90,0x9e,0x71,0x12,0x43,0x5e,0x81,0x82,0x90,0x9e,
+0x71,0x12,0x43,0x5e,0xc1,0x40,0x90,0x9e,0x71,0x12,0x43,0x5e,0x61,0x77,0x90,0x9e,
+0x71,0x12,0x43,0x5e,0x02,0x7f,0xff,0x90,0x9e,0x71,0x12,0x43,0x5e,0x02,0x7f,0xb8,
+0x90,0x9e,0x71,0x12,0x43,0x5e,0x81,0xe8,0x90,0x9e,0x71,0x12,0x43,0x5e,0xe1,0x0b,
+0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,0x12,0x1f,0x04,0x60,0x44,0x90,0xfd,0x58,
+0xe0,0x20,0xe0,0x3d,0x90,0xfd,0x50,0x74,0x0a,0xf0,0xa3,0x74,0x06,0xf0,0x90,0x00,
+0x01,0x12,0x1f,0x1d,0x90,0xfd,0x52,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0xfd,
+0x53,0xf0,0xa3,0xe4,0xf0,0xa3,0x74,0xc0,0xf0,0xa3,0x74,0x10,0xf0,0xa3,0x74,0x80,
+0xf0,0x90,0xfd,0x50,0x74,0x0a,0xf0,0xa3,0x74,0x06,0xf0,0x90,0xfd,0x58,0x74,0x01,
+0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfe,0x90,0x00,0x01,0x12,0x1f,0x1d,0x7c,0x00,
+0x24,0x00,0xff,0xec,0x3e,0xfe,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0xfc,0x74,
+0x20,0x2f,0xff,0xe4,0x3e,0xfe,0x90,0x9e,0x74,0xef,0xf0,0xee,0xf9,0x90,0x02,0x09,
+0xe0,0xc3,0x13,0x90,0xfd,0x10,0xf0,0xec,0xc3,0x99,0x50,0x43,0xec,0x70,0x04,0x7d,
+0x04,0x80,0x02,0xe4,0xfd,0xed,0xc3,0x94,0x20,0x50,0x07,0xaf,0x05,0x51,0xcb,0x0d,
+0x80,0xf3,0x0c,0x90,0xfd,0x10,0xe0,0x04,0xf0,0xec,0xb5,0x01,0xda,0xe4,0xfd,0xed,
+0x75,0xf0,0x08,0xa4,0xff,0x90,0x9e,0x74,0xe0,0xfb,0xc3,0xef,0x9b,0x74,0x80,0xf8,
+0x65,0xf0,0x98,0x50,0x07,0xaf,0x05,0x51,0xcb,0x0d,0x80,0xe3,0x0c,0x80,0xb8,0x90,
+0x00,0x81,0xe0,0x44,0x80,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0x90,0xfd,0x58,0xe0,0x30,
+0xe0,0x08,0x90,0x01,0xb8,0xe0,0x04,0xf0,0x80,0xf1,0xef,0x75,0xf0,0x08,0xa4,0x24,
+0x00,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x50,0xf0,0xef,0x75,0xf0,
+0x08,0xa4,0x24,0x01,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x51,0xf0,
+0xef,0x75,0xf0,0x08,0xa4,0x24,0x02,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,
+0xfd,0x52,0xf0,0xef,0x75,0xf0,0x08,0xa4,0x24,0x03,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
+0x83,0xe0,0x90,0xfd,0x53,0xf0,0xef,0x75,0xf0,0x08,0xa4,0x24,0x04,0xf5,0x82,0xe4,
+0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x54,0xf0,0xef,0x75,0xf0,0x08,0xa4,0x24,0x05,
+0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x55,0xf0,0xef,0x75,0xf0,0x08,
+0xa4,0x24,0x06,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x56,0xf0,0xef,
+0x75,0xf0,0x08,0xa4,0x24,0x07,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,
+0x57,0xf0,0xa3,0x74,0x01,0xf0,0x22,0x90,0x9e,0x74,0x12,0x43,0x7e,0x12,0x1f,0x04,
+0x20,0xe0,0x1d,0x7d,0x08,0xe4,0xff,0x12,0x3a,0x54,0x90,0x06,0x90,0xe4,0xf0,0x12,
+0x8d,0xfb,0x90,0x01,0x3f,0x74,0x04,0xf0,0x90,0x02,0x86,0xe0,0x54,0xfb,0xf0,0x22,
+0x90,0x9e,0x74,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0x54,0x01,0xfe,0x90,0x9e,0xbc,
+0xe0,0x54,0xfe,0x4e,0xf0,0xef,0x54,0x04,0xff,0xe0,0x54,0xfb,0x4f,0xf0,0x12,0x1f,
+0x04,0xff,0x54,0x02,0xfe,0x90,0x9e,0xbc,0xe0,0x54,0xfd,0x4e,0xf0,0xef,0x54,0x08,
+0xff,0xe0,0x54,0xf7,0x4f,0xf0,0x12,0x1f,0x04,0xff,0x54,0x10,0xfe,0x90,0x9e,0xbc,
+0xe0,0x54,0xef,0x4e,0xf0,0xef,0x54,0x20,0xff,0xe0,0x54,0xdf,0x4f,0xf0,0x12,0x1f,
+0x04,0xff,0x54,0x40,0xfe,0x90,0x9e,0xbc,0xe0,0x54,0xbf,0x4e,0xf0,0xef,0x54,0x80,
+0xff,0xe0,0x54,0x7f,0x4f,0xf0,0x90,0x00,0x81,0xe4,0xf0,0x90,0x9e,0xbf,0xe0,0x54,
+0xfe,0xf0,0x90,0x06,0x09,0xe0,0x54,0xfe,0xf0,0x12,0x1f,0x04,0xc3,0x13,0x30,0xe0,
+0x07,0x90,0x06,0x90,0xe0,0x44,0x02,0xf0,0x90,0x9e,0x74,0x12,0x43,0x5e,0x12,0x1f,
+0x04,0xff,0x13,0x13,0x54,0x3f,0x30,0xe0,0x07,0x90,0x06,0x90,0xe0,0x44,0x04,0xf0,
+0xef,0x13,0x13,0x13,0x54,0x1f,0x30,0xe0,0x07,0x90,0x06,0x90,0xe0,0x44,0x08,0xf0,
+0x90,0x9e,0x9b,0xe0,0xb4,0x02,0x14,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x9e,0xbd,
+0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0x9e,0xbe,0xf0,0x90,0x02,0x86,0xe0,0x44,
+0x04,0xf0,0x43,0x57,0x04,0x7d,0x08,0xe4,0xff,0x02,0x3a,0xc5,0x12,0x1f,0x04,0xf5,
+0x67,0x22,0x12,0x1f,0x04,0x90,0xfe,0x10,0x60,0x05,0xe0,0x44,0x01,0xf0,0x22,0xe0,
+0x54,0xfe,0xf0,0x22,0x12,0x1f,0x04,0x30,0xe0,0x0e,0x90,0x07,0x78,0xe0,0x54,0xfd,
+0xf0,0x90,0x9e,0x50,0x74,0x01,0xf0,0x22,0xe4,0x90,0x9e,0x50,0xf0,0x22,0x12,0x1f,
+0x04,0x30,0xe0,0x07,0x54,0x01,0x90,0x9e,0xb2,0xf0,0x22,0x7d,0x10,0x7f,0x03,0x12,
+0x3a,0x71,0x7d,0x01,0x7f,0x02,0x02,0x3a,0xc5,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x17,
+0x90,0xfd,0x50,0x74,0x0d,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,
+0xf0,0x90,0xfd,0x58,0x74,0x01,0xf0,0x22,0x12,0x1f,0x04,0xff,0x54,0x01,0xfe,0x90,
+0x9e,0xb9,0xe0,0x54,0xfe,0x4e,0xf0,0xef,0xc3,0x13,0x30,0xe0,0x0a,0x90,0x00,0x01,
+0x12,0x1f,0x1d,0x90,0x9e,0xba,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,
+0xfd,0x50,0x74,0x0c,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,
+0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0xfd,0x58,0x04,0xf0,0x22,0x90,
+0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x17,0xf0,0xa3,0x74,0x01,0xf0,
+0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
+0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,
+0x74,0x18,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,
+0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,
+0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x19,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,
+0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
+0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x1a,
+0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,
+0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,
+0xe0,0x1f,0x90,0xfd,0x50,0x74,0x1b,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,
+0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,
+0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x1c,0xf0,0xa3,
+0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,
+0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,
+0x90,0xfd,0x50,0x74,0x1e,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,
+0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,
+0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x23,0xf0,0xa3,0x74,0x01,
+0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
+0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x12,0x1f,0x04,0xff,0xe4,0xfc,0xfd,0xfe,0x78,
+0x18,0x12,0x1f,0xc4,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x4a,0x12,
+0x43,0x46,0xec,0x54,0x03,0xfc,0x12,0x43,0x19,0x90,0x9e,0x46,0x02,0x1f,0xd7,0x90,
+0xfd,0x58,0xe0,0x20,0xe0,0x21,0x90,0xfd,0x50,0x74,0x1f,0xf0,0xa3,0x74,0x01,0xf0,
+0x12,0x1f,0x04,0x54,0x01,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,
+0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x21,0x90,
+0xfd,0x50,0x74,0x20,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x54,0x01,0x90,0xfd,
+0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,
+0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x9e,
+0xb0,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0x9e,0xa0,0xf0,0x12,0x1f,0x04,0x65,
+0x6a,0x60,0x03,0x12,0x4d,0xa5,0xd0,0xd0,0x92,0xaf,0x22,0x12,0x1f,0x04,0xff,0x54,
+0x01,0xfe,0x90,0x9e,0xb4,0xe0,0x54,0xfe,0x4e,0xf0,0xef,0xc3,0x13,0x30,0xe0,0x14,
+0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x9e,0xb5,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,
+0x90,0x9e,0xb6,0xf0,0x22,0x12,0x1f,0x04,0x30,0xe0,0x18,0xc3,0x13,0x54,0x7f,0x90,
+0x9e,0xab,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0xff,0x90,0x9e,0xa9,0xe4,0xf0,0xa3,
+0xef,0xf0,0x22,0x90,0x9e,0xab,0x74,0x07,0xf0,0x90,0x9e,0xa9,0xe4,0xf0,0xa3,0x74,
+0x0b,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x2f,0x90,0xfd,0x50,0x74,0x1d,0xf0,
+0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0x90,0x00,0x01,0x12,0x1f,
+0x1d,0x90,0xfd,0x53,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0xfd,0x54,0xf0,0xa3,
+0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,
+0x3b,0x12,0x1f,0x04,0x90,0xfd,0x50,0xf0,0xa3,0x74,0x04,0xf0,0x90,0x00,0x01,0x12,
+0x1f,0x1d,0x90,0xfd,0x52,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0xfd,0x53,0xf0,
+0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0xfd,0x54,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,
+0x90,0xfd,0x55,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0xe4,0x90,0x9d,
+0xa8,0xf0,0xa3,0xf0,0x90,0x01,0xaf,0xf0,0x22,0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,
+0x30,0xe0,0x25,0x12,0x1f,0x04,0x90,0x9e,0xa7,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,
+0x90,0x9e,0xa8,0xf0,0xef,0xc3,0x13,0x54,0x7f,0x90,0x9e,0xa6,0xf0,0x90,0x00,0x03,
+0x12,0x1f,0x1d,0x90,0x9e,0xac,0xf0,0x22,0x90,0x9e,0xa7,0x74,0x01,0xf0,0x90,0x9e,
+0xa8,0x74,0x03,0xf0,0x90,0x9e,0xa6,0x74,0x14,0xf0,0x90,0x9e,0xac,0x74,0x05,0xf0,
+0x22,0x90,0x02,0x09,0xe0,0xfd,0x12,0x1f,0x04,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,
+0x95,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0xff,0xed,0x2f,0x90,0x9e,0x96,0xf0,0x90,
+0x00,0x02,0x12,0x1f,0x1d,0xff,0xed,0x2f,0x90,0x9e,0x97,0xf0,0x90,0x00,0x03,0x12,
+0x1f,0x1d,0xff,0xed,0x2f,0x90,0x9e,0x98,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0xff,
+0xae,0x05,0xed,0x2f,0x90,0x9e,0x99,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x3f,
+0x90,0xfd,0x50,0x74,0x0b,0xf0,0xa3,0x74,0x05,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,
+0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0xfd,0x53,0xf0,0x90,0x00,0x02,0x12,0x1f,
+0x1d,0x90,0xfd,0x54,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0xfd,0x55,0xf0,0x90,
+0x00,0x04,0x12,0x1f,0x1d,0x90,0xfd,0x56,0xf0,0x90,0xfd,0x58,0x74,0x01,0xf0,0x22,
+0x90,0x07,0x78,0xe0,0x44,0x0c,0xf0,0x12,0x1f,0x04,0xff,0x30,0xe0,0x75,0x90,0xfd,
+0x58,0xe0,0x20,0xe0,0x10,0x90,0xfd,0x50,0x74,0x14,0xf0,0xa3,0x74,0x01,0xf0,0xa3,
+0xf0,0x90,0xfd,0x58,0xf0,0x90,0x9e,0x43,0xe0,0x44,0x08,0xf0,0xef,0x30,0xe1,0x0d,
+0xe0,0x44,0x01,0xf0,0x90,0x07,0x78,0xe0,0x54,0xfd,0xf0,0x80,0x07,0x90,0x07,0x78,
+0xe0,0x44,0x02,0xf0,0x12,0x1f,0x04,0xff,0x30,0xe2,0x1e,0x90,0x9e,0x43,0xe0,0x44,
+0x04,0xf0,0x90,0x04,0x26,0xe0,0x44,0x40,0xf0,0x90,0x07,0x78,0xe0,0x54,0xef,0xf0,
+0x90,0x07,0x83,0xe0,0x44,0x40,0xf0,0x80,0x07,0x90,0x07,0x78,0xe0,0x44,0x10,0xf0,
+0xef,0x30,0xe4,0x63,0x90,0x9e,0x43,0xe0,0x44,0x02,0xf0,0x90,0x04,0x26,0xe0,0x44,
+0x80,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x12,0x90,0xfd,0x50,0x74,0x14,0xf0,
+0xa3,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0x90,0xfd,0x58,0x04,0xf0,0x90,0x9e,0x43,0xe0,
+0x54,0xfe,0xf0,0xe0,0x54,0xfb,0xf0,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xf7,0xf0,0x90,
+0x07,0x78,0xe0,0x54,0xe3,0xf0,0x90,0x07,0x83,0xe0,0x54,0x3f,0xf0,0x90,0x04,0x26,
+0xe0,0x54,0x3f,0xf0,0x90,0x9e,0x4a,0x12,0x43,0x46,0x90,0x81,0x57,0x12,0x1f,0xd7,
+0x7f,0x80,0x7e,0x08,0x12,0x34,0x55,0x22,0x12,0x1f,0x04,0xff,0x30,0xe0,0x4b,0x90,
+0x07,0x78,0xe0,0x44,0x02,0xf0,0x90,0x07,0x83,0xe0,0x44,0x02,0xf0,0x90,0x07,0x78,
+0xe0,0x44,0x80,0x54,0xbf,0xf0,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1a,0x90,0xfd,0x50,
+0x74,0x1a,0xf0,0xa3,0x74,0x01,0xf0,0xa3,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,
+0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0xef,0x30,0xe1,0x5f,0x90,0x9e,0x43,0xe0,0x44,
+0x02,0xf0,0x90,0x07,0x95,0xe0,0x44,0x06,0xf0,0x22,0x90,0x9e,0x43,0xe0,0x54,0xfd,
+0xf0,0x90,0x07,0x78,0xe0,0x54,0x3f,0xf0,0x90,0x07,0x83,0xe0,0x54,0xfd,0xf0,0x90,
+0x07,0x95,0xe0,0x54,0xf9,0xf0,0x90,0x9e,0x4a,0x12,0x43,0x46,0x90,0x81,0x57,0x12,
+0x1f,0xd7,0x7f,0x80,0x7e,0x08,0x12,0x34,0x55,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1a,
+0x90,0xfd,0x50,0x74,0x1a,0xf0,0xa3,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,
+0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0xef,0x70,0x21,0x12,0x1f,
+0x04,0x30,0xe0,0x14,0x90,0x00,0x40,0xe0,0x44,0x20,0xf0,0xe0,0x54,0x3f,0xf0,0x90,
+0x07,0x78,0xe0,0x44,0x01,0xf0,0x80,0x07,0x90,0x07,0x78,0xe0,0x54,0xfe,0xf0,0xef,
+0x64,0x01,0x70,0x6a,0x12,0x1f,0x04,0x90,0x00,0x01,0x30,0xe0,0x2e,0x12,0x1f,0x1d,
+0x90,0x06,0xc0,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0x06,0xc1,0xf0,0x90,0x00,
+0x03,0x12,0x1f,0x1d,0x90,0x06,0xc2,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0x90,0x06,
+0xc3,0xf0,0x90,0x06,0xcc,0xe0,0x54,0xfe,0xf0,0x80,0x2c,0x12,0x1f,0x1d,0x90,0x06,
+0xc4,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0x06,0xc5,0xf0,0x90,0x00,0x03,0x12,
+0x1f,0x1d,0x90,0x06,0xc6,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0x90,0x06,0xc7,0xf0,
+0x90,0x06,0xcc,0xe0,0x44,0x01,0xf0,0x90,0x06,0xcc,0xe0,0x44,0x02,0xf0,0xef,0xb4,
+0x02,0x11,0x12,0x1f,0x04,0x90,0x06,0xc8,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,
+0x06,0xc9,0xf0,0xef,0xb4,0x03,0x11,0x12,0x1f,0x04,0x90,0x06,0xca,0xf0,0x90,0x00,
+0x01,0x12,0x1f,0x1d,0x90,0x06,0xcb,0xf0,0xef,0x64,0x04,0x70,0x1f,0x12,0x1f,0x04,
+0xff,0x90,0x07,0x83,0x30,0xe0,0x06,0xe0,0x44,0x10,0xf0,0x80,0x04,0xe0,0x54,0x6f,
+0xf0,0xef,0x30,0xe1,0x07,0x90,0x07,0x83,0xe0,0x44,0x80,0xf0,0x22,0x90,0x9e,0x74,
+0x12,0x43,0x7e,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x37,0x90,0xfd,0x50,0x74,0x11,0xf0,
+0xa3,0x74,0x03,0xf0,0x90,0x9e,0x74,0x12,0x43,0x5e,0x12,0x1f,0x04,0x90,0xfd,0x52,
+0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0xfd,0x53,0xf0,0x90,0x00,0x02,0x12,0x1f,
+0x1d,0x90,0xfd,0x54,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x80,
+0x16,0x43,0x57,0x01,0x78,0xaa,0x7c,0x9d,0x7d,0x01,0x90,0x9e,0x74,0x12,0x43,0x5e,
+0x7e,0x00,0x7f,0x03,0x12,0x1e,0xde,0x90,0x9e,0x74,0x12,0x43,0x5e,0x12,0x1f,0x04,
+0x60,0x07,0x90,0x9e,0x51,0x74,0x01,0xf0,0x22,0xe4,0x90,0x9e,0x51,0xf0,0x22,0x90,
+0x05,0x22,0x74,0xff,0xf0,0x90,0x05,0x27,0xe0,0x44,0x40,0xf0,0x90,0x9e,0xd8,0x74,
+0x04,0xf0,0x22,0x12,0x67,0x9e,0x90,0x9e,0xd8,0x74,0x04,0xf0,0x22,0x90,0x05,0x22,
+0x74,0xff,0xf0,0x90,0x9e,0xd2,0x74,0x05,0xf0,0x22,0x90,0x05,0x22,0x74,0xff,0xf0,
+0x90,0x9e,0xd2,0x74,0x02,0xf0,0x22,0x90,0x05,0x27,0xe0,0x54,0xbf,0xf0,0x90,0x05,
+0x22,0x74,0x6f,0xf0,0x90,0x9e,0xd2,0x74,0x06,0xf0,0x22,0x90,0x01,0x57,0xe0,0x60,
+0x3c,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0xb1,0xe0,
+0x60,0x07,0xe4,0xf0,0x53,0x6b,0xfd,0x80,0x24,0x90,0x9e,0xa2,0xe0,0x04,0xf0,0x53,
+0x6b,0xef,0x90,0x9e,0xa7,0xe0,0xff,0x90,0x9e,0xa2,0xe0,0xd3,0x9f,0x40,0x0e,0xe5,
+0x67,0xb4,0x01,0x09,0x90,0x9e,0xa3,0xe0,0x70,0x03,0xe0,0x04,0xf0,0x90,0x01,0x5b,
+0xe0,0x60,0x10,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0xe4,0x90,
+0x9e,0xae,0xf0,0x90,0x01,0x5f,0xe0,0x60,0x10,0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,
+0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0xad,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,
+0xd0,0x90,0x9f,0x19,0xef,0xf0,0xd3,0x94,0x07,0x50,0x47,0xe0,0xff,0x74,0x01,0xa8,
+0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,0x5f,0xf0,
+0x12,0x4e,0x94,0x90,0x9f,0x19,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,
+0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,0xe4,0xfe,
+0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,
+0x80,0x4c,0x90,0x9f,0x19,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
+0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x62,0xe0,0x5f,0xf0,0x12,0x4e,
+0x94,0x90,0x9f,0x19,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,0x05,0xc3,
+0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x60,0xe0,0xfb,0xe4,0xfe,0xef,0x5b,
+0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,0xd0,0xd0,
+0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9f,0x11,0xed,0xf0,0x90,
+0x9f,0x10,0xef,0xf0,0xd3,0x94,0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,0x9f,0x10,
+0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,
+0x00,0x47,0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9f,0x10,0xe0,0xff,0x74,0x01,0xa8,0x07,
+0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,0x12,0x4e,
+0x94,0x90,0x9f,0x10,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,
+0xfc,0xf4,0xff,0x90,0x00,0x46,0x80,0x67,0x90,0x9f,0x10,0xe0,0x24,0xf8,0xf0,0xa3,
+0xe0,0x70,0x1a,0x90,0x9f,0x10,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,
+0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x63,0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9f,0x10,
+0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,
+0x63,0xe0,0x4f,0xf0,0x12,0x4e,0x94,0x90,0x9f,0x10,0xe0,0xff,0x74,0x01,0xa8,0x07,
+0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x12,0x4e,0x8c,0x90,0x9f,0x10,0xe0,0xff,0x74,
+0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x62,0xe0,
+0x5f,0xf0,0x12,0x4e,0x94,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0xb4,0xe0,0x54,0xfe,
+0xf0,0xe4,0x90,0x9e,0xb7,0xf0,0xa3,0xf0,0x90,0x9e,0xb5,0x74,0x03,0xf0,0xa3,0xf0,
+0x22,0xe4,0x90,0x9e,0xbb,0xf0,0x90,0x9e,0xb9,0xe0,0x54,0x7f,0xf0,0xa3,0x74,0x0a,
+0xf0,0x22,0x90,0x9e,0xb9,0xe0,0x54,0xfe,0xf0,0x80,0xe6,0x90,0x9e,0xbc,0xe0,0x54,
+0xfe,0xf0,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xfb,0xf0,0xe0,0x54,0xf7,0xf0,0xe0,0x54,
+0xef,0xf0,0xe0,0x54,0xdf,0xf0,0xe0,0x54,0xbf,0xf0,0xe0,0x54,0x7f,0xf0,0xe4,0xa3,
+0xf0,0xa3,0xf0,0xa3,0xe0,0x54,0xfe,0xf0,0xe0,0x54,0xfd,0xf0,0x90,0x01,0x17,0xe0,
+0xfe,0x90,0x01,0x16,0xe0,0x7c,0x00,0x24,0x00,0xff,0xec,0x3e,0x90,0x9e,0xc0,0xf0,
+0xa3,0xef,0xf0,0x90,0x01,0x04,0xe0,0x54,0x0f,0x90,0x9e,0x77,0xf0,0xe0,0xff,0x74,
+0x40,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0x90,
+0x9e,0xc3,0xf0,0xee,0x90,0x9e,0xc2,0xf0,0x22,0x75,0xe8,0x07,0x90,0xfd,0x68,0x74,
+0x02,0xf0,0x90,0x9e,0x43,0xe0,0x54,0xfe,0xf0,0x54,0xfb,0xf0,0x54,0xfd,0xf0,0x54,
+0xf7,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0x12,0x1f,0xe3,0x00,0x00,0x00,0x00,0x7f,
+0x80,0x7e,0x08,0x12,0x2c,0x87,0x90,0x9e,0x4a,0x12,0x1f,0xd7,0x90,0x00,0x2e,0xe0,
+0x90,0x9e,0x4e,0xf0,0x90,0x00,0x2d,0xe0,0x90,0x9e,0x4f,0xf0,0xe4,0xa3,0xf0,0xa3,
+0xf0,0x90,0x04,0x26,0xe0,0x44,0x10,0xf0,0x90,0x07,0x83,0xe4,0xf0,0x90,0x07,0x78,
+0x74,0x03,0xf0,0x7d,0x04,0x7f,0x02,0x02,0x3a,0xdf,0x90,0xfd,0x58,0xe0,0x20,0xe0,
+0x2d,0x90,0xfd,0x50,0x74,0x11,0xf0,0xa3,0x74,0x04,0xf0,0x90,0x9d,0xaa,0xe0,0x90,
+0xfd,0x52,0xf0,0x90,0x9d,0xab,0xe0,0x90,0xfd,0x53,0xf0,0x90,0x9d,0xac,0xe0,0x90,
+0xfd,0x54,0xf0,0xa3,0x74,0x28,0xf0,0x90,0xfd,0x58,0x74,0x01,0xf0,0x22,0x43,0x57,
+0x01,0x22,0xae,0x07,0x90,0x9e,0x62,0xe0,0x54,0xf0,0x44,0x04,0xf0,0x54,0x0f,0x44,
+0x20,0xf0,0x90,0x9e,0x64,0xee,0xf0,0xa3,0xed,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x64,
+0x90,0x9e,0xf5,0x12,0x43,0x7e,0x7a,0x9e,0x79,0x62,0x02,0x48,0xde,0xad,0x07,0x90,
+0x9e,0x5a,0xe0,0x54,0xf0,0x44,0x05,0xf0,0x54,0x0f,0x44,0x10,0xf0,0x90,0x9e,0x5c,
+0xef,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x5c,0x90,0x9e,0xf5,0x12,0x43,0x7e,0x7a,0x9e,
+0x79,0x5a,0x02,0x48,0xde,0xad,0x07,0x90,0x9e,0x62,0xe0,0x54,0xf0,0x44,0x07,0xf0,
+0x54,0x0f,0x44,0x10,0xf0,0x90,0x9e,0x64,0xef,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x64,
+0x90,0x9e,0xf5,0x12,0x43,0x7e,0x7a,0x9e,0x79,0x62,0x02,0x48,0xde,0xad,0x07,0x90,
+0x9e,0x62,0xe0,0x54,0xf0,0x44,0x09,0xf0,0x54,0x0f,0x44,0x10,0xf0,0x90,0x9e,0x64,
+0xef,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x64,0x90,0x9e,0xf5,0x12,0x43,0x7e,0x7a,0x9e,
+0x79,0x62,0x02,0x48,0xde,0x90,0x9e,0xdd,0xe0,0x54,0xf0,0x44,0x0a,0xf0,0x90,0xfd,
+0x60,0xe0,0x90,0x9e,0xdf,0xf0,0x90,0xfd,0x62,0xe0,0x90,0x9e,0xe0,0xf0,0x90,0xfd,
+0x63,0xe0,0x90,0x9e,0xe1,0xf0,0x90,0xfd,0x64,0xe0,0x90,0x9e,0xe2,0xf0,0x90,0xfd,
+0x65,0xe0,0x90,0x9e,0xe3,0xf0,0x90,0xfd,0x60,0xe0,0x90,0x9e,0xdd,0x30,0xe6,0x08,
+0xe0,0x54,0x0f,0x44,0x50,0xf0,0x80,0x16,0xe0,0x54,0x0f,0x44,0x70,0xf0,0x90,0xfd,
+0x66,0xe0,0x90,0x9e,0xe4,0xf0,0x90,0xfd,0x67,0xe0,0x90,0x9e,0xe5,0xf0,0x7b,0x01,
+0x7a,0x9e,0x79,0xdf,0x90,0x9e,0xf5,0x12,0x43,0x7e,0x7a,0x9e,0x79,0xdd,0x02,0x48,
+0xde,0x90,0x9e,0x62,0xef,0xf0,0xa3,0xe0,0x54,0xf0,0x44,0x0c,0xf0,0x54,0x0f,0x44,
+0x10,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x62,0x90,0x9e,0xf5,0x12,0x43,0x7e,0x7a,0x9e,
+0x09,0x02,0x48,0xde,0x90,0x00,0x75,0xe0,0x44,0x01,0xf0,0x7f,0x01,0x7e,0x00,0x12,
+0x3a,0xaa,0x90,0xfe,0x13,0x74,0x03,0xf0,0x7f,0x02,0x7e,0x00,0x12,0x3a,0xaa,0x90,
+0xfe,0x13,0xe4,0xf0,0x90,0x00,0x75,0xe0,0x54,0xfe,0xf0,0x22,0x1b,0x4f,};
+
+
+ //WiFi for BT MP New FW 0326
+const u8 Rtl8723SFwUMCBCutMPImgArray[Rtl8723SUMCBCutMPImgArrayLength] = {
+0x02, 0x23, 0x02, 0x00, 0x22, 0x00, 0x00, 0x00, 0x05, 0x15, 0x14, 0x10, 0x14, 0x47, 0x01, 0x00,
+0x74, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x4A, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x61, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x67, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x68, 0x55, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x6F, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xE4, 0xFB, 0x90, 0x85, 0x76, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x50, 0x70, 0x03,
+0x02, 0x43, 0x8F, 0xE5, 0x4D, 0x64, 0x01, 0x60, 0x03, 0x02, 0x43, 0x8F, 0xE5, 0x50, 0x14, 0x60,
+0x2B, 0x24, 0xFD, 0x60, 0x27, 0x24, 0x02, 0x24, 0xFB, 0x50, 0x02, 0x80, 0x21, 0x90, 0x85, 0x59,
+0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3, 0xE0, 0x60, 0x14, 0x90, 0x85, 0x59, 0xE0, 0x70, 0x08,
+0x90, 0x85, 0x70, 0xE0, 0x90, 0x85, 0x59, 0xF0, 0x7B, 0x01, 0x80, 0x02, 0x7B, 0x01, 0xEB, 0x70,
+0x03, 0x02, 0x43, 0x8F, 0x43, 0x51, 0x10, 0x90, 0x85, 0x4F, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54,
+0x01, 0x30, 0xE0, 0x44, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x85, 0x71, 0xE0, 0xC3, 0x9F, 0x50, 0x08,
+0xE4, 0xF5, 0x48, 0x90, 0x85, 0x50, 0x80, 0x2D, 0x90, 0x85, 0x4F, 0xE0, 0xC4, 0x54, 0x07, 0xFF,
+0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x85, 0x71, 0xE0, 0xC3, 0x9F, 0xEE, 0x64,
+0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x53, 0x80, 0x06, 0xE4,
+0xF5, 0x48, 0x90, 0x85, 0x50, 0xE0, 0x80, 0x2D, 0x90, 0x85, 0x71, 0xE0, 0x64, 0x01, 0x60, 0x03,
+0xE0, 0x70, 0x0F, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x71, 0xE0, 0xFF, 0x90, 0x85, 0x68, 0xE0, 0x2F,
+0x80, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x71, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90,
+0x85, 0x68, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39,
+0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x4E, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07,
+0x7D, 0x01, 0x7F, 0x04, 0x12, 0x49, 0xC6, 0xE5, 0x4E, 0x64, 0x0C, 0x60, 0x6F, 0x90, 0x85, 0x2B,
+0xE0, 0xFF, 0x90, 0x85, 0x71, 0xE0, 0xD3, 0x9F, 0x40, 0x08, 0x90, 0x85, 0x2C, 0xE0, 0x04, 0xF0,
+0x80, 0x05, 0xE4, 0x90, 0x85, 0x2C, 0xF0, 0x90, 0x85, 0x71, 0xE0, 0x90, 0x85, 0x2B, 0xF0, 0xA3,
+0xE0, 0xC3, 0x94, 0x05, 0x40, 0x46, 0xE4, 0xF0, 0x90, 0x85, 0x56, 0xE0, 0x60, 0x09, 0x90, 0x85,
+0x6F, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0x15, 0x90, 0x85, 0x72, 0xE0, 0x64, 0x02, 0x70, 0x21, 0x12,
+0x49, 0xC2, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x5E, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x85, 0x6E, 0x80, 0x09,
+0x43, 0x51, 0x01, 0x12, 0x50, 0xA5, 0x90, 0x85, 0x6A, 0x74, 0x01, 0xF0, 0x12, 0x84, 0xC4, 0x22,
+0xBB, 0x01, 0x0F, 0xF8, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x28,
+0xF0, 0x22, 0x50, 0x09, 0xC5, 0x82, 0x29, 0xF8, 0xE5, 0x82, 0x26, 0xF6, 0x22, 0xBB, 0xFE, 0x09,
+0xC5, 0x82, 0x29, 0xF8, 0xE2, 0x25, 0x82, 0xF2, 0x22, 0xF8, 0xEA, 0x25, 0x83, 0xF5, 0x83, 0xE9,
+0x93, 0x28, 0x22, 0xBB, 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22,
+0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8, 0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83,
+0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22, 0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE,
+0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0,
+0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xEF, 0x5B, 0xFF,
+0xEE, 0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE,
+0xED, 0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, 0xCF, 0xF4, 0xCF, 0xCE, 0xF4, 0xCE, 0xCD, 0xF4, 0xCD,
+0xCC, 0xF4, 0xCC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0,
+0xE8, 0x9C, 0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF,
+0x22, 0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82,
+0xF5, 0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0,
+0xF9, 0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82, 0x15, 0x82,
+0x70, 0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9,
+0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D,
+0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93,
+0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70,
+0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88,
+0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60, 0xE9, 0xA3,
+0xA3, 0xA3, 0xA3, 0x80, 0xD8, 0x90, 0x85, 0x60, 0xE0, 0x60, 0x16, 0x90, 0x85, 0x63, 0xE0, 0x70,
+0x10, 0x90, 0x85, 0x5D, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74, 0x0D, 0xF0, 0x22, 0x74, 0x09,
+0xF0, 0x22, 0x22, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0xE4, 0xFB, 0x90, 0x85, 0x7A, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x50, 0x70, 0x03, 0x02, 0x45, 0xD5, 0xE5, 0x4D, 0x64, 0x01,
+0x60, 0x03, 0x02, 0x45, 0xD5, 0x0B, 0x90, 0x85, 0x59, 0xF0, 0x04, 0x70, 0x03, 0x02, 0x45, 0xD5,
+0x43, 0x51, 0x10, 0x90, 0x85, 0x4F, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A,
+0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x85, 0x71, 0xE0, 0xD3, 0x9F, 0x50, 0x0D, 0xE4, 0xF5, 0x48, 0x90,
+0x85, 0x50, 0xE0, 0xF5, 0x49, 0xE4, 0x1B, 0x80, 0x56, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x4F, 0xE0,
+0x54, 0x0F, 0xFF, 0x90, 0x85, 0x71, 0xE0, 0xC3, 0x9F, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x85,
+0x50, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0x80, 0x35, 0x90, 0x85, 0x71, 0xE0, 0x64, 0x01,
+0x60, 0x03, 0xE0, 0x70, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x71, 0xE0, 0xFF, 0x90, 0x85, 0x68,
+0xE0, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0x80, 0x17, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x71, 0xE0, 0x14,
+0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x85, 0x68, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD,
+0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x4E, 0x54,
+0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x49, 0xC6, 0x12, 0x84, 0xC4,
+0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x85, 0x7A, 0xF0, 0xE5, 0x50, 0x70, 0x03, 0x02,
+0x46, 0x8F, 0x90, 0x85, 0x73, 0xE0, 0x60, 0x11, 0xE4, 0xF0, 0x53, 0x51, 0xFD, 0xE5, 0x51, 0x54,
+0x07, 0x60, 0x03, 0x02, 0x46, 0x8F, 0x02, 0x46, 0x8C, 0x90, 0x85, 0x5A, 0xE0, 0x04, 0xF0, 0x53,
+0x51, 0xEF, 0x90, 0x85, 0x71, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0x4F, 0xE0, 0xC4, 0x13, 0x13, 0x13,
+0x54, 0x01, 0x30, 0xE0, 0x3A, 0x90, 0x85, 0x71, 0xE0, 0xFF, 0x90, 0x85, 0x4F, 0xE0, 0x54, 0x0F,
+0xB5, 0x07, 0x0A, 0x90, 0x85, 0x52, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x80, 0x22, 0x90, 0x85, 0x4F,
+0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x85, 0x71,
+0xE0, 0xB5, 0x07, 0x0B, 0xE4, 0xB5, 0x06, 0x07, 0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90,
+0x85, 0x4F, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x06, 0x90, 0x85, 0x7A, 0x74,
+0x5A, 0xF0, 0x90, 0x85, 0x7A, 0xE0, 0xFF, 0x90, 0x85, 0x61, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE,
+0x90, 0x85, 0x5A, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x40, 0x0D, 0xE5,
+0x4D, 0xB4, 0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12, 0x51, 0x63, 0x22,
+0xE4, 0xF5, 0x51, 0xF5, 0x50, 0x75, 0x4F, 0x0C, 0x75, 0x4E, 0x0C, 0x90, 0x85, 0x72, 0xF0, 0x90,
+0x85, 0x6E, 0xF0, 0x90, 0x85, 0x6B, 0xF0, 0x90, 0x85, 0x70, 0x04, 0xF0, 0x90, 0x85, 0x59, 0xF0,
+0xE4, 0x90, 0x85, 0x73, 0xF0, 0x90, 0x85, 0x5B, 0xF0, 0x90, 0x85, 0x68, 0x74, 0x05, 0xF0, 0xE4,
+0x90, 0x85, 0x5A, 0xF0, 0x90, 0x85, 0x66, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x85, 0x61, 0xF0,
+0x90, 0x85, 0x64, 0x74, 0x05, 0xF0, 0x90, 0x85, 0x5E, 0x74, 0x14, 0xF0, 0x90, 0x85, 0x69, 0x74,
+0x05, 0xF0, 0xE4, 0x90, 0x85, 0x5C, 0xF0, 0x90, 0x85, 0x55, 0xF0, 0x90, 0x85, 0xC4, 0xF0, 0x90,
+0x85, 0x65, 0xF0, 0x90, 0x85, 0x75, 0xF0, 0x90, 0x85, 0x71, 0xF0, 0x90, 0x85, 0x56, 0xF0, 0x90,
+0x85, 0x6F, 0xF0, 0x90, 0x85, 0x60, 0xF0, 0x90, 0x85, 0x5D, 0xF0, 0x90, 0x85, 0x6A, 0xF0, 0x90,
+0x85, 0x63, 0xF0, 0x90, 0x85, 0x5F, 0xF0, 0x90, 0x85, 0x74, 0xF0, 0x90, 0x85, 0x62, 0xF0, 0x90,
+0x85, 0xC3, 0xE0, 0xB4, 0x02, 0x05, 0x90, 0x00, 0x93, 0xE4, 0xF0, 0x90, 0x85, 0x4F, 0xE0, 0x54,
+0x7F, 0xF0, 0xE0, 0x54, 0xF0, 0xF0, 0xE0, 0x54, 0x8F, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90,
+0x85, 0x53, 0xF0, 0x90, 0x85, 0x52, 0xF0, 0x22, 0xEF, 0x60, 0x5F, 0xAF, 0x05, 0x74, 0x21, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4,
+0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x6B,
+0x90, 0x85, 0x43, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x13, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x74,
+0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0x74, 0x23, 0x2D, 0xF5,
+0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x74, 0x7F, 0xF0, 0x22, 0xAF, 0x05, 0x74, 0x21, 0x2F, 0xF5,
+0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13,
+0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0x54, 0xBF, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0C, 0x74,
+0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x22, 0x90, 0x85, 0x2D, 0xE0,
+0x30, 0xE0, 0x22, 0x90, 0x85, 0x3E, 0xE0, 0x60, 0x09, 0x90, 0x01, 0xB9, 0x74, 0x40, 0xF0, 0x02,
+0x48, 0x86, 0xE5, 0x4F, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x02, 0x80, 0x2F, 0x90, 0x85, 0x65,
+0xE0, 0x60, 0x67, 0x80, 0x5D, 0x12, 0x50, 0xFB, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9,
+0x74, 0x01, 0xF0, 0x80, 0x61, 0xE5, 0x51, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02,
+0xF0, 0x80, 0x53, 0xE5, 0x4F, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74,
+0x04, 0xF0, 0x80, 0x42, 0xE5, 0x51, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80,
+0x35, 0xE5, 0x51, 0x30, 0xE4, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x28, 0x90, 0x85,
+0x5B, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x1A, 0x90, 0x85, 0x65, 0xE0,
+0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x80, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90,
+0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F, 0x00, 0x22, 0xE4,
+0x90, 0x85, 0x76, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x85, 0x76, 0xF0, 0xE0, 0x54, 0xC0, 0x70,
+0x18, 0x90, 0x85, 0x6A, 0xE0, 0x70, 0x03, 0x53, 0x51, 0xFE, 0x53, 0x51, 0xFD, 0x90, 0x85, 0x2D,
+0xE0, 0x20, 0xE0, 0x14, 0x12, 0x51, 0x63, 0x80, 0x0F, 0x90, 0x85, 0x56, 0xE0, 0x60, 0x09, 0x90,
+0x85, 0x6F, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0x15, 0x90, 0x85, 0x76, 0xE0, 0x30, 0xE6, 0x1B, 0x43,
+0x51, 0x01, 0x90, 0x85, 0x72, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x4E, 0x64, 0x0C, 0x60, 0x13,
+0x12, 0x50, 0xA5, 0x80, 0x0E, 0x12, 0x4F, 0xD4, 0x80, 0x09, 0x90, 0x85, 0x6A, 0xE0, 0x70, 0x03,
+0x53, 0x51, 0xFE, 0xE4, 0x90, 0x85, 0x6A, 0xF0, 0x90, 0x85, 0x76, 0xE0, 0x30, 0xE7, 0x2A, 0x43,
+0x51, 0x02, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x64, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90, 0x85, 0x73, 0x74, 0x01,
+0xF0, 0x90, 0x85, 0x32, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x53, 0x51, 0xFD, 0x22, 0x8E, 0x25, 0x8F,
+0x26, 0xAD, 0x26, 0xAC, 0x25, 0xAF, 0x24, 0x12, 0x47, 0x48, 0xAF, 0x26, 0xAE, 0x25, 0x90, 0x04,
+0x80, 0xE0, 0x54, 0x0F, 0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0x44, 0x01, 0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
+0x54, 0xFB, 0xF0, 0xAC, 0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
+0x44, 0xFA, 0xF0, 0x74, 0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F,
+0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F,
+0xF0, 0x90, 0x04, 0x53, 0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0,
+0x90, 0x04, 0x50, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0x54, 0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED,
+0xF0, 0x22, 0x7D, 0x01, 0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x5C, 0x8D,
+0x5D, 0xE5, 0x5C, 0x54, 0x0F, 0xFF, 0xE5, 0x4E, 0x54, 0x0F, 0x6F, 0x60, 0x72, 0xE5, 0x5C, 0x30,
+0xE2, 0x30, 0xE5, 0x4E, 0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x50, 0xE1, 0xE5, 0x4E, 0x30, 0xE3,
+0x10, 0xE5, 0x5C, 0x20, 0xE3, 0x0B, 0x12, 0x4C, 0xB2, 0xEF, 0x60, 0x53, 0x12, 0x51, 0x14, 0x80,
+0x4E, 0xE5, 0x4E, 0x20, 0xE3, 0x49, 0xE5, 0x5C, 0x30, 0xE3, 0x44, 0xAF, 0x5D, 0x12, 0x50, 0xC6,
+0x80, 0x3D, 0xE5, 0x4E, 0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x5C, 0x20, 0xE3, 0x09, 0x12,
+0x4C, 0xB2, 0xEF, 0x60, 0x2A, 0x12, 0x51, 0x14, 0xE5, 0x4E, 0x54, 0x0F, 0xFF, 0xBF, 0x04, 0x0E,
+0xE5, 0x5C, 0x20, 0xE2, 0x09, 0x12, 0x47, 0xEC, 0xEF, 0x60, 0x14, 0x12, 0x50, 0x7C, 0xE5, 0x4E,
+0x54, 0x0F, 0xFF, 0xBF, 0x02, 0x09, 0x12, 0x4B, 0x54, 0xEF, 0x60, 0x03, 0x12, 0x51, 0x44, 0xD0,
+0xD0, 0x92, 0xAF, 0x22, 0x02, 0x4A, 0x92, 0x02, 0x52, 0x40, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93,
+0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8,
+0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04,
+0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20,
+0x40, 0x80, 0x90, 0x4E, 0xD2, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30,
+0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0,
+0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8,
+0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83,
+0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0xEF, 0x64, 0x01, 0x70, 0x3E, 0x7D, 0x78, 0x7F, 0x02,
+0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x22, 0x90, 0x01, 0x36, 0x74, 0x03, 0xF0,
+0xFD, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x01, 0x57,
+0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x49, 0xC2, 0x90, 0x06, 0x04, 0xE0, 0x54,
+0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36, 0x74, 0x7B, 0xF0,
+0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x3A, 0x93, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A,
+0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x80, 0xF0, 0x90,
+0x06, 0x0A, 0xE0, 0x44, 0x07, 0xF0, 0x12, 0x4E, 0x85, 0xE5, 0x4D, 0x20, 0xE0, 0x05, 0xE4, 0x90,
+0x85, 0x5B, 0xF0, 0x22, 0x90, 0x85, 0x2D, 0xE0, 0x20, 0xE0, 0x10, 0x12, 0x50, 0xFB, 0xEF, 0x64,
+0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x5C, 0xE5, 0x14, 0x60, 0x08, 0x90,
+0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x50, 0xE5, 0x4F, 0x54, 0x0F, 0xD3, 0x94, 0x01, 0x40, 0x08,
+0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x3F, 0x90, 0x02, 0x87, 0xE0, 0x60, 0x08, 0x90, 0x01,
+0xB9, 0x74, 0x04, 0xF0, 0x80, 0x31, 0x90, 0x01, 0xAF, 0xE0, 0x60, 0x02, 0x80, 0x07, 0x90, 0x02,
+0x86, 0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x1A, 0x90, 0x85, 0x5C,
+0xE0, 0x70, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0,
+0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x02, 0xF0, 0x7F, 0x00, 0x22,
+0xE5, 0x4D, 0x64, 0x01, 0x70, 0x6B, 0xE5, 0x50, 0x60, 0x67, 0xE5, 0x50, 0x64, 0x02, 0x60, 0x06,
+0xE5, 0x50, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x85, 0x59, 0xF0, 0x90, 0x06,
+0xAA, 0xE0, 0x90, 0x85, 0x70, 0xF0, 0x90, 0x85, 0x59, 0xE0, 0x70, 0x07, 0x90, 0x85, 0x70, 0xE0,
+0xFF, 0x80, 0x05, 0x90, 0x85, 0x59, 0xE0, 0xFF, 0x90, 0x85, 0x59, 0xEF, 0xF0, 0x90, 0x85, 0x5B,
+0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x85, 0x5A, 0xF0, 0x90, 0x85, 0x71, 0xF0, 0x90, 0x05,
+0x58, 0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x53,
+0x51, 0xFD, 0x53, 0x51, 0xEF, 0xE5, 0x50, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x03, 0x12, 0x48,
+0x8F, 0x22, 0x90, 0x85, 0xC3, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x91, 0x80, 0x0C, 0x90, 0x85, 0xC3,
+0xE0, 0x70, 0x04, 0x7D, 0xD4, 0x80, 0x02, 0xE4, 0xFD, 0x7F, 0x93, 0x12, 0x53, 0x26, 0x90, 0x00,
+0x29, 0xE0, 0x54, 0x3F, 0xFD, 0x7F, 0x29, 0x12, 0x53, 0x26, 0x90, 0x00, 0x28, 0xE0, 0x54, 0xFC,
+0xFD, 0x7F, 0x28, 0x12, 0x53, 0x26, 0x90, 0x00, 0x08, 0xE0, 0x44, 0x10, 0xFD, 0x7F, 0x08, 0x12,
+0x53, 0x26, 0x7F, 0x01, 0x12, 0x4D, 0xDE, 0x90, 0x00, 0x00, 0xE0, 0x44, 0x20, 0xFD, 0xE4, 0xFF,
+0x12, 0x53, 0x26, 0x90, 0x00, 0x20, 0xE0, 0x54, 0xFE, 0xFD, 0x7F, 0x20, 0x12, 0x53, 0x26, 0x90,
+0x00, 0x90, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x53, 0x26, 0x7F, 0x14, 0x7E, 0x00, 0x02,
+0x3B, 0x09, 0x90, 0x85, 0x2D, 0xE0, 0x30, 0xE0, 0x13, 0x90, 0x85, 0x32, 0xE0, 0xC4, 0x13, 0x54,
+0x07, 0x30, 0xE0, 0x18, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x49, 0x12, 0x50, 0xFB, 0xEF,
+0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x39, 0x90, 0x85, 0x6E, 0xE0,
+0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x2B, 0x90, 0x85, 0x6B, 0xE0, 0x60, 0x08,
+0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x1D, 0xE5, 0x4F, 0x54, 0x0F, 0xD3, 0x94, 0x04, 0x40,
+0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01,
+0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x85,
+0xA1, 0x12, 0x44, 0x89, 0x12, 0x51, 0x57, 0x90, 0x85, 0xA1, 0x12, 0x44, 0x69, 0x12, 0x1E, 0xF6,
+0xF5, 0x50, 0x14, 0x60, 0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03, 0x70, 0x44, 0x7F,
+0x01, 0x80, 0x3D, 0x90, 0x85, 0xA1, 0x12, 0x44, 0x69, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD,
+0xE4, 0xFF, 0x12, 0x4F, 0x96, 0x80, 0x29, 0x90, 0x85, 0xA1, 0x12, 0x44, 0x69, 0x90, 0x00, 0x02,
+0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x01, 0x12, 0x4F, 0x96, 0x1F, 0x80, 0x14, 0x90, 0x85, 0xA1, 0x12,
+0x44, 0x69, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x02, 0x12, 0x4F, 0x96, 0xE4, 0xFF,
+0x12, 0x4A, 0xD7, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x24, 0x90, 0x85, 0x56,
+0xE0, 0x60, 0x09, 0x90, 0x85, 0x6F, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0x15, 0x90, 0x04, 0x1D, 0xE0,
+0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x27, 0x74, 0xFF, 0xF0, 0x12, 0x5E, 0x51, 0xBF, 0x01,
+0x0D, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x2E, 0x12, 0x49, 0x2D, 0x90, 0x05,
+0x22, 0xE5, 0x27, 0xF0, 0x80, 0x0D, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x2E,
+0x12, 0x49, 0x2D, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F, 0x60,
+0xE4, 0x90, 0x86, 0x44, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02,
+0x7F, 0x01, 0xEF, 0x65, 0x60, 0x60, 0x3E, 0xC3, 0x90, 0x86, 0x45, 0xE0, 0x94, 0x88, 0x90, 0x86,
+0x44, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x86,
+0x44, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xF7, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3,
+0x90, 0x86, 0x45, 0xE0, 0x94, 0x32, 0x90, 0x86, 0x44, 0xE0, 0x94, 0x00, 0x40, 0xB9, 0x90, 0x01,
+0xC7, 0xE0, 0x30, 0xE0, 0xB2, 0x22, 0x90, 0x00, 0x20, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x20, 0x12,
+0x53, 0x26, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x00, 0xE0, 0x54, 0xDF, 0xFD,
+0xE4, 0xFF, 0x12, 0x53, 0x26, 0x90, 0x00, 0x28, 0xE0, 0x44, 0x03, 0xFD, 0x7F, 0x28, 0x12, 0x53,
+0x26, 0x90, 0x00, 0x08, 0xE0, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x53, 0x26, 0xE4, 0xFF, 0x12,
+0x4D, 0xDE, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x29, 0xE0, 0x44, 0xC0, 0xFD,
+0x7F, 0x29, 0x02, 0x53, 0x26, 0xE4, 0xFF, 0x90, 0x00, 0x6A, 0xE0, 0x30, 0xE2, 0x22, 0xE0, 0x30,
+0xE0, 0x20, 0xE0, 0x30, 0xE1, 0x0D, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x02, 0x30, 0xE3, 0x13, 0x7F,
+0x03, 0x80, 0x0F, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x03, 0x30, 0xE3, 0x06, 0x7F, 0x02, 0x80, 0x02,
+0x7F, 0x03, 0xEF, 0xFD, 0xD3, 0x90, 0x85, 0x67, 0xE0, 0x9D, 0x90, 0x85, 0x66, 0xE0, 0x94, 0x00,
+0x50, 0x05, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x85, 0x66, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58,
+0xF0, 0x22, 0x48, 0x85, 0xB2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xA9,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x85, 0xB1, 0x00, 0x41, 0x85, 0xC0, 0x00,
+0x41, 0x85, 0xA6, 0x00, 0x41, 0x86, 0x4C, 0x00, 0x41, 0x85, 0x2B, 0x00, 0x41, 0x85, 0x2C, 0x00,
+0x41, 0x84, 0x01, 0x00, 0x41, 0x84, 0x02, 0x00, 0x41, 0x84, 0x00, 0x00, 0x41, 0x86, 0x3D, 0x00,
+0x41, 0x86, 0x4A, 0x00, 0x00, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x85, 0x6F, 0x74,
+0x01, 0xF0, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x86, 0x31, 0x12, 0x1F, 0xC9, 0x90,
+0x86, 0x31, 0x12, 0x44, 0x45, 0xEC, 0x44, 0x02, 0xFC, 0x90, 0x86, 0x31, 0x12, 0x1F, 0xC9, 0x90,
+0x86, 0x31, 0x12, 0x44, 0x45, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12,
+0x34, 0x30, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x50, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x35,
+0x90, 0x85, 0x2D, 0xE0, 0x20, 0xE0, 0x2E, 0x90, 0x85, 0x56, 0xE0, 0x60, 0x09, 0x90, 0x85, 0x6F,
+0xE0, 0x70, 0x03, 0x12, 0x4F, 0x15, 0x12, 0x84, 0xC4, 0x90, 0x85, 0x72, 0xE0, 0x60, 0x06, 0x7D,
+0x01, 0x7F, 0x0C, 0x80, 0x0D, 0xE5, 0x4E, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01,
+0x7F, 0x04, 0x12, 0x49, 0xC6, 0x22, 0xEF, 0x14, 0x60, 0x09, 0x14, 0x60, 0x16, 0x24, 0x02, 0x70,
+0x32, 0x80, 0x0A, 0x90, 0x85, 0x70, 0x74, 0x01, 0xF0, 0x90, 0x85, 0x59, 0xF0, 0xE4, 0x90, 0x85,
+0x75, 0xF0, 0x22, 0xED, 0x70, 0x0A, 0x90, 0x85, 0x69, 0xE0, 0x90, 0x85, 0x70, 0xF0, 0x80, 0x05,
+0x90, 0x85, 0x70, 0xED, 0xF0, 0x90, 0x85, 0x70, 0xE0, 0x90, 0x85, 0x59, 0xF0, 0x90, 0x85, 0x75,
+0x74, 0x01, 0xF0, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0xE4,
+0xF5, 0x48, 0x90, 0x85, 0x5E, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12,
+0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x85,
+0x6B, 0x14, 0xF0, 0xE5, 0x4E, 0x54, 0x0F, 0xC3, 0x94, 0x0C, 0x50, 0x03, 0x12, 0x49, 0xC2, 0x22,
+0x90, 0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E,
+0x90, 0x85, 0x57, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x01, 0x04, 0xE0, 0x54, 0x0F, 0xFF, 0x74, 0x40,
+0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x90, 0x85,
+0x6D, 0xF0, 0xEE, 0x90, 0x85, 0x6C, 0xF0, 0x22, 0xEF, 0x70, 0x0B, 0x90, 0x85, 0xC2, 0xE0, 0x90,
+0x86, 0x35, 0x60, 0x0B, 0x80, 0x12, 0x90, 0x85, 0xC2, 0xE0, 0x90, 0x86, 0x35, 0x60, 0x09, 0x12,
+0x1F, 0xD5, 0x00, 0x00, 0x02, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x01, 0x10, 0x7B,
+0x01, 0x7A, 0x86, 0x79, 0x35, 0x7F, 0x60, 0x7E, 0x08, 0x02, 0x55, 0x11, 0x90, 0x01, 0x37, 0x74,
+0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x5E, 0x51, 0xEF, 0x70, 0x06, 0x90, 0x01,
+0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93, 0x12, 0x54, 0x08, 0x53, 0x4E,
+0xF0, 0x43, 0x4E, 0x02, 0x22, 0x90, 0x85, 0x5F, 0xE0, 0x70, 0x1A, 0x90, 0x04, 0x1D, 0xE0, 0x70,
+0x14, 0x90, 0x85, 0xBB, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x58, 0x2E, 0x8E, 0x5E, 0x8F, 0x5F, 0x90,
+0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF, 0xF0, 0xEF, 0x60, 0x0A,
+0xE5, 0x4D, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x4D, 0x84, 0x53, 0x4E, 0xF0, 0x43, 0x4E, 0x0C,
+0x22, 0x90, 0x86, 0x4D, 0xEF, 0xF0, 0x12, 0x66, 0x8A, 0x90, 0x86, 0x4D, 0xE0, 0x60, 0x05, 0x90,
+0x05, 0x22, 0xE4, 0xF0, 0x53, 0x4E, 0xF0, 0x43, 0x4E, 0x04, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4,
+0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60,
+0x02, 0x7F, 0x00, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE5, 0x4D, 0xB4, 0x01, 0x05,
+0x7F, 0x01, 0x12, 0x4D, 0x84, 0x53, 0x4E, 0xF0, 0x43, 0x4E, 0x04, 0x22, 0xE5, 0x4F, 0x30, 0xE6,
+0x12, 0xE5, 0x4F, 0x54, 0x0F, 0xFF, 0x90, 0x01, 0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0,
+0x53, 0x4F, 0xBF, 0x22, 0x53, 0x4E, 0xF0, 0x43, 0x4E, 0x01, 0x12, 0x4C, 0x42, 0x12, 0x4E, 0x36,
+0x53, 0x4E, 0xF0, 0x43, 0x4E, 0x02, 0x22, 0xE4, 0x90, 0x85, 0x73, 0xF0, 0x90, 0x85, 0x5A, 0xF0,
+0xF5, 0x51, 0x22, 0x7D, 0x01, 0xAF, 0x4F, 0x02, 0x49, 0xC6, 0x90, 0x02, 0x84, 0xEF, 0xF0, 0xA3,
+0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12, 0x44, 0xB8, 0x51, 0x95, 0x00,
+0x40, 0x51, 0xBD, 0x00, 0x80, 0x51, 0xE8, 0x01, 0x00, 0x51, 0xFC, 0x02, 0x00, 0x52, 0x14, 0x04,
+0x00, 0x00, 0x00, 0x52, 0x31, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00,
+0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06, 0xCE, 0xC3, 0x13, 0xCE, 0x13,
+0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x80, 0x26, 0xED, 0x54, 0x7F,
+0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE,
+0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x07, 0xC3, 0x33, 0xCE, 0x33,
+0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E,
+0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80, 0x35, 0xEC, 0x54, 0x01, 0x4D,
+0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0xC3, 0x13,
+0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x04,
+0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D, 0x00, 0x25, 0xE0, 0x25, 0xE0,
+0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x22, 0xF0, 0xA3, 0xE4, 0xF0, 0x22,
+0xE4, 0x90, 0x85, 0x8C, 0xF0, 0xA3, 0xF0, 0x12, 0x60, 0xEF, 0x75, 0x8E, 0x02, 0x91, 0xDA, 0x12,
+0x60, 0x4D, 0x90, 0x85, 0xC3, 0xEF, 0xF0, 0x12, 0x60, 0x60, 0x90, 0x85, 0xC5, 0xEF, 0xF0, 0x12,
+0x60, 0x6C, 0x90, 0x85, 0xA7, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x14, 0xF5, 0x09, 0xF5,
+0x4D, 0x90, 0x85, 0xC2, 0xF0, 0x90, 0x00, 0xCC, 0xE0, 0x54, 0xF7, 0xF0, 0x12, 0x46, 0x90, 0x12,
+0x37, 0x1C, 0x12, 0x77, 0x6C, 0x71, 0x3B, 0x12, 0x60, 0x11, 0x12, 0x60, 0x84, 0xF1, 0xEF, 0x12,
+0x60, 0x2F, 0x12, 0x45, 0x02, 0x12, 0x60, 0xF7, 0x91, 0xC2, 0x90, 0x85, 0x8E, 0xE5, 0xD9, 0xF0,
+0xC2, 0xAF, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40, 0xF0, 0x71, 0x99, 0x75, 0xE8, 0x03, 0x43, 0xA8,
+0x85, 0x12, 0x83, 0x81, 0xD2, 0xAF, 0x51, 0x36, 0x12, 0x60, 0x99, 0x7D, 0xDD, 0x7F, 0x8F, 0x71,
+0x26, 0x90, 0x85, 0x8C, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0x40, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x52,
+0xA3, 0xF0, 0xE5, 0x14, 0x30, 0xE0, 0x09, 0xC2, 0xAF, 0x53, 0x14, 0xFE, 0x91, 0xEA, 0xD2, 0xAF,
+0xE5, 0x14, 0x30, 0xE4, 0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xEF, 0xD2, 0xAF, 0x12, 0x76, 0x1E, 0xE5,
+0x14, 0x30, 0xE7, 0x09, 0xC2, 0xAF, 0x53, 0x14, 0x7F, 0xD2, 0xAF, 0xB1, 0x78, 0xC2, 0xAF, 0xE5,
+0x4F, 0x54, 0x0F, 0xFF, 0xBF, 0x01, 0x0D, 0x90, 0x85, 0x5C, 0x74, 0x01, 0xF0, 0x31, 0x63, 0xE4,
+0x90, 0x85, 0x5C, 0xF0, 0xD2, 0xAF, 0x90, 0x01, 0xBD, 0xE5, 0x4E, 0xF0, 0x90, 0x85, 0x72, 0xE0,
+0x90, 0x01, 0xBC, 0xF0, 0x80, 0x9B, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75,
+0x83, 0x00, 0xED, 0xF0, 0x71, 0x99, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x3C, 0x74, 0xFF,
+0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD,
+0x7F, 0x54, 0x71, 0x26, 0x7D, 0xFF, 0x7F, 0x55, 0x71, 0x26, 0x7D, 0xFF, 0x7F, 0x56, 0x71, 0x26,
+0x7D, 0xFF, 0x7F, 0x57, 0x80, 0xC0, 0x90, 0x01, 0x30, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
+0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x71, 0x26,
+0xE4, 0xFD, 0x7F, 0x51, 0x71, 0x26, 0xE4, 0xFD, 0x7F, 0x52, 0x71, 0x26, 0xE4, 0xFD, 0x7F, 0x53,
+0x80, 0x94, 0x90, 0x00, 0x02, 0xE0, 0x44, 0x01, 0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
+0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8E, 0x53, 0x8F, 0x54, 0x8B, 0x55, 0x8A,
+0x56, 0x89, 0x57, 0xE4, 0x90, 0x86, 0x4E, 0xF0, 0xEF, 0x90, 0x00, 0x31, 0xF0, 0x71, 0x99, 0xE5,
+0x53, 0x54, 0x03, 0xFF, 0x90, 0x00, 0x32, 0xE0, 0x54, 0xFC, 0x4F, 0xF0, 0x71, 0x99, 0x90, 0x00,
+0x33, 0xE0, 0x54, 0x7F, 0xF0, 0x71, 0x99, 0x90, 0x00, 0x33, 0xE0, 0x20, 0xE7, 0x0E, 0x90, 0x86,
+0x4E, 0xE0, 0xC3, 0x94, 0x64, 0x50, 0x05, 0xE0, 0x04, 0xF0, 0x80, 0xEB, 0x90, 0x86, 0x4E, 0xE0,
+0xC3, 0x94, 0x64, 0x50, 0x10, 0x90, 0x00, 0x30, 0xE0, 0xAB, 0x55, 0xAA, 0x56, 0xA9, 0x57, 0x12,
+0x43, 0xC3, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x85, 0xF7, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x85, 0xFB, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x00, 0x00, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x71, 0x99, 0x71, 0x92, 0x90, 0x00,
+0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0,
+0x90, 0x05, 0x53, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0x85, 0x63, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78,
+0x74, 0x01, 0xF0, 0x90, 0x85, 0x56, 0xE0, 0x60, 0x34, 0xE4, 0x90, 0x85, 0x6F, 0xF0, 0xFF, 0x7E,
+0x08, 0x12, 0x2C, 0x6E, 0x90, 0x85, 0xF7, 0x12, 0x1F, 0xC9, 0x90, 0x85, 0xF7, 0x12, 0x44, 0x45,
+0xEC, 0x54, 0xFD, 0xFC, 0x90, 0x85, 0xF7, 0x12, 0x1F, 0xC9, 0x90, 0x85, 0xF7, 0x12, 0x44, 0x45,
+0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x85, 0x60,
+0xE0, 0x60, 0x22, 0xE4, 0xFF, 0x11, 0x48, 0x90, 0x85, 0x74, 0xE0, 0x60, 0x12, 0x90, 0x85, 0xFB,
+0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xFB, 0xB1, 0x0D, 0x90,
+0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x85, 0x6A, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0x90, 0x86, 0x3E, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x86, 0x40, 0xF0, 0x90, 0x86,
+0x3E, 0xE0, 0x54, 0x7F, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x22, 0xE4, 0x90, 0x85, 0xBF, 0xF0, 0x90,
+0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80, 0x61, 0x26, 0xE4, 0x7B, 0x01, 0x7A, 0x84, 0x79,
+0x03, 0x12, 0x6D, 0x3F, 0xEF, 0xB4, 0x02, 0x14, 0x90, 0x86, 0x4A, 0xE0, 0x64, 0x04, 0x60, 0x07,
+0x43, 0x14, 0x01, 0xE0, 0x04, 0xF0, 0x22, 0xE4, 0x90, 0x86, 0x4A, 0xF0, 0x22, 0x7F, 0x70, 0x7E,
+0x08, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0x54, 0xFC, 0xFF, 0x90, 0x01, 0xE8, 0xF0,
+0xEE, 0x44, 0xF0, 0xA3, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEC, 0xF0, 0x90,
+0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xED, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
+0x01, 0xEE, 0xF0, 0x12, 0x1E, 0xF6, 0x90, 0x01, 0xEF, 0xF0, 0x90, 0x01, 0xEB, 0x74, 0x40, 0xF0,
+0x12, 0x81, 0x7E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x84, 0x9C, 0xE0, 0xC3, 0x13, 0x30, 0xE0,
+0x16, 0xEF, 0x7B, 0x01, 0xB4, 0x01, 0x06, 0x7A, 0x84, 0x79, 0xA3, 0x80, 0x04, 0x7A, 0x84, 0x79,
+0x9F, 0x7F, 0x80, 0x7E, 0x08, 0xB1, 0x11, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1,
+0x97, 0xEF, 0x60, 0x4E, 0x90, 0x84, 0x01, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x06, 0xF9, 0x74,
+0x84, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x02, 0xC0, 0x01, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24,
+0x08, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0xFA, 0x90, 0x86, 0x18, 0x12, 0x44, 0x89, 0xD0, 0x01, 0xD0,
+0x02, 0xB1, 0xD7, 0x90, 0x84, 0x01, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0x90,
+0x84, 0x02, 0xE0, 0xFF, 0x90, 0x84, 0x01, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12,
+0x3A, 0x3F, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x86,
+0x15, 0x12, 0x44, 0x89, 0x90, 0x84, 0x00, 0xE0, 0x90, 0x00, 0x01, 0x12, 0x43, 0xD5, 0xF1, 0x97,
+0xEF, 0x70, 0x02, 0xC1, 0x92, 0x90, 0x86, 0x15, 0x12, 0x44, 0x69, 0x8B, 0x20, 0x8A, 0x21, 0x89,
+0x22, 0x75, 0x23, 0x02, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0xD1, 0x97, 0x90, 0x86, 0x18, 0x12,
+0x44, 0x69, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x86, 0x15, 0x12, 0x44, 0x69, 0x12, 0x1E,
+0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2, 0xD1, 0x97, 0x90,
+0x01, 0xAF, 0x74, 0xFF, 0xF0, 0x90, 0x85, 0xC3, 0xE0, 0x64, 0x01, 0x70, 0x48, 0x90, 0x86, 0x15,
+0x12, 0x44, 0x69, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x75, 0x23, 0x02, 0x7B, 0x01, 0x7A, 0xFD,
+0x79, 0x20, 0xD1, 0x97, 0x90, 0x86, 0x18, 0x12, 0x44, 0x69, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22,
+0x90, 0x86, 0x15, 0x12, 0x44, 0x69, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0x7B,
+0x01, 0x7A, 0xFD, 0x79, 0x22, 0xD1, 0x97, 0x90, 0x85, 0xA7, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82,
+0x8E, 0x83, 0x74, 0xFF, 0xF0, 0x90, 0x84, 0x00, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64,
+0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1D,
+0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x86, 0x0F, 0x12, 0x44, 0x89, 0xAB, 0x20, 0xAA, 0x21, 0xA9, 0x22,
+0x90, 0x86, 0x12, 0x12, 0x44, 0x89, 0xAF, 0x23, 0x15, 0x23, 0xEF, 0x60, 0x1E, 0x90, 0x86, 0x12,
+0xE4, 0x75, 0xF0, 0x01, 0x12, 0x44, 0x72, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x86, 0x0F, 0xE4, 0x75,
+0xF0, 0x01, 0x12, 0x44, 0x72, 0xEF, 0x12, 0x43, 0xC3, 0x80, 0xDB, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9,
+0x1F, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x86, 0x1B,
+0x12, 0x44, 0x89, 0x90, 0x84, 0x02, 0xE0, 0xFF, 0x90, 0x84, 0x01, 0xE0, 0xB5, 0x07, 0x07, 0x7D,
+0x02, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x90, 0x84, 0x01, 0xE0, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09,
+0x60, 0x0B, 0x90, 0x84, 0x01, 0xE0, 0x14, 0xFF, 0xA3, 0xE0, 0xB5, 0x07, 0x0D, 0xF1, 0x97, 0xEF,
+0x60, 0x70, 0xB1, 0x78, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x90, 0x84, 0x02, 0xE0, 0x75, 0xF0,
+0x0F, 0xA4, 0x24, 0x06, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0xA8, 0x01, 0xFC, 0x7D, 0x01, 0x90, 0x86,
+0x1B, 0x12, 0x44, 0x69, 0x7E, 0x00, 0x7F, 0x02, 0x12, 0x1E, 0xD0, 0x90, 0x84, 0x02, 0xE0, 0x75,
+0xF0, 0x0F, 0xA4, 0x24, 0x08, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0,
+0x02, 0xC0, 0x01, 0x90, 0x86, 0x1E, 0x12, 0x44, 0x69, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90,
+0x86, 0x1B, 0x12, 0x44, 0x69, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0xD0, 0x01,
+0xD0, 0x02, 0xD0, 0x03, 0xD1, 0x97, 0x90, 0x84, 0x02, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02,
+0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0xAF, 0x7E, 0x01, 0x90, 0x86, 0x39, 0xEE, 0xF0,
+0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x86, 0x39, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5,
+0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C, 0xC3, 0x90, 0x86, 0x3C, 0xE0, 0x94, 0xE8, 0x90, 0x86, 0x3B,
+0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90,
+0x86, 0x3B, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xF7, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3B, 0x09,
+0x80, 0xC6, 0x7F, 0x01, 0x22, 0x8F, 0x82, 0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0x90,
+0x01, 0x64, 0x74, 0x20, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xC4,
+0x74, 0xF6, 0xF0, 0x74, 0x57, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22,
+0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7, 0xE0,
+0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF, 0xC3,
+0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x0E, 0x74, 0x0F, 0x2B,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0, 0x54,
+0xEF, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x3F, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0xFD, 0x62,
+0xE0, 0x54, 0x03, 0x4F, 0x90, 0x85, 0x7E, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x54, 0x3F, 0x25, 0xE0,
+0x25, 0xE0, 0xFF, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x85, 0x7F, 0xF0, 0x90, 0x85,
+0x7E, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xE4, 0xFF, 0x90, 0x86, 0x21, 0xEF, 0xF0, 0xA3, 0xED, 0xF0,
+0xA3, 0xEB, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x19, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x86, 0x26,
+0xF0, 0xD1, 0x4B, 0xBF, 0x01, 0x02, 0x11, 0xFB, 0x90, 0x86, 0x26, 0xE0, 0x90, 0x05, 0x22, 0xF0,
+0x80, 0x02, 0x11, 0xFB, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x85, 0xBE, 0xE0, 0xFF,
+0x7D, 0x01, 0x11, 0x2E, 0x90, 0x86, 0x24, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0x86,
+0x21, 0xE0, 0xFF, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x86, 0x2B, 0xF0, 0xEF, 0x60, 0x10, 0x74,
+0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x0E, 0x74,
+0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05, 0x74,
+0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x74, 0x11, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05, 0x74, 0x16, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x02, 0xF0, 0x74, 0x16, 0x2F, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0x03, 0xF0, 0xAE, 0x05, 0x74, 0x22, 0x2E, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEB, 0xF0, 0x90, 0x86, 0x2B, 0xE0, 0xFF, 0x74, 0x23, 0x2E, 0xF5,
+0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
+0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x22, 0xE4, 0x90, 0x85, 0x7A, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90,
+0x85, 0x2D, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x4A, 0x12, 0x85, 0x10, 0x90, 0x85, 0x3F, 0xE0, 0x64,
+0x01, 0x60, 0x02, 0x41, 0xBD, 0x90, 0x85, 0x32, 0xE0, 0x30, 0xE0, 0x18, 0xE0, 0xC3, 0x13, 0x30,
+0xE0, 0x02, 0x80, 0x0A, 0x90, 0x85, 0x32, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x06, 0xA3, 0xE0,
+0x90, 0x85, 0x7A, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x7A, 0xE0, 0x24, 0x03, 0xF5, 0x49, 0xE4,
+0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90,
+0x85, 0x30, 0xE0, 0xC4, 0x54, 0x0F, 0x90, 0x85, 0x3F, 0x30, 0xE0, 0x05, 0x74, 0x05, 0xF0, 0x80,
+0x03, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F, 0x90,
+0x85, 0x2E, 0xE0, 0xFF, 0x90, 0x85, 0x3D, 0xE0, 0xC3, 0x9F, 0x90, 0x85, 0x43, 0xF0, 0x90, 0x85,
+0x2D, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54,
+0x07, 0x30, 0xE0, 0x6E, 0x90, 0x85, 0x43, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25, 0xE0,
+0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xC8, 0x80,
+0x51, 0x90, 0x85, 0x2D, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x85, 0x32, 0xE0, 0x54,
+0xDF, 0xF0, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x49, 0xC6, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x13,
+0x54, 0x03, 0x30, 0xE0, 0x27, 0x90, 0x85, 0x34, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB, 0xF0,
+0xE4, 0x90, 0x85, 0x42, 0xF0, 0x90, 0x85, 0x3F, 0xF0, 0x90, 0x85, 0x35, 0x74, 0x06, 0xF0, 0x90,
+0x85, 0x65, 0xE0, 0x60, 0x07, 0x90, 0x85, 0x34, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22, 0x74,
+0x6F, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x4A, 0xA1, 0xBB, 0x90, 0x85, 0x3F,
+0xE0, 0x64, 0x02, 0x60, 0x02, 0x61, 0x9C, 0x90, 0x85, 0x31, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F,
+0x30, 0xE0, 0x08, 0xD1, 0x4B, 0xBF, 0x01, 0x03, 0x12, 0x54, 0x08, 0xE4, 0xFF, 0xD1, 0xF5, 0x90,
+0x85, 0x32, 0xE0, 0x30, 0xE0, 0x1F, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90, 0x85,
+0x32, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x90, 0x85, 0x7A, 0xF0, 0x90, 0x85,
+0x32, 0xE0, 0x54, 0xEF, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x2E, 0xE0, 0x24, 0x03, 0xFF, 0x90,
+0x85, 0x7A, 0xE0, 0x2F, 0xFF, 0x90, 0x85, 0x3D, 0xE0, 0xC3, 0x9F, 0xFF, 0x90, 0x85, 0x7B, 0xE0,
+0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63,
+0x74, 0x05, 0xF0, 0xE4, 0xFF, 0xD1, 0x92, 0x90, 0x85, 0x3F, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0x2D,
+0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F,
+0x90, 0x85, 0x2D, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13,
+0x54, 0x07, 0x20, 0xE0, 0x14, 0xE4, 0xFD, 0xAF, 0x4F, 0x12, 0x49, 0xC6, 0x80, 0x0B, 0xE5, 0x50,
+0x60, 0x0D, 0xE4, 0xFD, 0xAF, 0x4F, 0x12, 0x49, 0xC6, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90,
+0x85, 0x30, 0xE0, 0x30, 0xE0, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0xC4,
+0x13, 0x13, 0x13, 0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0x4A, 0xC1, 0x45, 0x90, 0x85, 0x3F, 0xE0,
+0x64, 0x03, 0x60, 0x02, 0x81, 0xF0, 0x7F, 0x01, 0xD1, 0xF5, 0x90, 0x85, 0x31, 0xE0, 0xFF, 0x13,
+0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x66, 0x8A, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x13,
+0x54, 0x03, 0x20, 0xE0, 0x02, 0x81, 0x4C, 0x90, 0x85, 0x37, 0xE0, 0xFF, 0x90, 0x85, 0x41, 0xE0,
+0xD3, 0x9F, 0x40, 0x4D, 0xE0, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x85, 0x39, 0xE0, 0xFE, 0xC3,
+0xEF, 0x9E, 0xFF, 0x24, 0x03, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x85, 0x2F, 0xE0, 0xD3, 0x9D, 0xEC,
+0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x40, 0x08, 0xE0, 0x9F, 0x90, 0x85, 0x7D, 0xF0, 0x80, 0x06,
+0x90, 0x85, 0x7D, 0x74, 0x03, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x7D, 0xE0, 0xF5, 0x49, 0xE4,
+0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x85, 0x3F, 0xE0, 0x04, 0xF0, 0x80,
+0x24, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x3A, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E,
+0x01, 0x12, 0x39, 0x77, 0x90, 0x85, 0x35, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x85, 0x3F, 0xF0, 0x90,
+0x06, 0x92, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x85, 0x41, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48, 0x90,
+0x85, 0x7C, 0xE0, 0xFF, 0x90, 0x85, 0x2F, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F,
+0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x85, 0x3F, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x63, 0x74,
+0x05, 0xF0, 0x7F, 0x01, 0xD1, 0x92, 0x90, 0x85, 0x2D, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0,
+0x2F, 0x90, 0x85, 0x2D, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1A, 0x90, 0x85, 0x32, 0xE0, 0x44,
+0x20, 0xF0, 0x90, 0x85, 0x65, 0xE0, 0x60, 0x02, 0x80, 0x0F, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x7D,
+0x01, 0x7F, 0x0C, 0x80, 0x08, 0xE5, 0x50, 0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x49, 0xC6,
+0x90, 0x85, 0x65, 0xE0, 0x60, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90, 0x85,
+0x2D, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x0F, 0x90, 0x85, 0x2D, 0xE0, 0xFF, 0x13, 0x13,
+0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x50, 0xA5, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x85, 0x30,
+0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0x4A, 0x7F, 0x01, 0xC1, 0x47,
+0x90, 0x85, 0x3F, 0xE0, 0x64, 0x04, 0x60, 0x02, 0xA1, 0xC1, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB,
+0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x85,
+0x3F, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F, 0x90,
+0x85, 0x2F, 0xE0, 0xFF, 0x90, 0x85, 0x3D, 0xE0, 0xC3, 0x9F, 0x90, 0x85, 0x43, 0xF0, 0x90, 0x85,
+0x2D, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54,
+0x07, 0x30, 0xE0, 0x6E, 0x90, 0x85, 0x43, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25, 0xE0,
+0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xC8, 0x80,
+0x51, 0x90, 0x85, 0x2D, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x85, 0x32, 0xE0, 0x54,
+0xDF, 0xF0, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x49, 0xC6, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x13,
+0x54, 0x03, 0x30, 0xE0, 0x27, 0x90, 0x85, 0x34, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB, 0xF0,
+0xE4, 0x90, 0x85, 0x42, 0xF0, 0x90, 0x85, 0x3F, 0xF0, 0x90, 0x85, 0x35, 0x74, 0x07, 0xF0, 0x90,
+0x85, 0x65, 0xE0, 0x60, 0x07, 0x90, 0x85, 0x34, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22, 0x74,
+0x6F, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x4A, 0x90, 0x05, 0x22, 0xE4, 0xF0,
+0x22, 0x90, 0x85, 0x3F, 0xE0, 0x64, 0x05, 0x60, 0x02, 0xC1, 0x4A, 0x90, 0x85, 0x31, 0xE0, 0xFF,
+0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x08, 0xD1, 0x4B, 0xBF, 0x01, 0x03, 0x12, 0x54, 0x08, 0xE4,
+0xFF, 0xD1, 0xF5, 0xD1, 0x92, 0xE4, 0x90, 0x85, 0x3F, 0xF0, 0x90, 0x85, 0x2D, 0xE0, 0xC4, 0x13,
+0x54, 0x07, 0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F, 0x90, 0x85, 0x2D,
+0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20,
+0xE0, 0x14, 0xE4, 0xFD, 0xAF, 0x4F, 0x12, 0x49, 0xC6, 0x80, 0x0B, 0xE5, 0x50, 0x60, 0x0D, 0xE4,
+0xFD, 0xAF, 0x4F, 0x12, 0x49, 0xC6, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x85, 0x30, 0xE0,
+0x30, 0xE0, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x13, 0x13, 0x13,
+0x54, 0x01, 0x30, 0xE0, 0x05, 0xE4, 0xFF, 0x12, 0x55, 0x58, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF,
+0xF0, 0xE4, 0x90, 0x86, 0x48, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, 0xE0,
+0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x86,
+0x49, 0xE0, 0x94, 0xE8, 0x90, 0x86, 0x48, 0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22, 0x7F,
+0x32, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x86, 0x48, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xF7,
+0x80, 0xC6, 0x90, 0x86, 0x2C, 0xEF, 0xF0, 0x12, 0x86, 0xB9, 0x90, 0x85, 0x30, 0xE0, 0xFF, 0xC4,
+0x13, 0x54, 0x07, 0x20, 0xE0, 0x08, 0x90, 0x86, 0x2C, 0xE0, 0xFF, 0x12, 0x50, 0x48, 0x90, 0x86,
+0x2D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x90, 0x86, 0x2C, 0xE0, 0xB4, 0x01, 0x10, 0x90,
+0x85, 0x2D, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x16, 0x80, 0x0A, 0x90,
+0x85, 0x2D, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90, 0x86, 0x2D, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x86, 0x79, 0x2D, 0x12, 0x55, 0x0D, 0x90, 0x86, 0x2C, 0xE0,
+0x90, 0x85, 0x3E, 0xF0, 0x22, 0xEF, 0x64, 0x03, 0x60, 0x02, 0xE1, 0xC3, 0x90, 0x86, 0x07, 0x74,
+0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0x13, 0x13, 0x13, 0x54,
+0x1F, 0x30, 0xE0, 0x30, 0x90, 0x86, 0x0B, 0x74, 0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0, 0xA3, 0x74,
+0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41,
+0x90, 0x86, 0x07, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3, 0x74,
+0x55, 0xF0, 0x80, 0x2D, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x17, 0x90, 0x86,
+0x07, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0,
+0xA3, 0x74, 0x5A, 0x80, 0x05, 0x90, 0x86, 0x0B, 0x74, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
+0xF0, 0x90, 0x86, 0x07, 0xE0, 0x90, 0x06, 0xC0, 0xF0, 0x90, 0x86, 0x08, 0xE0, 0x90, 0x06, 0xC1,
+0xF0, 0x90, 0x86, 0x09, 0xE0, 0x90, 0x06, 0xC2, 0xF0, 0x90, 0x86, 0x0A, 0xE0, 0x90, 0x06, 0xC3,
+0xF0, 0x90, 0x86, 0x0B, 0xE0, 0x90, 0x06, 0xC4, 0xF0, 0x90, 0x86, 0x0C, 0xE0, 0x90, 0x06, 0xC5,
+0xF0, 0x90, 0x86, 0x0D, 0xE0, 0x90, 0x06, 0xC6, 0xF0, 0x90, 0x86, 0x0E, 0xE0, 0x90, 0x06, 0xC7,
+0xF0, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x06, 0xCC, 0x30, 0xE0, 0x17,
+0xE4, 0xF0, 0x22, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xEF, 0x90, 0x06,
+0xCC, 0xB4, 0x01, 0x03, 0xE4, 0xF0, 0x22, 0x74, 0x03, 0xF0, 0x22, 0x12, 0x57, 0xF6, 0xBF, 0x01,
+0x0F, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x2E, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0,
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC, 0xEF, 0x30, 0xE0, 0x02, 0x7D,
+0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5, 0x2B, 0x90, 0x01, 0x30, 0xE5,
+0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3, 0xE5, 0x2B, 0xF0, 0x22, 0x75,
+0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32, 0x43, 0x32, 0x20, 0x90, 0x01,
+0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32, 0xF0, 0x22, 0x90, 0x00, 0xF4,
+0xE0, 0x20, 0xE3, 0x09, 0xE0, 0x7F, 0x01, 0x20, 0xE2, 0x05, 0x7F, 0x02, 0x22, 0x7F, 0x00, 0x22,
+0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30, 0xE3, 0x02, 0x7F, 0x01, 0x22, 0x90, 0x85, 0xC5, 0xE0,
+0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E, 0xFD, 0x7F, 0x33, 0x22, 0x7E,
+0xFD, 0x7F, 0x2F, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74, 0x10,
+0xF0, 0x90, 0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x85, 0x8F, 0xF0, 0xA3, 0xF0,
+0x90, 0x01, 0x98, 0xE0, 0x7F, 0x00, 0x30, 0xE4, 0x02, 0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E,
+0xC3, 0x90, 0x85, 0x90, 0xE0, 0x94, 0x88, 0x90, 0x85, 0x8F, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90,
+0x01, 0xC6, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x85, 0x8F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43,
+0xF7, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x85, 0x90, 0xE0, 0x94, 0x32, 0x90,
+0x85, 0x8F, 0xE0, 0x94, 0x00, 0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0x90,
+0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01,
+0x9C, 0x74, 0x7E, 0xF0, 0xA3, 0x74, 0x92, 0xF0, 0xA3, 0x74, 0xA0, 0xF0, 0xA3, 0x74, 0x24, 0xF0,
+0x90, 0x01, 0x9B, 0x74, 0x49, 0xF0, 0x90, 0x01, 0x9A, 0x74, 0xE0, 0xF0, 0x90, 0x01, 0x99, 0xE4,
+0xF0, 0x90, 0x01, 0x98, 0x04, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54,
+0x0C, 0x13, 0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90,
+0x85, 0x76, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01,
+0x60, 0x07, 0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3C, 0x90, 0x85, 0x76, 0x74, 0x01, 0xF0, 0xA3,
+0x74, 0x3D, 0xF0, 0x79, 0x40, 0x90, 0x85, 0x76, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E,
+0x83, 0xE0, 0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x85, 0xB1, 0xF0, 0x22, 0x90, 0x85, 0xB1,
+0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0C, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30,
+0xE0, 0x03, 0x12, 0x5F, 0xDB, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0,
+0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0,
+0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x96, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0x90, 0x01, 0x34,
+0xE0, 0x55, 0x28, 0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5,
+0x2E, 0xA3, 0xE0, 0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x41, 0x65, 0x90, 0x01,
+0x34, 0x74, 0x01, 0xF0, 0x85, 0xD1, 0x0A, 0x85, 0xD3, 0x0C, 0x85, 0xD4, 0x0D, 0x85, 0xD5, 0x0E,
+0x85, 0xD6, 0x0F, 0x85, 0xD7, 0x10, 0x85, 0xD9, 0x11, 0x85, 0xD2, 0x0B, 0x75, 0x20, 0x00, 0x75,
+0x21, 0x00, 0x75, 0x22, 0x0A, 0x75, 0x23, 0x08, 0xFB, 0x7A, 0x85, 0x79, 0xB2, 0x12, 0x56, 0x97,
+0xE5, 0x50, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x46, 0x90, 0x85, 0x72, 0xE0, 0x60, 0x37, 0x90,
+0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x12, 0x50, 0xFB, 0xEF, 0x64, 0x01,
+0x70, 0x2D, 0xF5, 0x48, 0x90, 0x85, 0x5E, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E,
+0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0,
+0x90, 0x85, 0x6E, 0xF0, 0x80, 0x09, 0x12, 0x50, 0xFB, 0xBF, 0x01, 0x03, 0x12, 0x51, 0x63, 0x90,
+0x86, 0x4B, 0xE0, 0x04, 0xF0, 0xE5, 0x2C, 0x20, 0xE1, 0x02, 0x61, 0x07, 0x90, 0x01, 0x34, 0x74,
+0x02, 0xF0, 0x90, 0xFD, 0x10, 0x74, 0x7F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x30, 0xE5, 0x0B, 0x75,
+0x58, 0x88, 0x75, 0x59, 0x0F, 0x75, 0x5A, 0x0F, 0x80, 0x09, 0x75, 0x58, 0xC0, 0x75, 0x59, 0x08,
+0x75, 0x5A, 0x07, 0x90, 0x04, 0x7F, 0xE0, 0x55, 0x5A, 0xF5, 0x12, 0x90, 0x04, 0x7E, 0xE0, 0x55,
+0x5A, 0xF5, 0x13, 0x65, 0x12, 0x60, 0x60, 0xE4, 0xFF, 0xE5, 0x12, 0x75, 0xF0, 0x08, 0xA4, 0x25,
+0x58, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x15, 0x2F,
+0xF8, 0xA6, 0x06, 0x0F, 0xBF, 0x08, 0xE2, 0x75, 0x20, 0x00, 0x75, 0x21, 0x00, 0x75, 0x22, 0x15,
+0x75, 0x23, 0x08, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xA9, 0x12, 0x56, 0x97, 0x90, 0x85, 0xA9, 0xE0,
+0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0xB1, 0xBF, 0xE5, 0x12, 0x24, 0x01,
+0xFF, 0xE4, 0x33, 0xFE, 0xAD, 0x59, 0x7C, 0x00, 0x12, 0x1F, 0x4E, 0xAF, 0x05, 0x8F, 0x12, 0x90,
+0x04, 0x7F, 0xEF, 0xF0, 0xB5, 0x13, 0xA0, 0xE5, 0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x34, 0x74,
+0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90, 0x01, 0x34, 0x74, 0x10, 0xF0, 0x43, 0x14, 0x10,
+0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF, 0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54, 0xDF, 0xF0,
+0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8, 0x00, 0x75, 0xE8, 0x00, 0x12, 0x53, 0x66, 0x90,
+0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x53, 0x99, 0x80, 0xFE, 0xE5, 0x2C, 0x30, 0xE6, 0x06,
+0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0x81, 0x0F, 0x90, 0x85, 0xC4,
+0x74, 0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x85, 0xC1, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90,
+0x05, 0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x12, 0x42, 0x20, 0x90,
+0x85, 0x45, 0xE0, 0x20, 0xE0, 0x02, 0x81, 0x06, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF,
+0x12, 0x50, 0x48, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x85, 0x45, 0xE0, 0xC4, 0x13,
+0x54, 0x07, 0xFF, 0xE0, 0xFE, 0xC3, 0x13, 0x54, 0x0F, 0xC3, 0x9F, 0x40, 0x30, 0xE0, 0x54, 0xFE,
+0xF0, 0xE0, 0x54, 0xE1, 0xF0, 0x90, 0x85, 0x4A, 0x12, 0x44, 0x45, 0x90, 0x81, 0x57, 0x12, 0x1F,
+0xC9, 0x7F, 0x60, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x85, 0x46, 0x12, 0x44, 0x45, 0x90, 0x81,
+0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x80, 0x1B, 0x90, 0x85, 0x45,
+0xE0, 0xFF, 0xC3, 0x13, 0x54, 0x0F, 0xFE, 0xEF, 0x54, 0xE1, 0xFF, 0xEE, 0x04, 0x54, 0x0F, 0xFE,
+0x25, 0xE0, 0x4F, 0xF0, 0x80, 0x02, 0xD1, 0x14, 0xB1, 0x84, 0x90, 0x85, 0xC4, 0xE4, 0xF0, 0xE5,
+0x2E, 0x30, 0xE1, 0x41, 0x90, 0x01, 0x36, 0x74, 0x02, 0xF0, 0xF1, 0x0B, 0x31, 0x27, 0x90, 0x85,
+0x75, 0xE0, 0x60, 0x1D, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x16, 0x7D, 0x02, 0x7F, 0x02, 0x12,
+0x3A, 0x22, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x85, 0x70, 0xE0, 0x90, 0x05, 0x73,
+0xF0, 0x05, 0x08, 0xE5, 0x08, 0xC3, 0x94, 0xFF, 0x40, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE,
+0xF0, 0xE0, 0x44, 0x01, 0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x43, 0x90, 0x01, 0x36, 0x74, 0x04, 0xF0,
+0x12, 0x4B, 0xD0, 0x90, 0x85, 0x75, 0xE0, 0x60, 0x34, 0x90, 0x85, 0x70, 0xE0, 0xFF, 0x90, 0x85,
+0x59, 0xE0, 0x6F, 0x70, 0x28, 0x90, 0x85, 0x70, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x90, 0x01, 0x3F,
+0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22,
+0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x85, 0x59, 0xE0, 0x14, 0xF0, 0xE5, 0x2E, 0x30,
+0xE3, 0x34, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0, 0xE5, 0x4D, 0x64, 0x01, 0x70, 0x28, 0xE5, 0x50,
+0x60, 0x24, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x75, 0x48, 0x00,
+0x90, 0x85, 0x64, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77,
+0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4, 0x2B, 0x90, 0x01, 0x36, 0x74, 0x10,
+0xF0, 0xE5, 0x4D, 0xB4, 0x01, 0x20, 0xE5, 0x50, 0x60, 0x1C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90,
+0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x85, 0x73, 0xE4, 0xF0, 0x53, 0x51, 0xFD, 0xE5, 0x51, 0x54,
+0x07, 0x70, 0x03, 0x12, 0x51, 0x63, 0xE5, 0x2E, 0x30, 0xE5, 0x25, 0x90, 0x01, 0x36, 0x74, 0x20,
+0xF0, 0xE5, 0x4D, 0xB4, 0x01, 0x1A, 0xE5, 0x50, 0x60, 0x16, 0x90, 0x85, 0x72, 0xE0, 0x64, 0x02,
+0x60, 0x0B, 0xE5, 0x4E, 0x64, 0x0C, 0x60, 0x08, 0x12, 0x50, 0xA5, 0x80, 0x03, 0x12, 0x4F, 0xD4,
+0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40, 0xF0, 0xE5, 0x4D, 0xB4, 0x01, 0x10,
+0xE5, 0x50, 0x60, 0x0C, 0x53, 0x51, 0xFE, 0xE5, 0x51, 0x54, 0x07, 0x70, 0x03, 0x12, 0x51, 0x63,
+0xE5, 0x2F, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x12, 0x4F, 0x57, 0x74, 0x96,
+0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0,
+0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0,
+0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x86, 0x3E, 0xE0, 0x30, 0xE0, 0x2E, 0xE5, 0x4D, 0xB4, 0x01, 0x29,
+0x90, 0x86, 0x3D, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x0B, 0x90, 0x86, 0x40, 0xE0, 0x04, 0xF0,
+0xE4, 0x90, 0x86, 0x3D, 0xF0, 0x90, 0x86, 0x40, 0xE0, 0xFF, 0x90, 0x86, 0x3F, 0xE0, 0xD3, 0x9F,
+0x50, 0x07, 0xB1, 0xBA, 0xE4, 0x90, 0x86, 0x40, 0xF0, 0x22, 0xE4, 0xFF, 0x02, 0x4D, 0x84, 0x90,
+0x85, 0x76, 0xE0, 0x54, 0xF0, 0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A,
+0x00, 0x79, 0x15, 0x90, 0x86, 0x1E, 0x12, 0x44, 0x89, 0x0B, 0x7A, 0x85, 0x79, 0x76, 0x02, 0x56,
+0xE6, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x12, 0x1E, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x86, 0x3E,
+0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xE0, 0x30, 0xE0, 0x02, 0xB1, 0xBA, 0x90, 0x85, 0x9A, 0x12, 0x44,
+0x69, 0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
+0x86, 0x3F, 0xF0, 0x22, 0x90, 0x85, 0x2D, 0xE0, 0x30, 0xE0, 0x6E, 0x7F, 0x01, 0x12, 0x5E, 0xF5,
+0x90, 0x85, 0x31, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x02, 0xD1, 0x8A, 0x7F, 0x01,
+0x12, 0x5E, 0x92, 0x90, 0x85, 0x2D, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x29, 0x90, 0x85,
+0x2D, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1F, 0x90, 0x85, 0x32, 0xE0, 0x44, 0x20, 0xF0, 0x90,
+0x85, 0x65, 0xE0, 0x60, 0x06, 0x7D, 0x01, 0x7F, 0x04, 0x80, 0x09, 0x90, 0x05, 0x22, 0xE4, 0xF0,
+0x7D, 0x01, 0x7F, 0x0C, 0x12, 0x49, 0xC6, 0x90, 0x85, 0x65, 0xE0, 0x90, 0x05, 0x22, 0x60, 0x05,
+0x74, 0x6F, 0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54,
+0x01, 0x30, 0xE0, 0x05, 0x7F, 0x01, 0x12, 0x55, 0x58, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
+0xD0, 0x90, 0x85, 0xEF, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x85, 0xF3, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74,
+0xFF, 0xF0, 0x90, 0x85, 0x63, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x85,
+0x56, 0xE0, 0x60, 0x14, 0x12, 0x50, 0xFB, 0xBF, 0x01, 0x0B, 0x90, 0x85, 0x2D, 0xE0, 0xFF, 0xC4,
+0x54, 0x0F, 0x30, 0xE0, 0x03, 0x12, 0x4F, 0x15, 0x90, 0x85, 0x45, 0xE0, 0x20, 0xE0, 0x24, 0x90,
+0x85, 0x60, 0xE0, 0x60, 0x1E, 0x7F, 0x01, 0x12, 0x50, 0x48, 0x90, 0x85, 0x74, 0xE0, 0x60, 0x13,
+0x90, 0x85, 0xF3, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xF3,
+0x12, 0x55, 0x0D, 0x12, 0x53, 0x92, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x85, 0x76, 0xF0,
+0x90, 0x85, 0x2D, 0xE0, 0x20, 0xE0, 0x02, 0xE1, 0xAD, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x13,
+0x54, 0x03, 0x30, 0xE0, 0x2A, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x39, 0xE0, 0xF5, 0x49, 0xE4, 0xFB,
+0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x85,
+0x35, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x85, 0x41, 0xF0, 0x90, 0x85, 0x3F, 0xF0, 0x80, 0x20, 0xE4,
+0xF5, 0x48, 0x90, 0x85, 0x76, 0xE0, 0xFF, 0x90, 0x85, 0x2E, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4,
+0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x85, 0x3F, 0x74, 0x01, 0xF0, 0x90,
+0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x85, 0x3E, 0x74, 0x01, 0xF0, 0x90, 0x85, 0x65, 0xE0, 0x60,
+0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x85,
+0x2D, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x0F, 0x90, 0x85, 0x2D, 0xE0, 0xFF, 0x13, 0x13,
+0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x50, 0xA5, 0xE4, 0x90, 0x86, 0x4B, 0xF0, 0x22, 0xC0, 0xE0,
+0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x7D,
+0xAE, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x67, 0xFF, 0xA3, 0xF0, 0x53, 0x91, 0xEF, 0x90, 0x00,
+0x51, 0xE0, 0xFE, 0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90, 0x00, 0x52, 0xE0, 0xFE, 0x90,
+0x00, 0x56, 0xE0, 0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06, 0x90, 0x00, 0x55, 0x74, 0x10,
+0xF0, 0xE5, 0x3D, 0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20, 0xF0, 0xE5, 0x3D, 0x30, 0xE6,
+0x06, 0x90, 0x00, 0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7, 0x06, 0x90, 0x00, 0x55, 0x74,
+0x80, 0xF0, 0xE5, 0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74, 0x01, 0xF0, 0xE5, 0x3E, 0x30,
+0xE1, 0x06, 0x90, 0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30, 0xE2, 0x06, 0x90, 0x00, 0x56,
+0x74, 0x04, 0xF0, 0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56, 0x74, 0x08, 0xF0, 0x90, 0x01,
+0xC4, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82,
+0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75,
+0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06,
+0xC0, 0x07, 0x75, 0x5B, 0x00, 0x90, 0x01, 0xC4, 0x74, 0x55, 0xF0, 0x74, 0x68, 0xA3, 0xF0, 0x53,
+0x91, 0xDF, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0, 0x55, 0x31, 0xF5, 0x35,
+0xA3, 0xE0, 0x55, 0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37, 0xE5, 0x34, 0x30, 0xE0,
+0x06, 0x90, 0x01, 0x3C, 0x74, 0x01, 0xF0, 0xE5, 0x34, 0x30, 0xE1, 0x10, 0x90, 0x01, 0x3C, 0x74,
+0x02, 0xF0, 0x90, 0x85, 0x2D, 0xE0, 0x20, 0xE0, 0x03, 0x12, 0x45, 0xD6, 0xE5, 0x34, 0x30, 0xE2,
+0x36, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE0, 0x21, 0x75, 0x48,
+0x00, 0x90, 0x85, 0x5E, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39,
+0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x08, 0x90,
+0x85, 0x6E, 0xE4, 0xF0, 0x12, 0x51, 0x63, 0xE5, 0x34, 0x30, 0xE3, 0x36, 0x90, 0x01, 0x3C, 0x74,
+0x08, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x21, 0x75, 0x48, 0x00, 0x90, 0x85, 0x5E, 0xE0,
+0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74,
+0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x80, 0x08, 0x90, 0x85, 0x6B, 0xE4, 0xF0, 0x12,
+0x51, 0x63, 0xE5, 0x34, 0x30, 0xE4, 0x3C, 0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x90, 0x85, 0x45,
+0xE0, 0x30, 0xE0, 0x24, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF, 0x12, 0x50, 0x48, 0x90,
+0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F,
+0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x80, 0x03, 0x12, 0x59, 0xA6, 0x90, 0x85, 0x4E, 0xE0, 0x60,
+0x02, 0x51, 0xE8, 0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3C, 0x74, 0x20, 0xF0, 0xE5, 0x35,
+0x30, 0xE0, 0x18, 0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90, 0x00, 0x83, 0xE0, 0xF5, 0x4F, 0x90,
+0x01, 0xBB, 0xE5, 0x4F, 0xF0, 0x12, 0x51, 0x2C, 0x12, 0x51, 0x63, 0xE5, 0x35, 0x30, 0xE2, 0x06,
+0x90, 0x01, 0x3D, 0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3D, 0x74, 0x10,
+0xF0, 0x90, 0x85, 0xC0, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, 0xF0,
+0x90, 0x05, 0xFD, 0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x01,
+0xF0, 0xE5, 0x36, 0x30, 0xE1, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0, 0xE5, 0x36, 0x30, 0xE3,
+0x09, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0x12, 0x84, 0xF2, 0xE5, 0x36, 0x30, 0xE4, 0x06, 0x90,
+0x01, 0x3E, 0x74, 0x10, 0xF0, 0xE5, 0x36, 0x30, 0xE2, 0x76, 0x90, 0x01, 0x3E, 0x74, 0x04, 0xF0,
+0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE7, 0x13, 0x74, 0x80, 0xF0, 0x90, 0x07, 0x95, 0x74, 0x04, 0xF0,
+0xA3, 0xE0, 0x44, 0x04, 0xF0, 0xE4, 0xFF, 0x12, 0x55, 0x58, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE6,
+0x12, 0x74, 0x40, 0xF0, 0x90, 0x07, 0x7C, 0xE0, 0xB4, 0x06, 0x08, 0x90, 0x07, 0x80, 0xE0, 0xFF,
+0x12, 0x84, 0x9C, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE5, 0x14, 0x74, 0x20, 0xF0, 0xE4, 0xFF, 0x12,
+0x55, 0x58, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x07,
+0x95, 0xE0, 0x30, 0xE2, 0x0D, 0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x54, 0xFB, 0xF0, 0x7F, 0x01, 0x12,
+0x55, 0x58, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE0, 0x07, 0x74, 0x01, 0xF0, 0xFF, 0x12, 0x55, 0x58,
+0xE5, 0x36, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x20, 0xF0, 0xE5, 0x36, 0x30, 0xE6, 0x06,
+0x90, 0x01, 0x3E, 0x74, 0x40, 0xF0, 0xE5, 0x36, 0x30, 0xE7, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x80,
+0xF0, 0xE5, 0x37, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x43, 0x14, 0x80, 0xE5,
+0x37, 0x30, 0xE4, 0x1E, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0x12, 0x45, 0x09, 0x90, 0x85, 0x70,
+0xE0, 0x90, 0x05, 0x73, 0xF0, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x12, 0x66, 0x14, 0x12,
+0x65, 0x84, 0x74, 0x55, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x68, 0xA3, 0xF0, 0xD0, 0x07, 0xD0,
+0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0,
+0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x01, 0x63, 0xE4, 0xF0, 0x90, 0x81, 0x57,
+0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x7F, 0x01,
+0x02, 0x55, 0x58, 0x12, 0x1E, 0xF6, 0x90, 0x85, 0x4E, 0xF0, 0x70, 0x02, 0x51, 0xE8, 0x22, 0x90,
+0x85, 0x97, 0x12, 0x44, 0x89, 0xEF, 0x12, 0x44, 0x92, 0x6B, 0xAC, 0x01, 0x6B, 0xA4, 0x02, 0x6B,
+0xF3, 0x03, 0x6B, 0xFC, 0x10, 0x6C, 0x04, 0x11, 0x6C, 0x0C, 0x12, 0x6C, 0x14, 0x16, 0x6C, 0x1E,
+0x17, 0x6C, 0x28, 0x18, 0x6C, 0x32, 0x19, 0x6C, 0x3B, 0x1D, 0x6C, 0x45, 0x1E, 0x6C, 0x50, 0x21,
+0x6C, 0x58, 0x22, 0x6C, 0x60, 0x23, 0x6C, 0x68, 0x24, 0x6C, 0x70, 0x25, 0x6C, 0x78, 0x26, 0x6C,
+0x80, 0x27, 0x6C, 0x88, 0x28, 0x6C, 0x90, 0x29, 0x6B, 0xB5, 0x2D, 0x6B, 0xBE, 0x2E, 0x6C, 0x99,
+0x2F, 0x6C, 0xF9, 0x30, 0x6C, 0xA9, 0x32, 0x6C, 0xA1, 0x33, 0x6B, 0xD0, 0x34, 0x6C, 0xB1, 0x36,
+0x6C, 0xBA, 0x37, 0x6C, 0xC3, 0x38, 0x6C, 0xCB, 0x3A, 0x6B, 0xC7, 0x3B, 0x6C, 0xD4, 0x3E, 0x6C,
+0xDC, 0x3F, 0x6C, 0xE5, 0x41, 0x6D, 0x02, 0x46, 0x6B, 0xD8, 0x47, 0x6B, 0xEA, 0x48, 0x6B, 0xE1,
+0x49, 0x6D, 0x1C, 0x4B, 0x6D, 0x0B, 0x4E, 0x6C, 0xEE, 0x52, 0x6C, 0xF1, 0x53, 0x6D, 0x13, 0x54,
+0x00, 0x00, 0x6D, 0x25, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0xED, 0x90, 0x85, 0x97, 0x12,
+0x44, 0x69, 0x02, 0x77, 0x78, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x78, 0x59, 0x90, 0x85,
+0x97, 0x12, 0x44, 0x69, 0x02, 0x78, 0xA1, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x78, 0xDA,
+0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0xF3, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x79,
+0x0C, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x79, 0xCC, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69,
+0x02, 0x80, 0xE2, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x79, 0xDD, 0x90, 0x85, 0x97, 0x12,
+0x44, 0x69, 0xA1, 0x2D, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xA1, 0x33, 0x90, 0x85, 0x97, 0x12,
+0x44, 0x69, 0xA1, 0x39, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x7F, 0x01, 0x80, 0x2F, 0x90, 0x85,
+0x97, 0x12, 0x44, 0x69, 0x7F, 0x02, 0x80, 0x25, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x7F, 0x03,
+0x80, 0x1B, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x7B, 0x07, 0x90, 0x85, 0x97, 0x12, 0x44,
+0x69, 0xE4, 0xFF, 0x80, 0x08, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x7F, 0x04, 0x02, 0x7A, 0x25,
+0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xC1, 0xE5, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xC1, 0xFD,
+0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0x15, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0x2D,
+0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0x45, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0x5D,
+0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0x75, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0x8D,
+0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x7B, 0x3F, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xC1,
+0xD6, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0xA5, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1,
+0xBD, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x7B, 0x67, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69,
+0x02, 0x7D, 0x1A, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xA1, 0xCC, 0x90, 0x85, 0x97, 0x12, 0x44,
+0x69, 0x02, 0x7D, 0x2C, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0xD5, 0x90, 0x85, 0x97, 0x12,
+0x44, 0x69, 0x02, 0x80, 0x43, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x80, 0x7E, 0x02, 0x80,
+0x97, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x61, 0x03, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02,
+0x65, 0xE1, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x73, 0xE3, 0x90, 0x85, 0x97, 0x12, 0x44,
+0x69, 0xA1, 0xEE, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x80, 0xEA, 0x90, 0x85, 0x97, 0x12,
+0x44, 0x69, 0x02, 0x81, 0x6C, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x7D, 0x05, 0x7F,
+0x0B, 0x80, 0x10, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x0A, 0x7D, 0x01, 0x7F, 0x0D, 0x80, 0x04, 0x7D,
+0x03, 0x7F, 0x11, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x86, 0x41, 0x12, 0x44, 0x89,
+0xE4, 0xFE, 0x90, 0x00, 0xA3, 0xE0, 0x54, 0xF8, 0x44, 0x05, 0xF0, 0x90, 0x00, 0xA0, 0xE0, 0x54,
+0x0F, 0x64, 0x04, 0x70, 0x5A, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x49, 0x90, 0xFD, 0x50, 0xEF,
+0xF0, 0xA3, 0xED, 0xF0, 0xEE, 0xC3, 0x9D, 0x50, 0x1E, 0x90, 0x86, 0x41, 0x12, 0x44, 0x69, 0x8E,
+0x82, 0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x52, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD,
+0xF5, 0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDD, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x0F, 0x74, 0x52, 0x2E,
+0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5, 0x83, 0xE4, 0xF0, 0x0E, 0x80, 0xEB, 0x90, 0xFD, 0x58, 0x74,
+0x01, 0xF0, 0xFF, 0x80, 0x12, 0x90, 0x01, 0x43, 0xE0, 0x04, 0xF0, 0x7F, 0x02, 0x80, 0x08, 0x90,
+0x01, 0x42, 0xE0, 0x04, 0xF0, 0x7F, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x85, 0x9A, 0x12,
+0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D, 0x01,
+0x7F, 0x23, 0xB1, 0x43, 0xEF, 0xB4, 0x03, 0x05, 0x7F, 0xFF, 0x12, 0x75, 0x82, 0x22, 0x90, 0x85,
+0x9A, 0x12, 0x44, 0x89, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x85, 0x9D, 0x74, 0x0A,
+0xF0, 0x90, 0x85, 0x9D, 0xE0, 0xFF, 0x70, 0x02, 0xC1, 0xD1, 0x90, 0xFD, 0x58, 0xE0, 0x30, 0xE0,
+0x02, 0xC1, 0xC8, 0x90, 0xFD, 0x50, 0x74, 0x86, 0xF0, 0xA3, 0xE4, 0xF0, 0xEF, 0xB4, 0x0A, 0x05,
+0xA3, 0x74, 0x10, 0x80, 0x75, 0x90, 0x85, 0x9D, 0xE0, 0xFF, 0xB4, 0x09, 0x0E, 0x90, 0xFD, 0x52,
+0x74, 0x0C, 0xF0, 0x90, 0xFD, 0x54, 0x74, 0x83, 0xF0, 0x80, 0x77, 0xEF, 0xB4, 0x08, 0x0D, 0x90,
+0xFD, 0x52, 0xE4, 0xF0, 0x90, 0xFD, 0x54, 0x74, 0x1D, 0xF0, 0x80, 0x66, 0xEF, 0xB4, 0x07, 0x07,
+0x90, 0xFD, 0x52, 0x74, 0x04, 0x80, 0x43, 0xEF, 0xB4, 0x06, 0x0E, 0x90, 0xFD, 0x52, 0x74, 0x20,
+0xF0, 0x90, 0xFD, 0x54, 0x74, 0x70, 0xF0, 0x80, 0x49, 0xEF, 0xB4, 0x05, 0x0E, 0x90, 0xFD, 0x52,
+0x74, 0x0C, 0xF0, 0x90, 0xFD, 0x54, 0x74, 0x03, 0xF0, 0x80, 0x37, 0xEF, 0xB4, 0x04, 0x07, 0x90,
+0xFD, 0x52, 0x74, 0x24, 0x80, 0x14, 0xEF, 0xB4, 0x03, 0x07, 0x90, 0xFD, 0x52, 0x74, 0x30, 0x80,
+0x09, 0xEF, 0xB4, 0x02, 0x0D, 0x90, 0xFD, 0x52, 0x74, 0x28, 0xF0, 0x90, 0xFD, 0x54, 0xE4, 0xF0,
+0x80, 0x10, 0xEF, 0xB4, 0x01, 0x0C, 0x90, 0xFD, 0x52, 0x74, 0x10, 0xF0, 0x90, 0xFD, 0x54, 0x74,
+0x80, 0xF0, 0x90, 0xFD, 0x53, 0xE4, 0xF0, 0x90, 0xFD, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
+0x04, 0xF0, 0x90, 0x85, 0x9D, 0xE0, 0x14, 0xF0, 0x7F, 0x46, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xC1,
+0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0xE9, 0x24, 0x01, 0xF9, 0xE4, 0x3A,
+0xFA, 0x7D, 0x04, 0xA1, 0x43, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44,
+0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D, 0x01, 0x7F, 0x17, 0xA1, 0x43, 0x90, 0x85, 0x9A,
+0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D,
+0x01, 0x7F, 0x18, 0xA1, 0x43, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44,
+0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D, 0x01, 0x7F, 0x19, 0xA1, 0x43, 0x90, 0x85, 0x9A,
+0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D,
+0x01, 0x7F, 0x1A, 0xA1, 0x43, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44,
+0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D, 0x01, 0x7F, 0x1B, 0xA1, 0x43, 0x90, 0x85, 0x9A,
+0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D,
+0x01, 0x7F, 0x1C, 0xA1, 0x43, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44,
+0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D, 0x03, 0x7F, 0x1D, 0xA1, 0x43, 0x90, 0x85, 0x9A,
+0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D,
+0x01, 0x7F, 0x1E, 0xA1, 0x43, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44,
+0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D, 0x01, 0x7F, 0x1F, 0xA1, 0x43, 0x90, 0x85, 0x9A,
+0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D,
+0x01, 0x7F, 0x20, 0xA1, 0x43, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44,
+0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D, 0x01, 0x7F, 0x24, 0xA1, 0x43, 0x12, 0x1E, 0xF6,
+0xF5, 0x4D, 0x22, 0x90, 0x85, 0x9A, 0x02, 0x44, 0x89, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0,
+0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04,
+0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x53, 0x91, 0xBF, 0x90, 0xFD, 0x68, 0xE0, 0x20, 0xE0, 0x02,
+0x41, 0xB9, 0x90, 0x85, 0xA6, 0xE0, 0x70, 0x16, 0x90, 0x00, 0x2E, 0xE0, 0x90, 0x84, 0xA7, 0xF0,
+0x90, 0x00, 0x2D, 0xE0, 0x90, 0x84, 0xA8, 0xF0, 0x90, 0x85, 0xA6, 0x74, 0x01, 0xF0, 0x90, 0xFD,
+0x60, 0xE0, 0x54, 0x3F, 0xD3, 0x94, 0x09, 0x50, 0x02, 0x91, 0x92, 0x90, 0xFD, 0x60, 0xE0, 0x64,
+0x0E, 0x60, 0x02, 0x01, 0xF9, 0x90, 0x84, 0x9C, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x20,
+0xE0, 0x02, 0x01, 0xF9, 0x90, 0xFD, 0x62, 0xE0, 0x54, 0xC0, 0xFE, 0x90, 0x07, 0x90, 0xE0, 0x54,
+0x3F, 0x4E, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x07, 0x91, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90,
+0x07, 0x92, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x07, 0x93, 0xF0, 0x90, 0x07, 0x95, 0x74, 0x01,
+0xF0, 0xEF, 0x20, 0xE0, 0x44, 0x90, 0x84, 0x9C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x19,
+0x90, 0x07, 0x78, 0x12, 0x58, 0x8E, 0x90, 0x84, 0x9C, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x49,
+0x90, 0x07, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x80, 0x40, 0x90, 0x84, 0x9C, 0xE0, 0xFF, 0xC3, 0x13,
+0x30, 0xE0, 0x11, 0xE4, 0xFF, 0x12, 0x55, 0x58, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3,
+0xE0, 0x44, 0x01, 0xF0, 0x90, 0x07, 0x78, 0x80, 0x14, 0x90, 0x84, 0x9C, 0xE0, 0xFF, 0x13, 0x13,
+0x54, 0x3F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x12, 0x58, 0x8E, 0x80, 0x0C, 0xE0, 0x44, 0x10,
+0xF0, 0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x0F, 0x0A,
+0x90, 0xFD, 0x62, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x71, 0x4D, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x15,
+0x70, 0x76, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x85, 0x81, 0xF0, 0xE0, 0x30, 0xE6, 0x1C, 0xF4, 0x54,
+0x3F, 0x04, 0xFF, 0x90, 0x84, 0xA7, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0xC3, 0x9F, 0x90, 0x85, 0x80,
+0xF0, 0xD3, 0x94, 0x3F, 0x40, 0x20, 0xE4, 0xF0, 0x80, 0x1C, 0x90, 0x84, 0xA7, 0xE0, 0x13, 0x13,
+0x54, 0x3F, 0xFF, 0x90, 0x85, 0x81, 0xE0, 0x54, 0x3F, 0x2F, 0x90, 0x85, 0x80, 0xF0, 0xD3, 0x94,
+0x3F, 0x40, 0x03, 0x74, 0x3F, 0xF0, 0x90, 0x85, 0x80, 0xE0, 0xFF, 0x90, 0x01, 0xE7, 0xF0, 0xEF,
+0x54, 0x30, 0xC4, 0x54, 0x0F, 0xFF, 0x90, 0x85, 0x80, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x4F,
+0x90, 0x85, 0x82, 0xF0, 0x90, 0x00, 0x2E, 0xF0, 0xEE, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x84, 0xA8,
+0xE0, 0x54, 0x0F, 0x4F, 0x90, 0x00, 0x2D, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x21, 0x07, 0x90,
+0xFD, 0x62, 0xE0, 0xFF, 0x51, 0xD4, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x22, 0x02, 0x51, 0xFC, 0x90,
+0xFD, 0x60, 0xE0, 0x64, 0x23, 0x70, 0x7A, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x85, 0x44, 0x30, 0xE0,
+0x05, 0x74, 0x01, 0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x30, 0xE1, 0x5B, 0x90,
+0x85, 0x45, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x7F, 0x60, 0x7E, 0x08,
+0x12, 0x2C, 0x6E, 0x90, 0x85, 0x4A, 0x12, 0x1F, 0xC9, 0xE4, 0xFF, 0x12, 0x50, 0x48, 0x7F, 0x70,
+0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x85, 0x46, 0x12, 0x1F, 0xC9, 0x90, 0x81, 0x57, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x01, 0xBE, 0xE0,
+0x04, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x85, 0x45, 0x30, 0xE2, 0x08, 0xE0, 0x54, 0x1F, 0x44,
+0x20, 0xF0, 0x80, 0x06, 0xE0, 0x54, 0x1F, 0x44, 0x60, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0xFF, 0xB1,
+0x82, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x24, 0x02, 0x71, 0x24, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x25,
+0x13, 0x90, 0xFD, 0x62, 0xE0, 0x60, 0x0D, 0x90, 0x85, 0x34, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x85,
+0x3C, 0x74, 0x04, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x26, 0x04, 0x7F, 0x01, 0x91, 0xFE, 0x90,
+0xFD, 0x60, 0xE0, 0xB4, 0x30, 0x07, 0xE4, 0xFB, 0xFD, 0x7F, 0x01, 0x71, 0x78, 0x90, 0x85, 0x4E,
+0xE0, 0x60, 0x4F, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x31, 0x70, 0x47, 0x90, 0xFD, 0x62, 0xE0, 0x30,
+0xE0, 0x36, 0x90, 0x01, 0x63, 0xE4, 0xF0, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0xE4, 0xFF, 0x12, 0x50, 0x48, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5,
+0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0xE4, 0xFF, 0x12, 0x55, 0x58,
+0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x80, 0x0A, 0x90, 0xFD, 0x62, 0xE0, 0x30, 0xE1, 0x03, 0x12,
+0x6A, 0xE8, 0x90, 0xFD, 0x68, 0xE0, 0x44, 0x01, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0,
+0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0,
+0xF0, 0xD0, 0xE0, 0x32, 0xAD, 0x07, 0x90, 0x85, 0x83, 0xE0, 0x54, 0xF0, 0x44, 0x09, 0xF0, 0x54,
+0x0F, 0x44, 0x10, 0xF0, 0x90, 0x85, 0x85, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0x85, 0x90,
+0x86, 0x1E, 0x12, 0x44, 0x89, 0x7A, 0x85, 0x79, 0x83, 0x02, 0x56, 0xE6, 0x90, 0x00, 0x75, 0xE0,
+0x44, 0x01, 0xF0, 0x7F, 0x01, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0x74, 0x03, 0xF0,
+0x7F, 0x02, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0xE4, 0xF0, 0x90, 0x00, 0x75, 0xE0,
+0x54, 0xFE, 0xF0, 0x22, 0x90, 0x85, 0x83, 0xE0, 0x54, 0xF0, 0x44, 0x0D, 0xF0, 0x54, 0x0F, 0x44,
+0x10, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x85, 0x85, 0xF0, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0x85,
+0x90, 0x86, 0x1E, 0x12, 0x44, 0x89, 0x7A, 0x85, 0x79, 0x83, 0x02, 0x56, 0xE6, 0xAE, 0x07, 0x90,
+0x85, 0x83, 0xE0, 0x54, 0xF0, 0x44, 0x04, 0xF0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90, 0x85, 0x85,
+0xEE, 0xF0, 0xA3, 0xED, 0xF0, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0x85, 0x90, 0x86, 0x1E, 0x12, 0x44,
+0x89, 0x7A, 0x85, 0x79, 0x83, 0x02, 0x56, 0xE6, 0xAC, 0x07, 0x90, 0x85, 0xDE, 0xE0, 0x44, 0x0F,
+0xF0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0x85, 0xE0, 0xEC, 0xF0, 0x60, 0x32, 0x90, 0xFD, 0x63,
+0xE0, 0x90, 0x85, 0xE1, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0x90, 0x85, 0xE2, 0xF0, 0x90, 0xFD, 0x64,
+0xE0, 0x90, 0x85, 0xE3, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x85, 0xE4, 0xF0, 0x90, 0xFD, 0x66,
+0xE0, 0x90, 0x85, 0xE5, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x85, 0xE6, 0xF0, 0x80, 0x11, 0x90,
+0x85, 0xE1, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
+0x7B, 0x01, 0x7A, 0x85, 0x79, 0xE0, 0x90, 0x86, 0x1E, 0x12, 0x44, 0x89, 0x7A, 0x85, 0x79, 0xDE,
+0x02, 0x56, 0xE6, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x1E, 0xF6, 0x90, 0x85, 0x9A,
+0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x9B, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F,
+0x0F, 0x90, 0x85, 0x9C, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x9D, 0xF0, 0x90,
+0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x9E, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0xFD,
+0x58, 0xE0, 0x20, 0xE0, 0x14, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0x9A, 0x7F, 0x30, 0x91, 0x48, 0x90,
+0x85, 0x9A, 0xE0, 0xFB, 0x7D, 0x01, 0xE4, 0x80, 0x07, 0x90, 0x85, 0x9A, 0xE0, 0xFB, 0xE4, 0xFD,
+0xFF, 0x71, 0x78, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x85, 0xA1, 0x12, 0x44, 0x89, 0xE4, 0xFE, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x2F, 0x90, 0xFD,
+0x50, 0xEF, 0xF0, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x1E, 0x90, 0x85, 0xA1, 0x12, 0x44, 0x69, 0x8E,
+0x82, 0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x51, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD,
+0xF5, 0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDC, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0x90, 0x85, 0x83, 0xE0, 0x54, 0xF0, 0x44, 0x0A, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90,
+0x85, 0x85, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x85, 0x86, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90,
+0x85, 0x87, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x85, 0x88, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90,
+0x85, 0x89, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90, 0x85, 0x83, 0x30, 0xE6, 0x08, 0xE0, 0x54, 0x0F,
+0x44, 0x50, 0xF0, 0x80, 0x16, 0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90,
+0x85, 0x8A, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x85, 0x8B, 0xF0, 0x7B, 0x01, 0x7A, 0x85, 0x79,
+0x85, 0x90, 0x86, 0x1E, 0x12, 0x44, 0x89, 0x7A, 0x85, 0x79, 0x83, 0x02, 0x56, 0xE6, 0xAD, 0x07,
+0x90, 0x85, 0x83, 0xE0, 0x54, 0xF0, 0x44, 0x0E, 0xF0, 0x54, 0x0F, 0xF0, 0x90, 0xFD, 0x62, 0xE0,
+0x90, 0x85, 0x86, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x85, 0x87, 0xF0, 0x90, 0xFD, 0x64, 0xE0,
+0x90, 0x85, 0x88, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x85, 0x89, 0xF0, 0x90, 0xFD, 0x66, 0xE0,
+0x90, 0x85, 0x8A, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x85, 0x8B, 0xF0, 0xED, 0xB4, 0x01, 0x11,
+0x90, 0x85, 0x83, 0xE0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90, 0x85, 0x85, 0x74, 0x01, 0xF0, 0x80,
+0x13, 0xED, 0xB4, 0x02, 0x0F, 0x90, 0x85, 0x83, 0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0x85,
+0x85, 0x74, 0x02, 0xF0, 0x90, 0x85, 0x83, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x60, 0x13, 0x7B, 0x01,
+0x7A, 0x85, 0x79, 0x85, 0x90, 0x86, 0x1E, 0x12, 0x44, 0x89, 0x7A, 0x85, 0x79, 0x83, 0x12, 0x56,
+0xE6, 0x22, 0xAD, 0x07, 0x90, 0x85, 0xFF, 0xE0, 0x54, 0xF0, 0x44, 0x0C, 0xF0, 0x54, 0x0F, 0xF0,
+0x90, 0xFD, 0x62, 0xE0, 0x90, 0x86, 0x01, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x86, 0x02, 0xF0,
+0x90, 0xFD, 0x64, 0xE0, 0x90, 0x86, 0x03, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x86, 0x04, 0xF0,
+0x90, 0xFD, 0x66, 0xE0, 0x90, 0x86, 0x05, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x86, 0x06, 0xF0,
+0xED, 0xB4, 0x02, 0x0B, 0x90, 0x85, 0xFF, 0xE0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x80, 0x3C, 0xED,
+0xB4, 0x04, 0x0B, 0x90, 0x85, 0xFF, 0xE0, 0x54, 0x0F, 0x44, 0x60, 0xF0, 0x80, 0x2D, 0xED, 0xF4,
+0x70, 0x29, 0x90, 0x85, 0xFF, 0xE0, 0x54, 0x0F, 0x44, 0x60, 0xF0, 0x90, 0x85, 0x44, 0xE0, 0x60,
+0x08, 0x90, 0x86, 0x01, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x86, 0x01, 0xF0, 0xE4, 0x90,
+0x86, 0x02, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x86, 0x79,
+0x01, 0x90, 0x86, 0x1E, 0x12, 0x44, 0x89, 0x7A, 0x85, 0x79, 0xFF, 0x02, 0x56, 0xE6, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x85, 0x8F, 0xF0, 0x90,
+0x85, 0x8F, 0xE0, 0xFD, 0x70, 0x02, 0xE1, 0x67, 0x90, 0x86, 0x4C, 0xE0, 0xFF, 0x74, 0x01, 0x7E,
+0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D,
+0x70, 0x02, 0xE1, 0x60, 0x90, 0x86, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12, 0x44,
+0x5D, 0xE0, 0x90, 0x85, 0x90, 0xF0, 0x75, 0x20, 0x01, 0x75, 0x21, 0x85, 0x75, 0x22, 0x90, 0x75,
+0x23, 0x01, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0x91, 0x12, 0x56, 0x97, 0x90, 0x85, 0x91, 0xE0, 0xFF,
+0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x86, 0x4C, 0x30, 0xE0, 0x59, 0xE0, 0x75, 0xF0, 0x02,
+0x90, 0x00, 0x88, 0x12, 0x44, 0x5D, 0xE0, 0x90, 0x85, 0x92, 0xF0, 0x90, 0x86, 0x4C, 0xE0, 0x75,
+0xF0, 0x02, 0x90, 0x00, 0x89, 0x12, 0x44, 0x5D, 0xE0, 0x90, 0x85, 0x93, 0xF0, 0x90, 0x86, 0x4C,
+0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x44, 0x5D, 0xE0, 0x90, 0x85, 0x94, 0xF0, 0x90,
+0x86, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x44, 0x5D, 0xE0, 0x90, 0x85, 0x95,
+0xF0, 0x90, 0x86, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x44, 0x5D, 0xE0, 0x90,
+0x85, 0x96, 0xF0, 0x80, 0x33, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x44, 0x5D, 0xE0,
+0x90, 0x85, 0x92, 0xF0, 0x90, 0x86, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x44,
+0x5D, 0xE0, 0x90, 0x85, 0x93, 0xF0, 0x90, 0x86, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3,
+0x12, 0x44, 0x5D, 0xE0, 0x90, 0x85, 0x94, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01, 0x7A, 0x85,
+0x79, 0x92, 0x12, 0x6B, 0x0F, 0x90, 0x85, 0x8F, 0xE0, 0xFF, 0x90, 0x86, 0x4C, 0xE0, 0xFE, 0x74,
+0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x85, 0x8F, 0xF0,
+0x90, 0x86, 0x4C, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC,
+0x90, 0x01, 0xCC, 0xF0, 0x90, 0x86, 0x4C, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0xC1, 0x2F,
+0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x84, 0x01,
+0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xAF, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90,
+0x85, 0x9A, 0x12, 0x44, 0x69, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x72, 0xF0, 0x90,
+0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x55, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF,
+0x54, 0x01, 0x90, 0x85, 0x56, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x01, 0x90, 0x85, 0x60, 0xF0, 0x90,
+0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x13, 0x13, 0x54, 0x01, 0x90, 0x85, 0x5D, 0xF0, 0xEF, 0x13,
+0x13, 0x13, 0x54, 0x01, 0x90, 0x85, 0x63, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4,
+0x54, 0x01, 0x90, 0x85, 0x5F, 0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x01, 0x90, 0x85, 0x74, 0xF0, 0x90,
+0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x90, 0x85, 0x62, 0xF0, 0xE0,
+0x70, 0x38, 0x90, 0x85, 0x60, 0xE0, 0x70, 0x10, 0xFF, 0x12, 0x50, 0x48, 0x90, 0x85, 0x9D, 0x12,
+0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x80, 0x0F, 0x7F, 0x01, 0x12, 0x50, 0x48, 0x90, 0x85, 0x9D,
+0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x45, 0x90, 0x81, 0x57,
+0x12, 0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x85, 0x56, 0xE0, 0x70, 0x03,
+0x12, 0x4F, 0x15, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x12, 0x4D, 0x1E, 0x90, 0x85, 0x72, 0xE0,
+0x90, 0x01, 0xE6, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF,
+0x30, 0xE0, 0x25, 0x12, 0x1E, 0xF6, 0x90, 0x85, 0x61, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F,
+0x90, 0x85, 0x64, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x85, 0x5E, 0xF0, 0x90, 0x00, 0x03,
+0x12, 0x1F, 0x0F, 0x90, 0x85, 0x69, 0xF0, 0x22, 0x90, 0x85, 0x61, 0x74, 0x03, 0xF0, 0x90, 0x85,
+0x64, 0x74, 0x05, 0xF0, 0x90, 0x85, 0x5E, 0x74, 0x14, 0xF0, 0x90, 0x85, 0x69, 0x74, 0x05, 0xF0,
+0x22, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x85, 0x68, 0xF0, 0x90,
+0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x85, 0x66, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F,
+0x90, 0x85, 0x68, 0x74, 0x05, 0xF0, 0x90, 0x85, 0x66, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90,
+0x85, 0x66, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x85, 0x65,
+0xF0, 0x60, 0x20, 0x90, 0x85, 0x2D, 0xE0, 0x20, 0xE0, 0x19, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x49,
+0xC6, 0x90, 0x85, 0x56, 0xE0, 0x60, 0x09, 0x90, 0x85, 0x6F, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0x15,
+0x12, 0x44, 0xE5, 0x90, 0x85, 0x65, 0xE0, 0x90, 0x01, 0xE7, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0xFF,
+0x54, 0x80, 0xFE, 0x90, 0x85, 0x4F, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x0F, 0xFF, 0xE0,
+0x54, 0xF0, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54, 0x70, 0xFF, 0x90, 0x85, 0x4F, 0xE0, 0x54, 0x8F,
+0x4F, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x51, 0xF0, 0x90, 0x00, 0x03, 0x12,
+0x1F, 0x0F, 0x90, 0x85, 0x52, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x53, 0xF0,
+0x90, 0x00, 0x01, 0x74, 0x19, 0x12, 0x43, 0x90, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xD3,
+0x94, 0x20, 0x50, 0x08, 0x90, 0x85, 0x50, 0x74, 0x01, 0xF0, 0x80, 0x57, 0xEF, 0xD3, 0x94, 0x40,
+0x50, 0x08, 0x90, 0x85, 0x50, 0x74, 0x02, 0xF0, 0x80, 0x49, 0xEF, 0xD3, 0x94, 0x60, 0x50, 0x08,
+0x90, 0x85, 0x50, 0x74, 0x03, 0xF0, 0x80, 0x3B, 0xEF, 0xD3, 0x94, 0x80, 0x50, 0x08, 0x90, 0x85,
+0x50, 0x74, 0x04, 0xF0, 0x80, 0x2D, 0xEF, 0xD3, 0x94, 0xA0, 0x50, 0x08, 0x90, 0x85, 0x50, 0x74,
+0x05, 0xF0, 0x80, 0x1F, 0xEF, 0xD3, 0x94, 0xC0, 0x50, 0x08, 0x90, 0x85, 0x50, 0x74, 0x06, 0xF0,
+0x80, 0x11, 0xEF, 0xD3, 0x94, 0xE0, 0x90, 0x85, 0x50, 0x50, 0x05, 0x74, 0x07, 0xF0, 0x80, 0x03,
+0x74, 0x08, 0xF0, 0x90, 0x85, 0x50, 0xE0, 0x90, 0x85, 0x54, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x60,
+0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x02, 0x09,
+0xE0, 0xFD, 0x12, 0x1E, 0xF6, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90, 0x85, 0xBA, 0xF0, 0x90, 0x00,
+0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x85, 0xBB, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F,
+0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x85, 0xBC, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0xED,
+0x2F, 0x90, 0x85, 0xBD, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xAE, 0x05, 0xED, 0x2F,
+0x90, 0x85, 0xBE, 0xF0, 0x22, 0xEF, 0x70, 0x21, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x14, 0x90, 0x00,
+0x40, 0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0x3F, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x44, 0x01, 0xF0,
+0x80, 0x07, 0x90, 0x07, 0x78, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x64, 0x01, 0x70, 0x6A, 0x12, 0x1E,
+0xF6, 0x90, 0x00, 0x01, 0x30, 0xE0, 0x2E, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC0, 0xF0, 0x90, 0x00,
+0x02, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC1, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x06,
+0xC2, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC3, 0xF0, 0x90, 0x06, 0xCC, 0xE0,
+0x54, 0xFE, 0xF0, 0x80, 0x2C, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC4, 0xF0, 0x90, 0x00, 0x02, 0x12,
+0x1F, 0x0F, 0x90, 0x06, 0xC5, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC6, 0xF0,
+0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC7, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x44, 0x01,
+0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x44, 0x02, 0xF0, 0xEF, 0xB4, 0x02, 0x11, 0x12, 0x1E, 0xF6, 0x90,
+0x06, 0xC8, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC9, 0xF0, 0xEF, 0xB4, 0x03,
+0x11, 0x12, 0x1E, 0xF6, 0x90, 0x06, 0xCA, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06,
+0xCB, 0xF0, 0xEF, 0x64, 0x04, 0x70, 0x1F, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x07, 0x83, 0x30, 0xE0,
+0x06, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0x6F, 0xF0, 0xEF, 0x30, 0xE1, 0x07, 0x90,
+0x07, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A,
+0x12, 0x44, 0x69, 0x12, 0x1E, 0xF6, 0x90, 0x84, 0x03, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F,
+0x90, 0x84, 0x04, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x84, 0x05, 0xF0, 0x90, 0x85,
+0x9A, 0x12, 0x44, 0x69, 0x12, 0x6D, 0x3F, 0xEF, 0xB4, 0x02, 0x03, 0x43, 0x14, 0x01, 0x22, 0x12,
+0x1E, 0xF6, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x18, 0x12, 0x1F, 0xB6, 0xA8, 0x04, 0xA9, 0x05,
+0xAA, 0x06, 0xAB, 0x07, 0x90, 0x84, 0xA3, 0x12, 0x44, 0x45, 0xEC, 0x54, 0x03, 0xFC, 0x12, 0x44,
+0x1A, 0x90, 0x84, 0x9F, 0x02, 0x1F, 0xC9, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0x90, 0x01, 0xBC,
+0xF0, 0xEF, 0x30, 0xE0, 0x5C, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x4E, 0x90, 0xFD, 0x50, 0x74,
+0x0A, 0xF0, 0xA3, 0x74, 0x06, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0xFD, 0x52, 0xF0,
+0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0xFD, 0x53, 0xF0, 0xA3, 0xE4, 0xF0, 0x12, 0x1E, 0xF6,
+0xC3, 0x13, 0x90, 0xFD, 0x55, 0x30, 0xE0, 0x05, 0x74, 0xA0, 0xF0, 0x80, 0x03, 0x74, 0xC0, 0xF0,
+0x90, 0xFD, 0x56, 0x74, 0x10, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x90, 0xFD, 0x50, 0x74, 0x0A, 0xF0,
+0xA3, 0x74, 0x06, 0xF0, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x01,
+0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFE, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x7C, 0x00,
+0x24, 0x00, 0xFF, 0xEC, 0x3E, 0xFE, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFC, 0x74,
+0x20, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x85, 0x9A, 0xEF, 0xF0, 0xEE, 0xF9, 0x90, 0x01, 0xBD,
+0xE0, 0x44, 0x02, 0xF0, 0x90, 0x02, 0x09, 0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xEC, 0xC3,
+0x99, 0x50, 0x43, 0xEC, 0x70, 0x04, 0x7D, 0x04, 0x80, 0x02, 0xE4, 0xFD, 0xED, 0xC3, 0x94, 0x20,
+0x50, 0x07, 0xAF, 0x05, 0x91, 0x6E, 0x0D, 0x80, 0xF3, 0x0C, 0x90, 0xFD, 0x10, 0xE0, 0x04, 0xF0,
+0xEC, 0xB5, 0x01, 0xDA, 0xE4, 0xFD, 0xED, 0x75, 0xF0, 0x08, 0xA4, 0xFF, 0x90, 0x85, 0x9A, 0xE0,
+0xFB, 0xC3, 0xEF, 0x9B, 0x74, 0x80, 0xF8, 0x65, 0xF0, 0x98, 0x50, 0x07, 0xAF, 0x05, 0x91, 0x6E,
+0x0D, 0x80, 0xE3, 0x0C, 0x80, 0xB8, 0x90, 0x00, 0x81, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x81, 0x12,
+0x53, 0x26, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x04, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xFD,
+0x58, 0xE0, 0x30, 0xE0, 0x08, 0x90, 0x01, 0xB8, 0xE0, 0x04, 0xF0, 0x80, 0xF1, 0xEF, 0x75, 0xF0,
+0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x50, 0xF0,
+0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90,
+0xFD, 0x51, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0x90, 0xFD, 0x52, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x03, 0xF5, 0x82, 0xE4,
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x53, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x04,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x54, 0xF0, 0xEF, 0x75, 0xF0, 0x08,
+0xA4, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x55, 0xF0, 0xEF,
+0x75, 0xF0, 0x08, 0xA4, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD,
+0x56, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x07, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0x90, 0xFD, 0x57, 0xF0, 0xA3, 0x74, 0x01, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0xFE, 0x10,
+0x60, 0x05, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x90, 0x85, 0x9E, 0x12, 0x44, 0x89, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0xFE,
+0x90, 0x85, 0x2D, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F,
+0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x85, 0x2D, 0xE0, 0x54, 0xFB, 0x4E, 0xF0,
+0xEF, 0x54, 0x10, 0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x20, 0xFE,
+0x90, 0x85, 0x2D, 0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F,
+0xF0, 0x12, 0x1E, 0xF6, 0xFC, 0x54, 0x80, 0xFF, 0x90, 0x85, 0x2D, 0xE0, 0x54, 0x7F, 0x4F, 0xF0,
+0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFD, 0x54, 0x01, 0xFF, 0x90, 0x85, 0x30, 0xE0, 0x54, 0xFE,
+0x4F, 0xF0, 0xED, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
+0x0F, 0xFD, 0x54, 0x04, 0xFF, 0x90, 0x85, 0x30, 0xE0, 0x54, 0xFB, 0x4F, 0xF0, 0xED, 0x54, 0x10,
+0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE,
+0x90, 0x85, 0x30, 0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F,
+0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0x80, 0xFF, 0x90, 0x85, 0x30, 0xE0, 0x54, 0x7F,
+0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x85, 0x31, 0xE0,
+0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00, 0x04,
+0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x80, 0xFE, 0x90, 0x85, 0x31, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF,
+0x54, 0x10, 0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54,
+0x04, 0xFE, 0x90, 0x85, 0x31, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54,
+0xF7, 0x4F, 0xF0, 0xEC, 0x20, 0xE0, 0x02, 0xE1, 0xA6, 0x90, 0x05, 0x54, 0xE0, 0xC3, 0x13, 0x90,
+0x85, 0x3D, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1C, 0x90, 0x85, 0x9E,
+0x12, 0x44, 0x69, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x2E, 0xF0, 0x90, 0x00, 0x02,
+0x12, 0x1F, 0x0F, 0x90, 0x85, 0x2F, 0xF0, 0x80, 0x4E, 0x90, 0x85, 0x9E, 0x12, 0x44, 0x69, 0x90,
+0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03, 0x90,
+0x85, 0x2E, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x85, 0x2E,
+0x74, 0x2A, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF,
+0xC3, 0x94, 0x03, 0x90, 0x85, 0x2F, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80,
+0x06, 0x90, 0x85, 0x2F, 0x74, 0x2A, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03,
+0x30, 0xE0, 0x3D, 0x90, 0x85, 0x2E, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x85, 0x36, 0xF0, 0xE0,
+0xC3, 0x13, 0xA3, 0xF0, 0x90, 0x85, 0x2F, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x85, 0x38, 0xF0,
+0x90, 0x85, 0x2E, 0xE0, 0xC3, 0x13, 0x90, 0x85, 0x39, 0xF0, 0x90, 0x85, 0x2F, 0xE0, 0xC3, 0x13,
+0x90, 0x85, 0x3A, 0xF0, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0xAD,
+0xE4, 0x90, 0x84, 0xA9, 0xF0, 0x90, 0x85, 0x9E, 0x12, 0x44, 0x69, 0x90, 0x00, 0x03, 0x12, 0x1F,
+0x0F, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x14, 0x12, 0x1E, 0xF6, 0x13, 0x13, 0x13, 0x54,
+0x1F, 0x30, 0xE0, 0x04, 0x7F, 0x01, 0x80, 0x02, 0xE4, 0xFF, 0x12, 0x50, 0x48, 0x90, 0x85, 0x2D,
+0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x18, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30,
+0xE0, 0x03, 0x75, 0x4F, 0x04, 0x90, 0x05, 0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x11, 0xF0, 0x90,
+0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x85, 0x35, 0xE0, 0xB4, 0x01, 0x08, 0x90, 0x85, 0x3F, 0x74,
+0x01, 0xF0, 0x80, 0x2B, 0x90, 0x85, 0x35, 0xE0, 0xB4, 0x04, 0x08, 0x90, 0x85, 0x3F, 0x74, 0x04,
+0xF0, 0x80, 0x1C, 0x90, 0x85, 0x35, 0xE0, 0xB4, 0x06, 0x08, 0x90, 0x85, 0x3F, 0x74, 0x02, 0xF0,
+0x80, 0x0D, 0x90, 0x85, 0x35, 0xE0, 0xB4, 0x07, 0x06, 0x90, 0x85, 0x3F, 0x74, 0x05, 0xF0, 0xE4,
+0x90, 0x85, 0x35, 0xF0, 0x80, 0x65, 0x90, 0x85, 0x9E, 0x12, 0x44, 0x69, 0x12, 0x1E, 0xF6, 0xFF,
+0x13, 0x13, 0x13, 0x54, 0x1F, 0x90, 0x85, 0x9A, 0x30, 0xE0, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00,
+0x03, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x12, 0x83, 0xE4, 0x90, 0x00,
+0x40, 0x74, 0x20, 0xF0, 0x90, 0x85, 0x9E, 0x12, 0x44, 0x69, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F,
+0x13, 0x13, 0x13, 0x54, 0x1F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03,
+0x74, 0x01, 0xF0, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0x9A, 0x12, 0x55, 0x0D, 0x90, 0x05, 0x22, 0xE4,
+0xF0, 0x90, 0x05, 0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x43, 0xF0, 0x90, 0x85, 0x32, 0xE0, 0x54,
+0xDF, 0xF0, 0xE4, 0x90, 0x85, 0x3E, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54,
+0x01, 0x30, 0xE0, 0x09, 0x90, 0x84, 0x9C, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x0C, 0x7F, 0x01, 0x12,
+0x55, 0x58, 0x90, 0x84, 0x9C, 0xE0, 0x54, 0xFD, 0xF0, 0x7F, 0x03, 0x12, 0x5E, 0xF5, 0xD0, 0xD0,
+0x92, 0xAF, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x85, 0x32, 0xE0, 0x54, 0xFE,
+0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54,
+0x04, 0xFE, 0x90, 0x85, 0x32, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54,
+0xF7, 0x4F, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x33, 0xF0, 0x22, 0x90, 0x85,
+0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69,
+0x7D, 0x03, 0x7F, 0x26, 0x02, 0x6D, 0x43, 0x90, 0x00, 0xCC, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x00,
+0x6A, 0xE4, 0xF0, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x44,
+0x04, 0xF0, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x02, 0xE0, 0x44, 0x10, 0xF0,
+0x90, 0x00, 0x32, 0xE0, 0x44, 0x04, 0xF0, 0x7F, 0x05, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0x00,
+0x6A, 0x74, 0x15, 0xF0, 0x90, 0x00, 0xFA, 0xE0, 0x44, 0x04, 0xF0, 0x7D, 0xDD, 0x7F, 0x81, 0x02,
+0x53, 0x26, 0x12, 0x1E, 0xF6, 0x90, 0x85, 0xC2, 0xF0, 0x22, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89,
+0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0xE4, 0x90, 0x85, 0xA1,
+0xF0, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0xA2,
+0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0xA3, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
+0x0F, 0x90, 0x85, 0xA4, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0xA5, 0xF0, 0x90,
+0x85, 0x9D, 0x12, 0x44, 0x69, 0x12, 0x1E, 0xF6, 0x70, 0x12, 0x90, 0x85, 0xA0, 0x74, 0x3C, 0xF0,
+0x7B, 0x01, 0x7A, 0x85, 0x79, 0xA0, 0x7D, 0x06, 0x7F, 0x87, 0x80, 0x1C, 0x90, 0x85, 0x9D, 0x12,
+0x44, 0x69, 0x12, 0x1E, 0xF6, 0xB4, 0x01, 0x13, 0x90, 0x85, 0xA0, 0x74, 0x40, 0xF0, 0x7B, 0x01,
+0x7A, 0x85, 0x79, 0xA0, 0x7D, 0x04, 0x7F, 0xC7, 0x12, 0x6D, 0x43, 0x22, 0x12, 0x1E, 0xF6, 0x90,
+0x85, 0xC0, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0xC1, 0xF0, 0x22, 0xE4, 0x90,
+0x86, 0x46, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xEB, 0xE0, 0x54, 0xC0, 0x60, 0x43, 0xC3, 0x90, 0x86,
+0x47, 0xE0, 0x94, 0x88, 0x90, 0x86, 0x46, 0xE0, 0x94, 0x13, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0,
+0x44, 0x04, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x86, 0x46, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xF7,
+0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x86, 0x47, 0xE0, 0x94, 0x64, 0x90, 0x86,
+0x46, 0xE0, 0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE2, 0xB8, 0x7F, 0x00, 0x22,
+0x7F, 0x01, 0x22, 0x90, 0x85, 0xE7, 0x12, 0x1F, 0xC9, 0x90, 0x85, 0xEB, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x00, 0x00, 0xE4, 0x7F, 0x1F, 0xFE, 0xFD, 0xFC, 0x90, 0x85, 0xEB, 0x12, 0x44, 0x51, 0xD3,
+0x12, 0x44, 0x34, 0x50, 0x41, 0x90, 0x85, 0xEB, 0x12, 0x44, 0x45, 0xA9, 0x07, 0x90, 0x85, 0xE7,
+0x12, 0x44, 0x45, 0xA8, 0x01, 0x12, 0x1F, 0xA3, 0xEF, 0x54, 0x01, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC,
+0x7B, 0x01, 0xFA, 0xF9, 0xF8, 0xC3, 0x12, 0x44, 0x34, 0x60, 0x1B, 0x90, 0x85, 0xEB, 0x12, 0x44,
+0x45, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, 0x85,
+0xEB, 0x12, 0x1F, 0xC9, 0x80, 0xAD, 0x90, 0x85, 0xEB, 0x02, 0x44, 0x45, 0x90, 0x85, 0xC6, 0x12,
+0x1F, 0xC9, 0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, 0x85, 0xCA, 0x12, 0x44, 0x51, 0xC3, 0x12,
+0x44, 0x34, 0x90, 0x85, 0xC6, 0x60, 0x67, 0x12, 0x44, 0x45, 0x12, 0x2C, 0x6E, 0x90, 0x85, 0xD2,
+0x12, 0x1F, 0xC9, 0x90, 0x85, 0xCA, 0x12, 0x44, 0x45, 0x31, 0xD3, 0x90, 0x85, 0xD6, 0x12, 0x1F,
+0xC9, 0x90, 0x85, 0xCA, 0x12, 0x44, 0x45, 0x12, 0x44, 0x27, 0x90, 0x85, 0xD2, 0x12, 0x44, 0x51,
+0x12, 0x44, 0x0D, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x85, 0xD6, 0x12, 0x44,
+0x45, 0xA9, 0x07, 0x90, 0x85, 0xCE, 0x12, 0x44, 0x45, 0xA8, 0x01, 0x12, 0x1F, 0xB6, 0xD0, 0x03,
+0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x44, 0x1A, 0x90, 0x85, 0xDA, 0x12, 0x1F, 0xC9, 0x90,
+0x85, 0xC6, 0x12, 0x44, 0x45, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x85, 0xDA, 0x80, 0x0A, 0x12, 0x44,
+0x45, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x85, 0xCE, 0x12, 0x44, 0x45, 0x90, 0x81, 0x57, 0x12, 0x1F,
+0xC9, 0xD0, 0x07, 0xD0, 0x06, 0x02, 0x34, 0x30, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x86, 0x4F, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x47, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08,
+0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46, 0xE0, 0x5F, 0xF0, 0x12, 0x53,
+0x99, 0x90, 0x86, 0x4F, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3,
+0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B,
+0xA8, 0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4C,
+0x90, 0x86, 0x4F, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02,
+0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x62, 0xE0, 0x5F, 0xF0, 0x12, 0x53, 0x99, 0x90,
+0x86, 0x4F, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
+0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x60, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05,
+0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0x90, 0x84, 0x9C, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0x54, 0xFD, 0xF0, 0x54, 0xF7,
+0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0x12, 0x1F, 0xD5, 0x20, 0x08, 0x30, 0x70, 0x90, 0x84,
+0xA3, 0x12, 0x1F, 0xD5, 0xC0, 0x08, 0x30, 0x70, 0xE4, 0x90, 0x84, 0xA9, 0xF0, 0xA3, 0xF0, 0x43,
+0xE8, 0x04, 0x90, 0xFD, 0x68, 0x74, 0x02, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x44, 0x10, 0xF0, 0x90,
+0x07, 0x83, 0xE4, 0xF0, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x04, 0x64, 0xE4, 0xF0, 0x90,
+0x00, 0x40, 0x74, 0x20, 0xF0, 0x71, 0xE4, 0x90, 0x85, 0x44, 0x74, 0x01, 0xF0, 0x7D, 0x04, 0x7F,
+0x02, 0x02, 0x3A, 0xAD, 0x90, 0x85, 0x2D, 0xE0, 0x54, 0xFE, 0xF0, 0xA3, 0x74, 0x0B, 0xF0, 0xA3,
+0x74, 0x08, 0xF0, 0xE4, 0x90, 0x85, 0x3E, 0xF0, 0xA3, 0xF0, 0x90, 0x85, 0x2D, 0xE0, 0x54, 0xFD,
+0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF,
+0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xFD, 0xF0,
+0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0,
+0xE0, 0x54, 0x7F, 0xF0, 0xA3, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F,
+0xF0, 0x90, 0x85, 0x40, 0x74, 0x02, 0xF0, 0x90, 0x85, 0x32, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54,
+0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x85, 0x3D, 0xF0, 0x90, 0x85, 0x34,
+0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x85, 0x3B, 0xF0, 0xA3, 0xF0, 0x90, 0x85, 0x41, 0xF0, 0xA3,
+0xF0, 0x90, 0x85, 0x34, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x85, 0x31, 0xE0,
+0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54, 0xF7, 0xF0, 0x90, 0x85, 0x45, 0xE0, 0x54,
+0xFE, 0xF0, 0xE0, 0x54, 0xE1, 0xF0, 0xE4, 0x90, 0x85, 0x4E, 0xF0, 0x22, 0xAD, 0x07, 0x90, 0x85,
+0x7A, 0xE0, 0x54, 0xF0, 0x44, 0x05, 0xF0, 0x54, 0x0F, 0x44, 0x10, 0xF0, 0x90, 0x85, 0x7C, 0xEF,
+0xF0, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0x7C, 0x90, 0x86, 0x1E, 0x12, 0x44, 0x89, 0x7A, 0x85, 0x79,
+0x7A, 0x02, 0x56, 0xE6, 0x90, 0x85, 0x60, 0xE0, 0x60, 0x27, 0x90, 0x85, 0x63, 0xE0, 0x70, 0x21,
+0x90, 0x85, 0x30, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0,
+0x22, 0x90, 0x85, 0x5D, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74, 0x0D, 0xF0, 0x22, 0x74, 0x09,
+0xF0, 0x22, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x11, 0x90, 0x85,
+0x34, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x08, 0xE0, 0x44, 0x04, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0x22,
+0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x02, 0xC1, 0xB8, 0x90, 0x85,
+0x35, 0xE0, 0x64, 0x01, 0x70, 0x39, 0x90, 0x06, 0x92, 0xE0, 0x20, 0xE2, 0x06, 0x90, 0x86, 0x4B,
+0xE0, 0x60, 0x21, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x85, 0x41, 0xE0, 0x04, 0xF0, 0xE4,
+0x90, 0x86, 0x4B, 0xF0, 0x90, 0x85, 0x36, 0xE0, 0xFF, 0x90, 0x85, 0x41, 0xE0, 0xB5, 0x07, 0x02,
+0x80, 0x02, 0xC1, 0xA3, 0xE4, 0x90, 0x85, 0x35, 0xF0, 0x90, 0x85, 0x3F, 0x04, 0xF0, 0x22, 0x90,
+0x85, 0x35, 0xE0, 0x64, 0x04, 0x70, 0x3A, 0x90, 0x06, 0x92, 0xE0, 0x20, 0xE2, 0x06, 0x90, 0x86,
+0x4B, 0xE0, 0x60, 0x21, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x85, 0x41, 0xE0, 0x04, 0xF0,
+0xE4, 0x90, 0x86, 0x4B, 0xF0, 0x90, 0x85, 0x38, 0xE0, 0xFF, 0x90, 0x85, 0x41, 0xE0, 0xB5, 0x07,
+0x02, 0x80, 0x02, 0xC1, 0xA3, 0xE4, 0x90, 0x85, 0x35, 0xF0, 0x90, 0x85, 0x3F, 0x74, 0x04, 0xF0,
+0x22, 0x90, 0x85, 0x35, 0xE0, 0x64, 0x06, 0x60, 0x02, 0xC1, 0x67, 0x90, 0x85, 0x42, 0xE0, 0xB4,
+0x04, 0x0F, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x54, 0x0F, 0x90, 0x85, 0x3F, 0x30, 0xE0, 0x4E, 0xC1,
+0xB5, 0x90, 0x85, 0x34, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x45, 0xE0, 0x54, 0xFB, 0xF0,
+0xE4, 0xA3, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x02, 0xC1, 0x76, 0x90,
+0x85, 0x42, 0xE0, 0xFF, 0x90, 0x85, 0x41, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D,
+0x03, 0x12, 0x1F, 0x3C, 0x90, 0x85, 0x39, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94,
+0x32, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x90, 0x85, 0x3F, 0x40, 0x02, 0xC1, 0xB5, 0x74, 0x02, 0xF0,
+0x22, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4D, 0x84, 0x90, 0x85, 0x42, 0xE0,
+0x04, 0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39,
+0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x85, 0x42, 0xE0, 0xFF, 0x90, 0x85, 0x41, 0xE0,
+0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12, 0x1F, 0x3C, 0x90, 0x85, 0x39, 0xE0,
+0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x40, 0x58,
+0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x85, 0x35, 0xE0, 0x64, 0x07, 0x70, 0x49, 0x90,
+0x85, 0x42, 0xE0, 0xB4, 0x04, 0x05, 0x90, 0x85, 0x3F, 0x80, 0x3A, 0x90, 0x85, 0x34, 0xE0, 0x13,
+0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0C, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x85, 0x3F,
+0x80, 0x23, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4D, 0x84, 0x90, 0x85, 0x42,
+0xE0, 0x04, 0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12,
+0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x64, 0x01, 0x70, 0x3C, 0x90, 0x85,
+0x2D, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x07, 0x90, 0x07, 0x78, 0x74, 0x0D, 0xF0,
+0x22, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xE0, 0x13, 0x13, 0x54, 0x3F,
+0x90, 0x07, 0x78, 0x30, 0xE0, 0x24, 0x80, 0x0E, 0x90, 0x85, 0x30, 0xE0, 0xC3, 0x13, 0x90, 0x07,
+0x78, 0x30, 0xE0, 0x02, 0x80, 0x14, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13,
+0x13, 0x13, 0x54, 0x01, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x04, 0x74, 0x03, 0xF0, 0x22, 0x74, 0x01,
+0xF0, 0x22, 0xBB, 0x72,
+};
+
+const u8 Rtl8723SFwUMCBCutImgArrayWithBT[Rtl8723SUMCBCutImgArrayWithBTLength] = {
+0x02, 0x23, 0x02, 0x00, 0x25, 0x00, 0x00, 0x00, 0x06, 0x27, 0x22, 0x20, 0xFC, 0x5E, 0x01, 0x00,
+0x17, 0x25, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x4A, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x61, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x67, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x67, 0xA9, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x6A, 0x89, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03,
+0x00, 0x04, 0x06, 0x05, 0x04, 0x02, 0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09,
+0x08, 0x06, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08,
+0x0A, 0x09, 0x08, 0x00, 0x00, 0x08, 0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10,
+0x00, 0x18, 0x22, 0x21, 0x20, 0x18, 0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21,
+0x20, 0x08, 0x00, 0x20, 0x22, 0x21, 0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20,
+0x22, 0x20, 0x18, 0x08, 0x00, 0x20, 0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00,
+0x00, 0x30, 0x31, 0x2F, 0x10, 0x10, 0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28,
+0x10, 0x00, 0x00, 0x30, 0x31, 0x20, 0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30,
+0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04,
+0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05,
+0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13,
+0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A, 0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F,
+0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24,
+0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78,
+0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40, 0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40,
+0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8, 0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02,
+0x00, 0x04, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48,
+0x00, 0x60, 0x00, 0x6C, 0x00, 0x28, 0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8,
+0x00, 0xF0, 0x01, 0x18, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58,
+0x03, 0x20, 0x03, 0xE8, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07,
+0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C,
+0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04,
+0x05, 0x06, 0x07, 0x08, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18,
+0x10, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xBB, 0x01, 0x0F, 0xF8, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x28,
+0xF0, 0x22, 0x50, 0x09, 0xC5, 0x82, 0x29, 0xF8, 0xE5, 0x82, 0x26, 0xF6, 0x22, 0xBB, 0xFE, 0x09,
+0xC5, 0x82, 0x29, 0xF8, 0xE2, 0x25, 0x82, 0xF2, 0x22, 0xF8, 0xEA, 0x25, 0x83, 0xF5, 0x83, 0xE9,
+0x93, 0x28, 0x22, 0xBB, 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22,
+0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8, 0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83,
+0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22, 0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE,
+0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0,
+0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A,
+0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7,
+0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3, 0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83,
+0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01, 0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82,
+0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82,
+0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22, 0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0,
+0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A, 0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22,
+0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7,
+0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB, 0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8,
+0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5,
+0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB,
+0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x5B, 0xFF, 0xEE,
+0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED,
+0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, 0xCF, 0xF4, 0xCF, 0xCE, 0xF4, 0xCE, 0xCD, 0xF4, 0xCD, 0xCC,
+0xF4, 0xCC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8,
+0x9C, 0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22,
+0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5,
+0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9,
+0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82, 0x15, 0x82, 0x70,
+0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0,
+0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3,
+0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68,
+0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12,
+0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83,
+0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60, 0xE9, 0xA3, 0xA3,
+0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0xFB, 0x90, 0x93, 0x64, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00,
+0xE5, 0x65, 0x70, 0x03, 0x02, 0x44, 0xF0, 0xE5, 0x62, 0x64, 0x01, 0x60, 0x03, 0x02, 0x44, 0xF0,
+0x0B, 0x90, 0x93, 0x41, 0xF0, 0x04, 0x70, 0x03, 0x02, 0x44, 0xF0, 0x43, 0x66, 0x10, 0x90, 0x93,
+0x37, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A, 0xE0, 0x54, 0x0F, 0xFF, 0x90,
+0x93, 0x59, 0xE0, 0xD3, 0x9F, 0x50, 0x0D, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x38, 0xE0, 0xF5, 0x49,
+0xE4, 0x1B, 0x80, 0x56, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93,
+0x59, 0xE0, 0xC3, 0x9F, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x38, 0xE0, 0x04, 0x2F, 0xF5,
+0x49, 0xE4, 0xFB, 0x80, 0x35, 0x90, 0x93, 0x59, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x13,
+0xE4, 0xF5, 0x48, 0x90, 0x93, 0x59, 0xE0, 0xFF, 0x90, 0x93, 0x50, 0xE0, 0x2F, 0xF5, 0x49, 0xE4,
+0xFB, 0x80, 0x17, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x59, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF,
+0x90, 0x93, 0x50, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12,
+0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
+0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x12, 0x9C, 0x26, 0x90, 0x05, 0x22, 0xE4, 0xF0,
+0x22, 0xE4, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x93, 0x42, 0xF0, 0xF5, 0x66, 0x22, 0x22, 0xE4, 0xFF,
+0x02, 0x4E, 0x27, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0xE4, 0xFB, 0x90, 0x93, 0x5E, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x46, 0x78, 0xE5, 0x62, 0x64, 0x01,
+0x60, 0x03, 0x02, 0x46, 0x78, 0xE5, 0x65, 0x14, 0x60, 0x2B, 0x24, 0xFD, 0x60, 0x27, 0x24, 0x02,
+0x24, 0xFB, 0x50, 0x02, 0x80, 0x21, 0x90, 0x93, 0x41, 0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3,
+0xE0, 0x60, 0x14, 0x90, 0x93, 0x41, 0xE0, 0x70, 0x08, 0x90, 0x93, 0x58, 0xE0, 0x90, 0x93, 0x41,
+0xF0, 0x7B, 0x01, 0x80, 0x02, 0x7B, 0x01, 0xEB, 0x70, 0x03, 0x02, 0x46, 0x78, 0x43, 0x66, 0x10,
+0x90, 0x93, 0x37, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x44, 0xE0, 0x54, 0x0F,
+0xFF, 0x90, 0x93, 0x59, 0xE0, 0xC3, 0x9F, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x38, 0x80,
+0x2D, 0x90, 0x93, 0x37, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33,
+0xFE, 0x90, 0x93, 0x59, 0xE0, 0xC3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x08,
+0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3B, 0x80, 0x06, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x38, 0xE0, 0x80,
+0x2D, 0x90, 0x93, 0x59, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4, 0xF5, 0x48, 0x90,
+0x93, 0x59, 0xE0, 0xFF, 0x90, 0x93, 0x50, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x93,
+0x59, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x50, 0xE0, 0x04, 0x2F, 0xF5, 0x49,
+0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0,
+0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69,
+0xE5, 0x63, 0x64, 0x0C, 0x60, 0x6F, 0x90, 0x93, 0x13, 0xE0, 0xFF, 0x90, 0x93, 0x59, 0xE0, 0xD3,
+0x9F, 0x40, 0x08, 0x90, 0x93, 0x14, 0xE0, 0x04, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x93, 0x14, 0xF0,
+0x90, 0x93, 0x59, 0xE0, 0x90, 0x93, 0x13, 0xF0, 0xA3, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x46, 0xE4,
+0xF0, 0x90, 0x93, 0x3E, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x57, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8,
+0x90, 0x93, 0x5A, 0xE0, 0x64, 0x02, 0x70, 0x21, 0x12, 0x4A, 0x65, 0xE4, 0xF5, 0x48, 0x90, 0x93,
+0x46, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
+0x5B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x56, 0x80, 0x09, 0x43, 0x66, 0x01, 0x12, 0x51, 0x48, 0x90,
+0x93, 0x52, 0x74, 0x01, 0xF0, 0x12, 0x9C, 0x26, 0x22, 0xE4, 0x90, 0x93, 0x64, 0xF0, 0xE5, 0x65,
+0x70, 0x03, 0x02, 0x47, 0x32, 0x90, 0x93, 0x5B, 0xE0, 0x60, 0x11, 0xE4, 0xF0, 0x53, 0x66, 0xFD,
+0xE5, 0x66, 0x54, 0x07, 0x60, 0x03, 0x02, 0x47, 0x32, 0x02, 0x47, 0x2F, 0x90, 0x93, 0x42, 0xE0,
+0x04, 0xF0, 0x53, 0x66, 0xEF, 0x90, 0x93, 0x59, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x37, 0xE0, 0xC4,
+0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A, 0x90, 0x93, 0x59, 0xE0, 0xFF, 0x90, 0x93, 0x37,
+0xE0, 0x54, 0x0F, 0xB5, 0x07, 0x0A, 0x90, 0x93, 0x3A, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x80, 0x22,
+0x90, 0x93, 0x37, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE,
+0x90, 0x93, 0x59, 0xE0, 0xB5, 0x07, 0x0B, 0xE4, 0xB5, 0x06, 0x07, 0xF0, 0x90, 0x05, 0x58, 0x74,
+0x03, 0xF0, 0x90, 0x93, 0x37, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x06, 0x90,
+0x93, 0x64, 0x74, 0x5A, 0xF0, 0x90, 0x93, 0x64, 0xE0, 0xFF, 0x90, 0x93, 0x49, 0xE0, 0x2F, 0xFF,
+0xE4, 0x33, 0xFE, 0x90, 0x93, 0x42, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
+0x40, 0x0D, 0xE5, 0x62, 0xB4, 0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12,
+0x52, 0x17, 0x22, 0xE4, 0xF5, 0x66, 0xF5, 0x65, 0x75, 0x64, 0x0C, 0x75, 0x63, 0x0C, 0x90, 0x93,
+0x5A, 0xF0, 0x90, 0x93, 0x56, 0xF0, 0x90, 0x93, 0x53, 0xF0, 0x90, 0x93, 0x58, 0x04, 0xF0, 0x90,
+0x93, 0x41, 0xF0, 0xE4, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x93, 0x43, 0xF0, 0x90, 0x93, 0x50, 0x74,
+0x05, 0xF0, 0xE4, 0x90, 0x93, 0x42, 0xF0, 0x90, 0x93, 0x4E, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90,
+0x93, 0x49, 0xF0, 0x90, 0x93, 0x4C, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x46, 0x74, 0x14, 0xF0, 0x90,
+0x93, 0x51, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x44, 0xF0, 0x90, 0x93, 0x3D, 0xF0, 0x90, 0x93,
+0xB4, 0xF0, 0x90, 0x93, 0x4D, 0xF0, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x93, 0x59, 0xF0, 0x90, 0x93,
+0x3E, 0xF0, 0x90, 0x93, 0x57, 0xF0, 0x90, 0x93, 0x48, 0xF0, 0x90, 0x93, 0x45, 0xF0, 0x90, 0x93,
+0x52, 0xF0, 0x90, 0x93, 0x4B, 0xF0, 0x90, 0x93, 0x47, 0xF0, 0x90, 0x93, 0x5C, 0xF0, 0x90, 0x93,
+0x4A, 0xF0, 0x90, 0x93, 0xB3, 0xE0, 0xB4, 0x02, 0x05, 0x90, 0x00, 0x93, 0xE4, 0xF0, 0x90, 0x93,
+0x37, 0xE0, 0x54, 0x7F, 0xF0, 0xE0, 0x54, 0xF0, 0xF0, 0xE0, 0x54, 0x8F, 0xF0, 0xE4, 0xA3, 0xF0,
+0xA3, 0xF0, 0x90, 0x93, 0x3B, 0xF0, 0x90, 0x93, 0x3A, 0xF0, 0x22, 0xEF, 0x60, 0x5F, 0xAF, 0x05,
+0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x93,
+0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07,
+0x30, 0xE0, 0x6B, 0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x13, 0xE0, 0x25, 0xE0, 0x25,
+0xE0, 0xFF, 0x74, 0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0x74,
+0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x74, 0x7F, 0xF0, 0x22, 0xAF, 0x05, 0x74,
+0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0x93, 0x19,
+0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xBF, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30,
+0xE0, 0x0C, 0x74, 0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x22, 0x90,
+0x93, 0x15, 0xE0, 0x30, 0xE0, 0x22, 0x90, 0x93, 0x26, 0xE0, 0x60, 0x09, 0x90, 0x01, 0xB9, 0x74,
+0x40, 0xF0, 0x02, 0x49, 0x29, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x02, 0x80, 0x2F,
+0x90, 0x93, 0x4D, 0xE0, 0x60, 0x67, 0x80, 0x5D, 0x12, 0x51, 0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08,
+0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x61, 0xE5, 0x66, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01,
+0xB9, 0x74, 0x02, 0xF0, 0x80, 0x53, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x08, 0x90,
+0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x42, 0xE5, 0x66, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB9, 0x74,
+0x08, 0xF0, 0x80, 0x35, 0xE5, 0x66, 0x30, 0xE4, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80,
+0x28, 0x90, 0x93, 0x43, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x1A, 0x90,
+0x93, 0x4D, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x80, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9,
+0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F,
+0x00, 0x22, 0xE4, 0x90, 0x93, 0x5E, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x93, 0x5E, 0xF0, 0xE0,
+0x54, 0xC0, 0x70, 0x18, 0x90, 0x93, 0x52, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0x53, 0x66, 0xFD,
+0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x14, 0x12, 0x52, 0x17, 0x80, 0x0F, 0x90, 0x93, 0x3E, 0xE0,
+0x60, 0x09, 0x90, 0x93, 0x57, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x90, 0x93, 0x5E, 0xE0, 0x30,
+0xE6, 0x1B, 0x43, 0x66, 0x01, 0x90, 0x93, 0x5A, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64,
+0x0C, 0x60, 0x13, 0x12, 0x51, 0x48, 0x80, 0x0E, 0x12, 0x50, 0x77, 0x80, 0x09, 0x90, 0x93, 0x52,
+0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0xE4, 0x90, 0x93, 0x52, 0xF0, 0x90, 0x93, 0x5E, 0xE0, 0x30,
+0xE7, 0x2A, 0x43, 0x66, 0x02, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x4C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB,
+0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90, 0x93,
+0x5B, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x53, 0x66, 0xFD, 0x22,
+0x8E, 0x25, 0x8F, 0x26, 0xAD, 0x26, 0xAC, 0x25, 0xAF, 0x24, 0x12, 0x47, 0xEB, 0xAF, 0x26, 0xAE,
+0x25, 0x90, 0x04, 0x80, 0xE0, 0x54, 0x0F, 0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4,
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x01, 0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
+0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, 0xAC, 0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
+0xF5, 0x83, 0xE0, 0x44, 0xFA, 0xF0, 0x74, 0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0x44, 0x0F, 0xF0, 0x90, 0x04, 0x53, 0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51,
+0x74, 0xFF, 0xF0, 0x90, 0x04, 0x50, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
+0xF5, 0x83, 0xED, 0xF0, 0x22, 0x7D, 0x01, 0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
+0x8F, 0x68, 0x8D, 0x69, 0xE5, 0x68, 0x54, 0x0F, 0xFF, 0xE5, 0x63, 0x54, 0x0F, 0x6F, 0x60, 0x72,
+0xE5, 0x68, 0x30, 0xE2, 0x30, 0xE5, 0x63, 0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x51, 0xA1, 0xE5,
+0x63, 0x30, 0xE3, 0x10, 0xE5, 0x68, 0x20, 0xE3, 0x0B, 0x12, 0x4D, 0x55, 0xEF, 0x60, 0x53, 0x12,
+0x51, 0xD4, 0x80, 0x4E, 0xE5, 0x63, 0x20, 0xE3, 0x49, 0xE5, 0x68, 0x30, 0xE3, 0x44, 0xAF, 0x69,
+0x12, 0x51, 0x86, 0x80, 0x3D, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x68, 0x20,
+0xE3, 0x09, 0x12, 0x4D, 0x55, 0xEF, 0x60, 0x2A, 0x12, 0x51, 0xD4, 0xE5, 0x63, 0x54, 0x0F, 0xFF,
+0xBF, 0x04, 0x0E, 0xE5, 0x68, 0x20, 0xE2, 0x09, 0x12, 0x48, 0x8F, 0xEF, 0x60, 0x14, 0x12, 0x51,
+0x1F, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x02, 0x09, 0x12, 0x4B, 0xF7, 0xEF, 0x60, 0x03, 0x12,
+0x52, 0x04, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x02, 0x4B, 0x35, 0x02, 0x52, 0xF4, 0xE4, 0x93, 0xA3,
+0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4,
+0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8,
+0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04,
+0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x4F, 0x75, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF,
+0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54,
+0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4,
+0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8,
+0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0xEF, 0x64, 0x01, 0x70, 0x3E, 0x7D,
+0x78, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x22, 0x90, 0x01, 0x36,
+0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F,
+0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x4A, 0x65, 0x90, 0x06,
+0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36,
+0x74, 0x7B, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x3A, 0x93, 0x7D, 0x02, 0x7F,
+0x03, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x06, 0x04, 0xE0, 0x44,
+0x80, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, 0xF0, 0x12, 0x4F, 0x28, 0xE5, 0x62, 0x20, 0xE0,
+0x05, 0xE4, 0x90, 0x93, 0x43, 0xF0, 0x22, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x10, 0x12, 0x51,
+0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x5C, 0xE5, 0x14,
+0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x50, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94,
+0x01, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x3F, 0x90, 0x02, 0x87, 0xE0, 0x60,
+0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x31, 0x90, 0x01, 0xAF, 0xE0, 0x60, 0x02, 0x80,
+0x07, 0x90, 0x02, 0x86, 0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x1A,
+0x90, 0x93, 0x44, 0xE0, 0x70, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x0C, 0x90, 0x01,
+0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x02, 0xF0,
+0x7F, 0x00, 0x22, 0xE5, 0x62, 0x64, 0x01, 0x70, 0x6B, 0xE5, 0x65, 0x60, 0x67, 0xE5, 0x65, 0x64,
+0x02, 0x60, 0x06, 0xE5, 0x65, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x93, 0x41,
+0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x93, 0x58, 0xF0, 0x90, 0x93, 0x41, 0xE0, 0x70, 0x07, 0x90,
+0x93, 0x58, 0xE0, 0xFF, 0x80, 0x05, 0x90, 0x93, 0x41, 0xE0, 0xFF, 0x90, 0x93, 0x41, 0xEF, 0xF0,
+0x90, 0x93, 0x43, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x42, 0xF0, 0x90, 0x93, 0x59,
+0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
+0x02, 0xF0, 0x53, 0x66, 0xFD, 0x53, 0x66, 0xEF, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80,
+0x03, 0x12, 0x49, 0x32, 0x22, 0x90, 0x93, 0xB3, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x91, 0x80, 0x0C,
+0x90, 0x93, 0xB3, 0xE0, 0x70, 0x04, 0x7D, 0xD4, 0x80, 0x02, 0xE4, 0xFD, 0x7F, 0x93, 0x12, 0x54,
+0x1B, 0x90, 0x00, 0x29, 0xE0, 0x54, 0x3F, 0xFD, 0x7F, 0x29, 0x12, 0x54, 0x1B, 0x90, 0x00, 0x28,
+0xE0, 0x54, 0xFC, 0xFD, 0x7F, 0x28, 0x12, 0x54, 0x1B, 0x90, 0x00, 0x08, 0xE0, 0x44, 0x10, 0xFD,
+0x7F, 0x08, 0x12, 0x54, 0x1B, 0x7F, 0x01, 0x12, 0x4E, 0x81, 0x90, 0x00, 0x00, 0xE0, 0x44, 0x20,
+0xFD, 0xE4, 0xFF, 0x12, 0x54, 0x1B, 0x90, 0x00, 0x20, 0xE0, 0x54, 0xFE, 0xFD, 0x7F, 0x20, 0x12,
+0x54, 0x1B, 0x90, 0x00, 0x90, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x54, 0x1B, 0x7F, 0x14,
+0x7E, 0x00, 0x02, 0x3B, 0x09, 0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0, 0x13, 0x90, 0x93, 0x1A, 0xE0,
+0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x18, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x49, 0x12,
+0x51, 0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x39, 0x90,
+0x93, 0x56, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x2B, 0x90, 0x93, 0x53,
+0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x1D, 0xE5, 0x64, 0x54, 0x0F, 0xD3,
+0x94, 0x04, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4,
+0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x7F, 0x00,
+0x22, 0x90, 0x93, 0x8B, 0x12, 0x43, 0xC8, 0x12, 0x44, 0xF1, 0x90, 0x93, 0x8B, 0x12, 0x43, 0xA8,
+0x12, 0x1E, 0xF6, 0xF5, 0x65, 0x14, 0x60, 0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03,
+0x70, 0x44, 0x7F, 0x01, 0x80, 0x3D, 0x90, 0x93, 0x8B, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12,
+0x1F, 0x0F, 0xFD, 0xE4, 0xFF, 0x12, 0x50, 0x39, 0x80, 0x29, 0x90, 0x93, 0x8B, 0x12, 0x43, 0xA8,
+0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x01, 0x12, 0x50, 0x39, 0x1F, 0x80, 0x14, 0x90,
+0x93, 0x8B, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x02, 0x12, 0x50,
+0x39, 0xE4, 0xFF, 0x12, 0x4B, 0x7A, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x24,
+0x90, 0x93, 0x3E, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x57, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x90,
+0x04, 0x1D, 0xE0, 0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x27, 0x74, 0xFF, 0xF0, 0x12, 0x5E,
+0x9B, 0xBF, 0x01, 0x0D, 0x90, 0x93, 0xAC, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x2A, 0x12, 0x49,
+0xD0, 0x90, 0x05, 0x22, 0xE5, 0x27, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0xAC, 0xE0, 0xFF, 0x7D, 0x01,
+0x12, 0x58, 0x2A, 0x12, 0x49, 0xD0, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0x8F, 0x6C, 0xE4, 0x90, 0x94, 0x3E, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00,
+0x30, 0xE7, 0x02, 0x7F, 0x01, 0xEF, 0x65, 0x6C, 0x60, 0x3E, 0xC3, 0x90, 0x94, 0x3F, 0xE0, 0x94,
+0x88, 0x90, 0x94, 0x3E, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x80, 0xF0,
+0x22, 0x90, 0x94, 0x3E, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00, 0x12,
+0x3B, 0x09, 0xD3, 0x90, 0x94, 0x3F, 0xE0, 0x94, 0x32, 0x90, 0x94, 0x3E, 0xE0, 0x94, 0x00, 0x40,
+0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE0, 0xB2, 0x22, 0x90, 0x00, 0x20, 0xE0, 0x44, 0x01, 0xFD,
+0x7F, 0x20, 0x12, 0x54, 0x1B, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x00, 0xE0,
+0x54, 0xDF, 0xFD, 0xE4, 0xFF, 0x12, 0x54, 0x1B, 0x90, 0x00, 0x28, 0xE0, 0x44, 0x03, 0xFD, 0x7F,
+0x28, 0x12, 0x54, 0x1B, 0x90, 0x00, 0x08, 0xE0, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x54, 0x1B,
+0xE4, 0xFF, 0x12, 0x4E, 0x81, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x29, 0xE0,
+0x44, 0xC0, 0xFD, 0x7F, 0x29, 0x02, 0x54, 0x1B, 0xE4, 0xFF, 0x90, 0x00, 0x6A, 0xE0, 0x30, 0xE2,
+0x22, 0xE0, 0x30, 0xE0, 0x20, 0xE0, 0x30, 0xE1, 0x0D, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x02, 0x30,
+0xE3, 0x13, 0x7F, 0x03, 0x80, 0x0F, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x03, 0x30, 0xE3, 0x06, 0x7F,
+0x02, 0x80, 0x02, 0x7F, 0x03, 0xEF, 0xFD, 0xD3, 0x90, 0x93, 0x4F, 0xE0, 0x9D, 0x90, 0x93, 0x4E,
+0xE0, 0x94, 0x00, 0x50, 0x05, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x4E, 0xE0, 0xA3, 0xE0,
+0x90, 0x05, 0x58, 0xF0, 0x22, 0x48, 0x93, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x48, 0x93, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x93, 0xA0, 0x00, 0x41,
+0x93, 0xB0, 0x00, 0x41, 0x93, 0x95, 0x00, 0x41, 0x94, 0x46, 0x00, 0x41, 0x93, 0x13, 0x00, 0x41,
+0x93, 0x14, 0x00, 0x41, 0x92, 0x69, 0x00, 0x41, 0x92, 0x6A, 0x00, 0x41, 0x92, 0x68, 0x00, 0x41,
+0x94, 0x37, 0x00, 0x41, 0x94, 0x44, 0x00, 0x00, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x93, 0x57, 0x74, 0x01, 0xF0, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x94, 0x2B, 0x12,
+0x1F, 0xC9, 0x90, 0x94, 0x2B, 0x12, 0x43, 0x84, 0xEC, 0x44, 0x02, 0xFC, 0x90, 0x94, 0x2B, 0x12,
+0x1F, 0xC9, 0x90, 0x94, 0x2B, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00,
+0x7E, 0x08, 0x12, 0x34, 0x30, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50,
+0x02, 0x80, 0x35, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x2E, 0x90, 0x93, 0x3E, 0xE0, 0x60, 0x09,
+0x90, 0x93, 0x57, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x12, 0x9C, 0x26, 0x90, 0x93, 0x5A, 0xE0,
+0x60, 0x06, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x0D, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
+0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x22, 0xEF, 0x14, 0x60, 0x09, 0x14, 0x60, 0x16,
+0x24, 0x02, 0x70, 0x32, 0x80, 0x0A, 0x90, 0x93, 0x58, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x41, 0xF0,
+0xE4, 0x90, 0x93, 0x5D, 0xF0, 0x22, 0xED, 0x70, 0x0A, 0x90, 0x93, 0x51, 0xE0, 0x90, 0x93, 0x58,
+0xF0, 0x80, 0x05, 0x90, 0x93, 0x58, 0xED, 0xF0, 0x90, 0x93, 0x58, 0xE0, 0x90, 0x93, 0x41, 0xF0,
+0x90, 0x93, 0x5D, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
+0x08, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x46, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02,
+0xF0, 0x90, 0x93, 0x53, 0x14, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x0C, 0x50, 0x03, 0x12,
+0x4A, 0x65, 0x22, 0x90, 0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00,
+0xFF, 0xEC, 0x3E, 0x90, 0x93, 0x3F, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x01, 0x04, 0xE0, 0x54, 0x0F,
+0xFF, 0x74, 0x40, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
+0xF9, 0x90, 0x93, 0x55, 0xF0, 0xEE, 0x90, 0x93, 0x54, 0xF0, 0x22, 0xEF, 0x70, 0x0B, 0x90, 0x93,
+0xB2, 0xE0, 0x90, 0x94, 0x2F, 0x60, 0x0B, 0x80, 0x12, 0x90, 0x93, 0xB2, 0xE0, 0x90, 0x94, 0x2F,
+0x60, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x02, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00,
+0x01, 0x10, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x2F, 0x7F, 0x60, 0x7E, 0x08, 0x02, 0x95, 0x86, 0x90,
+0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x5E, 0x9B, 0xEF, 0x70,
+0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93, 0x12, 0x99,
+0x48, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x90, 0x93, 0x47, 0xE0, 0x70, 0x1A, 0x90, 0x04,
+0x1D, 0xE0, 0x70, 0x14, 0x90, 0x93, 0xAB, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x58, 0x2A, 0x8E, 0x6A,
+0x8F, 0x6B, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0x48, 0xE0, 0x60, 0x16, 0x90,
+0x93, 0x4B, 0xE0, 0x70, 0x10, 0x90, 0x93, 0x45, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74, 0x0D,
+0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF, 0xF0, 0xEF, 0x60, 0x0A,
+0xE5, 0x62, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x4E, 0x27, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x0C,
+0x22, 0x90, 0x94, 0x47, 0xEF, 0xF0, 0x12, 0x95, 0xCC, 0x90, 0x94, 0x47, 0xE0, 0x60, 0x05, 0x90,
+0x05, 0x22, 0xE4, 0xF0, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4,
+0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60,
+0x02, 0x7F, 0x00, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x05,
+0x7F, 0x01, 0x12, 0x4E, 0x27, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0xE5, 0x64, 0x30, 0xE6,
+0x12, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0x90, 0x01, 0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0,
+0x53, 0x64, 0xBF, 0x22, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x01, 0x12, 0x4C, 0xE5, 0x12, 0x4E, 0xD9,
+0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x7D, 0x01, 0xAF, 0x64, 0x02, 0x4A, 0x69, 0x90, 0x02,
+0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12, 0x43,
+0xF7, 0x52, 0x49, 0x00, 0x40, 0x52, 0x71, 0x00, 0x80, 0x52, 0x9C, 0x01, 0x00, 0x52, 0xB0, 0x02,
+0x00, 0x52, 0xC8, 0x04, 0x00, 0x00, 0x00, 0x52, 0xE5, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE, 0xFF,
+0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06, 0xCE,
+0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x80,
+0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF, 0x2D,
+0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x07,
+0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04, 0xFE,
+0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80, 0x35,
+0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF, 0x2D,
+0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE, 0xFF,
+0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D, 0x00,
+0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x25, 0xF0,
+0xA3, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x76, 0xF0, 0xA3, 0xF0, 0xF1, 0xBA, 0x75, 0x8E, 0x02,
+0xF1, 0x99, 0x12, 0x60, 0x51, 0x90, 0x93, 0xB3, 0xEF, 0xF0, 0xF1, 0xDA, 0x90, 0x93, 0xB5, 0xEF,
+0xF0, 0x12, 0x60, 0x64, 0x90, 0x93, 0x96, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x14, 0xF5,
+0x09, 0xF5, 0x62, 0x90, 0x93, 0xB2, 0xF0, 0x90, 0x00, 0xCC, 0xE0, 0x54, 0xF7, 0xF0, 0x12, 0x88,
+0x60, 0x12, 0x47, 0x33, 0x12, 0x37, 0x1C, 0xF1, 0xE6, 0x71, 0xF2, 0x12, 0x60, 0x15, 0x12, 0x60,
+0x7C, 0xF1, 0xB3, 0x12, 0x60, 0x33, 0x12, 0x44, 0xFD, 0x12, 0x60, 0xE7, 0xF1, 0xC2, 0x90, 0x93,
+0x78, 0xE5, 0xD9, 0xF0, 0xC2, 0xAF, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40, 0xF0, 0x91, 0x63, 0x75,
+0xE8, 0x03, 0x43, 0xA8, 0x85, 0x12, 0x97, 0x59, 0xD2, 0xAF, 0x51, 0xEA, 0x12, 0x60, 0x91, 0x90,
+0x93, 0x76, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0xF4, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x52, 0xA3, 0xF0,
+0xE5, 0x14, 0x30, 0xE0, 0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xFE, 0x12, 0x9A, 0xE3, 0xD2, 0xAF, 0x90,
+0x93, 0xA9, 0xE0, 0xB4, 0x01, 0x07, 0x91, 0xD2, 0xE4, 0x90, 0x93, 0xA9, 0xF0, 0xE5, 0x14, 0x30,
+0xE4, 0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xEF, 0xD2, 0xAF, 0x12, 0x6F, 0x9E, 0xE5, 0x14, 0x30, 0xE6,
+0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xBF, 0xD2, 0xAF, 0x12, 0x80, 0x5D, 0xE5, 0x14, 0x30, 0xE7, 0x09,
+0xC2, 0xAF, 0x53, 0x14, 0x7F, 0xD2, 0xAF, 0xD1, 0xEC, 0xC2, 0xAF, 0xE5, 0x64, 0x54, 0x0F, 0xFF,
+0xBF, 0x01, 0x0D, 0x90, 0x93, 0x44, 0x74, 0x01, 0xF0, 0x51, 0x17, 0xE4, 0x90, 0x93, 0x44, 0xF0,
+0xD2, 0xAF, 0x90, 0x01, 0xBD, 0xE5, 0x63, 0xF0, 0x90, 0x93, 0x5A, 0xE0, 0x90, 0x01, 0xBC, 0xF0,
+0x61, 0x6F, 0x90, 0x01, 0x3C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0,
+0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x54, 0x91, 0x1B, 0x7D, 0xFF, 0x7F, 0x55, 0x91,
+0x1B, 0x7D, 0xFF, 0x7F, 0x56, 0x91, 0x1B, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
+0xC0, 0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xED, 0xF0, 0x91, 0x63, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
+0x90, 0x01, 0x30, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3,
+0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x91, 0x1B, 0xE4, 0xFD, 0x7F, 0x51, 0x91, 0x1B,
+0xE4, 0xFD, 0x7F, 0x52, 0x91, 0x1B, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0x90, 0x00, 0x02, 0xE0,
+0x44, 0x01, 0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0,
+0x92, 0xAF, 0x22, 0x8E, 0x57, 0x8F, 0x58, 0x8B, 0x59, 0x8A, 0x5A, 0x89, 0x5B, 0xE4, 0x90, 0x93,
+0x7C, 0xF0, 0xEF, 0x90, 0x00, 0x31, 0xF0, 0x91, 0x63, 0xE5, 0x57, 0x54, 0x03, 0xFF, 0x90, 0x00,
+0x32, 0xE0, 0x54, 0xFC, 0x4F, 0xF0, 0x91, 0x63, 0x90, 0x00, 0x33, 0xE0, 0x54, 0x7F, 0xF0, 0x91,
+0x63, 0x90, 0x00, 0x33, 0xE0, 0x20, 0xE7, 0x0E, 0x90, 0x93, 0x7C, 0xE0, 0xC3, 0x94, 0x64, 0x50,
+0x05, 0xE0, 0x04, 0xF0, 0x80, 0xEB, 0x90, 0x93, 0x7C, 0xE0, 0xC3, 0x94, 0x64, 0x50, 0x10, 0x90,
+0x00, 0x30, 0xE0, 0xAB, 0x59, 0xAA, 0x5A, 0xA9, 0x5B, 0x12, 0x42, 0x53, 0x7F, 0x01, 0x22, 0x7F,
+0x00, 0x22, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x79, 0x7F, 0xF5, 0x7E, 0x01, 0x91, 0x73, 0xBF, 0x01,
+0x06, 0x90, 0x93, 0x79, 0xE0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x79, 0x7F, 0xF6, 0x7E,
+0x01, 0x91, 0x73, 0xBF, 0x01, 0x08, 0x90, 0x93, 0x79, 0xE0, 0x90, 0x93, 0x7B, 0xF0, 0x90, 0x93,
+0x7A, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xAE, 0x07, 0x90, 0x93, 0x7C, 0xE0, 0x54, 0xF0, 0xF0, 0x54,
+0x0F, 0x44, 0x50, 0xF0, 0x90, 0x93, 0x7E, 0xEE, 0xF0, 0xA3, 0xED, 0xF0, 0x7B, 0x01, 0x7A, 0x93,
+0x79, 0x7E, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x7C, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x10, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92,
+0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x90, 0x92, 0x69, 0xE0,
+0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0B, 0x90, 0x92, 0x69, 0xE0, 0x14, 0xFF, 0xA3, 0xE0,
+0xB5, 0x07, 0x0D, 0xF1, 0x4B, 0xEF, 0x60, 0x70, 0xD1, 0xEC, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0,
+0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6E, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xA8,
+0x01, 0xFC, 0x7D, 0x01, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x7E, 0x00, 0x7F, 0x02, 0x12, 0x1E,
+0xD0, 0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74, 0x92, 0x35, 0xF0,
+0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x94, 0x13, 0x12, 0x43, 0xA8, 0x8B,
+0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4,
+0x54, 0x0F, 0xF5, 0x23, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0xB1, 0xDD, 0x90, 0x92, 0x6A, 0xE0,
+0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF,
+0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x94, 0x04, 0x12, 0x43, 0xC8,
+0xAB, 0x20, 0xAA, 0x21, 0xA9, 0x22, 0x90, 0x94, 0x07, 0x12, 0x43, 0xC8, 0xAF, 0x23, 0x15, 0x23,
+0xEF, 0x60, 0x1E, 0x90, 0x94, 0x07, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0x12, 0x1E, 0xF6,
+0xFF, 0x90, 0x94, 0x04, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0xEF, 0x12, 0x42, 0x53, 0x80,
+0xDB, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9, 0x1F, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x0A, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x68, 0xE0, 0x90, 0x00, 0x01,
+0x12, 0x42, 0x65, 0xF1, 0x4B, 0xEF, 0x70, 0x02, 0xC1, 0xE7, 0x90, 0x94, 0x0A, 0x12, 0x43, 0xA8,
+0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x75, 0x23, 0x02, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0xB1,
+0xDD, 0x90, 0x94, 0x0D, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x0A,
+0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0x7B, 0x01, 0x7A, 0x01,
+0x79, 0xA2, 0xB1, 0xDD, 0x90, 0x01, 0xAF, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0xB3, 0xE0, 0x64, 0x01,
+0x70, 0x48, 0x90, 0x94, 0x0A, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x75, 0x23,
+0x02, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x20, 0xB1, 0xDD, 0x90, 0x94, 0x0D, 0x12, 0x43, 0xA8, 0x8B,
+0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x0A, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4,
+0x54, 0x0F, 0xF5, 0x23, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x22, 0xB1, 0xDD, 0x90, 0x93, 0x96, 0xE0,
+0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0x74, 0xFF, 0xF0, 0x90, 0x92, 0x68, 0xE0, 0x04, 0xF0,
+0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0xF1, 0x4B, 0xEF, 0x60, 0x4E, 0x90, 0x92, 0x69, 0xE0, 0x75, 0xF0, 0x0F, 0xA4,
+0x24, 0x6E, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x02, 0xC0, 0x01, 0xE0, 0x75,
+0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x90, 0x94, 0x0D, 0x12, 0x43,
+0xC8, 0xD0, 0x01, 0xD0, 0x02, 0xD1, 0x2C, 0x90, 0x92, 0x69, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A,
+0x02, 0xE4, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92, 0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D,
+0x02, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0xAF, 0x7E, 0x01, 0x90,
+0x94, 0x33, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x94, 0x33, 0xE0,
+0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C, 0xC3, 0x90, 0x94, 0x36, 0xE0, 0x94,
+0xE8, 0x90, 0x94, 0x35, 0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0,
+0x7F, 0x00, 0x22, 0x90, 0x94, 0x35, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x0A, 0x7E,
+0x00, 0x12, 0x3B, 0x09, 0x80, 0xC6, 0x7F, 0x01, 0x22, 0xE4, 0x90, 0x93, 0xAF, 0xF0, 0x90, 0x00,
+0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80, 0x81, 0x1B, 0x8F, 0x82, 0x8E, 0x83, 0xA3, 0xA3, 0xA3,
+0xE4, 0xF0, 0x22, 0x90, 0x01, 0x64, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x01, 0x94, 0xE0, 0x44, 0x01,
+0xF0, 0x22, 0x90, 0x94, 0x38, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x94, 0x3A, 0xF0, 0x90, 0x94,
+0x38, 0xE0, 0x54, 0x7F, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00,
+0x30, 0xE3, 0x02, 0x7F, 0x01, 0x22, 0xE4, 0x90, 0x92, 0x69, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xAF,
+0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xC4, 0x74, 0xF2, 0xF0, 0x74,
+0x57, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22, 0xE0, 0x54, 0x90, 0x60,
+0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE1, 0xE4, 0x7F,
+0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
+0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10,
+0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x0E, 0x74, 0x0F, 0x2B, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
+0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF7,
+0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0xFD,
+0x63, 0xE0, 0x54, 0x3F, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0xFD, 0x62, 0xE0, 0x54, 0x03, 0x4F,
+0x90, 0x93, 0x68, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x54, 0x3F, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x90,
+0xFD, 0x63, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x93, 0x69, 0xF0, 0x90, 0x93, 0x68, 0xE0, 0xFD, 0xA3,
+0xE0, 0xFB, 0xE4, 0xFF, 0x90, 0x94, 0x16, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90,
+0x04, 0x1D, 0xE0, 0x60, 0x19, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x94, 0x1B, 0xF0, 0xD1, 0x95, 0xBF,
+0x01, 0x02, 0x11, 0xF7, 0x90, 0x94, 0x1B, 0xE0, 0x90, 0x05, 0x22, 0xF0, 0x80, 0x02, 0x11, 0xF7,
+0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0xAE, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x2A,
+0x90, 0x94, 0x19, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0x94, 0x16, 0xE0, 0xFF, 0xA3,
+0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x94, 0x25, 0xF0, 0xEF, 0x60, 0x10, 0x74, 0x21, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x0E, 0x74, 0x21, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05, 0x74, 0x06, 0x2F, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x74, 0x11, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05, 0x74, 0x16, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x02, 0xF0, 0x74, 0x16, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0x54, 0x03, 0xF0, 0xAE, 0x05, 0x74, 0x22, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xEB, 0xF0, 0x90, 0x94, 0x25, 0xE0, 0xFF, 0x74, 0x23, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
+0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x04,
+0xF0, 0x22, 0xE4, 0x90, 0x93, 0x64, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x20,
+0xE0, 0x02, 0xC1, 0x45, 0x12, 0x9C, 0x54, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x01, 0x60, 0x02, 0x41,
+0xB9, 0x90, 0x93, 0x1A, 0xE0, 0x30, 0xE0, 0x18, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x80, 0x0A,
+0x90, 0x93, 0x1A, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x06, 0xA3, 0xE0, 0x90, 0x93, 0x64, 0xF0,
+0xE4, 0xF5, 0x48, 0x90, 0x93, 0x64, 0xE0, 0x24, 0x03, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4,
+0x54, 0x0F, 0x90, 0x93, 0x27, 0x30, 0xE0, 0x05, 0x74, 0x05, 0xF0, 0x80, 0x03, 0xE0, 0x04, 0xF0,
+0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F, 0x90, 0x93, 0x16, 0xE0, 0xFF,
+0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13,
+0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x6E,
+0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFB, 0xE4,
+0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xC4, 0x80, 0x51, 0x90, 0x93, 0x15,
+0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0xFD,
+0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0,
+0x27, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0x90, 0x93, 0x2A,
+0xF0, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x06, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0x60,
+0x07, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x90, 0x93,
+0x18, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x45, 0xA1, 0xB7, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x02, 0x60,
+0x02, 0x61, 0x98, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x08, 0xD1,
+0x95, 0xBF, 0x01, 0x03, 0x12, 0x99, 0x48, 0xE4, 0xFF, 0xD1, 0x67, 0x90, 0x93, 0x1A, 0xE0, 0x30,
+0xE0, 0x1F, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90, 0x93, 0x1A, 0xE0, 0xC4, 0x54,
+0x0F, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x90, 0x93, 0x64, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xEF,
+0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x16, 0xE0, 0x24, 0x03, 0xFF, 0x90, 0x93, 0x64, 0xE0, 0x2F,
+0xFF, 0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0xFF, 0x90, 0x93, 0x65, 0xE0, 0x2F, 0xF5, 0x49, 0xE4,
+0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0xE4,
+0xFF, 0xD1, 0xDC, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54,
+0x07, 0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F, 0x90, 0x93, 0x15, 0xE0,
+0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0,
+0x14, 0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x80, 0x0B, 0xE5, 0x65, 0x60, 0x0D, 0xE4, 0xFD,
+0xAF, 0x64, 0x12, 0x4A, 0x69, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x30,
+0xE0, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54,
+0x01, 0x20, 0xE0, 0x02, 0xC1, 0x45, 0xC1, 0x41, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x03, 0x60, 0x02,
+0x81, 0xEC, 0x7F, 0x01, 0xD1, 0x67, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30,
+0xE0, 0x03, 0x12, 0x95, 0xCC, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0,
+0x02, 0x81, 0x48, 0x90, 0x93, 0x1F, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0xD3, 0x9F, 0x40, 0x4D,
+0xE0, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0xFE, 0xC3, 0xEF, 0x9E, 0xFF, 0x24,
+0x03, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x93, 0x17, 0xE0, 0xD3, 0x9D, 0xEC, 0x64, 0x80, 0xF8, 0x74,
+0x80, 0x98, 0x40, 0x08, 0xE0, 0x9F, 0x90, 0x93, 0x67, 0xF0, 0x80, 0x06, 0x90, 0x93, 0x67, 0x74,
+0x03, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x67, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x80, 0x24, 0xE4, 0xF5, 0x48,
+0x90, 0x93, 0x22, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77,
+0x90, 0x93, 0x1D, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x04,
+0xF0, 0xE4, 0x90, 0x93, 0x29, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x66, 0xE0, 0xFF,
+0x90, 0x93, 0x17, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12,
+0x39, 0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x7F, 0x01,
+0xD1, 0xDC, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x2F, 0x90, 0x93, 0x15,
+0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1A, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0x93,
+0x4D, 0xE0, 0x60, 0x02, 0x80, 0x0F, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x7D, 0x01, 0x7F, 0x0C, 0x80,
+0x08, 0xE5, 0x65, 0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x4D, 0xE0,
+0x60, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13,
+0x54, 0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0,
+0x03, 0x12, 0x51, 0x48, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13,
+0x13, 0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0x45, 0x7F, 0x01, 0xC1, 0x43, 0x90, 0x93, 0x27, 0xE0,
+0x64, 0x04, 0x60, 0x02, 0xA1, 0xBD, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E,
+0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0,
+0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F, 0x90, 0x93, 0x17, 0xE0, 0xFF,
+0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13,
+0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x6E,
+0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFB, 0xE4,
+0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xC4, 0x80, 0x51, 0x90, 0x93, 0x15,
+0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0xFD,
+0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0,
+0x27, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0x90, 0x93, 0x2A,
+0xF0, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x07, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0x60,
+0x07, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x90, 0x93,
+0x18, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x45, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x27,
+0xE0, 0x64, 0x05, 0x60, 0x02, 0xC1, 0x45, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F,
+0x30, 0xE0, 0x08, 0xD1, 0x95, 0xBF, 0x01, 0x03, 0x12, 0x99, 0x48, 0xE4, 0xFF, 0xD1, 0x67, 0xD1,
+0xDC, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0,
+0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F,
+0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x14, 0xE4, 0xFD,
+0xAF, 0x64, 0x12, 0x4A, 0x69, 0x80, 0x0B, 0xE5, 0x65, 0x60, 0x0D, 0xE4, 0xFD, 0xAF, 0x64, 0x12,
+0x4A, 0x69, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x30, 0xE0, 0x05, 0x90,
+0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0,
+0x04, 0xE4, 0xFF, 0xD1, 0x46, 0x22, 0x90, 0x93, 0x04, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x17, 0xEF,
+0x7B, 0x01, 0xB4, 0x01, 0x06, 0x7A, 0x93, 0x79, 0x0B, 0x80, 0x04, 0x7A, 0x93, 0x79, 0x07, 0x7F,
+0x80, 0x7E, 0x08, 0x12, 0x95, 0x86, 0x22, 0xEF, 0xB4, 0x03, 0x12, 0x90, 0x93, 0x18, 0xE0, 0xC4,
+0x13, 0x13, 0x54, 0x03, 0x90, 0x06, 0xCC, 0x30, 0xE0, 0x17, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x19,
+0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xEF, 0x90, 0x06, 0xCC, 0xB4, 0x01, 0x03, 0xE4, 0xF0,
+0x22, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0x90, 0x94, 0x42, 0xF0,
+0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07,
+0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x94, 0x43, 0xE0, 0x94, 0xE8, 0x90, 0x94,
+0x42, 0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x3B, 0x09,
+0x90, 0x94, 0x42, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x80, 0xC6, 0x90, 0x94, 0x26, 0xEF,
+0xF0, 0x12, 0x9D, 0xFD, 0x90, 0x93, 0x18, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x08,
+0x90, 0x94, 0x26, 0xE0, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x94, 0x27, 0x12, 0x1F, 0xD5, 0x00, 0x00,
+0x03, 0x10, 0x90, 0x94, 0x26, 0xE0, 0xB4, 0x01, 0x10, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC4, 0x13,
+0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x16, 0x80, 0x0A, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC3, 0x13,
+0x30, 0xE0, 0x0A, 0x90, 0x94, 0x27, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A,
+0x94, 0x79, 0x27, 0x12, 0x95, 0x82, 0x90, 0x94, 0x26, 0xE0, 0x90, 0x93, 0x26, 0xF0, 0x22, 0x90,
+0x93, 0x15, 0xE0, 0x30, 0xE0, 0x72, 0x7F, 0x01, 0xD1, 0x67, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13,
+0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x95, 0xCC, 0x7F, 0x01, 0xD1, 0xDC, 0x90, 0x93, 0x15,
+0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x05, 0x12, 0x95, 0xCC, 0x80, 0x29, 0x90, 0x93,
+0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1F, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x20, 0xF0, 0x90,
+0x93, 0x4D, 0xE0, 0x60, 0x06, 0x7D, 0x01, 0x7F, 0x04, 0x80, 0x09, 0x90, 0x05, 0x22, 0xE4, 0xF0,
+0x7D, 0x01, 0x7F, 0x0C, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x4D, 0xE0, 0x90, 0x05, 0x22, 0x60, 0x05,
+0x74, 0x6F, 0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54,
+0x01, 0x30, 0xE0, 0x04, 0x7F, 0x01, 0xD1, 0x46, 0x22, 0x12, 0x57, 0xF2, 0xBF, 0x01, 0x0F, 0x90,
+0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x2A, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90,
+0x01, 0x63, 0xE4, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x7F, 0x70,
+0x7E, 0x08, 0x12, 0x34, 0x30, 0x7F, 0x01, 0xC1, 0x46, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x36, 0xF0,
+0x70, 0x02, 0xF1, 0xCF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC, 0xEF,
+0x30, 0xE0, 0x02, 0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF, 0x05,
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5, 0x2B,
+0x90, 0x01, 0x30, 0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3, 0xE5,
+0x2B, 0xF0, 0x22, 0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32, 0x43,
+0x32, 0x20, 0x90, 0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32, 0xF0,
+0x22, 0x90, 0x00, 0xF4, 0xE0, 0x20, 0xE3, 0x09, 0xE0, 0x7F, 0x01, 0x20, 0xE2, 0x05, 0x7F, 0x02,
+0x22, 0x7F, 0x00, 0x22, 0x90, 0x93, 0xB5, 0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30,
+0xE7, 0x05, 0x7E, 0xFD, 0x7F, 0x33, 0x22, 0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0x90, 0x00, 0xF3, 0xE0,
+0x30, 0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74, 0x10, 0xF0, 0x90, 0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0,
+0x22, 0xE4, 0x90, 0x93, 0x79, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x98, 0xE0, 0x7F, 0x00, 0x30, 0xE4,
+0x02, 0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E, 0xC3, 0x90, 0x93, 0x7A, 0xE0, 0x94, 0x88, 0x90,
+0x93, 0x79, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90,
+0x93, 0x79, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09,
+0xD3, 0x90, 0x93, 0x7A, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x79, 0xE0, 0x94, 0x00, 0x40, 0xB9, 0x90,
+0x01, 0xC7, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01,
+0x9C, 0x74, 0x7E, 0xF0, 0xA3, 0x74, 0x92, 0xF0, 0xA3, 0x74, 0xA0, 0xF0, 0xA3, 0x74, 0x24, 0xF0,
+0x90, 0x01, 0x9B, 0x74, 0x49, 0xF0, 0x90, 0x01, 0x9A, 0x74, 0xE0, 0xF0, 0x90, 0x01, 0x99, 0xE4,
+0xF0, 0x90, 0x01, 0x98, 0x04, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54,
+0x0C, 0x13, 0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90,
+0x93, 0x5E, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01,
+0x60, 0x07, 0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3C, 0x90, 0x93, 0x5E, 0x74, 0x01, 0xF0, 0xA3,
+0x74, 0x3D, 0xF0, 0x79, 0x40, 0x90, 0x93, 0x5E, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E,
+0x83, 0xE0, 0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x93, 0xA0, 0xF0, 0x22, 0x90, 0x93, 0xA0,
+0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0C, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30,
+0xE0, 0x03, 0x12, 0x5F, 0xB9, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0,
+0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0,
+0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x86, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0x90, 0x01, 0x34,
+0xE0, 0x55, 0x28, 0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5,
+0x2E, 0xA3, 0xE0, 0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x61, 0x80, 0x90, 0x01,
+0x34, 0x74, 0x01, 0xF0, 0x85, 0xD1, 0x0A, 0x85, 0xD3, 0x0C, 0x85, 0xD4, 0x0D, 0x85, 0xD5, 0x0E,
+0x85, 0xD6, 0x0F, 0x85, 0xD7, 0x10, 0x85, 0xD9, 0x11, 0x85, 0xD2, 0x0B, 0x75, 0x20, 0x00, 0x75,
+0x21, 0x00, 0x75, 0x22, 0x0A, 0x75, 0x23, 0x08, 0xFB, 0x7A, 0x93, 0x79, 0xA1, 0x12, 0x55, 0xDD,
+0x90, 0x93, 0xA2, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x01, 0xFE, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x01,
+0x6E, 0x70, 0x02, 0x61, 0x2B, 0x90, 0x93, 0xA2, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
+0x30, 0xE0, 0x02, 0x61, 0x2B, 0xEF, 0x54, 0x1F, 0xF5, 0x4D, 0x90, 0x93, 0xA3, 0xE0, 0x54, 0x3F,
+0xF5, 0x4E, 0x90, 0x93, 0xA5, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x80, 0xF5,
+0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xE5, 0x4E, 0xD3, 0x94,
+0x04, 0x40, 0x03, 0x75, 0x4E, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43,
+0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93,
+0xA5, 0xE0, 0x54, 0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84,
+0x00, 0x12, 0x43, 0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0xA3, 0xEF,
+0xF0, 0x90, 0x93, 0xA2, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x2F, 0x90, 0x93, 0xA5, 0xE0,
+0x54, 0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83,
+0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0xA4, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54,
+0x01, 0x30, 0xE0, 0x67, 0xAF, 0x4D, 0x12, 0x7A, 0x9C, 0x80, 0x60, 0x90, 0x93, 0xA2, 0xE0, 0xFF,
+0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x53, 0x90, 0x93, 0xA5, 0xE0, 0x54, 0x1F, 0xFF, 0xFD,
+0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8D, 0xF0,
+0x12, 0x42, 0x87, 0x90, 0x93, 0xA4, 0xE0, 0xFE, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0,
+0x0F, 0xEE, 0x54, 0x7F, 0xFD, 0x8F, 0x55, 0xAB, 0x4E, 0xAF, 0x4D, 0x12, 0x7A, 0x38, 0x80, 0x1B,
+0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x11, 0x90, 0x04, 0x30, 0xE0, 0xB4, 0x01,
+0x0A, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x04, 0xCF, 0xF0, 0xE5, 0x65, 0x14, 0x24, 0xFD,
+0x50, 0x02, 0x80, 0x46, 0x90, 0x93, 0x5A, 0xE0, 0x60, 0x37, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90,
+0x01, 0x3C, 0x74, 0x04, 0xF0, 0x12, 0x51, 0xBB, 0xEF, 0x64, 0x01, 0x70, 0x2D, 0xF5, 0x48, 0x90,
+0x93, 0x46, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90,
+0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x56, 0xF0, 0x80,
+0x09, 0x12, 0x51, 0xBB, 0xBF, 0x01, 0x03, 0x12, 0x52, 0x17, 0x90, 0x94, 0x45, 0xE0, 0x04, 0xF0,
+0xE5, 0x2C, 0x20, 0xE1, 0x02, 0x81, 0x22, 0x90, 0x01, 0x34, 0x74, 0x02, 0xF0, 0x90, 0xFD, 0x10,
+0x74, 0x7F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x30, 0xE5, 0x0B, 0x75, 0x4F, 0x88, 0x75, 0x50, 0x0F,
+0x75, 0x51, 0x0F, 0x80, 0x09, 0x75, 0x4F, 0xC0, 0x75, 0x50, 0x08, 0x75, 0x51, 0x07, 0x90, 0x04,
+0x7F, 0xE0, 0x55, 0x51, 0xF5, 0x12, 0x90, 0x04, 0x7E, 0xE0, 0x55, 0x51, 0xF5, 0x13, 0x65, 0x12,
+0x60, 0x60, 0xE4, 0xFF, 0xE5, 0x12, 0x75, 0xF0, 0x08, 0xA4, 0x25, 0x4F, 0x2F, 0x24, 0x00, 0xF5,
+0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x15, 0x2F, 0xF8, 0xA6, 0x06, 0x0F, 0xBF,
+0x08, 0xE2, 0x75, 0x20, 0x00, 0x75, 0x21, 0x00, 0x75, 0x22, 0x15, 0x75, 0x23, 0x08, 0x7B, 0x01,
+0x7A, 0x93, 0x79, 0x98, 0x12, 0x55, 0xDD, 0x90, 0x93, 0x98, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13,
+0x54, 0x01, 0x30, 0xE0, 0x02, 0xD1, 0xA9, 0xE5, 0x12, 0x24, 0x01, 0xFF, 0xE4, 0x33, 0xFE, 0xAD,
+0x50, 0x7C, 0x00, 0x12, 0x1F, 0x4E, 0xAF, 0x05, 0x8F, 0x12, 0x90, 0x04, 0x7F, 0xEF, 0xF0, 0xB5,
+0x13, 0xA0, 0xE5, 0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x34, 0x74, 0x08, 0xF0, 0xE5, 0x2C, 0x30,
+0xE4, 0x09, 0x90, 0x01, 0x34, 0x74, 0x10, 0xF0, 0x43, 0x14, 0x10, 0xE5, 0x2C, 0x30, 0xE5, 0x26,
+0x90, 0x01, 0xCF, 0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20,
+0xF0, 0x75, 0xA8, 0x00, 0x75, 0xE8, 0x00, 0x12, 0x54, 0x30, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB,
+0xF0, 0x12, 0x54, 0x63, 0x80, 0xFE, 0xE5, 0x2C, 0x30, 0xE6, 0x06, 0x90, 0x01, 0x34, 0x74, 0x40,
+0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0xA1, 0x30, 0x90, 0x93, 0xB4, 0x74, 0x01, 0xF0, 0x90, 0x01,
+0x36, 0xF0, 0x90, 0x93, 0xB1, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x02,
+0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x12, 0x45, 0x09, 0x90, 0x93, 0x2D, 0xE0, 0x20, 0xE0,
+0x02, 0xA1, 0x26, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x07,
+0x78, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70,
+0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0xFF, 0xE0, 0xFE,
+0xC3, 0x13, 0x54, 0x0F, 0xC3, 0x9F, 0x40, 0x35, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xE1, 0xF0,
+0x90, 0x93, 0x32, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x60, 0x7E, 0x08,
+0x12, 0x34, 0x30, 0x90, 0x93, 0x2E, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F,
+0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x80, 0x1C, 0x90, 0x93, 0x2D,
+0xE0, 0xFF, 0xC3, 0x13, 0x54, 0x0F, 0xFE, 0xEF, 0x54, 0xE1, 0xFF, 0xEE, 0x04, 0x54, 0x0F, 0xFE,
+0x25, 0xE0, 0x4F, 0xF0, 0x80, 0x03, 0x12, 0x5F, 0x3F, 0xD1, 0xCB, 0x90, 0x93, 0xB4, 0xE4, 0xF0,
+0xE5, 0x2E, 0x30, 0xE1, 0x45, 0x90, 0x01, 0x36, 0x74, 0x02, 0xF0, 0x43, 0x14, 0x40, 0x12, 0x9E,
+0x56, 0x31, 0x17, 0x90, 0x93, 0x5D, 0xE0, 0x60, 0x1D, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x16,
+0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93,
+0x58, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x05, 0x08, 0xE5, 0x08, 0xC3, 0x94, 0xFF, 0x40, 0x0B, 0x90,
+0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x43, 0x90,
+0x01, 0x36, 0x74, 0x04, 0xF0, 0x12, 0x4C, 0x73, 0x90, 0x93, 0x5D, 0xE0, 0x60, 0x34, 0x90, 0x93,
+0x58, 0xE0, 0xFF, 0x90, 0x93, 0x41, 0xE0, 0x6F, 0x70, 0x28, 0x90, 0x93, 0x58, 0xE0, 0x90, 0x05,
+0x73, 0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x7D, 0x01,
+0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93, 0x41, 0xE0,
+0x14, 0xF0, 0xE5, 0x2E, 0x30, 0xE3, 0x34, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0, 0xE5, 0x62, 0x64,
+0x01, 0x70, 0x28, 0xE5, 0x65, 0x60, 0x24, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
+0x02, 0xF0, 0x75, 0x48, 0x00, 0x90, 0x93, 0x4C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4, 0x2B,
+0x90, 0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x20, 0xE5, 0x65, 0x60, 0x1C, 0x90,
+0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x5B, 0xE4, 0xF0, 0x53,
+0x66, 0xFD, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x52, 0x17, 0xE5, 0x2E, 0x30, 0xE5, 0x25,
+0x90, 0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x1A, 0xE5, 0x65, 0x60, 0x16, 0x90,
+0x93, 0x5A, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64, 0x0C, 0x60, 0x08, 0x12, 0x51, 0x48,
+0x80, 0x03, 0x12, 0x50, 0x77, 0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40, 0xF0,
+0xE5, 0x62, 0xB4, 0x01, 0x10, 0xE5, 0x65, 0x60, 0x0C, 0x53, 0x66, 0xFE, 0xE5, 0x66, 0x54, 0x07,
+0x70, 0x03, 0x12, 0x52, 0x17, 0xE5, 0x2F, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0,
+0x12, 0x4F, 0xFA, 0x74, 0x86, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0xD0, 0x07,
+0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0,
+0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x93, 0x5E, 0xE0, 0x54, 0xF0, 0x44,
+0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x15, 0x90, 0x94, 0x13,
+0x12, 0x43, 0xC8, 0x0B, 0x7A, 0x93, 0x79, 0x5E, 0x02, 0x55, 0x2C, 0x90, 0x94, 0x38, 0xE0, 0x30,
+0xE0, 0x2F, 0xE5, 0x62, 0xB4, 0x01, 0x2A, 0x90, 0x94, 0x37, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A,
+0x0B, 0x90, 0x94, 0x3A, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x37, 0xF0, 0x90, 0x94, 0x3A, 0xE0,
+0xFF, 0x90, 0x94, 0x39, 0xE0, 0xD3, 0x9F, 0x50, 0x08, 0x12, 0x44, 0xFE, 0xE4, 0x90, 0x94, 0x3A,
+0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0,
+0x06, 0xC0, 0x07, 0x7D, 0x02, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x67, 0xFF, 0xA3, 0xF0, 0x53,
+0x91, 0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE, 0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90, 0x00,
+0x52, 0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0, 0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06, 0x90,
+0x00, 0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D, 0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20, 0xF0,
+0xE5, 0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00, 0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7, 0x06,
+0x90, 0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5, 0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74, 0x01,
+0xF0, 0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90, 0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30, 0xE2,
+0x06, 0x90, 0x00, 0x56, 0x74, 0x04, 0xF0, 0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56, 0x74,
+0x08, 0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05,
+0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0,
+0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04,
+0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x75, 0x56, 0x00, 0x90, 0x01, 0xC4, 0x74, 0xA9, 0xF0, 0x74,
+0x67, 0xA3, 0xF0, 0x53, 0x91, 0xDF, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0,
+0x55, 0x31, 0xF5, 0x35, 0xA3, 0xE0, 0x55, 0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37,
+0xE5, 0x34, 0x30, 0xE0, 0x06, 0x90, 0x01, 0x3C, 0x74, 0x01, 0xF0, 0xE5, 0x34, 0x30, 0xE1, 0x10,
+0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x03, 0x12, 0x46, 0x79,
+0xE5, 0x34, 0x30, 0xE2, 0x3A, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0xE5, 0x65, 0x60, 0x30, 0x90,
+0x06, 0x92, 0xE0, 0x30, 0xE0, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93, 0x46, 0xE0, 0xF5, 0x49, 0xE4,
+0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90,
+0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x56, 0xE4, 0xF0, 0x12, 0x52, 0x17, 0xE5,
+0x34, 0x30, 0xE3, 0x3A, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0xE5, 0x65, 0x60, 0x30, 0x90, 0x06,
+0x92, 0xE0, 0x30, 0xE1, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93, 0x46, 0xE0, 0xF5, 0x49, 0xE4, 0xFB,
+0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06,
+0x92, 0x74, 0x02, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x53, 0xE4, 0xF0, 0x12, 0x52, 0x17, 0xE5, 0x34,
+0x30, 0xE4, 0x3D, 0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x30, 0xE0, 0x24,
+0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x07, 0x78, 0x74, 0x01,
+0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12,
+0x34, 0x30, 0x80, 0x03, 0x12, 0x59, 0xA2, 0x90, 0x93, 0x36, 0xE0, 0x60, 0x03, 0x12, 0x5F, 0xCF,
+0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3C, 0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x18,
+0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90, 0x00, 0x83, 0xE0, 0xF5, 0x64, 0x90, 0x01, 0xBB, 0xE5,
+0x64, 0xF0, 0x12, 0x51, 0xEC, 0x12, 0x52, 0x17, 0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3D,
+0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90, 0x93,
+0xB0, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0xFD,
+0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0xE5, 0x36,
+0x30, 0xE1, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0, 0xE5, 0x36, 0x30, 0xE3, 0x08, 0x90, 0x01,
+0x3E, 0x74, 0x08, 0xF0, 0x51, 0x43, 0xE5, 0x36, 0x30, 0xE4, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x10,
+0xF0, 0xE5, 0x36, 0x30, 0xE2, 0x75, 0x90, 0x01, 0x3E, 0x74, 0x04, 0xF0, 0x90, 0x07, 0x8F, 0xE0,
+0x30, 0xE7, 0x13, 0x74, 0x80, 0xF0, 0x90, 0x07, 0x95, 0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x44, 0x04,
+0xF0, 0xE4, 0xFF, 0x12, 0x5E, 0x46, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE6, 0x11, 0x74, 0x40, 0xF0,
+0x90, 0x07, 0x7C, 0xE0, 0xB4, 0x06, 0x07, 0x90, 0x07, 0x80, 0xE0, 0xFF, 0x51, 0x61, 0x90, 0x07,
+0x8F, 0xE0, 0x30, 0xE5, 0x14, 0x74, 0x20, 0xF0, 0xE4, 0xFF, 0x12, 0x5E, 0x46, 0x90, 0x07, 0x95,
+0xE0, 0x44, 0x01, 0xF0, 0xA3, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE2, 0x0D,
+0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x54, 0xFB, 0xF0, 0x7F, 0x01, 0x12, 0x5E, 0x46, 0x90, 0x07, 0x95,
+0xE0, 0x30, 0xE0, 0x07, 0x74, 0x01, 0xF0, 0xFF, 0x12, 0x5E, 0x46, 0xE5, 0x36, 0x30, 0xE5, 0x06,
+0x90, 0x01, 0x3E, 0x74, 0x20, 0xF0, 0xE5, 0x36, 0x30, 0xE6, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x40,
+0xF0, 0xE5, 0x36, 0x30, 0xE7, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x80, 0xF0, 0xE5, 0x37, 0x30, 0xE1,
+0x09, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x43, 0x14, 0x80, 0xE5, 0x37, 0x30, 0xE4, 0x1E, 0x90,
+0x01, 0x3F, 0x74, 0x10, 0xF0, 0x12, 0x44, 0x24, 0x90, 0x93, 0x58, 0xE0, 0x90, 0x05, 0x73, 0xF0,
+0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x12, 0x5F, 0x3F, 0x12, 0x66, 0xCB, 0x74, 0xA9, 0x04,
+0x90, 0x01, 0xC4, 0xF0, 0x74, 0x67, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04,
+0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0,
+0xD0, 0xE0, 0x32, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x11, 0x90,
+0x93, 0x1C, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x08, 0xE0, 0x44, 0x04, 0xF0, 0xE0, 0x54, 0xFD, 0xF0,
+0x22, 0xAD, 0x07, 0x90, 0x93, 0x64, 0xE0, 0x54, 0xF0, 0x44, 0x05, 0xF0, 0x54, 0x0F, 0x44, 0x10,
+0xF0, 0x90, 0x93, 0x66, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x66, 0x90, 0x94, 0x13, 0x12,
+0x43, 0xC8, 0x7A, 0x93, 0x79, 0x64, 0x02, 0x55, 0x2C, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0,
+0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04,
+0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x53, 0x91, 0xBF, 0x90, 0xFD, 0x68, 0xE0, 0x20, 0xE0, 0x02,
+0xA1, 0x59, 0x90, 0x93, 0x95, 0xE0, 0x70, 0x16, 0x90, 0x00, 0x2E, 0xE0, 0x90, 0x93, 0x0F, 0xF0,
+0x90, 0x00, 0x2D, 0xE0, 0x90, 0x93, 0x10, 0xF0, 0x90, 0x93, 0x95, 0x74, 0x01, 0xF0, 0x90, 0xFD,
+0x60, 0xE0, 0x54, 0x3F, 0xD3, 0x94, 0x09, 0x50, 0x02, 0xF1, 0x32, 0x90, 0xFD, 0x60, 0xE0, 0x64,
+0x0E, 0x60, 0x02, 0x61, 0x89, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x20,
+0xE0, 0x02, 0x61, 0x89, 0x90, 0xFD, 0x62, 0xE0, 0x54, 0xC0, 0xFE, 0x90, 0x07, 0x90, 0xE0, 0x54,
+0x3F, 0x4E, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x07, 0x91, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90,
+0x07, 0x92, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x07, 0x93, 0xF0, 0x90, 0x07, 0x95, 0x74, 0x01,
+0xF0, 0xEF, 0x20, 0xE0, 0x44, 0x90, 0x93, 0x04, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x19,
+0x90, 0x07, 0x78, 0x12, 0x58, 0x8A, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x49,
+0x90, 0x07, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x80, 0x40, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13,
+0x30, 0xE0, 0x11, 0xE4, 0xFF, 0x12, 0x5E, 0x46, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3,
+0xE0, 0x44, 0x01, 0xF0, 0x90, 0x07, 0x78, 0x80, 0x14, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0x13, 0x13,
+0x54, 0x3F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x12, 0x58, 0x8A, 0x80, 0x0C, 0xE0, 0x44, 0x10,
+0xF0, 0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x0F, 0x0A,
+0x90, 0xFD, 0x62, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xB1, 0xED, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x15,
+0x70, 0x76, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6B, 0xF0, 0xE0, 0x30, 0xE6, 0x1C, 0xF4, 0x54,
+0x3F, 0x04, 0xFF, 0x90, 0x93, 0x0F, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0xC3, 0x9F, 0x90, 0x93, 0x6A,
+0xF0, 0xD3, 0x94, 0x3F, 0x40, 0x20, 0xE4, 0xF0, 0x80, 0x1C, 0x90, 0x93, 0x0F, 0xE0, 0x13, 0x13,
+0x54, 0x3F, 0xFF, 0x90, 0x93, 0x6B, 0xE0, 0x54, 0x3F, 0x2F, 0x90, 0x93, 0x6A, 0xF0, 0xD3, 0x94,
+0x3F, 0x40, 0x03, 0x74, 0x3F, 0xF0, 0x90, 0x93, 0x6A, 0xE0, 0xFF, 0x90, 0x01, 0xE7, 0xF0, 0xEF,
+0x54, 0x30, 0xC4, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x6A, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x4F,
+0x90, 0x93, 0x6C, 0xF0, 0x90, 0x00, 0x2E, 0xF0, 0xEE, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x93, 0x10,
+0xE0, 0x54, 0x0F, 0x4F, 0x90, 0x00, 0x2D, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x21, 0x07, 0x90,
+0xFD, 0x62, 0xE0, 0xFF, 0xB1, 0x74, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x22, 0x02, 0xB1, 0x9C, 0x90,
+0xFD, 0x60, 0xE0, 0x64, 0x23, 0x60, 0x02, 0x81, 0xC0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x2C,
+0x30, 0xE0, 0x05, 0x74, 0x01, 0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13,
+0x13, 0x54, 0x03, 0x20, 0xE0, 0x62, 0x90, 0xFD, 0x65, 0xE0, 0x30, 0xE1, 0x5B, 0x90, 0x93, 0x2D,
+0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x7F, 0x60, 0x7E, 0x08, 0x12, 0x2C,
+0x6E, 0x90, 0x93, 0x32, 0x12, 0x1F, 0xC9, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x7F, 0x70, 0x7E, 0x08,
+0x12, 0x2C, 0x6E, 0x90, 0x93, 0x2E, 0x12, 0x1F, 0xC9, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x01, 0xBE, 0xE0, 0x04, 0xF0,
+0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0x2D, 0x30, 0xE2, 0x08, 0xE0, 0x54, 0x1F, 0x44, 0x20, 0xF0,
+0x80, 0x06, 0xE0, 0x54, 0x1F, 0x44, 0x60, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0xFF, 0x12, 0x9B, 0x06,
+0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x24, 0x02, 0xB1, 0xC4, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x25, 0x13,
+0x90, 0xFD, 0x62, 0xE0, 0x60, 0x0D, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x93, 0x24,
+0x74, 0x04, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x26, 0x05, 0x7F, 0x01, 0x12, 0x9B, 0xA2, 0x90,
+0xFD, 0x60, 0xE0, 0xB4, 0x30, 0x07, 0xE4, 0xFB, 0xFD, 0x7F, 0x01, 0xD1, 0x18, 0x90, 0x93, 0x36,
+0xE0, 0x60, 0x4F, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x31, 0x70, 0x47, 0x90, 0xFD, 0x62, 0xE0, 0x30,
+0xE0, 0x36, 0x90, 0x01, 0x63, 0xE4, 0xF0, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5,
+0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0xE4, 0xFF, 0x12, 0x5E, 0x46,
+0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x80, 0x0A, 0x90, 0xFD, 0x62, 0xE0, 0x30, 0xE1, 0x03, 0x12,
+0x5F, 0xCF, 0x90, 0xFD, 0x68, 0xE0, 0x44, 0x01, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0,
+0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0,
+0xF0, 0xD0, 0xE0, 0x32, 0xAD, 0x07, 0x90, 0x93, 0x6D, 0xE0, 0x54, 0xF0, 0x44, 0x09, 0xF0, 0x54,
+0x0F, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x6F, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6F, 0x90,
+0x94, 0x13, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6D, 0x02, 0x55, 0x2C, 0x90, 0x00, 0x75, 0xE0,
+0x44, 0x01, 0xF0, 0x7F, 0x01, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0x74, 0x03, 0xF0,
+0x7F, 0x02, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0xE4, 0xF0, 0x90, 0x00, 0x75, 0xE0,
+0x54, 0xFE, 0xF0, 0x22, 0x90, 0x93, 0x6D, 0xE0, 0x54, 0xF0, 0x44, 0x0D, 0xF0, 0x54, 0x0F, 0x44,
+0x10, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6F, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6F,
+0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6D, 0x02, 0x55, 0x2C, 0xAE, 0x07, 0x90,
+0x93, 0x6D, 0xE0, 0x54, 0xF0, 0x44, 0x04, 0xF0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x6F,
+0xEE, 0xF0, 0xA3, 0xED, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6F, 0x90, 0x94, 0x13, 0x12, 0x43,
+0xC8, 0x7A, 0x93, 0x79, 0x6D, 0x02, 0x55, 0x2C, 0xAC, 0x07, 0x90, 0x93, 0xDB, 0xE0, 0x44, 0x0F,
+0xF0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0x93, 0xDD, 0xEC, 0xF0, 0x60, 0x32, 0x90, 0xFD, 0x63,
+0xE0, 0x90, 0x93, 0xDE, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0x90, 0x93, 0xDF, 0xF0, 0x90, 0xFD, 0x64,
+0xE0, 0x90, 0x93, 0xE0, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0xE1, 0xF0, 0x90, 0xFD, 0x66,
+0xE0, 0x90, 0x93, 0xE2, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0xE3, 0xF0, 0x80, 0x11, 0x90,
+0x93, 0xDE, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
+0x7B, 0x01, 0x7A, 0x93, 0x79, 0xDD, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0xDB,
+0x02, 0x55, 0x2C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x84,
+0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x85, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F,
+0x0F, 0x90, 0x93, 0x86, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x87, 0xF0, 0x90,
+0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x88, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0xFD,
+0x58, 0xE0, 0x20, 0xE0, 0x14, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x84, 0x7F, 0x30, 0xD1, 0xE8, 0x90,
+0x93, 0x84, 0xE0, 0xFB, 0x7D, 0x01, 0xE4, 0x80, 0x07, 0x90, 0x93, 0x84, 0xE0, 0xFB, 0xE4, 0xFD,
+0xFF, 0xD1, 0x18, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x93, 0x8B, 0x12, 0x43, 0xC8, 0xE4, 0xFE, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x2F, 0x90, 0xFD,
+0x50, 0xEF, 0xF0, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x1E, 0x90, 0x93, 0x8B, 0x12, 0x43, 0xA8, 0x8E,
+0x82, 0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x51, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD,
+0xF5, 0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDC, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0x90, 0x93, 0x6D, 0xE0, 0x54, 0xF0, 0x44, 0x0A, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90,
+0x93, 0x6F, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x70, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90,
+0x93, 0x71, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0x72, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90,
+0x93, 0x73, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90, 0x93, 0x6D, 0x30, 0xE6, 0x08, 0xE0, 0x54, 0x0F,
+0x44, 0x50, 0xF0, 0x80, 0x16, 0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90,
+0x93, 0x74, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0x75, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79,
+0x6F, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6D, 0x02, 0x55, 0x2C, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x93, 0x79, 0xF0, 0x90,
+0x93, 0x79, 0xE0, 0xFD, 0x70, 0x03, 0x02, 0x70, 0xE9, 0x90, 0x94, 0x46, 0xE0, 0xFF, 0x74, 0x01,
+0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF,
+0x5D, 0x70, 0x03, 0x02, 0x70, 0xE2, 0x90, 0x94, 0x46, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0,
+0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7A, 0xF0, 0x75, 0x20, 0x01, 0x75, 0x21, 0x93, 0x75, 0x22,
+0x7A, 0x75, 0x23, 0x01, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x7B, 0x12, 0x55, 0xDD, 0x90, 0x93, 0x7B,
+0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x94, 0x46, 0x30, 0xE0, 0x59, 0xE0, 0x75,
+0xF0, 0x02, 0x90, 0x00, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90, 0x94, 0x46,
+0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D, 0xF0, 0x90,
+0x94, 0x46, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7E,
+0xF0, 0x90, 0x94, 0x46, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x9C, 0xE0, 0x90,
+0x93, 0x7F, 0xF0, 0x90, 0x94, 0x46, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x9C,
+0xE0, 0x90, 0x93, 0x80, 0xF0, 0x80, 0x33, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43,
+0x9C, 0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90, 0x94, 0x46, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2,
+0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D, 0xF0, 0x90, 0x94, 0x46, 0xE0, 0x75, 0xF0, 0x04, 0x90,
+0x01, 0xD3, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7E, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01,
+0x7A, 0x93, 0x79, 0x7C, 0x11, 0xEE, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x90, 0x94, 0x46, 0xE0, 0xFE,
+0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x93, 0x79,
+0xF0, 0x90, 0x94, 0x46, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8,
+0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x94, 0x46, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x02,
+0x6F, 0xAF, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93,
+0x81, 0x12, 0x43, 0xC8, 0xEF, 0x12, 0x43, 0xD1, 0x71, 0x98, 0x01, 0x71, 0x8F, 0x02, 0x71, 0xE0,
+0x03, 0x71, 0xE9, 0x05, 0x71, 0xF2, 0x06, 0x73, 0x46, 0x07, 0x71, 0xFA, 0x0B, 0x72, 0x03, 0x10,
+0x72, 0x0B, 0x11, 0x72, 0x13, 0x12, 0x72, 0x1B, 0x16, 0x72, 0x25, 0x17, 0x72, 0x2F, 0x18, 0x72,
+0x39, 0x19, 0x73, 0x09, 0x1B, 0x73, 0x12, 0x1C, 0x72, 0x42, 0x1D, 0x72, 0x4C, 0x1E, 0x72, 0x57,
+0x21, 0x72, 0x60, 0x22, 0x72, 0x69, 0x23, 0x72, 0x72, 0x24, 0x72, 0x7B, 0x25, 0x72, 0x84, 0x26,
+0x72, 0x8D, 0x27, 0x72, 0x96, 0x28, 0x72, 0x9F, 0x29, 0x71, 0xA1, 0x2D, 0x71, 0xAA, 0x2E, 0x72,
+0xA8, 0x2F, 0x73, 0x1B, 0x30, 0x72, 0xB9, 0x32, 0x72, 0xB0, 0x33, 0x71, 0xBC, 0x34, 0x72, 0xC2,
+0x36, 0x72, 0xCB, 0x37, 0x72, 0xD4, 0x38, 0x72, 0xDC, 0x3A, 0x71, 0xB3, 0x3B, 0x72, 0xE5, 0x3E,
+0x72, 0xEE, 0x3F, 0x72, 0xF7, 0x41, 0x73, 0x24, 0x46, 0x71, 0xC5, 0x47, 0x71, 0xD7, 0x48, 0x71,
+0xCE, 0x49, 0x73, 0x2D, 0x4B, 0x73, 0x36, 0x51, 0x73, 0x00, 0x53, 0x00, 0x00, 0x73, 0x3F, 0x90,
+0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8B, 0xA0, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8B,
+0xA6, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8C, 0x87, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8,
+0x02, 0x8C, 0xCF, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0x08, 0x90, 0x93, 0x81, 0x12,
+0x43, 0xA8, 0x02, 0x8D, 0x3A, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0x40, 0x90, 0x93,
+0x81, 0x12, 0x43, 0xA8, 0x02, 0x8E, 0x00, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x98, 0x29,
+0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8E, 0x11, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02,
+0x8A, 0x5A, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x81, 0x17, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8,
+0x02, 0x8A, 0xD0, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x61, 0x47, 0x90, 0x93, 0x81, 0x12, 0x43,
+0xA8, 0x61, 0x4D, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x61, 0x53, 0x90, 0x93, 0x81, 0x12, 0x43,
+0xA8, 0x7F, 0x01, 0x80, 0x2F, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x7F, 0x02, 0x80, 0x25, 0x90,
+0x93, 0x81, 0x12, 0x43, 0xA8, 0x7F, 0x03, 0x80, 0x1B, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02,
+0x8F, 0x43, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0xE4, 0xFF, 0x80, 0x08, 0x90, 0x93, 0x81, 0x12,
+0x43, 0xA8, 0x7F, 0x04, 0x02, 0x8E, 0x61, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x7B,
+0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x94, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02,
+0x8F, 0xAD, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0xC6, 0x90, 0x93, 0x81, 0x12, 0x43,
+0xA8, 0x02, 0x8F, 0xDF, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0xF8, 0x90, 0x93, 0x81,
+0x12, 0x43, 0xA8, 0x02, 0x90, 0x11, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x2A, 0x90,
+0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x43, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x81, 0x08,
+0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x6B, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02,
+0x90, 0x84, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x9D, 0x90, 0x93, 0x81, 0x12, 0x43,
+0xA8, 0x02, 0x92, 0x50, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x61, 0xE6, 0x90, 0x93, 0x81, 0x12,
+0x43, 0xA8, 0x02, 0x92, 0x62, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x97, 0xBC, 0x90, 0x93,
+0x81, 0x12, 0x43, 0xA8, 0x02, 0x97, 0xD5, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x98, 0x10,
+0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x5F, 0xE9, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02,
+0x8A, 0x9F, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0x86, 0x90, 0x93, 0x81, 0x12, 0x43,
+0xA8, 0x02, 0x9A, 0xAF, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x6E, 0x83, 0x90, 0x93, 0x81,
+0x12, 0x43, 0xA8, 0x02, 0x98, 0x31, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8E, 0x59, 0x90,
+0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x7D, 0x05, 0x7F, 0x0B, 0x80, 0x10, 0x7D, 0x01, 0x7F,
+0x0C, 0x80, 0x0A, 0x7D, 0x01, 0x7F, 0x0D, 0x80, 0x04, 0x7D, 0x03, 0x7F, 0x11, 0xD3, 0x10, 0xAF,
+0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x3B, 0x12, 0x43, 0xC8, 0xE4, 0xFE, 0x90, 0x00, 0xA3, 0xE0,
+0x54, 0xF8, 0x44, 0x05, 0xF0, 0x90, 0x00, 0xA0, 0xE0, 0x54, 0x0F, 0x64, 0x04, 0x70, 0x5A, 0x90,
+0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x49, 0x90, 0xFD, 0x50, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xEE, 0xC3,
+0x9D, 0x50, 0x1E, 0x90, 0x94, 0x3B, 0x12, 0x43, 0xA8, 0x8E, 0x82, 0x75, 0x83, 0x00, 0x12, 0x1F,
+0x0F, 0xFF, 0x74, 0x52, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5, 0x83, 0xEF, 0xF0, 0x0E, 0x80,
+0xDD, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x0F, 0x74, 0x52, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5,
+0x83, 0xE4, 0xF0, 0x0E, 0x80, 0xEB, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0xFF, 0x80, 0x12, 0x90,
+0x01, 0x43, 0xE0, 0x04, 0xF0, 0x7F, 0x02, 0x80, 0x08, 0x90, 0x01, 0x42, 0xE0, 0x04, 0xF0, 0x7F,
+0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12,
+0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x23, 0x71, 0x5D, 0xEF, 0xB4,
+0x03, 0x05, 0x7F, 0xFF, 0x12, 0x9B, 0x06, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0xE9, 0x24, 0x01, 0xF9,
+0xE4, 0x3A, 0xFA, 0x7D, 0x04, 0x61, 0x5D, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x1F,
+0xFE, 0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06, 0x90, 0x93, 0x84, 0xEF, 0xF0,
+0xA3, 0xED, 0xF0, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03,
+0x12, 0x1F, 0x0F, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x00, 0x04, 0x12,
+0x1F, 0x0F, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x93, 0x8A, 0xF0, 0x90, 0x93, 0x84,
+0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAD, 0x82, 0xAC, 0x83, 0x90,
+0x93, 0x8B, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74,
+0x8A, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xA8,
+0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x8D, 0x12, 0x43, 0xA8, 0xEF,
+0x12, 0x42, 0x53, 0x90, 0x93, 0x86, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF,
+0x90, 0x93, 0x8D, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x65, 0x90, 0x93, 0x86,
+0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x8B, 0xE0, 0xFC, 0xA3,
+0xE0, 0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0x8D, 0x82, 0x8C, 0x83, 0xA3,
+0xF0, 0x90, 0x93, 0x89, 0xE0, 0xFE, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0x24, 0xC2, 0xF5, 0x82, 0xE4,
+0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x85, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90,
+0x8A, 0x8A, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8B, 0x12, 0x43,
+0x9C, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8C,
+0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x8F, 0x57, 0xEF, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34,
+0x90, 0xAF, 0x82, 0xF5, 0x58, 0x8F, 0x59, 0xE5, 0x57, 0x75, 0xF0, 0x02, 0xA4, 0x24, 0x02, 0xF9,
+0x74, 0x89, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C, 0x75, 0xF0, 0x09, 0xE5, 0x57,
+0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAF, 0x82, 0x85, 0x83, 0x5D, 0x8F, 0x5E, 0xE5, 0x57, 0x75,
+0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35, 0xF0, 0x75, 0x5F, 0x01, 0xF5, 0x60, 0x89,
+0x61, 0x74, 0xC2, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x12, 0x43, 0xD1,
+0x75, 0xA5, 0x00, 0x75, 0xBA, 0x01, 0x75, 0xCF, 0x02, 0x75, 0xE4, 0x03, 0x76, 0x0D, 0x04, 0x76,
+0x22, 0x05, 0x76, 0x37, 0x06, 0x76, 0x5D, 0x0C, 0x76, 0x8A, 0x0D, 0x76, 0xB7, 0x0E, 0x76, 0xE4,
+0x0F, 0x00, 0x00, 0x77, 0x18, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
+0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80, 0x3C, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47,
+0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x10, 0x80, 0x27, 0xE5,
+0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3,
+0x74, 0x05, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
+0x83, 0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
+0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0x8F, 0xF0, 0xE1, 0x18, 0xE5, 0x57, 0x25,
+0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF5,
+0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74,
+0x0F, 0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
+0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02,
+0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xE1, 0x18, 0x90, 0x04, 0x47,
+0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x46, 0xE0, 0xAB, 0x5A,
+0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x45, 0xE0, 0x85, 0x59,
+0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x44, 0xE1, 0x0F, 0x90, 0x04, 0x4B, 0xE0, 0xAB, 0x5A,
+0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4A, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9,
+0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x49, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58,
+0x83, 0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04, 0x4F, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9,
+0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4E, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00,
+0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x4D, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90,
+0x04, 0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42,
+0x53, 0x90, 0x04, 0x52, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42,
+0x65, 0x90, 0x04, 0x51, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x50, 0xE0,
+0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0xC0, 0x03,
+0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x12, 0x1E,
+0xF6, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0xAB, 0x5A, 0xE5, 0x5C, 0x24,
+0x01, 0xF9, 0xE4, 0x35, 0x5B, 0xFA, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF,
+0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x5F, 0xD0, 0x01, 0xD0,
+0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xC0, 0x83, 0xC0, 0x82,
+0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83,
+0xF0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E,
+0x82, 0x85, 0x5D, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0xE5, 0x57,
+0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E,
+0x60, 0x4C, 0x90, 0x93, 0x90, 0x74, 0x0B, 0xF0, 0x90, 0x93, 0x90, 0xE0, 0xFF, 0xC3, 0x94, 0x00,
+0x50, 0x03, 0x02, 0x78, 0x5E, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33,
+0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34,
+0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x0A, 0x90, 0x93, 0x90, 0xE0,
+0x24, 0x10, 0xA3, 0xF0, 0x80, 0x68, 0x90, 0x93, 0x90, 0xE0, 0x14, 0xF0, 0x80, 0xBA, 0xE5, 0x57,
+0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E,
+0x60, 0x47, 0x90, 0x93, 0x90, 0x74, 0x0F, 0xF0, 0x90, 0x93, 0x90, 0xE0, 0xFF, 0xC3, 0x94, 0x00,
+0x40, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
+0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83,
+0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x93, 0x90, 0xE0, 0xA3, 0xF0, 0x80,
+0x0D, 0x90, 0x93, 0x90, 0xE0, 0x14, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x91, 0xF0, 0xE5, 0x57,
+0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E,
+0x60, 0x46, 0xE4, 0x90, 0x93, 0x90, 0xF0, 0x90, 0x93, 0x90, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x40,
+0x02, 0x21, 0x17, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
+0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
+0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x06, 0x90, 0x93, 0x90, 0xE0, 0x80, 0x63,
+0x90, 0x93, 0x90, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82,
+0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x90,
+0xF0, 0x90, 0x93, 0x90, 0xE0, 0xFF, 0xC3, 0x94, 0x0C, 0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8,
+0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0,
+0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E,
+0x60, 0x08, 0x90, 0x93, 0x90, 0xE0, 0x24, 0x10, 0x80, 0x09, 0x90, 0x93, 0x90, 0xE0, 0x04, 0xF0,
+0x80, 0xBF, 0xE4, 0x90, 0x93, 0x92, 0xF0, 0x90, 0x93, 0x91, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0xE5,
+0x57, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xEF, 0xF0, 0x90, 0x93, 0x92, 0xE0, 0xFE, 0x75, 0xF0,
+0x09, 0xE5, 0x57, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0xE5, 0x57, 0xC3, 0x94, 0x20,
+0x50, 0x2C, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3, 0x9F,
+0x40, 0x02, 0x80, 0x47, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
+0xC3, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x92, 0xE0, 0xA3, 0xF0, 0x80, 0x37, 0x80, 0x2D, 0x74, 0x27,
+0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x91, 0xE0, 0xFE,
+0xEF, 0xD3, 0x9E, 0x40, 0x07, 0x90, 0x93, 0x93, 0xEE, 0xF0, 0x80, 0x17, 0x90, 0x93, 0x92, 0xE0,
+0xFE, 0xEF, 0xC3, 0x9E, 0x50, 0x05, 0xA3, 0xEE, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x91, 0xE0, 0x90,
+0x93, 0x93, 0xF0, 0x90, 0x93, 0x93, 0xE0, 0xFD, 0xAF, 0x57, 0x31, 0xEF, 0x90, 0x93, 0x93, 0xE0,
+0xFF, 0x74, 0xA7, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93,
+0x91, 0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x03, 0xF0, 0x22, 0xEF,
+0xD3, 0x94, 0x0B, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x02, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x03,
+0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x8A, 0x83, 0xF0, 0x22, 0xD3,
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x0E, 0x74, 0x84, 0x2F, 0xF5,
+0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED, 0xF0, 0x80, 0x29, 0x74, 0x27, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0x91, 0xF5, 0x83, 0xED, 0xF0, 0x90, 0x93, 0xCE, 0xEF, 0xF0, 0x24, 0x27, 0xF5, 0x82, 0xE4,
+0x34, 0x91, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0xCF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xCE, 0x7D,
+0x02, 0x71, 0xB4, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F, 0x52, 0x8D, 0x53, 0xE5, 0x53, 0x54, 0x1F,
+0x90, 0x93, 0x60, 0xF0, 0x74, 0x01, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x90,
+0x93, 0x5E, 0xF0, 0x90, 0x93, 0x61, 0x74, 0x01, 0xF0, 0xEB, 0xC3, 0x94, 0x01, 0x40, 0x02, 0x80,
+0x3B, 0x90, 0x93, 0x5E, 0xE0, 0x25, 0x55, 0xFF, 0xA3, 0xF0, 0xA3, 0xE0, 0x90, 0x41, 0xA4, 0x93,
+0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x13, 0x74, 0x01, 0x25, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
+0x83, 0xE4, 0xF0, 0xAD, 0x53, 0xAF, 0x52, 0x21, 0xEF, 0x90, 0x93, 0x5F, 0xE0, 0xFF, 0x74, 0x01,
+0x25, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0xAD, 0x07, 0x75, 0xF0,
+0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x63, 0xF0, 0x74, 0x28, 0x2D,
+0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x54, 0x1F, 0x90, 0x93, 0x62, 0xF0, 0x74, 0xE8,
+0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x74, 0xE8, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x5D, 0x74, 0xE8, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x85, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5,
+0x83, 0xE0, 0xFF, 0x74, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEF, 0xF0, 0x74,
+0x85, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x74,
+0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0xC6, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0xC8, 0x40, 0x0D, 0x74, 0xC6, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0x8E, 0xF5, 0x83, 0x74, 0xC8, 0xF0, 0x90, 0x93, 0x63, 0xE0, 0xFF, 0x90, 0x93, 0x62,
+0xE0, 0xD3, 0x9F, 0x40, 0x02, 0xEF, 0xF0, 0x90, 0x93, 0x62, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C,
+0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25,
+0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4,
+0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
+0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x05, 0x90, 0x93, 0x62, 0xE0, 0xFD,
+0x31, 0xEF, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x12, 0x90, 0x04, 0x30, 0xE0,
+0x70, 0x0C, 0x04, 0xF0, 0xA3, 0xF0, 0xA3, 0x04, 0xF0, 0x90, 0x04, 0xCF, 0x04, 0xF0, 0x90, 0x93,
+0x62, 0xE0, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x1C, 0x12, 0x43,
+0xC8, 0x90, 0x94, 0x1F, 0xE0, 0x54, 0xF0, 0x44, 0x06, 0xFF, 0xF0, 0xED, 0x54, 0x0F, 0xC4, 0x54,
+0xF0, 0xFE, 0xEF, 0x54, 0x0F, 0x4E, 0xF0, 0x90, 0x94, 0x1C, 0x12, 0x43, 0xA8, 0x90, 0x94, 0x13,
+0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x1F, 0x12, 0x55, 0x2C, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0xAC, 0x07, 0xEC, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2C, 0xF5, 0x82, 0xE4, 0x34,
+0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x89, 0xF0, 0x80, 0x11, 0x74, 0x27, 0x2C, 0xF5,
+0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x89,
+0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x93, 0x8C, 0xF0, 0x75, 0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x89, 0x12,
+0x43, 0x9C, 0xE0, 0x90, 0x93, 0x8E, 0xF0, 0x75, 0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x88, 0x12, 0x43,
+0x9C, 0xE0, 0xFE, 0x90, 0x93, 0x8F, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34,
+0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x90, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEC,
+0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90,
+0x93, 0x92, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x74, 0xC6, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5,
+0x83, 0xE4, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C, 0x90, 0x93, 0x8F, 0xE0, 0x90, 0x93, 0x8C, 0xF0,
+0x90, 0x93, 0x89, 0xF0, 0xED, 0x70, 0x02, 0xA1, 0x6B, 0x90, 0x93, 0x8D, 0xED, 0xF0, 0x90, 0x93,
+0x89, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x93, 0x8C, 0xE0, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x8D,
+0xE0, 0x14, 0xF0, 0x90, 0x93, 0x8D, 0xE0, 0x70, 0x02, 0xA1, 0x6B, 0x90, 0x93, 0x8C, 0xE0, 0xFF,
+0xD3, 0x94, 0x00, 0x50, 0x02, 0xA1, 0x6B, 0xE4, 0x90, 0x93, 0x8B, 0xF0, 0xEF, 0x14, 0x90, 0x93,
+0x8A, 0xF0, 0x90, 0x93, 0x8E, 0xE0, 0xFD, 0x90, 0x93, 0x8A, 0xE0, 0xFF, 0xD3, 0x9D, 0x40, 0x6F,
+0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
+0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x92, 0xE0, 0x5E, 0xFE,
+0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93, 0x8A, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x37,
+0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
+0xFF, 0x90, 0x93, 0x90, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x1A, 0x90, 0x93, 0x8A,
+0xE0, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x8B, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x8D, 0xE0, 0xFF,
+0x90, 0x93, 0x8B, 0xE0, 0x6F, 0x60, 0x08, 0x90, 0x93, 0x8A, 0xE0, 0x14, 0xF0, 0x80, 0x83, 0x90,
+0x93, 0x8D, 0xE0, 0xFF, 0x90, 0x93, 0x8B, 0xE0, 0xC3, 0x9F, 0x50, 0x0F, 0x90, 0x93, 0x8A, 0xE0,
+0xB5, 0x05, 0x08, 0x90, 0x93, 0x8E, 0xE0, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x89, 0xE0, 0xFF,
+0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01,
+0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01,
+0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xEC, 0x25, 0xE0, 0x24,
+0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x90,
+0x93, 0x89, 0xE0, 0xFD, 0x31, 0xEF, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x22, 0xEF, 0xC3, 0x94, 0x20,
+0x50, 0x39, 0xEF, 0x30, 0xE0, 0x17, 0xED, 0xC4, 0x54, 0xF0, 0xFD, 0xEF, 0xC3, 0x13, 0xFE, 0x24,
+0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x0F, 0x80, 0x10, 0xEF, 0xC3, 0x13,
+0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0xA4,
+0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x4D, 0xF0, 0x22, 0xAD, 0x07, 0xED, 0xC3,
+0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54,
+0x7F, 0x90, 0x93, 0x89, 0xF0, 0x80, 0x11, 0x74, 0x27, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
+0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x89, 0xE0, 0xF9, 0x54, 0x1F, 0xA3,
+0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0xFF, 0x90, 0x93, 0x8C,
+0xF0, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3,
+0xE0, 0x90, 0x93, 0x8D, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82,
+0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x8F, 0xCB, 0xF0, 0xA3, 0xEB,
+0xF0, 0x90, 0x93, 0x8A, 0xE0, 0xFE, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5,
+0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
+0x34, 0x8A, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB, 0xF0, 0xEE, 0xC3, 0x9F, 0x40, 0x02, 0xE1, 0x59,
+0x90, 0x93, 0x8A, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF,
+0xF0, 0xEF, 0x04, 0x90, 0x93, 0x8B, 0xF0, 0x90, 0x93, 0x8C, 0xE0, 0xFF, 0x90, 0x93, 0x8B, 0xE0,
+0xFE, 0xD3, 0x9F, 0x40, 0x02, 0xE1, 0x93, 0xEE, 0xC3, 0x94, 0x10, 0x40, 0x21, 0xEE, 0x24, 0xF0,
+0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
+0xF9, 0xFF, 0x90, 0x93, 0x8D, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93,
+0x8B, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
+0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8F, 0xE0, 0x5E, 0xFE, 0xA3,
+0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x93, 0x8B, 0xE0, 0xB4, 0x11, 0x0D, 0x90, 0x93, 0x8E, 0xE0,
+0x30, 0xE7, 0x06, 0x90, 0x93, 0x8B, 0x74, 0x17, 0xF0, 0x90, 0x93, 0x8B, 0xE0, 0xFF, 0x64, 0x13,
+0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x93, 0x8D, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x93, 0x8B,
+0x74, 0x18, 0xF0, 0x90, 0x93, 0x8B, 0xE0, 0x90, 0x93, 0x8A, 0xF0, 0x90, 0x93, 0x89, 0xF0, 0x80,
+0x42, 0x90, 0x93, 0x8B, 0xE0, 0x04, 0xF0, 0xC1, 0xB7, 0x90, 0x93, 0x8C, 0xE0, 0xFC, 0x90, 0x93,
+0x8A, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83,
+0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01, 0x10,
+0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x93, 0x8A, 0xE0, 0x44, 0x40, 0x90, 0x93, 0x89, 0xF0, 0x80, 0x03,
+0xAF, 0x01, 0x22, 0x90, 0x93, 0x8A, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34,
+0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5,
+0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
+0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83,
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90, 0x93, 0x8A, 0xE0, 0xD3, 0x9C, 0x40, 0x5E, 0x90,
+0x93, 0x8C, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0,
+0x90, 0x93, 0x8A, 0xEF, 0xF0, 0x90, 0x93, 0x89, 0xF0, 0xFC, 0xA3, 0xE0, 0xFF, 0x25, 0xE0, 0x24,
+0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF,
+0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF,
+0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82,
+0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x22, 0x74, 0x01, 0x2D,
+0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0x05, 0x90, 0x93, 0x89, 0xE0, 0x44,
+0x80, 0xFD, 0x12, 0x79, 0xEF, 0x90, 0x93, 0x89, 0xE0, 0x44, 0x80, 0xFF, 0x22, 0xE4, 0x90, 0x93,
+0x79, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0xC3, 0x94, 0x40, 0x40, 0x03, 0x02, 0x88, 0x5F, 0xEF,
+0xB4, 0x20, 0x14, 0x90, 0x8F, 0x46, 0xE0, 0x04, 0xF0, 0x90, 0x89, 0x01, 0xE0, 0xFF, 0x90, 0x8F,
+0x46, 0xE0, 0xB5, 0x07, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90,
+0x8A, 0x8B, 0x12, 0x43, 0x9C, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, 0x88, 0x56, 0xEF, 0x25, 0xE0,
+0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x94, 0x00,
+0xEE, 0x94, 0x00, 0x50, 0x03, 0x02, 0x88, 0x56, 0x90, 0x93, 0x79, 0xE0, 0x94, 0x20, 0x40, 0x09,
+0x90, 0x8F, 0x46, 0xE0, 0x60, 0x03, 0x02, 0x88, 0x5F, 0x90, 0x93, 0x79, 0xE0, 0x75, 0xF0, 0x0A,
+0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C, 0xE0,
+0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xFD, 0xA3, 0xE0,
+0x90, 0x93, 0x7E, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4,
+0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93, 0x80, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0,
+0x90, 0x93, 0x79, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93, 0x7A, 0xF0, 0x80, 0x14, 0x90, 0x93, 0x79,
+0xE0, 0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93, 0x7A,
+0xF0, 0x90, 0x93, 0x7A, 0xE0, 0xFE, 0x54, 0x1F, 0xA3, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x75,
+0xF0, 0x09, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x83, 0xF0, 0x74, 0x67, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x02, 0x61, 0xF4, 0x90,
+0x93, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x7B, 0xE0, 0x9F, 0x40, 0x13, 0x90, 0x93, 0x83, 0xE0, 0x90,
+0x93, 0x7B, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0x90, 0x93, 0x7A, 0xF0, 0xEF, 0x4E, 0xF0, 0x90, 0x93,
+0x7B, 0xE0, 0xFF, 0x90, 0x41, 0x18, 0x93, 0xFE, 0x90, 0x93, 0x79, 0xE0, 0x24, 0x85, 0xF5, 0x82,
+0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x40, 0x06, 0xEF, 0x90, 0x40, 0xE0, 0x80, 0x07,
+0x90, 0x93, 0x7B, 0xE0, 0x90, 0x40, 0xFC, 0x93, 0x90, 0x93, 0x82, 0xF0, 0x90, 0x93, 0x82, 0xE0,
+0x75, 0xF0, 0x06, 0xA4, 0x24, 0x56, 0xF9, 0x74, 0x40, 0x35, 0xF0, 0xFA, 0x7B, 0xFF, 0x8B, 0x57,
+0xF5, 0x58, 0x89, 0x59, 0x90, 0x93, 0x79, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34,
+0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93, 0x7C, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x12,
+0x1E, 0xF6, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x9D, 0xFD, 0xAC,
+0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7C, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA,
+0x58, 0xA9, 0x59, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B,
+0xA9, 0x5C, 0x90, 0x00, 0x02, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93,
+0x7C, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x02,
+0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x04, 0x12,
+0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7C, 0xEE, 0x8F, 0xF0, 0x12, 0x42,
+0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00,
+0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x06, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12,
+0x1F, 0x3C, 0x90, 0x93, 0x7C, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9,
+0x59, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
+0x90, 0x00, 0x08, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7C, 0xEE,
+0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x05, 0x12, 0x1F,
+0x0F, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7E, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0xD3,
+0x90, 0x93, 0x7D, 0xE0, 0x9F, 0x90, 0x93, 0x7C, 0xE0, 0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F, 0xF0,
+0x90, 0x93, 0x7C, 0xE0, 0x9E, 0xF0, 0x80, 0x07, 0xE4, 0x90, 0x93, 0x7C, 0xF0, 0xA3, 0xF0, 0x90,
+0x93, 0x7C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0x79, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5,
+0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x7A, 0xE0, 0x25,
+0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFC, 0x74, 0x01, 0x93,
+0xFD, 0xD3, 0xEF, 0x9D, 0xEE, 0x9C, 0x50, 0x02, 0x61, 0xC3, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x24,
+0x82, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9E, 0x40, 0x03, 0xEF, 0x80, 0x1C, 0x90, 0x93, 0x79,
+0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x82, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x90, 0x93, 0x84, 0xF0, 0x90, 0x93,
+0x84, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x02, 0x80, 0x23, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x24, 0xC6,
+0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x01, 0x40, 0x0F, 0x74, 0xC6, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x14, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x79, 0xE0,
+0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF,
+0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x60, 0x02, 0xE1, 0x04, 0x12, 0x7D,
+0xFC, 0xE1, 0x04, 0x90, 0x93, 0x7A, 0xE0, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41,
+0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xC3, 0x90, 0x93, 0x7D, 0xE0, 0x9F, 0x90,
+0x93, 0x7C, 0xE0, 0x9E, 0x40, 0x02, 0xE1, 0x04, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x7D, 0x01, 0x12,
+0x7B, 0xF1, 0xE1, 0x04, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91,
+0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x02, 0xA1, 0xD2, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4,
+0x03, 0x0B, 0x90, 0x93, 0x7B, 0xE0, 0xC3, 0x94, 0x19, 0x40, 0x3D, 0x80, 0x2E, 0xEE, 0xB4, 0x02,
+0x0B, 0x90, 0x93, 0x7B, 0xE0, 0xC3, 0x94, 0x11, 0x40, 0x2E, 0x80, 0x1F, 0x90, 0x8A, 0x83, 0xE0,
+0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x93, 0x7B, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x1B, 0x80, 0x0C, 0xEE,
+0x70, 0x11, 0x90, 0x93, 0x7B, 0xE0, 0xC3, 0x94, 0x03, 0x40, 0x0D, 0x90, 0x8E, 0xC5, 0x74, 0x01,
+0xF0, 0x80, 0x05, 0xE4, 0x90, 0x8E, 0xC5, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFE, 0x24, 0xC4, 0xF5,
+0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x88, 0xF0, 0x74, 0x85, 0x2E, 0xF5, 0x82,
+0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0xC3, 0x94, 0x30, 0x50, 0x0A, 0xE4, 0x90, 0x93, 0x88,
+0xF0, 0x74, 0x67, 0x2F, 0xA1, 0x7D, 0x90, 0x8E, 0xC5, 0xE0, 0x64, 0x01, 0x60, 0x02, 0xA1, 0x72,
+0x90, 0x93, 0x79, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x64, 0x0A,
+0x60, 0x5B, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0xEE, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x41,
+0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8,
+0x74, 0x80, 0x98, 0x50, 0x38, 0x90, 0x93, 0x79, 0xE0, 0xFE, 0xEF, 0x24, 0x05, 0xFB, 0xE4, 0x33,
+0xFA, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x9B, 0xEA, 0x64,
+0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x16, 0x90, 0x93, 0x79, 0xE0, 0x24, 0xA7, 0xF5, 0x82, 0xE4,
+0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x7B, 0xE0, 0x6F, 0x60, 0x56, 0x90, 0x93, 0x79,
+0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x42, 0x40,
+0x08, 0x90, 0x93, 0x88, 0x74, 0x05, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0x39, 0x90, 0x93, 0x88,
+0x40, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x24,
+0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34,
+0x8F, 0x80, 0x2F, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
+0x83, 0xE4, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x04, 0xF0,
+0x80, 0x14, 0xE4, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4,
+0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x7B, 0xE0, 0xFE, 0x90, 0x93, 0x79, 0xE0, 0xFF,
+0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0xFE,
+0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF,
+0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01, 0x11, 0xE4, 0x90, 0x93, 0x88, 0xF0, 0x74,
+0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0xFD,
+0xE1, 0x01, 0xEC, 0x64, 0x06, 0x60, 0x02, 0xE1, 0x04, 0x90, 0x93, 0x7C, 0xF0, 0xA3, 0xF0, 0x90,
+0x41, 0xE1, 0x93, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7E, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F,
+0x3C, 0x90, 0x93, 0x86, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0x24, 0xC4, 0xF5,
+0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x88, 0xF0, 0xE4, 0x90, 0x93, 0x85, 0xF0,
+0x90, 0x93, 0x85, 0xE0, 0xFF, 0xD3, 0x94, 0x04, 0x50, 0x47, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
+0x75, 0xF0, 0x02, 0xEF, 0xA4, 0xF5, 0x82, 0x85, 0xF0, 0x83, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0,
+0xEF, 0x90, 0x41, 0xDC, 0x93, 0xFF, 0x7E, 0x00, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7C, 0xEE, 0x8F,
+0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0x86, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x93, 0x7D,
+0xE0, 0x9F, 0x90, 0x93, 0x7C, 0xE0, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x85, 0xE0, 0x04, 0xF0, 0x80,
+0xAF, 0x90, 0x93, 0x85, 0xE0, 0xC3, 0x13, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0xFF, 0xB4, 0x01, 0x0D,
+0x90, 0x93, 0x85, 0xE0, 0x70, 0x5D, 0x90, 0x93, 0x88, 0x04, 0xF0, 0x80, 0x5B, 0xEF, 0xB4, 0x03,
+0x1D, 0x90, 0x93, 0x85, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93, 0x88, 0x74, 0x03, 0xF0, 0x80, 0x48,
+0xEF, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x88, 0x74, 0x01, 0xF0, 0x80, 0x3C, 0x80, 0x35, 0x90, 0x93,
+0x88, 0xE0, 0x64, 0x05, 0x70, 0x32, 0x90, 0x93, 0x85, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93, 0x88,
+0x74, 0x05, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x93, 0x88, 0xB4, 0x01, 0x05, 0x74, 0x03, 0xF0, 0x80,
+0x03, 0x74, 0x01, 0xF0, 0xD3, 0x90, 0x93, 0x81, 0xE0, 0x94, 0x03, 0x90, 0x93, 0x80, 0xE0, 0x94,
+0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x88, 0xF0, 0xD3, 0x90, 0x93, 0x81, 0xE0, 0x94, 0x03, 0x90,
+0x93, 0x80, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x88, 0xE0,
+0xFD, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xED,
+0xF0, 0x12, 0x7D, 0xBC, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91,
+0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x05, 0x50, 0x0F, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91,
+0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x79, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4,
+0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x80, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x74,
+0xFF, 0x9F, 0xFF, 0x74, 0xFF, 0x9E, 0xFE, 0x90, 0x93, 0x79, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x47,
+0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0xD3, 0x9F, 0xEA, 0x9E, 0x50,
+0x1C, 0x90, 0x93, 0x80, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82,
+0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x80, 0x14, 0x90, 0x93, 0x79,
+0xE0, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xA3,
+0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5,
+0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0x74, 0xFF, 0x9D, 0xFB, 0x74, 0xFF, 0x9C, 0xFA, 0xEF,
+0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xD3,
+0x9B, 0xEE, 0x9A, 0x90, 0x93, 0x79, 0xE0, 0x50, 0x13, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xEC, 0x8D, 0xF0, 0x12, 0x42, 0x87, 0x80, 0x10, 0x25, 0xE0, 0x24, 0xC7,
+0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA, 0x5B,
+0xA9, 0x5C, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00,
+0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x04, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F,
+0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x08, 0xE4, 0xF5, 0xF0, 0x12,
+0x43, 0x1F, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87,
+0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D,
+0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D,
+0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0x04, 0xF0, 0x02, 0x80, 0x62, 0x22,
+0x90, 0x04, 0x44, 0x74, 0x11, 0xF0, 0xA3, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3, 0xE4,
+0xF0, 0x90, 0x93, 0x79, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x14, 0x74,
+0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0x04,
+0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8F, 0x46, 0xF0, 0x90, 0x89, 0x01, 0x04, 0xF0, 0xE4, 0x90, 0x93,
+0x79, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0xC3, 0x94, 0x40, 0x40, 0x02, 0x41, 0x59, 0x75, 0xF0,
+0x0A, 0xEF, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF,
+0x90, 0x84, 0x02, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84,
+0x04, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x06, 0x12,
+0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x08, 0x12, 0x43, 0x9C,
+0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0xA7, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13,
+0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC4, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82,
+0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82,
+0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x05, 0xF5, 0x82,
+0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82,
+0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82,
+0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82,
+0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0x07, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC7, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4,
+0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8E, 0x04,
+0xF0, 0x90, 0x41, 0x92, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0x90, 0x41, 0x5A, 0x74, 0x01, 0x93,
+0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0x90, 0x93, 0x79, 0xE0, 0xFD,
+0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
+0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x75, 0xF0, 0x09,
+0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x74, 0xC2, 0x2D, 0xF5, 0x82, 0xE4,
+0x34, 0x89, 0xF5, 0x83, 0x74, 0x0C, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x86, 0x12, 0x43,
+0x9C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x84, 0x12, 0x43, 0x9C,
+0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C,
+0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xED,
+0xC3, 0x94, 0x20, 0x50, 0x0F, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0x74,
+0x13, 0xF0, 0x80, 0x0D, 0x74, 0x27, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13,
+0xF0, 0x90, 0x93, 0x79, 0xE0, 0x04, 0xF0, 0x01, 0xA2, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0xC3, 0x94,
+0x40, 0x50, 0x14, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0x8E, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0xB4, 0x40, 0x0A, 0x90, 0x00, 0x02, 0x12, 0x1F,
+0x0F, 0x90, 0x8A, 0x82, 0xF0, 0x22, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x3F, 0xFE,
+0xEF, 0x54, 0x80, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0xFD, 0xAF, 0x06, 0x02, 0x74, 0x2B, 0x12,
+0x1E, 0xF6, 0x90, 0x89, 0x01, 0xF0, 0x22, 0x90, 0x93, 0x90, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x93,
+0xE0, 0x54, 0xF0, 0x44, 0x02, 0xF0, 0x54, 0x0F, 0x44, 0xC0, 0xF0, 0x90, 0x93, 0x90, 0x12, 0x43,
+0xA8, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x93, 0x02, 0x55, 0x2C,
+0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFC, 0xED, 0xC3,
+0x94, 0x40, 0x40, 0x02, 0xE4, 0xFD, 0xEC, 0xC3, 0x94, 0x40, 0x40, 0x02, 0xE4, 0xFC, 0xED, 0x25,
+0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93,
+0x84, 0xF0, 0xEE, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5,
+0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x86, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xED, 0xF0, 0xA3,
+0x74, 0xFF, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
+0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x8A, 0xF0, 0xEE, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5,
+0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x8C, 0xF0, 0xEE, 0xA3,
+0xF0, 0xA3, 0xEC, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x84, 0x41, 0xA7,
+0x12, 0x1E, 0xF6, 0xF5, 0x62, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x84,
+0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0x84,
+0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x5A, 0xF0, 0x90, 0x00, 0x03,
+0x12, 0x1F, 0x0F, 0x90, 0x93, 0x3D, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x01,
+0x90, 0x93, 0x3E, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x01, 0x90, 0x93, 0x48, 0xF0, 0x90, 0x00, 0x04,
+0x12, 0x1F, 0x0F, 0xFF, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x45, 0xF0, 0xEF, 0x13, 0x13, 0x13,
+0x54, 0x01, 0x90, 0x93, 0x4B, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x54, 0x01,
+0x90, 0x93, 0x47, 0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x01, 0x90, 0x93, 0x5C, 0xF0, 0x90, 0x00, 0x04,
+0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x4A, 0xF0, 0xE0, 0x70, 0x38,
+0x90, 0x93, 0x48, 0xE0, 0x70, 0x10, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x87, 0x12, 0x1F, 0xD5,
+0x00, 0x00, 0x03, 0x10, 0x80, 0x0F, 0x7F, 0x01, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x87, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x03, 0x00, 0x90, 0x93, 0x87, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F,
+0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x3E, 0xE0, 0x70, 0x03, 0x12, 0x4F,
+0xB8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x12, 0x4D, 0xC1, 0x90, 0x93, 0x5A, 0xE0, 0x90, 0x01,
+0xE6, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x30, 0xE0,
+0x25, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x49, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93,
+0x4C, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x46, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
+0x0F, 0x90, 0x93, 0x51, 0xF0, 0x22, 0x90, 0x93, 0x49, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4C, 0x74,
+0x05, 0xF0, 0x90, 0x93, 0x46, 0x74, 0x14, 0xF0, 0x90, 0x93, 0x51, 0x74, 0x05, 0xF0, 0x22, 0x12,
+0x1E, 0xF6, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x50, 0xF0, 0x90, 0x00, 0x01,
+0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x4E, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90, 0x93,
+0x50, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x4E, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4E,
+0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x4D, 0xF0, 0x60,
+0x20, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x19, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90,
+0x93, 0x3E, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x57, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x12, 0x51,
+0x69, 0x90, 0x93, 0x4D, 0xE0, 0x90, 0x01, 0xE7, 0xF0, 0x22, 0x90, 0x93, 0x84, 0x02, 0x43, 0xC8,
+0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x37, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF,
+0x54, 0x0F, 0xFF, 0xE0, 0x54, 0xF0, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54, 0x70, 0xFF, 0x90, 0x93,
+0x37, 0xE0, 0x54, 0x8F, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x39, 0xF0,
+0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x3A, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F,
+0x90, 0x93, 0x3B, 0xF0, 0x90, 0x00, 0x01, 0x74, 0x19, 0x12, 0x42, 0x20, 0x90, 0x00, 0x01, 0x12,
+0x1F, 0x0F, 0xFF, 0xD3, 0x94, 0x20, 0x50, 0x08, 0x90, 0x93, 0x38, 0x74, 0x01, 0xF0, 0x80, 0x57,
+0xEF, 0xD3, 0x94, 0x40, 0x50, 0x08, 0x90, 0x93, 0x38, 0x74, 0x02, 0xF0, 0x80, 0x49, 0xEF, 0xD3,
+0x94, 0x60, 0x50, 0x08, 0x90, 0x93, 0x38, 0x74, 0x03, 0xF0, 0x80, 0x3B, 0xEF, 0xD3, 0x94, 0x80,
+0x50, 0x08, 0x90, 0x93, 0x38, 0x74, 0x04, 0xF0, 0x80, 0x2D, 0xEF, 0xD3, 0x94, 0xA0, 0x50, 0x08,
+0x90, 0x93, 0x38, 0x74, 0x05, 0xF0, 0x80, 0x1F, 0xEF, 0xD3, 0x94, 0xC0, 0x50, 0x08, 0x90, 0x93,
+0x38, 0x74, 0x06, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0xE0, 0x90, 0x93, 0x38, 0x50, 0x05, 0x74,
+0x07, 0xF0, 0x80, 0x03, 0x74, 0x08, 0xF0, 0x90, 0x93, 0x38, 0xE0, 0x90, 0x93, 0x3C, 0xF0, 0x22,
+0x12, 0x1E, 0xF6, 0x60, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0,
+0x22, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x1E, 0xF6, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90, 0x93,
+0xAA, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xAB, 0xF0, 0x90,
+0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xAC, 0xF0, 0x90, 0x00, 0x03, 0x12,
+0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xAD, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF,
+0xAE, 0x05, 0xED, 0x2F, 0x90, 0x93, 0xAE, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0xA9, 0xF0,
+0x22, 0xEF, 0x70, 0x21, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x14, 0x90, 0x00, 0x40, 0xE0, 0x44, 0x20,
+0xF0, 0xE0, 0x54, 0x3F, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x44, 0x01, 0xF0, 0x80, 0x07, 0x90, 0x07,
+0x78, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x64, 0x01, 0x70, 0x6A, 0x12, 0x1E, 0xF6, 0x90, 0x00, 0x01,
+0x30, 0xE0, 0x2E, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC0, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
+0x90, 0x06, 0xC1, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC2, 0xF0, 0x90, 0x00,
+0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC3, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x54, 0xFE, 0xF0, 0x80,
+0x2C, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC4, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x06,
+0xC5, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC6, 0xF0, 0x90, 0x00, 0x04, 0x12,
+0x1F, 0x0F, 0x90, 0x06, 0xC7, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x06, 0xCC,
+0xE0, 0x44, 0x02, 0xF0, 0xEF, 0xB4, 0x02, 0x11, 0x12, 0x1E, 0xF6, 0x90, 0x06, 0xC8, 0xF0, 0x90,
+0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC9, 0xF0, 0xEF, 0xB4, 0x03, 0x11, 0x12, 0x1E, 0xF6,
+0x90, 0x06, 0xCA, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xCB, 0xF0, 0xEF, 0x64,
+0x04, 0x70, 0x1F, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x07, 0x83, 0x30, 0xE0, 0x06, 0xE0, 0x44, 0x10,
+0xF0, 0x80, 0x04, 0xE0, 0x54, 0x6F, 0xF0, 0xEF, 0x30, 0xE1, 0x07, 0x90, 0x07, 0x83, 0xE0, 0x44,
+0x80, 0xF0, 0x22, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x12,
+0x1E, 0xF6, 0x90, 0x92, 0x6B, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x92, 0x6C, 0xF0,
+0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x92, 0x6D, 0xF0, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8,
+0x12, 0x73, 0x59, 0xEF, 0xB4, 0x02, 0x03, 0x43, 0x14, 0x01, 0x22, 0x90, 0x93, 0x84, 0x12, 0x43,
+0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F,
+0x17, 0x02, 0x73, 0x5D, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8,
+0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x18, 0x02, 0x73, 0x5D, 0x90, 0x93, 0x84,
+0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D,
+0x01, 0x7F, 0x19, 0x02, 0x73, 0x5D, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12,
+0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1A, 0x02, 0x73, 0x5D, 0x90,
+0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43,
+0xA8, 0x7D, 0x01, 0x7F, 0x1B, 0x02, 0x73, 0x5D, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93,
+0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1C, 0x02, 0x73,
+0x5D, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84,
+0x12, 0x43, 0xA8, 0x7D, 0x03, 0x7F, 0x1D, 0x02, 0x73, 0x5D, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8,
+0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1E,
+0x02, 0x73, 0x5D, 0x12, 0x1E, 0xF6, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x18, 0x12, 0x1F, 0xB6,
+0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0x90, 0x93, 0x0B, 0x12, 0x43, 0x84, 0xEC, 0x54,
+0x03, 0xFC, 0x12, 0x43, 0x59, 0x90, 0x93, 0x07, 0x02, 0x1F, 0xC9, 0x90, 0x93, 0x84, 0x12, 0x43,
+0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F,
+0x1F, 0x02, 0x73, 0x5D, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8,
+0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x20, 0x02, 0x73, 0x5D, 0x12, 0x1E, 0xF6,
+0xFF, 0x54, 0x01, 0x90, 0x01, 0xBC, 0xF0, 0xEF, 0x30, 0xE0, 0x5C, 0x90, 0xFD, 0x58, 0xE0, 0x20,
+0xE0, 0x4E, 0x90, 0xFD, 0x50, 0x74, 0x0A, 0xF0, 0xA3, 0x74, 0x06, 0xF0, 0x90, 0x00, 0x01, 0x12,
+0x1F, 0x0F, 0x90, 0xFD, 0x52, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0xFD, 0x53, 0xF0,
+0xA3, 0xE4, 0xF0, 0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x90, 0xFD, 0x55, 0x30, 0xE0, 0x05, 0x74, 0xA0,
+0xF0, 0x80, 0x03, 0x74, 0xC0, 0xF0, 0x90, 0xFD, 0x56, 0x74, 0x10, 0xF0, 0xA3, 0x74, 0x80, 0xF0,
+0x90, 0xFD, 0x50, 0x74, 0x0A, 0xF0, 0xA3, 0x74, 0x06, 0xF0, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0,
+0x90, 0x01, 0xBD, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFE, 0x90, 0x00,
+0x01, 0x12, 0x1F, 0x0F, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0xFE, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0xE4, 0xFC, 0x74, 0x20, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x93, 0x84, 0xEF,
+0xF0, 0xEE, 0xF9, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x02, 0x09, 0xE0, 0xC3, 0x13,
+0x90, 0xFD, 0x10, 0xF0, 0xEC, 0xC3, 0x99, 0x50, 0x43, 0xEC, 0x70, 0x04, 0x7D, 0x04, 0x80, 0x02,
+0xE4, 0xFD, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x07, 0xAF, 0x05, 0x31, 0xA4, 0x0D, 0x80, 0xF3, 0x0C,
+0x90, 0xFD, 0x10, 0xE0, 0x04, 0xF0, 0xEC, 0xB5, 0x01, 0xDA, 0xE4, 0xFD, 0xED, 0x75, 0xF0, 0x08,
+0xA4, 0xFF, 0x90, 0x93, 0x84, 0xE0, 0xFB, 0xC3, 0xEF, 0x9B, 0x74, 0x80, 0xF8, 0x65, 0xF0, 0x98,
+0x50, 0x07, 0xAF, 0x05, 0x31, 0xA4, 0x0D, 0x80, 0xE3, 0x0C, 0x80, 0xB8, 0x90, 0x00, 0x81, 0xE0,
+0x44, 0x80, 0xFD, 0x7F, 0x81, 0x12, 0x54, 0x1B, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x04, 0xF0, 0xD0,
+0xD0, 0x92, 0xAF, 0x22, 0x90, 0xFD, 0x58, 0xE0, 0x30, 0xE0, 0x08, 0x90, 0x01, 0xB8, 0xE0, 0x04,
+0xF0, 0x80, 0xF1, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0x90, 0xFD, 0x50, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE4,
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x51, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x02,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x52, 0xF0, 0xEF, 0x75, 0xF0, 0x08,
+0xA4, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x53, 0xF0, 0xEF,
+0x75, 0xF0, 0x08, 0xA4, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD,
+0x54, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0x90, 0xFD, 0x55, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x56, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x07, 0xF5,
+0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x57, 0xF0, 0xA3, 0x74, 0x01, 0xF0, 0x22,
+0x12, 0x1E, 0xF6, 0x90, 0xFE, 0x10, 0x60, 0x05, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xE0, 0x54, 0xFE,
+0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x88, 0x12, 0x43, 0xC8, 0x12,
+0x1E, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54,
+0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93,
+0x15, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x10, 0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x12,
+0x1E, 0xF6, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54,
+0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54, 0x80, 0xFF, 0x90, 0x93, 0x15,
+0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x01, 0xFE, 0x90,
+0x93, 0x18, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0,
+0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xFB,
+0x4E, 0xF0, 0xEF, 0x54, 0x10, 0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
+0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40,
+0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0x80, 0xFF, 0x90,
+0x93, 0x18, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20,
+0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF,
+0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x19, 0xE0,
+0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x10, 0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x04,
+0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF,
+0x54, 0x08, 0xFF, 0xE0, 0x54, 0xF7, 0x4F, 0xF0, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x20, 0xE0,
+0x07, 0xB1, 0xCC, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x88, 0x12, 0x43, 0xA8, 0x12, 0x1E,
+0xF6, 0x20, 0xE0, 0x02, 0x81, 0xE7, 0x90, 0x05, 0x54, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x25, 0xF0,
+0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x16, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F,
+0x90, 0x93, 0x16, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x17, 0xF0, 0x80, 0x48,
+0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03,
+0x90, 0x93, 0x16, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x93,
+0x16, 0x74, 0x2A, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12,
+0xEF, 0xC3, 0x94, 0x03, 0x90, 0x93, 0x17, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0,
+0x80, 0x06, 0x90, 0x93, 0x17, 0x74, 0x2A, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54,
+0x03, 0x30, 0xE0, 0x3D, 0x90, 0x93, 0x16, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x1E, 0xF0,
+0xE0, 0xC3, 0x13, 0xA3, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x20,
+0xF0, 0x90, 0x93, 0x16, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x21, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0xC3,
+0x13, 0x90, 0x93, 0x22, 0xF0, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A,
+0xAD, 0xE4, 0x90, 0x93, 0x11, 0xF0, 0x90, 0x93, 0x88, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12,
+0x1F, 0x0F, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x14, 0x12, 0x1E, 0xF6, 0x13, 0x13, 0x13,
+0x54, 0x1F, 0x30, 0xE0, 0x04, 0x7F, 0x01, 0x80, 0x02, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x93,
+0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x18, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07,
+0x30, 0xE0, 0x03, 0x75, 0x64, 0x04, 0x90, 0x05, 0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x11, 0xF0,
+0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x27,
+0x74, 0x01, 0xF0, 0x80, 0x2B, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x04, 0x08, 0x90, 0x93, 0x27, 0x74,
+0x04, 0xF0, 0x80, 0x1C, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x06, 0x08, 0x90, 0x93, 0x27, 0x74, 0x02,
+0xF0, 0x80, 0x0D, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x07, 0x06, 0x90, 0x93, 0x27, 0x74, 0x05, 0xF0,
+0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x80, 0x63, 0x90, 0x93, 0x88, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6,
+0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x90, 0x93, 0x84, 0x30, 0xE0, 0x09, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x03, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0xD1, 0xA1, 0x90, 0x00,
+0x40, 0x74, 0x20, 0xF0, 0x90, 0x93, 0x88, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F,
+0x13, 0x13, 0x13, 0x54, 0x1F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03,
+0x74, 0x01, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x84, 0xB1, 0x82, 0x90, 0x05, 0x22, 0xE4, 0xF0,
+0x90, 0x05, 0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x43, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF,
+0xF0, 0xE4, 0x90, 0x93, 0x26, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
+0x30, 0xE0, 0x09, 0x90, 0x93, 0x04, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x0C, 0x7F, 0x01, 0x12, 0x5E,
+0x46, 0x90, 0x93, 0x04, 0xE0, 0x54, 0xFD, 0xF0, 0x7F, 0x03, 0x12, 0x5E, 0x67, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0x7F, 0x70, 0x7E, 0x08, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0x54, 0xFC,
+0xFF, 0x90, 0x01, 0xE8, 0xF0, 0xEE, 0x44, 0xF0, 0xA3, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F,
+0x90, 0x01, 0xEC, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xED, 0xF0, 0x90, 0x00,
+0x01, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEE, 0xF0, 0x12, 0x1E, 0xF6, 0x90, 0x01, 0xEF, 0xF0, 0x90,
+0x01, 0xEB, 0x74, 0x40, 0xF0, 0xD1, 0x4C, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xEC, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xF0,
+0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01,
+0x00, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x4B, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0,
+0x90, 0x93, 0x3E, 0xE0, 0x60, 0x14, 0x12, 0x51, 0xBB, 0xBF, 0x01, 0x0B, 0x90, 0x93, 0x15, 0xE0,
+0xFF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03, 0x12, 0x4F, 0xB8, 0x90, 0x93, 0x2D, 0xE0, 0x20, 0xE0,
+0x23, 0x90, 0x93, 0x48, 0xE0, 0x60, 0x1D, 0x7F, 0x01, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x5C, 0xE0,
+0x60, 0x12, 0x90, 0x93, 0xF0, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x7B, 0x01, 0x7A, 0x93,
+0x79, 0xF0, 0xB1, 0x82, 0x12, 0x54, 0x5C, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x94, 0x40,
+0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xEB, 0xE0, 0x54, 0xC0, 0x60, 0x43, 0xC3, 0x90, 0x94, 0x41, 0xE0,
+0x94, 0x88, 0x90, 0x94, 0x40, 0xE0, 0x94, 0x13, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x04,
+0xF0, 0x7F, 0x00, 0x22, 0x90, 0x94, 0x40, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14,
+0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x94, 0x41, 0xE0, 0x94, 0x64, 0x90, 0x94, 0x40, 0xE0,
+0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE2, 0xB8, 0x7F, 0x00, 0x22, 0x7F, 0x01,
+0x22, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFE, 0xF0, 0xA3, 0x74, 0x0B, 0xF0, 0xA3, 0x74, 0x08, 0xF0,
+0xE4, 0x90, 0x93, 0x26, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54,
+0xFB, 0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54,
+0x7F, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB,
+0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F,
+0xF0, 0xA3, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x93,
+0x28, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0,
+0x54, 0xDF, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x25, 0xF0, 0x90, 0x93, 0x1C, 0xE0, 0x54, 0xFE,
+0xF0, 0xE4, 0x90, 0x93, 0x23, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x29, 0xF0, 0xA3, 0xF0, 0x90, 0x93,
+0x1C, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xEF, 0xF0,
+0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54, 0xF7, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0xFE, 0xF0, 0xE0,
+0x54, 0xE1, 0xF0, 0xE4, 0x90, 0x93, 0x36, 0xF0, 0x22, 0x90, 0x93, 0x04, 0xE0, 0x54, 0xFE, 0xF0,
+0x54, 0xFB, 0xF0, 0x54, 0xFD, 0xF0, 0x54, 0xF7, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0x12,
+0x1F, 0xD5, 0x20, 0x08, 0x30, 0x70, 0x90, 0x93, 0x0B, 0x12, 0x1F, 0xD5, 0xC0, 0x08, 0x30, 0x70,
+0xE4, 0x90, 0x93, 0x11, 0xF0, 0xA3, 0xF0, 0x43, 0xE8, 0x04, 0x90, 0xFD, 0x68, 0x74, 0x02, 0xF0,
+0x90, 0x04, 0x26, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x07, 0x83, 0xE4, 0xF0, 0x90, 0x07, 0x78, 0x74,
+0x03, 0xF0, 0x90, 0x04, 0x64, 0xE4, 0xF0, 0x90, 0x00, 0x40, 0x74, 0x20, 0xF0, 0xD1, 0xA1, 0x90,
+0x93, 0x2C, 0x74, 0x01, 0xF0, 0x7D, 0x04, 0x7F, 0x02, 0x02, 0x3A, 0xAD, 0x90, 0x93, 0x84, 0x12,
+0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01,
+0x7F, 0x24, 0x02, 0x73, 0x5D, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x1A, 0xE0,
+0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E, 0xF6,
+0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF,
+0xE0, 0x54, 0xF7, 0x4F, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x1B, 0xF0, 0x22,
+0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12,
+0x43, 0xA8, 0x7D, 0x03, 0x7F, 0x26, 0x02, 0x73, 0x5D, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0xB2, 0xF0,
+0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0xB0, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93,
+0xB1, 0xF0, 0x22, 0x90, 0x93, 0xE4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xE8, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x00, 0x00, 0xE4, 0x7F, 0x1F, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0xE8, 0x12, 0x43, 0x90, 0xD3,
+0x12, 0x43, 0x73, 0x50, 0x41, 0x90, 0x93, 0xE8, 0x12, 0x43, 0x84, 0xA9, 0x07, 0x90, 0x93, 0xE4,
+0x12, 0x43, 0x84, 0xA8, 0x01, 0x12, 0x1F, 0xA3, 0xEF, 0x54, 0x01, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC,
+0x7B, 0x01, 0xFA, 0xF9, 0xF8, 0xC3, 0x12, 0x43, 0x73, 0x60, 0x1B, 0x90, 0x93, 0xE8, 0x12, 0x43,
+0x84, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, 0x93,
+0xE8, 0x12, 0x1F, 0xC9, 0x80, 0xAD, 0x90, 0x93, 0xE8, 0x02, 0x43, 0x84, 0x90, 0x93, 0xB6, 0x12,
+0x1F, 0xC9, 0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0xBA, 0x12, 0x43, 0x90, 0xC3, 0x12,
+0x43, 0x73, 0x90, 0x93, 0xB6, 0x60, 0x67, 0x12, 0x43, 0x84, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0xC2,
+0x12, 0x1F, 0xC9, 0x90, 0x93, 0xBA, 0x12, 0x43, 0x84, 0x11, 0x43, 0x90, 0x93, 0xC6, 0x12, 0x1F,
+0xC9, 0x90, 0x93, 0xBA, 0x12, 0x43, 0x84, 0x12, 0x43, 0x66, 0x90, 0x93, 0xC2, 0x12, 0x43, 0x90,
+0x12, 0x43, 0x4C, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0xC6, 0x12, 0x43,
+0x84, 0xA9, 0x07, 0x90, 0x93, 0xBE, 0x12, 0x43, 0x84, 0xA8, 0x01, 0x12, 0x1F, 0xB6, 0xD0, 0x03,
+0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0x59, 0x90, 0x93, 0xCA, 0x12, 0x1F, 0xC9, 0x90,
+0x93, 0xB6, 0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0xCA, 0x80, 0x0A, 0x12, 0x43,
+0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0xBE, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F,
+0xC9, 0xD0, 0x07, 0xD0, 0x06, 0x02, 0x34, 0x30, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x93, 0xF4, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xF8, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x00, 0x00, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x12, 0x54, 0x63, 0x12, 0x54, 0x5C,
+0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54,
+0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x4B, 0xE0, 0x60, 0x06, 0x90,
+0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x3E, 0xE0, 0x60, 0x34, 0xE4, 0x90, 0x93, 0x57, 0xF0,
+0xFF, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0xF4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF4, 0x12,
+0x43, 0x84, 0xEC, 0x54, 0xFD, 0xFC, 0x90, 0x93, 0xF4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF4, 0x12,
+0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90,
+0x93, 0x48, 0xE0, 0x60, 0x24, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x5C, 0xE0, 0x60, 0x13,
+0x90, 0x93, 0xF8, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xF8,
+0x12, 0x95, 0x82, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x52, 0xE0, 0x60, 0x02, 0xE4,
+0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x48,
+0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x47, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02,
+0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46, 0xE0, 0x5F, 0xF0, 0x12, 0x54, 0x63, 0x90,
+0x94, 0x48, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
+0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05,
+0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4C, 0x90, 0x94,
+0x48, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33,
+0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x62, 0xE0, 0x5F, 0xF0, 0x12, 0x54, 0x63, 0x90, 0x94, 0x48,
+0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
+0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x60, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80,
+0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
+0x93, 0x84, 0x12, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x94, 0x38, 0xE0, 0x54,
+0xFE, 0x4F, 0xF0, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x44, 0xFE, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8,
+0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x94,
+0x39, 0xF0, 0x22, 0xE4, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x6B, 0x12, 0x73, 0x59, 0xEF, 0xB4, 0x02,
+0x14, 0x90, 0x94, 0x44, 0xE0, 0x64, 0x04, 0x60, 0x07, 0x43, 0x14, 0x01, 0xE0, 0x04, 0xF0, 0x22,
+0xE4, 0x90, 0x94, 0x44, 0xF0, 0x22, 0xAD, 0x07, 0x90, 0x93, 0xFC, 0xE0, 0x54, 0xF0, 0x44, 0x0C,
+0xF0, 0x54, 0x0F, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0xFE, 0xF0, 0x90, 0xFD, 0x63, 0xE0,
+0x90, 0x93, 0xFF, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x94, 0x00, 0xF0, 0x90, 0xFD, 0x65, 0xE0,
+0x90, 0x94, 0x01, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x94, 0x02, 0xF0, 0x90, 0xFD, 0x67, 0xE0,
+0x90, 0x94, 0x03, 0xF0, 0xED, 0xB4, 0x02, 0x0B, 0x90, 0x93, 0xFC, 0xE0, 0x54, 0x0F, 0x44, 0x20,
+0xF0, 0x80, 0x3C, 0xED, 0xB4, 0x04, 0x0B, 0x90, 0x93, 0xFC, 0xE0, 0x54, 0x0F, 0x44, 0x60, 0xF0,
+0x80, 0x2D, 0xED, 0xF4, 0x70, 0x29, 0x90, 0x93, 0xFC, 0xE0, 0x54, 0x0F, 0x44, 0x60, 0xF0, 0x90,
+0x93, 0x2C, 0xE0, 0x60, 0x08, 0x90, 0x93, 0xFE, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x93,
+0xFE, 0xF0, 0xE4, 0x90, 0x93, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7B,
+0x01, 0x7A, 0x93, 0x79, 0xFE, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0xFC, 0x02,
+0x55, 0x2C, 0xAD, 0x07, 0x90, 0x93, 0x6D, 0xE0, 0x54, 0xF0, 0x44, 0x0E, 0xF0, 0x54, 0x0F, 0xF0,
+0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x70, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93, 0x71, 0xF0,
+0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0x72, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0x73, 0xF0,
+0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93, 0x74, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0x75, 0xF0,
+0xED, 0xB4, 0x01, 0x11, 0x90, 0x93, 0x6D, 0xE0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x6F,
+0x74, 0x01, 0xF0, 0x80, 0x13, 0xED, 0xB4, 0x02, 0x0F, 0x90, 0x93, 0x6D, 0xE0, 0x54, 0x0F, 0x44,
+0x70, 0xF0, 0x90, 0x93, 0x6F, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x6D, 0xE0, 0xFF, 0xC4, 0x54, 0x0F,
+0x60, 0x13, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6F, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0x7A, 0x93,
+0x79, 0x6D, 0x12, 0x55, 0x2C, 0x22, 0x90, 0x93, 0x48, 0xE0, 0x60, 0x27, 0x90, 0x93, 0x4B, 0xE0,
+0x70, 0x21, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x07, 0x78, 0x74,
+0x03, 0xF0, 0x22, 0x90, 0x93, 0x45, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74, 0x0D, 0xF0, 0x22,
+0x74, 0x09, 0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x02,
+0xA1, 0xFC, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x01, 0x70, 0x39, 0x90, 0x06, 0x92, 0xE0, 0x20, 0xE2,
+0x06, 0x90, 0x94, 0x45, 0xE0, 0x60, 0x21, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x29,
+0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x45, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFF, 0x90, 0x93, 0x29,
+0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02, 0xA1, 0xE7, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x90, 0x93, 0x27,
+0x04, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x04, 0x70, 0x3A, 0x90, 0x06, 0x92, 0xE0, 0x20,
+0xE2, 0x06, 0x90, 0x94, 0x45, 0xE0, 0x60, 0x21, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x93,
+0x29, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x45, 0xF0, 0x90, 0x93, 0x20, 0xE0, 0xFF, 0x90, 0x93,
+0x29, 0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02, 0xA1, 0xE7, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x90, 0x93,
+0x27, 0x74, 0x04, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x06, 0x60, 0x02, 0xA1, 0xAB, 0x90,
+0x93, 0x2A, 0xE0, 0xB4, 0x04, 0x0F, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x27,
+0x30, 0xE0, 0x4E, 0xA1, 0xF9, 0x90, 0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x45,
+0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0,
+0x02, 0xA1, 0xBA, 0x90, 0x93, 0x2A, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0x2F, 0xFF, 0xE4, 0x33,
+0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x21, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E,
+0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x90, 0x93, 0x27, 0x40, 0x02, 0xA1,
+0xF9, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4E, 0x27,
+0x90, 0x93, 0x2A, 0xE0, 0x04, 0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x2A, 0xE0, 0xFF,
+0x90, 0x93, 0x29, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12, 0x1F, 0x3C,
+0x90, 0x93, 0x21, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE, 0x64, 0x80,
+0x94, 0x80, 0x40, 0x58, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64,
+0x07, 0x70, 0x49, 0x90, 0x93, 0x2A, 0xE0, 0xB4, 0x04, 0x05, 0x90, 0x93, 0x27, 0x80, 0x3A, 0x90,
+0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0C, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3,
+0xF0, 0x90, 0x93, 0x27, 0x80, 0x23, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4E,
+0x27, 0x90, 0x93, 0x2A, 0xE0, 0x04, 0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F,
+0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x64, 0x01,
+0x70, 0x3C, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x07, 0x90, 0x07,
+0x78, 0x74, 0x0D, 0xF0, 0x22, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xE0,
+0x13, 0x13, 0x54, 0x3F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x24, 0x80, 0x0E, 0x90, 0x93, 0x18, 0xE0,
+0xC3, 0x13, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x02, 0x80, 0x14, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93,
+0x19, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x04, 0x74, 0x03,
+0xF0, 0x22, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x5E, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x20,
+0xE0, 0x02, 0xC1, 0xF8, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x2A,
+0xE4, 0xF5, 0x48, 0x90, 0x93, 0x21, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01,
+0x12, 0x39, 0x77, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x01, 0xF0, 0xE4,
+0x90, 0x93, 0x29, 0xF0, 0x90, 0x93, 0x27, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x5E,
+0xE0, 0xFF, 0x90, 0x93, 0x16, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E,
+0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0x74, 0x01, 0xF0, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0,
+0x90, 0x93, 0x26, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0x60, 0x08, 0x90, 0x05, 0x22, 0x74,
+0x6F, 0xF0, 0x80, 0x1F, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54,
+0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03,
+0x12, 0x51, 0x48, 0xE4, 0x90, 0x94, 0x45, 0xF0, 0x22, 0x00, 0xAA, 0x13
+};
+
+
+const u8 Rtl8723SFwUMCBCutImgArrayWithoutBT[Rtl8723SUMCBCutImgArrayWithoutBTLength] = {
+0x02, 0x23, 0x02, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x02, 0x01, 0x10, 0x06, 0xE0, 0x4A, 0x01, 0x00,
+0x03, 0x21, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x4A, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x59, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x61, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x61, 0xDA, 0x00, 0x00,
+0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03, 0x00, 0x04, 0x06, 0x05, 0x04, 0x02,
+0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09, 0x08, 0x06, 0x00, 0x08, 0x0A, 0x09,
+0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x00, 0x00, 0x08,
+0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10, 0x00, 0x18, 0x22, 0x21, 0x20, 0x18,
+0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21, 0x20, 0x08, 0x00, 0x20, 0x22, 0x21,
+0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20, 0x22, 0x20, 0x18, 0x08, 0x00, 0x20,
+0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00, 0x00, 0x30, 0x31, 0x2F, 0x10, 0x10,
+0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28, 0x10, 0x00, 0x00, 0x30, 0x31, 0x20,
+0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04,
+0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05,
+0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05, 0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E,
+0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E,
+0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A,
+0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F, 0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04,
+0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60,
+0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78, 0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40,
+0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40, 0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8,
+0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0C,
+0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x6C, 0x00, 0x28,
+0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8, 0x00, 0xF0, 0x01, 0x18, 0x00, 0x64,
+0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58, 0x03, 0x20, 0x03, 0xE8, 0x02, 0x02,
+0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07, 0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E,
+0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
+0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x05, 0x06,
+0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xBB, 0x01, 0x0F, 0xF8, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x28,
+0xF0, 0x22, 0x50, 0x09, 0xC5, 0x82, 0x29, 0xF8, 0xE5, 0x82, 0x26, 0xF6, 0x22, 0xBB, 0xFE, 0x09,
+0xC5, 0x82, 0x29, 0xF8, 0xE2, 0x25, 0x82, 0xF2, 0x22, 0xF8, 0xEA, 0x25, 0x83, 0xF5, 0x83, 0xE9,
+0x93, 0x28, 0x22, 0xBB, 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22,
+0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8, 0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83,
+0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22, 0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE,
+0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0,
+0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A,
+0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7,
+0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3, 0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83,
+0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01, 0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82,
+0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82,
+0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22, 0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0,
+0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A, 0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22,
+0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7,
+0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB, 0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8,
+0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5,
+0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB,
+0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x5B, 0xFF, 0xEE,
+0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED,
+0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, 0xCF, 0xF4, 0xCF, 0xCE, 0xF4, 0xCE, 0xCD, 0xF4, 0xCD, 0xCC,
+0xF4, 0xCC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8,
+0x9C, 0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22,
+0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5,
+0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9,
+0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82, 0x15, 0x82, 0x70,
+0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0,
+0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3,
+0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68,
+0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12,
+0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83,
+0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60, 0xE9, 0xA3, 0xA3,
+0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0x90, 0x93, 0x07, 0xF0, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x44, 0xDD,
+0x90, 0x93, 0x51, 0xE0, 0x60, 0x11, 0xE4, 0xF0, 0x53, 0x66, 0xFD, 0xE5, 0x66, 0x54, 0x07, 0x60,
+0x03, 0x02, 0x44, 0xDD, 0x02, 0x44, 0xDA, 0x90, 0x93, 0x38, 0xE0, 0x04, 0xF0, 0x53, 0x66, 0xEF,
+0x90, 0x93, 0x4F, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
+0x30, 0xE0, 0x3A, 0x90, 0x93, 0x4F, 0xE0, 0xFF, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0x0F, 0xB5, 0x07,
+0x0A, 0x90, 0x93, 0x30, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x80, 0x22, 0x90, 0x93, 0x2D, 0xE0, 0xC4,
+0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93, 0x4F, 0xE0, 0xB5,
+0x07, 0x0B, 0xE4, 0xB5, 0x06, 0x07, 0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x2D,
+0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x06, 0x90, 0x93, 0x07, 0x74, 0x5A, 0xF0,
+0x90, 0x93, 0x07, 0xE0, 0xFF, 0x90, 0x93, 0x3F, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93,
+0x38, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x40, 0x0D, 0xE5, 0x62, 0xB4,
+0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12, 0x51, 0x9C, 0x22, 0xEF, 0x60,
+0x0F, 0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22,
+0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x02,
+0x55, 0xE5, 0x22, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0xE4, 0x90, 0x93, 0x01, 0xF0, 0xA3, 0x12,
+0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x46, 0xAB, 0xE5, 0x62, 0x64,
+0x01, 0x60, 0x03, 0x02, 0x46, 0xAB, 0xE5, 0x65, 0x14, 0x60, 0x29, 0x24, 0xFD, 0x60, 0x25, 0x24,
+0x02, 0x24, 0xFB, 0x50, 0x02, 0x80, 0x23, 0x90, 0x93, 0x37, 0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04,
+0xA3, 0xE0, 0x60, 0x16, 0x90, 0x93, 0x37, 0xE0, 0x70, 0x0A, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x93,
+0x37, 0xF0, 0x80, 0x00, 0x90, 0x93, 0x01, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0,
+0x16, 0xA3, 0xE0, 0xB4, 0x06, 0x05, 0xE4, 0x90, 0x93, 0x01, 0xF0, 0xE4, 0xFF, 0x12, 0x5E, 0x91,
+0xEF, 0x70, 0x04, 0x90, 0x93, 0x01, 0xF0, 0x90, 0x93, 0x01, 0xE0, 0x70, 0x03, 0x02, 0x46, 0x9B,
+0x43, 0x66, 0x10, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x44,
+0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0xC3, 0x9F, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90,
+0x93, 0x2E, 0x80, 0x2D, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F,
+0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93, 0x4F, 0xE0, 0xC3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80,
+0x98, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x31, 0x80, 0x06, 0xE4, 0xF5, 0x48, 0x90, 0x93,
+0x2E, 0xE0, 0x80, 0x2D, 0x90, 0x93, 0x4F, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4,
+0xF5, 0x48, 0x90, 0x93, 0x4F, 0xE0, 0xFF, 0x90, 0x93, 0x46, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5,
+0x48, 0x90, 0x93, 0x4F, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x46, 0xE0, 0x04,
+0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57,
+0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04,
+0x12, 0x48, 0xF4, 0xE5, 0x63, 0x64, 0x0C, 0x60, 0x6F, 0x90, 0x93, 0x2B, 0xE0, 0xFF, 0x90, 0x93,
+0x4F, 0xE0, 0xD3, 0x9F, 0x40, 0x08, 0x90, 0x93, 0x2C, 0xE0, 0x04, 0xF0, 0x80, 0x05, 0xE4, 0x90,
+0x93, 0x2C, 0xF0, 0x90, 0x93, 0x4F, 0xE0, 0x90, 0x93, 0x2B, 0xF0, 0xA3, 0xE0, 0xC3, 0x94, 0x05,
+0x40, 0x46, 0xE4, 0xF0, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x4D, 0xE0, 0x70, 0x03,
+0x12, 0x4F, 0x63, 0x90, 0x93, 0x50, 0xE0, 0x64, 0x02, 0x70, 0x21, 0x12, 0x48, 0xF0, 0xE4, 0xF5,
+0x48, 0x90, 0x93, 0x3C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39,
+0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x4C, 0x80, 0x09, 0x43, 0x66, 0x01, 0x12,
+0x51, 0x2B, 0x90, 0x93, 0x48, 0x74, 0x01, 0xF0, 0x12, 0x51, 0x4C, 0x90, 0x93, 0x98, 0xE0, 0x30,
+0xE0, 0x09, 0x12, 0x67, 0x4A, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x07,
+0xF0, 0xA3, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x47, 0xA2,
+0xE5, 0x62, 0x64, 0x01, 0x60, 0x03, 0x02, 0x47, 0xA2, 0x90, 0x93, 0x07, 0x04, 0xF0, 0xE4, 0x90,
+0x93, 0x37, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x16, 0xA3, 0xE0, 0xB4, 0x06, 0x05, 0xE4,
+0x90, 0x93, 0x07, 0xF0, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x70, 0x04, 0x90, 0x93, 0x07, 0xF0,
+0x90, 0x93, 0x07, 0xE0, 0x70, 0x03, 0x02, 0x47, 0xA2, 0x43, 0x66, 0x10, 0x90, 0x93, 0x2D, 0xE0,
+0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x32, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x4F,
+0xE0, 0xD3, 0x9F, 0x50, 0x09, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x2E, 0xE0, 0x80, 0x4A, 0xE4, 0xF5,
+0x48, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0xC3, 0x9F, 0x75, 0xF0,
+0x03, 0xA4, 0xFF, 0x90, 0x93, 0x2E, 0xE0, 0x04, 0x2F, 0x80, 0x2D, 0x90, 0x93, 0x4F, 0xE0, 0x64,
+0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x4F, 0xE0, 0xFF, 0x90, 0x93,
+0x46, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x4F, 0xE0, 0x14, 0x75, 0xF0, 0x03,
+0xA4, 0xFF, 0x90, 0x93, 0x46, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E,
+0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94,
+0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x48, 0xF4, 0x12, 0x51, 0x4C, 0x90, 0x05, 0x22,
+0xE4, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x09, 0x12, 0x67, 0x4A, 0x90, 0x05, 0x22, 0x74,
+0xFF, 0xF0, 0x22, 0xE4, 0xF5, 0x66, 0xF5, 0x65, 0x75, 0x64, 0x0C, 0x75, 0x63, 0x0C, 0x90, 0x93,
+0x50, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x90, 0x93, 0x49, 0xF0, 0x90, 0x93, 0x4E, 0x04, 0xF0, 0x90,
+0x93, 0x37, 0xF0, 0xE4, 0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x39, 0xF0, 0x90, 0x93, 0x46, 0x74,
+0x05, 0xF0, 0xE4, 0x90, 0x93, 0x38, 0xF0, 0x90, 0x93, 0x44, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90,
+0x93, 0x3F, 0xF0, 0x90, 0x93, 0x42, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x3C, 0x74, 0x14, 0xF0, 0x90,
+0x93, 0x47, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x3A, 0xF0, 0x90, 0x93, 0x33, 0xF0, 0x90, 0x93,
+0x71, 0xF0, 0x90, 0x93, 0x43, 0xF0, 0x90, 0x93, 0x53, 0xF0, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x93,
+0x34, 0xF0, 0x90, 0x93, 0x4D, 0xF0, 0x90, 0x93, 0x3E, 0xF0, 0x90, 0x93, 0x3B, 0xF0, 0x90, 0x93,
+0x48, 0xF0, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x93, 0x3D, 0xF0, 0x90, 0x93, 0x52, 0xF0, 0x90, 0x93,
+0x40, 0xF0, 0x90, 0x93, 0x70, 0xE0, 0xB4, 0x02, 0x05, 0x90, 0x00, 0x93, 0xE4, 0xF0, 0x90, 0x93,
+0x2D, 0xE0, 0x54, 0x7F, 0xF0, 0xE0, 0x54, 0xF0, 0xF0, 0xE0, 0x54, 0x8F, 0xF0, 0xE4, 0xA3, 0xF0,
+0xA3, 0xF0, 0x90, 0x93, 0x31, 0xF0, 0x90, 0x93, 0x30, 0xF0, 0x22, 0x8E, 0x69, 0x8F, 0x6A, 0xAD,
+0x6A, 0xAC, 0x69, 0xAF, 0x68, 0x12, 0x44, 0xDE, 0xAF, 0x6A, 0xAE, 0x69, 0x90, 0x04, 0x80, 0xE0,
+0x54, 0x0F, 0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
+0x44, 0x01, 0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xFB,
+0xF0, 0xAC, 0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0xFA,
+0xF0, 0x74, 0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F, 0xF0, 0xAC,
+0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F, 0xF0, 0x90,
+0x04, 0x53, 0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0, 0x90, 0x04,
+0x50, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54,
+0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED, 0xF0, 0x22,
+0x7D, 0x01, 0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x6C, 0x8D, 0x6D, 0xE5,
+0x6C, 0x54, 0x0F, 0xFF, 0xE5, 0x63, 0x54, 0x0F, 0x6F, 0x60, 0x72, 0xE5, 0x6C, 0x30, 0xE2, 0x30,
+0xE5, 0x63, 0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x51, 0x69, 0xE5, 0x63, 0x30, 0xE3, 0x10, 0xE5,
+0x6C, 0x20, 0xE3, 0x0B, 0x12, 0x4D, 0x9D, 0xEF, 0x60, 0x53, 0x12, 0x51, 0x05, 0x80, 0x4E, 0xE5,
+0x63, 0x20, 0xE3, 0x49, 0xE5, 0x6C, 0x30, 0xE3, 0x44, 0xAF, 0x6D, 0x12, 0x50, 0x8A, 0x80, 0x3D,
+0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x6C, 0x20, 0xE3, 0x09, 0x12, 0x4D, 0x9D,
+0xEF, 0x60, 0x2A, 0x12, 0x51, 0x05, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x04, 0x0E, 0xE5, 0x6C,
+0x20, 0xE2, 0x09, 0x12, 0x4B, 0x16, 0xEF, 0x60, 0x14, 0x12, 0x50, 0xB3, 0xE5, 0x63, 0x54, 0x0F,
+0xFF, 0xBF, 0x02, 0x09, 0x12, 0x4C, 0x72, 0xEF, 0x60, 0x03, 0x12, 0x51, 0xB0, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0xE4, 0x90, 0x93, 0x01, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x93, 0x01, 0xF0, 0xE0,
+0x54, 0xC0, 0x70, 0x11, 0x90, 0x93, 0x48, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0x53, 0x66, 0xFD,
+0x12, 0x51, 0x9C, 0x80, 0x0F, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x4D, 0xE0, 0x70,
+0x03, 0x12, 0x4F, 0x63, 0x90, 0x93, 0x01, 0xE0, 0x30, 0xE6, 0x15, 0x43, 0x66, 0x01, 0x90, 0x93,
+0x50, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x51, 0x2B, 0x80, 0x0E, 0x12, 0x4F, 0x1D, 0x80, 0x09,
+0x90, 0x93, 0x48, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0xE4, 0x90, 0x93, 0x48, 0xF0, 0x90, 0x93,
+0x01, 0xE0, 0x30, 0xE7, 0x23, 0x43, 0x66, 0x02, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x42, 0xE0, 0xF5,
+0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05,
+0xF0, 0x90, 0x93, 0x51, 0x74, 0x01, 0xF0, 0x22, 0x53, 0x66, 0xFD, 0x22, 0xEF, 0x64, 0x01, 0x70,
+0x48, 0x7D, 0x78, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x22, 0x90,
+0x01, 0x36, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12,
+0x3A, 0x3F, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x48, 0xF0,
+0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x67, 0x4A, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F,
+0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36, 0x74, 0x7B, 0xF0, 0xA3,
+0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x3A, 0x93, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93,
+0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x06,
+0x0A, 0xE0, 0x44, 0x07, 0xF0, 0x12, 0x4E, 0x3E, 0xE5, 0x62, 0x20, 0xE0, 0x05, 0xE4, 0x90, 0x93,
+0x39, 0xF0, 0x22, 0x02, 0x4A, 0xD1, 0x02, 0x52, 0xA5, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3,
+0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54,
+0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4,
+0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40,
+0x80, 0x90, 0x4F, 0xE3, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5,
+0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60,
+0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5,
+0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA,
+0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0x12, 0x51, 0x83, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01,
+0xB9, 0x74, 0x01, 0xF0, 0x80, 0x61, 0xE5, 0x66, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74,
+0x02, 0xF0, 0x80, 0x53, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x08, 0x90, 0x01, 0xB9,
+0x74, 0x04, 0xF0, 0x80, 0x42, 0xE5, 0x66, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0,
+0x80, 0x35, 0xE5, 0x66, 0x30, 0xE4, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x28, 0x90,
+0x93, 0x39, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x1A, 0x90, 0x93, 0x43,
+0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x80, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0,
+0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F, 0x00, 0x22,
+0xE5, 0x62, 0x64, 0x01, 0x70, 0x6B, 0xE5, 0x65, 0x60, 0x67, 0xE5, 0x65, 0x64, 0x02, 0x60, 0x06,
+0xE5, 0x65, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x93, 0x37, 0xF0, 0x90, 0x06,
+0xAA, 0xE0, 0x90, 0x93, 0x4E, 0xF0, 0x90, 0x93, 0x37, 0xE0, 0x70, 0x07, 0x90, 0x93, 0x4E, 0xE0,
+0xFF, 0x80, 0x05, 0x90, 0x93, 0x37, 0xE0, 0xFF, 0x90, 0x93, 0x37, 0xEF, 0xF0, 0x90, 0x93, 0x39,
+0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x38, 0xF0, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x05,
+0x58, 0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x53,
+0x66, 0xFD, 0x53, 0x66, 0xEF, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x03, 0x12, 0x49,
+0x82, 0x22, 0x90, 0x93, 0x70, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x91, 0x80, 0x0C, 0x90, 0x93, 0x70,
+0xE0, 0x70, 0x04, 0x7D, 0xD4, 0x80, 0x02, 0x7D, 0x40, 0x7F, 0x93, 0x12, 0x53, 0xB6, 0x90, 0x00,
+0x29, 0xE0, 0x54, 0x3F, 0xFD, 0x7F, 0x29, 0x12, 0x53, 0xB6, 0x90, 0x00, 0x28, 0xE0, 0x54, 0xFC,
+0xFD, 0x7F, 0x28, 0x12, 0x53, 0xB6, 0x90, 0x00, 0x08, 0xE0, 0x44, 0x10, 0xFD, 0x7F, 0x08, 0x12,
+0x53, 0xB6, 0x7F, 0x01, 0x12, 0x4D, 0x45, 0x90, 0x00, 0x00, 0xE0, 0x44, 0x20, 0xFD, 0xE4, 0xFF,
+0x12, 0x53, 0xB6, 0x90, 0x00, 0x20, 0xE0, 0x54, 0xFE, 0xFD, 0x7F, 0x20, 0x12, 0x53, 0xB6, 0x90,
+0x00, 0x90, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x53, 0xB6, 0x7F, 0x14, 0x7E, 0x00, 0x02,
+0x3B, 0x09, 0x12, 0x51, 0x83, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0,
+0x80, 0x54, 0xE5, 0x18, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x48, 0xE5, 0x64,
+0x54, 0x0F, 0xD3, 0x94, 0x01, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x37, 0x90,
+0x02, 0x87, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x29, 0x90, 0x02, 0x86,
+0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x1A, 0x90, 0x93, 0x3A, 0xE0,
+0x70, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90,
+0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x02, 0xF0, 0x7F, 0x00, 0x22, 0x90,
+0x93, 0x21, 0x12, 0x43, 0xC8, 0x12, 0x51, 0xC3, 0x90, 0x93, 0x21, 0x12, 0x43, 0xA8, 0x12, 0x1E,
+0xF6, 0xF5, 0x65, 0x14, 0x60, 0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03, 0x70, 0x44,
+0x7F, 0x01, 0x80, 0x3D, 0x90, 0x93, 0x21, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
+0xFD, 0xE4, 0xFF, 0x12, 0x4F, 0xA5, 0x80, 0x29, 0x90, 0x93, 0x21, 0x12, 0x43, 0xA8, 0x90, 0x00,
+0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x01, 0x12, 0x4F, 0xA5, 0x1F, 0x80, 0x14, 0x90, 0x93, 0x21,
+0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x02, 0x12, 0x4F, 0xA5, 0xE4,
+0xFF, 0x12, 0x4A, 0x0C, 0x22, 0x8F, 0x70, 0xE4, 0x90, 0x93, 0xE3, 0xF0, 0xA3, 0xF0, 0x90, 0x01,
+0x09, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0xEF, 0x65, 0x70, 0x60, 0x3E, 0xC3, 0x90,
+0x93, 0xE4, 0xE0, 0x94, 0x88, 0x90, 0x93, 0xE3, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6,
+0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0xE3, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F,
+0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0xE4, 0xE0, 0x94, 0x32, 0x90, 0x93, 0xE3,
+0xE0, 0x94, 0x00, 0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE0, 0xB2, 0x22, 0x12, 0x51, 0x83,
+0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x39, 0x90, 0x93, 0x4C,
+0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x2B, 0x90, 0x93, 0x49, 0xE0, 0x60,
+0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x1D, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x04,
+0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90,
+0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x7F, 0x00, 0x22, 0x90,
+0x00, 0x20, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x20, 0x12, 0x53, 0xB6, 0x7F, 0xF4, 0x7E, 0x01, 0x12,
+0x3B, 0x09, 0x90, 0x00, 0x00, 0xE0, 0x54, 0xDF, 0xFD, 0xE4, 0xFF, 0x12, 0x53, 0xB6, 0x90, 0x00,
+0x28, 0xE0, 0x44, 0x03, 0xFD, 0x7F, 0x28, 0x12, 0x53, 0xB6, 0x90, 0x00, 0x08, 0xE0, 0x54, 0xEF,
+0xFD, 0x7F, 0x08, 0x12, 0x53, 0xB6, 0xE4, 0xFF, 0x12, 0x4D, 0x45, 0x7F, 0x64, 0x7E, 0x00, 0x12,
+0x3B, 0x09, 0x90, 0x00, 0x29, 0xE0, 0x44, 0xC0, 0xFD, 0x7F, 0x29, 0x02, 0x53, 0xB6, 0xE4, 0xFF,
+0x90, 0x00, 0x6A, 0xE0, 0x30, 0xE2, 0x22, 0xE0, 0x30, 0xE0, 0x20, 0xE0, 0x30, 0xE1, 0x0D, 0x90,
+0x00, 0x60, 0xE0, 0x7F, 0x02, 0x30, 0xE3, 0x13, 0x7F, 0x03, 0x80, 0x0F, 0x90, 0x00, 0x60, 0xE0,
+0x7F, 0x03, 0x30, 0xE3, 0x06, 0x7F, 0x02, 0x80, 0x02, 0x7F, 0x03, 0xEF, 0xFD, 0xD3, 0x90, 0x93,
+0x45, 0xE0, 0x9D, 0x90, 0x93, 0x44, 0xE0, 0x94, 0x00, 0x50, 0x05, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0,
+0x90, 0x93, 0x44, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
+0xC0, 0xD0, 0x8F, 0x68, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x6B,
+0x74, 0xFF, 0xF0, 0x12, 0x8A, 0x65, 0xBF, 0x01, 0x0D, 0x90, 0x93, 0x69, 0xE0, 0xFF, 0x7D, 0x01,
+0x12, 0x58, 0x95, 0x12, 0x48, 0x5B, 0x90, 0x05, 0x22, 0xE5, 0x6B, 0xF0, 0x80, 0x0D, 0x90, 0x93,
+0x69, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x95, 0x12, 0x48, 0x5B, 0x90, 0x04, 0x1F, 0x74, 0x20,
+0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x3D, 0x90,
+0x93, 0x50, 0xE0, 0x60, 0x27, 0x12, 0x48, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3C, 0xE0, 0xF5,
+0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05,
+0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x22, 0xE5, 0x63, 0x54, 0x0F,
+0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x48, 0xF4, 0x22, 0x90, 0x01, 0x5F,
+0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3C, 0xE0, 0xF5,
+0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05,
+0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x49, 0x14, 0xF0, 0xE5, 0x63, 0x54, 0x0F,
+0xC3, 0x94, 0x0C, 0x50, 0x0D, 0x12, 0x48, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x03, 0x12,
+0x67, 0x4A, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x4D, 0x74, 0x01, 0xF0,
+0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0xD3, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xD3,
+0x12, 0x43, 0x84, 0xEC, 0x44, 0x02, 0xFC, 0x90, 0x93, 0xD3, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xD3,
+0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30,
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x14, 0x60, 0x09, 0x14, 0x60, 0x16, 0x24, 0x02, 0x70, 0x32,
+0x80, 0x0A, 0x90, 0x93, 0x4E, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x37, 0xF0, 0xE4, 0x90, 0x93, 0x53,
+0xF0, 0x22, 0xED, 0x70, 0x0A, 0x90, 0x93, 0x47, 0xE0, 0x90, 0x93, 0x4E, 0xF0, 0x80, 0x05, 0x90,
+0x93, 0x4E, 0xED, 0xF0, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x93, 0x37, 0xF0, 0x90, 0x93, 0x53, 0x74,
+0x01, 0xF0, 0x22, 0x48, 0x93, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x93,
+0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x93, 0x5E, 0x00, 0x41, 0x93, 0x6D,
+0x00, 0x41, 0x93, 0xE9, 0x00, 0x41, 0x93, 0x2B, 0x00, 0x41, 0x93, 0x2C, 0x00, 0x41, 0x92, 0x69,
+0x00, 0x41, 0x92, 0x6A, 0x00, 0x41, 0x92, 0x68, 0x00, 0x41, 0x93, 0xDF, 0x00, 0x00, 0x90, 0x01,
+0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0x90, 0x93,
+0x35, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x01, 0x04, 0xE0, 0x54, 0x0F, 0xFF, 0x74, 0x40, 0x7E, 0x00,
+0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x90, 0x93, 0x4B, 0xF0,
+0xEE, 0x90, 0x93, 0x4A, 0xF0, 0x22, 0xEF, 0x70, 0x0B, 0x90, 0x93, 0x6F, 0xE0, 0x90, 0x93, 0xD7,
+0x60, 0x0B, 0x80, 0x12, 0x90, 0x93, 0x6F, 0xE0, 0x90, 0x93, 0xD7, 0x60, 0x09, 0x12, 0x1F, 0xD5,
+0x00, 0x00, 0x02, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x01, 0x10, 0x7B, 0x01, 0x7A,
+0x93, 0x79, 0xD7, 0x7F, 0x60, 0x7E, 0x08, 0x02, 0x56, 0x9D, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF,
+0xF0, 0xEF, 0x60, 0x0A, 0xE5, 0x62, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x4E, 0x8B, 0x53, 0x63,
+0xF0, 0x43, 0x63, 0x0C, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x07, 0x90, 0x05, 0x27, 0xE0, 0x54,
+0x7F, 0xF0, 0x22, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12,
+0x8A, 0x65, 0xEF, 0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12,
+0x3A, 0x93, 0x12, 0x54, 0x14, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0xE5, 0x64, 0x30, 0xE6,
+0x12, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0x90, 0x01, 0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0,
+0x53, 0x64, 0xBF, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x0A, 0x90, 0x00, 0x83, 0xE0, 0x30, 0xE0,
+0x03, 0x75, 0x64, 0x02, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01,
+0x05, 0x7F, 0x01, 0x12, 0x4E, 0x8B, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x90, 0x93, 0x98, 0xE0,
+0x30, 0xE0, 0x07, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0x3D, 0xE0, 0x70,
+0x1A, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x14, 0x90, 0x93, 0x68, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x58,
+0x95, 0x8E, 0x6E, 0x8F, 0x6F, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0x3E, 0xE0,
+0x60, 0x16, 0x90, 0x93, 0x41, 0xE0, 0x70, 0x10, 0x90, 0x93, 0x3B, 0xE0, 0x90, 0x07, 0x78, 0x60,
+0x04, 0x74, 0x0D, 0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93, 0xEA, 0xEF, 0xF0, 0x12, 0x56,
+0x14, 0x90, 0x93, 0xEA, 0xE0, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x53, 0x63, 0xF0, 0x43,
+0x63, 0x04, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B,
+0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0x90, 0x93, 0x98, 0xE0,
+0x30, 0xE0, 0x05, 0xAF, 0x64, 0x02, 0x5F, 0x72, 0x7D, 0x01, 0xAF, 0x64, 0x12, 0x48, 0xF4, 0x22,
+0x53, 0x63, 0xF0, 0x43, 0x63, 0x01, 0x12, 0x4C, 0x02, 0x12, 0x4D, 0xEF, 0x53, 0x63, 0xF0, 0x43,
+0x63, 0x02, 0x22, 0xE4, 0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x38, 0xF0, 0xF5, 0x66, 0x22, 0x90,
+0x02, 0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12,
+0x43, 0xF7, 0x51, 0xFA, 0x00, 0x40, 0x52, 0x22, 0x00, 0x80, 0x52, 0x4D, 0x01, 0x00, 0x52, 0x61,
+0x02, 0x00, 0x52, 0x79, 0x04, 0x00, 0x00, 0x00, 0x52, 0x96, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE,
+0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06,
+0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
+0x80, 0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF,
+0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78,
+0x07, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04,
+0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80,
+0x35, 0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF,
+0x2D, 0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE,
+0xFF, 0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D,
+0x00, 0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x1F,
+0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x0C, 0xF0, 0xA3, 0xF0, 0x12, 0x60, 0xFB, 0x75,
+0x8E, 0x02, 0x91, 0xE6, 0x12, 0x60, 0x52, 0x90, 0x93, 0x70, 0xEF, 0xF0, 0x12, 0x60, 0x65, 0x90,
+0x93, 0x72, 0xEF, 0xF0, 0x12, 0x60, 0x71, 0x90, 0x93, 0x54, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4,
+0xF5, 0x18, 0xF5, 0x0D, 0xF5, 0x62, 0x90, 0x93, 0x6F, 0xF0, 0x90, 0x00, 0xCC, 0xE0, 0x54, 0xF7,
+0xF0, 0x12, 0x7E, 0x58, 0x12, 0x47, 0xA3, 0x12, 0x37, 0x1C, 0x7F, 0x03, 0x12, 0x88, 0x1B, 0x71,
+0x8D, 0x12, 0x60, 0x16, 0x12, 0x60, 0x89, 0x12, 0x60, 0x9E, 0x12, 0x60, 0x34, 0x12, 0x45, 0x02,
+0x12, 0x61, 0x03, 0x91, 0xCE, 0x90, 0x93, 0x0E, 0xE5, 0xD9, 0xF0, 0xC2, 0xAF, 0x90, 0x00, 0x80,
+0xE0, 0x44, 0x40, 0xF0, 0x71, 0xFE, 0x75, 0xE8, 0x03, 0x43, 0xA8, 0x85, 0xD2, 0xAF, 0x12, 0x82,
+0xBB, 0x51, 0x9B, 0x12, 0x60, 0xA5, 0x90, 0x93, 0x0C, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0xA5, 0x90,
+0x01, 0xC4, 0xF0, 0x74, 0x52, 0xA3, 0xF0, 0xE5, 0x18, 0x30, 0xE4, 0x0A, 0xC2, 0xAF, 0x53, 0x18,
+0xEF, 0xD2, 0xAF, 0x12, 0x67, 0x8F, 0xE5, 0x18, 0x30, 0xE6, 0x0A, 0xC2, 0xAF, 0x53, 0x18, 0xBF,
+0xD2, 0xAF, 0x12, 0x76, 0x54, 0xE5, 0x18, 0x30, 0xE7, 0x0A, 0xC2, 0xAF, 0x53, 0x18, 0x7F, 0xD2,
+0xAF, 0x12, 0x82, 0x61, 0xC2, 0xAF, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0xBF, 0x01, 0x0D, 0x90, 0x93,
+0x3A, 0x74, 0x01, 0xF0, 0x31, 0x9C, 0xE4, 0x90, 0x93, 0x3A, 0xF0, 0xD2, 0xAF, 0x90, 0x01, 0xBD,
+0xE5, 0x63, 0xF0, 0x90, 0x93, 0x50, 0xE0, 0x90, 0x01, 0xBC, 0xF0, 0x80, 0x99, 0x90, 0x01, 0x3C,
+0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
+0xF0, 0xFD, 0x7F, 0x54, 0x71, 0xB6, 0x7D, 0xFF, 0x7F, 0x55, 0x71, 0xB6, 0x7D, 0xFF, 0x7F, 0x56,
+0x71, 0xB6, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75,
+0x83, 0x00, 0xED, 0xF0, 0x71, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x30, 0xE4, 0xF0,
+0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
+0xFD, 0x7F, 0x50, 0x71, 0xB6, 0xE4, 0xFD, 0x7F, 0x51, 0x71, 0xB6, 0xE4, 0xFD, 0x7F, 0x52, 0x71,
+0xB6, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0x90, 0x00, 0x02, 0xE0, 0x44, 0x01, 0xF0, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x05,
+0x22, 0x74, 0xFF, 0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xB4, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xB8, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90,
+0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x71, 0xFE, 0x71, 0xF7, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE,
+0xF0, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0,
+0x44, 0x20, 0xF0, 0x90, 0x93, 0x41, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90,
+0x93, 0x34, 0xE0, 0x60, 0x34, 0xE4, 0x90, 0x93, 0x4D, 0xF0, 0xFF, 0x7E, 0x08, 0x12, 0x2C, 0x6E,
+0x90, 0x93, 0xB4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB4, 0x12, 0x43, 0x84, 0xEC, 0x54, 0xFD, 0xFC,
+0x90, 0x93, 0xB4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB4, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12,
+0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x3E, 0xE0, 0x60, 0x22, 0xE4,
+0xFF, 0x11, 0x56, 0x90, 0x93, 0x52, 0xE0, 0x60, 0x12, 0x90, 0x93, 0xB8, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xB8, 0xD1, 0x99, 0x90, 0x07, 0x78, 0x74, 0x01,
+0xF0, 0x90, 0x93, 0x48, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93,
+0xE0, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x93, 0xE2, 0xF0, 0x90, 0x93, 0xE0, 0xE0, 0x54, 0x7F,
+0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x6C, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44,
+0x80, 0xFD, 0x7F, 0x80, 0x61, 0xB6, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x8A, 0x65, 0xEF,
+0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x91, 0x14, 0x90, 0x93, 0x9F, 0x74, 0x02, 0xF0,
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x9F, 0xE0, 0x90, 0x93, 0xEB, 0xF0,
+0x6F, 0x70, 0x02, 0xA1, 0xDC, 0xEF, 0x14, 0x60, 0x3B, 0x14, 0x60, 0x5F, 0x14, 0x70, 0x02, 0xA1,
+0xB6, 0x24, 0x03, 0x60, 0x02, 0xA1, 0xDC, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x03, 0x04, 0xD1, 0xE4,
+0xA1, 0xDC, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x02, 0x04, 0xD1, 0xFC, 0xA1, 0xDC, 0x90, 0x93, 0xEB,
+0xE0, 0xB4, 0x04, 0x04, 0xF1, 0x00, 0xA1, 0xDC, 0x90, 0x93, 0xEB, 0xE0, 0x64, 0x01, 0x70, 0x7C,
+0xD1, 0xE6, 0x80, 0x78, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4, 0x03, 0x04, 0xF1, 0x35, 0x80, 0x6C,
+0xEF, 0xB4, 0x02, 0x04, 0xF1, 0x04, 0x80, 0x64, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4, 0x04, 0x04,
+0xF1, 0x1A, 0x80, 0x58, 0xEF, 0x70, 0x55, 0xD1, 0x01, 0x80, 0x51, 0x90, 0x93, 0xEB, 0xE0, 0xB4,
+0x03, 0x04, 0xF1, 0x25, 0x80, 0x46, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x01, 0x04, 0x91, 0xF6, 0x80,
+0x3B, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x04, 0x04, 0xF1, 0x11, 0x80, 0x30, 0x90, 0x93, 0xEB, 0xE0,
+0x70, 0x2A, 0xB1, 0xE1, 0x80, 0x26, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4, 0x01, 0x04, 0xB1, 0xE5,
+0x80, 0x1A, 0xEF, 0xB4, 0x02, 0x04, 0xB1, 0xFD, 0x80, 0x12, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4,
+0x04, 0x05, 0x12, 0x44, 0xFF, 0x80, 0x05, 0xEF, 0x70, 0x02, 0xB1, 0xF9, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0xD1, 0x01, 0x81, 0xF6, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x54,
+0xBF, 0xF0, 0x90, 0x93, 0x9F, 0x74, 0x03, 0xF0, 0x22, 0xD1, 0x01, 0x80, 0xE8, 0xD1, 0x14, 0x80,
+0xE4, 0x90, 0x01, 0x3E, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0xAD, 0x90, 0x93, 0x9F,
+0x74, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xAC, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xB0, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90,
+0x01, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x41, 0xE0,
+0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x0A, 0x31, 0x83,
+0xEF, 0x64, 0x01, 0x60, 0x03, 0x12, 0x4F, 0x63, 0x90, 0x93, 0x3E, 0xE0, 0x60, 0x1C, 0x7F, 0x01,
+0x11, 0x56, 0x90, 0x93, 0x52, 0xE0, 0x60, 0x12, 0x90, 0x93, 0xB0, 0x12, 0x1F, 0xD5, 0x00, 0x00,
+0x03, 0x10, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xB0, 0xD1, 0x99, 0x71, 0xF7, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0x90, 0x93, 0xEC, 0xEF, 0xF0, 0xD1, 0x14, 0x90, 0x93, 0xEC, 0xE0, 0x60, 0x05, 0x90, 0x05,
+0x22, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x99, 0xF0, 0x22, 0x7F, 0x70, 0x7E, 0x08, 0xD3, 0x10, 0xAF,
+0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0x54, 0xFC, 0xFF, 0x90, 0x01, 0xE8, 0xF0, 0xEE, 0x44, 0xF0, 0xA3,
+0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEC, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F,
+0x0F, 0x90, 0x01, 0xED, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEE, 0xF0, 0x12,
+0x1E, 0xF6, 0x90, 0x01, 0xEF, 0xF0, 0x90, 0x01, 0xEB, 0x74, 0x40, 0xF0, 0x12, 0x88, 0x6C, 0xD0,
+0xD0, 0x92, 0xAF, 0x22, 0xF1, 0x35, 0x7D, 0x03, 0x7F, 0x02, 0x12, 0x3A, 0x3F, 0x90, 0x05, 0x27,
+0xE4, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE4, 0x90, 0x93, 0x9F, 0xF0, 0x22, 0xF1, 0x04, 0x80, 0xE6,
+0xF1, 0x1A, 0x80, 0xE2, 0xD1, 0x14, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x9F, 0x04, 0xF0,
+0x22, 0x91, 0x14, 0x90, 0x93, 0x9F, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90,
+0x93, 0x9F, 0x04, 0xF0, 0x22, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x91, 0x0E, 0x90, 0x93,
+0x9F, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40,
+0xF0, 0x90, 0x93, 0x9F, 0x74, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x93, 0xED, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x46, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08,
+0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46, 0xE0, 0x5F, 0xF0, 0x71, 0xFE,
+0x90, 0x93, 0xED, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33,
+0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8,
+0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4B, 0x90,
+0x93, 0xED, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3,
+0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x62, 0xE0, 0x5F, 0xF0, 0x71, 0xFE, 0x90, 0x93, 0xED,
+0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
+0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x60, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80,
+0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F,
+0x82, 0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
+0x8B, 0x21, 0x8A, 0x22, 0x89, 0x23, 0x90, 0x93, 0xBC, 0x12, 0x43, 0xC8, 0xAB, 0x24, 0xAA, 0x25,
+0xA9, 0x26, 0x90, 0x93, 0xBF, 0x12, 0x43, 0xC8, 0xAF, 0x27, 0x15, 0x27, 0xEF, 0x60, 0x1E, 0x90,
+0x93, 0xBF, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x93, 0xBC,
+0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0xEF, 0x12, 0x42, 0x53, 0x80, 0xDB, 0xAB, 0x21, 0xAA,
+0x22, 0xA9, 0x23, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x01, 0xC4, 0x74, 0x48, 0xF0, 0x74, 0x58, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90,
+0x05, 0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01,
+0xC7, 0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
+0x11, 0x48, 0xBF, 0x01, 0x0F, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x95, 0x90, 0x04,
+0x1F, 0x74, 0x20, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF,
+0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF,
+0xF0, 0xED, 0x60, 0x0E, 0x74, 0x0F, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44,
+0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0,
+0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21,
+0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03,
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C, 0x13,
+0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x93, 0x01,
+0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01, 0x60, 0x07,
+0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3B, 0x90, 0x93, 0x01, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x3D,
+0xF0, 0x79, 0x40, 0x90, 0x93, 0x01, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83, 0xE0,
+0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x93, 0x5E, 0xF0, 0x22, 0x90, 0x93, 0x5E, 0xE0, 0x04,
+0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0B, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0, 0x02,
+0x11, 0x80, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00,
+0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07,
+0x90, 0x01, 0xC4, 0x74, 0x63, 0xF0, 0x74, 0x59, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x28,
+0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E, 0xA3, 0xE0,
+0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x61, 0x57, 0x90, 0x01, 0x34, 0x74, 0x01,
+0xF0, 0x85, 0xD1, 0x0E, 0x85, 0xD3, 0x10, 0x85, 0xD4, 0x11, 0x85, 0xD5, 0x12, 0x85, 0xD6, 0x13,
+0x85, 0xD7, 0x14, 0x85, 0xD9, 0x15, 0x85, 0xD2, 0x0F, 0x75, 0x24, 0x00, 0x75, 0x25, 0x00, 0x75,
+0x26, 0x0E, 0x75, 0x27, 0x08, 0xFB, 0x7A, 0x93, 0x79, 0x5F, 0x12, 0x57, 0xF9, 0x90, 0x93, 0x60,
+0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x01, 0xFE, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x70, 0x02,
+0x61, 0x08, 0x90, 0x93, 0x60, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02,
+0x61, 0x08, 0xEF, 0x54, 0x1F, 0xF5, 0x4D, 0x90, 0x93, 0x61, 0xE0, 0x54, 0x3F, 0xF5, 0x4E, 0x90,
+0x93, 0x63, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34,
+0x87, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xE5, 0x4E, 0xD3, 0x94, 0x04, 0x40, 0x03,
+0x75, 0x4E, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0x75, 0xF0,
+0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0x63, 0xE0, 0x54,
+0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43,
+0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93,
+0x60, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x2F, 0x90, 0x93, 0x63, 0xE0, 0x54, 0x1F, 0xFF,
+0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8F, 0xF0,
+0x12, 0x42, 0x87, 0x90, 0x93, 0x62, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0,
+0x67, 0xAF, 0x4D, 0x12, 0x71, 0x11, 0x80, 0x60, 0x90, 0x93, 0x60, 0xE0, 0xFF, 0xC4, 0x13, 0x13,
+0x54, 0x03, 0x30, 0xE0, 0x53, 0x90, 0x93, 0x63, 0xE0, 0x54, 0x1F, 0xFF, 0xFD, 0xE5, 0x4D, 0x25,
+0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8D, 0xF0, 0x12, 0x42, 0x87,
+0x90, 0x93, 0x62, 0xE0, 0xFE, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x0F, 0xEE, 0x54,
+0x7F, 0xFD, 0x8F, 0x55, 0xAB, 0x4E, 0xAF, 0x4D, 0x12, 0x70, 0xAD, 0x80, 0x1B, 0x90, 0x01, 0x02,
+0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x11, 0x90, 0x04, 0x30, 0xE0, 0xB4, 0x01, 0x0A, 0xE4, 0xF0,
+0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x04, 0xCF, 0xF0, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80,
+0x46, 0x90, 0x93, 0x50, 0xE0, 0x60, 0x37, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
+0x04, 0xF0, 0x12, 0x51, 0x83, 0xEF, 0x64, 0x01, 0x70, 0x2D, 0xF5, 0x48, 0x90, 0x93, 0x3C, 0xE0,
+0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74,
+0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x80, 0x09, 0x12, 0x51,
+0x83, 0xBF, 0x01, 0x03, 0x12, 0x51, 0x9C, 0xE5, 0x2C, 0x20, 0xE1, 0x02, 0x61, 0xF9, 0x90, 0x01,
+0x34, 0x74, 0x02, 0xF0, 0x90, 0xFD, 0x10, 0x74, 0x7F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x30, 0xE5,
+0x0B, 0x75, 0x4F, 0x88, 0x75, 0x50, 0x0F, 0x75, 0x51, 0x0F, 0x80, 0x09, 0x75, 0x4F, 0xC0, 0x75,
+0x50, 0x08, 0x75, 0x51, 0x07, 0x90, 0x04, 0x7F, 0xE0, 0x55, 0x51, 0xF5, 0x16, 0x90, 0x04, 0x7E,
+0xE0, 0x55, 0x51, 0xF5, 0x17, 0x65, 0x16, 0x60, 0x60, 0xE4, 0xFF, 0xE5, 0x16, 0x75, 0xF0, 0x08,
+0xA4, 0x25, 0x4F, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74,
+0x19, 0x2F, 0xF8, 0xA6, 0x06, 0x0F, 0xBF, 0x08, 0xE2, 0x75, 0x24, 0x00, 0x75, 0x25, 0x00, 0x75,
+0x26, 0x19, 0x75, 0x27, 0x08, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x56, 0x12, 0x57, 0xF9, 0x90, 0x93,
+0x56, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0xD1, 0x9F, 0xE5, 0x16,
+0x24, 0x01, 0xFF, 0xE4, 0x33, 0xFE, 0xAD, 0x50, 0x7C, 0x00, 0x12, 0x1F, 0x4E, 0xAF, 0x05, 0x8F,
+0x16, 0x90, 0x04, 0x7F, 0xEF, 0xF0, 0xB5, 0x17, 0xA0, 0xE5, 0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01,
+0x34, 0x74, 0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90, 0x01, 0x34, 0x74, 0x10, 0xF0, 0x43,
+0x18, 0x10, 0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF, 0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54,
+0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8, 0x00, 0x75, 0xE8, 0x00, 0x12, 0x53,
+0xCB, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x53, 0xFE, 0x80, 0xFE, 0xE5, 0x2C, 0x30,
+0xE6, 0x06, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xE5, 0x2E, 0x30, 0xE0, 0x52, 0x90, 0x93, 0x71,
+0x74, 0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x93, 0x6E, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90,
+0x05, 0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x9E, 0xE0,
+0x30, 0xE0, 0x0D, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x06, 0x90, 0x93, 0xA0, 0x74, 0x01, 0xF0,
+0x90, 0x93, 0x98, 0xE0, 0xFF, 0x30, 0xE0, 0x0D, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x06, 0x90,
+0x93, 0x9A, 0x74, 0x01, 0xF0, 0x12, 0x45, 0x09, 0xF1, 0xBF, 0x90, 0x93, 0x71, 0xE4, 0xF0, 0xE5,
+0x2E, 0x30, 0xE1, 0x7D, 0x90, 0x01, 0x36, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x62, 0xE0, 0xFE, 0x90,
+0x05, 0x61, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xF5, 0x0A, 0xEC, 0x3E, 0xF5, 0x09, 0x90, 0x05, 0x22,
+0xE0, 0xB4, 0xFF, 0x06, 0x90, 0x01, 0xE6, 0xE0, 0x04, 0xF0, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x01,
+0xE4, 0xF0, 0x43, 0x18, 0x40, 0x11, 0xF5, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x0C, 0xE4, 0xFF,
+0xD1, 0x91, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x53, 0xE0, 0x60, 0x1D,
+0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x16, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x01,
+0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x05, 0x08, 0xE5,
+0x08, 0xC3, 0x94, 0xFF, 0x40, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01,
+0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x7B, 0x90, 0x01, 0x36, 0x74, 0x04, 0xF0, 0x90, 0x05, 0x62, 0xE0,
+0xFE, 0x90, 0x05, 0x61, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xF5, 0x0C, 0xEC, 0x3E, 0xF5, 0x0B, 0xD3,
+0xE5, 0x0C, 0x95, 0x0A, 0xE5, 0x0B, 0x95, 0x09, 0x40, 0x06, 0x90, 0x01, 0xE5, 0xE0, 0x04, 0xF0,
+0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x0D, 0x90, 0x93, 0x39, 0xE4, 0xF0, 0x90, 0x93, 0x99, 0xE0,
+0x64, 0x06, 0x60, 0x3D, 0x12, 0x4B, 0x90, 0x90, 0x93, 0x53, 0xE0, 0x60, 0x34, 0x90, 0x93, 0x4E,
+0xE0, 0xFF, 0x90, 0x93, 0x37, 0xE0, 0x6F, 0x70, 0x28, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x05, 0x73,
+0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x7D, 0x01, 0x7F,
+0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93, 0x37, 0xE0, 0x14,
+0xF0, 0xE5, 0x2E, 0x30, 0xE3, 0x34, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0, 0xE5, 0x62, 0x64, 0x01,
+0x70, 0x28, 0xE5, 0x65, 0x60, 0x24, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02,
+0xF0, 0x75, 0x48, 0x00, 0x90, 0x93, 0x42, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E,
+0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4, 0x2B, 0x90,
+0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x20, 0xE5, 0x65, 0x60, 0x1C, 0x90, 0x01,
+0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x51, 0xE4, 0xF0, 0x53, 0x66,
+0xFD, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x51, 0x9C, 0xE5, 0x2E, 0x30, 0xE5, 0x1F, 0x90,
+0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x14, 0xE5, 0x65, 0x60, 0x10, 0x90, 0x93,
+0x50, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x51, 0x2B, 0x80, 0x03, 0x12, 0x4F, 0x1D, 0xE5, 0x2E,
+0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x10, 0xE5, 0x65,
+0x60, 0x0C, 0x53, 0x66, 0xFE, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x51, 0x9C, 0xE5, 0x2F,
+0x30, 0xE1, 0x18, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x08,
+0x90, 0x93, 0x9D, 0x74, 0x01, 0xF0, 0x80, 0x03, 0x12, 0x4E, 0xD6, 0x74, 0x63, 0x04, 0x90, 0x01,
+0xC4, 0xF0, 0x74, 0x59, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03,
+0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0,
+0x32, 0x8F, 0x71, 0x90, 0x05, 0x43, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x22, 0x90,
+0x93, 0x01, 0xE0, 0x54, 0xF0, 0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A,
+0x00, 0x79, 0x19, 0x90, 0x93, 0xCB, 0x12, 0x43, 0xC8, 0x0B, 0x7A, 0x93, 0x79, 0x01, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xC8, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x6A, 0xE0, 0xFF,
+0x90, 0x92, 0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x90, 0x92,
+0x69, 0xE0, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0B, 0x90, 0x92, 0x69, 0xE0, 0x14, 0xFF,
+0xA3, 0xE0, 0xB5, 0x07, 0x0F, 0x12, 0x81, 0x51, 0xEF, 0x60, 0x72, 0x12, 0x82, 0x61, 0x90, 0x01,
+0x3F, 0x74, 0x02, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6B, 0xF9, 0x74,
+0x92, 0x35, 0xF0, 0xA8, 0x01, 0xFC, 0x7D, 0x01, 0x90, 0x93, 0xC8, 0x12, 0x43, 0xA8, 0x7E, 0x00,
+0x7F, 0x02, 0x12, 0x1E, 0xD0, 0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6D, 0xF9,
+0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x93, 0xCB,
+0x12, 0x43, 0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x90, 0x93, 0xC8, 0x12, 0x43, 0xA8, 0x12,
+0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x27, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x57,
+0xF9, 0x90, 0x92, 0x6A, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0xAE, 0x07, 0xE4, 0xFF, 0xD1, 0x91, 0xEF, 0x60, 0x19, 0x90, 0x93, 0x98, 0xE0, 0xC4,
+0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x0D, 0xAF, 0x06, 0x7D, 0x01, 0x12, 0x48, 0xF4, 0x12, 0x67,
+0x4A, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x93, 0x26, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x29,
+0xE0, 0x54, 0xF0, 0x44, 0x02, 0xF0, 0x54, 0x0F, 0x44, 0xC0, 0xF0, 0x90, 0x93, 0x26, 0x12, 0x43,
+0xA8, 0x90, 0x93, 0xCB, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x29, 0xC1, 0xBE, 0x90,
+0x93, 0xE0, 0xE0, 0x30, 0xE0, 0x2F, 0xE5, 0x62, 0xB4, 0x01, 0x2A, 0x90, 0x93, 0xDF, 0xE0, 0x04,
+0xF0, 0xE0, 0xB4, 0x0A, 0x0B, 0x90, 0x93, 0xE2, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0xDF, 0xF0,
+0x90, 0x93, 0xE2, 0xE0, 0xFF, 0x90, 0x93, 0xE1, 0xE0, 0xD3, 0x9F, 0x50, 0x08, 0x12, 0x8A, 0xA6,
+0xE4, 0x90, 0x93, 0xE2, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC,
+0xEF, 0x30, 0xE0, 0x02, 0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF,
+0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5,
+0x2B, 0x90, 0x01, 0x30, 0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3,
+0xE5, 0x2B, 0xF0, 0x22, 0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32,
+0x43, 0x32, 0x20, 0x90, 0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32,
+0xF0, 0x22, 0x90, 0x00, 0xF4, 0xE0, 0x20, 0xE3, 0x09, 0xE0, 0x7F, 0x01, 0x20, 0xE2, 0x05, 0x7F,
+0x02, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30, 0xE3, 0x02, 0x7F, 0x01,
+0x22, 0x90, 0x93, 0x72, 0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E,
+0xFD, 0x7F, 0x33, 0x22, 0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D,
+0x90, 0x05, 0x41, 0x74, 0x10, 0xF0, 0x90, 0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01,
+0x64, 0x74, 0x20, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x0F, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x98, 0xE0,
+0x7F, 0x00, 0x30, 0xE4, 0x02, 0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E, 0xC3, 0x90, 0x93, 0x10,
+0xE0, 0x94, 0x88, 0x90, 0x93, 0x0F, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44,
+0x80, 0xF0, 0x22, 0x90, 0x93, 0x0F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E,
+0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0x10, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x0F, 0xE0, 0x94,
+0x00, 0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0x90, 0x01, 0x94, 0xE0, 0x44,
+0x01, 0xF0, 0x22, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01, 0x9C, 0x74, 0x7E, 0xF0,
+0xA3, 0x74, 0x92, 0xF0, 0xA3, 0x74, 0xA0, 0xF0, 0xA3, 0x74, 0x24, 0xF0, 0x90, 0x01, 0x9B, 0x74,
+0x49, 0xF0, 0x90, 0x01, 0x9A, 0x74, 0xE0, 0xF0, 0x90, 0x01, 0x99, 0xE4, 0xF0, 0x90, 0x01, 0x98,
+0x04, 0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05,
+0xC0, 0x06, 0xC0, 0x07, 0x7D, 0x33, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x61, 0xFF, 0xA3, 0xF0,
+0x53, 0x91, 0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE, 0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90,
+0x00, 0x52, 0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0, 0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06,
+0x90, 0x00, 0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D, 0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20,
+0xF0, 0xE5, 0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00, 0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7,
+0x06, 0x90, 0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5, 0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74,
+0x01, 0xF0, 0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90, 0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30,
+0xE2, 0x06, 0x90, 0x00, 0x56, 0x74, 0x04, 0xF0, 0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56,
+0x74, 0x08, 0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0,
+0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83,
+0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0,
+0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x75, 0x56, 0x00, 0x90, 0x01, 0xC4, 0x74, 0xDA, 0xF0,
+0x74, 0x61, 0xA3, 0xF0, 0x53, 0x91, 0xDF, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3,
+0xE0, 0x55, 0x31, 0xF5, 0x35, 0xA3, 0xE0, 0x55, 0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5,
+0x37, 0xE5, 0x34, 0x30, 0xE0, 0x1A, 0x90, 0x01, 0x3C, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x98, 0xE0,
+0x30, 0xE0, 0x0D, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0,
+0xE5, 0x34, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x44, 0x24, 0xE5, 0x34,
+0x30, 0xE2, 0x36, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE0, 0x21,
+0x75, 0x48, 0x00, 0x90, 0x93, 0x3C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01,
+0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x80,
+0x08, 0x90, 0x93, 0x4C, 0xE4, 0xF0, 0x12, 0x51, 0x9C, 0xE5, 0x34, 0x30, 0xE3, 0x36, 0x90, 0x01,
+0x3C, 0x74, 0x08, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93,
+0x3C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
+0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x49, 0xE4,
+0xF0, 0x12, 0x51, 0x9C, 0xE5, 0x34, 0x30, 0xE4, 0x06, 0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0xE5,
+0x34, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3C, 0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x18, 0x90,
+0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90, 0x00, 0x83, 0xE0, 0xF5, 0x64, 0x90, 0x01, 0xBB, 0xE5, 0x64,
+0xF0, 0x12, 0x50, 0xDC, 0x12, 0x51, 0x9C, 0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3D, 0x74,
+0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90, 0x93, 0x6D,
+0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0xFD, 0xE0,
+0x04, 0xF0, 0xE5, 0x36, 0x20, 0xE0, 0x02, 0x61, 0xAF, 0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0x90,
+0x93, 0x9E, 0xE0, 0x30, 0xE0, 0x13, 0xA3, 0xE0, 0x64, 0x03, 0x60, 0x0D, 0x7F, 0x01, 0x12, 0x5E,
+0x91, 0xEF, 0x60, 0x05, 0x7F, 0x01, 0x12, 0x55, 0x11, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x5F,
+0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x60, 0x3B, 0x91, 0x86, 0x90, 0x93, 0x99, 0xE0, 0xFF, 0x64,
+0x06, 0x60, 0x30, 0xEF, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x04,
+0xE4, 0xFF, 0x80, 0x14, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90,
+0x93, 0x99, 0xE0, 0xB4, 0x02, 0x04, 0x7F, 0x01, 0x91, 0xDA, 0x7D, 0x01, 0xAF, 0x64, 0x12, 0x48,
+0xF4, 0xF1, 0x4A, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x75, 0x48, 0x00, 0x75, 0x49, 0x03, 0xE4,
+0xFB, 0xFD, 0x7F, 0x50, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x53, 0x74, 0x05, 0xF0, 0xE5,
+0x36, 0x30, 0xE1, 0x3C, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x9E, 0xE0, 0x30, 0xE0,
+0x13, 0xA3, 0xE0, 0x64, 0x03, 0x60, 0x0D, 0x7F, 0x01, 0x12, 0x5E, 0x91, 0xEF, 0x70, 0x05, 0x7F,
+0x02, 0x12, 0x55, 0x11, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x15, 0x12, 0x89, 0xF6, 0x90, 0x93,
+0x99, 0xE0, 0x64, 0x06, 0x60, 0x0A, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x70, 0x02, 0x91, 0xA8,
+0xE5, 0x36, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xE5, 0x36, 0x30, 0xE4, 0x06,
+0x90, 0x01, 0x3E, 0x74, 0x10, 0xF0, 0xE5, 0x36, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x04,
+0xF0, 0xE5, 0x36, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x20, 0xF0, 0xE5, 0x36, 0x30, 0xE6,
+0x06, 0x90, 0x01, 0x3E, 0x74, 0x40, 0xF0, 0xE5, 0x36, 0x30, 0xE7, 0x06, 0x90, 0x01, 0x3E, 0x74,
+0x80, 0xF0, 0xE5, 0x37, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x43, 0x18, 0x80,
+0xE5, 0x37, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0x12, 0x46, 0xAC, 0x90, 0x93,
+0x4E, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x12, 0x5F, 0xBF,
+0x74, 0xDA, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0,
+0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0,
+0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x93, 0x98, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03,
+0x30, 0xE0, 0x0A, 0xA3, 0xE0, 0x64, 0x06, 0x60, 0x04, 0x7F, 0x06, 0x91, 0xDA, 0x90, 0x93, 0x99,
+0xE0, 0x64, 0x06, 0x60, 0x02, 0xF1, 0x29, 0x22, 0x90, 0x93, 0x39, 0xE0, 0x60, 0x16, 0x90, 0x93,
+0x99, 0xE0, 0x70, 0x04, 0x7F, 0x05, 0x80, 0x1F, 0x90, 0x93, 0x99, 0xE0, 0x64, 0x01, 0x70, 0x19,
+0x7F, 0x02, 0x80, 0x13, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x01, 0x04, 0x7F, 0x03, 0x80, 0x08, 0x90,
+0x93, 0x99, 0xE0, 0x70, 0x04, 0x7F, 0x04, 0x91, 0xDA, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
+0xD0, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0x6F, 0x70, 0x02, 0xC1, 0xAC, 0xEF, 0x12, 0x43, 0xD1, 0x65,
+0x08, 0x00, 0x65, 0x43, 0x01, 0x65, 0x8A, 0x02, 0x65, 0xC5, 0x03, 0x65, 0xFE, 0x04, 0x66, 0x37,
+0x05, 0x66, 0x73, 0x06, 0x00, 0x00, 0x66, 0xAC, 0xEE, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56,
+0x81, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xFF, 0xB4, 0x05, 0x04, 0xD1, 0xBB, 0xC1, 0xAC, 0xEF,
+0xB4, 0x06, 0x06, 0x7F, 0x01, 0xD1, 0xD0, 0x80, 0x16, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x06,
+0x7F, 0x01, 0xD1, 0xB1, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0xD1,
+0xF0, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56, 0x81, 0x80,
+0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1, 0xBB, 0x90, 0x93, 0x99, 0xE0, 0x70, 0x04,
+0xD1, 0xE6, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0x7F, 0x01, 0xD1, 0xD0,
+0xC1, 0xAC, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xD1, 0xB1, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0,
+0x64, 0x02, 0x60, 0x02, 0xC1, 0xAC, 0xD1, 0xC5, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04,
+0x07, 0x7F, 0x01, 0x12, 0x56, 0x81, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1,
+0xBB, 0x90, 0x93, 0x99, 0xE0, 0x70, 0x04, 0xD1, 0xE6, 0x80, 0x16, 0x90, 0x93, 0x99, 0xE0, 0xFE,
+0xB4, 0x06, 0x06, 0x7F, 0x01, 0xD1, 0xD0, 0x80, 0x08, 0xEE, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0xD1,
+0xB1, 0xF1, 0x1C, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56,
+0x81, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1, 0xBB, 0x90, 0x93, 0x99, 0xE0,
+0x70, 0x04, 0xD1, 0xE6, 0x80, 0x14, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF,
+0xD1, 0xD0, 0x80, 0x06, 0xEE, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0xF1, 0x05, 0xC1, 0xAC, 0x90, 0x93,
+0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xD1, 0xD0, 0x80, 0x13, 0xEE, 0xB4, 0x03, 0x06,
+0x7F, 0x01, 0xD1, 0xB1, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0x90,
+0x93, 0x99, 0xE0, 0xB4, 0x01, 0x04, 0xD1, 0xF0, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05,
+0x02, 0xD1, 0xBB, 0xD1, 0xFB, 0x80, 0x75, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4,
+0xFF, 0xD1, 0xD0, 0x80, 0x13, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xD1, 0xB1, 0x80, 0x09, 0x90,
+0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x01, 0x04, 0xD1,
+0xF0, 0x80, 0x0C, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x05, 0x7F, 0x01, 0x12, 0x56, 0x81, 0xF1,
+0x0F, 0x80, 0x39, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56, 0x81, 0x80,
+0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1, 0xBB, 0x90, 0x93, 0x99, 0xE0, 0x70, 0x04,
+0xD1, 0xE6, 0x80, 0x16, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x06, 0xE4, 0xFF, 0xD1, 0xB1, 0x80,
+0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0xF1, 0x36, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0x12, 0x51, 0x69, 0x90, 0x93, 0x99, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0,
+0x90, 0x93, 0x99, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x99, 0x04, 0xF0, 0x22,
+0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90,
+0x93, 0x99, 0x74, 0x01, 0xF0, 0x22, 0x12, 0x51, 0x05, 0x90, 0x93, 0x99, 0x74, 0x01, 0xF0, 0x22,
+0x7F, 0x01, 0x12, 0x50, 0x8A, 0xE4, 0x90, 0x93, 0x99, 0xF0, 0x22, 0x12, 0x54, 0x0E, 0x90, 0x93,
+0x99, 0x74, 0x04, 0xF0, 0x22, 0x12, 0x50, 0xB3, 0x90, 0x93, 0x99, 0x74, 0x03, 0xF0, 0x22, 0x90,
+0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x99, 0x74, 0x05, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74,
+0xFF, 0xF0, 0x90, 0x93, 0x99, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x93, 0x9D, 0xE0, 0xB4, 0x01, 0x05,
+0xE4, 0xF0, 0x12, 0x4E, 0xD6, 0x22, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, 0x90, 0x05, 0x22,
+0x74, 0x6F, 0xF0, 0x90, 0x93, 0x99, 0x74, 0x06, 0xF0, 0x22, 0x90, 0x93, 0x99, 0xE0, 0x64, 0x06,
+0x60, 0x3C, 0xE5, 0x63, 0x54, 0x0F, 0x14, 0x60, 0x2E, 0x14, 0x60, 0x1E, 0x24, 0xFE, 0x60, 0x0E,
+0x24, 0xF8, 0x70, 0x2A, 0xE4, 0x90, 0x93, 0x99, 0xF0, 0x90, 0x05, 0x22, 0xF0, 0x22, 0x90, 0x93,
+0x99, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x99, 0x74, 0x03, 0xF0,
+0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0xD3,
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x93, 0x0F, 0xF0,
+0x90, 0x93, 0x0F, 0xE0, 0xFD, 0x70, 0x03, 0x02, 0x68, 0xDA, 0x90, 0x93, 0xE9, 0xE0, 0xFF, 0x74,
+0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF,
+0xEF, 0x5D, 0x70, 0x03, 0x02, 0x68, 0xD3, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01,
+0xD0, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x10, 0xF0, 0x75, 0x24, 0x01, 0x75, 0x25, 0x93, 0x75,
+0x26, 0x10, 0x75, 0x27, 0x01, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x11, 0x12, 0x57, 0xF9, 0x90, 0x93,
+0x11, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0xE9, 0x30, 0xE0, 0x59, 0xE0,
+0x75, 0xF0, 0x02, 0x90, 0x00, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x12, 0xF0, 0x90, 0x93,
+0xE9, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x13, 0xF0,
+0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
+0x14, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x9C, 0xE0,
+0x90, 0x93, 0x15, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43,
+0x9C, 0xE0, 0x90, 0x93, 0x16, 0xF0, 0x80, 0x33, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12,
+0x43, 0x9C, 0xE0, 0x90, 0x93, 0x12, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01,
+0xD2, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x13, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04,
+0x90, 0x01, 0xD3, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x14, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B,
+0x01, 0x7A, 0x93, 0x79, 0x12, 0x11, 0xDF, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x90, 0x93, 0xE9, 0xE0,
+0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x93,
+0x0F, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33,
+0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0,
+0x02, 0x67, 0xA0, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
+0x93, 0x17, 0x12, 0x43, 0xC8, 0xEF, 0x12, 0x43, 0xD1, 0x69, 0x2E, 0x01, 0x69, 0x26, 0x02, 0x69,
+0x73, 0x03, 0x69, 0x7C, 0x05, 0x69, 0x85, 0x06, 0x69, 0xC8, 0x07, 0x69, 0x8D, 0x08, 0x69, 0x96,
+0x0B, 0x69, 0x9F, 0x1B, 0x69, 0xA7, 0x1C, 0x69, 0x37, 0x2D, 0x69, 0x40, 0x2E, 0x69, 0xAF, 0x30,
+0x69, 0x52, 0x34, 0x69, 0x49, 0x3B, 0x69, 0x5A, 0x47, 0x69, 0x6B, 0x48, 0x69, 0x63, 0x49, 0x69,
+0xB8, 0x4B, 0x00, 0x00, 0x69, 0xC1, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xB9, 0x90, 0x93,
+0x17, 0x12, 0x43, 0xA8, 0x02, 0x82, 0xC7, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x83, 0xA8,
+0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x83, 0xF0, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02,
+0x84, 0x29, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xBF, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8,
+0x02, 0x84, 0x54, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xD5, 0x90, 0x93, 0x17, 0x12, 0x43,
+0xA8, 0xE1, 0xCD, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x85, 0x14, 0x90, 0x93, 0x17, 0x12,
+0x43, 0xA8, 0x02, 0x80, 0x54, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x80, 0x3C, 0x90, 0x93, 0x17,
+0x12, 0x43, 0xA8, 0x02, 0x85, 0x5C, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x80, 0x80, 0x90,
+0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xC5, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xA1, 0x90,
+0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0xAB, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x88,
+0x5A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF,
+0x54, 0x1F, 0xFE, 0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06, 0x90, 0x93, 0x1A,
+0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x1C, 0x12, 0x43, 0xA8, 0x90,
+0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x00,
+0x04, 0x12, 0x1F, 0x0F, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x93, 0x20, 0xF0, 0x90,
+0x93, 0x1A, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAD, 0x82, 0xAC,
+0x83, 0x90, 0x93, 0x21, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84,
+0xF9, 0x74, 0x8A, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x1C, 0x12,
+0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x23, 0x12, 0x43,
+0xA8, 0xEF, 0x12, 0x42, 0x53, 0x90, 0x93, 0x1C, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F,
+0x0F, 0xFF, 0x90, 0x93, 0x23, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x65, 0x90,
+0x93, 0x1C, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x21, 0xE0,
+0xFC, 0xA3, 0xE0, 0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0x8D, 0x82, 0x8C,
+0x83, 0xA3, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0xFF, 0x24, 0xC2, 0xF5,
+0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x1B, 0xE0, 0xFE, 0x75, 0xF0, 0x09,
+0xEF, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8B,
+0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x20, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90,
+0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x8F, 0x57, 0xEF, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82,
+0xE4, 0x34, 0x90, 0xAF, 0x82, 0xF5, 0x58, 0x8F, 0x59, 0xE5, 0x57, 0x75, 0xF0, 0x02, 0xA4, 0x24,
+0x02, 0xF9, 0x74, 0x89, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C, 0x75, 0xF0, 0x09,
+0xE5, 0x57, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAF, 0x82, 0x85, 0x83, 0x5D, 0x8F, 0x5E, 0xE5,
+0x57, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35, 0xF0, 0x75, 0x5F, 0x01, 0xF5,
+0x60, 0x89, 0x61, 0x74, 0xC2, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x12,
+0x43, 0xD1, 0x6B, 0x57, 0x00, 0x6B, 0x6C, 0x01, 0x6B, 0x81, 0x02, 0x6B, 0x96, 0x03, 0x6B, 0xBF,
+0x04, 0x6B, 0xD4, 0x05, 0x6B, 0xE9, 0x06, 0x6C, 0x0F, 0x0C, 0x6C, 0x3C, 0x0D, 0x6C, 0x69, 0x0E,
+0x6C, 0x96, 0x0F, 0x00, 0x00, 0x6C, 0xCA, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
+0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80, 0x3C, 0xE5, 0x57, 0x25, 0xE0,
+0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x10, 0x80,
+0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0,
+0xF0, 0xA3, 0x74, 0x05, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34,
+0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5,
+0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0x8F, 0xF0, 0x81, 0xCA, 0xE5,
+0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3,
+0x74, 0xF5, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
+0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5,
+0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0xE5, 0x57, 0x25, 0xE0,
+0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x81, 0xCA, 0x90,
+0x04, 0x47, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x46, 0xE0,
+0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x45, 0xE0,
+0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x44, 0x81, 0xC1, 0x90, 0x04, 0x4B, 0xE0,
+0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4A, 0xE0, 0xAB, 0x5A, 0xAA,
+0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x49, 0xE0, 0x85, 0x59, 0x82,
+0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04, 0x4F, 0xE0, 0xAB, 0x5A, 0xAA,
+0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4E, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
+0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x4D, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83,
+0xF0, 0x90, 0x04, 0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
+0x12, 0x42, 0x53, 0x90, 0x04, 0x52, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01,
+0x12, 0x42, 0x65, 0x90, 0x04, 0x51, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04,
+0x50, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
+0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61,
+0x12, 0x1E, 0xF6, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0xAB, 0x5A, 0xE5,
+0x5C, 0x24, 0x01, 0xF9, 0xE4, 0x35, 0x5B, 0xFA, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E,
+0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x5F, 0xD0,
+0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xC0, 0x83,
+0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82,
+0xD0, 0x83, 0xF0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF,
+0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0,
+0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3,
+0xE0, 0x4E, 0x60, 0x4B, 0x90, 0x93, 0x26, 0x74, 0x0B, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3,
+0x94, 0x00, 0x50, 0x02, 0xC1, 0x0F, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3,
+0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
+0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x0A, 0x90, 0x93, 0x26,
+0xE0, 0x24, 0x10, 0xA3, 0xF0, 0x80, 0x68, 0x90, 0x93, 0x26, 0xE0, 0x14, 0xF0, 0x80, 0xBB, 0xE5,
+0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
+0x4E, 0x60, 0x47, 0x90, 0x93, 0x26, 0x74, 0x0F, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3, 0x94,
+0x00, 0x40, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
+0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
+0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x93, 0x26, 0xE0, 0xA3, 0xF0,
+0x80, 0x0D, 0x90, 0x93, 0x26, 0xE0, 0x14, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0xE5,
+0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
+0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x26, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3, 0x94, 0x10,
+0x40, 0x02, 0xC1, 0xC8, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
+0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
+0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x06, 0x90, 0x93, 0x26, 0xE0, 0x80,
+0x63, 0x90, 0x93, 0x26, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5,
+0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93,
+0x26, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3, 0x94, 0x0C, 0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00,
+0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25,
+0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F,
+0x4E, 0x60, 0x08, 0x90, 0x93, 0x26, 0xE0, 0x24, 0x10, 0x80, 0x09, 0x90, 0x93, 0x26, 0xE0, 0x04,
+0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x28, 0xF0, 0x90, 0x93, 0x27, 0xE0, 0xFF, 0x75, 0xF0, 0x09,
+0xE5, 0x57, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xEF, 0xF0, 0x90, 0x93, 0x28, 0xE0, 0xFE, 0x75,
+0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0xE5, 0x57, 0xC3, 0x94,
+0x20, 0x50, 0x2C, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3,
+0x9F, 0x40, 0x02, 0x80, 0x47, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83,
+0xE0, 0xC3, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x28, 0xE0, 0xA3, 0xF0, 0x80, 0x37, 0x80, 0x2D, 0x74,
+0x27, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x27, 0xE0,
+0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x07, 0x90, 0x93, 0x29, 0xEE, 0xF0, 0x80, 0x17, 0x90, 0x93, 0x28,
+0xE0, 0xFE, 0xEF, 0xC3, 0x9E, 0x50, 0x05, 0xA3, 0xEE, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x27, 0xE0,
+0x90, 0x93, 0x29, 0xF0, 0x90, 0x93, 0x29, 0xE0, 0xFD, 0xAF, 0x57, 0x12, 0x70, 0x63, 0x90, 0x93,
+0x29, 0xE0, 0xFF, 0x74, 0xA7, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xEF, 0xF0,
+0x90, 0x93, 0x27, 0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x03, 0xF0,
+0x22, 0xEF, 0xD3, 0x94, 0x0B, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x02, 0xF0, 0x22, 0xEF, 0xD3,
+0x94, 0x03, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x8A, 0x83, 0xF0,
+0x22, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x3F, 0xFE, 0xEF, 0x54, 0x80, 0xC4, 0x13,
+0x13, 0x13, 0x54, 0x01, 0xFD, 0xAF, 0x06, 0x21, 0xDD, 0x12, 0x1E, 0xF6, 0xF5, 0x62, 0x22, 0x90,
+0x93, 0x1A, 0x02, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0x90, 0x89, 0x01, 0xF0, 0x22, 0x12, 0x1E, 0xF6,
+0x90, 0x93, 0x6F, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x60, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE,
+0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xCE,
+0x12, 0x43, 0xC8, 0x90, 0x93, 0xD1, 0xE0, 0x54, 0xF0, 0x44, 0x06, 0xFF, 0xF0, 0xED, 0x54, 0x0F,
+0xC4, 0x54, 0xF0, 0xFE, 0xEF, 0x54, 0x0F, 0x4E, 0xF0, 0x90, 0x93, 0xCE, 0x12, 0x43, 0xA8, 0x90,
+0x93, 0xCB, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xD1, 0x12, 0x5E, 0xBE, 0xD0, 0xD0,
+0x92, 0xAF, 0x22, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x39, 0xEF, 0x30, 0xE0, 0x17, 0xED, 0xC4, 0x54,
+0xF0, 0xFD, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
+0x54, 0x0F, 0x80, 0x10, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5,
+0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
+0x4D, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x0E,
+0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED, 0xF0, 0x80, 0x2A, 0x74, 0x27,
+0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xED, 0xF0, 0x90, 0x93, 0x8B, 0xEF, 0xF0, 0x24,
+0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x8C, 0xF0, 0x7B, 0x01, 0x7A,
+0x93, 0x79, 0x8B, 0x7D, 0x02, 0x12, 0x6F, 0xE6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F, 0x52, 0x8D,
+0x53, 0xE5, 0x53, 0x54, 0x1F, 0x90, 0x93, 0x03, 0xF0, 0x74, 0x01, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0x88, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x01, 0xF0, 0x90, 0x93, 0x04, 0x74, 0x01, 0xF0, 0xEB, 0xC3,
+0x94, 0x01, 0x40, 0x02, 0x80, 0x3B, 0x90, 0x93, 0x01, 0xE0, 0x25, 0x55, 0xFF, 0xA3, 0xF0, 0xA3,
+0xE0, 0x90, 0x41, 0x9E, 0x93, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x13, 0x74, 0x01, 0x25, 0x52, 0xF5,
+0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAD, 0x53, 0xAF, 0x52, 0x01, 0x63, 0x90, 0x93,
+0x02, 0xE0, 0xFF, 0x74, 0x01, 0x25, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEF, 0xF0,
+0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
+0x06, 0xF0, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x54, 0x1F, 0x90,
+0x93, 0x05, 0xF0, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0,
+0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x5D,
+0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x85, 0x2D, 0xF5,
+0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89,
+0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x85, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x25,
+0xE0, 0x25, 0xE0, 0xFF, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEF, 0xF0,
+0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0xC8, 0x40, 0x0D,
+0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0x74, 0xC8, 0xF0, 0x90, 0x93, 0x06,
+0xE0, 0xFF, 0x90, 0x93, 0x05, 0xE0, 0xD3, 0x9F, 0x40, 0x02, 0xEF, 0xF0, 0x90, 0x93, 0x05, 0xE0,
+0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74,
+0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74,
+0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0,
+0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x05,
+0x90, 0x93, 0x05, 0xE0, 0xFD, 0x11, 0x63, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60,
+0x12, 0x90, 0x04, 0x30, 0xE0, 0x70, 0x0C, 0x04, 0xF0, 0xA3, 0xF0, 0xA3, 0x04, 0xF0, 0x90, 0x04,
+0xCF, 0x04, 0xF0, 0x90, 0x93, 0x05, 0xE0, 0xFF, 0x22, 0xAC, 0x07, 0xEC, 0xC3, 0x94, 0x20, 0x50,
+0x13, 0x74, 0x84, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93,
+0x1F, 0xF0, 0x80, 0x11, 0x74, 0x27, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54,
+0x7F, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x93, 0x22, 0xF0,
+0x75, 0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x24, 0xF0, 0x75,
+0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0x90, 0x93, 0x25, 0xF0, 0xEC,
+0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90,
+0x93, 0x26, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34,
+0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x28, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x74,
+0xC6, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C,
+0x90, 0x93, 0x25, 0xE0, 0x90, 0x93, 0x22, 0xF0, 0x90, 0x93, 0x1F, 0xF0, 0xED, 0x70, 0x02, 0x61,
+0xA3, 0x90, 0x93, 0x23, 0xED, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x93, 0x22,
+0xE0, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x93, 0x23, 0xE0, 0x14, 0xF0, 0x90, 0x93, 0x23, 0xE0, 0x70,
+0x02, 0x61, 0xA3, 0x90, 0x93, 0x22, 0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02, 0x61, 0xA3, 0xE4,
+0x90, 0x93, 0x21, 0xF0, 0xEF, 0x14, 0x90, 0x93, 0x20, 0xF0, 0x90, 0x93, 0x24, 0xE0, 0xFD, 0x90,
+0x93, 0x20, 0xE0, 0xFF, 0xD3, 0x9D, 0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0,
+0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
+0xF9, 0xFF, 0x90, 0x93, 0x28, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93,
+0x20, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
+0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x26, 0xE0, 0x5E, 0xFE, 0xA3,
+0xE0, 0x5F, 0x4E, 0x60, 0x1A, 0x90, 0x93, 0x20, 0xE0, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x93, 0x21,
+0xE0, 0x04, 0xF0, 0x90, 0x93, 0x23, 0xE0, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0x6F, 0x60, 0x08, 0x90,
+0x93, 0x20, 0xE0, 0x14, 0xF0, 0x80, 0x83, 0x90, 0x93, 0x23, 0xE0, 0xFF, 0x90, 0x93, 0x21, 0xE0,
+0xC3, 0x9F, 0x50, 0x0F, 0x90, 0x93, 0x20, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x93, 0x24, 0xE0, 0x90,
+0x93, 0x1F, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34,
+0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
+0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
+0xFE, 0xEF, 0x13, 0xFF, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83,
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x90, 0x93, 0x1F, 0xE0, 0xFD, 0x11, 0x63, 0x90, 0x93,
+0x1F, 0xE0, 0xFF, 0x22, 0xAD, 0x07, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2D, 0xF5,
+0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x1F, 0xF0, 0x80, 0x11, 0x74,
+0x27, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x1F, 0xF0,
+0x90, 0x93, 0x1F, 0xE0, 0xF9, 0x54, 0x1F, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88,
+0x12, 0x43, 0x9C, 0xE0, 0xFF, 0x90, 0x93, 0x22, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82,
+0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x23, 0xCB, 0xF0, 0xA3, 0xEB,
+0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3,
+0xE0, 0x90, 0x93, 0x25, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x93, 0x20, 0xE0, 0xFE, 0x25, 0xE0,
+0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB,
+0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB,
+0xF0, 0xEE, 0xC3, 0x9F, 0x40, 0x02, 0xA1, 0x51, 0x90, 0x93, 0x20, 0xE0, 0xFF, 0x74, 0x28, 0x2D,
+0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0xEF, 0x04, 0x90, 0x93, 0x21, 0xF0, 0x90,
+0x93, 0x22, 0xE0, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0xFE, 0xD3, 0x9F, 0x40, 0x02, 0xA1, 0x8B, 0xEE,
+0xC3, 0x94, 0x10, 0x40, 0x21, 0xEE, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
+0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x23, 0xE0, 0x5E, 0xFE,
+0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93, 0x21, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59,
+0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
+0xFF, 0x90, 0x93, 0x25, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x93, 0x21,
+0xE0, 0xB4, 0x11, 0x0D, 0x90, 0x93, 0x24, 0xE0, 0x30, 0xE7, 0x06, 0x90, 0x93, 0x21, 0x74, 0x17,
+0xF0, 0x90, 0x93, 0x21, 0xE0, 0xFF, 0x64, 0x13, 0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x93,
+0x23, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x93, 0x21, 0x74, 0x18, 0xF0, 0x90, 0x93, 0x21, 0xE0, 0x90,
+0x93, 0x20, 0xF0, 0x90, 0x93, 0x1F, 0xF0, 0x80, 0x42, 0x90, 0x93, 0x21, 0xE0, 0x04, 0xF0, 0x81,
+0xAF, 0x90, 0x93, 0x22, 0xE0, 0xFC, 0x90, 0x93, 0x20, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0x28,
+0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A,
+0x8A, 0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01, 0x10, 0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x93, 0x20, 0xE0,
+0x44, 0x40, 0x90, 0x93, 0x1F, 0xF0, 0x80, 0x03, 0xAF, 0x01, 0x22, 0x90, 0x93, 0x20, 0xE0, 0xFF,
+0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01,
+0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01,
+0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24,
+0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90,
+0x93, 0x20, 0xE0, 0xD3, 0x9C, 0x40, 0x5E, 0x90, 0x93, 0x22, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5,
+0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x20, 0xEF, 0xF0, 0x90, 0x93, 0x1F,
+0xF0, 0xFC, 0xA3, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83,
+0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
+0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13,
+0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3,
+0xEF, 0xF0, 0xAF, 0x04, 0x22, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4,
+0xF0, 0xAF, 0x05, 0x90, 0x93, 0x1F, 0xE0, 0x44, 0x80, 0xFD, 0x11, 0x63, 0x90, 0x93, 0x1F, 0xE0,
+0x44, 0x80, 0xFF, 0x22, 0xE4, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xC3, 0x94,
+0x40, 0x40, 0x03, 0x02, 0x7E, 0x57, 0xEF, 0xB4, 0x20, 0x14, 0x90, 0x8F, 0x46, 0xE0, 0x04, 0xF0,
+0x90, 0x89, 0x01, 0xE0, 0xFF, 0x90, 0x8F, 0x46, 0xE0, 0xB5, 0x07, 0x02, 0xE4, 0xF0, 0x90, 0x93,
+0x0F, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0xE0, 0x64, 0x01, 0x60,
+0x03, 0x02, 0x7E, 0x4E, 0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83,
+0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEE, 0x94, 0x00, 0x50, 0x03, 0x02, 0x7E, 0x4E, 0x90,
+0x93, 0x0F, 0xE0, 0x94, 0x20, 0x40, 0x09, 0x90, 0x8F, 0x46, 0xE0, 0x60, 0x03, 0x02, 0x7E, 0x57,
+0x90, 0x93, 0x0F, 0xE0, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75,
+0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34,
+0x87, 0xF5, 0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x93, 0x14, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF,
+0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
+0x93, 0x16, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x50,
+0x13, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93,
+0x10, 0xF0, 0x80, 0x14, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
+0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93, 0x10, 0xF0, 0x90, 0x93, 0x10, 0xE0, 0xFE, 0x54, 0x1F, 0xA3,
+0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0,
+0x90, 0x93, 0x19, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3,
+0x94, 0x05, 0x40, 0x03, 0x02, 0x79, 0xEC, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x90, 0x93, 0x11, 0xE0,
+0x9F, 0x40, 0x13, 0x90, 0x93, 0x19, 0xE0, 0x90, 0x93, 0x11, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0x90,
+0x93, 0x10, 0xF0, 0xEF, 0x4E, 0xF0, 0x90, 0x93, 0x11, 0xE0, 0xFF, 0x90, 0x41, 0x12, 0x93, 0xFE,
+0x90, 0x93, 0x0F, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xC3, 0x9E,
+0x40, 0x06, 0xEF, 0x90, 0x40, 0xDA, 0x80, 0x07, 0x90, 0x93, 0x11, 0xE0, 0x90, 0x40, 0xF6, 0x93,
+0x90, 0x93, 0x18, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x50, 0xF9, 0x74,
+0x40, 0x35, 0xF0, 0xFA, 0x7B, 0xFF, 0x8B, 0x57, 0xF5, 0x58, 0x89, 0x59, 0x90, 0x93, 0x0F, 0xE0,
+0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
+0x93, 0x12, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA,
+0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x9D, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE,
+0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x01, 0x12, 0x1F,
+0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0x12, 0x42, 0xC8,
+0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB,
+0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A,
+0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x04, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C,
+0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90,
+0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00,
+0x06, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0,
+0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF,
+0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x08, 0x12, 0x42, 0xC8, 0xFD, 0xAC,
+0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA,
+0x58, 0xA9, 0x59, 0x90, 0x00, 0x05, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x14, 0xE0,
+0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0xD3, 0x90, 0x93, 0x13, 0xE0, 0x9F, 0x90, 0x93, 0x12,
+0xE0, 0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F, 0xF0, 0x90, 0x93, 0x12, 0xE0, 0x9E, 0xF0, 0x80, 0x07,
+0xE4, 0x90, 0x93, 0x12, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x12, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90,
+0x93, 0x0F, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0,
+0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x10, 0xE0, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41,
+0xF5, 0x83, 0xE4, 0x93, 0xFC, 0x74, 0x01, 0x93, 0xFD, 0xD3, 0xEF, 0x9D, 0xEE, 0x9C, 0x50, 0x02,
+0x21, 0xBB, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0x82, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
+0xE0, 0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9E,
+0x40, 0x03, 0xEF, 0x80, 0x1C, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34,
+0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x82, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0,
+0xC3, 0x9E, 0x90, 0x93, 0x1A, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x02, 0x80,
+0x23, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0,
+0xD3, 0x94, 0x01, 0x40, 0x0F, 0x74, 0xC6, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0,
+0x14, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5,
+0x83, 0xE4, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5,
+0x83, 0xE0, 0x60, 0x02, 0x81, 0xFC, 0x12, 0x73, 0xF4, 0x81, 0xFC, 0x90, 0x93, 0x10, 0xE0, 0x25,
+0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93,
+0xFF, 0xC3, 0x90, 0x93, 0x13, 0xE0, 0x9F, 0x90, 0x93, 0x12, 0xE0, 0x9E, 0x40, 0x02, 0x81, 0xFC,
+0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x72, 0x29, 0x81, 0xFC, 0x90, 0x93, 0x0F, 0xE0,
+0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x02,
+0x61, 0xCA, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x03, 0x0B, 0x90, 0x93, 0x11, 0xE0, 0xC3, 0x94,
+0x19, 0x40, 0x3D, 0x80, 0x2E, 0xEE, 0xB4, 0x02, 0x0B, 0x90, 0x93, 0x11, 0xE0, 0xC3, 0x94, 0x11,
+0x40, 0x2E, 0x80, 0x1F, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x93, 0x11, 0xE0,
+0xC3, 0x94, 0x0A, 0x40, 0x1B, 0x80, 0x0C, 0xEE, 0x70, 0x11, 0x90, 0x93, 0x11, 0xE0, 0xC3, 0x94,
+0x03, 0x40, 0x0D, 0x90, 0x8E, 0xC5, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x8E, 0xC5, 0xF0,
+0x90, 0x93, 0x0F, 0xE0, 0xFE, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90,
+0x93, 0x1E, 0xF0, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0xC3,
+0x94, 0x30, 0x50, 0x0A, 0xE4, 0x90, 0x93, 0x1E, 0xF0, 0x74, 0x67, 0x2F, 0x61, 0x75, 0x90, 0x8E,
+0xC5, 0xE0, 0x64, 0x01, 0x60, 0x02, 0x61, 0x6A, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0x06, 0xF5, 0x82,
+0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x64, 0x0A, 0x60, 0x5B, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xEE,
+0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
+0xE0, 0xFF, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x38, 0x90, 0x93, 0x0F,
+0xE0, 0xFE, 0xEF, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
+0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x16, 0x90,
+0x93, 0x0F, 0xE0, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93,
+0x11, 0xE0, 0x6F, 0x60, 0x56, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E,
+0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x42, 0x40, 0x08, 0x90, 0x93, 0x1E, 0x74, 0x05, 0xF0, 0x80,
+0x11, 0xEF, 0xD3, 0x94, 0x39, 0x90, 0x93, 0x1E, 0x40, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74,
+0x01, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
+0xE0, 0xFE, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93,
+0x0F, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0x80, 0x2F, 0x90, 0x93, 0x0F, 0xE0, 0xFF,
+0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82,
+0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x14, 0xE4, 0x90, 0x93, 0x1E, 0xF0, 0x90,
+0x93, 0x0F, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93,
+0x11, 0xE0, 0xFE, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
+0x83, 0xEE, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFE, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C,
+0xF5, 0x83, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xE0, 0xB4,
+0x01, 0x11, 0xE4, 0x90, 0x93, 0x1E, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
+0x83, 0xE4, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFD, 0x81, 0xF9, 0xEC, 0x64, 0x06, 0x60, 0x02, 0x81,
+0xFC, 0x90, 0x93, 0x12, 0xF0, 0xA3, 0xF0, 0x90, 0x41, 0xDB, 0x93, 0xFF, 0x7E, 0x00, 0x90, 0x93,
+0x14, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x1C, 0xEE, 0xF0, 0xA3, 0xEF,
+0xF0, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90,
+0x93, 0x1E, 0xF0, 0xE4, 0x90, 0x93, 0x1B, 0xF0, 0x90, 0x93, 0x1B, 0xE0, 0xFF, 0xD3, 0x94, 0x04,
+0x50, 0x47, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x75, 0xF0, 0x02, 0xEF, 0xA4, 0xF5, 0x82, 0x85,
+0xF0, 0x83, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0xEF, 0x90, 0x41, 0xD6, 0x93, 0xFF, 0x7E, 0x00,
+0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0x1C, 0xE0,
+0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x93, 0x13, 0xE0, 0x9F, 0x90, 0x93, 0x12, 0xE0, 0x9E, 0x50,
+0x08, 0x90, 0x93, 0x1B, 0xE0, 0x04, 0xF0, 0x80, 0xAF, 0x90, 0x93, 0x1B, 0xE0, 0xC3, 0x13, 0xF0,
+0x90, 0x93, 0x1E, 0xE0, 0xFF, 0xB4, 0x01, 0x0D, 0x90, 0x93, 0x1B, 0xE0, 0x70, 0x5D, 0x90, 0x93,
+0x1E, 0x04, 0xF0, 0x80, 0x5B, 0xEF, 0xB4, 0x03, 0x1D, 0x90, 0x93, 0x1B, 0xE0, 0xFF, 0x70, 0x08,
+0x90, 0x93, 0x1E, 0x74, 0x03, 0xF0, 0x80, 0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x1E, 0x74,
+0x01, 0xF0, 0x80, 0x3C, 0x80, 0x35, 0x90, 0x93, 0x1E, 0xE0, 0x64, 0x05, 0x70, 0x32, 0x90, 0x93,
+0x1B, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93, 0x1E, 0x74, 0x05, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x93,
+0x1E, 0xB4, 0x01, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3, 0x90, 0x93, 0x17,
+0xE0, 0x94, 0x03, 0x90, 0x93, 0x16, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x1E, 0xF0,
+0xD3, 0x90, 0x93, 0x17, 0xE0, 0x94, 0x03, 0x90, 0x93, 0x16, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4,
+0x90, 0x93, 0x1E, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFD, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xC4,
+0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xED, 0xF0, 0x12, 0x70, 0x23, 0x90, 0x93, 0x0F, 0xE0,
+0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x05, 0x50, 0x0F,
+0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x0F, 0x90,
+0x93, 0x0F, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93,
+0x16, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x74, 0xFF, 0x9F, 0xFF, 0x74, 0xFF, 0x9E, 0xFE, 0x90,
+0x93, 0x0F, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
+0xFA, 0xA3, 0xE0, 0xD3, 0x9F, 0xEA, 0x9E, 0x50, 0x1C, 0x90, 0x93, 0x16, 0xE0, 0xFE, 0xA3, 0xE0,
+0xFF, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEE, 0x8F, 0xF0,
+0x12, 0x42, 0x87, 0x80, 0x14, 0x90, 0x93, 0x0F, 0xE0, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x25, 0xE0,
+0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0x74,
+0xFF, 0x9D, 0xFB, 0x74, 0xFF, 0x9C, 0xFA, 0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34,
+0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x9B, 0xEE, 0x9A, 0x90, 0x93, 0x0F, 0xE0, 0x50,
+0x13, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEC, 0x8D, 0xF0, 0x12,
+0x42, 0x87, 0x80, 0x10, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74,
+0xFF, 0xF0, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x00,
+0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90,
+0x00, 0x04, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43,
+0x1F, 0x90, 0x00, 0x08, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x25,
+0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
+0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
+0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x93,
+0x0F, 0xE0, 0x04, 0xF0, 0x02, 0x76, 0x59, 0x22, 0x90, 0x04, 0x44, 0x74, 0x11, 0xF0, 0xA3, 0x74,
+0xF0, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x93, 0x0F,
+0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x14, 0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5,
+0x83, 0xE4, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8F, 0x46, 0xF0,
+0x90, 0x89, 0x01, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xC3,
+0x94, 0x40, 0x40, 0x03, 0x02, 0x80, 0x53, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x00, 0x12, 0x43,
+0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12, 0x43, 0x9C, 0xE4,
+0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x04, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3,
+0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x06, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75,
+0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x08, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0xA7, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83,
+0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0,
+0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0,
+0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0,
+0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0,
+0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0,
+0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0,
+0xA3, 0xF0, 0x74, 0x07, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC7,
+0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8E, 0x04, 0xF0, 0x90, 0x41, 0x8C, 0x93, 0xFE, 0x74,
+0x01, 0x93, 0xFF, 0x90, 0x41, 0x54, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13,
+0xFE, 0xEF, 0x13, 0xFF, 0x90, 0x93, 0x0F, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
+0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8B,
+0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C,
+0x74, 0x01, 0xF0, 0x74, 0xC2, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0C, 0xF0,
+0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x75,
+0xF0, 0x09, 0xED, 0x90, 0x8A, 0x84, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0x75,
+0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09, 0xED,
+0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x0F, 0x74, 0x84,
+0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x80, 0x0D, 0x74, 0x27, 0x2D,
+0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0x04, 0xF0,
+0x02, 0x7E, 0x9A, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0xC3, 0x94, 0x40, 0x50, 0x14, 0x90, 0x00, 0x02,
+0x12, 0x1F, 0x0F, 0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEE, 0xF0,
+0x22, 0xEF, 0xB4, 0x40, 0x0A, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x8A, 0x82, 0xF0, 0x22,
+0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFC, 0xED, 0xC3,
+0x94, 0x40, 0x40, 0x02, 0xE4, 0xFD, 0xEC, 0xC3, 0x94, 0x40, 0x40, 0x02, 0xE4, 0xFC, 0xED, 0x25,
+0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93,
+0x1A, 0xF0, 0xEE, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5,
+0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x1C, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xED, 0xF0, 0xA3,
+0x74, 0xFF, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
+0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x20, 0xF0, 0xEE, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5,
+0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x22, 0xF0, 0xEE, 0xA3,
+0xF0, 0xA3, 0xEC, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x1A, 0x02, 0x5F,
+0x97, 0x7F, 0xAF, 0x7E, 0x01, 0x90, 0x93, 0xDB, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0,
+0xA3, 0xF0, 0x90, 0x93, 0xDB, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C,
+0xC3, 0x90, 0x93, 0xDE, 0xE0, 0x94, 0xE8, 0x90, 0x93, 0xDD, 0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90,
+0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x93, 0xDD, 0xE4, 0x75, 0xF0, 0x01,
+0x12, 0x42, 0x87, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x80, 0xC6, 0x7F, 0x01, 0x22, 0xD3,
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xC2, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x68, 0xE0,
+0xFF, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x65, 0x31, 0x51, 0xEF, 0x70, 0x02, 0x41,
+0x5C, 0x90, 0x93, 0xC2, 0x12, 0x43, 0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x75, 0x27, 0x02,
+0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0x12, 0x57, 0xF9, 0x90, 0x93, 0xC5, 0x12, 0x43, 0xA8, 0x8B,
+0x24, 0x8A, 0x25, 0x89, 0x26, 0x90, 0x93, 0xC2, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4,
+0x54, 0x0F, 0xF5, 0x27, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2, 0x12, 0x57, 0xF9, 0x90, 0x01, 0xAF,
+0x74, 0xFF, 0xF0, 0x90, 0x93, 0x70, 0xE0, 0x64, 0x01, 0x70, 0x4A, 0x90, 0x93, 0xC2, 0x12, 0x43,
+0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x75, 0x27, 0x02, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x20,
+0x12, 0x57, 0xF9, 0x90, 0x93, 0xC5, 0x12, 0x43, 0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x90,
+0x93, 0xC2, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x27, 0x7B, 0x01,
+0x7A, 0xFD, 0x79, 0x22, 0x12, 0x57, 0xF9, 0x90, 0x93, 0x54, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82,
+0x8E, 0x83, 0x74, 0xFF, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0x69, 0xE0, 0x75, 0xF0, 0x0F, 0xA4,
+0x24, 0x6B, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x02, 0xC0, 0x01, 0xE0, 0x75,
+0xF0, 0x0F, 0xA4, 0x24, 0x6D, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x90, 0x93, 0xC5, 0x12, 0x43,
+0xC8, 0xD0, 0x01, 0xD0, 0x02, 0x31, 0x9F, 0x90, 0x92, 0x69, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A,
+0x02, 0xE4, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92, 0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D,
+0x02, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x92, 0x69, 0xF0,
+0xA3, 0xF0, 0x90, 0x01, 0xAF, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93,
+0x1A, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x1D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93,
+0x1A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x50, 0xF0, 0x90, 0x00,
+0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x33, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54,
+0x01, 0x90, 0x93, 0x34, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x01, 0x90, 0x93, 0x3E, 0xF0, 0x90, 0x00,
+0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x3B, 0xF0, 0xEF, 0x13, 0x13,
+0x13, 0x54, 0x01, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x54,
+0x01, 0x90, 0x93, 0x3D, 0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x01, 0x90, 0x93, 0x52, 0xF0, 0x90, 0x00,
+0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x40, 0xF0, 0xE0, 0x70,
+0x38, 0x90, 0x93, 0x3E, 0xE0, 0x70, 0x10, 0xFF, 0x12, 0x50, 0x56, 0x90, 0x93, 0x1D, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x03, 0x10, 0x80, 0x0F, 0x7F, 0x01, 0x12, 0x50, 0x56, 0x90, 0x93, 0x1D, 0x12,
+0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x90, 0x93, 0x1D, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12,
+0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x34, 0xE0, 0x70, 0x03, 0x12,
+0x4F, 0x63, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x4C, 0xDF, 0x90, 0x93, 0x50, 0xE0, 0x90,
+0x01, 0xE6, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x30,
+0xE0, 0x25, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x3F, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
+0x93, 0x42, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x3C, 0xF0, 0x90, 0x00, 0x03, 0x12,
+0x1F, 0x0F, 0x90, 0x93, 0x47, 0xF0, 0x22, 0x90, 0x93, 0x3F, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x42,
+0x74, 0x05, 0xF0, 0x90, 0x93, 0x3C, 0x74, 0x14, 0xF0, 0x90, 0x93, 0x47, 0x74, 0x05, 0xF0, 0x22,
+0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x46, 0xF0, 0x90, 0x00,
+0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x44, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90,
+0x93, 0x46, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x44, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x93,
+0x44, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x43, 0xF0,
+0x60, 0x19, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x48, 0xF4, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x09, 0x90,
+0x93, 0x4D, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0x63, 0x12, 0x51, 0x4C, 0x90, 0x93, 0x43, 0xE0, 0x90,
+0x01, 0xE7, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x2D, 0xE0, 0x54,
+0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x0F, 0xFF, 0xE0, 0x54, 0xF0, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54,
+0x70, 0xFF, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0x8F, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
+0x90, 0x93, 0x2F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x30, 0xF0, 0x90, 0x00,
+0x04, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x31, 0xF0, 0x90, 0x00, 0x01, 0x74, 0x19, 0x12, 0x42, 0x20,
+0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xD3, 0x94, 0x20, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74,
+0x01, 0xF0, 0x80, 0x57, 0xEF, 0xD3, 0x94, 0x40, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x02, 0xF0,
+0x80, 0x49, 0xEF, 0xD3, 0x94, 0x60, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x03, 0xF0, 0x80, 0x3B,
+0xEF, 0xD3, 0x94, 0x80, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x04, 0xF0, 0x80, 0x2D, 0xEF, 0xD3,
+0x94, 0xA0, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x05, 0xF0, 0x80, 0x1F, 0xEF, 0xD3, 0x94, 0xC0,
+0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x06, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0xE0, 0x90, 0x93,
+0x2E, 0x50, 0x05, 0x74, 0x07, 0xF0, 0x80, 0x03, 0x74, 0x08, 0xF0, 0x90, 0x93, 0x2E, 0xE0, 0x90,
+0x93, 0x32, 0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x1E, 0xF6, 0xFE, 0xAF, 0x05, 0xED,
+0x2E, 0x90, 0x93, 0x67, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93,
+0x68, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x69, 0xF0, 0x90,
+0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x6A, 0xF0, 0x90, 0x00, 0x04, 0x12,
+0x1F, 0x0F, 0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90, 0x93, 0x6B, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xC8, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x12, 0x1E,
+0xF6, 0xC3, 0x13, 0x20, 0xE0, 0x02, 0xC1, 0xB6, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E,
+0xF6, 0xFF, 0x54, 0x02, 0xFE, 0x90, 0x93, 0x9E, 0xE0, 0x54, 0xFD, 0x4E, 0xFE, 0xF0, 0xEF, 0x54,
+0x01, 0xFF, 0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x08, 0xFD, 0xEF,
+0x54, 0xF7, 0x4D, 0xFF, 0x90, 0x93, 0x9E, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E,
+0xFF, 0xF0, 0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x20, 0xFD, 0xEF, 0x54, 0xDF, 0x4D, 0xFF, 0x90, 0x93,
+0x9E, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0xEF, 0x54, 0xBF, 0x4E, 0xF0, 0x20, 0xE0, 0x02, 0xC1, 0xA2,
+0x90, 0x93, 0x1D, 0x74, 0x21, 0xF0, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF,
+0x13, 0x13, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x9E, 0xE0, 0xFD, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x60,
+0x31, 0xEF, 0x54, 0x04, 0xFF, 0xED, 0x54, 0xFB, 0x4F, 0xF0, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30,
+0xE0, 0x15, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x3A, 0x93, 0x90, 0x93,
+0x1D, 0xE0, 0x44, 0x08, 0xF0, 0x80, 0x0B, 0xE4, 0x90, 0x93, 0xA0, 0xF0, 0x7D, 0x40, 0xFF, 0x12,
+0x3A, 0x22, 0x90, 0x93, 0x9E, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90,
+0x93, 0x1D, 0xE0, 0x44, 0x12, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x93, 0x1D,
+0xE0, 0x44, 0x14, 0xF0, 0x90, 0x93, 0x9E, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x07, 0x90,
+0x93, 0x1D, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x93, 0x9E, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20,
+0xE0, 0x07, 0x90, 0x93, 0x1D, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93, 0x1D, 0xE0, 0x90, 0x05, 0x27,
+0xF0, 0x90, 0x93, 0x9F, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x55, 0x11, 0x90, 0x93, 0x9E, 0xE0,
+0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x04, 0x7F, 0x03, 0x80, 0x0E, 0x7F, 0x01, 0x12, 0x5E,
+0x91, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x12, 0x55, 0x11, 0x7F, 0x02, 0x02,
+0x88, 0x14, 0x90, 0x93, 0x1D, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27, 0xF0, 0xE4, 0xFF, 0x12, 0x55,
+0x11, 0x7F, 0x03, 0x02, 0x88, 0x14, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF,
+0x54, 0x02, 0xFE, 0x90, 0x93, 0x98, 0xE0, 0x54, 0xFD, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF,
+0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7,
+0x4D, 0xFF, 0x90, 0x93, 0x98, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0,
+0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x40, 0xFD, 0xEF, 0x54, 0xBF, 0x4D, 0xFF, 0x90, 0x93, 0x98, 0xF0,
+0xEE, 0x54, 0x04, 0xFE, 0xEF, 0x54, 0xFB, 0x4E, 0xF0, 0x20, 0xE0, 0x02, 0xE1, 0xC7, 0x90, 0x93,
+0x1D, 0x74, 0x31, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x15, 0x90,
+0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x3A, 0x93, 0x90, 0x93, 0x1D, 0xE0, 0x44,
+0x08, 0xF0, 0x80, 0x0B, 0xE4, 0x90, 0x93, 0x9A, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x3A, 0x22, 0x90,
+0x93, 0x98, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x93, 0x1D, 0xE0,
+0x44, 0x02, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x93, 0x1D, 0xE0, 0x44, 0x04,
+0xF0, 0x90, 0x93, 0x1D, 0xE0, 0x54, 0x0E, 0x60, 0x0C, 0x90, 0x01, 0x3E, 0x74, 0x03, 0xF0, 0xFD,
+0x7F, 0x02, 0x12, 0x3A, 0xAD, 0x90, 0x93, 0x1D, 0xE0, 0x90, 0x05, 0x27, 0xF0, 0x90, 0x93, 0x98,
+0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x64, 0x06, 0x60, 0x33,
+0x7F, 0x06, 0x12, 0x64, 0xDA, 0x80, 0x2C, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93,
+0x99, 0xE0, 0xB4, 0x06, 0x1B, 0x7F, 0x01, 0x12, 0x64, 0xDA, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF,
+0x60, 0x09, 0x7D, 0x01, 0xAF, 0x64, 0x12, 0x48, 0xF4, 0x80, 0x05, 0x12, 0x64, 0xA8, 0x80, 0x03,
+0x12, 0x67, 0x4A, 0x7F, 0x01, 0x80, 0x4D, 0x90, 0x93, 0x1D, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27,
+0xF0, 0x7D, 0x03, 0x7F, 0x02, 0x12, 0x3A, 0x3F, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x06, 0x02, 0x80,
+0x1B, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05,
+0x04, 0xE4, 0xFF, 0x80, 0x14, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09,
+0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x05, 0x7F, 0x01, 0x12, 0x64, 0xDA, 0x12, 0x67, 0x29, 0x12,
+0x51, 0x9C, 0x7F, 0x03, 0x11, 0x1B, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAD, 0x07, 0xEF, 0x64, 0x01,
+0x60, 0x04, 0xEF, 0xB4, 0x03, 0x15, 0x90, 0x93, 0x9E, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0,
+0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xED, 0x64, 0x02, 0x60, 0x04,
+0xED, 0xB4, 0x03, 0x15, 0x90, 0x93, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3,
+0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x6D,
+0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x6E, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0xE5,
+0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xEB, 0xE0, 0x54, 0xC0, 0x60, 0x43, 0xC3, 0x90, 0x93, 0xE6, 0xE0,
+0x94, 0x88, 0x90, 0x93, 0xE5, 0xE0, 0x94, 0x13, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x04,
+0xF0, 0x7F, 0x00, 0x22, 0x90, 0x93, 0xE5, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14,
+0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0xE6, 0xE0, 0x94, 0x64, 0x90, 0x93, 0xE5, 0xE0,
+0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE2, 0xB8, 0x7F, 0x00, 0x22, 0x7F, 0x01,
+0x22, 0x90, 0x93, 0xA4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xA8, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00,
+0x00, 0xE4, 0x7F, 0x1F, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0xA8, 0x12, 0x43, 0x90, 0xD3, 0x12, 0x43,
+0x73, 0x50, 0x41, 0x90, 0x93, 0xA8, 0x12, 0x43, 0x84, 0xA9, 0x07, 0x90, 0x93, 0xA4, 0x12, 0x43,
+0x84, 0xA8, 0x01, 0x12, 0x1F, 0xA3, 0xEF, 0x54, 0x01, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0x7B, 0x01,
+0xFA, 0xF9, 0xF8, 0xC3, 0x12, 0x43, 0x73, 0x60, 0x1B, 0x90, 0x93, 0xA8, 0x12, 0x43, 0x84, 0xEF,
+0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, 0x93, 0xA8, 0x12,
+0x1F, 0xC9, 0x80, 0xAD, 0x90, 0x93, 0xA8, 0x02, 0x43, 0x84, 0x90, 0x93, 0x73, 0x12, 0x1F, 0xC9,
+0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0x77, 0x12, 0x43, 0x90, 0xC3, 0x12, 0x43, 0x73,
+0x90, 0x93, 0x73, 0x60, 0x67, 0x12, 0x43, 0x84, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0x7F, 0x12, 0x1F,
+0xC9, 0x90, 0x93, 0x77, 0x12, 0x43, 0x84, 0x11, 0xC1, 0x90, 0x93, 0x83, 0x12, 0x1F, 0xC9, 0x90,
+0x93, 0x77, 0x12, 0x43, 0x84, 0x12, 0x43, 0x66, 0x90, 0x93, 0x7F, 0x12, 0x43, 0x90, 0x12, 0x43,
+0x4C, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0x83, 0x12, 0x43, 0x84, 0xA9,
+0x07, 0x90, 0x93, 0x7B, 0x12, 0x43, 0x84, 0xA8, 0x01, 0x12, 0x1F, 0xB6, 0xD0, 0x03, 0xD0, 0x02,
+0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0x59, 0x90, 0x93, 0x87, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0x73,
+0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0x87, 0x80, 0x0A, 0x12, 0x43, 0x84, 0xC0,
+0x06, 0xC0, 0x07, 0x90, 0x93, 0x7B, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0xD0,
+0x07, 0xD0, 0x06, 0x02, 0x34, 0x30, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x9F, 0x74,
+0x04, 0xF0, 0x22, 0x12, 0x56, 0x01, 0x80, 0xEE, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x05,
+0x27, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93, 0x9F, 0x74, 0x04, 0xF0, 0x22, 0x12, 0x56, 0x14, 0x90,
+0x93, 0x9F, 0x74, 0x04, 0xF0, 0x22, 0x90, 0x01, 0x57, 0xE0, 0x60, 0x3C, 0x90, 0x01, 0x57, 0xE4,
+0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x51, 0xE0, 0x60, 0x07, 0xE4, 0xF0, 0x53,
+0x66, 0xFD, 0x80, 0x24, 0x90, 0x93, 0x38, 0xE0, 0x04, 0xF0, 0x53, 0x66, 0xEF, 0x90, 0x93, 0x3F,
+0xE0, 0xFF, 0x90, 0x93, 0x38, 0xE0, 0xD3, 0x9F, 0x40, 0x0E, 0xE5, 0x62, 0xB4, 0x01, 0x09, 0x90,
+0x93, 0x39, 0xE0, 0x70, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x5B, 0xE0, 0x60, 0x10, 0x90, 0x01,
+0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x4C, 0xF0, 0x90, 0x01,
+0x5F, 0xE0, 0x60, 0x10, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0xE4,
+0x90, 0x93, 0x49, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0xE7, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0,
+0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01,
+0x22, 0xD3, 0x90, 0x93, 0xE8, 0xE0, 0x94, 0xE8, 0x90, 0x93, 0xE7, 0xE0, 0x94, 0x03, 0x40, 0x03,
+0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x93, 0xE7, 0xE4, 0x75, 0xF0,
+0x01, 0x12, 0x42, 0x87, 0x80, 0xC6, 0xE4, 0xFF, 0x02, 0x4E, 0x8B, 0x90, 0x93, 0x1A, 0x12, 0x43,
+0xC8, 0x12, 0x1E, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x93, 0xE0, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xE0,
+0x30, 0xE0, 0x02, 0x51, 0xA6, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xC3, 0x13,
+0x30, 0xE0, 0x0A, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0xE1, 0xF0, 0x22, 0x7E, 0xBF,
+};
+
+#ifdef CONFIG_MP_INCLUDED
+u8 Rtl8723EFwBTImgArray[Rtl8723EBTImgArrayLength] = {
+0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x55,0xB2,0xCD,0xF7,0x12,0x6B,0x6B,0xEB,0x51,0xB7,0x60,0xCA,0x53,0xB2,0x64,0xF3,0x13,0x6B,0x6B,0xEB,0xE8,0x4F,0x60,0xCA,0x51,0xB2,0x00,0x6B,0x40,0xF0,0x6C,0xC7,0x60,0xC2,0xC0,0xF0,0x58,0x9F,0x4F,0xB3,0x51,0xB0,0x00,0x69,0x6D,0xEA,0xC0,0xF0,0x58,0xDF,0x45,0xF1,0x09,0x6A,0x00,0xF1,0x50,0xCF,0x0E,0xF0,0x1D,0x6A,0x80,0xF1,0x62,0xA7,0x43,0xDF,0x48,0xB2,0x25,0xDF,0x26,0xDF,0x44,0xDF,0x68,0x32,0x69,0xE2,0x46,0xB3,0x44,0x32,0x27,0xDF,0x28,0xDF,0x29,0xDF,0x40,0xCB,0x90,0x67,0xB1,0x67,0x30,0x6E,0x00,0x18,0x64,0x2E,0x04,0xD7,0x01,0x6A,0x4B,0xEA,0x47,0xD8,0x41,0xB3,0x40,0x98,0x42,0xB4,0xB1,0x67,0x6D,0xEA,0x40,0xD8,0x0A,0x6A,0x4C,0xC0,0x08,0x6A,0x4D,0xC0,0x3D,0xB2,0x0C,0x6E,0x00,0x18,0x64,0x2E,0x20,0xC2,0x30,0xB3,0x03,0x6A,0x30,0xB5,0x80,0x9B,0x02,0x6B,0x6B,0xEB,0x6C,0xEC,0x4B,0xEA,0x4C,0xEC,0x05,0x6A,0x4B,0xEA,0x4C,0xEC,0x40,0x9D,0x6C,0xEA,0x40,0xDD,0x04,0x97,0x0E,0xF0,0x1D,0x6A,0x34,0xB3,0x43,0xDF,0x32,0xB2,0x60,0xDA,0x34,0xB3,0x33,0xB2,0x60,0xDA,0x35,0xB3,0x33,0xB2,0x60,0xDA,0x35,0xB3,0x34,0xB2,0x60,0xDA,0x36,0xB3,0x34,0xB2,0x60,0xDA,0x36,0xB3,0x35,0xB2,0x60,0xDA,0x37,0xB3,0x35,0xB2,0x60,0xDA,0x37,0xB3,0x36,0xB2,0x60,0xDA,0x38,0xB3,0x36,0xB2,0x60,0xDA,0x38,0xB3,0x37,0xB2,0x60,0xDA,0x39,0xB3,0x37,0xB2,0x60,0xDA,0x39,0xB3,0x38,0xB2,0x60,0xDA,0x3A,0xB3,0x38,0xB2,0x60,0xDA,0x3A,0xB3,0x39,0xB2,0x60,0xDA,0x3B,0xB3,0x39,0xB2,0x60,0xDA,0x3B,0xB3,0x3A,0xB2,0x60,0xDA,0x3B,0xB2,0x3C,0xB3,0x20,0xCA,0x3A,0xB2,0x60,0xDA,0x3B,0xB2,0x08,0xF1,0x11,0x6B,0x6B,0xEB,0x20,0xCA,0x3A,0xB2,0x60,0xCA,0x3A,0xB2,0x20,0xDA,0x3A,0xB2,0x20,0xDA,0x3A,0xB2,0x06,0xB3,0x4C,0xEC,0x39,0xB2,0x4D,0xEC,0x80,0x18,0x5A,0x37,0x80,0xDB,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0xF4,0x00,0x11,0x80,0xF0,0x00,0x11,0x80,0xD0,0x04,0x11,0x80,0xD2,0x04,0x11,0x80,0xCA,0xA0,0x11,0x80,0x00,0x00,0x00,0x18,0x58,0xC5,0xC8,0x19,0x08,0xA1,0x11,0x80,0xCC,0xA0,0x11,0x80,0x00,0x00,0x00,0x70,0x1C,0xA1,0x11,0x80,0xFC,0xA0,0x11,0x80,0xBC,0x00,0x11,0x80,0x51,0xA9,0x10,0x80,0x44,
+0x00,0x11,0x80,0x4D,0xA3,0x10,0x80,0x4C,0x05,0x11,0x80,0x55,0xAE,0x10,0x80,0x44,0x05,0x11,0x80,0x59,0xD1,0x10,0x80,0x58,0x09,0x11,0x80,0xF5,0xD4,0x10,0x80,0x3C,0x00,0x11,0x80,0x35,0xA6,0x10,0x80,0xA0,0x05,0x11,0x80,0x51,0xAB,0x10,0x80,0xC4,0x05,0x11,0x80,0xF1,0xA9,0x10,0x80,0x5C,0x05,0x11,0x80,0xBD,0xDB,0x10,0x80,0x90,0x06,0x11,0x80,0x7D,0xCA,0x10,0x80,0x98,0x07,0x11,0x80,0xB5,0xCD,0x10,0x80,0xA0,0x07,0x11,0x80,0x1D,0xCF,0x10,0x80,0x9C,0x07,0x11,0x80,0xC5,0xCF,0x10,0x80,0xEC,0x04,0x11,0x80,0xB5,0xAF,0x10,0x80,0x80,0x00,0x11,0x80,0xCD,0xD2,0x10,0x80,0x6C,0x06,0x11,0x80,0x29,0xD4,0x10,0x80,0x0A,0xA1,0x11,0x80,0xD4,0x04,0x11,0x80,0x25,0xD3,0x10,0x80,0xC8,0xA0,0x11,0x80,0x0C,0xA1,0x11,0x80,0x10,0xA1,0x11,0x80,0x14,0xA1,0x11,0x80,0xFF,0xFF,0x1F,0xFF,0x00,0x00,0x60,0x00,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x04,0x67,0x2F,0x24,0x80,0x98,0x00,0x6A,0x00,0xF4,0x24,0x98,0xBD,0x67,0x00,0xF4,0x44,0xD8,0xE1,0xF7,0x1F,0x6A,0x4C,0xEC,0x00,0x18,0x2A,0xDF,0x10,0x4D,0x12,0x2A,0x5D,0x67,0x68,0xAA,0xFF,0xF7,0x1F,0x6A,0x4C,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x0E,0xB3,0x48,0x32,0x69,0xE2,0xE0,0xF0,0x4B,0xA2,0x01,0x72,0x0A,0x60,0x0B,0xB2,0xB0,0x67,0x00,0x18,0xE0,0x1D,0x83,0x9A,0x07,0x2A,0x00,0x18,0x6A,0x1E,0x11,0x67,0x04,0x10,0x00,0x18,0x7B,0x57,0x90,0x67,0x11,0x67,0xD1,0x29,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0x9C,0x31,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0xFF,0x6B,0x6C,0xEE,0x04,0x76,0x0A,0xD4,0x04,0xD6,0x2B,0x61,0x40,0xA4,0x6C,0xEA,0x03,0x72,0x27,0x61,0x22,0xA4,0x6C,0xE9,0x24,0x29,0x44,0xA4,0x03,0xA4,0x6C,0xEA,0x6C,0xE8,0x40,0x32,0x00,0x1C,0xDD,0x31,0x4D,0xE8,0x13,0xB3,0x1A,0x65,0x40,0xAB,0x0E,0xEA,0x14,0x2A,0x11,0xB2,0x98,0x67,0x00,0x9A,0x20,0xDA,0x10,0xB2,0x20,0xDA,0x08,0xF1,0x11,0x6A,0x4B,0xEA,0x00,0x1C,0xE5,0x31,0x40,0xCB,0x00,0x18,0xA9,0x1D,0x01,0x6C,0x07,0x20,0x80,0x18,0x8A,0x28,0x90,0x67,0x03,0x10,0x00,0x1C,0xE5,0x31,0x98,0x67,0x0A,0x94,0x00,0x18,0xBD,0x89,0x04,0x95,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x0C,0xA1,0x11,0x80,
+0x10,0xA1,0x11,0x80,0x14,0xA1,0x11,0x80,0x03,0xB2,0x01,0x6B,0x40,0x9A,0x52,0x32,0x20,0xE8,0x6C,0xEA,0x50,0x60,0x00,0xB0,0x03,0xB2,0x01,0x6B,0x40,0x9A,0x4A,0x32,0x20,0xE8,0x6C,0xEA,0x50,0x60,0x00,0xB0,0xF3,0x63,0x18,0x62,0x17,0xD1,0x16,0xD0,0x7D,0x67,0x00,0x6A,0x20,0xF0,0x50,0xC3,0xA6,0xB3,0x9D,0x67,0x00,0x69,0x58,0xAB,0x40,0xF0,0x48,0xCC,0x20,0xF0,0x5A,0xA3,0x20,0xF0,0x79,0xA3,0x40,0x32,0x4D,0xEB,0xA1,0xB2,0x0D,0xD3,0x01,0x6B,0x40,0x9A,0x0F,0xD2,0xA0,0xB2,0x40,0x9A,0x0E,0xD2,0x9F,0xB2,0x00,0x9A,0x9F,0xB2,0x40,0x9A,0x10,0xD2,0x0E,0x92,0x6C,0xEA,0x3A,0x22,0xBD,0x67,0x83,0x67,0x30,0x4D,0x00,0x6E,0x00,0x18,0x71,0x23,0x23,0x67,0x02,0x2A,0x03,0x69,0x0B,0x11,0x9D,0x67,0x20,0xF0,0x70,0xA4,0x0F,0x94,0xFF,0x6A,0x4C,0xEB,0x80,0xF7,0x82,0x32,0x2C,0xEA,0x4E,0xEB,0x94,0xB4,0x1B,0x2B,0x92,0xB2,0x4D,0xE8,0x40,0x9C,0x56,0x32,0x2C,0xEA,0x02,0x2A,0x91,0xB2,0x4D,0xE8,0x7D,0x67,0x40,0xF0,0x68,0xAB,0x01,0xF0,0x00,0x6A,0x05,0x69,0x6C,0xEA,0xFF,0xF7,0x1F,0x6B,0x6C,0xEA,0x04,0x22,0x00,0x18,0xA4,0x1D,0x0D,0x94,0x0D,0x10,0x00,0x18,0xA9,0x1D,0x0D,0x94,0x09,0x10,0x88,0xB2,0x4C,0xE8,0x40,0x9C,0x56,0x32,0x2C,0xEA,0x02,0x2A,0x86,0xB2,0x4C,0xE8,0x09,0x69,0x0E,0x94,0x01,0x6F,0x86,0x32,0xEC,0xEA,0x41,0x22,0x7F,0xB3,0x40,0x9B,0x56,0x32,0xEC,0xEA,0x3C,0x22,0xBD,0x67,0x10,0x6A,0xC7,0x67,0x02,0x6C,0x30,0x4D,0x14,0xD7,0x00,0x18,0x71,0x23,0x4D,0xE9,0x14,0x97,0x06,0x2A,0x20,0x6A,0x4D,0xE9,0xFF,0xF7,0x1F,0x6C,0x8C,0xE9,0xC0,0x10,0x0F,0x94,0x5D,0x67,0x20,0xF0,0x70,0xA2,0x40,0xF7,0x82,0x32,0xEC,0xEA,0x4E,0xEB,0x70,0xB2,0x80,0x9A,0x19,0x2B,0x6F,0xB2,0x4D,0xE8,0x44,0x67,0xEC,0xEA,0x02,0x2A,0x6B,0xB2,0x4D,0xE8,0x7D,0x67,0x40,0xF0,0x68,0xAB,0x01,0xF0,0x00,0x6A,0xFF,0xF7,0x1F,0x6C,0x6C,0xEA,0x8C,0xEA,0x04,0x22,0x00,0x18,0xA4,0x1D,0x0D,0x94,0x0B,0x10,0x00,0x18,0xA9,0x1D,0x0D,0x94,0x07,0x10,0x65,0xB2,0x4C,0xE8,0x44,0x67,0xEC,0xEA,0x02,0x2A,0x61,0xB2,0x4C,0xE8,0x0E,0x93,0x01,0x6C,0x6A,0x32,0x8C,0xEA,0x3C,0x22,0x5C,0xB3,0x40,0x9B,0x0F,0x6B,0x46,0xEC,0x6C,0xEA,0x03,0x72,0x35,0x60,0xFF,0x6A,0xBD,0x67,0x01,0x4A,0x04,0x6C,0x30,0x4D,0x02,0x6E,0x00,0x18,0x71,
+0x23,0x4D,0xE9,0x03,0x2A,0x00,0xF2,0x00,0x6A,0x40,0x10,0x9D,0x67,0x20,0xF0,0x50,0xA4,0x50,0xB3,0x80,0x9B,0x11,0x22,0x53,0xB2,0x03,0x6B,0x4D,0xE8,0x82,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,0x04,0x60,0x96,0x32,0x01,0x6C,0x8C,0xEA,0x02,0x2A,0x4E,0xB2,0x4D,0xE8,0x00,0xF4,0x00,0x6A,0x10,0x10,0x4C,0xB2,0x03,0x6B,0x4C,0xE8,0x82,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,0x04,0x60,0x96,0x32,0x01,0x6B,0x6C,0xEA,0x02,0x2A,0x47,0xB2,0x4C,0xE8,0x01,0xF0,0x00,0x6A,0x4D,0xE9,0x0E,0x94,0x01,0x6B,0x8E,0x32,0x6C,0xEA,0x18,0x22,0x3B,0xB2,0x40,0x9A,0x46,0xEB,0x0F,0x6B,0x6C,0xEA,0x03,0x72,0x11,0x60,0xBD,0x67,0x02,0xF0,0x00,0x6A,0x08,0x6C,0x30,0x4D,0x03,0x6E,0x00,0x18,0x71,0x23,0x4D,0xE9,0x07,0x2A,0x04,0xF0,0x00,0x6A,0x4D,0xE9,0xFF,0xF7,0x1F,0x6A,0x4C,0xE9,0x37,0x10,0x04,0x6A,0x2C,0xEA,0x08,0x2A,0x34,0xB2,0x4C,0xE8,0x34,0xB2,0x4C,0xE8,0x2E,0xB2,0x4C,0xE8,0x2E,0xB2,0x4C,0xE8,0xC0,0xF5,0x02,0x32,0x01,0x6B,0x6C,0xEA,0x0C,0x22,0x27,0xB2,0x03,0x6B,0x40,0x9A,0x42,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,0x04,0x61,0x25,0xB2,0x4C,0xE8,0x25,0xB2,0x4C,0xE8,0x29,0xB3,0x50,0x67,0x6C,0xEA,0x6E,0xEA,0x0C,0x2A,0x1F,0xB2,0x03,0x6B,0x40,0x9A,0x42,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,0x04,0x61,0x1F,0xB2,0x4D,0xE8,0x1F,0xB2,0x4D,0xE8,0x22,0xB3,0x50,0x67,0x6C,0xEA,0x6E,0xEA,0x03,0x2A,0x00,0x18,0xBB,0x30,0x00,0x6C,0x12,0xB2,0x00,0xDA,0x05,0x6A,0x10,0x94,0x04,0xD2,0x0B,0x0A,0x05,0xD2,0x0E,0x93,0x0F,0x92,0x0A,0xD4,0xFA,0x6D,0x04,0x6C,0xE1,0xF3,0x09,0x6E,0xA1,0xF1,0x1A,0x6F,0x06,0xD1,0x09,0xD0,0x07,0xD2,0x20,0x18,0x1B,0x32,0x08,0xD3,0x18,0x97,0x17,0x91,0x16,0x90,0x00,0xEF,0x0D,0x63,0x41,0x00,0x00,0x00,0xDC,0x00,0x11,0x80,0x44,0xA0,0x00,0xB0,0x40,0x60,0x00,0xB0,0x40,0xA0,0x00,0xB0,0x50,0xA0,0x00,0xB0,0x00,0x00,0x80,0x00,0x6C,0x1D,0x11,0x80,0x00,0x00,0x40,0x00,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xBF,0xFF,0x00,0x00,0x20,0x00,0x00,0x00,0x10,0x00,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xEF,0xFF,0x00,0x00,0xC0,0x00,0x00,0x00,0x30,0x00,0xF8,0x63,0x0E,0x62,0x0D,0xD1,0x0C,0xD0,0x65,0xB2,0x01,0x6F,0x20,0x9A,0x2A,0x65,0x36,0x36,0xEC,0xEE,0x0B,0x2E,0x63,0xB4,0x03,0x6B,0x6B,0xEB,0x40,0x9C,
+0x6C,0xEA,0x40,0xDC,0x61,0xB4,0x02,0x6B,0x40,0x9C,0x6D,0xEA,0x40,0xDC,0x5F,0xB2,0x00,0x6B,0x0A,0xD3,0xA3,0x67,0x60,0x9A,0x5E,0xB2,0x40,0x9A,0x0A,0x65,0x5D,0xB2,0x00,0x9A,0x51,0x67,0xEC,0xEA,0x10,0x22,0x80,0xF7,0x62,0x32,0x88,0x67,0x8E,0xEA,0xEC,0xEA,0x01,0x5A,0xA7,0x67,0x08,0x60,0x58,0xB2,0x03,0x6D,0x4D,0xE8,0x03,0x2E,0x57,0xB2,0x07,0x6D,0x4D,0xE8,0x0A,0xD7,0x29,0x67,0xC0,0x99,0x01,0x6C,0xD6,0x32,0x8C,0xEA,0x1E,0x22,0x08,0x6A,0x4D,0xED,0x02,0x32,0x52,0x32,0x8C,0xEA,0xFF,0xF7,0x1F,0x6F,0x16,0x22,0x28,0x67,0x26,0x32,0x40,0xF7,0x62,0x33,0x4E,0xEB,0x8C,0xEB,0x83,0xEB,0x0E,0x60,0x10,0x6A,0x4D,0xED,0x49,0xB2,0xEC,0xED,0x4D,0xE8,0x46,0x67,0x8C,0xEA,0x05,0x2A,0x45,0xB2,0x4D,0xE8,0x20,0x6A,0x4D,0xED,0xEC,0xED,0x0A,0xD4,0x68,0x67,0x6A,0x32,0x01,0x6E,0xCC,0xEA,0x16,0x22,0x40,0x6A,0x29,0x67,0x4D,0xED,0x80,0x99,0x3F,0xB2,0x03,0x6B,0x4D,0xE8,0x82,0x32,0x4A,0x32,0x6C,0xEA,0xCA,0xEA,0x03,0x60,0x96,0x32,0xCC,0xEA,0x07,0x2A,0x80,0x6A,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x4C,0xED,0x38,0xB2,0x4D,0xE8,0x02,0x6A,0xAC,0xEA,0x08,0x2A,0x37,0xB2,0x4C,0xE8,0x37,0xB2,0x4C,0xE8,0x37,0xB2,0x4C,0xE8,0x37,0xB2,0x4C,0xE8,0x29,0xB3,0x03,0x69,0x40,0x9B,0x42,0x32,0x4A,0x32,0x2C,0xEA,0x01,0x72,0x04,0x61,0x31,0xB2,0x4C,0xE8,0x2E,0xB2,0x4C,0xE8,0x31,0xB2,0x88,0x67,0x06,0xD5,0x07,0xD4,0xFA,0x6D,0x04,0x6C,0xA1,0xF4,0x0C,0x6E,0xA1,0xF1,0x19,0x6F,0x04,0xD1,0x05,0xD2,0x20,0x18,0x1B,0x32,0x08,0xD0,0x0A,0x92,0x12,0x22,0x29,0xB3,0x50,0x67,0x6C,0xEA,0x6E,0xEA,0x0B,0x2A,0x18,0xB3,0x40,0x9B,0x42,0x32,0x4A,0x32,0x2C,0xEA,0x01,0x72,0x04,0x61,0x1C,0xB2,0x4D,0xE8,0x1C,0xB2,0x4D,0xE8,0x17,0xB2,0x00,0xDA,0x21,0xB2,0x01,0x6C,0xA0,0x9A,0xBE,0x32,0x8C,0xEA,0x17,0x22,0x40,0xF5,0x02,0x32,0x8C,0xEA,0x07,0x22,0x1D,0xB2,0x00,0x6B,0x80,0xC2,0x1D,0xB2,0x60,0xC2,0x1D,0xB2,0x60,0xC2,0xA2,0x32,0x8C,0xEA,0x05,0x22,0x00,0x18,0xA5,0x23,0x00,0x65,0x18,0xB3,0x40,0xC3,0x16,0xB2,0x00,0x18,0x04,0x24,0x80,0xA2,0x0E,0x97,0x0D,0x91,0x0C,0x90,0x00,0xEF,0x08,0x63,0x6C,0x1D,0x11,0x80,0x30,0x60,0x00,0xB0,0x34,0x60,0x00,0xB0,0x44,0xA0,0x00,0xB0,0x50,0x60,0x00,0xB0,0x40,0xA0,0x00,0xB0,0x00,
+0x00,0x80,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x10,0x00,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xBF,0xFF,0xF0,0xA5,0x10,0x80,0x00,0x00,0xC0,0x00,0x54,0x45,0x11,0x80,0x17,0x00,0x11,0x80,0x16,0x00,0x11,0x80,0x18,0x00,0x11,0x80,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x34,0xB2,0x00,0x6E,0x01,0x6B,0x20,0x6C,0xFF,0xF7,0x1F,0x6D,0x0A,0x65,0xE6,0x67,0x06,0x67,0x4B,0x65,0x2C,0x65,0x6D,0x65,0x2D,0xB1,0xC8,0x32,0x15,0xE1,0x10,0x27,0x68,0x67,0x69,0xE2,0x80,0x9A,0x6A,0x67,0x64,0xEF,0x86,0xEF,0x80,0xDD,0x41,0x9A,0xFF,0x4B,0x29,0x67,0x6C,0xEA,0xEF,0xE1,0x44,0xEB,0x4D,0xEC,0x80,0xDD,0x04,0x10,0x68,0x67,0x69,0xE2,0x40,0x9A,0x40,0xDD,0x01,0x4E,0xFF,0x69,0x2C,0xEE,0x10,0x76,0x11,0x61,0x88,0x67,0x1E,0xB5,0x01,0x4F,0x60,0x9C,0x2C,0xEF,0x4A,0x67,0x44,0xEF,0x11,0xE5,0xFF,0x4A,0xA9,0x67,0x4C,0xEB,0xEB,0xE5,0x64,0xEA,0x40,0x9C,0x00,0x6E,0x6D,0xEA,0x40,0xDC,0x04,0x48,0x4B,0x67,0x4C,0xE8,0x00,0xF4,0x01,0x58,0xCC,0x61,0x13,0xB4,0xFF,0x6E,0x55,0x6D,0x00,0xF4,0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x0F,0xB4,0xFF,0x6E,0x00,0x6D,0x00,0xF5,0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x0B,0xB4,0xFF,0x6E,0xB1,0x67,0x00,0xF6,0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x07,0xB4,0xFF,0x6E,0x0F,0x6D,0x00,0xF7,0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0xEF,0x04,0x63,0x00,0x00,0x00,0xF8,0x10,0x80,0xDC,0xF4,0x04,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x11,0xB2,0x00,0x68,0xEE,0x6C,0x00,0xDA,0x10,0xB2,0x07,0x6D,0x00,0xDA,0x00,0x18,0x9A,0x33,0x00,0x65,0x0E,0xB4,0x4A,0xF5,0x16,0x6B,0x6B,0xEB,0xFF,0xF7,0x1F,0x6A,0x01,0x48,0x4C,0xE8,0x00,0xF4,0x00,0x58,0x60,0xCC,0xFA,0x61,0x07,0xB2,0x03,0x6B,0x05,0x97,0x60,0xDA,0x04,0x90,0x03,0xB2,0x01,0x6B,0x60,0xDA,0x00,0xEF,0x03,0x63,0x00,0x00,0x10,0xA3,0x00,0xB0,0x20,0xA3,0x00,0xB0,0xF0,0x00,0x00,0xB6,0xFD,0x63,0x04,0x62,0x17,0xB3,0x16,0xB2,0x80,0x18,0x3F,0x2A,0x60,0xDA,0x16,0xB3,0x16,0xB2,0x21,0xB4,0x04,0x97,0x52,0xDB,0x15,0xB2,0x55,0xDB,0x15,0xB2,0x49,0xDB,0x15,0xB2,0x4C,0xDB,0x15,0xB2,0x4F,0xDB,0x15,0xB2,0x46,0xDB,0x15,0xB2,0x5B,0xDB,
+0x15,0xB2,0x40,0xDB,0x15,0xB2,0x58,0xDB,0x16,0xB3,0x15,0xB2,0x60,0xDA,0xC0,0xF0,0x50,0x9C,0x40,0x6B,0x6D,0xEA,0xC0,0xF0,0x50,0xDC,0x14,0xB3,0x49,0x9C,0x6D,0xEA,0x13,0xB3,0x6D,0xEA,0x49,0xDC,0x00,0xEF,0x03,0x63,0x00,0x00,0xCC,0x2C,0x11,0x80,0xE9,0xAE,0x10,0x80,0xB8,0x95,0x11,0x80,0x29,0xD8,0x10,0x80,0x99,0xB0,0x10,0x80,0x2D,0xB1,0x10,0x80,0xA1,0xB1,0x10,0x80,0x79,0xD4,0x10,0x80,0xE5,0xD4,0x10,0x80,0x19,0xC9,0x10,0x80,0xF1,0xD3,0x10,0x80,0x6D,0xCA,0x10,0x80,0x3C,0x1C,0x11,0x80,0xA5,0xA2,0x10,0x80,0xDC,0x00,0x11,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x80,0x00,0x44,0xA4,0x63,0xA4,0x00,0x6E,0x40,0x32,0x69,0xE2,0xFF,0xF7,0x1F,0x6B,0x6C,0xEA,0x7F,0xF4,0x0F,0x72,0x60,0xA5,0x46,0x67,0x08,0x61,0x69,0xE4,0xC2,0xC2,0x01,0x4B,0xFF,0x6A,0x4C,0xEB,0x61,0xC4,0x01,0x6A,0x60,0xC5,0x20,0xE8,0x00,0x65,0x00,0x00,0xF9,0x63,0x0C,0x62,0x0B,0xD1,0x0A,0xD0,0xFF,0x69,0x2C,0xEC,0x08,0xD4,0x61,0xF3,0x06,0x6D,0x00,0x18,0x9A,0x33,0x22,0x6C,0x40,0xB0,0xF3,0x6A,0x24,0x6C,0x20,0xF0,0xBF,0xA0,0x2C,0xED,0xA0,0x35,0x00,0x18,0x9A,0x33,0x4D,0xED,0x40,0xF0,0x41,0xA0,0x40,0xF0,0xA0,0xA0,0x26,0x6C,0x2C,0xEA,0x40,0x32,0x2C,0xED,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x9A,0x33,0x4C,0xED,0xEB,0xF0,0x12,0x6D,0x00,0x18,0x9A,0x33,0x28,0x6C,0x93,0xF7,0x1A,0x6D,0x00,0x18,0x9A,0x33,0x2A,0x6C,0x00,0x18,0xEE,0x33,0x01,0x6C,0x02,0x6C,0x00,0x18,0x9A,0x33,0x20,0x6D,0x2D,0xB2,0x03,0xF4,0x00,0x6D,0x20,0x68,0x81,0xA2,0x00,0x18,0x9A,0x33,0x2C,0xEC,0x2A,0xB2,0xFF,0xF7,0x1F,0x6B,0xFF,0xF7,0x1F,0x6D,0x40,0xAA,0x5E,0x6C,0x4C,0xEB,0x9F,0xF7,0x1F,0x6A,0x4C,0xEB,0x0D,0xEB,0x00,0x18,0x9A,0x33,0x6C,0xED,0xFF,0x6C,0x09,0x4C,0x00,0x18,0x9A,0x33,0x03,0x6D,0x21,0xB2,0xFF,0xF7,0x1F,0x6B,0xFF,0x6D,0x81,0xA2,0x1F,0xB2,0x21,0x4D,0x2C,0xEC,0x49,0xE4,0x40,0xAA,0x4C,0xEB,0xEE,0xF1,0x09,0x6A,0x4C,0xEB,0x6D,0xED,0xFF,0xF7,0x1F,0x6A,0x4C,0xED,0x1A,0xB2,0x07,0x6B,0x40,0xA2,0x2C,0xEA,0x6C,0xEA,0x40,0x32,0x44,0x32,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x9A,0x33,0x4C,0xED,0x02,0x6C,0x00,0x18,0x9A,0x33,0xB0,0x67,0x00,0x6C,0x00,0x18,0x9A,0x33,0x0D,0x6D,0x08,0x92,0x0C,0x22,0x9D,0x67,0x10,
+0x4C,0x55,0x6D,0x00,0x18,0x64,0x2E,0x0A,0x6E,0xDD,0x67,0x01,0x6C,0x00,0x6D,0x00,0x18,0xDC,0x34,0x10,0x4E,0x0C,0x97,0x0B,0x91,0x0A,0x90,0x00,0xEF,0x07,0x63,0x00,0x00,0xDC,0x00,0x11,0x80,0x38,0xF4,0x04,0x80,0x5E,0x00,0x00,0xB6,0x30,0xF4,0x04,0x80,0x00,0x00,0x00,0xB6,0x81,0x08,0x11,0x80,0xF6,0x63,0x12,0x62,0x11,0xD1,0x10,0xD0,0x14,0xD4,0x16,0xD6,0x60,0xAC,0x7F,0xF4,0x0A,0x73,0x80,0xF0,0x04,0x60,0x7F,0xF4,0x0A,0x6A,0x62,0xEA,0x13,0x61,0x7F,0xF4,0x07,0x6A,0x62,0xEA,0x08,0x61,0x7F,0xF4,0x06,0x6A,0x42,0xEB,0x23,0x60,0x3F,0xF4,0x00,0x73,0x38,0x60,0x33,0x11,0x7F,0xF4,0x08,0x73,0x47,0x60,0x7F,0xF4,0x09,0x73,0x4A,0x60,0x2C,0x11,0x5F,0xF5,0x00,0x73,0x73,0x60,0x5F,0xF5,0x00,0x6A,0x62,0xEA,0x06,0x61,0x7F,0xF4,0x0F,0x73,0x0B,0x60,0x7F,0xF4,0x10,0x73,0x06,0x10,0x5F,0xF5,0x03,0x73,0x00,0xF1,0x0D,0x60,0x5F,0xF5,0x05,0x73,0x27,0x60,0x17,0x11,0x16,0x92,0x00,0x6B,0x21,0x10,0x7F,0xF4,0x06,0x73,0x03,0x61,0x8C,0xB2,0x00,0x6B,0x60,0xDA,0x8B,0xB2,0x0F,0x6B,0x40,0x9A,0x46,0x32,0x6C,0xEA,0x03,0x72,0x04,0x61,0x89,0xB2,0x60,0x9A,0x89,0xB2,0x60,0xDA,0x8A,0xB3,0x88,0xB2,0x60,0xDA,0x8A,0xB3,0x89,0xB2,0x60,0xDA,0xFF,0x17,0x81,0xB2,0x89,0xB3,0x40,0x9A,0x6E,0xEA,0xE0,0xF0,0x16,0x2A,0x14,0x94,0x87,0xB2,0x63,0xA4,0x60,0xC2,0xE9,0x10,0x14,0x92,0x83,0xA2,0x01,0x24,0x01,0x6C,0x80,0x18,0x88,0x2A,0x00,0x65,0xE1,0x10,0x14,0x94,0x81,0xB2,0x63,0xA4,0x80,0xF1,0x61,0xC2,0xDB,0x10,0x14,0x93,0x7F,0xB1,0xFF,0xF7,0x1F,0x6C,0x43,0xA3,0x44,0x33,0x4D,0xE3,0x6C,0x33,0x4D,0xE3,0x40,0x99,0x68,0x30,0x8C,0xE8,0x4F,0xEA,0x03,0x22,0x00,0x18,0xFD,0x1D,0x91,0x67,0x0F,0x20,0x00,0x18,0x40,0xA4,0x00,0x65,0x76,0xB6,0x00,0x6A,0x01,0x6C,0xB1,0x67,0xE2,0x67,0x00,0x18,0xF3,0x1D,0x04,0xD2,0x80,0x99,0x00,0x18,0x0C,0x1E,0xB0,0x67,0x71,0xB2,0x00,0xCA,0xB7,0x10,0x14,0x93,0x00,0x6E,0x43,0xA3,0x01,0x22,0x01,0x6E,0x6A,0xB2,0x80,0xF1,0xD1,0xC2,0xAE,0x10,0x14,0x94,0x14,0x93,0x61,0xF3,0x06,0x6D,0x85,0xA4,0x0E,0xD4,0x48,0xA3,0x27,0xA3,0xFF,0xF7,0x1F,0x6C,0x40,0x32,0x4D,0xE9,0x00,0x6A,0x45,0xC3,0x4A,0xC3,0x8C,0xE9,0x00,0x18,0x9A,0x33,0x22,0x6C,0x5F,0xB0,0xF3,0x6A,0xFF,0xF7,0x1F,0x6B,
+0x20,0xF0,0xBF,0xA0,0x24,0x6C,0xA0,0x35,0x4D,0xED,0x00,0x18,0x9A,0x33,0x6C,0xED,0x40,0xF0,0x41,0xA0,0x40,0xF0,0xA0,0xA0,0x26,0x6C,0x40,0x32,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x9A,0x33,0x4C,0xED,0xEB,0xF0,0x12,0x6D,0x00,0x18,0x9A,0x33,0x28,0x6C,0x93,0xF7,0x1A,0x6D,0x00,0x18,0x9A,0x33,0x2A,0x6C,0x00,0x18,0xEE,0x33,0x01,0x6C,0x7D,0x21,0xFF,0xF7,0x1F,0x6B,0x51,0x67,0x6C,0xE9,0x00,0xF4,0x01,0x59,0x02,0x61,0x00,0xF4,0x00,0x6A,0xFF,0xF7,0x1F,0x69,0x4C,0xE9,0x0E,0x92,0xFF,0x6C,0xFF,0x4A,0x8C,0xEA,0x04,0x5A,0x28,0x61,0x47,0xB0,0x00,0x6A,0x7D,0x67,0x06,0xD2,0x0C,0xCB,0xE0,0xF7,0x1F,0x6A,0x4C,0xE9,0x44,0xB3,0x06,0x92,0x80,0xF4,0x20,0x34,0x01,0x6D,0x6C,0xEA,0x8D,0xEA,0x06,0xD2,0x00,0x6C,0x40,0xB2,0x04,0xD4,0x05,0xD4,0x9D,0x67,0x18,0x4C,0xC5,0x67,0x00,0x6F,0x07,0xD2,0x3F,0x10,0xE0,0xF7,0x1F,0x6A,0x8C,0xEA,0x88,0x67,0x80,0xF4,0x40,0x32,0x8C,0xEB,0x4D,0xEB,0x38,0xB2,0xFF,0x6D,0xEC,0xED,0x60,0xDE,0x41,0xDE,0x2B,0x10,0x0E,0x92,0x00,0x6D,0x91,0x67,0x40,0x33,0x34,0xB2,0x25,0x67,0x41,0xE3,0x7D,0x67,0x18,0x4B,0x2F,0xB2,0x8B,0x65,0x31,0xB3,0x0A,0x65,0xFF,0xF7,0x1F,0x6A,0x6B,0x65,0xFF,0x6B,0x4A,0x65,0x2B,0x65,0x6C,0x67,0xAC,0x32,0x79,0xE2,0x20,0xDE,0x00,0xF1,0x01,0x5C,0x00,0xCE,0x21,0xDE,0x60,0x9E,0xE1,0x45,0xD4,0x61,0x48,0x67,0x6C,0xEA,0xA9,0x67,0x6B,0x67,0x6D,0xEA,0x80,0x4C,0xEC,0xED,0x40,0xDE,0x80,0x4C,0x4A,0x67,0x04,0x5D,0x4C,0xEC,0xE8,0x61,0x00,0x6F,0x9D,0x67,0x04,0xD7,0x05,0xD7,0x18,0x4C,0x01,0x6E,0x00,0x18,0xF7,0x33,0x00,0x65,0x0E,0x10,0x02,0x6C,0x01,0x6D,0x00,0x18,0x1C,0x80,0x00,0x6E,0x08,0x10,0x14,0x93,0x16,0x92,0x80,0xAB,0x00,0x18,0xFA,0x8B,0xA0,0xA2,0x01,0x6A,0x01,0x10,0x00,0x6A,0x12,0x97,0x11,0x91,0x10,0x90,0x00,0xEF,0x0A,0x63,0x38,0x91,0x10,0x80,0x6C,0x1D,0x11,0x80,0x2C,0x00,0x00,0xB5,0x48,0x91,0x10,0x80,0x44,0x91,0x10,0x80,0x32,0x97,0x79,0x23,0x78,0xA0,0x00,0xB0,0x01,0x00,0xA5,0x01,0xAE,0x23,0x87,0x54,0xD0,0x00,0x11,0x80,0xDC,0x00,0x11,0x80,0x88,0x07,0x11,0x80,0x01,0x91,0x02,0x80,0x08,0xA1,0x11,0x80,0x00,0xF8,0x10,0x80,0xFF,0xFF,0x03,0xE0,0x00,0x00,0x00,0x80,0x00,0xFB,0x10,0x80,0x00,0x00,0x00,0x04,0x03,
+0xB2,0x00,0x6B,0x60,0xDA,0x20,0xE8,0x00,0x65,0x00,0x00,0x04,0x60,0x00,0xB0,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x40,0xAC,0x01,0xF4,0x03,0x72,0x2C,0x61,0x80,0x18,0x3F,0x2A,0x00,0x69,0x80,0x18,0x91,0x2B,0x00,0x65,0x16,0xB2,0x08,0xF1,0x11,0x6B,0x6B,0xEB,0x60,0xCA,0x15,0xB2,0x91,0x67,0x20,0xDA,0x14,0xB2,0x20,0x18,0x83,0x39,0x20,0xDA,0x14,0xB2,0x15,0xB0,0xB1,0x67,0x80,0xF1,0x62,0xA2,0x90,0x67,0x30,0x6E,0x68,0x32,0x69,0xE2,0x0F,0xB3,0x44,0x32,0x00,0x18,0x64,0x2E,0x40,0xCB,0x01,0x6A,0x4B,0xEA,0x47,0xD8,0x0E,0xB3,0x40,0x98,0x0E,0xB4,0xB1,0x67,0x6D,0xEA,0x40,0xD8,0x00,0x18,0x64,0x2E,0x0C,0x6E,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0x6A,0x00,0xEF,0x04,0x63,0x0C,0xA1,0x11,0x80,0x10,0xA1,0x11,0x80,0x14,0xA1,0x11,0x80,0x08,0xA1,0x11,0x80,0xDC,0x00,0x11,0x80,0xCC,0xA0,0x11,0x80,0x00,0x00,0x00,0x70,0xFC,0xA0,0x11,0x80,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0xFF,0xF7,0x1F,0x6A,0xCC,0xEA,0x02,0x74,0x0C,0x65,0x05,0x67,0x4F,0x65,0x2A,0x65,0x0D,0x61,0x2A,0xB2,0x03,0x6B,0x40,0x9A,0x42,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,0x05,0x61,0x27,0xB3,0x40,0x9B,0xC0,0xF7,0x42,0x32,0xFC,0x2A,0x48,0x67,0x04,0x72,0x38,0x61,0x60,0xA0,0xFF,0x6E,0x46,0x67,0x6C,0xEA,0x10,0x72,0x0B,0x61,0x42,0xA0,0xCC,0xEA,0x02,0x72,0x07,0x61,0x1F,0xB2,0xB0,0x67,0x00,0x18,0xE0,0x1D,0x81,0x9A,0x00,0x6A,0x2D,0x10,0xFF,0x6A,0x6C,0xEA,0x02,0x72,0x01,0x6C,0x04,0x60,0x22,0x72,0x02,0x60,0x2F,0x72,0x1E,0x61,0xFF,0x6E,0x46,0x67,0x6C,0xEA,0x2F,0x72,0x01,0x6A,0x02,0x60,0x42,0xA0,0xCC,0xEA,0xFF,0x6D,0x6F,0x42,0xAC,0xEB,0xAA,0xEB,0x11,0x60,0xE5,0x67,0x01,0x69,0x06,0x4C,0xAC,0xEC,0x99,0xE0,0x42,0xA6,0xAC,0xEA,0x03,0x5A,0x01,0x61,0x22,0xC6,0xFF,0x4B,0xEC,0xEB,0xFF,0x6D,0x08,0x4C,0xAA,0xEB,0xEC,0xEC,0xF1,0x61,0x88,0x67,0xB0,0x67,0xC9,0x67,0x00,0x18,0xCA,0x1E,0xEA,0x67,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0xEF,0x04,0x63,0x6C,0x1D,0x11,0x80,0x1C,0xA3,0x00,0xB0,0x9C,0x31,0x11,0x80,0x20,0xE8,0x00,0x65,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0xFF,0xF7,0x1F,0x69,0x8C,0xE9,0x24,0x32,0x29,0xE2,0x4C,0x32,0x2B,0xE2,0x4C,0x32,0x18,0xB3,0x2B,0xE2,0x48,0x32,0x61,0xE2,0x5C,0x98,0x4F,0xEA,
+0x05,0x22,0x01,0x6A,0x00,0x6B,0x20,0xF2,0x5E,0xC0,0x1E,0x10,0x00,0x18,0x41,0x5E,0x91,0x67,0x04,0xD2,0x0C,0x6B,0x18,0x2A,0x5F,0x98,0x41,0xA2,0x44,0x72,0x14,0x60,0x00,0x18,0xA5,0x5E,0x91,0x67,0x06,0x22,0x00,0x18,0x69,0x5E,0x91,0x67,0x1F,0x6B,0x0B,0x22,0x05,0x10,0x00,0x18,0x80,0x49,0x91,0x67,0x62,0x67,0x05,0x10,0x91,0x67,0x20,0x18,0x13,0x26,0x0E,0x6D,0x04,0x93,0x08,0x97,0x07,0x91,0x06,0x90,0x43,0x67,0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x03,0x44,0x90,0x67,0x00,0x18,0xF2,0x5A,0x0B,0xD5,0x22,0x67,0x1A,0x65,0x1E,0x2A,0xBD,0x67,0x90,0x67,0x00,0x18,0x07,0xDF,0x10,0x4D,0x7D,0x67,0x48,0xAB,0x0B,0x93,0xFF,0xF7,0x1F,0x6D,0x40,0xCB,0x65,0x67,0x4C,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x09,0xB3,0x48,0x32,0x69,0xE2,0x20,0xF2,0x3E,0xC2,0x5D,0x67,0x88,0xAA,0x80,0x18,0xEE,0x2B,0xAC,0xEC,0x1A,0x65,0x08,0x97,0x07,0x91,0x06,0x90,0x58,0x67,0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,0x20,0xB0,0x00,0x6A,0x04,0xD2,0x40,0x98,0x01,0x69,0xC0,0xF6,0x42,0x32,0x2C,0xEA,0x09,0x22,0x00,0x18,0x4F,0x9A,0x06,0xD4,0x04,0xD1,0x40,0x98,0x1A,0xB3,0x6C,0xEA,0x40,0xD8,0x06,0x94,0x44,0xAC,0xFF,0xF7,0x1F,0x6B,0x06,0x72,0x19,0x61,0x40,0x9C,0x17,0x2A,0x45,0xAC,0x6C,0xEA,0x17,0x2A,0x41,0x9C,0x82,0x67,0x42,0x32,0x42,0x32,0x6C,0xEA,0x01,0xF0,0x0B,0x72,0x6C,0xEC,0x04,0x61,0x80,0x18,0xEE,0x2B,0x00,0x65,0x0A,0x10,0x01,0xF0,0x05,0x72,0x07,0x61,0x00,0x18,0x2C,0x48,0x00,0x65,0x03,0x10,0x00,0x18,0x74,0x56,0x00,0x65,0x04,0x92,0x05,0x22,0x06,0xB2,0x07,0xB4,0x60,0x9A,0x8D,0xEB,0x60,0xDA,0x0A,0x97,0x09,0x91,0x08,0x90,0x00,0xEF,0x06,0x63,0x00,0x00,0x54,0x45,0x11,0x80,0xFF,0xFF,0xFF,0xF7,0x00,0x00,0x00,0x08,0xF9,0x63,0x0C,0x62,0x44,0xAC,0x07,0x72,0x11,0x61,0x60,0x9C,0xFF,0x6D,0x40,0xA3,0x03,0x72,0x26,0x61,0x42,0xA3,0xAC,0xEA,0x23,0x2A,0x43,0xA3,0x64,0xA3,0xAC,0xEA,0xAC,0xEB,0x60,0x33,0x6D,0xEA,0x12,0xB3,0x40,0xCB,0x1A,0x10,0x08,0x72,0x18,0x61,0x40,0x9C,0x66,0x6B,0x9D,0x67,0x06,0xD2,0x0E,0xB2,0x70,0xCC,0xFD,0x67,0x80,0x9A,0x00,0x6D,0x04,0x06,0x24,0x4F,0xA9,
+0xE7,0x40,0xA2,0xAD,0xE6,0x01,0x4D,0x08,0x5D,0x40,0xC3,0xF9,0x61,0x06,0x95,0x07,0x96,0x00,0x18,0x40,0x1E,0x08,0x97,0x03,0x10,0x00,0x18,0x64,0x8B,0x00,0x65,0x0C,0x97,0x00,0xEF,0x07,0x63,0x0C,0xA1,0x11,0x80,0x84,0x21,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x44,0xAC,0x24,0x67,0x66,0x72,0x34,0x61,0x00,0x9C,0xE1,0xF7,0x1F,0x6A,0xBD,0x67,0x80,0x98,0x10,0x4D,0x4C,0xEC,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x2A,0xDF,0x4C,0xEC,0x82,0x67,0x29,0x2A,0x5D,0x67,0x68,0xAA,0xFF,0xF7,0x1F,0x6A,0x4C,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x12,0xB3,0x48,0x32,0x69,0xE2,0x20,0xF0,0x78,0xA2,0x03,0x73,0x14,0x60,0xE0,0xF7,0x08,0x6A,0x47,0xEB,0x01,0x6B,0x6C,0xEA,0x0E,0x22,0x0C,0xB3,0x00,0xF4,0x84,0xD8,0x40,0x9B,0x02,0x2A,0x00,0xDB,0x04,0x10,0x0A,0xB2,0x40,0x9A,0x00,0xF4,0x04,0xDA,0x08,0xB2,0x00,0xDA,0x03,0x10,0x00,0x18,0x18,0x58,0x91,0x67,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0x10,0xA1,0x11,0x80,0x14,0xA1,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x0B,0xB0,0xE3,0xF7,0x1F,0x6B,0x7C,0x6C,0x40,0x98,0x01,0x6D,0x56,0x32,0x6C,0xEA,0x69,0x98,0x58,0xEB,0x12,0xEA,0x00,0x18,0xEB,0x9F,0x4A,0xD8,0x6B,0x98,0x05,0x97,0x4D,0xE3,0x6B,0xD8,0x04,0x90,0x00,0xEF,0x03,0x63,0xCC,0xA0,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,0x3B,0xB0,0xBD,0x67,0x10,0x4D,0x90,0xA0,0x4F,0xA0,0x80,0x34,0x4D,0xEC,0x4E,0xA0,0x80,0x34,0x00,0x18,0x3A,0xBA,0x4D,0xEC,0x7D,0x67,0x48,0xAB,0x8F,0xA0,0xFD,0x67,0x4C,0xCB,0x49,0xAB,0x4D,0xCB,0x6A,0xAB,0x03,0x6A,0x4C,0xEB,0x4E,0xA0,0x48,0x32,0x4D,0xEB,0x80,0x32,0x48,0x32,0x4D,0xEB,0x50,0xA0,0x6E,0xCF,0x70,0x80,0x48,0x32,0x9A,0x34,0x4D,0xEC,0x00,0x53,0x8F,0xCF,0x05,0x60,0x09,0xF4,0x00,0x6A,0x8D,0xEA,0x4F,0xCF,0x06,0x10,0x0A,0xF0,0x00,0x6A,0x4B,0xEA,0x8D,0xEA,0x7D,0x67,0x4F,0xCB,0x9D,0x67,0x10,0x4C,0xFF,0xF7,0x1F,0x6F,0x0F,0x6A,0x00,0x6E,0x2C,0x65,0x0F,0x65,0x01,0x69,0x4A,0x65,0x89,0x67,0xC4,0x30,0x89,0xE0,0x84,0xAA,0x00,0x6D,0xE8,0x67,0x65,0x67,0xEC,0xEC,0x44,0x67,0x47,0xEB,0x2C,0xEA,0x07,0x22,0xEA,0x67,0x6B,0xE7,0xF1,0x67,0xE4,0xEA,0xED,0xED,0x48,0x67,0x4C,0xED,
+0x01,0x4B,0xFF,0x6F,0xEC,0xEB,0x10,0x5B,0xF0,0x61,0x01,0x4E,0x69,0x67,0xEC,0xEE,0x69,0xE0,0x04,0x5E,0xA4,0xCA,0xE1,0x61,0xFD,0x67,0xCC,0xAF,0x51,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x5D,0x67,0xCD,0xAA,0x50,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x7D,0x67,0xCE,0xAB,0x4F,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0xFD,0x67,0xCF,0xAF,0x4E,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x0A,0x97,0x09,0x91,0x08,0x90,0x00,0xEF,0x06,0x63,0xCC,0xA0,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6B,0x04,0xD3,0x6C,0xEA,0xFF,0x6B,0x02,0x4B,0x6B,0xEB,0x6C,0xEA,0xFF,0x6B,0x01,0x4B,0xC2,0x67,0x6D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x51,0xB1,0x52,0xB3,0x07,0x68,0x41,0x99,0x51,0xB4,0x01,0x6D,0x4E,0x32,0x0C,0xEA,0x69,0xE2,0x60,0xA2,0x40,0x99,0x0C,0xEB,0x40,0xF6,0x60,0x33,0x8C,0xEA,0x6D,0xEA,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x40,0xD9,0x04,0x93,0x57,0x6C,0x01,0x6D,0x4C,0xEB,0x71,0x6A,0x04,0xD3,0x4B,0xEA,0x4C,0xEB,0x40,0x99,0xC3,0x67,0x40,0xF6,0x42,0x32,0x0C,0xEA,0x50,0x32,0x00,0x18,0x01,0xA0,0x4D,0xEE,0x40,0x99,0x01,0x6B,0x03,0x67,0x6C,0xEA,0x06,0x22,0x41,0x99,0x80,0x6B,0x6C,0xEA,0x01,0x5A,0x18,0x67,0x02,0x48,0x56,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x00,0x36,0x37,0xB0,0xFF,0xF7,0x1F,0x69,0x1C,0xF0,0x00,0x6B,0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0x60,0x98,0xE3,0xF7,0x1F,0x6C,0xD8,0x36,0x76,0x33,0x8C,0xEB,0x6D,0xEE,0xFB,0xF7,0x1F,0x6B,0x6C,0xEE,0x4D,0xEE,0x56,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x47,0xA0,0xC6,0xA0,0x58,0x6C,0x40,0x32,0x4D,0xEE,0x00,0x18,0x01,0xA0,0x01,0x6D,0x59,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xC8,0xA0,0x04,0x6B,0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0x03,0x6B,0x6C,0xEE,0x4D,0xEE,0x59,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x80,0x18,0x9A,0x2C,0x00,0x65,0x40,0x98,0xC0,0xF7,0x42,0x32,0x24,0x22,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x81,0x6B,0x2C,0xEA,0x6B,0xEB,0x6C,0xEA,0xC2,0x67,0x80,0x6B,0x6D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x59,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x4C,0xE9,0xE0,0xF1,0x1D,0x6A,0x4B,0xEA,0x4C,0xE9,0x45,0xA0,0xFF,0x6B,0xD1,0x67,0x6C,0xEA,0x48,0x32,0xE0,
+0xF1,0x1C,0x6B,0x6C,0xEA,0x59,0x6C,0x01,0x6D,0x4D,0xEE,0x0B,0x10,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x4C,0xE9,0x81,0x6A,0x4B,0xEA,0xD1,0x67,0x57,0x6C,0x01,0x6D,0x4C,0xEE,0x00,0x18,0x01,0xA0,0x00,0x65,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0xCC,0xA0,0x11,0x80,0xD8,0xDF,0x10,0x80,0xFF,0xFF,0xFF,0xF1,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x0F,0xB1,0xFF,0x68,0x8C,0xE8,0x47,0x99,0x4F,0xEA,0x04,0x22,0x87,0x41,0x00,0x18,0xFD,0x1D,0x15,0x4C,0x0E,0x20,0x0B,0xB6,0x00,0x68,0xA7,0x41,0x01,0x6C,0x15,0x4D,0xF0,0x67,0x00,0x18,0xF3,0x1D,0x04,0xD0,0x87,0x99,0x00,0x18,0x0C,0x1E,0x14,0x6D,0x10,0xC9,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0xCC,0xA0,0x11,0x80,0xF9,0xB5,0x10,0x80,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x00,0x6C,0x02,0xF0,0x00,0x6E,0x00,0x18,0x01,0xA0,0xA4,0x67,0x2D,0xB2,0x3C,0x6C,0x00,0x6D,0xC0,0x9A,0x7F,0x6A,0xFF,0xF7,0x1F,0x68,0x80,0xF4,0xC2,0x36,0x4C,0xEE,0xC4,0x36,0xFF,0x6A,0x01,0x4E,0x4C,0xEE,0x00,0x18,0x01,0xA0,0xC0,0x36,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xEA,0x01,0xF6,0x01,0x69,0x2B,0xE9,0xC2,0x67,0x2C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xEA,0x2C,0xEA,0x01,0xF6,0x00,0x6B,0xC2,0x67,0x6D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xEA,0x03,0x69,0x2B,0xE9,0xC2,0x67,0x2C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xEA,0x2C,0xEA,0x02,0x6B,0xC2,0x67,0x6D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x4C,0xE8,0xD0,0x67,0x2C,0xEE,0x01,0x6D,0x00,0x18,0x01,0xA0,0x57,0x6C,0x80,0x18,0x38,0x2D,0x01,0x6C,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0xEF,0x04,0x63,0xCC,0xA0,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x1A,0xB2,0x06,0xD4,0x47,0x9A,0x8E,0xEA,0x05,0x22,0x8F,0xEA,0x03,0x22,0x00,0x18,0xFD,0x1D,0x06,0x04,0x15,0xB0,0x42,0x6B,0x41,0x98,0x6C,0xEA,0x6A,0xEA,0x08,0x60,0x47,0x98,0x4F,0xEA,0x1C,0x22,0x87,0x40,0x00,0x18,0xFD,0x1D,0x15,0x4C,0x17,0x10,0x7D,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x02,0x6E,
+0x4C,0xEE,0x04,0x26,0x50,0xA8,0x01,0x4A,0x50,0xC8,0x0C,0x10,0x86,0x67,0x00,0x18,0x01,0xA0,0xA6,0x67,0x49,0x98,0x01,0x4A,0x80,0x18,0x8D,0x2C,0x49,0xD8,0x80,0x18,0x4B,0x2D,0x00,0x65,0x05,0x97,0x04,0x90,0x00,0xEF,0x03,0x63,0xCC,0xA0,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x00,0x6C,0xC4,0x67,0x00,0x18,0x01,0xA0,0xA4,0x67,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0xFF,0x6A,0x04,0x4A,0x4B,0xEA,0x4C,0xEE,0x01,0x6D,0x00,0x18,0x01,0xA0,0x57,0x6C,0x0A,0xB0,0x41,0x6B,0x6B,0xEB,0x41,0x98,0x00,0x6C,0x6C,0xEA,0x80,0x18,0x38,0x2D,0x41,0xD8,0x80,0x18,0x8D,0x2C,0x00,0x65,0x00,0x6A,0x49,0xC0,0x05,0x97,0x04,0x90,0x00,0xEF,0x03,0x63,0x00,0x00,0xCC,0xA0,0x11,0x80,0xFD,0x63,0x04,0x62,0x80,0x18,0xD8,0x2C,0x00,0x65,0x0D,0xB3,0x00,0x6A,0x59,0x6C,0x4B,0xDB,0x49,0xDB,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x00,0xF2,0x01,0x6A,0x4B,0xEA,0x59,0x6C,0x01,0x6D,0x00,0x18,0x01,0xA0,0x4C,0xEE,0x80,0x18,0x4B,0x2D,0x00,0x65,0x04,0x97,0x00,0xEF,0x03,0x63,0xCC,0xA0,0x11,0x80,0xFD,0x63,0x04,0x62,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x02,0xF1,0x01,0x6A,0x4B,0xEA,0x4C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x00,0x6C,0xA4,0x67,0x00,0x18,0x01,0xA0,0xC4,0x67,0x06,0xB4,0x41,0x6B,0x6B,0xEB,0x41,0x9C,0x04,0x97,0x6C,0xEA,0x41,0xDC,0x00,0x6A,0x49,0xC4,0x00,0xEF,0x03,0x63,0x00,0x00,0xCC,0xA0,0x11,0x80,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x80,0x18,0xD8,0x2C,0x00,0x65,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x69,0x02,0xF0,0x01,0x6B,0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0x02,0xF0,0x00,0x68,0xC2,0x67,0x0D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x59,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x2C,0xEA,0x00,0xF2,0x01,0x6B,0x6B,0xEB,0xC2,0x67,0x6C,0xEE,0x59,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x00,0x6C,0xD0,0x67,0x00,0x18,0x01,0xA0,0xA4,0x67,0x28,0xB2,0x03,0x6C,0x00,0x6D,0x00,0x9A,0x07,0x6A,0x00,0xF7,0x02,0x30,0x00,0x18,0xEB,0x9F,0x4C,0xE8,0x2C,0xEA,0x1F,0xF4,0x01,0x6B,0x6B,0xEB,0x6C,0xEA,0x21,0xB3,0x05,0x48,0x1F,0xF4,0x00,0x6C,0x61,0xE0,0x20,0xF1,0x7A,0xA0,0xC2,
+0x67,0x00,0x6D,0x60,0x33,0x68,0x33,0x8C,0xEB,0x6D,0xEE,0x00,0x18,0x01,0xA0,0x03,0x6C,0x18,0xB3,0x7F,0x6A,0x3C,0x6C,0xC0,0x9B,0x00,0x6D,0x01,0x68,0x80,0xF4,0xC2,0x36,0x4C,0xEE,0xC4,0x36,0xFF,0x6A,0x06,0x4E,0x4C,0xEE,0x00,0x18,0x01,0xA0,0xC0,0x36,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x02,0x6B,0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0xC2,0x67,0x0D,0xEE,0xB0,0x67,0x00,0x18,0x01,0xA0,0x57,0x6C,0xB0,0x67,0x00,0x18,0xEB,0x9F,0x57,0x6C,0x02,0x6E,0x4C,0xE9,0xCB,0xEE,0xB0,0x67,0x2C,0xEE,0x00,0x18,0x01,0xA0,0x57,0x6C,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0xEF,0x04,0x63,0x00,0x00,0xCC,0xA0,0x11,0x80,0xDC,0x00,0x11,0x80,0xFD,0x63,0x04,0x62,0x7F,0xF7,0x0F,0x6D,0x00,0x18,0x5D,0xBA,0x5E,0x6C,0x0E,0xB2,0xFF,0xF6,0x1F,0x6D,0x00,0x18,0x5D,0xBA,0x81,0xA2,0xFF,0x6D,0xD8,0x6C,0x00,0x18,0x9A,0x33,0x08,0x4D,0xFF,0x6C,0x09,0x4C,0x00,0x18,0x9A,0x33,0x00,0x6D,0x07,0xB4,0x41,0x6B,0x6B,0xEB,0x41,0x9C,0x04,0x97,0x6C,0xEA,0x41,0xDC,0x00,0x6A,0x49,0xC4,0x00,0xEF,0x03,0x63,0x30,0xF4,0x04,0x80,0xCC,0xA0,0x11,0x80,0xF7,0x63,0x10,0x62,0x0F,0xD1,0x0E,0xD0,0x72,0xB5,0x73,0xB3,0x07,0x6C,0xC0,0x9D,0xFF,0xF7,0x1F,0x6F,0xC0,0x32,0x58,0x32,0x80,0xF5,0x42,0x31,0x41,0x9D,0x4E,0x32,0x8C,0xEA,0x69,0xE2,0x60,0xA2,0x6D,0xB2,0x8C,0xEB,0x40,0xF6,0x60,0x33,0xCC,0xEA,0x6D,0xEA,0x40,0xF6,0x42,0x33,0x40,0xDD,0xFF,0x6E,0x8C,0xEB,0x61,0x21,0x51,0x67,0xEC,0xE9,0x00,0xF4,0x01,0x59,0x02,0x61,0x00,0xF4,0x00,0x6A,0x27,0x67,0x4C,0xE9,0x4F,0x43,0xCC,0xEA,0x04,0x5A,0x23,0x61,0x61,0xB0,0x00,0x6F,0x5D,0x67,0x06,0xD7,0x0C,0xCA,0x06,0x92,0x5F,0xB3,0x80,0xF4,0x20,0x34,0x01,0x6D,0x6C,0xEA,0x8D,0xEA,0x06,0xD2,0x5D,0xB2,0x9D,0x67,0x18,0x4C,0xC5,0x67,0x07,0xD2,0x04,0xD7,0x05,0xD7,0x3C,0x10,0xE0,0xF7,0x1F,0x6A,0x4C,0xEB,0x49,0x67,0x80,0xF4,0x60,0x33,0xCC,0xEA,0x6D,0xEA,0x40,0xDC,0x54,0xB2,0xFF,0x6D,0xEC,0xED,0x41,0xDC,0x28,0x10,0x53,0xB2,0x60,0x33,0x00,0x6D,0x41,0xE3,0x5D,0x67,0x18,0x4A,0xAA,0x65,0x4D,0xB2,0x71,0x67,0x0D,0x65,0x2A,0x65,0x4E,0xB2,0x6F,0x65,0x4E,0x65,0x8A,0x65,0xAC,0x32,0xCD,0x67,0xD1,0xE2,0x48,0x67,0x40,0xDC,0x00,0xF1,0x01,0x5B,0x00,0xCC,0x41,0xDC,0xC0,0x9C,0xE1,0x45,
+0xD7,0x61,0x49,0x67,0xCC,0xEA,0xAC,0x67,0xAD,0xEA,0xAA,0x67,0x80,0x4B,0xEC,0xED,0x80,0x4B,0xCB,0x67,0x04,0x5D,0x40,0xDC,0xCC,0xEB,0xE7,0x61,0x00,0x6F,0x9D,0x67,0x04,0xD7,0x05,0xD7,0x18,0x4C,0x01,0x6E,0x00,0x18,0xF7,0x33,0x00,0x65,0x34,0xB2,0xC4,0x6C,0xA0,0x9A,0x7F,0x6A,0x80,0xF4,0xA2,0x35,0x4C,0xED,0xA0,0x32,0x00,0x18,0x9A,0x33,0x4D,0xED,0x5E,0x6C,0x00,0x18,0x78,0xBA,0x60,0x6D,0x35,0xB2,0x35,0xB0,0x2C,0xB3,0x81,0xA2,0x01,0xF4,0x00,0x6D,0x09,0xE4,0x40,0xAA,0x4C,0xED,0x40,0x9B,0x0F,0x6B,0x46,0x32,0x6C,0xEA,0x40,0x32,0x50,0x32,0x4D,0xED,0x00,0x18,0x9A,0x33,0x2D,0xED,0x2D,0xB2,0x23,0xB6,0xEE,0xF1,0x1F,0x6D,0x21,0xA2,0x60,0x9E,0x01,0xE1,0x40,0xA8,0x07,0x68,0x91,0x67,0x4C,0xED,0x01,0x6A,0x6C,0xEA,0x00,0xF7,0x62,0x33,0x0C,0xEB,0x40,0x32,0x5C,0x32,0x60,0x33,0x64,0x33,0x4D,0xED,0x00,0x18,0x9A,0x33,0x6D,0xED,0x17,0xB2,0x01,0x6C,0xA0,0x9A,0x00,0xF7,0xA2,0x35,0x00,0x18,0x68,0x91,0x0C,0xED,0x13,0xB3,0x01,0x6C,0xA0,0x9B,0x00,0xF7,0xA2,0x35,0x00,0x18,0x82,0x91,0x0C,0xED,0x5E,0x6C,0x00,0x18,0x78,0xBA,0x90,0x6D,0xFF,0x6D,0x91,0x67,0x00,0x18,0x78,0xBA,0x01,0x4D,0xFF,0x6C,0x09,0x4C,0x00,0x18,0x9A,0x33,0x03,0x6D,0xFF,0x6D,0xD8,0x6C,0x00,0x18,0x9A,0x33,0x08,0x4D,0xFE,0xF7,0x1F,0x6D,0x00,0x18,0x5D,0xBA,0x5E,0x6C,0x10,0x97,0x0F,0x91,0x0E,0x90,0x00,0xEF,0x09,0x63,0x00,0x00,0xCC,0xA0,0x11,0x80,0xE0,0xDF,0x10,0x80,0xFF,0xFF,0xFF,0xF1,0x00,0xF8,0x10,0x80,0xFF,0xFF,0x03,0xE0,0x00,0x00,0x00,0x80,0x00,0xFB,0x10,0x80,0x00,0x00,0x00,0x04,0x38,0xF4,0x04,0x80,0x00,0x00,0x00,0xB6,0x30,0xF4,0x04,0x80,0xE0,0x63,0x3F,0x62,0x3E,0xD0,0x0F,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x00,0x68,0x7D,0x67,0x04,0xF0,0x1F,0x6A,0x9D,0x67,0x12,0xC3,0x48,0xCB,0x00,0x18,0xEC,0xC6,0x10,0x4C,0x08,0xB4,0x04,0x63,0x41,0x6B,0x41,0x9C,0x09,0xC4,0x3F,0x97,0x3E,0x90,0x6B,0xEB,0x6C,0xEA,0x41,0xDC,0x00,0xEF,0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,0xCC,0xA0,0x11,0x80,0xE0,0x63,0x3E,0x62,0x18,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x16,0xB5,0x17,0xB3,0x07,0x6E,0x41,0x9D,0x16,0xB4,0x4E,0x32,0xCC,0xEA,0x69,0xE2,0x40,0xA2,0x60,0x9D,0xCC,
+0xEA,0x40,0xF6,0x40,0x32,0x8C,0xEB,0x4D,0xEB,0x9D,0x67,0x04,0xF0,0x1E,0x6A,0x60,0xDD,0x48,0xCC,0x03,0x6A,0x52,0xC4,0x80,0xF4,0x62,0x32,0x7F,0x6C,0x8C,0xEA,0x9D,0x67,0x53,0xC4,0x62,0x32,0x40,0xF6,0x62,0x33,0xCC,0xEB,0x75,0xC4,0x54,0xC4,0x00,0x18,0xAA,0xC6,0x10,0x4C,0x04,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,0xCC,0xA0,0x11,0x80,0xD0,0xDF,0x10,0x80,0xFF,0xFF,0xFF,0xF1,0xE0,0x63,0x3E,0x62,0x3D,0xD1,0x3C,0xD0,0x11,0xB4,0xFB,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x7D,0x67,0x04,0xF0,0x1F,0x6A,0x48,0xCB,0x0D,0xB2,0x0E,0xB0,0x00,0x69,0xA1,0xF1,0x48,0xAA,0x9D,0x67,0x32,0xC3,0x49,0xD8,0x00,0x18,0xEC,0xC6,0x10,0x4C,0x41,0x98,0x41,0x6B,0x6B,0xEB,0x05,0x63,0x6C,0xEA,0x29,0xC0,0x41,0xD8,0x3E,0x97,0x3D,0x91,0x3C,0x90,0x00,0xEF,0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,0x58,0x46,0x11,0x80,0xCC,0xA0,0x11,0x80,0xE0,0x63,0x3E,0x62,0x0E,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x7D,0x67,0x04,0xF0,0x1D,0x6A,0x48,0xCB,0x01,0x6A,0x52,0xC3,0x09,0xB2,0x7F,0x6B,0x9D,0x67,0x40,0x9A,0x10,0x4C,0x80,0xF4,0x42,0x32,0x6C,0xEA,0x7D,0x67,0x00,0x18,0x7C,0xC6,0x53,0xC3,0x04,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0x76,0x5D,0x11,0x80,0xCC,0xA0,0x11,0x80,0xE0,0x63,0x3E,0x62,0x24,0xB4,0xFC,0x63,0x08,0x6E,0x00,0x18,0x64,0x2E,0x00,0x6D,0x7D,0x67,0x04,0xF0,0x0D,0x6A,0x48,0xCB,0x19,0x6A,0x00,0x6C,0x52,0xC3,0x60,0x6A,0x4B,0xEA,0x53,0xC3,0x94,0xC3,0x55,0xC3,0x96,0xC3,0x97,0xC3,0x98,0xC3,0x1B,0xB3,0xBD,0x67,0x9F,0xC5,0x54,0xA3,0x20,0xF0,0x80,0xC5,0x20,0xF0,0x82,0xC5,0x59,0xC5,0x55,0xA3,0x20,0xF0,0x84,0xC5,0x20,0xF0,0x85,0xC5,0x5A,0xC5,0x56,0xA3,0x20,0xF0,0x87,0xC5,0x20,0xF0,0x89,0xC5,0x5B,0xC5,0x57,0xA3,0x5C,0xC5,0x58,0xA3,0x5D,0xC5,0x59,0xA3,0x5E,0xC5,0x02,0x6A,0x20,0xF0,0x41,0xC5,0x20,0xF0,0x43,0xC5,0x1E,0x6A,0x20,0xF0,0x46,0xC5,0x12,0x6A,0x20,0xF0,0x48,0xC5,0x20,0xF0,0x4A,0xC5,0x20,0xF0,0x8B,0xC5,0x9D,0x67,0x00,0x18,0xFC,0xC2,0x10,0x4C,0x04,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,0xCC,0xA0,0x11,0x80,0xE0,0x63,0x3E,0x62,0x1A,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,
+0x7D,0x67,0x04,0xF0,0x06,0x6A,0x48,0xCB,0x0F,0x6A,0x9D,0x67,0x52,0xC3,0x00,0x6A,0x54,0xC4,0x56,0xC4,0x57,0xC4,0x58,0xC4,0x59,0xC4,0x5A,0xC4,0x5B,0xC4,0x5C,0xC4,0x5D,0xC4,0x5E,0xC4,0x5F,0xC4,0x07,0x6A,0x20,0x6B,0x20,0xF0,0x40,0xC4,0x03,0x6A,0x73,0xC4,0x75,0xC4,0x20,0xF0,0x41,0xC4,0x00,0x18,0xA8,0xC1,0x10,0x4C,0x7D,0x67,0x04,0xF0,0x0A,0x6A,0x48,0xCB,0x9D,0x67,0x01,0x6A,0x52,0xC3,0x53,0xC3,0x00,0x18,0x5E,0xC2,0x10,0x4C,0x04,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0x76,0x5D,0x11,0x80,0xE0,0x63,0x3E,0x62,0xFB,0x63,0x7D,0x67,0x00,0xF4,0x06,0x6A,0x48,0xCB,0x03,0x6A,0x52,0xC3,0x13,0x6A,0x55,0xC3,0x26,0xB2,0x6D,0xA2,0x08,0x73,0x22,0x60,0x70,0x32,0x69,0xE2,0x24,0xB6,0x48,0x32,0x6B,0xE2,0x48,0x32,0xD1,0xE2,0x20,0xF1,0x4F,0xA4,0x01,0x6D,0xAC,0xEA,0x16,0x22,0x00,0xF1,0x52,0xAE,0x47,0xEB,0xAC,0xEA,0x11,0x22,0x20,0xF1,0x6C,0xAC,0xFF,0xF7,0x1F,0x6A,0x9D,0x67,0x4C,0xEB,0x5D,0x67,0x73,0xC2,0xBD,0x67,0x62,0x32,0x7D,0x67,0x54,0xC3,0x00,0xF1,0x18,0x4D,0x00,0x18,0xD2,0x48,0x10,0x4C,0x13,0xB2,0x6C,0xA2,0x0A,0x73,0x1D,0x60,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x10,0xB3,0x48,0x32,0x71,0xE2,0xE0,0xF0,0x4B,0xA4,0xFF,0x6B,0x6C,0xEA,0x01,0x72,0x0E,0x61,0x60,0xF2,0x7C,0xAC,0x5D,0x67,0x9D,0x67,0x73,0xC2,0xBD,0x67,0x62,0x32,0x7D,0x67,0x54,0xC3,0x00,0xF1,0x18,0x4D,0x00,0x18,0xD2,0x48,0x10,0x4C,0x05,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0xCC,0xA0,0x11,0x80,0x58,0x46,0x11,0x80,0x48,0x60,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x12,0xB0,0x00,0x6A,0xFF,0x6D,0xC0,0xF1,0x46,0xC0,0xC0,0xF1,0x5A,0xC0,0x03,0x6A,0xC0,0xF1,0x58,0xC0,0x0E,0xB2,0x02,0x6B,0xAC,0xEC,0xC0,0xF1,0x65,0xC0,0xC0,0xF1,0x64,0xC0,0xC0,0xF1,0x79,0xC0,0x40,0xF1,0x9E,0xC0,0x60,0xC2,0x00,0x18,0xEB,0xA4,0xAC,0xEC,0x20,0xF1,0x8E,0x40,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x05,0x97,0x04,0x90,0x00,0xEF,0x03,0x63,0x48,0x5C,0x11,0x80,0xBD,0x5B,0x11,0x80,0xE0,0x63,0x3E,0x62,0x3D,0xD1,0x3C,0xD0,0xF5,0x63,0x7D,0x67,0x00,0xF4,0x05,0x6A,0x7E,0xB5,0x54,0xCB,0x9D,0x67,0x0D,0x6A,0x20,0xF0,0x4A,0xC3,0x2B,0x4C,0x00,0x18,0x2E,0x2E,0x06,0x6E,0x7A,0xB0,0x00,0x6A,0x9D,0x67,0x01,
+0x6B,0x20,0xF0,0x51,0xC4,0x20,0xF0,0x52,0xC4,0x20,0xF0,0x73,0xC4,0x20,0xF0,0x54,0xC4,0x20,0xF0,0x55,0xC4,0x20,0xF0,0x56,0xC4,0x20,0xF0,0x77,0xC4,0xC0,0xF1,0x46,0xC0,0xC0,0xF1,0x5A,0xC0,0x03,0x6A,0xC0,0xF1,0x58,0xC0,0x6F,0xB2,0x02,0x6B,0xC0,0xF1,0x65,0xC0,0xC0,0xF1,0x64,0xC0,0xC0,0xF1,0x79,0xC0,0x20,0xF1,0x8E,0x40,0x60,0xC2,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x60,0xF1,0x4E,0xA0,0x02,0x72,0x07,0x60,0x03,0x52,0x02,0x60,0x01,0x72,0x01,0x10,0x03,0x72,0x15,0x61,0xAF,0x10,0x63,0xB5,0x00,0x6B,0xFF,0x6C,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x48,0x32,0xA9,0xE2,0x20,0xF0,0x58,0xA2,0x8C,0xEA,0x80,0xF0,0x1F,0x2A,0x01,0x4B,0x8C,0xEB,0x0A,0x5B,0xEF,0x61,0x00,0x18,0xD4,0x5A,0x0A,0x04,0x62,0x67,0x80,0xF0,0x1D,0x2A,0x0A,0x02,0x06,0x4A,0x64,0xA2,0xFF,0xF7,0x1F,0x6C,0xBD,0x67,0x60,0x33,0x4C,0xD3,0x43,0xA2,0x22,0x4D,0x4D,0xEB,0x8C,0xEB,0x4C,0xD3,0x5D,0x67,0x20,0xF0,0x53,0xA2,0x7D,0x67,0x4D,0xD2,0x20,0xF0,0x74,0xA3,0x0A,0x02,0x0A,0x4A,0x4E,0xD3,0x24,0xA2,0x43,0xA2,0x20,0x31,0x8C,0xE9,0x4D,0xE9,0x8C,0xE9,0x9D,0x67,0x20,0xF0,0x97,0xA4,0x4F,0xD4,0x9D,0x67,0x00,0x18,0x8E,0xDF,0x20,0x4C,0x50,0xD2,0x62,0x67,0x75,0x2A,0x5D,0x67,0x71,0xAA,0xFF,0xF7,0x1F,0x6C,0x3D,0xB5,0x8C,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x3C,0xB3,0x48,0x32,0x61,0xE2,0xE0,0xF0,0x8D,0x40,0x00,0x18,0x2E,0x2E,0x06,0x6E,0x5D,0x67,0x20,0xF1,0x50,0xAA,0x7D,0x67,0x9D,0x67,0x60,0xF2,0x5E,0xC8,0x20,0xF1,0x74,0xA3,0x5D,0x67,0xE0,0xF0,0x7A,0xC0,0x20,0xF1,0x98,0xA4,0x7D,0x67,0xE0,0xF0,0x9C,0xC0,0x20,0xF1,0x5C,0xA2,0xE0,0xF0,0x5D,0xC0,0x20,0xF0,0x40,0xA3,0xE0,0xF0,0x53,0xC0,0x01,0x6A,0x80,0xF2,0x42,0xC0,0x91,0xAB,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x45,0x95,0x4C,0xEC,0x7D,0x67,0x40,0xF1,0x60,0xA3,0x22,0x32,0x5E,0x32,0x00,0xF1,0x71,0xC0,0x18,0x22,0xEF,0xF7,0x1F,0x6A,0x4C,0xE9,0x01,0x6A,0x80,0xF0,0x3E,0xC8,0x04,0xD2,0x20,0xB2,0xFF,0xF7,0x1F,0x6C,0xFA,0x6D,0x05,0xD2,0x80,0xF0,0x5E,0xA8,0xA4,0xF4,0x1A,0x6E,0x20,0xF5,0x17,0x6F,0x8C,0xEA,0x06,0x6C,0x20,0x18,0x1B,0x32,0x06,0xD2,0x05,0x10,0x5D,0x67,0x40,0xF1,0x40,0xAA,0x80,0xF0,
+0x5E,0xC8,0x00,0x18,0x4E,0x9B,0x0A,0x04,0x22,0x67,0x0F,0x22,0x7D,0x67,0x20,0xF0,0x80,0xA3,0xE0,0xF0,0xA8,0xA0,0x00,0x18,0xB6,0xDF,0x00,0x65,0x0B,0xB4,0x00,0x18,0xD3,0xDF,0x00,0x65,0x07,0x10,0x0C,0x6B,0x06,0x10,0x5D,0x67,0x91,0xAA,0x20,0x18,0x13,0x26,0x01,0x6D,0x71,0x67,0x0B,0x63,0x3E,0x97,0x3D,0x91,0x3C,0x90,0x43,0x67,0x00,0xEF,0x20,0x63,0x00,0x00,0xE0,0xA0,0x11,0x80,0x48,0x5C,0x11,0x80,0xBD,0x5B,0x11,0x80,0x48,0x60,0x11,0x80,0xF0,0xA5,0x10,0x80,0xF3,0x63,0x18,0x62,0x17,0xD1,0x16,0xD0,0x00,0x6A,0x0C,0xD2,0x0D,0xD2,0x0E,0xD2,0x7D,0x67,0x01,0xF4,0x03,0x6A,0x1A,0xD4,0x54,0xCB,0x62,0xA4,0x23,0xA4,0x26,0x5B,0x20,0xF4,0x05,0x60,0x00,0xF0,0x10,0x0A,0x64,0x33,0x4D,0xE3,0x60,0x8B,0x4D,0xE3,0x00,0xEB,0x00,0x65,0x4D,0x00,0x59,0x00,0xAD,0x00,0x77,0x02,0x23,0x03,0x63,0x03,0xEF,0x03,0x3F,0x08,0x11,0x04,0x25,0x04,0x43,0x04,0x57,0x04,0x25,0x07,0xC7,0x05,0x6B,0x04,0x97,0x05,0xAF,0x05,0x25,0x07,0xD7,0x05,0xE9,0x05,0xFB,0x05,0x29,0x06,0x35,0x06,0x4B,0x06,0x57,0x06,0x6B,0x06,0x7B,0x06,0x8B,0x06,0x97,0x06,0xA9,0x06,0x3B,0x08,0x3B,0x08,0x3B,0x08,0x3B,0x08,0xC7,0x06,0x07,0x07,0x13,0x07,0x31,0x08,0x21,0xF0,0x04,0xB2,0x03,0x6C,0x40,0xAA,0x0C,0xD2,0x17,0x13,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x02,0xF1,0x03,0x6A,0x4B,0xEA,0x4C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x00,0x6C,0xA4,0x67,0x00,0x18,0x01,0xA0,0xC4,0x67,0x80,0x18,0x38,0x2D,0x00,0x6C,0x00,0x18,0xFE,0x4F,0x00,0x65,0x00,0x6D,0x9D,0x67,0x28,0x4C,0x80,0x18,0x95,0x2B,0xC5,0x67,0xC0,0xF7,0x1C,0xB3,0x0A,0x6A,0x4C,0xC3,0x08,0x6A,0x4D,0xC3,0x00,0x6A,0x49,0xC3,0x4A,0xC3,0xC9,0x13,0x0B,0x59,0x18,0x67,0xA0,0xF3,0x0D,0x20,0xC0,0xF7,0x00,0xB4,0x05,0x21,0x41,0x9C,0x40,0x6B,0x6C,0xEA,0x07,0x22,0x8F,0x13,0x41,0x9C,0x40,0x6B,0x6C,0xEA,0x02,0x2A,0x29,0xC4,0xB7,0x13,0xA0,0xF7,0x04,0xB3,0x04,0x6A,0xFA,0x6D,0x89,0xA3,0x29,0xC3,0x04,0xD2,0x80,0xF7,0x1C,0xB2,0x06,0xD1,0x0B,0xD4,0x05,0xD2,0x4A,0xA3,0x01,0x6C,0xA4,0xF1,0x00,0x6E,0x07,0xD2,0x61,0x9B,0xE1,0xF4,0x11,0x6F,0x6A,0x32,0x66,0xEC,0x8C,0xEA,0x8C,0xEB,0x08,0xD2,0x20,0x18,0x1B,0x32,0x09,0xD3,0xA0,
+0xF0,0x08,0x20,0x00,0xF0,0x10,0x0A,0x24,0x33,0x4D,0xE3,0x60,0x8B,0x4D,0xE3,0x00,0xEB,0x00,0x65,0x17,0x00,0x95,0x00,0xC1,0x00,0xF7,0x00,0x17,0x01,0x1B,0x01,0x1F,0x01,0x41,0x01,0x29,0x01,0x31,0x01,0x39,0x01,0x40,0xF7,0x04,0xB2,0x61,0x9A,0x01,0x6A,0x6C,0xEA,0x0B,0x22,0x02,0x6A,0x6C,0xEA,0x04,0x22,0x80,0x18,0x9A,0x2D,0x00,0x65,0x15,0x10,0x80,0x18,0xC0,0x2D,0x00,0x65,0x11,0x10,0x02,0x6A,0x6C,0xEA,0x04,0x22,0x80,0x18,0xD3,0x2E,0x00,0x65,0x0A,0x10,0x04,0x6A,0x6C,0xEA,0x04,0x22,0x80,0x18,0xA4,0x2E,0x00,0x65,0x03,0x10,0x80,0x18,0x12,0x2E,0x00,0x65,0x00,0xF7,0x00,0xB0,0x6B,0x98,0x4A,0x98,0x29,0x98,0x10,0xD3,0x00,0x18,0xFE,0x4F,0x0F,0xD2,0x00,0x6D,0x9D,0x67,0x28,0x4C,0x80,0x18,0x95,0x2B,0xC5,0x67,0x0B,0x94,0x0A,0x6A,0x4C,0xC0,0x02,0x5C,0x08,0x6A,0x4D,0xC0,0x40,0xF3,0x0D,0x60,0x0F,0x92,0x10,0x93,0x29,0xD8,0x4A,0xD8,0x6B,0xD8,0x47,0x13,0xC0,0xF6,0x04,0xB4,0x02,0x6A,0x61,0x9C,0x4D,0xEB,0x04,0x6A,0x6C,0xEA,0x61,0xDC,0x07,0x22,0x02,0x6A,0x4B,0xEA,0x6C,0xEA,0x80,0x18,0xE9,0x2E,0x41,0xDC,0x1A,0x10,0x01,0x6A,0x6D,0xEA,0x80,0x18,0xB0,0x2D,0x41,0xDC,0x14,0x10,0x80,0xF6,0x18,0xB4,0x03,0x6A,0x4B,0xEA,0x61,0x9C,0x4C,0xEB,0x02,0x6A,0x4B,0xEA,0x4C,0xEB,0x04,0x6A,0x6C,0xEA,0x61,0xDC,0x04,0x22,0x80,0x18,0xB6,0x2E,0x00,0x65,0x03,0x10,0x80,0x18,0x25,0x2E,0x00,0x65,0x60,0xF6,0x10,0xB2,0x40,0x6C,0x61,0x9A,0x8D,0xEB,0x61,0xDA,0x16,0x13,0x60,0xF6,0x04,0xB0,0x03,0x6B,0x6B,0xEB,0x41,0x98,0x6C,0xEA,0x01,0x6B,0x6D,0xEA,0x80,0x18,0xD2,0x2D,0x41,0xD8,0x41,0x98,0x40,0x6B,0x6D,0xEA,0x41,0xD8,0x06,0x13,0x01,0x6C,0x03,0x10,0x02,0x6C,0x01,0x10,0x03,0x6C,0x80,0x18,0x6B,0x2F,0x00,0x65,0xFD,0x12,0x80,0x18,0xFA,0x2E,0x00,0x65,0xF9,0x12,0x80,0x18,0x21,0x2F,0x00,0x65,0xF5,0x12,0x80,0x18,0x3D,0x2F,0x00,0x65,0xF1,0x12,0x80,0x18,0x80,0x2F,0x00,0x65,0xE0,0xF2,0x0C,0x22,0x12,0x72,0x98,0x67,0x01,0x5C,0x78,0x67,0x01,0x5B,0x58,0x67,0x03,0x4A,0xE3,0x12,0x04,0x59,0xA0,0xF2,0x13,0x60,0x80,0x18,0x38,0x2D,0x00,0x6C,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x02,0xF1,0x03,0x6A,0x4B,0xEA,0x4C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,
+0x00,0x6C,0xA4,0x67,0x00,0x18,0x01,0xA0,0xC4,0x67,0x00,0x18,0xFE,0x4F,0x00,0x65,0x00,0x6D,0x9D,0x67,0x28,0x4C,0x80,0x18,0x95,0x2B,0xC5,0x67,0xA0,0xF5,0x18,0xB0,0x0A,0x6A,0x4C,0xC0,0x08,0x6A,0x2A,0xC0,0x00,0x1C,0xDD,0x31,0x4D,0xC0,0x11,0xD2,0x41,0x98,0x05,0x6B,0x6B,0xEB,0x6C,0xEA,0x01,0x71,0x41,0xD8,0x06,0x61,0x80,0x18,0x6B,0x2F,0x03,0x6C,0x00,0x18,0xC4,0x53,0x00,0x6C,0x02,0x71,0x04,0x61,0x41,0x98,0x04,0x6B,0x6D,0xEA,0x41,0xD8,0x00,0x1C,0xE5,0x31,0x11,0x94,0x02,0x6A,0x04,0xD2,0x60,0xF5,0x18,0xB2,0x06,0xD1,0x01,0x6C,0x05,0xD2,0x41,0x98,0xFA,0x6D,0x44,0xF2,0x19,0x6E,0x4A,0x32,0x8C,0xEA,0xE1,0xF4,0x12,0x6F,0x20,0x18,0x1B,0x32,0x07,0xD2,0x8E,0x12,0x4F,0x59,0x25,0x60,0x1A,0x93,0x44,0xA3,0x08,0x5A,0x21,0x60,0x40,0xF5,0x08,0xB5,0x7F,0x6A,0x4C,0xE9,0x80,0x9D,0x40,0xF5,0x04,0xB2,0x80,0xF4,0x20,0x33,0x4C,0xEC,0x6D,0xEC,0x80,0xDD,0x1A,0x92,0x64,0xA2,0xFF,0x6A,0x4C,0xEB,0x07,0x6A,0x4C,0xEB,0x20,0xF5,0x10,0xB2,0x00,0xF7,0x60,0x33,0x8C,0xEA,0x6D,0xEA,0x40,0xDD,0x6E,0x12,0x1A,0x93,0x0A,0x59,0x45,0xA3,0x84,0xA3,0x40,0x32,0x4D,0xEC,0x03,0x61,0x03,0x6C,0x0D,0xD4,0x64,0x12,0x00,0xF5,0x00,0xB6,0x00,0xF5,0x0C,0xB3,0xE3,0xF7,0x1F,0x6A,0xA0,0x9E,0x8C,0xEA,0x54,0x32,0x6C,0xED,0x00,0xF5,0x00,0xB3,0x4D,0xED,0x24,0x32,0x69,0xE2,0x40,0xAA,0xFF,0xF7,0x1F,0x6B,0xA0,0xDE,0x6C,0xEA,0x4C,0x32,0x82,0xEA,0x20,0xF2,0x14,0x61,0x03,0x59,0x05,0x60,0x02,0x6A,0x4B,0xEA,0x4C,0xED,0xA0,0xDE,0x0F,0x10,0x06,0x59,0xFF,0x6B,0x58,0x67,0x01,0x6C,0x6C,0xEA,0x61,0x9E,0x8D,0xED,0x8C,0xEA,0x81,0x6C,0x8B,0xEC,0x5C,0x32,0x8C,0xEB,0x4D,0xEB,0xA0,0xDE,0x61,0xDE,0xA0,0xF4,0x1C,0xB2,0x1F,0x6B,0x6B,0xEB,0x49,0xE1,0x80,0xA2,0x0F,0x6A,0x4C,0xEC,0x40,0x9E,0x84,0x34,0x6C,0xEA,0x8D,0xEA,0x40,0xDE,0x28,0x12,0x1A,0x92,0x85,0xA2,0x05,0x5C,0xE0,0xF1,0x15,0x60,0x60,0xF4,0x1C,0xB5,0x07,0x6A,0x4C,0xEC,0x41,0x9D,0x39,0x6B,0x6B,0xEB,0x8C,0x34,0x6C,0xEA,0x8D,0xEA,0x41,0xDD,0x17,0x12,0x1A,0x94,0x60,0xF4,0x04,0xB3,0x43,0xA4,0x46,0xC3,0x44,0xA4,0x47,0xC3,0x45,0xA4,0x48,0xC3,0x0D,0x12,0x40,0xF4,0x10,0xB5,0x60,0xF4,0x08,0xB3,0x3E,0x34,0x40,0x9D,0xC0,0xF7,0x80,0x34,0x6C,0xEA,0x8D,
+0xEA,0x40,0xDD,0x7F,0x6A,0x4C,0xE9,0x25,0xC5,0xFE,0x11,0x1A,0x94,0x20,0xF4,0x10,0xB3,0x43,0xA4,0x4E,0xC3,0x44,0xA4,0x4F,0xC3,0x45,0xA4,0x50,0xC3,0xF4,0x11,0x1A,0x94,0x00,0xF4,0x1C,0xB3,0x43,0xA4,0x51,0xC3,0x44,0xA4,0x52,0xC3,0x45,0xA4,0x53,0xC3,0xEA,0x11,0x00,0xF4,0x0C,0xB6,0xFF,0x6C,0xA4,0x67,0x69,0xA6,0x6C,0xED,0x0A,0x75,0x40,0x61,0x4C,0xA6,0x00,0x6F,0x8C,0xEA,0x0A,0x72,0x14,0x60,0x22,0x67,0x44,0x32,0x29,0xE2,0x4C,0x32,0x2B,0xE2,0x4C,0x32,0x00,0xF4,0x04,0xB3,0x2B,0xE2,0x48,0x32,0x69,0xE2,0x20,0xF0,0x58,0xA2,0x05,0x6F,0x8C,0xEA,0x04,0x72,0x03,0x60,0x0A,0x6A,0x00,0x6F,0x4C,0xC6,0x4D,0xA6,0x08,0x72,0x6A,0x60,0x22,0x67,0x50,0x32,0x29,0xE2,0xF8,0xB4,0x48,0x32,0x2B,0xE2,0x48,0x32,0x89,0xE2,0x20,0xF1,0x4F,0xA2,0x01,0x6B,0x05,0x6F,0x6C,0xEA,0x05,0x22,0x00,0xF1,0x52,0xAC,0x47,0xE9,0x6C,0xEA,0x57,0x2A,0x08,0x6A,0x00,0x6F,0x4D,0xC6,0x53,0x10,0xEF,0xB0,0x7F,0x4D,0x6E,0x4D,0x05,0x6F,0x90,0x67,0xB5,0xE3,0x06,0x6E,0x00,0x18,0x2E,0x2E,0x15,0xD7,0xFF,0xF7,0x38,0xC0,0x25,0x10,0x4B,0x43,0x8C,0xEA,0x03,0x5A,0x23,0x60,0xE5,0xB5,0x04,0x6F,0x00,0x69,0x24,0x32,0x29,0xE2,0x4C,0x32,0x2B,0xE2,0x4C,0x32,0x2B,0xE2,0x48,0x33,0xA9,0xE3,0x20,0xF0,0x58,0xA2,0x8C,0xEA,0x04,0x72,0xDF,0x60,0x01,0x49,0x8C,0xE9,0x0A,0x59,0xEF,0x61,0x2D,0x10,0xDC,0xB0,0x60,0xF1,0x02,0x4D,0x05,0x6F,0x90,0x67,0xB5,0xE3,0x06,0x6E,0x00,0x18,0x2E,0x2E,0x15,0xD7,0xFF,0xF7,0x39,0xC0,0x15,0x97,0x1F,0x10,0x48,0x43,0x8C,0xEA,0x02,0x5A,0xE5,0x67,0x1A,0x60,0xD2,0xB5,0x04,0x6F,0x00,0x69,0x01,0x6E,0xFF,0xF7,0x1F,0x68,0x30,0x32,0x29,0xE2,0x48,0x32,0x2B,0xE2,0x48,0x33,0xA9,0xE3,0x20,0xF1,0x4F,0xA2,0xCC,0xEA,0x06,0x22,0x00,0xF1,0x52,0xAD,0x0C,0xEA,0x47,0xE9,0xCC,0xEA,0xD7,0x2A,0x01,0x49,0x8C,0xE9,0x08,0x59,0xEC,0x61,0xBC,0xB2,0x4A,0xA2,0x0C,0xD2,0x0C,0x93,0xE0,0x32,0x4D,0xEB,0x0C,0xD3,0x77,0x10,0xC3,0xB2,0x20,0xF0,0x7C,0xA2,0x0C,0xD3,0x20,0xF0,0x7D,0xA2,0x0C,0x94,0x20,0xF0,0x5E,0xA2,0x60,0x33,0x6D,0xEC,0x85,0x10,0xBD,0xB2,0x20,0xF0,0x7F,0xA2,0x0C,0xD3,0x40,0xF0,0x60,0xA2,0x0C,0x94,0x40,0xF0,0x41,0xA2,0x60,0x33,0x6D,0xEC,0x79,0x10,0x1A,0x93,0x43,0xA3,0x62,0xAB,0x60,0x33,
+0x6D,0xEA,0xB5,0xB3,0x41,0xDB,0x34,0x11,0x1A,0x94,0xA7,0xB3,0x43,0xA4,0x54,0xC3,0x44,0xA4,0x55,0xC3,0x45,0xA4,0x56,0xC3,0x2B,0x11,0x1A,0x94,0xA3,0xB3,0x43,0xA4,0x57,0xC3,0x44,0xA4,0x58,0xC3,0x45,0xA4,0x59,0xC3,0x22,0x11,0x4F,0x41,0xFF,0x6B,0x6C,0xEA,0x09,0x5A,0x00,0xF1,0x04,0x60,0x5C,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x79,0x6A,0x4B,0xEA,0x4C,0xEE,0x2C,0x33,0x78,0x6A,0x4C,0xEB,0x5C,0x6C,0x01,0x6D,0x6D,0xEE,0xD6,0x10,0x93,0xB2,0x92,0xAA,0x69,0x9A,0x0C,0xD4,0x9E,0xB4,0x07,0x10,0x90,0xB2,0x69,0x9A,0x62,0x34,0x82,0x34,0x0C,0xD4,0xFF,0xF7,0x1F,0x6C,0x8C,0xEB,0x69,0xDA,0x02,0x6A,0x3C,0x10,0x8B,0xB2,0x96,0xAA,0x6B,0x9A,0x0C,0xD4,0x96,0xB4,0x07,0x10,0x88,0xB2,0x6B,0x9A,0x62,0x34,0x82,0x34,0x0C,0xD4,0xFF,0xF7,0x1F,0x6C,0x8C,0xEB,0x6B,0xDA,0xEE,0x17,0x78,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x02,0x6B,0x0C,0xD2,0x0E,0xD3,0xE2,0x10,0x76,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xD2,0x02,0x6C,0x0E,0xD4,0xDA,0x10,0x77,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xD2,0xD8,0x17,0x78,0xB2,0x74,0xA2,0x0C,0xD3,0x75,0xA2,0x0C,0x94,0x56,0xA2,0x60,0x33,0x6D,0xEC,0x08,0x10,0x73,0xB2,0x77,0xA2,0x0C,0xD3,0x78,0xA2,0x0C,0x94,0x59,0xA2,0x60,0x33,0x6D,0xEC,0x40,0x32,0x40,0x32,0x4D,0xEC,0x0C,0xD4,0x03,0x6A,0x0E,0xD2,0xBC,0x10,0x1A,0x93,0x79,0xB1,0x43,0xA3,0x44,0x33,0x4D,0xE3,0x6C,0x33,0x4D,0xE3,0x40,0x99,0x68,0x30,0x4F,0xEA,0x03,0x22,0x00,0x18,0xFD,0x1D,0x91,0x67,0x0E,0x20,0x00,0x18,0x40,0xA4,0x00,0x65,0x72,0xB6,0x00,0x6F,0x01,0x6C,0xB1,0x67,0x00,0x18,0xF3,0x1D,0x04,0xD7,0x80,0x99,0x00,0x18,0x0C,0x1E,0xB0,0x67,0x6D,0xB2,0x00,0xCA,0x9C,0x10,0x1A,0x94,0x66,0xB2,0x63,0xA4,0x80,0xF1,0x61,0xC2,0x96,0x10,0x1A,0x94,0x00,0x6B,0x43,0xA4,0x01,0x22,0x01,0x6B,0x61,0xB2,0x80,0xF1,0x71,0xC2,0x8D,0x10,0x05,0x59,0x00,0x6A,0x78,0x67,0x12,0xD2,0x70,0x23,0x1A,0x94,0x42,0xA4,0x02,0xAC,0x0C,0x72,0x05,0x61,0x5B,0xB2,0x01,0x6F,0x41,0x9A,0x12,0xD2,0x03,0x10,0x12,0x97,0x03,0x6A,0x0E,0xD2,0x7A,0x23,0x00,0xF0,0x12,0x0A,0x24,0x33,0x4D,0xE3,0x60,0x8B,0x4D,0xE3,0x00,0xEB,0x00,0x65,0x0B,0x00,0x29,0x00,0x83,0x00,0xA5,0x00,0xAF,0x00,0x06,
+0x27,0x12,0x96,0x3F,0x6A,0x90,0x67,0x4C,0xEC,0x00,0x6D,0x31,0x10,0x3F,0x6A,0x90,0x67,0x4C,0xEC,0x00,0x18,0xEB,0x9F,0xA7,0x67,0x0C,0xD2,0x5E,0x10,0x02,0x31,0x01,0x6B,0x6C,0xE9,0x09,0x21,0xA3,0x67,0x40,0x6C,0xD1,0x67,0x14,0xD3,0x00,0x18,0x01,0xA0,0x15,0xD7,0x15,0x97,0x14,0x93,0x0C,0x27,0x7F,0x6A,0x4C,0xE8,0x07,0x34,0x40,0x6A,0x12,0x96,0x4D,0xEC,0xFF,0x6A,0x4C,0xEC,0x00,0x18,0x01,0xA0,0xA3,0x67,0x0B,0x10,0x7F,0x6A,0x4C,0xE8,0x07,0x34,0x40,0x6A,0x4D,0xEC,0xFF,0x6A,0x4C,0xEC,0x00,0x18,0xEB,0x9F,0xA3,0x67,0x0C,0xD2,0x38,0x21,0x40,0x6C,0x01,0x6D,0x00,0x6E,0x00,0x18,0x01,0xA0,0x00,0x65,0x31,0x10,0x01,0x6A,0x0C,0xEA,0x03,0x22,0x03,0x6B,0x0D,0xD3,0x2B,0x10,0x08,0x27,0x12,0x95,0xFF,0xF7,0x1F,0x6A,0x90,0x67,0x00,0x18,0x9A,0x33,0x4C,0xED,0x22,0x10,0x30,0xB2,0x12,0x10,0x01,0x6A,0x0C,0xEA,0x05,0x2A,0x2E,0xB2,0x06,0x10,0x01,0x6A,0x0C,0xEA,0x02,0x22,0x03,0x6A,0x15,0x10,0x2C,0xB2,0x06,0x27,0x7D,0x67,0x40,0xF0,0x68,0xAB,0x49,0xE0,0x60,0xCA,0x0E,0x10,0x49,0xE0,0x40,0xAA,0xFF,0xF7,0x1F,0x6C,0x4C,0xEC,0x0C,0xD4,0x07,0x10,0x01,0x6A,0x4C,0xE9,0x24,0xB2,0x20,0xC2,0x02,0x10,0x02,0x6A,0x0D,0xD2,0x0E,0x93,0x0D,0x94,0x70,0x32,0x4D,0xEC,0x1A,0x92,0x83,0xC2,0x1A,0x93,0x1A,0x94,0x41,0xA3,0x10,0x6B,0x6B,0xEB,0x6C,0xEA,0x41,0xC4,0x1A,0x92,0x0C,0x96,0x02,0x6C,0x00,0x18,0x2C,0x2B,0xA0,0x9A,0x18,0x97,0x17,0x91,0x16,0x90,0x00,0xEF,0x0D,0x63,0x00,0x00,0xD2,0x04,0x11,0x80,0xCC,0xA0,0x11,0x80,0xF0,0xA5,0x10,0x80,0xFF,0xFF,0x03,0xFE,0xFF,0xFF,0xFF,0x8F,0x1F,0x00,0xFC,0xFF,0xE8,0xDF,0x10,0x80,0xFC,0xDF,0x10,0x80,0xFF,0xFF,0xFF,0x7F,0x48,0x60,0x11,0x80,0x58,0x46,0x11,0x80,0xE0,0xA0,0x11,0x80,0xDC,0x00,0x11,0x80,0xFC,0xA0,0x11,0x80,0x00,0x00,0xFF,0xFF,0x88,0x07,0x11,0x80,0x01,0x91,0x02,0x80,0x08,0xA1,0x11,0x80,0x00,0x00,0x00,0xB6,0x00,0xA0,0x00,0xB0,0x00,0x10,0x00,0xB6,0x1C,0xA1,0x11,0x80,0xF8,0x63,0x0E,0x62,0x0D,0xD1,0x0C,0xD0,0x44,0xAC,0x24,0x67,0x01,0x72,0x55,0x61,0x00,0x9C,0x5D,0x67,0xFA,0x6D,0x20,0xF0,0x08,0xC2,0x02,0x6A,0x04,0xD2,0x45,0xB2,0x06,0xD0,0xE4,0xF4,0x03,0x6E,0x05,0xD2,0x41,0x9C,0xC1,0xF4,0x1C,0x6F,0x04,0x6C,0x20,0x18,0x1B,0x32,
+0x07,0xD2,0x3F,0x6A,0x4C,0xE8,0x20,0x70,0x0A,0x61,0x62,0xA1,0xFF,0x6A,0x4C,0xEB,0x06,0x2B,0x3C,0xB2,0x60,0xDA,0x3C,0xB2,0x60,0xDA,0x01,0x6A,0x42,0xC1,0x7D,0x67,0x20,0xF0,0x68,0xA3,0x3F,0x6A,0x6C,0xEA,0x24,0x72,0x03,0x67,0x24,0x61,0x7D,0x67,0x01,0xF4,0x03,0x6A,0x00,0x1C,0xDD,0x31,0x50,0xCB,0x00,0x18,0xFE,0x4F,0x02,0x67,0x00,0x6D,0x9D,0x67,0x20,0x4C,0x80,0x18,0x95,0x2B,0xC5,0x67,0x2F,0xB3,0x40,0x99,0x6C,0xEA,0x2F,0xB3,0x6E,0xEA,0x06,0x2A,0x80,0x18,0x6B,0x2F,0x03,0x6C,0x00,0x18,0xC4,0x53,0x00,0x6C,0xA0,0x99,0x02,0x6C,0x00,0x18,0x2C,0x2B,0x00,0x6E,0x00,0x1C,0xE5,0x31,0x90,0x67,0x3E,0x10,0xFF,0x6A,0x4C,0xE8,0x30,0x70,0x04,0x61,0x80,0x18,0x07,0x30,0x91,0x67,0x36,0x10,0x44,0xA9,0x02,0x72,0x30,0x61,0x21,0xB2,0x00,0xA2,0x2D,0x28,0x40,0x99,0x04,0xF0,0x0F,0x6B,0x6C,0xEA,0x6A,0xEA,0x0B,0x61,0x1E,0xB2,0xFF,0xF7,0x1F,0x6B,0x40,0xAA,0x6C,0xEA,0x40,0x32,0x40,0x32,0x00,0xF2,0x0F,0x6B,0x6D,0xEA,0x40,0xD9,0x02,0x6A,0x04,0xD2,0x11,0xB2,0x05,0x6C,0xFA,0x6D,0x05,0xD2,0x40,0x99,0x24,0xF5,0x13,0x6E,0xC1,0xF4,0x1D,0x6F,0x06,0xD2,0x41,0x99,0x20,0x18,0x1B,0x32,0x07,0xD2,0x11,0xB2,0xFF,0x6B,0x40,0xA2,0x6C,0xEA,0x07,0x22,0x40,0x99,0x6C,0xEA,0x30,0x72,0x03,0x60,0x0E,0xB2,0x00,0xDA,0x03,0x10,0x00,0x18,0xF4,0x2C,0x91,0x67,0x0E,0x97,0x0D,0x91,0x0C,0x90,0x00,0xEF,0x08,0x63,0xF0,0xA5,0x10,0x80,0x14,0xE0,0x10,0x80,0x38,0x91,0x10,0x80,0x00,0x00,0xFF,0x00,0x00,0x00,0x01,0x00,0x98,0x00,0x11,0x80,0x04,0x09,0x11,0x80,0x1C,0xA1,0x11,0x80,0x94,0x00,0x11,0x80,0xFD,0x63,0x04,0x62,0x00,0x18,0x23,0xEA,0x00,0x65,0x04,0x97,0x00,0xEF,0x03,0x63,0xEF,0x63,0x20,0x62,0x1F,0xD1,0x1E,0xD0,0x80,0xAC,0x00,0x6A,0xC0,0xB3,0x11,0xD4,0xA0,0xA5,0x1B,0xD2,0x84,0x32,0x89,0xE2,0x4C,0x32,0x8B,0xE2,0x4C,0x32,0x8B,0xE2,0x48,0x32,0x69,0xE2,0x19,0xD2,0x12,0xD5,0xE0,0xF0,0x6C,0xA2,0x18,0xD3,0xA0,0xF0,0x9A,0xAA,0x19,0x93,0x13,0xD4,0xA0,0xF0,0x58,0xAA,0x19,0x94,0x14,0xD2,0xA0,0xF0,0x7C,0xAB,0x19,0x92,0x15,0xD3,0x7D,0x67,0x60,0xF0,0x6C,0xA3,0xC0,0xF0,0x80,0xAC,0x16,0xD4,0xC0,0xF2,0x74,0xC2,0x9D,0x67,0xE0,0xF0,0x13,0xA2,0x60,0xF0,0x8C,0xA4,0xE0,0xF0,0x28,0xA2,0xC0,0xF2,0x95,
+0xC2,0xB1,0x67,0x00,0x18,0x7B,0xBB,0x90,0x67,0x17,0xD2,0x17,0x93,0x48,0x32,0x1C,0xD2,0x69,0xE2,0xA6,0xB3,0x44,0x32,0x69,0xE2,0x1A,0xD2,0x19,0x92,0xE0,0xF0,0xA8,0xA2,0x00,0x18,0xC3,0x34,0x90,0x67,0x12,0x93,0x0E,0x23,0x18,0x94,0x01,0x74,0x0B,0x61,0x1A,0x92,0x03,0xF4,0x00,0x6C,0x18,0xF0,0x00,0x6D,0xC3,0xAA,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x8D,0x93,0x4C,0xEE,0x14,0x93,0x05,0x23,0x19,0x94,0x00,0xF2,0x57,0xA4,0x01,0x72,0x15,0x60,0x03,0x6A,0x04,0xD2,0x95,0xB2,0x19,0x93,0x12,0x94,0x05,0xD2,0x14,0x92,0xFA,0x6D,0x64,0xF6,0x09,0x6E,0x06,0xD2,0x00,0xF2,0x57,0xA3,0x64,0xF4,0x18,0x6F,0x08,0xD4,0x04,0x6C,0x20,0x18,0x1B,0x32,0x07,0xD2,0x0C,0x11,0x00,0x1C,0xDD,0x31,0x00,0x65,0x9D,0x67,0x40,0x4C,0xB1,0x67,0x00,0x18,0x3B,0x94,0x1B,0xD2,0x10,0x92,0x88,0xB6,0x46,0x32,0x01,0x4A,0xCC,0xEA,0x10,0xD2,0x19,0x92,0xC0,0xF2,0xEE,0xAA,0x07,0x2F,0x12,0x93,0x01,0x73,0x04,0x61,0x00,0x1C,0xE5,0x31,0x1B,0x94,0xF2,0x10,0x10,0x95,0x08,0x25,0x14,0x94,0x06,0x24,0x9B,0xED,0x01,0x2C,0xE5,0xE8,0x10,0xEA,0x00,0x65,0x01,0x10,0x00,0x6A,0x14,0x93,0xFF,0xF7,0x1F,0x6C,0x4B,0xE3,0x13,0x93,0x8C,0xEA,0x65,0xE2,0x14,0x92,0x23,0xEA,0x01,0x60,0x47,0xE1,0x12,0x93,0x01,0x73,0x18,0x61,0x19,0x92,0xEC,0xEC,0xA0,0xF2,0x74,0x9A,0x14,0xD4,0xCC,0xEB,0x73,0xE5,0xA3,0xEB,0x44,0x67,0x02,0x61,0x6F,0xB2,0x49,0xE4,0x14,0x94,0x9A,0xEA,0x01,0x2C,0xE5,0xE8,0x12,0xE9,0x41,0x41,0x00,0x65,0x98,0xEA,0x12,0xEA,0x65,0xE2,0xA7,0xE1,0xCC,0xE9,0x19,0x94,0xFF,0x6B,0x14,0x35,0xE0,0xF0,0x48,0xA4,0x6C,0xED,0x02,0x6C,0x6C,0xEA,0x40,0x32,0x4C,0x32,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x9A,0x33,0x4C,0xED,0x10,0x92,0x2D,0xE2,0x1D,0xD3,0x08,0x59,0x06,0x60,0x1D,0x94,0x14,0x93,0x71,0xE4,0x65,0xE1,0x1D,0xD4,0xF8,0x17,0x1D,0x94,0x43,0xE4,0x00,0x18,0xC4,0x36,0x04,0x30,0x41,0xE0,0x19,0x92,0x4E,0x6C,0x13,0xDA,0x00,0x18,0x9A,0x33,0x14,0x95,0x1D,0x95,0xFF,0xF7,0x1F,0x6B,0x48,0x6C,0x00,0x18,0x9A,0x33,0x6C,0xED,0x18,0x94,0x03,0x2C,0x16,0x95,0x15,0x90,0x07,0x10,0x15,0x92,0x16,0x93,0xFF,0xF7,0x1F,0x6C,0x00,0x6D,0x61,0xE2,0x8C,0xE8,0x00,0x18,0x9A,0x33,0x4C,0x6C,0x4A,0x6C,0x00,0x18,0x9A,0x33,0xB0,0x67,
+0x00,0x6C,0x00,0x18,0x9A,0x33,0x07,0x6D,0x12,0x92,0x0D,0x2A,0x18,0x93,0x01,0x73,0x0A,0x61,0x17,0x94,0x44,0xB2,0x7D,0x67,0x40,0xF0,0x68,0xA3,0x49,0xE4,0x60,0xC2,0x42,0xB2,0x49,0xE4,0x60,0xC2,0x1B,0x94,0x00,0x1C,0xE5,0x31,0x02,0x49,0x00,0x18,0x4E,0x05,0x00,0x65,0x01,0xF0,0x00,0x6D,0x00,0x18,0x78,0xBA,0x5E,0x6C,0x12,0x92,0x21,0x2A,0x18,0x93,0x01,0x73,0x0D,0x61,0x1A,0x92,0x18,0xF0,0x00,0x6C,0x03,0xF4,0x00,0x6D,0x00,0x18,0x8D,0x93,0xC3,0xAA,0x19,0x93,0x20,0x6A,0x00,0xF2,0x55,0xC3,0x11,0x10,0x51,0x59,0x07,0x61,0x11,0x95,0xFF,0xF7,0x1F,0x6A,0x91,0x67,0x00,0x18,0x3A,0x96,0x4C,0xEC,0x1A,0x92,0x18,0xF0,0x00,0x6C,0x01,0xF4,0x00,0x6D,0x00,0x18,0x8D,0x93,0xC3,0xAA,0x18,0x93,0x14,0x2B,0x12,0x94,0x12,0x24,0x51,0x59,0x10,0x61,0x11,0x95,0xFF,0xF7,0x1F,0x68,0x91,0x67,0x00,0x18,0x3A,0x96,0x0C,0xEC,0x1A,0x92,0x01,0xF4,0x00,0x6C,0x18,0xF0,0x00,0x6D,0xC3,0xAA,0x00,0x18,0x8D,0x93,0x0C,0xEE,0x2B,0x6A,0x7D,0x67,0x58,0xCB,0x14,0x94,0x1D,0xB2,0xFD,0x67,0x0A,0xD4,0x80,0x9A,0x00,0x6D,0x04,0x06,0x34,0x4F,0xA9,0xE7,0x40,0xA2,0xAD,0xE6,0x01,0x4D,0x08,0x5D,0x40,0xC3,0xF9,0x61,0x0A,0x95,0x0B,0x96,0x00,0x18,0x40,0x1E,0x0C,0x97,0x17,0x92,0x0F,0x22,0x1C,0x93,0x13,0xB2,0x49,0xE3,0x00,0x6B,0xFF,0xF7,0x7C,0xDA,0x1C,0x94,0x11,0xB2,0x49,0xE4,0xFF,0xF7,0x7C,0xDA,0x10,0xB2,0x49,0xE4,0xFF,0xF7,0x7C,0xDA,0x20,0x97,0x1F,0x91,0x1E,0x90,0x01,0x6A,0x00,0xEF,0x11,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x70,0x45,0x11,0x80,0xF0,0xA5,0x10,0x80,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x08,0x48,0x06,0x11,0x80,0x3C,0x06,0x11,0x80,0x68,0x52,0x11,0x80,0x18,0x07,0x11,0x80,0xE8,0x06,0x11,0x80,0xB8,0x06,0x11,0x80,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0xC0,0xAC,0xFF,0xF7,0x1F,0x6A,0xFF,0x6F,0x4C,0xEE,0xEC,0xEE,0x4C,0xED,0x0A,0x65,0xCC,0x32,0xC9,0xE2,0x48,0x32,0x4D,0xB3,0xCB,0xE2,0x48,0x32,0x71,0xE2,0x29,0xA4,0xFF,0xF7,0x1F,0x75,0xEC,0xE9,0x4E,0x61,0x58,0xA4,0xEC,0xEA,0x01,0x72,0x42,0x61,0x47,0xB2,0x49,0xE1,0x40,0xA2,0xEC,0xEA,0x3D,0x2A,0x46,0xB2,0x01,0x6B,0x80,0x9A,0x40,0xF6,0x82,0x32,0x6C,0xEA,0x36,0x22,0xC4,0x30,0xC9,0xE0,0x42,0xB3,0x48,0x32,0xCB,0xE2,0x48,0x32,0x7D,
+0xE2,0xB3,0xAF,0x48,0x67,0x80,0xF6,0x82,0x34,0xAC,0xEA,0x0A,0x65,0x03,0x6A,0x4C,0xEC,0x2B,0x65,0x02,0x6A,0x88,0x33,0x44,0xEB,0x68,0x67,0x42,0xEB,0x04,0x60,0x03,0x24,0x41,0x45,0x53,0xCF,0x1C,0x10,0xC9,0xE0,0x48,0x32,0xCB,0xE2,0x48,0x32,0x69,0x67,0x61,0xE2,0x20,0xF0,0x48,0xA0,0x0E,0x2A,0x33,0xB2,0xFF,0xF7,0x1F,0x6B,0xA3,0x67,0x40,0xAA,0xE0,0xF1,0x0E,0x6C,0x4C,0xED,0x08,0xF0,0x00,0x6A,0x4D,0xED,0x00,0x18,0x9A,0x33,0x6C,0xED,0x00,0x6A,0x53,0xC8,0x01,0x6A,0x20,0xF0,0x48,0xC0,0x2A,0xB2,0x00,0x6B,0x49,0xE1,0x60,0xC2,0x24,0xB2,0x49,0xE1,0x60,0xC2,0x3B,0x10,0x1F,0xF7,0x00,0x6A,0xAC,0xEA,0xEC,0xED,0x0C,0x22,0x24,0xB2,0x01,0x6B,0x49,0xE1,0x60,0xC2,0x1E,0xB2,0x03,0x25,0x49,0xE1,0x60,0xC2,0x0B,0x10,0x49,0xE1,0xA0,0xC2,0x08,0x10,0x07,0x25,0x19,0xB2,0x4D,0xE1,0x40,0xA3,0xEC,0xEA,0x02,0x2A,0x01,0x6A,0x40,0xC3,0x58,0xA4,0xFF,0x6D,0x01,0x72,0x1E,0x61,0x14,0xB2,0x49,0xE1,0x40,0xA2,0xAC,0xEA,0x01,0x72,0x18,0x61,0xC4,0x32,0xC9,0xE2,0x48,0x32,0x11,0xB3,0xCB,0xE2,0x48,0x32,0x61,0xE2,0x20,0xF0,0x48,0xA0,0xAC,0xEA,0x09,0x22,0x0E,0xB2,0xF7,0xF7,0x1F,0x6D,0xE0,0xF1,0x0E,0x6C,0x40,0xAA,0x00,0x18,0x9A,0x33,0x4C,0xED,0x00,0x6A,0x53,0xC8,0x20,0xF0,0x48,0xC0,0x06,0x97,0x05,0x91,0x04,0x90,0x01,0x6A,0x00,0xEF,0x04,0x63,0x00,0x00,0x4C,0x7D,0x11,0x80,0xCC,0x05,0x11,0x80,0x00,0x46,0x11,0x80,0x98,0x5F,0x11,0x80,0xEE,0x01,0x00,0xB6,0xD4,0x05,0x11,0x80,0xF8,0x63,0x0E,0x62,0x0D,0xD1,0x0C,0xD0,0x00,0xA4,0x24,0xB3,0x04,0x31,0x09,0xE1,0x48,0x32,0x0B,0xE2,0x48,0x32,0x71,0xE2,0x20,0xF0,0x44,0xA4,0x02,0x72,0x20,0x61,0x1F,0xB2,0x01,0x6B,0x40,0x9A,0x40,0xF6,0x42,0x32,0x6C,0xEA,0x0E,0x22,0x20,0xF0,0x48,0xA4,0xFF,0x6B,0x6C,0xEA,0x09,0x22,0x1A,0xB2,0xF7,0xF7,0x1F,0x6D,0xE0,0xF1,0x0E,0x6C,0x40,0xAA,0x00,0x18,0x9A,0x33,0x4C,0xED,0x09,0xE1,0x13,0xB3,0x48,0x32,0x0B,0xE2,0x48,0x32,0x69,0xE2,0x00,0x6B,0x73,0xCA,0x20,0xF0,0x68,0xC2,0x16,0x10,0x39,0x6A,0x7D,0x67,0x50,0xCB,0x10,0xB2,0xFD,0x67,0x06,0xD0,0x80,0x9A,0x00,0x6D,0x04,0x06,0x24,0x4F,0xA9,0xE7,0x40,0xA2,0xAD,0xE6,0x01,0x4D,0x08,0x5D,0x40,0xC3,0xF9,0x61,0x06,0x95,0x07,0x96,0x00,0x18,0x40,0x1E,0x08,0x97,
+0x0E,0x97,0x0D,0x91,0x0C,0x90,0x01,0x6A,0x00,0xEF,0x08,0x63,0x98,0x5F,0x11,0x80,0x00,0x46,0x11,0x80,0xEE,0x01,0x00,0xB6,0x28,0x45,0x11,0x80,0xF8,0x63,0x0E,0x62,0x0D,0xD1,0x0C,0xD0,0xC0,0xA4,0xFF,0x6B,0x34,0xB2,0x6C,0xEE,0xC4,0x34,0x2A,0x65,0xC9,0xE4,0x48,0x32,0xCB,0xE2,0x48,0x32,0x0C,0x65,0x89,0x67,0x9D,0xE2,0x20,0xF0,0x44,0xA7,0x6C,0xED,0x6C,0xEA,0x02,0x72,0x04,0x60,0x20,0xF0,0x43,0xA7,0x6C,0xEA,0x35,0x2A,0x2B,0xB2,0x01,0x6B,0x00,0x9A,0x40,0xF6,0x02,0x32,0x6C,0xEA,0x45,0x22,0x02,0x75,0x43,0x61,0x03,0x6A,0x80,0xF6,0x02,0x35,0x4C,0xED,0x33,0xAF,0xA8,0x33,0x02,0x6A,0x44,0xEB,0x42,0xE9,0x04,0x60,0x03,0x25,0x41,0x41,0x53,0xCF,0x35,0x10,0x68,0x67,0xC9,0xE3,0x48,0x32,0xCB,0xE2,0x48,0x32,0x89,0x67,0x81,0xE2,0x20,0xF0,0x48,0xA0,0x0E,0x2A,0x1B,0xB2,0xFF,0xF7,0x1F,0x6B,0xA3,0x67,0x40,0xAA,0xE0,0xF1,0x0E,0x6C,0x4C,0xED,0x08,0xF0,0x00,0x6A,0x4D,0xED,0x00,0x18,0x9A,0x33,0x6C,0xED,0x00,0x6A,0x53,0xC8,0x01,0x6A,0x20,0xF0,0x48,0xC0,0x17,0x10,0x3A,0x6A,0x7D,0x67,0x50,0xCB,0x11,0xB2,0xFD,0x67,0x06,0xD6,0x80,0x9A,0x07,0xD5,0x04,0x06,0x00,0x6D,0x24,0x4F,0xA9,0xE7,0x40,0xA2,0xAD,0xE6,0x01,0x4D,0x08,0x5D,0x40,0xC3,0xF9,0x61,0x06,0x95,0x07,0x96,0x00,0x18,0x40,0x1E,0x08,0x97,0x0E,0x97,0x0D,0x91,0x0C,0x90,0x01,0x6A,0x00,0xEF,0x08,0x63,0x00,0x00,0x98,0x5F,0x11,0x80,0x00,0x46,0x11,0x80,0xEE,0x01,0x00,0xB6,0x28,0x45,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,0xFF,0xF7,0x1F,0x6A,0x8C,0xEA,0x04,0xD2,0x04,0x93,0x01,0x69,0x44,0xE9,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x20,0xB3,0x48,0x32,0x0D,0xD5,0x69,0xE2,0x05,0xD2,0x00,0x68,0x20,0x18,0xE4,0x06,0x90,0x67,0x01,0x48,0xFF,0x6B,0x6C,0xE8,0x45,0xE1,0x04,0x58,0x6C,0xE9,0xF6,0x61,0x05,0x94,0x44,0x41,0xA0,0xF0,0x88,0xAC,0x98,0xEA,0x17,0xB2,0x06,0xD4,0x60,0xF1,0x42,0xA2,0x6C,0xEA,0x02,0x5A,0x12,0xE9,0x00,0x65,0x06,0x61,0x40,0xF1,0x00,0x59,0x06,0x60,0xFF,0x69,0x41,0x49,0x03,0x10,0xEE,0x59,0x01,0x60,0xEE,0x69,0x00,0x1C,0xDD,0x31,0x00,0x65,0x05,0x93,0x02,0x67,0x26,0x32,0xA0,0xF0,0x48,0xCB,0x04,0x94,0x00,0x18,0x2A,0xFF,0x0D,0x95,0x9D,0x67,0x4C,0xAC,0x05,0x94,0xA0,0xF0,0x48,
+0xCC,0x00,0x1C,0xE5,0x31,0x90,0x67,0x0A,0x97,0x09,0x91,0x08,0x90,0x00,0xEF,0x06,0x63,0x48,0x60,0x11,0x80,0x48,0x5C,0x11,0x80,0xF8,0x63,0x0E,0x62,0x0D,0xD1,0x0C,0xD0,0x5D,0x67,0x03,0x46,0x10,0xD4,0x26,0x67,0x13,0xD7,0x06,0x04,0x40,0xF0,0xA4,0xCA,0x06,0x6E,0x00,0x18,0x2E,0x2E,0xB0,0x67,0x69,0xA1,0x9D,0x67,0x09,0xD3,0x40,0xF0,0x64,0xAC,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x4D,0xB3,0x48,0x32,0x69,0xE2,0x0A,0xD2,0x20,0xF0,0x58,0xA2,0x0D,0x72,0x3D,0x60,0x0E,0x52,0x03,0x60,0x06,0x72,0x04,0x60,0x7F,0x10,0x1B,0x72,0x36,0x60,0x7C,0x10,0x13,0x93,0x01,0x6A,0x00,0x6D,0x40,0xC3,0x80,0xA9,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0xC5,0x4A,0x4C,0xEC,0x0A,0x94,0x00,0x18,0xFD,0x1D,0x28,0x4C,0x09,0x93,0x9D,0x67,0x40,0xF0,0x44,0xAC,0x01,0x73,0x14,0x60,0xFF,0xF7,0x1F,0x6C,0x20,0x18,0x7C,0x2F,0x4C,0xEC,0x62,0x67,0x0A,0x92,0xE0,0xF0,0x9F,0xA2,0xFF,0x6A,0x4C,0xEC,0x20,0x6A,0x4C,0xEC,0x01,0x2C,0x64,0x67,0x01,0x73,0x7D,0x67,0x40,0xF0,0x44,0xAB,0x06,0x60,0xFF,0xF7,0x1F,0x6C,0x00,0x18,0xAD,0xE1,0x4C,0xEC,0x52,0x10,0xFF,0xF7,0x1F,0x6C,0x4C,0xEC,0x80,0x18,0x2C,0x34,0x06,0x05,0x4B,0x10,0x00,0x6C,0x40,0x6B,0x1F,0x6A,0x66,0xC0,0x00,0xF0,0x47,0xC8,0x8C,0xC1,0x6A,0xC0,0x27,0xB3,0x00,0xF0,0x4B,0xC8,0x10,0x6A,0x90,0xC1,0x8F,0xC0,0x4E,0xC0,0x50,0xAB,0xBD,0x67,0xDD,0x67,0x50,0xC0,0x50,0xAB,0xE0,0x6B,0x44,0x4D,0x42,0x32,0x54,0xC1,0x20,0xB2,0x92,0xC0,0x20,0x4E,0x41,0xA2,0x91,0x67,0x01,0x6F,0x48,0x32,0x6C,0xEA,0x56,0x32,0xC0,0xF3,0x00,0x6B,0x6D,0xEA,0x00,0xF0,0x53,0xC8,0x13,0x93,0x01,0x6A,0x00,0x18,0x37,0x40,0x40,0xC3,0x02,0x67,0x16,0x22,0x5D,0x67,0x40,0xF0,0x84,0xAA,0xFF,0xF7,0x1F,0x6B,0x00,0x18,0xAE,0x5D,0x6C,0xEC,0x0A,0x94,0x0A,0x96,0x00,0x6F,0x60,0xF2,0xBC,0xAC,0x7F,0x4E,0x04,0xD2,0xFF,0xF7,0x1F,0x6A,0x90,0x67,0x4C,0xED,0x00,0x18,0x6F,0x4E,0x6E,0x4E,0x10,0x93,0x00,0x6C,0x80,0xC3,0x07,0x10,0x10,0x93,0x0C,0x6A,0x40,0xC3,0x03,0x10,0x10,0x94,0x00,0x6A,0x40,0xC4,0x0E,0x97,0x0D,0x91,0x0C,0x90,0x00,0xEF,0x08,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x48,0x5C,0x11,0x80,0xC0,0x5B,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x00,0x1C,0xDD,0x31,
+0x00,0x65,0x02,0x67,0x0F,0xB2,0x0F,0xB3,0x40,0x9A,0x6E,0xEA,0x00,0x6B,0x02,0x2A,0x0E,0xB2,0x60,0x9A,0x0E,0xB5,0x62,0x33,0x62,0x33,0x40,0x9D,0xFF,0xF7,0x1F,0x6C,0x60,0x33,0x60,0x33,0x8C,0xEA,0x6D,0xEA,0x40,0xDD,0x00,0x18,0xFE,0x25,0x00,0x6C,0x00,0x1C,0xE5,0x31,0x90,0x67,0x05,0x97,0x04,0x90,0x00,0xEF,0x03,0x63,0x44,0x91,0x10,0x80,0x32,0x97,0x79,0x23,0x48,0x91,0x10,0x80,0x30,0x00,0x00,0xB5,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x2C,0xB5,0x01,0x68,0xFF,0x6E,0x40,0xF1,0x5E,0xA5,0x0C,0xEA,0x4A,0x22,0x2A,0xB2,0x00,0x6F,0xFF,0xF7,0x1F,0x6C,0x60,0xAA,0x02,0xF0,0x00,0x6A,0x6C,0xEA,0x25,0x2A,0x60,0xF1,0x42,0xA5,0xCC,0xEA,0x05,0x2A,0x01,0x10,0x00,0x6F,0x23,0xB2,0xE0,0xCA,0x2E,0x10,0x06,0x67,0x22,0xB1,0x23,0xB6,0x67,0x67,0xA4,0x67,0x64,0x34,0x69,0xE4,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x48,0x32,0x29,0xE2,0xE0,0xF0,0x4B,0xA2,0x0C,0xEA,0x01,0x72,0x05,0x61,0xC9,0xE4,0x40,0xAA,0xAC,0xEA,0x02,0x5A,0xE5,0x61,0x01,0x4B,0xAC,0xEB,0x0A,0x5B,0xEA,0x61,0x12,0x10,0x14,0xB2,0x60,0xAA,0x01,0x4B,0x60,0xCA,0x4F,0xAD,0x8C,0xEB,0x8C,0xEA,0x4A,0x32,0x8C,0xEA,0x43,0xEB,0x07,0x61,0x4D,0xAD,0x8C,0xEA,0x4A,0x32,0x8C,0xEA,0x43,0xEB,0x01,0x61,0xF0,0x67,0x09,0x27,0x00,0x18,0xB7,0xB5,0x00,0x65,0x00,0x18,0x31,0xBE,0x00,0x65,0x07,0xB2,0x00,0x6B,0x60,0xCA,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0x6A,0x00,0xEF,0x04,0x63,0x00,0x00,0x48,0x5C,0x11,0x80,0xE0,0x00,0x00,0xB6,0xC8,0xA0,0x11,0x80,0x48,0x60,0x11,0x80,0x10,0x06,0x11,0x80,0xFD,0x63,0x04,0x62,0x44,0xAC,0x04,0x72,0x0F,0x61,0x0A,0xB2,0x00,0x6B,0x00,0x18,0x3B,0x2B,0x60,0xC2,0x08,0xB6,0x00,0x6B,0x0A,0x6D,0xFF,0x6C,0xC9,0xE3,0x01,0x4B,0x8C,0xEB,0x04,0x5B,0xA0,0xC2,0xFA,0x61,0x04,0x97,0x00,0xEF,0x03,0x63,0x00,0x00,0xFE,0x08,0x11,0x80,0xB4,0x5B,0x11,0x80,0xFD,0x63,0x04,0x62,0x80,0x18,0x91,0x2B,0x00,0x65,0x0E,0xB2,0x00,0x6B,0x0F,0xB4,0x60,0xCA,0x0D,0xB2,0x02,0xF0,0x00,0x6D,0x04,0x97,0x60,0xC2,0x0C,0xB2,0x01,0xF0,0x00,0x6B,0xA0,0xF0,0x72,0xCC,0x6C,0xCA,0xAE,0xCA,0x80,0xF0,0x43,0xA4,0x05,0x6B,0x6B,0xEB,0x6C,0xEA,0xA0,0xF0,0xB6,0xCC,0x80,0xF0,0x43,0xC4,0x00,0xEF,0x03,0x63,0xC8,0xA0,0x11,0x80,0xCA,
+0xA0,0x11,0x80,0xDC,0x00,0x11,0x80,0x48,0x5C,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x44,0xAC,0xC9,0x72,0x24,0x61,0x00,0x1C,0xDD,0x31,0x00,0x65,0x15,0xB1,0x04,0xD2,0x60,0xF1,0x54,0xA1,0x40,0xF1,0x9E,0xA1,0x04,0x99,0x05,0xD2,0x80,0x6A,0x44,0xD9,0x55,0x6A,0x60,0xF1,0x54,0xC1,0x00,0x18,0xEB,0xA4,0x00,0x65,0x60,0xF1,0x54,0xA1,0x04,0xD9,0x55,0x72,0x04,0x60,0x00,0x18,0x31,0xBE,0x00,0x65,0x04,0x10,0x5D,0x67,0x54,0xA2,0x60,0xF1,0x54,0xC1,0x00,0x1C,0xE5,0x31,0x04,0x94,0x03,0x10,0x00,0x18,0x2F,0xB9,0x00,0x65,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x00,0x00,0x48,0x5C,0x11,0x80,0xFD,0x63,0x04,0x62,0x00,0x18,0x24,0xB4,0x00,0x65,0x04,0x97,0x00,0xEF,0x03,0x63,0x0D,0xB2,0xFF,0xF7,0x1F,0x6B,0xAC,0xEB,0x43,0xA2,0x01,0x6D,0xAC,0xEA,0x10,0x22,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x07,0xB3,0x48,0x32,0x69,0xE2,0x60,0xF2,0x4D,0xA2,0xAA,0xEA,0x03,0x61,0x45,0x67,0x20,0xE8,0xA0,0xC4,0x20,0xE8,0x00,0x6A,0x00,0x46,0x11,0x80,0x48,0x60,0x11,0x80,0xF8,0x63,0x0E,0x62,0x0D,0xD1,0x0C,0xD0,0xC4,0x67,0xFF,0xF7,0x1F,0x6D,0xAC,0xEE,0xFF,0x76,0x68,0x60,0xC4,0x32,0xC9,0xE2,0x4C,0x32,0xCB,0xE2,0x35,0xB3,0x4C,0x32,0xCB,0xE2,0x48,0x32,0x65,0xE2,0xC0,0xF0,0x74,0xA9,0x40,0x6F,0xAC,0xEB,0x6C,0xEF,0x25,0x27,0x04,0x6A,0x6C,0xEA,0x08,0x22,0xE0,0xF0,0x8D,0x41,0x00,0xF1,0xA7,0x41,0x00,0x18,0x47,0x43,0x0A,0xD6,0x0A,0x96,0x7D,0x67,0x01,0x6A,0x58,0xC3,0x86,0x67,0x00,0x6A,0x03,0x6E,0xBD,0x67,0x5A,0xC3,0x00,0x68,0x00,0xF2,0x4A,0xC1,0x18,0x4D,0x64,0x6A,0xE6,0x67,0x04,0xD2,0x00,0x18,0xA0,0xDD,0x05,0xD0,0x02,0x6C,0x00,0x18,0xE0,0xDC,0xB0,0x67,0x6F,0x99,0x4D,0xEB,0x6F,0xD9,0x2D,0x10,0xE0,0xF0,0x4C,0xA1,0xFF,0x6C,0x01,0x72,0x1C,0xB2,0x15,0x61,0x43,0xA2,0x01,0x6B,0x6C,0xEA,0x04,0x22,0xC0,0xF2,0x58,0xA1,0x8C,0xEA,0x1F,0x2A,0x33,0x6A,0x7D,0x67,0xBD,0x67,0x58,0xC3,0x86,0x67,0x64,0x6A,0x18,0x4D,0x02,0x6E,0x04,0xD2,0x00,0x18,0xA0,0xDD,0x05,0xD7,0x12,0x10,0x43,0xA2,0x01,0x6B,0x6C,0xEA,0x04,0x22,0xC0,0xF2,0x57,0xA1,0x8C,0xEA,0x0A,0x2A,0x60,0xF2,0x4D,0xA1,0x8C,0xEA,0x01,0x72,0x05,0x61,0x9D,0x67,0x20,0x4C,0x80,0x18,0x3D,0x35,
+0xA6,0x67,0xC0,0xF0,0x54,0xA9,0x07,0x6B,0x6B,0xEB,0x6C,0xEA,0xC0,0xF0,0x54,0xC9,0x0E,0x97,0x0D,0x91,0x0C,0x90,0x00,0xEF,0x08,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x00,0x46,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0xFF,0xF7,0x1F,0x6F,0xAC,0xEF,0xE4,0x32,0xE9,0xE2,0x4C,0x32,0xEB,0xE2,0x38,0xB3,0x4C,0x32,0xEB,0xE2,0x48,0x32,0x65,0xE2,0xC0,0xF0,0x54,0xA9,0xFF,0xF7,0x1F,0x6B,0xC4,0x67,0x6C,0xEA,0x02,0x6B,0x6C,0xEA,0x09,0x2A,0xC4,0xA4,0x01,0x6A,0x87,0x67,0x28,0x6D,0x4C,0xEE,0x20,0x18,0x9B,0x27,0x24,0x6F,0x52,0x10,0xF0,0xF0,0x0F,0x41,0xA5,0x46,0x90,0x67,0x08,0x6E,0x00,0x18,0x2E,0x2E,0x04,0xD7,0x29,0xB2,0x01,0x6D,0xFF,0x6E,0x60,0xA2,0x28,0xB2,0x04,0x97,0x83,0xA2,0xAC,0xEC,0x0E,0x24,0xC0,0xF2,0x56,0xA1,0xCC,0xEA,0x03,0x2A,0xC0,0xF2,0xB6,0xC1,0x0C,0x10,0x60,0xF2,0xBC,0xA9,0xFF,0xF7,0x1F,0x6A,0x00,0x6C,0x4C,0xED,0x29,0x10,0x20,0xF0,0x58,0xA1,0xCC,0xEA,0x03,0x72,0x1F,0x61,0x00,0xF1,0x46,0x81,0x00,0x52,0x17,0x60,0x7E,0x32,0x15,0x22,0xC0,0xF0,0x54,0xA9,0x04,0x68,0x03,0x6E,0x0D,0xEA,0x87,0x67,0xC0,0xF0,0x54,0xC9,0x00,0xF1,0xAF,0xC1,0x00,0x18,0x2D,0xE2,0xE6,0x67,0x7F,0x6C,0x00,0x18,0xE0,0xDC,0xB0,0x67,0x6F,0x99,0x4D,0xEB,0x6F,0xD9,0x13,0x10,0x80,0x18,0x4C,0x35,0x87,0x67,0x0F,0x10,0x60,0xF2,0xBC,0xA9,0xFF,0xF7,0x1F,0x6B,0x6C,0xED,0x00,0x18,0xF8,0x4E,0xD0,0x67,0xC0,0xF0,0x54,0xA9,0x03,0x6B,0x6B,0xEB,0x6C,0xEA,0xC0,0xF0,0x54,0xC9,0x08,0x97,0x07,0x91,0x06,0x90,0x01,0x6A,0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0xC0,0x5B,0x11,0x80,0x00,0x46,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,0xFF,0xF7,0x1F,0x69,0xAC,0xE9,0x24,0x32,0x29,0xE2,0x4C,0x32,0x2B,0xE2,0x38,0xB3,0x4C,0x32,0x2B,0xE2,0x48,0x32,0x0C,0xD4,0x61,0xE2,0xC0,0xF0,0x54,0xA8,0x66,0xA4,0xFF,0xF7,0x1F,0x6C,0x8C,0xEA,0x04,0x6E,0xCC,0xEA,0x06,0x22,0x00,0xF1,0x4F,0xA0,0xFF,0x6D,0xAC,0xEA,0x6E,0xEA,0x0D,0x22,0x0C,0x92,0xFF,0x6C,0x7F,0x6D,0xE4,0xA2,0x24,0x6A,0x04,0xD2,0x8C,0xEF,0x01,0x6A,0x91,0x67,0x00,0x18,0xEF,0xE1,0x4C,0xEF,0x47,0x10,0x02,0x5B,0x0B,0x60,0x0C,0x95,0x6C,0x34,0x11,0xE4,0xE0,0xF0,0x1F,0x4C,0x08,0x4D,0x08,0x6E,0x00,0x18,0x2E,0x2E,0x06,0xD3,0x06,
+0x93,0x21,0xB2,0x01,0x6D,0x83,0xA2,0xAC,0xEC,0x15,0x24,0xC0,0xF2,0x57,0xA0,0xFF,0x6C,0x8C,0xEA,0x07,0x2A,0x80,0x18,0x4C,0x35,0x91,0x67,0x01,0x6D,0xC0,0xF2,0xB7,0xC0,0x29,0x10,0x1A,0xB2,0x60,0xF2,0xBC,0xA8,0x00,0x6C,0xF0,0xA2,0x0C,0x92,0x08,0x4A,0x04,0xD2,0x11,0x10,0x20,0xF0,0x58,0xA0,0xFF,0x6D,0xAC,0xEA,0x03,0x72,0x04,0x61,0x00,0x18,0xA5,0xFF,0x91,0x67,0x16,0x10,0x10,0xB2,0x60,0xF2,0xBC,0xA8,0xF0,0xA2,0x0C,0x92,0x08,0x4A,0x04,0xD2,0xFF,0xF7,0x1F,0x6A,0x4C,0xED,0xFF,0x6A,0xC3,0x67,0x00,0x18,0x8A,0x41,0x4C,0xEF,0xC0,0xF0,0x54,0xA8,0x05,0x6B,0x6B,0xEB,0x6C,0xEA,0xC0,0xF0,0x54,0xC8,0x0A,0x97,0x09,0x91,0x08,0x90,0x00,0xEF,0x06,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x00,0x46,0x11,0x80,0xC0,0x5B,0x11,0x80,0xEF,0x63,0x20,0x62,0x1F,0xD1,0x1E,0xD0,0x64,0xAC,0xC4,0x67,0x24,0x73,0x22,0x61,0xB2,0xB2,0x60,0xF1,0x50,0xA2,0x1E,0x22,0x7D,0x67,0x01,0xF4,0x03,0x6A,0x40,0xF0,0x58,0xCB,0x00,0x1C,0xDD,0x31,0x00,0x65,0x00,0x18,0xFE,0x4F,0x02,0x67,0x00,0x6D,0x9D,0x67,0xC5,0x67,0x80,0x18,0x95,0x2B,0x58,0x4C,0x80,0x18,0x6B,0x2F,0x03,0x6C,0x00,0x18,0xC4,0x53,0x00,0x6C,0x20,0x18,0x10,0x2F,0x00,0x65,0x00,0x1C,0xE5,0x31,0x90,0x67,0x3C,0x11,0xFF,0xF7,0x1F,0x69,0x51,0x67,0x6C,0xEA,0x9C,0x72,0x1D,0x61,0x00,0x9E,0xFF,0x6F,0x44,0xA0,0x46,0x32,0x2C,0xEA,0x18,0x72,0x16,0x61,0xBA,0xA0,0x99,0xA0,0xDD,0x67,0xEC,0xED,0xEC,0xEC,0x00,0x18,0x1A,0xDF,0x5A,0x4E,0x06,0x2A,0xBD,0x67,0x40,0xF0,0x9A,0xAD,0x20,0x18,0x62,0x23,0x2C,0xEC,0x20,0x18,0xCF,0x06,0x90,0x67,0x93,0xB2,0xB0,0x67,0x80,0x9A,0x12,0x11,0xFF,0xF7,0x1F,0x6C,0x44,0x67,0x6C,0xEA,0x93,0x72,0x29,0x61,0x00,0x9E,0x44,0xA0,0x46,0x32,0x11,0x72,0x07,0x60,0x7F,0x72,0x22,0x61,0x45,0xA0,0xFF,0x6B,0x6C,0xEA,0x17,0x72,0x1D,0x61,0x6B,0xA8,0x8C,0xEB,0xFF,0x73,0x19,0x60,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x84,0xB3,0x48,0x32,0x69,0xE2,0xBF,0x9A,0x82,0x67,0x00,0x18,0xB2,0x69,0x1C,0xD6,0x01,0x72,0x64,0xA0,0x1C,0x96,0x03,0x61,0x01,0x6A,0x6D,0xEA,0x03,0x10,0x02,0x6A,0x4B,0xEA,0x6C,0xEA,0x44,0xC0,0x44,0xAE,0xFF,0xF7,0x1F,0x6C,0x93,0x72,0xE0,0xF0,0x01,0x61,0x40,0x9E,0x18,0xD2,0x18,0x95,
+0x64,0xA2,0xFF,0x6A,0xA5,0xA5,0x22,0x67,0x6C,0xE9,0x4C,0xED,0x18,0x92,0x19,0xD5,0x26,0x31,0x4B,0xAA,0x8C,0xE9,0x7F,0x71,0x8C,0xEA,0x1A,0xD2,0x02,0x61,0x04,0x75,0x07,0x60,0x28,0x71,0x05,0x60,0x2D,0x71,0x03,0x60,0x2E,0x71,0xC0,0xF0,0x06,0x61,0xFF,0x68,0xC1,0x9E,0x50,0x67,0x6C,0xEA,0x18,0x93,0x46,0x31,0xA6,0x67,0x9D,0x67,0xDA,0xC3,0x0C,0xE9,0x5C,0x4C,0x0C,0xED,0x00,0x18,0x3B,0x94,0x1C,0xD6,0x7F,0x71,0x58,0x67,0x1B,0xD2,0x1C,0x96,0x04,0x22,0xE1,0xF4,0x03,0x6F,0x00,0x6B,0x05,0x10,0x18,0x94,0x01,0xF4,0x16,0x6F,0x65,0xA4,0x0C,0xEB,0x10,0x6A,0x04,0xD2,0x5B,0xB2,0x18,0x95,0x08,0xD3,0x05,0xD2,0x17,0x92,0x07,0xD1,0x01,0x6B,0x06,0xD2,0x59,0xA5,0x0A,0xD6,0x04,0x6C,0x09,0xD2,0x44,0xA5,0x6C,0xEA,0x0B,0xD2,0x4B,0xAD,0x0C,0xD2,0x54,0xB2,0x49,0xE6,0x44,0xA2,0x82,0xF6,0x17,0x6E,0x6C,0xEA,0x0D,0xD2,0x44,0xA5,0x0E,0xD2,0x45,0xA5,0x0F,0xD2,0x46,0xA5,0x10,0xD2,0x47,0xA5,0x11,0xD2,0x48,0xA5,0x12,0xD2,0x49,0xA5,0x13,0xD2,0x4A,0xA5,0x14,0xD2,0x4B,0xA5,0xFA,0x6D,0x20,0x18,0x1B,0x32,0x15,0xD2,0x1A,0x92,0xFF,0x72,0x72,0x60,0x1A,0x93,0x44,0x32,0xFF,0x6C,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x3F,0xB3,0x48,0x32,0x61,0xE2,0xE0,0xF0,0x4B,0xA0,0x8C,0xEA,0x01,0x72,0x62,0x61,0x20,0xF0,0x58,0xA0,0xFF,0x6D,0xAC,0xEA,0x0B,0x72,0x13,0x61,0x37,0xB2,0x18,0x95,0x00,0x18,0xE0,0x1D,0x80,0x9A,0x00,0xF2,0x54,0xA0,0xFF,0x6B,0x6C,0xEA,0x01,0x72,0x5B,0x61,0x8D,0x98,0x00,0x18,0x1A,0x1E,0x00,0x6D,0x00,0x6A,0x00,0xF2,0x54,0xC0,0x53,0x10,0x1A,0x94,0x00,0x18,0x5E,0xDE,0x18,0x95,0x1B,0x94,0x08,0x2C,0x19,0x95,0x04,0x75,0x05,0x61,0x18,0x94,0x80,0x18,0xCA,0x35,0x1A,0x95,0x3B,0x10,0x28,0x71,0x05,0x61,0x18,0x94,0x80,0x18,0x8A,0x35,0x1A,0x95,0x34,0x10,0x2D,0x71,0x15,0x61,0x20,0xF0,0x58,0xA0,0x03,0x72,0x2E,0x60,0x05,0x72,0x2C,0x60,0x06,0x72,0x2A,0x60,0x07,0x72,0x28,0x60,0x08,0x72,0x26,0x60,0x09,0x72,0x24,0x60,0x0A,0x72,0x22,0x60,0x18,0x94,0x00,0x18,0x35,0xFC,0x1A,0x95,0x1D,0x10,0x2E,0x71,0x1B,0x61,0x20,0xF0,0x58,0xA0,0x03,0x72,0x0C,0x60,0x05,0x72,0x0A,0x60,0x06,0x72,0x08,0x60,0x07,0x72,0x06,0x60,0x08,0x72,0x04,0x60,0x09,0x72,0x02,0x60,0x0A,0x72,0x07,
+0x61,0x1A,0x94,0x2E,0x6D,0x02,0x6E,0x20,0x18,0x9B,0x27,0x24,0x6F,0x04,0x10,0x18,0x94,0x00,0x18,0x0B,0xFC,0x1A,0x95,0x09,0xB2,0x18,0x95,0x80,0x9A,0x00,0x18,0xE0,0x1D,0x00,0x65,0x03,0x10,0x20,0x18,0xFA,0x24,0x86,0x67,0x20,0x97,0x1F,0x91,0x1E,0x90,0x00,0xEF,0x11,0x63,0x00,0x00,0x48,0x5C,0x11,0x80,0x64,0x52,0x11,0x80,0x48,0x60,0x11,0x80,0xF0,0xA5,0x10,0x80,0x04,0x46,0x11,0x80,0xFF,0x63,0x00,0xD0,0x0F,0xB0,0xFF,0xF7,0x1F,0x6A,0x4C,0xEC,0x00,0x6B,0xE2,0x67,0xFF,0x6E,0x64,0x32,0x69,0xE2,0x48,0x32,0x6B,0xE2,0x48,0x32,0x15,0xE2,0x43,0xAD,0xEC,0xEA,0x8E,0xEA,0x05,0x2A,0x42,0x9D,0x08,0x72,0x02,0x61,0x00,0x6A,0x05,0x10,0x01,0x4B,0xCC,0xEB,0x03,0x5B,0xED,0x61,0x01,0x6A,0x00,0x90,0x20,0xE8,0x01,0x63,0x98,0x5F,0x11,0x80,0xFD,0x63,0x04,0x62,0x16,0xB2,0x00,0x6B,0x60,0xF1,0x43,0xA2,0x01,0x72,0x14,0x61,0x14,0xB6,0x83,0x67,0xFF,0x6D,0x84,0x32,0x89,0xE2,0x4C,0x32,0x8B,0xE2,0x4C,0x32,0x8B,0xE2,0x48,0x32,0xC9,0xE2,0xE0,0xF0,0x4B,0xA2,0xAC,0xEA,0x01,0x72,0x0D,0x60,0x01,0x4C,0xAC,0xEC,0x0A,0x5C,0xEF,0x61,0x09,0xB2,0x60,0xF1,0x43,0xA2,0x02,0x5A,0x02,0x60,0x43,0x67,0x07,0x23,0x0C,0x6A,0x05,0x10,0x80,0x18,0xC5,0x36,0x00,0x65,0x62,0x67,0xF2,0x17,0x04,0x97,0x00,0xEF,0x03,0x63,0x00,0x00,0x48,0x5C,0x11,0x80,0x48,0x60,0x11,0x80,0xF9,0x63,0x0C,0x62,0x0B,0xD1,0x0A,0xD0,0x00,0x6A,0x0F,0xD5,0x06,0xD2,0x40,0xAC,0x24,0x67,0x01,0xF0,0x0B,0x72,0x0C,0x61,0xBD,0x67,0x80,0x18,0x0D,0x2C,0x10,0x4D,0x80,0xA9,0xFF,0xF7,0x1F,0x6B,0xA2,0x67,0x00,0x18,0xC5,0x4A,0x6C,0xEC,0xAC,0x10,0x00,0xF4,0x19,0x72,0x2C,0x61,0x49,0xA4,0x03,0x5A,0x02,0x61,0x01,0x6A,0x49,0xC4,0x7D,0x67,0x58,0xA3,0x00,0x1C,0xDD,0x31,0x52,0xC3,0xBD,0x67,0x91,0x67,0x12,0x4D,0x00,0x18,0xB7,0x45,0x07,0xD2,0x02,0x67,0x0C,0x2A,0xA9,0xA1,0xFF,0x6B,0x20,0x6A,0x6C,0xED,0xB8,0x35,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0xAA,0x6C,0x00,0x18,0xB6,0x33,0x4C,0xED,0x00,0x1C,0xE5,0x31,0x07,0x94,0x7D,0x67,0x52,0xA3,0xFF,0x6B,0x6C,0xEA,0x61,0x2A,0x80,0xA9,0xFF,0xF7,0x1F,0x6A,0xB0,0x67,0x4C,0xEC,0x58,0x10,0x00,0xF4,0x05,0x72,0x06,0x61,0x4B,0xA4,0x03,0x5A,0x79,0x61,0x01,0x6A,0x4B,0xC4,0x76,0x10,0x41,0xF4,0x12,0x72,
+0x10,0x61,0x00,0x18,0xE5,0x41,0x00,0x65,0x06,0x94,0x00,0x18,0x78,0x36,0x02,0x67,0x80,0xA9,0x06,0x96,0xFF,0xF7,0x1F,0x6A,0x4C,0xEC,0x00,0x18,0x33,0x4B,0xB0,0x67,0x3F,0x10,0x01,0xF0,0x04,0x72,0x3F,0x61,0x04,0xA4,0xFF,0xF7,0x1F,0x6A,0xFF,0xF7,0x1F,0x6B,0x00,0x30,0x4C,0xE8,0x43,0xA4,0xBD,0x67,0x14,0x4D,0x4D,0xE8,0x6C,0xE8,0x00,0x18,0x2A,0xDF,0x90,0x67,0x04,0x22,0x5D,0x67,0x0A,0xCA,0x02,0x6A,0x23,0x10,0x7D,0x67,0xAA,0xAB,0xFF,0xF7,0x1F,0x6B,0xAC,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x27,0xB3,0x48,0x32,0x69,0xE2,0x20,0xF0,0x78,0xA2,0xFF,0x6A,0x4C,0xEB,0x12,0x73,0x0A,0x60,0x19,0x73,0x08,0x60,0x80,0xA9,0xFF,0xF7,0x1F,0x6A,0x0C,0x6D,0x00,0x18,0xC5,0x4A,0x4C,0xEC,0x2E,0x10,0xFF,0xF7,0x1F,0x6C,0x00,0x18,0x0C,0x48,0xAC,0xEC,0x80,0xA9,0xA2,0x67,0x00,0x18,0xC5,0x4A,0x00,0x65,0x01,0x6B,0x06,0xD3,0x21,0x10,0x21,0xF4,0x06,0x72,0x1E,0x61,0x80,0x18,0xD6,0x36,0x00,0x65,0x10,0x2A,0x14,0xB0,0x7D,0x67,0x78,0xA3,0x60,0xF1,0x43,0xA0,0x91,0x67,0x60,0xF1,0x63,0xC0,0x00,0x18,0xFC,0x52,0x08,0xD2,0x7D,0x67,0x20,0xF0,0x60,0xA3,0x60,0xF1,0x63,0xC0,0x80,0xA9,0x06,0x96,0xFF,0xF7,0x1F,0x6B,0x6C,0xEC,0x00,0x18,0x33,0x4B,0xA2,0x67,0x01,0x6A,0x06,0xD2,0x06,0x92,0x03,0x22,0x0F,0x93,0x66,0x6A,0x40,0xC3,0x0C,0x97,0x0B,0x91,0x0A,0x90,0x01,0x6A,0x00,0xEF,0x07,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x48,0x5C,0x11,0x80,0xF5,0x63,0x14,0x62,0x13,0xD1,0x12,0xD0,0x00,0x6D,0x17,0xF7,0x0C,0x6E,0x00,0x18,0x01,0xA0,0x33,0x6C,0x61,0xB4,0x20,0x18,0xD6,0x32,0x00,0x69,0x20,0x18,0x5B,0x30,0x00,0x65,0x00,0x18,0xA6,0x5C,0x00,0x65,0x00,0x18,0xC8,0x8A,0x00,0x65,0x00,0x18,0xA3,0x9B,0x00,0x65,0x5A,0xB4,0x00,0x18,0x44,0x81,0x00,0x65,0x59,0xB0,0x00,0x18,0x4C,0x81,0x90,0x67,0x87,0x40,0x00,0x18,0x4C,0x81,0x01,0x4C,0x56,0xB4,0x57,0xB5,0x20,0xC0,0x00,0x18,0x2E,0x2E,0x30,0x6E,0x55,0xB5,0x88,0x40,0xD8,0x4C,0x00,0x18,0x2E,0x2E,0x30,0x6E,0x53,0xB5,0x87,0x40,0x11,0x4C,0x00,0x18,0x2E,0x2E,0x18,0x6E,0x51,0xB0,0x03,0x6B,0x40,0x98,0x42,0x32,0x4A,0x32,0x6C,0xEA,0x6A,0xEA,0x05,0x60,0x4E,0xB2,0x20,0xF1,0x2C,0xC2,0x20,0xF1,0x36,0xC2,0x00,0x18,0x04,0xF6,0x00,
+0x65,0x00,0x18,0x48,0x3C,0x00,0x65,0x00,0x18,0x71,0x32,0x00,0x65,0x00,0x18,0xE2,0x24,0x00,0x65,0x00,0x18,0x9A,0x7E,0x00,0x65,0x00,0x18,0xB5,0xC8,0x00,0x65,0x45,0xB3,0x43,0xB2,0x60,0xDA,0x00,0x18,0x0B,0x2B,0x00,0x65,0x40,0x98,0x0F,0x6B,0x46,0x32,0x6C,0xEA,0x03,0x72,0x05,0x61,0x9D,0x67,0x40,0x4C,0x00,0x18,0x1B,0x28,0x00,0x6D,0x00,0x18,0xE9,0x2F,0x00,0x65,0x80,0x18,0x54,0x2A,0x00,0x65,0x20,0x18,0xA2,0x39,0x00,0x65,0x80,0x18,0x08,0x2A,0x00,0x65,0x00,0x1C,0xAD,0x31,0x00,0x65,0x29,0xF6,0x00,0x6D,0x00,0x18,0x17,0x2D,0x01,0x6C,0x09,0x6A,0x04,0xD2,0x32,0xB2,0x2F,0xB3,0x01,0x6C,0x05,0xD2,0x9B,0xF4,0x0D,0x6A,0x06,0xD2,0x32,0xF0,0x0E,0x6A,0x07,0xD2,0x2E,0xB2,0xFA,0x6D,0x8A,0xF2,0x01,0x6E,0x40,0x9A,0xA1,0xF3,0x16,0x6F,0x08,0xD2,0x40,0xF0,0x41,0xA3,0x09,0xD2,0x40,0xF0,0x40,0xA3,0x0A,0xD2,0x20,0xF0,0x5F,0xA3,0x0B,0xD2,0x20,0xF0,0x5E,0xA3,0x0C,0xD2,0x20,0xF0,0x5D,0xA3,0x0D,0xD2,0x20,0xF0,0x5C,0xA3,0x20,0x18,0x1B,0x32,0x0E,0xD2,0x21,0xB2,0x22,0xB3,0x40,0x9A,0x6E,0xEA,0x19,0x2A,0x21,0xB1,0x21,0xB3,0x40,0x99,0x6E,0xEA,0x14,0x2A,0x20,0xB0,0x21,0xB2,0x21,0xB3,0x80,0x98,0x8C,0xEA,0x6E,0xEA,0x0B,0x2A,0x20,0xB3,0x00,0xF6,0x82,0x32,0x00,0x6D,0x3F,0xF4,0x00,0x6C,0x00,0x18,0xFA,0x8B,0x40,0xC3,0x00,0x6A,0x40,0xD8,0x00,0x6A,0x40,0xD9,0x13,0xB3,0x12,0xB2,0x20,0x18,0x3D,0x36,0x60,0xDA,0x14,0x97,0x13,0x91,0x12,0x90,0x00,0xEF,0x0B,0x63,0x84,0xC8,0x00,0x80,0x03,0x00,0x00,0xC4,0x98,0x24,0x11,0x80,0x38,0x24,0x11,0x80,0x58,0xDF,0x10,0x80,0xA0,0xDF,0x10,0x80,0x88,0xDF,0x10,0x80,0x6C,0x1D,0x11,0x80,0xDC,0x00,0x11,0x80,0x5C,0xA1,0x00,0xB0,0x00,0x00,0x01,0x00,0xF0,0xA5,0x10,0x80,0x90,0x1E,0x11,0x80,0x3C,0x91,0x10,0x80,0xEF,0xBE,0x23,0x87,0x44,0x91,0x10,0x80,0x32,0x97,0x79,0x23,0x40,0x91,0x10,0x80,0xFF,0xFF,0xFF,0x00,0xEE,0xFF,0xC0,0x00,0xD0,0x00,0x11,0x80,0x00,0x00,0x00,0x00,0x2E,0x5A,0x2C,0x4B,0xCF,0x9D,0xF2,0xCB,0x74,0x9C,0x13,0xCE,0x57,0xF4,0x4C,0x54,0x48,0xA9,0xD3,0x53,0xC5,0x19,0x73,0x6F,0xF7,0xEB,0x68,0x53,0xCC,0xAE,0x50,0xF1,0x57,0x02,0xE2,0x66,0xA3,0x5C,0xBC,0xD3,0xB7,0xA6,0x2F,0xC9,0xAE,0xDC,0x77,0x9E,0x07,0x91,0x5F,0x86,0x91,0x8D,
+0xDC,0x27,0x00,0x5D,0xF1,0xD6,0xCF,0x0C,0x14,0x2B,0x62,0x5E,0xD2,0xEF,0xF4,0xA5,0x18,0xFF,0x15,0x20,0x70,0x09,0x98,0x44,0x21,0xA6,0x58,0x6F,0x9F,0xC3,0xFE,0x7E,0x43,0x29,0xD2,0x80,0x9E,0xA5,0x11,0x25,0xF8,0xED,0xB0,0x9D,0x42,0xB8,0x1B,0xC5,0xBD,0x00,0x9F,0x79,0xE4,0xB5,0x9D,0xBB,0xAA,0x85,0x7F,0xCA,0x85,0x6F,0xB9,0xF7,0xEA,0x25,0x07,0x04,0x05,0x01,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x02,0x04,0x00,0x00,0x00,0x01,0x03,0x02,0x04,0x00,0x00,0x00,0x00,0x1B,0x00,0xB7,0x00,0x53,0x01,0x36,0x00,0x6F,0x01,0xA7,0x02,0x53,0x00,0x28,0x02,0xFD,0x03,0x25,0x00,0x04,0x0B,0x0F,0x04,0x0A,0x0E,0x08,0x0B,0x0F,0x00,0x00,0x00,0x05,0x41,0x32,0x12,0x00,0x00,0x00,0x00,0x8D,0xDC,0x2E,0x90,
+};
+
+#endif //CONFIG_MP_INCLUDED
+#ifndef CONFIG_PHY_SETTING_WITH_ODM
+const u32 Rtl8723SPHY_REG_2TArray[Rtl8723SPHY_REG_2TArrayLength] = {
+0x0, };
+
+const u32 Rtl8723SPHY_REG_1TArray[Rtl8723SPHY_REG_1TArrayLength] = {
+0x800,0x80040000,
+0x804,0x00000003,
+0x808,0x0000fc00,
+0x80c,0x0000000a,
+0x810,0x10005388,
+0x814,0x020c3d10,
+0x818,0x02200385,
+0x81c,0x00000000,
+0x820,0x01000100,
+0x824,0x00390004,
+0x828,0x00000000,
+0x82c,0x00000000,
+0x830,0x00000000,
+0x834,0x00000000,
+0x838,0x00000000,
+0x83c,0x00000000,
+0x840,0x00010000,
+0x844,0x00000000,
+0x848,0x00000000,
+0x84c,0x00000000,
+0x850,0x00000000,
+0x854,0x00000000,
+0x858,0x569a569a,
+0x85c,0x001b25a4,
+0x860,0x66f60110,
+0x864,0x061f0130,
+0x868,0x00000000,
+0x86c,0x32323200,
+0x870,0x07000760,
+0x874,0x22004000,
+0x878,0x00000808,
+0x87c,0x00000000,
+0x880,0xc0083070,
+0x884,0x000004d5,
+0x888,0x00000000,
+0x88c,0xccc000c0,
+0x890,0x00000800,
+0x894,0xfffffffe,
+0x898,0x40302010,
+0x89c,0x00706050,
+0x900,0x00000000,
+0x904,0x00000023,
+0x908,0x00000000,
+0x90c,0x81121111,
+0xa00,0x00d047c8,
+0xa04,0x80ff000c,
+0xa08,0x8c838300,
+0xa0c,0x2e68120f,
+0xa10,0x9500bb78,
+0xa14,0x11144028,
+0xa18,0x00881117,
+0xa1c,0x89140f00,
+0xa20,0x1a1b0000,
+0xa24,0x090e1317,
+0xa28,0x00000204,
+0xa2c,0x00d30000,
+0xa70,0x101fbf00,
+0xa74,0x00000007,
+0xa78,0x00000900,
+0xc00,0x48071d40,
+0xc04,0x03a05611,
+0xc08,0x000000e4,
+0xc0c,0x6c6c6c6c,
+0xc10,0x08800000,
+0xc14,0x40000100,
+0xc18,0x08800000,
+0xc1c,0x40000100,
+0xc20,0x00000000,
+0xc24,0x00000000,
+0xc28,0x00000000,
+0xc2c,0x00000000,
+0xc30,0x69e9ac44,
+0xc34,0x469652cf,
+0xc38,0x49795994,
+0xc3c,0x0a97971c,
+0xc40,0x1f7c403f,
+0xc44,0x000100b7,
+0xc48,0xec020107,
+0xc4c,0x007f037f,
+0xc50,0x69543420,
+0xc54,0x43bc0094,
+0xc58,0x69543420,
+0xc5c,0x433c0094,
+0xc60,0x00000000,
+0xc64,0x7116848b,
+0xc68,0x47c00bff,
+0xc6c,0x00000036,
+0xc70,0x2c7f000d,
+0xc74,0x018610db,
+0xc78,0x0000001f,
+0xc7c,0x00b91612,
+0xc80,0x40000100,
+0xc84,0x20f60000,
+0xc88,0x40000100,
+0xc8c,0x20200000,
+0xc90,0x00121820,
+0xc94,0x00000000,
+0xc98,0x00121820,
+0xc9c,0x00007f7f,
+0xca0,0x00000000,
+0xca4,0x00000080,
+0xca8,0x00000000,
+0xcac,0x00000000,
+0xcb0,0x00000000,
+0xcb4,0x00000000,
+0xcb8,0x00000000,
+0xcbc,0x28000000,
+0xcc0,0x00000000,
+0xcc4,0x00000000,
+0xcc8,0x00000000,
+0xccc,0x00000000,
+0xcd0,0x00000000,
+0xcd4,0x00000000,
+0xcd8,0x64b22427,
+0xcdc,0x00766932,
+0xce0,0x00222222,
+0xce4,0x00000000,
+0xce8,0x37644302,
+0xcec,0x2f97d40c,
+0xd00,0x00080740,
+0xd04,0x00020401,
+0xd08,0x0000907f,
+0xd0c,0x20010201,
+0xd10,0xa0633333,
+0xd14,0x3333bc43,
+0xd18,0x7a8f5b6b,
+0xd2c,0xcc979975,
+0xd30,0x00000000,
+0xd34,0x80608000,
+0xd38,0x00000000,
+0xd3c,0x00027293,
+0xd40,0x00000000,
+0xd44,0x00000000,
+0xd48,0x00000000,
+0xd4c,0x00000000,
+0xd50,0x6437140a,
+0xd54,0x00000000,
+0xd58,0x00000000,
+0xd5c,0x30032064,
+0xd60,0x4653de68,
+0xd64,0x04518a3c,
+0xd68,0x00002101,
+0xd6c,0x2a201c16,
+0xd70,0x1812362e,
+0xd74,0x322c2220,
+0xd78,0x000e3c24,
+0xe00,0x2a2a2a2a,
+0xe04,0x2a2a2a2a,
+0xe08,0x03902a2a,
+0xe10,0x2a2a2a2a,
+0xe14,0x2a2a2a2a,
+0xe18,0x2a2a2a2a,
+0xe1c,0x2a2a2a2a,
+0xe28,0x00000000,
+0xe30,0x1000dc1f,
+0xe34,0x10008c1f,
+0xe38,0x02140102,
+0xe3c,0x681604c2,
+0xe40,0x01007c00,
+0xe44,0x01004800,
+0xe48,0xfb000000,
+0xe4c,0x000028d1,
+0xe50,0x1000dc1f,
+0xe54,0x10008c1f,
+0xe58,0x02140102,
+0xe5c,0x28160d05,
+0xe60,0x00000008,
+0xe68,0x001b25a4,
+0xe6c,0x631b25a0,
+0xe70,0x631b25a0,
+0xe74,0x081b25a0,
+0xe78,0x081b25a0,
+0xe7c,0x081b25a0,
+0xe80,0x081b25a0,
+0xe84,0x631b25a0,
+0xe88,0x081b25a0,
+0xe8c,0x631b25a0,
+0xed0,0x631b25a0,
+0xed4,0x631b25a0,
+0xed8,0x631b25a0,
+0xedc,0x001b25a0,
+0xee0,0x001b25a0,
+0xeec,0x6b1b25a0,
+0xf14,0x00000003,
+0xf4c,0x00000000,
+0xf00,0x00000300,
+};
+
+const u32 Rtl8723SPHY_ChangeTo_1T1RArray[Rtl8723SPHY_ChangeTo_1T1RArrayLength] = {
+0x0, };
+
+const u32 Rtl8723SPHY_ChangeTo_1T2RArray[Rtl8723SPHY_ChangeTo_1T2RArrayLength] = {
+0x0, };
+
+const u32 Rtl8723SPHY_ChangeTo_2T2RArray[Rtl8723SPHY_ChangeTo_2T2RArrayLength] = {
+0x0, };
+
+const u32 Rtl8723SRadioA_2TArray[Rtl8723SRadioA_2TArrayLength] = {
+0x0, };
+
+const u32 Rtl8723SRadioB_2TArray[Rtl8723SRadioB_2TArrayLength] = {
+0x0, };
+
+const u32 Rtl8723SRadioA_1TArray[Rtl8723SRadioA_1TArrayLength] = {
+0x000,0x00030159,
+0x001,0x00031284,
+0x002,0x00098000,
+0x003,0x00039c63,
+0x004,0x000210e7,
+0x009,0x0002044f,
+0x00a,0x0001a3f1,
+0x00b,0x00014787,
+0x00c,0x000896fe,
+0x00d,0x0000e02c,
+0x00e,0x00039ce7,
+0x00f,0x00000451,
+0x019,0x00000000,
+0x01a,0x00030355,
+0x01b,0x00060a00,
+0x01c,0x000fc378,
+0x01d,0x000a1250,
+0x01e,0x0000024f,
+0x01f,0x00000000,
+0x020,0x0000b614,
+0x021,0x0006c000,
+0x022,0x00000000,
+0x023,0x00001558,
+0x024,0x00000060,
+0x025,0x00000483,
+0x026,0x0004f000,
+0x027,0x000ec7d9,
+0x028,0x00057730,
+0x029,0x00004783,
+0x02a,0x00000001,
+0x02b,0x00021334,
+0x02a,0x00000000,
+0x02b,0x00000054,
+0x02a,0x00000001,
+0x02b,0x00000808,
+0x02b,0x00053333,
+0x02c,0x0000000c,
+0x02a,0x00000002,
+0x02b,0x00000808,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000003,
+0x02b,0x00000808,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000004,
+0x02b,0x00000808,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x00000005,
+0x02b,0x00000808,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x00000006,
+0x02b,0x00000709,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000007,
+0x02b,0x00000709,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000008,
+0x02b,0x0000060a,
+0x02b,0x0004b333,
+0x02c,0x0000000d,
+0x02a,0x00000009,
+0x02b,0x0000060a,
+0x02b,0x00053333,
+0x02c,0x0000000d,
+0x02a,0x0000000a,
+0x02b,0x0000060a,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x0000000b,
+0x02b,0x0000060a,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x0000000c,
+0x02b,0x0000060a,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x0000000d,
+0x02b,0x0000060a,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x0000000e,
+0x02b,0x0000050b,
+0x02b,0x00066666,
+0x02c,0x0000001a,
+0x02a,0x000e0000,
+0x010,0x0004000f,
+0x011,0x000e31fc,
+0x010,0x0006000f,
+0x011,0x000ff9f8,
+0x010,0x0002000f,
+0x011,0x000203f9,
+0x010,0x0003000f,
+0x011,0x000ff500,
+0x010,0x00000000,
+0x011,0x00000000,
+0x010,0x0008000f,
+0x011,0x0003f100,
+0x010,0x0009000f,
+0x011,0x00023100,
+0x012,0x00032000,
+0x012,0x00071000,
+0x012,0x000b0000,
+0x012,0x000fc000,
+0x013,0x000287b3,
+0x013,0x000244b7,
+0x013,0x000204ab,
+0x013,0x0001c49f,
+0x013,0x00018493,
+0x013,0x0001429b,
+0x013,0x00010299,
+0x013,0x0000c29c,
+0x013,0x000081a0,
+0x013,0x000040ac,
+0x013,0x00000020,
+0x014,0x0001944c,
+0x014,0x00059444,
+0x014,0x0009944c,
+0x014,0x000d9444,
+0x015,0x0000f474,
+0x015,0x0004f477,
+0x015,0x0008f474,
+0x015,0x000cf474,
+0x016,0x00000339,
+0x016,0x00040339,
+0x016,0x00080339,
+0x016,0x000c0366,
+0x000,0x00010159,
+0x018,0x0000f401,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01f,0x00000003,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01e,0x00000247,
+0x01f,0x00000000,
+0x000,0x00030159,
+};
+
+const u32 Rtl8723SRadioB_1TArray[Rtl8723SRadioB_1TArrayLength] = {
+0x0, };
+
+const u32 Rtl8723SRadioB_GM_Array[Rtl8723SRadioB_GM_ArrayLength] = {
+0x0, };
+
+const u32 Rtl8723SMAC_2T_Array[Rtl8723SMAC_2T_ArrayLength] = {
+0x420,0x00000080,
+0x423,0x00000000,
+0x430,0x00000000,
+0x431,0x00000000,
+0x432,0x00000000,
+0x433,0x00000001,
+0x434,0x00000004,
+0x435,0x00000005,
+0x436,0x00000006,
+0x437,0x00000007,
+0x438,0x00000000,
+0x439,0x00000000,
+0x43a,0x00000000,
+0x43b,0x00000001,
+0x43c,0x00000004,
+0x43d,0x00000005,
+0x43e,0x00000006,
+0x43f,0x00000007,
+0x440,0x0000005d,
+0x441,0x00000001,
+0x442,0x00000000,
+0x444,0x00000015,
+0x445,0x000000f0,
+0x446,0x0000000f,
+0x447,0x00000000,
+0x458,0x00000041,
+0x459,0x000000a8,
+0x45a,0x00000072,
+0x45b,0x000000b9,
+0x460,0x00000066,
+0x461,0x00000066,
+0x462,0x00000008,
+0x463,0x00000003,
+0x4c8,0x000000ff,
+0x4c9,0x00000008,
+0x4cc,0x000000ff,
+0x4cd,0x000000ff,
+0x4ce,0x00000001,
+0x500,0x00000026,
+0x501,0x000000a2,
+0x502,0x0000002f,
+0x503,0x00000000,
+0x504,0x00000028,
+0x505,0x000000a3,
+0x506,0x0000005e,
+0x507,0x00000000,
+0x508,0x0000002b,
+0x509,0x000000a4,
+0x50a,0x0000005e,
+0x50b,0x00000000,
+0x50c,0x0000004f,
+0x50d,0x000000a4,
+0x50e,0x00000000,
+0x50f,0x00000000,
+0x512,0x0000001c,
+0x514,0x0000000a,
+0x515,0x00000010,
+0x516,0x0000000a,
+0x517,0x00000010,
+0x51a,0x00000016,
+0x524,0x0000000f,
+0x525,0x0000004f,
+0x546,0x00000040,
+0x547,0x00000000,
+0x550,0x00000010,
+0x551,0x00000010,
+0x559,0x00000002,
+0x55a,0x00000002,
+0x55d,0x000000ff,
+0x605,0x00000030,
+0x608,0x0000000e,
+0x609,0x0000002a,
+0x652,0x00000020,
+0x63c,0x0000000a,
+0x63d,0x0000000e,
+0x63e,0x0000000a,
+0x63f,0x0000000e,
+0x66e,0x00000005,
+0x700,0x00000021,
+0x701,0x00000043,
+0x702,0x00000065,
+0x703,0x00000087,
+0x708,0x00000021,
+0x709,0x00000043,
+0x70a,0x00000065,
+0x70b,0x00000087,
+};
+
+const u32 Rtl8723SAGCTAB_2TArray[Rtl8723SAGCTAB_2TArrayLength] = {
+0x0, };
+
+const u32 Rtl8723SAGCTAB_1TArray[Rtl8723SAGCTAB_1TArrayLength] = {
+0xc78,0x7b000001,
+0xc78,0x7b010001,
+0xc78,0x7b020001,
+0xc78,0x7b030001,
+0xc78,0x7b040001,
+0xc78,0x7b050001,
+0xc78,0x7a060001,
+0xc78,0x79070001,
+0xc78,0x78080001,
+0xc78,0x77090001,
+0xc78,0x760a0001,
+0xc78,0x750b0001,
+0xc78,0x740c0001,
+0xc78,0x730d0001,
+0xc78,0x720e0001,
+0xc78,0x710f0001,
+0xc78,0x70100001,
+0xc78,0x6f110001,
+0xc78,0x6e120001,
+0xc78,0x6d130001,
+0xc78,0x6c140001,
+0xc78,0x6b150001,
+0xc78,0x6a160001,
+0xc78,0x69170001,
+0xc78,0x68180001,
+0xc78,0x67190001,
+0xc78,0x661a0001,
+0xc78,0x651b0001,
+0xc78,0x641c0001,
+0xc78,0x631d0001,
+0xc78,0x621e0001,
+0xc78,0x611f0001,
+0xc78,0x60200001,
+0xc78,0x49210001,
+0xc78,0x48220001,
+0xc78,0x47230001,
+0xc78,0x46240001,
+0xc78,0x45250001,
+0xc78,0x44260001,
+0xc78,0x43270001,
+0xc78,0x42280001,
+0xc78,0x41290001,
+0xc78,0x402a0001,
+0xc78,0x262b0001,
+0xc78,0x252c0001,
+0xc78,0x242d0001,
+0xc78,0x232e0001,
+0xc78,0x222f0001,
+0xc78,0x21300001,
+0xc78,0x20310001,
+0xc78,0x06320001,
+0xc78,0x05330001,
+0xc78,0x04340001,
+0xc78,0x03350001,
+0xc78,0x02360001,
+0xc78,0x01370001,
+0xc78,0x00380001,
+0xc78,0x00390001,
+0xc78,0x003a0001,
+0xc78,0x003b0001,
+0xc78,0x003c0001,
+0xc78,0x003d0001,
+0xc78,0x003e0001,
+0xc78,0x003f0001,
+0xc78,0x7b400001,
+0xc78,0x7b410001,
+0xc78,0x7b420001,
+0xc78,0x7b430001,
+0xc78,0x7b440001,
+0xc78,0x7b450001,
+0xc78,0x7a460001,
+0xc78,0x79470001,
+0xc78,0x78480001,
+0xc78,0x77490001,
+0xc78,0x764a0001,
+0xc78,0x754b0001,
+0xc78,0x744c0001,
+0xc78,0x734d0001,
+0xc78,0x724e0001,
+0xc78,0x714f0001,
+0xc78,0x70500001,
+0xc78,0x6f510001,
+0xc78,0x6e520001,
+0xc78,0x6d530001,
+0xc78,0x6c540001,
+0xc78,0x6b550001,
+0xc78,0x6a560001,
+0xc78,0x69570001,
+0xc78,0x68580001,
+0xc78,0x67590001,
+0xc78,0x665a0001,
+0xc78,0x655b0001,
+0xc78,0x645c0001,
+0xc78,0x635d0001,
+0xc78,0x625e0001,
+0xc78,0x615f0001,
+0xc78,0x60600001,
+0xc78,0x49610001,
+0xc78,0x48620001,
+0xc78,0x47630001,
+0xc78,0x46640001,
+0xc78,0x45650001,
+0xc78,0x44660001,
+0xc78,0x43670001,
+0xc78,0x42680001,
+0xc78,0x41690001,
+0xc78,0x406a0001,
+0xc78,0x266b0001,
+0xc78,0x256c0001,
+0xc78,0x246d0001,
+0xc78,0x236e0001,
+0xc78,0x226f0001,
+0xc78,0x21700001,
+0xc78,0x20710001,
+0xc78,0x06720001,
+0xc78,0x05730001,
+0xc78,0x04740001,
+0xc78,0x03750001,
+0xc78,0x02760001,
+0xc78,0x01770001,
+0xc78,0x00780001,
+0xc78,0x00790001,
+0xc78,0x007a0001,
+0xc78,0x007b0001,
+0xc78,0x007c0001,
+0xc78,0x007d0001,
+0xc78,0x007e0001,
+0xc78,0x007f0001,
+0xc78,0x3800001e,
+0xc78,0x3801001e,
+0xc78,0x3802001e,
+0xc78,0x3803001e,
+0xc78,0x3804001e,
+0xc78,0x3805001e,
+0xc78,0x3806001e,
+0xc78,0x3807001e,
+0xc78,0x3808001e,
+0xc78,0x3c09001e,
+0xc78,0x3e0a001e,
+0xc78,0x400b001e,
+0xc78,0x440c001e,
+0xc78,0x480d001e,
+0xc78,0x4c0e001e,
+0xc78,0x500f001e,
+0xc78,0x5210001e,
+0xc78,0x5611001e,
+0xc78,0x5a12001e,
+0xc78,0x5e13001e,
+0xc78,0x6014001e,
+0xc78,0x6015001e,
+0xc78,0x6016001e,
+0xc78,0x6217001e,
+0xc78,0x6218001e,
+0xc78,0x6219001e,
+0xc78,0x621a001e,
+0xc78,0x621b001e,
+0xc78,0x621c001e,
+0xc78,0x621d001e,
+0xc78,0x621e001e,
+0xc78,0x621f001e,
+};
+
+#endif//endif CONFIG_PHY_SETTING_ODM
+
+const u32 Rtl8723SPHY_REG_Array_PG[Rtl8723SPHY_REG_Array_PGLength] = {
+0xe00,0xffffffff,0x0a0c0c0c,
+0xe04,0xffffffff,0x02040608,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x0a0c0d0e,
+0xe14,0xffffffff,0x02040608,
+0xe18,0xffffffff,0x0a0c0d0e,
+0xe1c,0xffffffff,0x02040608,
+0x830,0xffffffff,0x0a0c0c0c,
+0x834,0xffffffff,0x02040608,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x0a0c0d0e,
+0x848,0xffffffff,0x02040608,
+0x84c,0xffffffff,0x0a0c0d0e,
+0x868,0xffffffff,0x02040608,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x04040404,
+0xe04,0xffffffff,0x00020204,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x06060606,
+0xe14,0xffffffff,0x00020406,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x04040404,
+0x834,0xffffffff,0x00020204,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x06060606,
+0x848,0xffffffff,0x00020406,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x04040404,
+0xe04,0xffffffff,0x00020204,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x04040404,
+0x834,0xffffffff,0x00020204,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+};
+
+const u32 Rtl8723SMACPHY_Array_PG[Rtl8723SMACPHY_Array_PGLength] = {
+0x0, };
+#if MP_DRIVER == 1
+const u32 Rtl8723SPHY_REG_Array_MP[Rtl8723SPHY_REG_Array_MPLength] = {
+0xc30,0x69e9ac4a,
+0xc3c,0x0a979718,
+};
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723SHWImg_CE.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723SHWImg_CE.h
index e1d022f97d37..1adbefd4486d 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723SHWImg_CE.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723SHWImg_CE.h
@@ -1,67 +1,67 @@
-#ifndef __INC_HAL8723S_FW_IMG_H
-#define __INC_HAL8723S_FW_IMG_H
-
-/*Created on 2013/02/26, 18:59*/
-
-#define Rtl8723SUMCBCutMPImgArrayLength 24174
-
-#define Rtl8723SUMCBCutImgArrayWithBTLength 24118
-#define Rtl8723SUMCBCutImgArrayWithoutBTLength 19200
-
-#define Rtl8723SImgArrayLength 20606
-extern const u8 Rtl8723SFwImgArray[Rtl8723SImgArrayLength];
-#define Rtl8723SBTImgArrayLength 1
-extern const u8 Rtl8723SFwBTImgArray[Rtl8723SBTImgArrayLength];
-
-#ifdef CONFIG_MP_INCLUDED
-#define Rtl8723EBTImgArrayLength 15275
-extern u8 Rtl8723EFwBTImgArray[Rtl8723EBTImgArrayLength] ;
-extern const u8 Rtl8723SFwUMCBCutMPImgArray[Rtl8723SUMCBCutMPImgArrayLength];
-#endif //CONFIG_MP_INCLUDED
-
-extern const u8 Rtl8723SFwUMCBCutImgArrayWithBT[Rtl8723SUMCBCutImgArrayWithBTLength];
-extern const u8 Rtl8723SFwUMCBCutImgArrayWithoutBT[Rtl8723SUMCBCutImgArrayWithoutBTLength];
-
-#ifndef CONFIG_PHY_SETTING_WITH_ODM
-#define Rtl8723SPHY_REG_2TArrayLength 1
-extern const u32 Rtl8723SPHY_REG_2TArray[Rtl8723SPHY_REG_2TArrayLength];
-#define Rtl8723SPHY_REG_1TArrayLength 372
-extern const u32 Rtl8723SPHY_REG_1TArray[Rtl8723SPHY_REG_1TArrayLength];
-#define Rtl8723SPHY_ChangeTo_1T1RArrayLength 1
-extern const u32 Rtl8723SPHY_ChangeTo_1T1RArray[Rtl8723SPHY_ChangeTo_1T1RArrayLength];
-#define Rtl8723SPHY_ChangeTo_1T2RArrayLength 1
-extern const u32 Rtl8723SPHY_ChangeTo_1T2RArray[Rtl8723SPHY_ChangeTo_1T2RArrayLength];
-#define Rtl8723SPHY_ChangeTo_2T2RArrayLength 1
-extern const u32 Rtl8723SPHY_ChangeTo_2T2RArray[Rtl8723SPHY_ChangeTo_2T2RArrayLength];
-
-
-#define Rtl8723SRadioA_2TArrayLength 1
-extern const u32 Rtl8723SRadioA_2TArray[Rtl8723SRadioA_2TArrayLength];
-#define Rtl8723SRadioB_2TArrayLength 1
-extern const u32 Rtl8723SRadioB_2TArray[Rtl8723SRadioB_2TArrayLength];
-#define Rtl8723SRadioA_1TArrayLength 282
-extern const u32 Rtl8723SRadioA_1TArray[Rtl8723SRadioA_1TArrayLength];
-#define Rtl8723SRadioB_1TArrayLength 1
-extern const u32 Rtl8723SRadioB_1TArray[Rtl8723SRadioB_1TArrayLength];
-#define Rtl8723SRadioB_GM_ArrayLength 1
-extern const u32 Rtl8723SRadioB_GM_Array[Rtl8723SRadioB_GM_ArrayLength];
-#define Rtl8723SMAC_2T_ArrayLength 172
-extern const u32 Rtl8723SMAC_2T_Array[Rtl8723SMAC_2T_ArrayLength];
-#define Rtl8723SAGCTAB_2TArrayLength 1
-extern const u32 Rtl8723SAGCTAB_2TArray[Rtl8723SAGCTAB_2TArrayLength];
-#define Rtl8723SAGCTAB_1TArrayLength 320
-extern const u32 Rtl8723SAGCTAB_1TArray[Rtl8723SAGCTAB_1TArrayLength];
-#endif//#ifndef CONFIG_PHY_SETTING_WITH_ODM
-
-#define Rtl8723SPHY_REG_Array_PGLength 336
-extern const u32 Rtl8723SPHY_REG_Array_PG[Rtl8723SPHY_REG_Array_PGLength];
-#define Rtl8723SMACPHY_Array_PGLength 1
-extern const u32 Rtl8723SMACPHY_Array_PG[Rtl8723SMACPHY_Array_PGLength];
-
-#if MP_DRIVER == 1
-#define Rtl8723SPHY_REG_Array_MPLength 4
-extern const u32 Rtl8723SPHY_REG_Array_MP[Rtl8723SPHY_REG_Array_MPLength];
-#endif//#if MP_DRIVER == 1
-
-#endif //#ifndef __INC_HAL8723S_FW_IMG_H
-
+#ifndef __INC_HAL8723S_FW_IMG_H
+#define __INC_HAL8723S_FW_IMG_H
+
+/*Created on 2013/02/26, 18:59*/
+
+#define Rtl8723SUMCBCutMPImgArrayLength 24174
+
+#define Rtl8723SUMCBCutImgArrayWithBTLength 24348
+#define Rtl8723SUMCBCutImgArrayWithoutBTLength 19200
+
+#define Rtl8723SImgArrayLength 20606
+extern const u8 Rtl8723SFwImgArray[Rtl8723SImgArrayLength];
+#define Rtl8723SBTImgArrayLength 1
+extern const u8 Rtl8723SFwBTImgArray[Rtl8723SBTImgArrayLength];
+
+#ifdef CONFIG_MP_INCLUDED
+#define Rtl8723EBTImgArrayLength 16404
+extern u8 Rtl8723EFwBTImgArray[Rtl8723EBTImgArrayLength] ;
+extern const u8 Rtl8723SFwUMCBCutMPImgArray[Rtl8723SUMCBCutMPImgArrayLength];
+#endif //CONFIG_MP_INCLUDED
+
+extern const u8 Rtl8723SFwUMCBCutImgArrayWithBT[Rtl8723SUMCBCutImgArrayWithBTLength];
+extern const u8 Rtl8723SFwUMCBCutImgArrayWithoutBT[Rtl8723SUMCBCutImgArrayWithoutBTLength];
+
+#ifndef CONFIG_PHY_SETTING_WITH_ODM
+#define Rtl8723SPHY_REG_2TArrayLength 1
+extern const u32 Rtl8723SPHY_REG_2TArray[Rtl8723SPHY_REG_2TArrayLength];
+#define Rtl8723SPHY_REG_1TArrayLength 372
+extern const u32 Rtl8723SPHY_REG_1TArray[Rtl8723SPHY_REG_1TArrayLength];
+#define Rtl8723SPHY_ChangeTo_1T1RArrayLength 1
+extern const u32 Rtl8723SPHY_ChangeTo_1T1RArray[Rtl8723SPHY_ChangeTo_1T1RArrayLength];
+#define Rtl8723SPHY_ChangeTo_1T2RArrayLength 1
+extern const u32 Rtl8723SPHY_ChangeTo_1T2RArray[Rtl8723SPHY_ChangeTo_1T2RArrayLength];
+#define Rtl8723SPHY_ChangeTo_2T2RArrayLength 1
+extern const u32 Rtl8723SPHY_ChangeTo_2T2RArray[Rtl8723SPHY_ChangeTo_2T2RArrayLength];
+
+
+#define Rtl8723SRadioA_2TArrayLength 1
+extern const u32 Rtl8723SRadioA_2TArray[Rtl8723SRadioA_2TArrayLength];
+#define Rtl8723SRadioB_2TArrayLength 1
+extern const u32 Rtl8723SRadioB_2TArray[Rtl8723SRadioB_2TArrayLength];
+#define Rtl8723SRadioA_1TArrayLength 282
+extern const u32 Rtl8723SRadioA_1TArray[Rtl8723SRadioA_1TArrayLength];
+#define Rtl8723SRadioB_1TArrayLength 1
+extern const u32 Rtl8723SRadioB_1TArray[Rtl8723SRadioB_1TArrayLength];
+#define Rtl8723SRadioB_GM_ArrayLength 1
+extern const u32 Rtl8723SRadioB_GM_Array[Rtl8723SRadioB_GM_ArrayLength];
+#define Rtl8723SMAC_2T_ArrayLength 172
+extern const u32 Rtl8723SMAC_2T_Array[Rtl8723SMAC_2T_ArrayLength];
+#define Rtl8723SAGCTAB_2TArrayLength 1
+extern const u32 Rtl8723SAGCTAB_2TArray[Rtl8723SAGCTAB_2TArrayLength];
+#define Rtl8723SAGCTAB_1TArrayLength 320
+extern const u32 Rtl8723SAGCTAB_1TArray[Rtl8723SAGCTAB_1TArrayLength];
+#endif//#ifndef CONFIG_PHY_SETTING_WITH_ODM
+
+#define Rtl8723SPHY_REG_Array_PGLength 336
+extern const u32 Rtl8723SPHY_REG_Array_PG[Rtl8723SPHY_REG_Array_PGLength];
+#define Rtl8723SMACPHY_Array_PGLength 1
+extern const u32 Rtl8723SMACPHY_Array_PG[Rtl8723SMACPHY_Array_PGLength];
+
+#if MP_DRIVER == 1
+#define Rtl8723SPHY_REG_Array_MPLength 4
+extern const u32 Rtl8723SPHY_REG_Array_MP[Rtl8723SPHY_REG_Array_MPLength];
+#endif//#if MP_DRIVER == 1
+
+#endif //#ifndef __INC_HAL8723S_FW_IMG_H
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723UHWImg_CE.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723UHWImg_CE.c
index 18e69ede5a9f..9967bb8d60bb 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723UHWImg_CE.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723UHWImg_CE.c
@@ -1,8018 +1,6746 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-/*Created on 2013/01/14, 15:51*/
-#include "../odm_precomp.h"
-
-u8 Rtl8723UFwImgArray[Rtl8723UImgArrayLength] = {
-0x01,0x23,0x02,0x00,0x0e,0x00,0x00,0x00,0x01,0x13,0x16,0x18,0x7c,0x56,0x01,0x00,
-0x54,0x89,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x02,0x44,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x00,0x00,0x00,0x02,0x58,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,0x02,0x60,0xec,0x00,0x00,0x00,0x00,0x00,0x02,0x61,0x93,0x00,0x00,
-0x00,0x00,0x00,0x02,0x67,0x2b,0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,
-0x00,0x04,0x06,0x05,0x04,0x02,0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,
-0x08,0x06,0x00,0x08,0x0a,0x09,0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,
-0x0a,0x09,0x08,0x00,0x00,0x08,0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,
-0x00,0x18,0x22,0x21,0x20,0x18,0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,
-0x20,0x08,0x00,0x20,0x22,0x21,0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,
-0x22,0x20,0x18,0x08,0x00,0x20,0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,
-0x00,0x30,0x31,0x2f,0x10,0x10,0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,
-0x10,0x00,0x00,0x30,0x31,0x20,0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,
-0x04,0x04,0x04,0x05,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x04,0x05,
-0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,
-0x05,0x05,0x06,0x07,0x0a,0x0b,0x0d,0x10,0x04,0x05,0x05,0x06,0x06,0x09,0x0c,0x11,
-0x08,0x08,0x09,0x09,0x0a,0x0c,0x10,0x11,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x07,
-0x07,0x07,0x08,0x0a,0x04,0x04,0x04,0x04,0x06,0x0a,0x0b,0x0d,0x05,0x05,0x07,0x07,
-0x08,0x0b,0x0d,0x0f,0x04,0x04,0x04,0x05,0x07,0x07,0x09,0x09,0x0c,0x0e,0x10,0x12,
-0x04,0x04,0x05,0x05,0x06,0x0a,0x11,0x13,0x09,0x09,0x09,0x09,0x0c,0x0e,0x11,0x13,
-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,
-0x21,0x27,0x29,0x2a,0x00,0x00,0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,
-0x00,0x08,0x00,0x10,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,
-0x00,0xc0,0x00,0xd8,0x00,0x50,0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,
-0x01,0xe0,0x02,0x30,0x01,0x2c,0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,
-0x06,0x40,0x07,0xd0,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,
-0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,
-0x00,0x50,0x00,0x64,0x00,0xa0,0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,
-0x00,0xf0,0x01,0x68,0x01,0xf4,0x02,0x58,0x03,0x20,0x03,0xe8,0x02,0x02,0x02,0x02,
-0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x07,0x04,0x04,0x07,0x0a,0x0a,0x0c,0x0c,0x12,
-0x05,0x07,0x07,0x08,0x0b,0x12,0x24,0x3c,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,
-0x05,0x06,0x07,0x08,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,
-0x09,0x0a,0x0b,0x0c,0x20,0x1e,0x1c,0x18,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
-0xbb,0x01,0x06,0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,0xf7,0x22,0xbb,0xfe,0x01,
-0xf3,0x22,0xf8,0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,
-0xe8,0xf0,0x22,0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,0xbb,0xfe,0x05,0xe9,0x25,
-0x82,0xc8,0xf2,0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,
-0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,
-0x83,0xe0,0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,
-0xfe,0x07,0xe3,0xf5,0xf0,0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,
-0xf0,0x74,0x01,0x93,0x22,0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,
-0xf5,0x83,0xe0,0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,
-0x08,0xe6,0x22,0xbb,0xfe,0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,
-0xe5,0x83,0x2a,0xf5,0x83,0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,
-0x89,0x82,0x8a,0x83,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,
-0x19,0x22,0xbb,0xfe,0x06,0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,
-0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,
-0x22,0x50,0x09,0xe9,0x25,0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,
-0x25,0x82,0xc8,0xf2,0xe5,0xf0,0x08,0xf2,0x22,0xef,0x4b,0xff,0xee,0x4a,0xfe,0xed,
-0x49,0xfd,0xec,0x48,0xfc,0x22,0xbb,0x01,0x07,0x89,0x82,0x8a,0x83,0x02,0x43,0x46,
-0x50,0x05,0xe9,0xf8,0x02,0x43,0xda,0xbb,0xfe,0x05,0xe9,0xf8,0x02,0x43,0xe6,0x89,
-0x82,0x8a,0x83,0x02,0x43,0xf2,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,
-0xff,0x22,0xa4,0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,0x22,0xe0,0xfb,
-0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x22,0xf8,0xe0,0xfb,0xa3,0xa3,0xe0,0xf9,0x25,0xf0,
-0xf0,0xe5,0x82,0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,
-0xa3,0xea,0xf0,0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,
-0x74,0x01,0x93,0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,
-0xe4,0x73,0x74,0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0xd0,0x83,0xd0,
-0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,
-0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,0x02,0x93,0xb5,0xf0,0x06,0x74,0x03,
-0x93,0x68,0x60,0xe9,0xa3,0xa3,0xa3,0xa3,0x80,0xd8,0xe6,0xfc,0x08,0xe6,0xfd,0x08,
-0xe6,0xfe,0x08,0xe6,0xff,0x22,0xe2,0xfc,0x08,0xe2,0xfd,0x08,0xe2,0xfe,0x08,0xe2,
-0xff,0x22,0xe4,0x93,0xfc,0x74,0x01,0x93,0xfd,0x74,0x02,0x93,0xfe,0x74,0x03,0x93,
-0xff,0x22,0x02,0x44,0x40,0x02,0x50,0x33,0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,
-0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,
-0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,
-0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
-0x90,0x44,0x85,0xe4,0x7e,0x01,0x93,0x60,0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,
-0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,
-0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,
-0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,
-0xe9,0xde,0xe7,0x80,0xbe,0x48,0x9e,0xac,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
-0x48,0x9e,0xa3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x9e,0xab,0x00,0x41,
-0x9f,0x19,0x00,0x41,0x9e,0x84,0x80,0x41,0x9e,0x85,0x80,0x41,0x9d,0xa8,0x00,0x41,
-0x9d,0xa9,0x00,0x41,0x9d,0xa7,0x00,0x41,0x9e,0xbd,0x00,0x00,0x90,0x02,0x84,0xef,
-0xf0,0xa3,0xee,0xf0,0xa3,0x74,0x05,0xf0,0x22,0xfd,0x7f,0x81,0xd3,0x10,0xaf,0x01,
-0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,0x00,0xed,0xf0,0x12,0x4f,0x6d,0xd0,0xd0,0x92,
-0xaf,0x22,0xe4,0x90,0x9e,0xb9,0xf0,0x90,0x00,0x80,0xe0,0x44,0x80,0xfd,0x7f,0x80,
-0x80,0xda,0x8f,0x82,0x8e,0x83,0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0x12,0x4f,0x49,0x02,
-0x4f,0x7d,0x22,0x02,0x6a,0xe7,0x02,0x6a,0xee,0xef,0x8e,0xf0,0x71,0xad,0x45,0x26,
-0x00,0x40,0x45,0x4e,0x00,0x80,0x45,0x79,0x01,0x00,0x45,0x8d,0x02,0x00,0x45,0xa5,
-0x04,0x00,0x00,0x00,0x45,0xc2,0xed,0x54,0x3f,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,
-0x00,0x7f,0x40,0xef,0x2d,0xff,0xee,0x3c,0xfe,0xef,0x78,0x06,0xce,0xc3,0x13,0xce,
-0x13,0xd8,0xf9,0x78,0x06,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0x80,0x26,0xed,0x54,
-0x7f,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,0x00,0x7f,0x80,0xef,0x2d,0xff,0xee,0x3c,
-0xfe,0xef,0x78,0x07,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x78,0x07,0xc3,0x33,0xce,
-0x33,0xce,0xd8,0xf9,0xfd,0xac,0x06,0x80,0x49,0xed,0x70,0x04,0xfe,0xff,0x80,0x04,
-0x7e,0x01,0x7f,0x00,0xef,0x2d,0xee,0x3c,0x7d,0x00,0xfc,0x80,0x35,0xec,0x54,0x01,
-0x4d,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,0x02,0x7f,0x00,0xef,0x2d,0xee,0x3c,0xc3,
-0x13,0x7d,0x00,0x80,0x1a,0xec,0x54,0x03,0x4d,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,
-0x04,0x7f,0x00,0xef,0x2d,0xee,0x3c,0x13,0x13,0x54,0x3f,0x7d,0x00,0x25,0xe0,0x25,
-0xe0,0xfc,0xae,0x04,0xaf,0x05,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0x90,
-0x9e,0x71,0xf0,0xa3,0x74,0x08,0xf0,0xa3,0xf0,0x90,0x01,0x1f,0xe0,0xfe,0x90,0x01,
-0x1e,0xe0,0x7c,0x00,0x24,0x00,0xff,0xec,0x3e,0x90,0x9e,0x6b,0xf0,0xa3,0xef,0xf0,
-0x90,0x02,0x87,0xe0,0x90,0x9e,0x70,0xf0,0x90,0x9e,0xc1,0xe0,0x20,0xe0,0x02,0xe1,
-0x3b,0xe4,0x90,0x9e,0x6f,0xf0,0x90,0x9e,0x70,0xe0,0xff,0x90,0x9e,0x6f,0xe0,0xc3,
-0x9f,0x40,0x02,0xe1,0x3b,0x90,0x9e,0x6b,0xe0,0xfc,0xa3,0xe0,0xfd,0xec,0x90,0xfd,
-0x11,0xf0,0x74,0x02,0x2d,0xf5,0x82,0xe4,0x34,0xfb,0xf5,0x83,0xe0,0x54,0x0f,0xfc,
-0x33,0x33,0x33,0x54,0xf8,0xff,0xed,0x24,0x18,0x2f,0x90,0x9e,0x6d,0xf0,0xe0,0x24,
-0x00,0xf5,0x82,0xe4,0x34,0xfb,0xf5,0x83,0xe0,0x54,0xfc,0x90,0x9e,0x6e,0xf0,0x74,
-0x01,0x2d,0xf5,0x82,0xe4,0x34,0xfb,0xf5,0x83,0xe0,0xfe,0x74,0x00,0x2d,0xf5,0x82,
-0xe4,0x34,0xfb,0xf5,0x83,0xe0,0x7a,0x00,0x24,0x00,0xff,0xea,0x3e,0x54,0x3f,0xab,
-0x07,0xfa,0xaf,0x04,0xef,0x75,0xf0,0x08,0xa4,0x24,0x18,0xff,0xe4,0x35,0xf0,0xfe,
-0xef,0x2b,0xfb,0xee,0x3a,0xfa,0x90,0x9e,0xc5,0xe0,0xfe,0xa3,0xe0,0xff,0xad,0x03,
-0xac,0x02,0xb1,0x09,0xaa,0x06,0xab,0x07,0x90,0x9e,0x6b,0xee,0x8f,0xf0,0x51,0x54,
-0x90,0x9e,0xc7,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x9e,0x6b,0xe0,0xfc,0xa3,0xe0,0xfd,
-0xd3,0x9f,0xec,0x9e,0x40,0x1b,0x90,0x9e,0xc8,0xe0,0x24,0x01,0xff,0x90,0x9e,0xc7,
-0xe0,0x34,0x00,0xfe,0xc3,0xed,0x9f,0xff,0xec,0x9e,0x90,0x9e,0x6b,0xf0,0xa3,0xef,
-0xf0,0x90,0x9e,0x6e,0xe0,0xff,0x24,0x40,0x60,0x04,0x24,0x20,0x70,0x2b,0x90,0x9e,
-0xc9,0xe0,0xfe,0xc4,0x13,0x13,0x13,0x54,0x01,0x30,0xe0,0x26,0xef,0x90,0x00,0x81,
-0xb4,0xa0,0x05,0xe0,0x44,0x04,0x80,0x03,0xe0,0x44,0x08,0xfd,0x7f,0x81,0x91,0xcc,
-0x90,0x9e,0xc1,0xe0,0x44,0x80,0xf0,0x80,0x09,0x90,0x9e,0xc9,0xe0,0xc4,0x13,0x13,
-0x54,0x03,0x90,0x9e,0xc1,0xe0,0xff,0xc4,0x13,0x13,0x13,0x54,0x01,0x30,0xe0,0x03,
-0x12,0x92,0x86,0x12,0x95,0x13,0xbf,0x01,0x0a,0x90,0x9e,0x6b,0xe0,0xfe,0xa3,0xe0,
-0xff,0x91,0xbc,0x90,0x9e,0x6f,0xe0,0x04,0xf0,0xc1,0x06,0xd0,0xd0,0x92,0xaf,0x22,
-0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8b,0x60,0x8a,0x61,0x89,0x62,0x90,0x9e,0xef,
-0x71,0x7e,0xab,0x63,0xaa,0x64,0xa9,0x65,0x90,0x9e,0xf2,0x71,0x7e,0xaf,0x66,0x15,
-0x66,0xef,0x60,0x1b,0x90,0x9e,0xf2,0xe4,0x75,0xf0,0x01,0x71,0x67,0x12,0x1f,0x04,
-0xff,0x90,0x9e,0xef,0xe4,0x75,0xf0,0x01,0x71,0x67,0xef,0x51,0x20,0x80,0xde,0xab,
-0x60,0xaa,0x61,0xa9,0x62,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0xba,0xe0,0xb4,0x01,
-0x04,0x7d,0x91,0x80,0x0c,0x90,0x9e,0xba,0xe0,0x70,0x04,0x7d,0x90,0x80,0x02,0xe4,
-0xfd,0x7f,0x93,0x91,0xcc,0x90,0x00,0x29,0xe0,0x54,0x3f,0xfd,0x7f,0x29,0x91,0xcc,
-0x90,0x00,0x28,0xe0,0x54,0xfc,0xfd,0x7f,0x28,0x91,0xcc,0x90,0x00,0x08,0xe0,0x44,
-0x10,0xfd,0x7f,0x08,0x91,0xcc,0x7f,0x01,0x12,0x78,0xe1,0x90,0x00,0x00,0xe0,0x44,
-0x20,0xfd,0xe4,0xff,0x91,0xcc,0x90,0x00,0x20,0xe0,0x54,0xfe,0xfd,0x7f,0x20,0x91,
-0xcc,0x90,0x00,0x90,0xe0,0x44,0x01,0xfd,0x7f,0x90,0x91,0xcc,0x7f,0x14,0x7e,0x00,
-0x02,0x3b,0x3b,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x04,0x1d,0xe0,0x60,0x1a,
-0x90,0x05,0x22,0xe0,0x54,0x90,0x60,0x07,0x90,0x01,0xc6,0xe0,0x44,0x40,0xf0,0x90,
-0x01,0xc7,0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,0x02,0x7f,0x01,0xd0,0xd0,0x92,0xaf,
-0x22,0x90,0x9e,0xb6,0xe0,0xff,0x7d,0x01,0xe4,0xfb,0xfa,0xef,0x30,0xe0,0x02,0x7b,
-0x80,0xef,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x90,0x04,0x25,0xef,0xf0,0xed,0x60,0x0e,
-0x74,0x0f,0x2b,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0xaf,0x03,
-0x74,0x08,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2f,0xf5,
-0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2b,0xf5,0x82,0xe4,
-0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf7,0xf0,0xae,0x02,0xaf,0x03,0x22,0x8f,0x25,0x90,
-0x9e,0x86,0xe0,0x30,0xe0,0x39,0x90,0x04,0x1d,0xe0,0x70,0x6a,0x12,0x47,0xf3,0xef,
-0x64,0x01,0x70,0x62,0x11,0x21,0x8e,0x26,0x8f,0x27,0xe5,0x25,0x60,0x10,0x74,0x21,
-0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x42,0x74,0x21,
-0x25,0x27,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x80,0x31,0x12,
-0x47,0xf3,0xef,0x64,0x01,0x70,0x2f,0x11,0x21,0x8e,0x26,0x8f,0x27,0xe5,0x25,0x60,
-0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,
-0x0f,0x74,0x21,0x25,0x27,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,
-0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x67,
-0xb4,0x01,0x04,0x7f,0x01,0x11,0x7d,0x53,0x68,0xf0,0x43,0x68,0x04,0x90,0x9e,0xda,
-0xe0,0x30,0xe0,0x07,0x90,0x05,0x27,0xe0,0x44,0x80,0xf0,0x22,0xf0,0x7d,0x01,0x7f,
-0x0c,0x90,0x9f,0x0e,0xed,0xf0,0x90,0x9f,0x0d,0xef,0xf0,0x54,0x0f,0xff,0xe5,0x68,
-0x54,0x0f,0x6f,0x60,0x6d,0x90,0x9f,0x0d,0xe0,0x30,0xe2,0x28,0xe5,0x68,0x20,0xe2,
-0x04,0x7f,0x01,0xf1,0x30,0xe5,0x68,0x30,0xe3,0x09,0x90,0x9f,0x0d,0xe0,0x20,0xe3,
-0x02,0x80,0xa4,0xe5,0x68,0x20,0xe3,0x4a,0x90,0x9f,0x0d,0xe0,0x30,0xe3,0x43,0xa3,
-0xe0,0xff,0xe1,0xb4,0xe5,0x68,0x54,0x0f,0xff,0xbf,0x0c,0x0f,0x90,0x9f,0x0d,0xe0,
-0x20,0xe3,0x08,0x12,0x77,0xa3,0xef,0x60,0x29,0x11,0xf7,0xe5,0x68,0x54,0x0f,0xff,
-0xbf,0x04,0x0f,0x90,0x9f,0x0d,0xe0,0x20,0xe2,0x08,0x12,0x77,0xec,0xef,0x60,0x12,
-0xf1,0x91,0xe5,0x68,0x54,0x0f,0xff,0xbf,0x02,0x08,0x12,0x78,0x6b,0xef,0x60,0x02,
-0xf1,0x1d,0x22,0xe4,0x90,0x9e,0x5a,0xf0,0x90,0x9e,0x86,0xe0,0x20,0xe0,0x02,0x81,
-0x06,0x90,0x9e,0x8c,0xe0,0x64,0x01,0x70,0x5c,0x90,0x9e,0x89,0xe0,0x30,0xe0,0x19,
-0xe0,0xc3,0x13,0x30,0xe0,0x02,0x80,0x0b,0x90,0x9e,0x89,0xe0,0x13,0x13,0x54,0x3f,
-0x30,0xe0,0x06,0xa3,0xe0,0x90,0x9e,0x5a,0xf0,0xe4,0xf5,0x48,0x90,0x9e,0x5a,0xe0,
-0x24,0x03,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x60,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,
-0x63,0x74,0x05,0xf0,0x90,0x9e,0x8c,0xe0,0x04,0xf0,0x90,0x9e,0x86,0xe0,0xc4,0x13,
-0x54,0x07,0x30,0xe0,0x02,0x81,0x06,0x90,0x9e,0x86,0xe0,0xc4,0x54,0x0f,0x20,0xe0,
-0x02,0x61,0xa5,0x61,0x9d,0x90,0x9e,0x8c,0xe0,0x64,0x02,0x60,0x02,0x41,0xc1,0x90,
-0x07,0x78,0x04,0xf0,0x90,0x9e,0x89,0xe0,0x30,0xe0,0x20,0xe0,0xc3,0x13,0x30,0xe0,
-0x02,0x80,0x0b,0x90,0x9e,0x89,0xe0,0x13,0x13,0x54,0x3f,0x30,0xe0,0x0d,0xa3,0xe0,
-0x90,0x9e,0x5a,0xf0,0x90,0x9e,0x89,0xe0,0x54,0xfb,0xf0,0xe4,0xf5,0x48,0x90,0x9e,
-0x87,0xe0,0xff,0xc3,0x74,0x2e,0x9f,0xff,0x90,0x9e,0x5a,0xe0,0xfe,0xc3,0xef,0x9e,
-0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x60,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x63,0x74,
-0x05,0xf0,0x90,0x9e,0x86,0xe0,0xff,0xc3,0x13,0x90,0x9e,0x56,0x30,0xe0,0x09,0x12,
-0x1f,0xe3,0x00,0x00,0x03,0x00,0x80,0x07,0x12,0x1f,0xe3,0x00,0x00,0x03,0x10,0x91,
-0x07,0xe4,0x90,0x9e,0x8b,0xf0,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x86,0xe0,0xc4,0x13,
-0x54,0x07,0x30,0xe0,0x02,0x81,0x00,0x90,0x9e,0x86,0xe0,0xc4,0x54,0x0f,0x30,0xe0,
-0x02,0x80,0x06,0xe5,0x6a,0x70,0x02,0x81,0x00,0xe4,0xfd,0xaf,0x69,0x31,0x21,0x81,
-0x00,0x90,0x9e,0x8c,0xe0,0x64,0x03,0x60,0x02,0x61,0x66,0x90,0x9e,0x86,0xe0,0xc4,
-0x13,0x13,0x54,0x03,0x90,0x07,0x78,0x30,0xe0,0x05,0x74,0x0d,0xf0,0x80,0x03,0x74,
-0x09,0xf0,0xe4,0xf5,0x48,0x90,0x9e,0x88,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x60,
-0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x63,0x74,0x05,0xf0,0x90,0x9e,0x56,0x12,0x1f,
-0xe3,0x00,0x00,0x03,0x10,0x91,0x07,0x90,0x9e,0x8b,0x74,0x01,0xf0,0xa3,0xe0,0x04,
-0xf0,0x90,0x9e,0x86,0xe0,0xc4,0x13,0x54,0x07,0x20,0xe0,0x1f,0x90,0x9e,0x86,0xe0,
-0xc4,0x54,0x0f,0x30,0xe0,0x0b,0x90,0x05,0x22,0xe4,0xf0,0x7d,0x01,0x7f,0x0c,0x80,
-0x08,0xe5,0x6a,0x60,0x06,0xe4,0xfd,0x7f,0x04,0x31,0x21,0x90,0x05,0x22,0xe4,0xf0,
-0x90,0x9e,0x96,0xe0,0x60,0x02,0x81,0x00,0x90,0x9e,0x86,0xe0,0xc4,0x13,0x54,0x07,
-0x30,0xe0,0x02,0x81,0x06,0x90,0x9e,0x86,0xe0,0xff,0x13,0x13,0x54,0x3f,0x20,0xe0,
-0x02,0x81,0x06,0x02,0x64,0x90,0x90,0x9e,0x8c,0xe0,0x64,0x04,0x70,0x3e,0xf5,0x48,
-0x75,0x49,0x03,0xfb,0xfd,0x7f,0x60,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x63,0x74,
-0x05,0xf0,0x90,0x9e,0x8c,0xe0,0x04,0xf0,0x90,0x9e,0x86,0xe0,0xc4,0x13,0x54,0x07,
-0x20,0xe0,0x73,0x90,0x9e,0x86,0xe0,0xc4,0x54,0x0f,0x30,0xe0,0x08,0xe4,0xfd,0x7f,
-0x04,0x31,0x21,0x80,0x5b,0x90,0x05,0x22,0x74,0xff,0xf0,0x22,0x90,0x9e,0x8c,0xe0,
-0x64,0x05,0x70,0x52,0x90,0x07,0x78,0x04,0xf0,0x90,0x9e,0x86,0xe0,0xff,0xc3,0x13,
-0x90,0x9e,0x56,0x30,0xe0,0x09,0x12,0x1f,0xe3,0x00,0x00,0x03,0x00,0x80,0x07,0x12,
-0x1f,0xe3,0x00,0x00,0x03,0x10,0x91,0x07,0xe4,0x90,0x9e,0x8b,0xf0,0xa3,0xf0,0x90,
-0x9e,0x86,0xe0,0xc4,0x13,0x54,0x07,0x20,0xe0,0x16,0x90,0x9e,0x86,0xe0,0xc4,0x54,
-0x0f,0x30,0xe0,0x02,0x80,0x04,0xe5,0x6a,0x60,0x06,0xe4,0xfd,0xaf,0x69,0x31,0x21,
-0x90,0x05,0x22,0x74,0x6f,0xf0,0x22,0x7b,0x01,0x7a,0x9e,0x79,0x56,0x7f,0x70,0x7e,
-0x08,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0x54,0xfc,0xff,0x90,0x01,0xe8,0xf0,
-0xee,0x44,0xf0,0xa3,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0x01,0xec,0xf0,0x90,
-0x00,0x02,0x12,0x1f,0x1d,0x90,0x01,0xed,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,
-0x01,0xee,0xf0,0x12,0x1f,0x04,0x90,0x01,0xef,0xf0,0x90,0x01,0xeb,0x74,0x40,0xf0,
-0x12,0x8e,0xd6,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x64,0x01,0x70,0x32,0x7d,0x78,0x7f,
-0x02,0x12,0x3a,0x54,0x7d,0x02,0x7f,0x03,0x12,0x3a,0x54,0x90,0x01,0x57,0xe4,0xf0,
-0x90,0x01,0x3c,0x74,0x02,0x31,0x1c,0x90,0x9e,0xda,0xe0,0x30,0xe0,0x02,0xd1,0x27,
-0x90,0x06,0x04,0xe0,0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,
-0x01,0x36,0x74,0x78,0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x78,0xff,0x12,0x3a,0xc5,0x7d,
-0x02,0x7f,0x03,0x12,0x3a,0xc5,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,
-0xe0,0x44,0x07,0xf0,0x12,0x79,0x87,0xe5,0x67,0x30,0xe0,0x21,0x90,0x9e,0x90,0xe0,
-0x70,0x20,0xe0,0x04,0xf0,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x04,0x50,0x06,0x7d,0x01,
-0x7f,0x04,0x31,0x21,0x90,0x9e,0xda,0xe0,0x30,0xe0,0x07,0xc1,0x27,0xe4,0x90,0x9e,
-0x90,0xf0,0x22,0x8b,0x13,0x8a,0x14,0x89,0x15,0x12,0x77,0x6d,0xab,0x13,0xaa,0x14,
-0xa9,0x15,0x12,0x1f,0x04,0xf5,0x6a,0x12,0x43,0x87,0x4d,0x13,0x00,0x4d,0x1b,0x01,
-0x4d,0x2e,0x02,0x4d,0x42,0x03,0x4d,0x48,0x04,0x4d,0x5f,0x05,0x4d,0x77,0x06,0x00,
-0x00,0x4d,0x82,0x7f,0x01,0x91,0x58,0x7f,0x01,0x80,0x64,0xab,0x13,0xaa,0x14,0xa9,
-0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,0xe4,0xff,0xb1,0x92,0x80,0x18,0xab,0x13,
-0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,0x7f,0x01,0xb1,0x92,0x1f,
-0x80,0x04,0xb1,0x83,0xe4,0xff,0x81,0x58,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,
-0x02,0x12,0x1f,0x1d,0xfd,0xe4,0xff,0xb1,0x92,0x91,0x58,0xe4,0xff,0x80,0x20,0xab,
-0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,0x7f,0x01,0xb1,0x92,
-0x1f,0x91,0x58,0xe4,0xff,0x80,0x08,0xb1,0x83,0xe4,0xff,0x91,0x58,0xe4,0xff,0x12,
-0x77,0x79,0x22,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,
-0x7f,0x02,0xef,0x24,0xfe,0x60,0x12,0x04,0x70,0x2f,0x90,0x9e,0x9d,0x74,0x01,0xf0,
-0x90,0x9e,0x8e,0xf0,0x90,0x9e,0xa0,0xf0,0x22,0xed,0x70,0x0a,0x90,0x9e,0x9a,0xe0,
-0x90,0x9e,0x9d,0xf0,0x80,0x05,0x90,0x9e,0x9d,0xed,0xf0,0x90,0x9e,0x9d,0xe0,0x90,
-0x9e,0x8e,0xf0,0x90,0x9e,0xa0,0x74,0x01,0xf0,0x22,0x90,0x9e,0xda,0xe0,0x30,0xe0,
-0x04,0xaf,0x69,0x80,0x2f,0x7d,0x01,0xaf,0x69,0x21,0x21,0x11,0xf7,0x90,0x9e,0xdb,
-0x74,0x01,0xf0,0x22,0x90,0x9e,0x43,0xe0,0xc3,0x13,0x30,0xe0,0x16,0xef,0x7b,0x01,
-0xb4,0x01,0x06,0x7a,0x9e,0x79,0x4a,0x80,0x04,0x7a,0x9e,0x79,0x46,0x7f,0x80,0x7e,
-0x08,0x91,0x11,0x22,0xae,0x07,0xe4,0xff,0xd1,0x6c,0xef,0x60,0x17,0x90,0x9e,0xda,
-0xe0,0xc4,0x13,0x13,0x54,0x03,0x20,0xe0,0x0b,0xaf,0x06,0x7d,0x01,0x31,0x21,0xd1,
-0x27,0x7f,0x01,0x22,0x7f,0x00,0x22,0x90,0x9e,0xdb,0xe0,0x64,0x06,0x60,0x3c,0xe5,
-0x68,0x54,0x0f,0x14,0x60,0x2e,0x14,0x60,0x1e,0x24,0xfe,0x60,0x0e,0x24,0xf8,0x70,
-0x2a,0xe4,0x90,0x9e,0xdb,0xf0,0x90,0x05,0x22,0xf0,0x22,0x90,0x9e,0xdb,0x74,0x01,
-0xf0,0x90,0x05,0x22,0xe4,0xf0,0x22,0x90,0x9e,0xdb,0x74,0x03,0xf0,0x90,0x05,0x22,
-0x74,0xff,0xf0,0x22,0x90,0x01,0xc6,0xe0,0x44,0x08,0xf0,0x22,0x8f,0x6e,0x90,0x05,
-0x43,0xe0,0x7f,0x00,0x30,0xe7,0x02,0x7f,0x01,0x22,0xe4,0x90,0x9f,0x1b,0xf0,0xe5,
-0x6a,0x70,0x02,0xe1,0x1c,0xe5,0x67,0x64,0x01,0x60,0x02,0xe1,0x1c,0xe5,0x6a,0x14,
-0x60,0x28,0x24,0xfd,0x60,0x24,0x24,0x02,0x24,0xfb,0x50,0x02,0x80,0x22,0xe4,0x90,
-0x9e,0x8e,0xf0,0xe0,0x60,0x04,0xa3,0xe0,0x60,0x16,0x90,0x9e,0x8e,0xe0,0x70,0x0a,
-0x90,0x9e,0x9d,0xe0,0x90,0x9e,0x8e,0xf0,0x80,0x00,0x90,0x9f,0x1b,0x74,0x01,0xf0,
-0x90,0x9e,0xda,0xe0,0x30,0xe0,0x15,0xa3,0xe0,0xb4,0x06,0x05,0xe4,0x90,0x9f,0x1b,
-0xf0,0xe4,0xff,0xd1,0x6c,0xef,0x70,0x04,0x90,0x9f,0x1b,0xf0,0x90,0x9f,0x1b,0xe0,
-0x60,0x3a,0x43,0x6b,0x10,0xe4,0xf5,0x48,0x90,0x9e,0x99,0xe0,0xf5,0x49,0xe4,0xfb,
-0xfd,0x7f,0x54,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x68,
-0x54,0x0f,0xc3,0x94,0x04,0x50,0x06,0x7d,0x01,0x7f,0x04,0x31,0x21,0x90,0x9e,0xda,
-0xe0,0x30,0xe0,0x08,0xd1,0x27,0x90,0x05,0x22,0x74,0xff,0xf0,0x22,0x53,0x68,0xf0,
-0x43,0x68,0x01,0x12,0x47,0x8a,0x12,0x79,0x39,0x53,0x68,0xf0,0x43,0x68,0x02,0x22,
-0x90,0x9f,0x1a,0xef,0xf0,0xf1,0x49,0x90,0x9f,0x1a,0xe0,0x60,0x05,0x90,0x05,0x22,
-0xe4,0xf0,0x53,0x68,0xf0,0x43,0x68,0x04,0x22,0x90,0x01,0x01,0xe0,0x44,0x02,0xf0,
-0x90,0x01,0x00,0x74,0xff,0xf0,0x90,0x00,0x02,0xe0,0x44,0x01,0xf0,0xf1,0x6d,0x90,
-0x01,0xba,0xe4,0xf0,0x22,0xf4,0xff,0x90,0x00,0x63,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,
-0x01,0xc3,0xc0,0xd0,0x7f,0x10,0xdf,0xfe,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x05,0x22,
-0x74,0x6f,0xf0,0x90,0x05,0x27,0xe0,0x54,0xbf,0xf0,0x90,0x9e,0xe1,0x74,0x03,0xf0,
-0x22,0x90,0x01,0x37,0x74,0x02,0xf0,0x12,0x8f,0xd5,0xef,0x70,0x06,0x90,0x01,0xc8,
-0x74,0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x3a,0xc5,0x12,0x57,0x64,0x53,0x68,0xf0,
-0x43,0x68,0x02,0x22,0x90,0x06,0x04,0xe0,0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,0x67,
-0xb4,0x01,0x04,0xe4,0xff,0x11,0x7d,0x53,0x68,0xf0,0x43,0x68,0x0c,0x90,0x9e,0xda,
-0xe0,0x30,0xe0,0x07,0x90,0x05,0x27,0xe0,0x54,0x7f,0xf0,0x22,0x80,0x9f,0x12,0x57,
-0x90,0x80,0x9a,0xf1,0x49,0x90,0x9e,0xe1,0x74,0x04,0xf0,0x22,0xf1,0x91,0x90,0x9e,
-0xdb,0x74,0x03,0xf0,0x22,0xf1,0x30,0x90,0x9e,0xdb,0x74,0x01,0xf0,0x22,0x12,0x47,
-0xf3,0xbf,0x01,0x10,0x90,0x02,0x09,0xe0,0xff,0x7d,0x01,0x12,0x48,0x28,0x90,0x04,
-0x1f,0x74,0x20,0xf0,0x22,0x75,0x28,0x33,0xe4,0xf5,0x29,0x75,0x2a,0x07,0xf5,0x2b,
-0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,0xa3,0xe5,0x2a,0xf0,0xa3,0xe5,
-0x2b,0xf0,0x22,0xe4,0x90,0x9e,0x68,0xf0,0xa3,0xf0,0x12,0x60,0xb4,0x75,0x8e,0x02,
-0x12,0x44,0xe2,0x12,0x60,0x0b,0x90,0x9e,0xba,0xef,0xf0,0x12,0x60,0x1e,0x90,0x9e,
-0xbc,0xef,0xf0,0x12,0x60,0x2a,0x90,0x9e,0xa1,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xf5,
-0x57,0x12,0x82,0x34,0x12,0x77,0x03,0x12,0x37,0x4e,0x31,0x3d,0x11,0x15,0x12,0x60,
-0x42,0x12,0x60,0x57,0xf1,0xe8,0x12,0x45,0x02,0x12,0x60,0xbc,0x12,0x94,0x02,0x31,
-0x25,0x90,0x9e,0x6a,0xe5,0xd9,0xf0,0x12,0x5f,0xdc,0xc2,0xaf,0x90,0x00,0x80,0xe0,
-0x44,0x40,0xf0,0x12,0x4f,0x6d,0x75,0xe8,0x03,0x43,0xa8,0x85,0x12,0x8e,0x27,0xd2,
-0xaf,0x12,0x84,0x56,0x12,0x60,0x5e,0x90,0x9e,0x68,0xe0,0x64,0x01,0xf0,0x24,0x33,
-0x90,0x01,0xc4,0xf0,0x74,0x50,0xa3,0xf0,0xe5,0x57,0x30,0xe0,0x0a,0xc2,0xaf,0x53,
-0x57,0xfe,0x12,0x95,0x34,0xd2,0xaf,0xe5,0x57,0x30,0xe2,0x10,0x12,0x6a,0xf5,0xbf,
-0x01,0x0a,0xc2,0xaf,0x53,0x57,0xfb,0xd2,0xaf,0x12,0x45,0xc7,0xe5,0x57,0x30,0xe4,
-0x0a,0xc2,0xaf,0x53,0x57,0xef,0xd2,0xaf,0x12,0x6b,0x32,0xe5,0x57,0x30,0xe6,0x0a,
-0xc2,0xaf,0x53,0x57,0xbf,0xd2,0xaf,0x12,0x7b,0xd8,0xe5,0x57,0x30,0xe7,0x0a,0xc2,
-0xaf,0x53,0x57,0x7f,0xd2,0xaf,0x12,0x5d,0xe9,0xc2,0xaf,0xe5,0x69,0x54,0x0f,0xff,
-0xbf,0x01,0x0e,0x90,0x9e,0x92,0x74,0x01,0xf0,0x12,0x4d,0xca,0xe4,0x90,0x9e,0x92,
-0xf0,0xd2,0xaf,0x80,0x82,0x90,0x9e,0xbe,0xe0,0x54,0xfe,0xf0,0xe4,0x90,0x9e,0xc0,
-0xf0,0x90,0x9e,0xbe,0xe0,0x54,0x7f,0xf0,0xa3,0x74,0x0a,0xf0,0x22,0x90,0x9e,0xe0,
-0xe0,0x54,0xfe,0xf0,0x54,0xfb,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
-0xa3,0xf0,0x90,0x9e,0xda,0xe0,0x54,0xfe,0xf0,0x54,0xfb,0xf0,0xe4,0xa3,0xf0,0xa3,
-0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,
-0x9e,0x76,0x12,0x43,0x7e,0xe4,0x90,0x9e,0x79,0xf0,0x12,0x1f,0x04,0xc3,0x13,0x20,
-0xe0,0x02,0x41,0xbb,0x90,0x9e,0x76,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0x54,0x02,
-0xfe,0x90,0x9e,0xe0,0xe0,0x54,0xfd,0x4e,0xfe,0xf0,0xef,0x54,0x01,0xff,0xee,0x54,
-0xfe,0x4f,0xff,0xf0,0x12,0x1f,0x04,0xfe,0x54,0x08,0xfd,0xef,0x54,0xf7,0x4d,0xff,
-0x90,0x9e,0xe0,0xf0,0xee,0x54,0x10,0xfe,0xef,0x54,0xef,0x4e,0xff,0xf0,0x12,0x1f,
-0x04,0xfe,0x54,0x20,0xfd,0xef,0x54,0xdf,0x4d,0xff,0x90,0x9e,0xe0,0xf0,0xee,0x54,
-0x40,0xfe,0xef,0x54,0xbf,0x4e,0xf0,0x20,0xe0,0x02,0x41,0xab,0x31,0x3d,0x90,0x9e,
-0x79,0x74,0x21,0xf0,0x90,0x9e,0x76,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0x13,0x13,
-0x54,0x01,0xfe,0x90,0x9e,0xe0,0xe0,0xfd,0x13,0x13,0x54,0x01,0x6e,0x60,0x31,0xef,
-0x54,0x04,0xff,0xed,0x54,0xfb,0x4f,0xf0,0xe0,0x13,0x13,0x54,0x3f,0x30,0xe0,0x15,
-0x90,0x01,0x34,0x74,0x40,0xf0,0xfd,0xe4,0xff,0x12,0x3a,0xc5,0x90,0x9e,0x79,0xe0,
-0x44,0x08,0xf0,0x80,0x0b,0xe4,0x90,0x9e,0xe2,0xf0,0x7d,0x40,0xff,0x12,0x3a,0x54,
-0x90,0x9e,0xe0,0xe0,0xfd,0x13,0x13,0x13,0x54,0x1f,0x30,0xe0,0x07,0x90,0x9e,0x79,
-0xe0,0x44,0x12,0xf0,0xed,0xc4,0x54,0x0f,0x30,0xe0,0x07,0x90,0x9e,0x79,0xe0,0x44,
-0x14,0xf0,0x90,0x9e,0xe0,0xe0,0xc4,0x13,0x54,0x07,0x30,0xe0,0x07,0x90,0x9e,0x79,
-0xe0,0x44,0x80,0xf0,0x90,0x9e,0xe0,0xe0,0xc4,0x13,0x13,0x54,0x03,0x20,0xe0,0x07,
-0x90,0x9e,0x79,0xe0,0x44,0x40,0xf0,0x90,0x9e,0x79,0xe0,0x90,0x05,0x27,0xf0,0x90,
-0x9e,0xe1,0xe0,0x70,0x04,0x7f,0x01,0xd1,0x20,0x90,0x9e,0xe0,0xe0,0xc4,0x13,0x13,
-0x54,0x03,0x30,0xe0,0x04,0x7f,0x03,0x80,0x0e,0x7f,0x01,0x12,0x4e,0x6c,0xef,0x60,
-0x04,0x7f,0x01,0x80,0x02,0x7f,0x02,0xd1,0x20,0x81,0x0e,0x90,0x9e,0x79,0x74,0x01,
-0xf0,0x90,0x05,0x27,0xf0,0xe4,0xff,0xd1,0x20,0x81,0x0c,0x90,0x9e,0x76,0x12,0x43,
-0x5e,0x12,0x1f,0x04,0xff,0x54,0x02,0xfe,0x90,0x9e,0xda,0xe0,0x54,0xfd,0x4e,0xfe,
-0xf0,0xef,0x54,0x01,0xff,0xee,0x54,0xfe,0x4f,0xff,0xf0,0x12,0x1f,0x04,0xfe,0x54,
-0x08,0xfd,0xef,0x54,0xf7,0x4d,0xff,0x90,0x9e,0xda,0xf0,0xee,0x54,0x10,0xfe,0xef,
-0x54,0xef,0x4e,0xff,0xf0,0x12,0x1f,0x04,0x54,0x40,0xfe,0xef,0x54,0xbf,0x4e,0x90,
-0x9e,0xda,0xf0,0x20,0xe0,0x02,0x61,0xdf,0x31,0x3d,0x90,0x9e,0x79,0x74,0x31,0xf0,
-0x90,0x9e,0x76,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0x13,0x13,0x54,0x01,0xfe,0x90,
-0x9e,0xda,0xe0,0xfd,0x13,0x13,0x54,0x01,0x6e,0x60,0x31,0xef,0x54,0x04,0xff,0xed,
-0x54,0xfb,0x4f,0xf0,0xe0,0x13,0x13,0x54,0x3f,0x30,0xe0,0x15,0x90,0x01,0x34,0x74,
-0x40,0xf0,0xfd,0xe4,0xff,0x12,0x3a,0xc5,0x90,0x9e,0x79,0xe0,0x44,0x08,0xf0,0x80,
-0x0b,0xe4,0x90,0x9e,0xdc,0xf0,0x7d,0x40,0xff,0x12,0x3a,0x54,0x90,0x9e,0xda,0xe0,
-0xfd,0x13,0x13,0x13,0x54,0x1f,0x30,0xe0,0x07,0x90,0x9e,0x79,0xe0,0x44,0x02,0xf0,
-0xed,0xc4,0x54,0x0f,0x30,0xe0,0x07,0x90,0x9e,0x79,0xe0,0x44,0x04,0xf0,0x90,0x9e,
-0x79,0xe0,0x54,0x0e,0x60,0x0c,0x90,0x01,0x3e,0x74,0x03,0xf0,0xfd,0x7f,0x02,0x12,
-0x3a,0xdf,0x90,0x9e,0x79,0xe0,0x90,0x05,0x27,0xf0,0x90,0x9e,0xda,0xe0,0xff,0xc4,
-0x13,0x13,0x54,0x03,0x30,0xe0,0x0c,0xa3,0xe0,0x64,0x06,0x60,0x61,0x7f,0x06,0x91,
-0x13,0x80,0x5b,0x90,0x05,0x27,0xe0,0x44,0x40,0xf0,0x90,0x9e,0xdb,0xe0,0xb4,0x06,
-0x19,0x7f,0x01,0x91,0x13,0xe4,0xff,0x12,0x4e,0x6c,0xef,0x60,0x09,0x7d,0x01,0xaf,
-0x69,0x12,0x49,0x21,0x80,0x04,0xf1,0xb6,0x80,0x34,0x12,0x4e,0x27,0x80,0x2f,0x90,
-0x9e,0x79,0x74,0x01,0xf0,0x90,0x05,0x27,0xf0,0x7d,0x03,0x7f,0x02,0x12,0x3a,0x71,
-0x90,0x9e,0xdb,0xe0,0xb4,0x06,0x04,0x7f,0x01,0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,
-0x04,0x04,0xe4,0xff,0x91,0x13,0x12,0x5f,0x5f,0x12,0x4d,0xca,0x31,0x3d,0xd0,0xd0,
-0x92,0xaf,0x22,0x90,0x9e,0xdb,0xe0,0xfe,0x6f,0x70,0x02,0xa1,0xd0,0xef,0x12,0x43,
-0x87,0x54,0x3a,0x00,0x54,0x6f,0x01,0x54,0xaf,0x02,0x54,0xea,0x03,0x55,0x22,0x04,
-0x55,0x5a,0x05,0x55,0x95,0x06,0x00,0x00,0x55,0xd0,0xee,0xb4,0x04,0x04,0x7f,0x01,
-0xa1,0xfc,0x90,0x9e,0xdb,0xe0,0xff,0xb4,0x05,0x02,0xa1,0xd1,0xef,0xb4,0x06,0x06,
-0x7f,0x01,0xb1,0xe6,0x80,0x17,0x90,0x9e,0xdb,0xe0,0xb4,0x03,0x07,0x7f,0x01,0x12,
-0x4f,0xf5,0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,0x02,0x02,0xb1,0xdb,0xc1,0x15,0x90,
-0x9e,0xdb,0xe0,0xb4,0x04,0x06,0x7f,0x01,0xb1,0xfc,0x80,0x09,0x90,0x9e,0xdb,0xe0,
-0xb4,0x05,0x02,0xb1,0xd1,0x90,0x9e,0xdb,0xe0,0x70,0x03,0x02,0x4d,0xdb,0x90,0x9e,
-0xdb,0xe0,0xfe,0xb4,0x06,0x04,0x7f,0x01,0xa1,0xe6,0xee,0xb4,0x03,0x05,0x7f,0x01,
-0x02,0x4f,0xf5,0x90,0x9e,0xdb,0xe0,0x64,0x02,0x60,0x02,0xa1,0xd0,0xa1,0xdb,0x90,
-0x9e,0xdb,0xe0,0xb4,0x04,0x06,0x7f,0x01,0xb1,0xfc,0x80,0x09,0x90,0x9e,0xdb,0xe0,
-0xb4,0x05,0x02,0xb1,0xd1,0x90,0x9e,0xdb,0xe0,0x70,0x05,0x12,0x4d,0xdb,0x80,0x17,
-0x90,0x9e,0xdb,0xe0,0xfe,0xb4,0x06,0x06,0x7f,0x01,0xb1,0xe6,0x80,0x09,0xee,0xb4,
-0x03,0x05,0x7f,0x01,0x12,0x4f,0xf5,0x02,0x8f,0xb4,0x90,0x9e,0xdb,0xe0,0xb4,0x04,
-0x06,0x7f,0x01,0xb1,0xfc,0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,0x05,0x02,0xb1,0xd1,
-0x90,0x9e,0xdb,0xe0,0x70,0x05,0x12,0x4d,0xdb,0x80,0x14,0x90,0x9e,0xdb,0xe0,0xfe,
-0xb4,0x06,0x06,0xe4,0xff,0xb1,0xe6,0x80,0x06,0xee,0xb4,0x02,0x02,0xb1,0xdb,0x02,
-0x4f,0xec,0x90,0x9e,0xdb,0xe0,0xfe,0xb4,0x06,0x06,0xe4,0xff,0xb1,0xe6,0x80,0x14,
-0xee,0xb4,0x03,0x07,0x7f,0x01,0x12,0x4f,0xf5,0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,
-0x02,0x02,0xb1,0xdb,0x90,0x9e,0xdb,0xe0,0xb4,0x01,0x04,0xd1,0x15,0x80,0x09,0x90,
-0x9e,0xdb,0xe0,0xb4,0x05,0x02,0xb1,0xd1,0xe1,0x87,0x90,0x9e,0xdb,0xe0,0xfe,0xb4,
-0x06,0x06,0xe4,0xff,0xb1,0xe6,0x80,0x14,0xee,0xb4,0x03,0x07,0x7f,0x01,0x12,0x4f,
-0xf5,0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,0x02,0x02,0xb1,0xdb,0x90,0x9e,0xdb,0xe0,
-0xb4,0x01,0x04,0xd1,0x15,0x80,0x0b,0x90,0x9e,0xdb,0xe0,0xb4,0x04,0x04,0x7f,0x01,
-0xb1,0xfc,0x02,0x8f,0xa7,0x90,0x9e,0xdb,0xe0,0xb4,0x04,0x06,0x7f,0x01,0xb1,0xfc,
-0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,0x05,0x02,0xb1,0xd1,0x90,0x9e,0xdb,0xe0,0x70,
-0x05,0x12,0x4d,0xdb,0x80,0x17,0x90,0x9e,0xdb,0xe0,0xb4,0x03,0x07,0xe4,0xff,0x12,
-0x4f,0xf5,0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,0x02,0x02,0xb1,0xdb,0x12,0x8f,0xc1,
-0x22,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xdb,0xf0,0x22,0x90,0x05,0x22,0xe4,0xf0,
-0x90,0x9e,0xdb,0x04,0xf0,0x22,0x90,0x05,0x27,0xe0,0x44,0x40,0xf0,0xef,0x60,0x05,
-0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xdb,0x74,0x01,0xf0,0x22,0x90,0x9f,0x1d,0xef,
-0xf0,0x12,0x4f,0x49,0x90,0x9f,0x1d,0xe0,0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,0xe4,
-0x90,0x9e,0xdb,0xf0,0x22,0x7f,0x01,0x12,0x4f,0xb4,0xe4,0x90,0x9e,0xdb,0xf0,0x22,
-0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xe1,0xe0,0x90,0x9f,0x1c,0xf0,0x6f,
-0x70,0x02,0xc1,0xf0,0xef,0x14,0x60,0x3d,0x14,0x60,0x61,0x14,0x70,0x02,0xc1,0xc7,
-0x24,0x03,0x60,0x02,0xc1,0xf0,0x90,0x9f,0x1c,0xe0,0xb4,0x03,0x04,0xf1,0x0c,0xc1,
-0xf0,0x90,0x9f,0x1c,0xe0,0xb4,0x02,0x04,0xf1,0x24,0xc1,0xf0,0x90,0x9f,0x1c,0xe0,
-0xb4,0x04,0x04,0xf1,0x28,0xc1,0xf0,0x90,0x9f,0x1c,0xe0,0x64,0x01,0x60,0x02,0xc1,
-0xf0,0xf1,0x0e,0x80,0x7b,0x90,0x9f,0x1c,0xe0,0xff,0xb4,0x03,0x04,0xf1,0xa3,0x80,
-0x6f,0xef,0xb4,0x02,0x04,0xf1,0x40,0x80,0x67,0x90,0x9f,0x1c,0xe0,0xff,0xb4,0x04,
-0x04,0xf1,0x35,0x80,0x5b,0xef,0x70,0x58,0xf1,0x90,0x80,0x54,0x90,0x9f,0x1c,0xe0,
-0xb4,0x03,0x04,0xf1,0x4e,0x80,0x49,0x90,0x9f,0x1c,0xe0,0xb4,0x01,0x04,0xd1,0xf7,
-0x80,0x3e,0x90,0x9f,0x1c,0xe0,0xb4,0x04,0x04,0xf1,0x2c,0x80,0x33,0x90,0x9f,0x1c,
-0xe0,0x70,0x2d,0xd1,0xf5,0x80,0x29,0x90,0x9f,0x1c,0xe0,0xff,0xb4,0x01,0x05,0x12,
-0x4f,0x7d,0x80,0x1c,0xef,0xb4,0x02,0x05,0x12,0x44,0xfc,0x80,0x13,0x90,0x9f,0x1c,
-0xe0,0xff,0xb4,0x04,0x05,0x12,0x4f,0xdc,0x80,0x06,0xef,0x70,0x03,0x12,0x4f,0xde,
-0xd0,0xd0,0x92,0xaf,0x22,0xf1,0x90,0x12,0x8f,0xd5,0xef,0x70,0x06,0x90,0x01,0xc8,
-0x74,0xfd,0xf0,0xf1,0x64,0x90,0x9e,0xe1,0x74,0x02,0xf0,0x22,0xf1,0xa3,0x7d,0x03,
-0x7f,0x02,0x12,0x3a,0x71,0x90,0x05,0x27,0xe4,0xf0,0xe0,0x54,0xbf,0xf0,0xe4,0x90,
-0x9e,0xe1,0xf0,0x22,0xf1,0x40,0x80,0xe6,0xf1,0x35,0x80,0xe2,0xf1,0x64,0x90,0x9e,
-0xe1,0x74,0x02,0xf0,0x22,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xe1,0x04,0xf0,0x22,
-0x12,0x4f,0x49,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xe1,0x04,0xf0,0x22,0x90,0x05,
-0x27,0xe0,0x44,0x40,0xf0,0xf1,0x5e,0x90,0x9e,0xe1,0x74,0x02,0xf0,0x22,0x90,0x05,
-0x22,0x74,0xff,0xf0,0x90,0x00,0x02,0xe0,0x54,0xfe,0xf0,0x12,0x4f,0x6d,0x90,0x01,
-0x00,0x74,0x3f,0xf0,0xa3,0xe0,0x54,0xfd,0xf0,0x90,0x05,0x53,0xe0,0x44,0x20,0xf0,
-0x90,0x01,0xba,0x74,0xcc,0xf0,0x22,0xf1,0x5e,0x90,0x9e,0xdb,0x74,0x04,0xf0,0x22,
-0x90,0x01,0x3e,0x74,0x03,0xf0,0xfd,0x7f,0x02,0x12,0x3a,0xdf,0x90,0x9e,0xe1,0x74,
-0x01,0xf0,0x22,0x90,0x05,0x22,0xe4,0xf0,0x90,0x05,0x27,0xe0,0x44,0x40,0xf0,0x90,
-0x9e,0xe1,0x74,0x01,0xf0,0x22,0x90,0x9e,0x90,0xe0,0x60,0x16,0x90,0x9e,0xdb,0xe0,
-0x70,0x04,0x7f,0x05,0x80,0x1f,0x90,0x9e,0xdb,0xe0,0x64,0x01,0x70,0x19,0x7f,0x02,
-0x80,0x13,0x90,0x9e,0xdb,0xe0,0xb4,0x01,0x04,0x7f,0x03,0x80,0x08,0x90,0x9e,0xdb,
-0xe0,0x70,0x04,0x7f,0x04,0x91,0x13,0x22,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,
-0x32,0x43,0x32,0x20,0x90,0x01,0x38,0xe5,0x30,0xf0,0xa3,0xe5,0x31,0xf0,0xa3,0xe5,
-0x32,0xf0,0x22,0x90,0x01,0x30,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,
-0x38,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x50,0x12,0x44,0xcc,0xe4,0xfd,
-0x7f,0x51,0x12,0x44,0xcc,0xe4,0xfd,0x7f,0x52,0x12,0x44,0xcc,0xe4,0xfd,0x7f,0x53,
-0x02,0x44,0xcc,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,
-0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,
-0x90,0x01,0xc4,0x74,0x33,0xf0,0x74,0x58,0xa3,0xf0,0x90,0x01,0x34,0xe0,0x55,0x28,
-0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,0xa3,0xe0,0x55,0x2b,0xf5,0x2f,
-0xe5,0x2c,0x20,0xe0,0x02,0x21,0xe9,0x90,0x01,0x34,0x74,0x01,0xf0,0x85,0xd1,0x4d,
-0x85,0xd3,0x4f,0x85,0xd4,0x50,0x85,0xd5,0x51,0x85,0xd6,0x52,0x85,0xd7,0x53,0x85,
-0xd9,0x54,0x85,0xd2,0x4e,0x78,0xac,0x7c,0x9e,0xfd,0x7b,0x00,0x7a,0x00,0x79,0x4d,
-0x7e,0x00,0x7f,0x08,0x12,0x1e,0xde,0x90,0x9e,0xad,0xe0,0xff,0xc4,0x13,0x54,0x01,
-0xfe,0xef,0xc4,0x13,0x13,0x54,0x01,0x6e,0x70,0x02,0x21,0x9b,0x90,0x9e,0xad,0xe0,
-0xff,0xc4,0x13,0x13,0x13,0x54,0x01,0x30,0xe0,0x02,0x21,0x9b,0xef,0x54,0x1f,0xf5,
-0x08,0x90,0x9e,0xae,0xe0,0x54,0x3f,0xf5,0x09,0x90,0x9e,0xb0,0xe0,0x54,0x1f,0xff,
-0xe5,0x08,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0x8f,0xf0,
-0x12,0x42,0x54,0xe5,0x09,0xd3,0x94,0x04,0x40,0x03,0x75,0x09,0x04,0x75,0xf0,0x0a,
-0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x52,0x75,0xf0,0x02,0xe5,0x09,0x12,0x43,0x52,
-0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x9e,0xb0,0xe0,0x54,0x1f,0x2f,0xff,0xe4,0x3e,0xfe,
-0x75,0xf0,0x0a,0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x52,0x75,0xf0,0x02,0xe5,0x09,
-0x12,0x43,0x52,0xee,0xf0,0xa3,0xef,0xf0,0x90,0x9e,0xad,0xe0,0xc4,0x13,0x13,0x54,
-0x03,0x20,0xe0,0x28,0x90,0x9e,0xb0,0xe0,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,
-0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x54,0x90,0x9e,
-0xaf,0xe0,0x30,0xe7,0x36,0xaf,0x08,0x12,0x74,0xbb,0x80,0x2f,0x90,0x9e,0xb0,0xe0,
-0x54,0x1f,0xff,0xfd,0xe5,0x08,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,
-0x83,0xe4,0x8d,0xf0,0x12,0x42,0x54,0x90,0x9e,0xaf,0xe0,0xfe,0x30,0xe7,0x0c,0x54,
-0x7f,0xfd,0x8f,0x0d,0xab,0x09,0xaf,0x08,0x12,0x74,0x58,0xe5,0x6a,0x14,0x24,0xfd,
-0x50,0x02,0x80,0x45,0x90,0x9e,0x9e,0xe0,0x60,0x37,0x90,0x01,0x5b,0xe4,0xf0,0x90,
-0x01,0x3c,0x74,0x04,0xf0,0x91,0xb8,0xef,0x64,0x01,0x70,0x2d,0x90,0x9e,0x93,0xe0,
-0xf5,0x48,0x75,0x49,0x00,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x39,0xa9,0x90,
-0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,0x9e,0x9c,0xf0,0x80,
-0x08,0x91,0xb8,0xbf,0x01,0x03,0x12,0x4d,0xca,0xe5,0x2c,0x30,0xe1,0x7b,0x90,0x01,
-0x34,0x74,0x02,0xf0,0x90,0xfd,0x10,0x74,0x7f,0xf0,0x90,0x04,0x7f,0xe0,0x54,0x07,
-0xf5,0x55,0x90,0x04,0x7e,0xe0,0x54,0x07,0xf5,0x56,0x65,0x55,0x60,0x5b,0xe4,0xff,
-0x75,0xf0,0x08,0xe5,0x55,0xa4,0x2f,0xf5,0x82,0xe4,0x35,0xf0,0xf5,0x83,0xe5,0x82,
-0x24,0xc0,0xf5,0x82,0xe5,0x83,0x34,0xfc,0xf5,0x83,0xe0,0xfe,0x74,0x58,0x2f,0xf8,
-0xa6,0x06,0x0f,0xbf,0x08,0xda,0x78,0xa3,0x7c,0x9e,0x7d,0x01,0x7b,0x00,0x7a,0x00,
-0x79,0x58,0x7e,0x00,0x7f,0x08,0x12,0x1e,0xde,0x90,0x9e,0xa3,0xe0,0xff,0xc4,0x13,
-0x13,0x54,0x03,0x30,0xe0,0x02,0xb1,0x18,0xe5,0x55,0x24,0x01,0xff,0xef,0x54,0x07,
-0xf5,0x55,0x90,0x04,0x7f,0xf0,0xb5,0x56,0xa5,0xe5,0x2c,0x30,0xe3,0x10,0x90,0x01,
-0x34,0x74,0x08,0xf0,0x90,0x9e,0xc1,0xe0,0x30,0xe0,0x03,0x43,0x57,0x04,0xe5,0x2c,
-0x30,0xe4,0x09,0x90,0x01,0x34,0x74,0x10,0xf0,0x43,0x57,0x10,0xe5,0x2c,0x30,0xe5,
-0x25,0x90,0x01,0xcf,0xe0,0x30,0xe5,0x1e,0xe0,0x54,0xdf,0xf0,0x90,0x01,0x34,0x74,
-0x20,0xf0,0x75,0xa8,0x00,0x75,0xe8,0x00,0x11,0x03,0x90,0x00,0x03,0xe0,0x54,0xfb,
-0xf0,0x12,0x4f,0x6d,0x80,0xfe,0xe5,0x2c,0x30,0xe6,0x06,0x90,0x01,0x34,0x74,0x40,
-0xf0,0xe5,0x2e,0x30,0xe0,0x41,0x90,0x9e,0xbb,0x74,0x01,0xf0,0x90,0x01,0x36,0xf0,
-0x12,0x95,0xd8,0x90,0x9e,0xe0,0xe0,0x30,0xe0,0x0d,0x13,0x13,0x54,0x3f,0x30,0xe0,
-0x06,0x90,0x9e,0xe2,0x74,0x01,0xf0,0x90,0x9e,0xda,0xe0,0xff,0x30,0xe0,0x0d,0x13,
-0x13,0x54,0x3f,0x30,0xe0,0x06,0x90,0x9e,0xdc,0x74,0x01,0xf0,0x12,0x4e,0x7a,0x12,
-0x94,0xbe,0x90,0x9e,0xbb,0xe4,0xf0,0xe5,0x2e,0x30,0xe1,0x60,0x90,0x01,0x36,0x74,
-0x02,0xf0,0x43,0x57,0x40,0x12,0x96,0x30,0x90,0x01,0x02,0xe0,0x54,0x03,0x64,0x01,
-0x70,0x29,0x90,0x01,0x37,0xe0,0x30,0xe0,0x0a,0x74,0x01,0xf0,0x90,0x9e,0xab,0xe4,
-0xf0,0x80,0x18,0x90,0x9e,0xab,0xe0,0x04,0xf0,0xe0,0xc3,0x94,0x0a,0x40,0x0c,0xe4,
-0xf0,0x90,0x04,0x19,0xe0,0x30,0xe0,0x03,0x12,0x4f,0xfe,0x90,0x9e,0xda,0xe0,0x30,
-0xe0,0x0d,0xe4,0xff,0x12,0x4e,0x6c,0xef,0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,
-0x9e,0xa0,0xe0,0x60,0x07,0x7d,0x02,0x7f,0x02,0x12,0x3a,0x54,0xe5,0x2e,0x30,0xe2,
-0x43,0x90,0x01,0x36,0x74,0x04,0xf0,0x90,0x9e,0xda,0xe0,0x30,0xe0,0x06,0xa3,0xe0,
-0x64,0x06,0x60,0x30,0x12,0x65,0x92,0x90,0x9e,0xa0,0xe0,0x60,0x27,0x90,0x9e,0x9d,
-0xe0,0xff,0x90,0x9e,0x8e,0xe0,0xb5,0x07,0x1b,0x90,0x9e,0x9d,0xe0,0x90,0x05,0x73,
-0xf0,0x90,0x01,0x3f,0x74,0x10,0xf0,0xfd,0x7f,0x03,0x12,0x3a,0xdf,0x7d,0x01,0x7f,
-0x02,0x12,0x3a,0x54,0xe5,0x2e,0x30,0xe3,0x34,0x90,0x01,0x36,0x74,0x08,0xf0,0xe5,
-0x67,0x64,0x01,0x70,0x28,0xe5,0x6a,0x60,0x24,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,
-0x3c,0x74,0x02,0xf0,0x75,0x48,0x00,0x90,0x9e,0x95,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,
-0x7f,0x54,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,
-0xe4,0x2b,0x90,0x01,0x36,0x74,0x10,0xf0,0xe5,0x67,0xb4,0x01,0x20,0xe5,0x6a,0x60,
-0x1c,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x9f,0xe4,
-0xf0,0x53,0x6b,0xfd,0xe5,0x6b,0x54,0x07,0x70,0x03,0x12,0x4d,0xca,0xe5,0x2e,0x30,
-0xe5,0x25,0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x67,0xb4,0x01,0x1a,0xe5,0x6a,0x60,
-0x16,0x90,0x9e,0x9e,0xe0,0x64,0x02,0x60,0x0b,0xe5,0x68,0x64,0x0c,0x60,0x08,0x12,
-0x64,0x90,0x80,0x03,0x12,0x66,0x76,0xe5,0x2e,0x30,0xe6,0x1b,0x90,0x01,0x36,0x74,
-0x40,0xf0,0xe5,0x67,0xb4,0x01,0x10,0xe5,0x6a,0x60,0x0c,0x53,0x6b,0xfe,0xe5,0x6b,
-0x54,0x07,0x70,0x03,0x12,0x4d,0xca,0xe5,0x2f,0x30,0xe1,0x26,0x90,0x01,0x37,0x74,
-0x02,0xf0,0x90,0x9e,0xda,0xe0,0x30,0xe0,0x17,0xe4,0xff,0x12,0x4e,0x6c,0xef,0x60,
-0x07,0x91,0xd1,0x12,0x4e,0x27,0x80,0x0a,0x90,0x9e,0xdf,0x74,0x01,0xf0,0x80,0x02,
-0x91,0xd1,0x74,0x33,0x04,0x90,0x01,0xc4,0xf0,0x74,0x58,0xa3,0xf0,0xd0,0x07,0xd0,
-0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,
-0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x90,0x04,0x1a,0xe0,0xf4,0x60,0x03,0x7f,
-0x00,0x22,0x90,0x04,0x1b,0xe0,0x54,0x07,0x64,0x07,0x7f,0x01,0x60,0x02,0x7f,0x00,
-0x22,0x7d,0x02,0x7f,0x03,0x12,0x3a,0x54,0xe5,0x6a,0x14,0x24,0xfd,0x50,0x06,0x24,
-0xfd,0x50,0x24,0x80,0x32,0x90,0x9e,0x86,0xe0,0x20,0xe0,0x2b,0x90,0x9e,0x9e,0xe0,
-0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x1c,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x04,0x50,
-0x16,0x7d,0x01,0x7f,0x04,0x80,0x0d,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,
-0x7d,0x01,0x7f,0x04,0x12,0x49,0x21,0x22,0x90,0x9e,0x52,0xe0,0x54,0xf0,0x44,0x03,
-0xf0,0x54,0x0f,0x44,0x80,0xf0,0x7b,0x00,0x7a,0x00,0x79,0x58,0x90,0x9e,0xfe,0x12,
-0x43,0x7e,0x0b,0x7a,0x9e,0x79,0x52,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
-0xfb,0x12,0x43,0x7e,0x90,0x9d,0xa9,0xe0,0xff,0x90,0x9d,0xa8,0xe0,0xb5,0x07,0x07,
-0x7d,0x02,0x7f,0x03,0x12,0x3a,0xdf,0x90,0x9d,0xa8,0xe0,0x70,0x06,0xa3,0xe0,0x64,
-0x09,0x60,0x0b,0x90,0x9d,0xa8,0xe0,0x14,0xff,0xa3,0xe0,0xb5,0x07,0x0d,0xf1,0x05,
-0xef,0x60,0x71,0xb1,0xe9,0x90,0x01,0x3f,0x74,0x02,0xf0,0x90,0x9d,0xa9,0xe0,0x75,
-0xf0,0x0f,0xa4,0x24,0xad,0xf9,0x74,0x9d,0x35,0xf0,0xa8,0x01,0xfc,0x7d,0x01,0x90,
-0x9e,0xfb,0x12,0x43,0x5e,0x7e,0x00,0x7f,0x02,0x12,0x1e,0xde,0x90,0x9d,0xa9,0xe0,
-0x75,0xf0,0x0f,0xa4,0x24,0xaf,0xf9,0x74,0x9d,0x35,0xf0,0xfa,0x7b,0x01,0xc0,0x03,
-0xc0,0x02,0xc0,0x01,0x90,0x9e,0xfe,0x12,0x43,0x5e,0x8b,0x63,0x8a,0x64,0x89,0x65,
-0x90,0x9e,0xfb,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0xc4,0x54,0x0f,0xf5,0x66,0xd0,
-0x01,0xd0,0x02,0xd0,0x03,0x12,0x47,0x40,0x90,0x9d,0xa9,0xe0,0x04,0xf0,0xe0,0xb4,
-0x0a,0x02,0xe4,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
-0x90,0x9d,0xa8,0xe0,0x75,0xf0,0x0f,0xa4,0x24,0xad,0xf9,0x74,0x9d,0x35,0xf0,0xfa,
-0x7b,0x01,0xc0,0x02,0xc0,0x01,0xe0,0x75,0xf0,0x0f,0xa4,0x24,0xaf,0xf9,0x74,0x9d,
-0x35,0xf0,0xfa,0x90,0x9e,0xf8,0x12,0x43,0x7e,0xd0,0x01,0xd0,0x02,0xd1,0x43,0x90,
-0x9d,0xa8,0xe0,0x04,0xf0,0xe0,0xb4,0x0a,0x02,0xe4,0xf0,0x90,0x9d,0xa9,0xe0,0xff,
-0x90,0x9d,0xa8,0xe0,0xb5,0x07,0x07,0x7d,0x02,0x7f,0x03,0x12,0x3a,0x71,0xd0,0xd0,
-0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xf5,0x12,0x43,0x7e,
-0x90,0x9d,0xa7,0xe0,0xff,0x04,0xf0,0x90,0x00,0x01,0xef,0x12,0x42,0x32,0xf1,0x05,
-0xef,0x70,0x02,0xe1,0x00,0x90,0x9e,0xf5,0x12,0x43,0x5e,0x8b,0x63,0x8a,0x64,0x89,
-0x65,0x75,0x66,0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x47,0x40,0x90,0x9e,0xf8,
-0x12,0x43,0x5e,0x8b,0x63,0x8a,0x64,0x89,0x65,0x90,0x9e,0xf5,0x12,0x43,0x5e,0x12,
-0x1f,0x04,0xff,0xc4,0x54,0x0f,0xf5,0x66,0x7b,0x01,0x7a,0x01,0x79,0xa2,0x12,0x47,
-0x40,0x90,0x01,0xaf,0x74,0xff,0xf0,0x90,0x9e,0xba,0xe0,0x64,0x01,0x70,0x4a,0x90,
-0x9e,0xf5,0x12,0x43,0x5e,0x8b,0x63,0x8a,0x64,0x89,0x65,0x75,0x66,0x02,0x7b,0x01,
-0x7a,0xfd,0x79,0x20,0x12,0x47,0x40,0x90,0x9e,0xf8,0x12,0x43,0x5e,0x8b,0x63,0x8a,
-0x64,0x89,0x65,0x90,0x9e,0xf5,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0xc4,0x54,0x0f,
-0xf5,0x66,0x7b,0x01,0x7a,0xfd,0x79,0x22,0x12,0x47,0x40,0x90,0x9e,0xa1,0xe0,0xfe,
-0xa3,0xe0,0xf5,0x82,0x8e,0x83,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,
-0xd0,0xd0,0x92,0xaf,0x22,0x7f,0xaf,0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
-0x90,0x9f,0x06,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9f,0x06,
-0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9f,0x09,0xe0,
-0x94,0xe8,0x90,0x9f,0x08,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,0x10,
-0xf0,0x7f,0x00,0x80,0x15,0x90,0x9f,0x08,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,
-0x0a,0x7e,0x00,0x12,0x3b,0x3b,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0x90,
-0x9e,0xdf,0xe0,0xb4,0x01,0x04,0xe4,0xf0,0x91,0xd1,0x22,0x90,0x9e,0xda,0xe0,0xff,
-0xc4,0x13,0x13,0x54,0x03,0x30,0xe0,0x0b,0xa3,0xe0,0x64,0x06,0x60,0x05,0x7f,0x06,
-0x12,0x54,0x13,0x90,0x9e,0xdb,0xe0,0x64,0x06,0x60,0x02,0xf1,0x5f,0x22,0xad,0x07,
-0x90,0x9e,0x56,0xe0,0x54,0xf0,0x44,0x05,0xf0,0x54,0x0f,0x44,0x10,0xf0,0x90,0x9e,
-0x58,0xef,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x58,0x90,0x9e,0xfe,0x12,0x43,0x7e,0x7a,
-0x9e,0x79,0x56,0xa1,0x37,0xad,0x07,0x90,0x9e,0x60,0xe0,0x54,0xf0,0x44,0x07,0xf0,
-0x54,0x0f,0x44,0x10,0xf0,0x90,0x9e,0x62,0xef,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x62,
-0x90,0x9e,0xfe,0x12,0x43,0x7e,0x7a,0x9e,0x79,0x60,0xa1,0x37,0x90,0x01,0x3c,0x74,
-0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
-0xfd,0x7f,0x54,0x12,0x44,0xcc,0x7d,0xff,0x7f,0x55,0x12,0x44,0xcc,0x7d,0xff,0x7f,
-0x56,0x12,0x44,0xcc,0x7d,0xff,0x7f,0x57,0x02,0x44,0xcc,0x90,0x00,0xf4,0xe0,0x20,
-0xe3,0x09,0xe0,0x7f,0x01,0x20,0xe2,0x05,0x7f,0x02,0x22,0x7f,0x00,0x22,0x90,0x00,
-0xf3,0xe0,0x7f,0x00,0x30,0xe3,0x02,0x7f,0x01,0x22,0x90,0x9e,0xbc,0xe0,0xb4,0x01,
-0x0c,0x90,0x00,0xf2,0xe0,0x30,0xe7,0x05,0x7e,0xfd,0x7f,0x33,0x22,0x7e,0xfd,0x7f,
-0x2f,0x22,0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,
-0x05,0x5a,0xf0,0xa3,0xe4,0xf0,0x22,0x90,0x01,0x64,0x74,0x20,0xf0,0x22,0xe4,0x90,
-0x9e,0x6b,0xf0,0xa3,0xf0,0x90,0x01,0x98,0xe0,0x7f,0x00,0x30,0xe4,0x02,0x7f,0x01,
-0xef,0x64,0x01,0x60,0x3e,0xc3,0x90,0x9e,0x6c,0xe0,0x94,0x88,0x90,0x9e,0x6b,0xe0,
-0x94,0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,0x9e,0x6b,0xe4,
-0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,0x14,0x7e,0x00,0x12,0x3b,0x3b,0xd3,0x90,0x9e,
-0x6c,0xe0,0x94,0x32,0x90,0x9e,0x6b,0xe0,0x94,0x00,0x40,0xb9,0x90,0x01,0xc7,0xe0,
-0x30,0xe3,0xb2,0x22,0x90,0x01,0x94,0xe0,0x44,0x01,0xf0,0x22,0x90,0x01,0x01,0xe0,
-0x44,0x04,0xf0,0x90,0x01,0x9c,0x74,0x7e,0xf0,0xa3,0x74,0x92,0xf0,0xa3,0x74,0xa0,
-0xf0,0xa3,0x74,0x24,0xf0,0x90,0x01,0x9b,0x74,0x49,0xf0,0x90,0x01,0x9a,0x74,0xe0,
-0xf0,0x90,0x01,0x99,0xe4,0xf0,0x90,0x01,0x98,0x04,0xf0,0x22,0xc0,0xe0,0xc0,0x83,
-0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x7d,0xec,0x90,
-0x01,0xc4,0xed,0xf0,0x74,0x60,0xff,0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,
-0xfe,0x90,0x00,0x55,0xe0,0x5e,0xf5,0x3d,0x90,0x00,0x52,0xe0,0xfe,0x90,0x00,0x56,
-0xe0,0x5e,0xf5,0x3e,0xe5,0x3d,0x30,0xe4,0x06,0x90,0x00,0x55,0x74,0x10,0xf0,0xe5,
-0x3d,0x30,0xe5,0x06,0x90,0x00,0x55,0x74,0x20,0xf0,0xe5,0x3d,0x30,0xe6,0x06,0x90,
-0x00,0x55,0x74,0x40,0xf0,0xe5,0x3d,0x30,0xe7,0x06,0x90,0x00,0x55,0x74,0x80,0xf0,
-0xe5,0x3e,0x30,0xe0,0x06,0x90,0x00,0x56,0x74,0x01,0xf0,0xe5,0x3e,0x30,0xe1,0x06,
-0x90,0x00,0x56,0x74,0x02,0xf0,0xe5,0x3e,0x30,0xe2,0x06,0x90,0x00,0x56,0x74,0x04,
-0xf0,0xe5,0x3e,0x30,0xe3,0x06,0x90,0x00,0x56,0x74,0x08,0xf0,0x90,0x01,0xc4,0xed,
-0xf0,0xa3,0xef,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0xd0,0xd0,0x82,0xd0,0x83,
-0xd0,0xe0,0x32,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,
-0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,
-0x90,0x01,0xc4,0x74,0x93,0xf0,0x74,0x61,0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,0x3c,
-0xe0,0x55,0x30,0xf5,0x34,0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,0xf5,
-0x36,0xa3,0xe0,0x55,0x33,0xf5,0x37,0xe5,0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,0x74,
-0x01,0xf0,0xe5,0x34,0x30,0xe1,0x08,0x90,0x01,0x3c,0x74,0x02,0xf0,0xd1,0x38,0xe5,
-0x34,0x30,0xe2,0x36,0x90,0x01,0x3c,0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe0,
-0x21,0x75,0x48,0x00,0x90,0x9e,0x93,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,
-0x01,0x12,0x39,0xa9,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,
-0x80,0x08,0x90,0x9e,0x9c,0xe4,0xf0,0x12,0x4d,0xca,0xe5,0x34,0x30,0xe3,0x36,0x90,
-0x01,0x3c,0x74,0x08,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe1,0x21,0x75,0x48,0x00,0x90,
-0x9e,0x93,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x12,0x39,0xa9,0x90,
-0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x80,0x08,0x90,0x9e,0x9b,
-0xe4,0xf0,0x12,0x4d,0xca,0xe5,0x34,0x30,0xe4,0x09,0x90,0x01,0x3c,0x74,0x10,0xf0,
-0x12,0x49,0xa3,0xe5,0x34,0x30,0xe5,0x06,0x90,0x01,0x3c,0x74,0x20,0xf0,0xe5,0x35,
-0x30,0xe0,0x18,0x90,0x01,0x3d,0x74,0x01,0xf0,0x90,0x01,0x2f,0xe0,0x44,0x7f,0xf0,
-0x90,0x00,0x83,0xe0,0xf5,0x69,0x91,0x71,0x12,0x4d,0xca,0xe5,0x35,0x30,0xe2,0x0c,
-0x90,0x01,0x3d,0x74,0x04,0xf0,0x53,0x6b,0xfb,0x12,0x4d,0xca,0xe5,0x36,0x30,0xe0,
-0x6d,0x90,0x01,0x3e,0x74,0x01,0xf0,0x90,0x9e,0xe0,0xe0,0x30,0xe0,0x13,0xa3,0xe0,
-0x64,0x03,0x60,0x0d,0x7f,0x01,0x12,0x4e,0x6c,0xef,0x60,0x05,0x7f,0x01,0x12,0x56,
-0x20,0x90,0x9e,0xda,0xe0,0x30,0xe0,0x46,0xe4,0xff,0x12,0x4e,0x6c,0xef,0x60,0x3e,
-0x12,0x5f,0x6b,0x90,0x9e,0xdb,0xe0,0xff,0x64,0x06,0x60,0x32,0xef,0xb4,0x04,0x02,
-0x80,0x07,0x90,0x9e,0xdb,0xe0,0xb4,0x05,0x04,0xe4,0xff,0x80,0x14,0x90,0x9e,0xdb,
-0xe0,0xb4,0x03,0x04,0x7f,0x01,0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,0x02,0x05,0x7f,
-0x01,0x12,0x54,0x13,0x7d,0x01,0xaf,0x69,0x12,0x49,0x21,0x12,0x4e,0x27,0xe5,0x36,
-0x30,0xe1,0x3c,0x90,0x01,0x3e,0x74,0x02,0xf0,0x90,0x9e,0xe0,0xe0,0x30,0xe0,0x13,
-0xa3,0xe0,0x64,0x03,0x60,0x0d,0x7f,0x01,0x12,0x4e,0x6c,0xef,0x70,0x05,0x7f,0x02,
-0x12,0x56,0x20,0x90,0x9e,0xda,0xe0,0x30,0xe0,0x15,0xd1,0xbc,0x90,0x9e,0xdb,0xe0,
-0x64,0x06,0x60,0x0b,0xe4,0xff,0x12,0x4e,0x6c,0xef,0x70,0x03,0x12,0x57,0xb6,0xe5,
-0x36,0x30,0xe3,0x09,0x90,0x01,0x3e,0x74,0x08,0xf0,0x43,0x6b,0x04,0xe5,0x36,0x30,
-0xe4,0x06,0x90,0x01,0x3e,0x74,0x10,0xf0,0xe5,0x36,0x30,0xe2,0x76,0x90,0x01,0x3e,
-0x74,0x04,0xf0,0x90,0x07,0x8f,0xe0,0x30,0xe7,0x13,0x74,0x80,0xf0,0x90,0x07,0x95,
-0x74,0x04,0xf0,0xa3,0xe0,0x44,0x04,0xf0,0xe4,0xff,0x12,0x4d,0xe4,0x90,0x07,0x8f,
-0xe0,0x30,0xe6,0x12,0x74,0x40,0xf0,0x90,0x07,0x7c,0xe0,0xb4,0x06,0x08,0x90,0x07,
-0x80,0xe0,0xff,0x12,0x5f,0x8e,0x90,0x07,0x8f,0xe0,0x30,0xe5,0x14,0x74,0x20,0xf0,
-0xe4,0xff,0x12,0x4d,0xe4,0x90,0x07,0x95,0xe0,0x44,0x01,0xf0,0xa3,0xe0,0x44,0x01,
-0xf0,0x90,0x07,0x95,0xe0,0x30,0xe2,0x0d,0x74,0x04,0xf0,0xa3,0xe0,0x54,0xfb,0xf0,
-0x7f,0x01,0x12,0x4d,0xe4,0x90,0x07,0x95,0xe0,0x30,0xe0,0x07,0x74,0x01,0xf0,0xff,
-0x12,0x4d,0xe4,0xe5,0x36,0x30,0xe5,0x06,0x90,0x01,0x3e,0x74,0x20,0xf0,0xe5,0x36,
-0x30,0xe6,0x08,0x90,0x01,0x3e,0x74,0x40,0xf0,0x91,0x90,0xe5,0x36,0x30,0xe7,0x0c,
-0x90,0x01,0x3e,0x74,0x80,0xf0,0x53,0x6b,0xfe,0x12,0x4d,0xca,0xe5,0x37,0x30,0xe1,
-0x09,0x90,0x01,0x3f,0x74,0x02,0xf0,0x43,0x57,0x80,0xe5,0x37,0x30,0xe4,0x1c,0x90,
-0x01,0x3f,0x74,0x10,0xf0,0x12,0x4e,0x7a,0x90,0x9e,0x9d,0xe0,0x90,0x05,0x73,0xf0,
-0x90,0x01,0x36,0x74,0x02,0xf0,0xfd,0xff,0x12,0x3a,0xc5,0x74,0x93,0x04,0x90,0x01,
-0xc4,0xf0,0x74,0x61,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,
-0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,
-0x32,0xe5,0x69,0x30,0xe6,0x19,0xe5,0x69,0x54,0x0f,0xff,0x90,0x9e,0x85,0xe0,0xfe,
-0x4f,0x90,0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x9e,0x85,0xf0,0x53,0x69,0xbf,0x22,
-0x90,0x9e,0x86,0xe0,0x30,0xe0,0x11,0x90,0x05,0x22,0xe0,0x20,0xe4,0x20,0x12,0x47,
-0xf3,0xef,0x64,0x01,0x70,0x18,0x80,0x06,0x12,0x47,0xf3,0xbf,0x01,0x10,0x90,0x9e,
-0xb5,0xe0,0xff,0xe4,0xfd,0x12,0x48,0x28,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x90,
-0x06,0xa9,0xe0,0x90,0x9e,0x52,0xf0,0xe0,0x54,0xc0,0x70,0x09,0x53,0x6b,0xfe,0x53,
-0x6b,0xfd,0x12,0x4d,0xca,0x90,0x9e,0x52,0xe0,0x30,0xe6,0x13,0x43,0x6b,0x01,0x90,
-0x9e,0x9e,0xe0,0x64,0x02,0x60,0x04,0x91,0x90,0x80,0x07,0xd1,0x76,0x80,0x03,0x53,
-0x6b,0xfe,0x90,0x9e,0x52,0xe0,0x30,0xe7,0x2a,0x43,0x6b,0x02,0xe4,0xf5,0x48,0x90,
-0x9e,0x95,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x39,0xa9,0x90,
-0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x9f,0x74,0x01,0xf0,0x90,0x9e,0x89,0xe0,0x44,
-0x04,0xf0,0x22,0x53,0x6b,0xfd,0x22,0x90,0x06,0xa9,0xe0,0x90,0x9e,0x52,0xf0,0xe0,
-0x54,0xc0,0x70,0x09,0x53,0x6b,0xfe,0x53,0x6b,0xfd,0x02,0x4d,0xca,0x90,0x9e,0x52,
-0xe0,0x30,0xe6,0x1d,0x90,0x9e,0x8d,0xe0,0x70,0x07,0x43,0x6b,0x01,0x91,0x90,0x80,
-0x13,0x90,0x9e,0x9e,0xe0,0xb4,0x01,0x0c,0x43,0x6b,0x04,0x7f,0x01,0xb1,0xff,0x80,
-0x03,0x53,0x6b,0xfe,0x90,0x9e,0x52,0xe0,0x30,0xe7,0x23,0x43,0x6b,0x02,0xe4,0xf5,
-0x48,0x90,0x9e,0x95,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x39,
-0xa9,0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x9f,0x74,0x01,0xf0,0x22,0x53,0x6b,
-0xfd,0x22,0xe5,0x67,0x64,0x01,0x70,0x66,0xe5,0x6a,0x60,0x62,0xe5,0x6a,0x64,0x02,
-0x60,0x06,0xe5,0x6a,0x64,0x05,0x70,0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0x8e,0xf0,
-0x90,0x06,0xaa,0xe0,0x90,0x9e,0x9d,0xf0,0x90,0x9e,0x8e,0xe0,0x70,0x07,0x90,0x9e,
-0x9d,0xe0,0xff,0x80,0x05,0x90,0x9e,0x8e,0xe0,0xff,0x90,0x9e,0x8e,0xef,0xf0,0x90,
-0x9e,0x90,0xe0,0x60,0x03,0xe0,0x14,0xf0,0xe4,0x90,0x9e,0x8f,0xf0,0x90,0x01,0x57,
-0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x53,0x6b,0xfd,0x53,0x6b,0xef,0xe5,0x6a,0x14,
-0x24,0xfd,0x50,0x06,0x24,0xfd,0x50,0x04,0x80,0x04,0x81,0xbf,0xb1,0x27,0x22,0x8f,
-0x6d,0x12,0x47,0xf3,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0xb7,0x12,0x48,0x24,0xe5,
-0x6d,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,
-0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,
-0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xe5,0x6a,0x60,0x39,0x90,0x9e,0x9f,0xe0,
-0x60,0x0d,0xe4,0xf0,0x53,0x6b,0xfd,0xe5,0x6b,0x54,0x07,0x70,0x28,0x80,0x23,0x90,
-0x9e,0x8f,0xe0,0x04,0xf0,0x53,0x6b,0xef,0x90,0x9e,0x94,0xe0,0xff,0x90,0x9e,0x8f,
-0xe0,0xd3,0x9f,0x40,0x0d,0xe5,0x67,0xb4,0x01,0x0b,0xa3,0xe0,0x70,0x07,0xe0,0x04,
-0xf0,0x22,0x12,0x4d,0xca,0x22,0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,
-0xf0,0xe4,0xf5,0x48,0x90,0x9e,0x93,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,
-0x01,0x12,0x39,0xa9,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,
-0x90,0x9e,0x9b,0x14,0xf0,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x0c,0x50,0x0d,0x12,0x49,
-0x1d,0x90,0x9e,0xda,0xe0,0x30,0xe0,0x03,0x12,0x4e,0x27,0x22,0x90,0x01,0x57,0xe0,
-0x60,0x3c,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x9f,
-0xe0,0x60,0x07,0xe4,0xf0,0x53,0x6b,0xfd,0x80,0x24,0x90,0x9e,0x8f,0xe0,0x04,0xf0,
-0x53,0x6b,0xef,0x90,0x9e,0x94,0xe0,0xff,0x90,0x9e,0x8f,0xe0,0xd3,0x9f,0x40,0x0e,
-0xe5,0x67,0xb4,0x01,0x09,0x90,0x9e,0x90,0xe0,0x70,0x03,0xe0,0x04,0xf0,0x90,0x01,
-0x5b,0xe0,0x60,0x10,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0xe4,
-0x90,0x9e,0x9c,0xf0,0x90,0x01,0x5f,0xe0,0x60,0x10,0x90,0x01,0x5f,0xe4,0xf0,0x90,
-0x01,0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x9b,0xf0,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,
-0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,
-0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x53,0x91,0xbf,0x90,0xfd,0x68,0xe0,0x20,
-0xe0,0x03,0x02,0x68,0xe1,0x90,0x01,0xba,0xe0,0x04,0xf0,0x90,0xfd,0x62,0xe0,0x90,
-0x01,0xbc,0xf0,0x90,0xfd,0x63,0xe0,0x90,0x01,0xbd,0xf0,0x90,0xfd,0x60,0xe0,0x90,
-0x01,0xbe,0xf0,0x90,0xfd,0x60,0xe0,0x64,0x0e,0x60,0x03,0x02,0x68,0x22,0x90,0x9e,
-0x43,0xe0,0xff,0x13,0x13,0x13,0x54,0x1f,0x20,0xe0,0x03,0x02,0x68,0x22,0x90,0xfd,
-0x62,0xe0,0x54,0xc0,0xfe,0x90,0x07,0x90,0xe0,0x54,0x3f,0x4e,0xf0,0x90,0xfd,0x63,
-0xe0,0x90,0x07,0x91,0xf0,0x90,0xfd,0x64,0xe0,0x90,0x07,0x92,0xf0,0x90,0xfd,0x65,
-0xe0,0x90,0x07,0x93,0xf0,0x90,0x07,0x95,0x74,0x01,0xf0,0xef,0x20,0xe0,0x44,0x90,
-0x9e,0x43,0xe0,0x13,0x13,0x54,0x3f,0x30,0xe0,0x19,0x90,0x07,0x78,0x12,0x68,0xfc,
-0x90,0x9e,0x43,0xe0,0xff,0xc3,0x13,0x30,0xe0,0x48,0x90,0x07,0x83,0xe0,0x44,0x40,
-0xf0,0x80,0x3f,0x90,0x9e,0x43,0xe0,0xff,0xc3,0x13,0x30,0xe0,0x11,0xe4,0xff,0x12,
-0x4d,0xe4,0x90,0x07,0x95,0xe0,0x44,0x01,0xf0,0xa3,0xe0,0x44,0x01,0xf0,0x90,0x07,
-0x78,0x80,0x13,0x90,0x9e,0x43,0xe0,0xff,0x13,0x13,0x54,0x3f,0x90,0x07,0x78,0x30,
-0xe0,0x04,0x11,0xfc,0x80,0x0c,0xe0,0x44,0x10,0xf0,0xe0,0x44,0x20,0xf0,0xe0,0x54,
-0xdf,0xf0,0x90,0xfd,0x60,0xe0,0xb4,0x0f,0x0a,0x90,0xfd,0x62,0xe0,0xff,0xa3,0xe0,
-0xfd,0x51,0x62,0x90,0xfd,0x60,0xe0,0x64,0x15,0x70,0x64,0x90,0xfd,0x62,0xe0,0x90,
-0x9e,0x5e,0xf0,0x90,0xfd,0x62,0xe0,0x30,0xe0,0x15,0x90,0x9e,0x5e,0xe0,0xf4,0x54,
-0x3f,0x04,0xff,0x90,0x9e,0x4e,0xe0,0x13,0x13,0x54,0x3f,0xc3,0x9f,0x80,0x10,0x90,
-0x9e,0x4e,0xe0,0x13,0x13,0x54,0x3f,0xff,0x90,0x9e,0x5e,0xe0,0x54,0x3f,0x2f,0x90,
-0x9e,0x5d,0xf0,0x90,0x9e,0x5d,0xe0,0xff,0x54,0x30,0xc4,0x54,0x0f,0xfe,0xef,0x25,
-0xe0,0x25,0xe0,0x4e,0x90,0x9e,0x5f,0xf0,0x90,0x00,0x2e,0xf0,0x90,0x9e,0x5d,0xe0,
-0xc4,0x54,0xf0,0xff,0x90,0x9e,0x4f,0xe0,0x54,0x0f,0x4f,0x90,0x00,0x2d,0xf0,0x90,
-0xfd,0x60,0xe0,0xb4,0x16,0x08,0x90,0xfd,0x62,0xe0,0xff,0x12,0x5f,0xb5,0x90,0xfd,
-0x60,0xe0,0xb4,0x21,0x07,0x90,0xfd,0x62,0xe0,0xff,0x31,0xe9,0x90,0xfd,0x60,0xe0,
-0xb4,0x22,0x02,0x51,0x11,0x90,0xfd,0x60,0xe0,0xb4,0x23,0x05,0xa3,0xe0,0xff,0x51,
-0x8d,0x90,0xfd,0x60,0xe0,0xb4,0x24,0x02,0x51,0x39,0x90,0xfd,0x68,0xe0,0x44,0x01,
-0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,
-0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0xe0,0x54,0xef,0xf0,
-0x90,0xfd,0x63,0xe0,0x54,0x3f,0x25,0xe0,0x25,0xe0,0xff,0x90,0xfd,0x62,0xe0,0x54,
-0x03,0x4f,0x90,0x9e,0x5b,0xf0,0x90,0xfd,0x64,0xe0,0x54,0x3f,0x25,0xe0,0x25,0xe0,
-0xff,0x90,0xfd,0x63,0xe0,0x54,0x03,0x4f,0x90,0x9e,0x5c,0xf0,0x90,0x9e,0x5b,0xe0,
-0xfd,0xa3,0xe0,0xfb,0xe4,0xff,0x90,0x9e,0x60,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0xeb,
-0xf0,0x12,0x47,0xf3,0xef,0x64,0x01,0x60,0x02,0x21,0xe8,0x90,0x9e,0xb8,0x12,0x48,
-0x24,0x90,0x9e,0x60,0xe0,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
-0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
-0x83,0xe0,0x54,0xef,0xf0,0xad,0x07,0x74,0x06,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
-0x83,0xe0,0x44,0x10,0xf0,0x74,0x11,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,
-0x54,0xef,0xf0,0xad,0x07,0x74,0x16,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,
-0x44,0x02,0xf0,0x74,0x16,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0x03,
-0xf0,0x90,0x9e,0x61,0xe0,0xfd,0xac,0x07,0x74,0x22,0x2c,0xf5,0x82,0xe4,0x34,0xfc,
-0xf5,0x83,0xed,0xf0,0x90,0x9e,0x62,0xe0,0xfd,0x74,0x23,0x2c,0xf5,0x82,0xe4,0x34,
-0xfc,0xf5,0x83,0xed,0xf0,0x74,0x24,0x2c,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,
-0x04,0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xad,0x07,0x90,0x9e,0x60,0xe0,0x54,
-0xf0,0x44,0x09,0xf0,0x54,0x0f,0x44,0x10,0xf0,0x90,0x9e,0x62,0xef,0xf0,0x7b,0x01,
-0x7a,0x9e,0x79,0x62,0x90,0x9e,0xfe,0x12,0x43,0x7e,0x7a,0x9e,0x79,0x60,0x02,0x5d,
-0x37,0x90,0x00,0x75,0xe0,0x44,0x01,0xf0,0x7f,0x01,0x7e,0x00,0x12,0x3a,0xaa,0x90,
-0xfe,0x13,0x74,0x03,0xf0,0x7f,0x02,0x7e,0x00,0x12,0x3a,0xaa,0x90,0xfe,0x13,0xe4,
-0xf0,0x90,0x00,0x75,0xe0,0x54,0xfe,0xf0,0x22,0x90,0x9e,0x60,0xe0,0x54,0xf0,0x44,
-0x0d,0xf0,0x54,0x0f,0x44,0x10,0xf0,0x90,0xfd,0x62,0xe0,0x90,0x9e,0x62,0xf0,0x7b,
-0x01,0x7a,0x9e,0x79,0x62,0x90,0x9e,0xfe,0x12,0x43,0x7e,0x7a,0x9e,0x79,0x60,0x02,
-0x5d,0x37,0xae,0x07,0x90,0x9e,0x60,0xe0,0x54,0xf0,0x44,0x04,0xf0,0x54,0x0f,0x44,
-0x20,0xf0,0x90,0x9e,0x62,0xee,0xf0,0xa3,0xed,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x62,
-0x90,0x9e,0xfe,0x12,0x43,0x7e,0x7a,0x9e,0x79,0x60,0x02,0x5d,0x37,0xad,0x07,0x90,
-0x9e,0x60,0xe0,0x54,0xf0,0x44,0x0c,0xf0,0x54,0x0f,0xf0,0xed,0xb4,0x02,0x08,0xe0,
-0x54,0x0f,0x44,0x20,0xf0,0x80,0x0d,0xed,0xb4,0x04,0x09,0x90,0x9e,0x60,0xe0,0x54,
-0x0f,0x44,0x40,0xf0,0x90,0xfd,0x62,0xe0,0x90,0x9e,0x62,0xf0,0x90,0xfd,0x63,0xe0,
-0x90,0x9e,0x63,0xf0,0x90,0xfd,0x64,0xe0,0x90,0x9e,0x64,0xf0,0x90,0xfd,0x65,0xe0,
-0x90,0x9e,0x65,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x62,0x90,0x9e,0xfe,0x12,0x43,0x7e,
-0x7a,0x9e,0x79,0x60,0x02,0x5d,0x37,0x8f,0x1f,0x8c,0x20,0x8d,0x21,0x22,0x8f,0x22,
-0x8c,0x23,0x8d,0x24,0x22,0xe4,0x90,0x9e,0x6b,0xf0,0xa3,0xf0,0x90,0x02,0x86,0xe0,
-0x20,0xe1,0x2c,0xc3,0x90,0x9e,0x6c,0xe0,0x94,0xd0,0x90,0x9e,0x6b,0xe0,0x94,0x07,
-0x40,0x0a,0x90,0x01,0xc6,0xe0,0x44,0x20,0xf0,0x7f,0x00,0x22,0x90,0x9e,0x6b,0xe4,
-0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,0x0a,0x7e,0x00,0x12,0x3b,0x3b,0x80,0xcd,0x7f,
-0x01,0x22,0x90,0x01,0xcc,0xe0,0x54,0x0f,0x90,0x9e,0x6b,0xf0,0x90,0x9e,0x6b,0xe0,
-0xfd,0x70,0x02,0x81,0x73,0x90,0x9f,0x19,0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,
-0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xef,0x5d,0x70,0x02,0x81,
-0x6c,0x90,0x9f,0x19,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd0,0x12,0x43,0x52,0xe0,0x90,
-0x9e,0x6c,0xf0,0x75,0x63,0x01,0x75,0x64,0x9e,0x75,0x65,0x6c,0x75,0x66,0x01,0x7b,
-0x01,0x7a,0x9e,0x79,0x6d,0x12,0x47,0x40,0x90,0x9e,0x6d,0xe0,0xff,0xc4,0x13,0x13,
-0x13,0x54,0x01,0x90,0x9f,0x19,0x30,0xe0,0x59,0xe0,0x75,0xf0,0x02,0x90,0x00,0x88,
-0x12,0x43,0x52,0xe0,0x90,0x9e,0x6e,0xf0,0x90,0x9f,0x19,0xe0,0x75,0xf0,0x02,0x90,
-0x00,0x89,0x12,0x43,0x52,0xe0,0x90,0x9e,0x6f,0xf0,0x90,0x9f,0x19,0xe0,0x75,0xf0,
-0x04,0x90,0x01,0xd1,0x12,0x43,0x52,0xe0,0x90,0x9e,0x70,0xf0,0x90,0x9f,0x19,0xe0,
-0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x52,0xe0,0x90,0x9e,0x71,0xf0,0x90,0x9f,
-0x19,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x52,0xe0,0x90,0x9e,0x72,0xf0,
-0x80,0x33,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x52,0xe0,0x90,0x9e,0x6e,
-0xf0,0x90,0x9f,0x19,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x52,0xe0,0x90,
-0x9e,0x6f,0xf0,0x90,0x9f,0x19,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x52,
-0xe0,0x90,0x9e,0x70,0xf0,0xef,0x54,0x7f,0xff,0x7b,0x01,0x7a,0x9e,0x79,0x6e,0x91,
-0x74,0x90,0x9e,0x6b,0xe0,0xff,0x90,0x9f,0x19,0xe0,0xfe,0x74,0x01,0xa8,0x06,0x08,
-0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,0x90,0x9e,0x6b,0xf0,0x90,0x9f,0x19,0xe0,
-0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x90,0x01,0xcc,0xf0,
-0x90,0x9f,0x19,0xe0,0x04,0xf0,0xe0,0x54,0x03,0xf0,0x61,0x3c,0x90,0x01,0xc6,0xe0,
-0x44,0x02,0xf0,0x22,0x90,0x9e,0x73,0x12,0x43,0x7e,0xef,0x12,0x43,0x87,0x6d,0x0c,
-0x01,0x6d,0x15,0x02,0x6d,0x42,0x03,0x6d,0x4b,0x05,0x6d,0x54,0x06,0x6e,0xad,0x07,
-0x6d,0x5c,0x08,0x6d,0x65,0x10,0x6d,0x6e,0x11,0x6d,0x77,0x12,0x6d,0x80,0x13,0x6d,
-0x89,0x14,0x6d,0x92,0x15,0x6d,0x9b,0x16,0x6d,0xa5,0x17,0x6d,0xaf,0x18,0x6d,0xb9,
-0x19,0x6e,0x82,0x1a,0x6e,0x8b,0x1b,0x6e,0x94,0x1c,0x6d,0xc2,0x1d,0x6d,0xcc,0x1e,
-0x6d,0xd7,0x21,0x6d,0xe0,0x22,0x6d,0xe9,0x23,0x6d,0xf2,0x24,0x6d,0xfb,0x25,0x6e,
-0x04,0x26,0x6e,0x0d,0x27,0x6e,0x16,0x28,0x6e,0x1f,0x29,0x6d,0x1e,0x2d,0x6d,0x27,
-0x2e,0x6e,0x28,0x2f,0x6e,0x9d,0x30,0x6e,0x3a,0x32,0x6e,0x31,0x33,0x6d,0x39,0x34,
-0x6e,0x43,0x36,0x6e,0x4c,0x37,0x6e,0x55,0x38,0x6e,0x5e,0x3a,0x6d,0x30,0x3b,0x6e,
-0x79,0x3c,0x6e,0x67,0x3e,0x6e,0x70,0x3f,0x00,0x00,0x6e,0xa6,0x90,0x9e,0x73,0x12,
-0x43,0x5e,0x02,0x84,0x62,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x84,0x8c,0x90,0x9e,
-0x73,0x12,0x43,0x5e,0x02,0x84,0x92,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x84,0xda,
-0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x85,0x08,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,
-0x85,0x15,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x85,0x30,0x90,0x9e,0x73,0x12,0x43,
-0x5e,0x02,0x84,0x06,0x90,0x9e,0x73,0x12,0x43,0x5e,0xc1,0xae,0x90,0x9e,0x73,0x12,
-0x43,0x5e,0x02,0x51,0x68,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x85,0x78,0x90,0x9e,
-0x73,0x12,0x43,0x5e,0x02,0x85,0xbf,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x85,0xe6,
-0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x86,0x05,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,
-0x86,0x1f,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x86,0xf7,0x90,0x9e,0x73,0x12,0x43,
-0x5e,0x7f,0x01,0x80,0x2f,0x90,0x9e,0x73,0x12,0x43,0x5e,0x7f,0x02,0x80,0x25,0x90,
-0x9e,0x73,0x12,0x43,0x5e,0x7f,0x03,0x80,0x1b,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,
-0x88,0x7c,0x90,0x9e,0x73,0x12,0x43,0x5e,0xe4,0xff,0x80,0x08,0x90,0x9e,0x73,0x12,
-0x43,0x5e,0x7f,0x04,0x02,0x87,0x9a,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x88,0xee,
-0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x89,0x15,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,
-0x89,0x3c,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x89,0x63,0x90,0x9e,0x73,0x12,0x43,
-0x5e,0x02,0x89,0x8a,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x89,0xb1,0x90,0x9e,0x73,
-0x12,0x43,0x5e,0x02,0x89,0xd8,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x8a,0x0f,0x90,
-0x9e,0x73,0x12,0x43,0x5e,0x02,0x8a,0x36,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x8a,
-0x5e,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x8a,0xa1,0x90,0x9e,0x73,0x12,0x43,0x5e,
-0x02,0x8a,0xca,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x8a,0xf3,0x90,0x9e,0x73,0x12,
-0x43,0x5e,0x02,0x8c,0x86,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x8c,0x98,0x90,0x9e,
-0x73,0x12,0x43,0x5e,0x02,0x8c,0xcd,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x8e,0x8a,
-0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x8e,0xb3,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,
-0x94,0x4b,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x92,0xc6,0x90,0x9e,0x73,0x12,0x43,
-0x5e,0x02,0x84,0x4e,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x84,0x35,0x90,0x9e,0x73,
-0x12,0x43,0x5e,0x02,0x94,0xf3,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,0x90,0x00,
-0x04,0x12,0x1f,0x1d,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,0x54,0x07,0xfd,
-0xaf,0x06,0x90,0x9e,0x76,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,0x7e,0x90,0x9e,
-0x78,0x12,0x43,0x5e,0x90,0x00,0x03,0x12,0x1f,0x1d,0x54,0xf0,0xc4,0x54,0x0f,0x90,
-0x9e,0x7b,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0x54,0x40,0xc4,0x13,0x13,0x54,0x03,
-0x90,0x9e,0x7c,0xf0,0x90,0x9e,0x76,0xe0,0xff,0x75,0xf0,0x09,0x90,0x96,0x46,0x12,
-0x43,0x52,0xad,0x82,0xac,0x83,0x90,0x9e,0x7d,0xec,0xf0,0xa3,0xed,0xf0,0xef,0x75,
-0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,0xa3,0x12,0x43,
-0x7e,0x90,0x9e,0x78,0x12,0x43,0x5e,0x90,0x00,0x03,0x12,0x1f,0x1d,0x54,0x0f,0xff,
-0x90,0x9e,0x7f,0x12,0x43,0x5e,0xef,0x12,0x42,0x20,0x90,0x9e,0x78,0x12,0x43,0x5e,
-0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,0x90,0x9e,0x7f,0x12,0x43,0x5e,0x90,0x00,0x01,
-0xef,0x12,0x42,0x32,0x90,0x9e,0x78,0x12,0x43,0x5e,0x90,0x00,0x01,0x12,0x1f,0x1d,
-0xff,0x90,0x9e,0x7d,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,0xf0,0x12,
-0x1f,0x04,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x7b,0xe0,0xfe,0x90,0x9e,0x76,
-0xe0,0xff,0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,0x9e,0x77,
-0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x52,0xee,0xf0,0x75,0xf0,
-0x09,0xef,0x90,0x96,0x4b,0x12,0x43,0x52,0x74,0x01,0xf0,0x90,0x9e,0x7c,0xe0,0xfe,
-0x75,0xf0,0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x52,0xee,0xf0,0x8f,0x13,0xef,0x25,
-0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x15,0x8f,0x16,0xe5,0x13,
-0x75,0xf0,0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x17,0x01,0xf5,0x18,
-0x89,0x19,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x46,0x12,0x43,0x52,0xaf,0x82,0x85,
-0x83,0x1a,0x8f,0x1b,0xe5,0x13,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,
-0xf0,0x75,0x1c,0x01,0xf5,0x1d,0x89,0x1e,0x74,0x82,0x25,0x13,0xf5,0x82,0xe4,0x34,
-0x95,0xf5,0x83,0xe0,0x12,0x43,0x87,0x70,0x3c,0x00,0x70,0x51,0x01,0x70,0x66,0x02,
-0x70,0x7b,0x03,0x70,0xa4,0x04,0x70,0xb9,0x05,0x70,0xce,0x06,0x70,0xf4,0x0c,0x71,
-0x21,0x0d,0x71,0x4e,0x0e,0x71,0x7b,0x0f,0x00,0x00,0x71,0xaf,0xe5,0x13,0x25,0xe0,
-0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x15,0x80,
-0x3c,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,
-0xf0,0xa3,0x74,0x10,0x80,0x27,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,
-0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x13,0x25,0xe0,0x24,
-0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,0xe5,0x13,
-0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,
-0x8f,0xf0,0x21,0xaf,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
-0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,
-0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,0xe5,0x13,
-0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0x74,0x0d,
-0xf0,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,
-0xa3,0xf0,0x21,0xaf,0x90,0x04,0x47,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x12,0x42,
-0x20,0x90,0x04,0x46,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x90,0x00,0x01,0x12,0x42,
-0x32,0x90,0x04,0x45,0xe0,0x85,0x16,0x82,0x85,0x15,0x83,0xf0,0x90,0x04,0x44,0x21,
-0xa6,0x90,0x04,0x4b,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x12,0x42,0x20,0x90,0x04,
-0x4a,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x90,0x00,0x01,0x12,0x42,0x32,0x90,0x04,
-0x49,0xe0,0x85,0x16,0x82,0x85,0x15,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,0x90,0x04,
-0x4f,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x12,0x42,0x20,0x90,0x04,0x4e,0xe0,0xab,
-0x17,0xaa,0x18,0xa9,0x19,0x90,0x00,0x01,0x12,0x42,0x32,0x90,0x04,0x4d,0xe0,0x85,
-0x16,0x82,0x85,0x15,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,0xe0,0xab,
-0x17,0xaa,0x18,0xa9,0x19,0x12,0x42,0x20,0x90,0x04,0x52,0xe0,0xab,0x17,0xaa,0x18,
-0xa9,0x19,0x90,0x00,0x01,0x12,0x42,0x32,0x90,0x04,0x51,0xe0,0x85,0x16,0x82,0x85,
-0x15,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x16,0x82,0x85,0x15,0x83,0xa3,0xf0,0xab,
-0x17,0xaa,0x18,0xa9,0x19,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x1f,0x04,0xff,0xab,
-0x1c,0xaa,0x1d,0xa9,0x1e,0x12,0x1f,0x04,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,
-0x42,0x20,0xab,0x17,0xe5,0x19,0x24,0x01,0xf9,0xe4,0x35,0x18,0xfa,0xc0,0x03,0xc0,
-0x02,0xc0,0x01,0x12,0x1f,0x04,0xff,0xab,0x1c,0xaa,0x1d,0xa9,0x1e,0x90,0x00,0x01,
-0x12,0x1f,0x1d,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x20,0x85,0x16,0x82,
-0x85,0x15,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x1b,0x82,0x85,0x1a,0x83,0xe0,
-0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x16,0x82,0x85,0x15,0x83,0xa3,0xc0,
-0x83,0xc0,0x82,0xe0,0xff,0x85,0x1b,0x82,0x85,0x1a,0x83,0xa3,0xe0,0xfe,0xef,0x5e,
-0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,
-0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,0x14,0x0b,0x74,0x01,0x7e,0x00,
-0xa8,0x14,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x13,0x25,
-0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,
-0x4e,0x60,0x06,0xe5,0x14,0x24,0x10,0x80,0x5d,0x15,0x14,0xe5,0x14,0xc3,0x94,0x00,
-0x50,0xca,0x80,0x56,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
-0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x14,0x0f,0x74,0x01,0x7e,0x00,0xa8,
-0x14,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x13,0x25,0xe0,
-0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,
-0x60,0x08,0x90,0x9e,0x82,0xe5,0x14,0xf0,0x80,0x10,0x15,0x14,0xe5,0x14,0xc3,0x94,
-0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x82,0xf0,0xe5,0x13,0x25,0xe0,0x24,0xc6,
-0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0xe4,0xf5,
-0x14,0x74,0x01,0x7e,0x00,0xa8,0x14,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
-0xf9,0xff,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,
-0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x83,0xe5,0x14,0xf0,0x80,0x5b,
-0x05,0x14,0xe5,0x14,0xb4,0x10,0xca,0x80,0x52,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,
-0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x39,0xe4,0xf5,0x14,
-0x74,0x01,0x7e,0x00,0xa8,0x14,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,
-0xff,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,
-0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x14,0x24,0x10,0x80,0x0a,0x05,0x14,0xe5,
-0x14,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x83,0xf0,0x90,0x9e,0x82,0xe0,0xff,
-0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x48,0x12,0x43,0x52,0xef,0xf0,0x90,0x9e,0x83,
-0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x49,0x12,0x43,0x52,0xee,0xf0,0x74,
-0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,0x05,0x90,
-0x9e,0x82,0x71,0xfe,0x74,0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
-0xff,0x90,0x9e,0x83,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x02,0x71,0xfe,0x90,0x9e,0x82,
-0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,0x74,0x03,0xf0,0x22,0xef,0xd3,
-0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,0x22,0xef,0xd3,0x94,0x03,0x40,
-0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,0x96,0x43,0xf0,0x22,0xe0,0xfd,
-0x74,0x26,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xed,0xf0,0xaf,0x13,0xd3,
-0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,0x50,0x0e,0x74,0x84,0x2f,0xf5,
-0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,0x74,0xa6,0x2f,0xf5,0x82,0xe4,
-0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0xcd,0xef,0xf0,0x24,0xa6,0xf5,0x82,0xe4,
-0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0xce,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0xcd,0x7d,
-0x02,0xb1,0x27,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x0a,0x8d,0x0b,0xe5,0x0b,0x54,0x1f,
-0xf5,0x10,0x74,0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xf5,0x0e,0x90,
-0x04,0xfd,0xe0,0xb4,0x01,0x05,0x75,0x11,0x03,0x80,0x03,0x75,0x11,0x01,0xeb,0xc3,
-0x95,0x11,0x40,0x04,0xaf,0x0a,0x80,0x33,0xe5,0x0e,0x25,0x0d,0xf5,0x0f,0xe5,0x10,
-0x90,0x41,0xdc,0x93,0xff,0xe5,0x0f,0xd3,0x9f,0x74,0x01,0x40,0x11,0x25,0x0a,0xf5,
-0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xad,0x0b,0xaf,0x0a,0x81,0x0f,0x25,0x0a,
-0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe5,0x0f,0xf0,0x22,0xad,0x07,0x75,0xf0,0x09,
-0xed,0x90,0x96,0x48,0x12,0x43,0x52,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,
-0x9d,0xf5,0x83,0xe0,0x54,0x1f,0xf5,0x12,0xd3,0x9f,0x40,0x02,0x8f,0x12,0xe5,0x12,
-0x25,0xe0,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,
-0x93,0xff,0xe5,0x12,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,
-0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,
-0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x05,
-0xad,0x12,0x91,0x0f,0xaf,0x12,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9f,
-0x01,0x12,0x43,0x7e,0x90,0x9f,0x04,0xe0,0x54,0xf0,0x44,0x06,0xff,0xf0,0xed,0x54,
-0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,0xf0,0x90,0x9f,0x01,0x12,0x43,0x5e,
-0x90,0x9e,0xfe,0x12,0x43,0x7e,0x7b,0x01,0x7a,0x9f,0x79,0x04,0x12,0x5d,0x37,0xd0,
-0xd0,0x92,0xaf,0x22,0xac,0x07,0xec,0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2c,0xf5,
-0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2c,0xf5,0x82,0xe4,0x34,
-0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x1e,0xe5,0x1e,0x54,0x1f,0xff,0x90,0x9e,0x77,
-0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x49,0x12,0x43,0x52,0xe0,0x90,0x9e,0x79,0xf0,
-0x75,0xf0,0x09,0xec,0x90,0x96,0x48,0x12,0x43,0x52,0xe0,0xfe,0x90,0x9e,0x7a,0xf0,
-0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,
-0x90,0x9e,0x7b,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,
-0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x7d,0xcb,0xf0,0xa3,0xeb,0xf0,
-0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,0x7a,0xe0,0x90,0x9e,0x77,0xf0,0xf5,0x1e,0xed,
-0x70,0x02,0xc1,0xba,0x90,0x9e,0x78,0xed,0xf0,0xe5,0x1e,0x30,0xe6,0x0a,0x90,0x9e,
-0x77,0xe0,0xf5,0x1e,0xa3,0xe0,0x14,0xf0,0x90,0x9e,0x78,0xe0,0x70,0x02,0xc1,0xba,
-0x90,0x9e,0x77,0xe0,0xff,0xd3,0x94,0x00,0x50,0x02,0xc1,0xba,0xe4,0x90,0x9e,0x76,
-0xf0,0xef,0x14,0x90,0x9e,0x75,0xf0,0x90,0x9e,0x79,0xe0,0xfd,0x90,0x9e,0x75,0xe0,
-0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,0x10,0x40,0x21,0xef,0x24,0xf0,0xff,0x74,0x01,
-0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,
-0x9e,0x7d,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x27,0x90,0x9e,0x75,0xe0,0xff,
-0xc3,0x94,0x10,0x50,0x33,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,
-0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x7b,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,
-0x60,0x16,0x90,0x9e,0x75,0xe0,0xf5,0x1e,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x78,0xe0,
-0xff,0x90,0x9e,0x76,0xe0,0x6f,0x60,0x08,0x90,0x9e,0x75,0xe0,0x14,0xf0,0x80,0x87,
-0x90,0x9e,0x78,0xe0,0xff,0x90,0x9e,0x76,0xe0,0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x75,
-0xe0,0xb5,0x05,0x06,0x90,0x9e,0x79,0xe0,0xf5,0x1e,0xe5,0x1e,0x25,0xe0,0x24,0xa4,
-0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x1e,
-0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,
-0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xec,0x25,0xe0,0x24,0xc2,0xf5,0x82,
-0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x04,0xad,0x1e,0x91,0x0f,
-0xaf,0x1e,0x22,0xe4,0xf5,0x67,0xf5,0x6b,0xf5,0x6a,0x75,0x69,0x0c,0x75,0x68,0x0c,
-0x90,0x9e,0x9e,0xf0,0x90,0x9e,0x9c,0xf0,0x90,0x9e,0x9b,0xf0,0x90,0x9e,0x9d,0x04,
-0xf0,0x90,0x9e,0x8e,0xf0,0xe4,0x90,0x9e,0x9f,0xf0,0x90,0x9e,0x90,0xf0,0x90,0x9e,
-0x99,0x74,0x07,0xf0,0xe4,0x90,0x9e,0x8f,0xf0,0x90,0x9e,0x97,0xf0,0xa3,0x74,0x0b,
-0xf0,0x90,0x9e,0x94,0x74,0x01,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x93,0x74,0x14,
-0xf0,0x90,0x9e,0x9a,0x74,0x05,0xf0,0xe4,0x90,0x9e,0x92,0xf0,0x90,0x9e,0x8d,0xf0,
-0x90,0x9e,0xbb,0xf0,0x90,0x9e,0x96,0xf0,0x90,0x9e,0xa0,0xf0,0x22,0xe4,0x90,0x9e,
-0x9f,0xf0,0x90,0x9e,0x8f,0xf0,0xf5,0x6b,0x22,0xef,0xb4,0x01,0x07,0x7d,0xc8,0x7f,
-0x02,0x02,0x3a,0x71,0x7d,0x60,0x7f,0x02,0x12,0x3a,0x54,0x90,0x01,0x3d,0x74,0x04,
-0xf0,0xa3,0x74,0xc8,0xf0,0x7d,0x04,0x7f,0x01,0x12,0x3a,0xdf,0x7d,0xc8,0x7f,0x02,
-0x02,0x3a,0xdf,0x12,0x5c,0xb8,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,
-0xf0,0x80,0x30,0x90,0x9e,0x9c,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,
-0x22,0x90,0x9e,0x9b,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x14,0xe5,
-0x69,0x54,0x0f,0xd3,0x94,0x04,0x40,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x03,
-0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x08,0xf0,0x7f,0x00,0x22,0x12,0x5c,0xb8,0xef,
-0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x66,0xe5,0x6b,0x54,0x03,
-0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x58,0xe5,0x69,0x54,0x0f,0xd3,0x94,
-0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x47,0xe5,0x6b,0x30,0xe2,0x08,
-0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x3a,0xe5,0x6b,0x30,0xe4,0x08,0x90,0x01,0xb9,
-0x74,0x10,0xf0,0x80,0x2d,0x90,0x9e,0x90,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x20,
-0xf0,0x80,0x1f,0x90,0x9e,0x8b,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x40,0xf0,0x80,
-0x11,0x90,0x9e,0x96,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x80,0xf0,0x80,0x03,0x7f,
-0x01,0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,0x7f,0x00,0x22,0xe5,0x57,0x60,0x08,0x90,
-0x01,0xb9,0x74,0x01,0xf0,0x80,0x61,0xe5,0x69,0x54,0x0f,0xd3,0x94,0x01,0x40,0x08,
-0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x50,0x90,0x02,0x87,0xe0,0x60,0x08,0x90,0x01,
-0xb9,0x74,0x04,0xf0,0x80,0x42,0x90,0x9e,0xba,0xe0,0xb4,0x01,0x10,0x90,0x9e,0xa1,
-0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x1c,0x80,0x2b,0x90,0x9e,0xba,
-0xe0,0x70,0x14,0x90,0x9d,0xa9,0xe0,0xff,0x90,0x9d,0xa8,0xe0,0x6f,0x60,0x08,0x90,
-0x01,0xb9,0x74,0x08,0xf0,0x80,0x11,0x90,0x9e,0x92,0xe0,0x70,0x08,0x90,0x01,0xb9,
-0x74,0x10,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x02,0xf0,0x7f,0x00,
-0x22,0x8f,0x6c,0xe4,0x90,0x9f,0x0f,0xf0,0xa3,0xf0,0x90,0x01,0x09,0xe0,0x7f,0x00,
-0x30,0xe7,0x02,0x7f,0x01,0xef,0x65,0x6c,0x60,0x3e,0xc3,0x90,0x9f,0x10,0xe0,0x94,
-0x88,0x90,0x9f,0x0f,0xe0,0x94,0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,
-0x22,0x90,0x9f,0x0f,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,0x14,0x7e,0x00,0x12,
-0x3b,0x3b,0xd3,0x90,0x9f,0x10,0xe0,0x94,0x32,0x90,0x9f,0x0f,0xe0,0x94,0x00,0x40,
-0xb9,0x90,0x01,0xc7,0xe0,0x30,0xe0,0xb2,0x22,0x90,0x00,0x20,0xe0,0x44,0x01,0xfd,
-0x7f,0x20,0x12,0x44,0xcc,0x7f,0xf4,0x7e,0x01,0x12,0x3b,0x3b,0x90,0x00,0x00,0xe0,
-0x54,0xdf,0xfd,0xe4,0xff,0x12,0x44,0xcc,0x90,0x00,0x28,0xe0,0x44,0x03,0xfd,0x7f,
-0x28,0x12,0x44,0xcc,0x90,0x00,0x08,0xe0,0x54,0xef,0xfd,0x7f,0x08,0x12,0x44,0xcc,
-0xe4,0xff,0x11,0xe1,0x7f,0x64,0x7e,0x00,0x12,0x3b,0x3b,0x90,0x00,0x29,0xe0,0x44,
-0xc0,0xfd,0x7f,0x29,0x02,0x44,0xcc,0x90,0x9e,0x97,0xe0,0xa3,0xe0,0x90,0x05,0x58,
-0xf0,0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,0x17,0xed,0xc4,0x54,0xf0,
-0xfd,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,
-0x0f,0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
-0xe0,0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x4d,
-0xf0,0x22,0xad,0x07,0xed,0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2d,0xf5,0x82,0xe4,
-0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,
-0x83,0xe0,0x54,0x7f,0xf5,0x1e,0xe5,0x1e,0x54,0x1f,0xfc,0x75,0xf0,0x09,0xed,0x90,
-0x96,0x48,0x12,0x43,0x52,0xe0,0xff,0x90,0x9e,0x75,0xf0,0xed,0x25,0xe0,0x24,0x02,
-0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x76,0xcb,0xf0,
-0xa3,0xeb,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,
-0xfb,0xa3,0xe0,0x90,0x9e,0x78,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,0x6c,
-0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfa,0x74,0x01,0x93,0xfb,0xed,0x25,
-0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xea,0xf0,0xa3,0xeb,0xf0,0xec,
-0xc3,0x9f,0x40,0x02,0x41,0xf0,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,
-0xec,0xf0,0x04,0xfb,0x90,0x9e,0x75,0xe0,0xff,0xeb,0xd3,0x9f,0x40,0x02,0x61,0x21,
-0xeb,0xc3,0x94,0x10,0x40,0x21,0xeb,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,
-0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x76,0xe0,0x5e,
-0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x23,0xeb,0xc3,0x94,0x10,0x50,0x40,0x74,0x01,0x7e,
-0x00,0xa8,0x03,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,
-0x78,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x23,0xbb,0x11,0x09,0x90,0x9e,0x77,
-0xe0,0x30,0xe7,0x02,0x7b,0x17,0xeb,0x64,0x13,0x60,0x03,0xbb,0x12,0x09,0x90,0x9e,
-0x76,0xe0,0x30,0xe0,0x02,0x7b,0x18,0xac,0x03,0x8c,0x1e,0x80,0x34,0x0b,0x80,0x84,
-0x90,0x9e,0x75,0xe0,0xfb,0x6c,0x70,0x69,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,
-0xf5,0x83,0xec,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x52,0xe0,0xb4,
-0x01,0x0c,0xe5,0x1e,0x20,0xe6,0x07,0xec,0x44,0x40,0xf5,0x1e,0x80,0x03,0xaf,0x1e,
-0x22,0xec,0x25,0xe0,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,
-0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
-0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,
-0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x80,
-0x5b,0xec,0xd3,0x9b,0x40,0x56,0x90,0x9e,0x75,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,
-0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0xac,0x07,0x8f,0x1e,0xec,0x25,0xe0,0x24,0xa4,
-0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,
-0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,
-0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
-0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x1e,0x22,0x74,0x01,0x2d,0xf5,
-0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xaf,0x05,0xe5,0x1e,0x44,0x80,0xfd,0x12,
-0x74,0x0f,0xe5,0x1e,0x44,0x80,0xff,0x22,0xe4,0xf5,0x13,0xe5,0x13,0xb4,0x20,0x14,
-0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,0x95,0x01,0xe0,0xff,0x90,0x9a,0xc5,0xe0,0xb5,
-0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x4b,0x12,0x43,0x52,0xe0,
-0x64,0x01,0x60,0x03,0x02,0x82,0x27,0xe5,0x13,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
-0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xd3,0x94,0x00,0xee,0x94,0x00,0x50,0x03,
-0x02,0x82,0x27,0xe5,0x13,0x94,0x20,0x40,0x09,0x90,0x9a,0xc5,0xe0,0x60,0x03,0x02,
-0x82,0x33,0xe5,0x13,0x75,0xf0,0x0a,0xa4,0x24,0x00,0xf9,0x74,0x90,0x35,0xf0,0x75,
-0x18,0x01,0xf5,0x19,0x89,0x1a,0xe5,0x13,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,
-0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x6f,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,
-0x13,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xff,0xa3,0xe0,
-0x90,0x9e,0x71,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x13,0xc3,0x94,0x20,0x50,0x14,0x74,
-0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x6b,
-0xf0,0x80,0x12,0x74,0xa6,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,
-0x3f,0x90,0x9e,0x6b,0xf0,0x90,0x9e,0x6b,0xe0,0xfe,0x54,0x1f,0xa3,0xf0,0x75,0xf0,
-0x09,0xe5,0x13,0x90,0x96,0x48,0x12,0x43,0x52,0xe0,0x90,0x9e,0x74,0xf0,0x74,0xe6,
-0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xc3,0x94,0x05,0x40,0x02,0xc1,
-0xfd,0x90,0x9e,0x74,0xe0,0xff,0x90,0x9e,0x6c,0xe0,0x9f,0x40,0x13,0x90,0x9e,0x74,
-0xe0,0x90,0x9e,0x6c,0xf0,0xee,0x54,0x40,0xfe,0x90,0x9e,0x6b,0xf0,0xef,0x4e,0xf0,
-0x90,0x04,0xfd,0xe0,0x54,0x05,0x64,0x01,0x70,0x29,0x90,0x9e,0x6c,0xe0,0xff,0x90,
-0x41,0x50,0x93,0xfe,0x74,0x44,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,
-0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,0xe0,0x80,0x30,0x90,0x9e,0x6c,0xe0,0x90,0x40,
-0xfc,0x80,0x27,0x90,0x9e,0x6c,0xe0,0xff,0x90,0x41,0x50,0x93,0xfe,0x74,0x44,0x25,
-0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x41,
-0x18,0x80,0x07,0x90,0x9e,0x6c,0xe0,0x90,0x41,0x34,0x93,0x90,0x9e,0x73,0xf0,0x90,
-0x9e,0x73,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x56,0xf9,0x74,0x40,0x35,0xf0,0x75,0x15,
-0xff,0xf5,0x16,0x89,0x17,0x90,0x9e,0x6b,0xe0,0x90,0x41,0xf8,0x93,0xff,0xd3,0x90,
-0x9e,0x72,0xe0,0x9f,0x90,0x9e,0x71,0xe0,0x94,0x00,0x40,0x0a,0xe4,0xfd,0xaf,0x13,
-0x12,0x75,0x64,0x02,0x81,0xbe,0xe5,0x13,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,
-0x95,0xf5,0x83,0xe0,0xf5,0x1b,0xa3,0xe0,0xf5,0x1c,0xab,0x15,0xaa,0x16,0xa9,0x17,
-0x12,0x1f,0x04,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,0x6a,0xfd,
-0xac,0xf0,0x12,0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,
-0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x01,0x12,0x1f,0x1d,0xff,0x7e,0x00,0xab,0x18,
-0xaa,0x19,0xa9,0x1a,0x90,0x00,0x02,0x12,0x42,0x95,0xfd,0xac,0xf0,0x12,0x1f,0x4a,
-0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,
-0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,
-0x00,0x04,0x12,0x42,0x95,0xfd,0xac,0xf0,0x12,0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,
-0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x03,0x12,0x1f,
-0x1d,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x06,0x12,0x42,0x95,
-0xfd,0xac,0xf0,0x12,0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,
-0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x04,0x12,0x1f,0x1d,0xff,0x7e,0x00,0xab,
-0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x08,0x12,0x42,0x95,0xfd,0xac,0xf0,0x12,0x1f,
-0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,
-0x17,0x90,0x00,0x05,0x12,0x1f,0x1d,0xff,0x7e,0x00,0x90,0x9e,0x6f,0xe0,0xfc,0xa3,
-0xe0,0xfd,0x12,0x1f,0x4a,0xd3,0xe5,0x1c,0x9f,0xe5,0x1b,0x9e,0x40,0x0c,0xe5,0x1c,
-0x9f,0xf5,0x1c,0xe5,0x1b,0x9e,0xf5,0x1b,0x80,0x05,0xe4,0xf5,0x1b,0xf5,0x1c,0xe5,
-0x13,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,0x1b,0xf0,0xa3,
-0xe5,0x1c,0xf0,0x90,0x9e,0x6b,0xe0,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,
-0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,0x95,0x1b,0x50,0x07,0xaf,0x13,
-0x31,0xd2,0x02,0x81,0x92,0x90,0x9e,0x6b,0xe0,0x25,0xe0,0x24,0xa4,0xf5,0x82,0xe4,
-0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,0x95,0x1b,0x50,0x03,
-0x02,0x81,0x92,0x7d,0x01,0xaf,0x13,0x12,0x75,0x64,0x02,0x81,0x92,0x74,0xe6,0x25,
-0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x03,0x02,0x80,
-0x9b,0x90,0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x6c,0xe0,0xc3,0x94,0x19,
-0x40,0x3d,0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x6c,0xe0,0xc3,0x94,0x11,0x40,
-0x2e,0x80,0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x6c,0xe0,0xc3,
-0x94,0x0a,0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x6c,0xe0,0xc3,0x94,0x03,
-0x40,0x0d,0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,0x74,
-0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1d,0x74,0x44,0x25,
-0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x03,0x02,
-0x80,0x48,0x90,0x9a,0x84,0xe0,0x64,0x01,0x60,0x03,0x02,0x80,0x48,0x74,0x85,0x25,
-0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,
-0xff,0xe4,0x33,0xfe,0x74,0x41,0x25,0x13,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,
-0xfd,0xd3,0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,
-0xe4,0x33,0xfe,0x74,0x44,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,
-0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x13,0xf5,0x82,
-0xe4,0x34,0x9d,0xf5,0x83,0xe0,0xff,0x90,0x9e,0x6c,0xe0,0x6f,0x60,0x3d,0x74,0x44,
-0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,
-0x75,0x1d,0x05,0x80,0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x1d,0x03,0x80,0x03,
-0x75,0x1d,0x01,0x74,0x41,0x25,0x13,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,
-0x74,0x85,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x13,0xf5,
-0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x13,0xf5,0x82,0xe4,0x34,
-0x9a,0xf5,0x83,0xe0,0x04,0xf0,0x80,0x10,0xe4,0xf5,0x1d,0x74,0xe6,0x25,0x13,0xf5,
-0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x6c,0xe0,0xff,0x74,0x26,0x25,
-0x13,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x13,0xf5,0x82,
-0xe4,0x34,0x98,0xf5,0x83,0xe5,0x1d,0xf0,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x4c,
-0x12,0x43,0x52,0xe0,0xb4,0x01,0x10,0xe4,0xf5,0x1d,0x74,0xe6,0x25,0x13,0xf5,0x82,
-0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xad,0x1d,0x21,0x8d,0xec,0x64,0x06,0x60,0x02,
-0x21,0x92,0xf5,0x1b,0xf5,0x1c,0x90,0x42,0x19,0x93,0xff,0x7e,0x00,0x90,0x9e,0x6f,
-0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x1f,0x4a,0x90,0x9e,0x6d,0xee,0xf0,0xa3,0xef,0xf0,
-0x74,0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1d,0xe4,0xf5,
-0x14,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x75,0xf0,0x02,0xe5,0x14,0xa4,0xf5,0x82,0x85,
-0xf0,0x83,0x12,0x42,0x95,0xfd,0xac,0xf0,0xe5,0x14,0x90,0x42,0x14,0x93,0xff,0x7e,
-0x00,0x12,0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xc3,0x90,
-0x9e,0x6e,0xe0,0x95,0x1c,0x90,0x9e,0x6d,0xe0,0x95,0x1b,0x40,0x07,0x05,0x14,0xe5,
-0x14,0xb4,0x05,0xbd,0xe5,0x14,0xc3,0x13,0xf5,0x14,0xe5,0x1d,0xb4,0x01,0x06,0xe5,
-0x14,0x70,0x46,0x80,0x13,0xe5,0x1d,0xb4,0x03,0x15,0xe5,0x14,0x70,0x05,0x75,0x1d,
-0x03,0x80,0x39,0xe5,0x14,0xb4,0x01,0x05,0x75,0x1d,0x01,0x80,0x2f,0x80,0x2a,0xe5,
-0x1d,0xb4,0x05,0x28,0xe5,0x14,0x70,0x05,0x75,0x1d,0x05,0x80,0x0d,0xe5,0x14,0xb4,
-0x01,0x05,0x75,0x1d,0x03,0x80,0x03,0x75,0x1d,0x01,0xd3,0x90,0x9e,0x72,0xe0,0x94,
-0x03,0x90,0x9e,0x71,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1d,0xd3,0x90,0x9e,0x72,
-0xe0,0x94,0x03,0x90,0x9e,0x71,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1d,0x74,0x84,
-0x25,0x13,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe5,0x1d,0xf0,0xfd,0xaf,0x13,0x12,
-0x79,0x92,0x74,0xe6,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,
-0x05,0x74,0xe6,0x50,0x0e,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,
-0xf0,0x80,0x0b,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xab,0x18,
-0xaa,0x19,0xa9,0x1a,0xe4,0xf5,0xf0,0x12,0x42,0xcd,0xab,0x18,0xaa,0x19,0xa9,0x1a,
-0x90,0x00,0x02,0xe4,0xf5,0xf0,0x12,0x42,0xec,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,
-0x42,0xec,0x90,0x00,0x06,0xe4,0xf5,0xf0,0x12,0x42,0xec,0x90,0x00,0x08,0xe4,0xf5,
-0xf0,0x12,0x42,0xec,0xe5,0x13,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,
-0x83,0xe4,0xf0,0xa3,0xf0,0xe5,0x13,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,
-0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xe5,0x13,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,
-0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x05,0x13,0xe5,0x13,0xc3,0x94,0x40,0x50,0x03,
-0x02,0x7b,0xdb,0x22,0x90,0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,
-0x0f,0xf0,0xa3,0xe4,0xf0,0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
-0xe4,0xf0,0x0d,0xbd,0x10,0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,0x01,0x04,0xf0,
-0xe4,0xfd,0x75,0xf0,0x0a,0xed,0x90,0x90,0x00,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,
-0x75,0xf0,0x0a,0xed,0x90,0x90,0x02,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,
-0x0a,0xed,0x90,0x90,0x04,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,
-0x90,0x90,0x06,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,
-0x08,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,0xe4,0x34,0x9d,
-0xf5,0x83,0x74,0x13,0xf0,0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,
-0xf0,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xed,0x25,0xe0,
-0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,
-0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,
-0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,
-0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,
-0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,
-0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x86,0x2d,
-0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,0x82,0xe4,0x34,
-0x9c,0xf5,0x83,0xe4,0xf0,0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,
-0xf0,0x90,0x41,0xca,0x93,0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x92,0x74,0x01,0x93,
-0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,
-0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,0xf0,0x09,0xed,
-0x90,0x96,0x4b,0x12,0x43,0x52,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,
-0x12,0x43,0x52,0x74,0x01,0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
-0x74,0x0c,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x52,0x74,0xff,0xf0,
-0xa3,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x44,0x12,0x43,0x52,0xe4,0xf0,0xa3,0x74,
-0x0f,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x52,0x74,0x13,0xf0,0x75,
-0xf0,0x09,0xed,0x90,0x96,0x49,0x12,0x43,0x52,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,
-0x0f,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,
-0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,
-0x40,0x60,0x02,0x41,0x62,0x22,0x12,0x1f,0x04,0xf5,0x13,0xc3,0x94,0x40,0x50,0x15,
-0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,0x74,0x44,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,
-0xf5,0x83,0xef,0xf0,0x22,0xe5,0x13,0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x1f,0x1d,
-0x90,0x96,0x42,0xf0,0x22,0x90,0x00,0x04,0x12,0x1f,0x1d,0xff,0x54,0x3f,0xfe,0xef,
-0x54,0x80,0xc4,0x13,0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x02,0x6e,0xc2,0x12,0x1f,
-0x04,0x90,0x95,0x01,0xf0,0x22,0xe4,0x90,0x9d,0xa8,0xf0,0xa3,0xf0,0x90,0x01,0xaf,
-0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,
-0x9e,0x9e,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0x9e,0x8d,0xf0,0x12,0x1f,0x04,
-0x65,0x6a,0x60,0x03,0x12,0x4c,0xe3,0xd0,0xd0,0x92,0xaf,0x22,0x12,0x1f,0x04,0xf5,
-0x67,0x22,0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,0x30,0xe0,0x25,0x12,0x1f,0x04,0x90,
-0x9e,0x94,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x9e,0x95,0xf0,0xef,0xc3,0x13,
-0x54,0x7f,0x90,0x9e,0x93,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0x9e,0x9a,0xf0,
-0x22,0x90,0x9e,0x94,0x74,0x01,0xf0,0x90,0x9e,0x95,0x74,0x03,0xf0,0x90,0x9e,0x93,
-0x74,0x14,0xf0,0x90,0x9e,0x9a,0x74,0x05,0xf0,0x22,0x12,0x1f,0x04,0x30,0xe0,0x18,
-0xc3,0x13,0x54,0x7f,0x90,0x9e,0x99,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0xff,0x90,
-0x9e,0x97,0xe4,0xf0,0xa3,0xef,0xf0,0x22,0x90,0x9e,0x99,0x74,0x07,0xf0,0x90,0x9e,
-0x97,0xe4,0xf0,0xa3,0x74,0x0b,0xf0,0x22,0x12,0x1f,0x04,0x60,0x02,0x80,0x01,0xe4,
-0x90,0x9e,0x96,0xf0,0x22,0x12,0x1f,0x04,0x30,0xe0,0x07,0x54,0x01,0x90,0x9e,0xa0,
-0xf0,0x22,0x7d,0x10,0x7f,0x03,0x12,0x3a,0x71,0x7d,0x01,0x7f,0x02,0x02,0x3a,0xc5,
-0x90,0x02,0x09,0xe0,0xfd,0x12,0x1f,0x04,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0xb4,
-0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0xff,0xed,0x2f,0x90,0x9e,0xb5,0xf0,0x90,0x00,
-0x02,0x12,0x1f,0x1d,0xff,0xed,0x2f,0x90,0x9e,0xb6,0xf0,0x90,0x00,0x03,0x12,0x1f,
-0x1d,0xff,0xed,0x2f,0x90,0x9e,0xb7,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0xff,0xae,
-0x05,0xed,0x2f,0x90,0x9e,0xb8,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x3f,0x90,
-0xfd,0x50,0x74,0x0b,0xf0,0xa3,0x74,0x05,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,
-0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0xfd,0x53,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,
-0x90,0xfd,0x54,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0xfd,0x55,0xf0,0x90,0x00,
-0x04,0x12,0x1f,0x1d,0x90,0xfd,0x56,0xf0,0x90,0xfd,0x58,0x74,0x01,0xf0,0x22,0x90,
-0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x0c,0xf0,0xa3,0x74,0x01,0xf0,
-0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
-0x90,0xfd,0x58,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x17,0x90,0xfd,0x50,
-0x74,0x0d,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0x90,0xfd,
-0x58,0x74,0x01,0xf0,0x22,0x12,0x1f,0x04,0x30,0xe0,0x0e,0x90,0x07,0x78,0xe0,0x54,
-0xfd,0xf0,0x90,0x9e,0x50,0x74,0x01,0xf0,0x22,0xe4,0x90,0x9e,0x50,0xf0,0x22,0x90,
-0x07,0x78,0xe0,0x44,0x0c,0xf0,0x12,0x1f,0x04,0xff,0x30,0xe0,0x75,0x90,0xfd,0x58,
-0xe0,0x20,0xe0,0x10,0x90,0xfd,0x50,0x74,0x14,0xf0,0xa3,0x74,0x01,0xf0,0xa3,0xf0,
-0x90,0xfd,0x58,0xf0,0x90,0x9e,0x43,0xe0,0x44,0x08,0xf0,0xef,0x30,0xe1,0x0d,0xe0,
-0x44,0x01,0xf0,0x90,0x07,0x78,0xe0,0x54,0xfd,0xf0,0x80,0x07,0x90,0x07,0x78,0xe0,
-0x44,0x02,0xf0,0x12,0x1f,0x04,0xff,0x30,0xe2,0x1e,0x90,0x9e,0x43,0xe0,0x44,0x04,
-0xf0,0x90,0x04,0x26,0xe0,0x44,0x40,0xf0,0x90,0x07,0x78,0xe0,0x54,0xef,0xf0,0x90,
-0x07,0x83,0xe0,0x44,0x40,0xf0,0x80,0x07,0x90,0x07,0x78,0xe0,0x44,0x10,0xf0,0xef,
-0x30,0xe4,0x63,0x90,0x9e,0x43,0xe0,0x44,0x02,0xf0,0x90,0x04,0x26,0xe0,0x44,0x80,
-0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x12,0x90,0xfd,0x50,0x74,0x14,0xf0,0xa3,
-0x74,0x01,0xf0,0xa3,0xe4,0xf0,0x90,0xfd,0x58,0x04,0xf0,0x90,0x9e,0x43,0xe0,0x54,
-0xfe,0xf0,0xe0,0x54,0xfb,0xf0,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xf7,0xf0,0x90,0x07,
-0x78,0xe0,0x54,0xe3,0xf0,0x90,0x07,0x83,0xe0,0x54,0x3f,0xf0,0x90,0x04,0x26,0xe0,
-0x54,0x3f,0xf0,0x90,0x9e,0x4a,0x12,0x43,0x46,0x90,0x81,0x57,0x12,0x1f,0xd7,0x7f,
-0x80,0x7e,0x08,0x12,0x34,0x55,0x22,0x12,0x1f,0x04,0xff,0x30,0xe0,0x4b,0x90,0x07,
-0x78,0xe0,0x44,0x02,0xf0,0x90,0x07,0x83,0xe0,0x44,0x02,0xf0,0x90,0x07,0x78,0xe0,
-0x44,0x80,0x54,0xbf,0xf0,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1a,0x90,0xfd,0x50,0x74,
-0x1a,0xf0,0xa3,0x74,0x01,0xf0,0xa3,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
-0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0xef,0x30,0xe1,0x5f,0x90,0x9e,0x43,0xe0,0x44,0x02,
-0xf0,0x90,0x07,0x95,0xe0,0x44,0x06,0xf0,0x22,0x90,0x9e,0x43,0xe0,0x54,0xfd,0xf0,
-0x90,0x07,0x78,0xe0,0x54,0x3f,0xf0,0x90,0x07,0x83,0xe0,0x54,0xfd,0xf0,0x90,0x07,
-0x95,0xe0,0x54,0xf9,0xf0,0x90,0x9e,0x4a,0x12,0x43,0x46,0x90,0x81,0x57,0x12,0x1f,
-0xd7,0x7f,0x80,0x7e,0x08,0x12,0x34,0x55,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1a,0x90,
-0xfd,0x50,0x74,0x1a,0xf0,0xa3,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,
-0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0xef,0x70,0x21,0x12,0x1f,0x04,
-0x30,0xe0,0x14,0x90,0x00,0x40,0xe0,0x44,0x20,0xf0,0xe0,0x54,0x3f,0xf0,0x90,0x07,
-0x78,0xe0,0x44,0x01,0xf0,0x80,0x07,0x90,0x07,0x78,0xe0,0x54,0xfe,0xf0,0xef,0x64,
-0x01,0x70,0x6a,0x12,0x1f,0x04,0x90,0x00,0x01,0x30,0xe0,0x2e,0x12,0x1f,0x1d,0x90,
-0x06,0xc0,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0x06,0xc1,0xf0,0x90,0x00,0x03,
-0x12,0x1f,0x1d,0x90,0x06,0xc2,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0x90,0x06,0xc3,
-0xf0,0x90,0x06,0xcc,0xe0,0x54,0xfe,0xf0,0x80,0x2c,0x12,0x1f,0x1d,0x90,0x06,0xc4,
-0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0x06,0xc5,0xf0,0x90,0x00,0x03,0x12,0x1f,
-0x1d,0x90,0x06,0xc6,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0x90,0x06,0xc7,0xf0,0x90,
-0x06,0xcc,0xe0,0x44,0x01,0xf0,0x90,0x06,0xcc,0xe0,0x44,0x02,0xf0,0xef,0xb4,0x02,
-0x11,0x12,0x1f,0x04,0x90,0x06,0xc8,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x06,
-0xc9,0xf0,0xef,0xb4,0x03,0x11,0x12,0x1f,0x04,0x90,0x06,0xca,0xf0,0x90,0x00,0x01,
-0x12,0x1f,0x1d,0x90,0x06,0xcb,0xf0,0xef,0x64,0x04,0x70,0x1f,0x12,0x1f,0x04,0xff,
-0x90,0x07,0x83,0x30,0xe0,0x06,0xe0,0x44,0x10,0xf0,0x80,0x04,0xe0,0x54,0x6f,0xf0,
-0xef,0x30,0xe1,0x07,0x90,0x07,0x83,0xe0,0x44,0x80,0xf0,0x22,0x90,0x9e,0x76,0x12,
-0x43,0x7e,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x37,0x90,0xfd,0x50,0x74,0x11,0xf0,0xa3,
-0x74,0x03,0xf0,0x90,0x9e,0x76,0x12,0x43,0x5e,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,
-0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0xfd,0x53,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,
-0x90,0xfd,0x54,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x80,0x16,
-0x43,0x57,0x01,0x78,0xaa,0x7c,0x9d,0x7d,0x01,0x90,0x9e,0x76,0x12,0x43,0x5e,0x7e,
-0x00,0x7f,0x03,0x12,0x1e,0xde,0x90,0x9e,0x76,0x12,0x43,0x5e,0x12,0x1f,0x04,0x60,
-0x07,0x90,0x9e,0x51,0x74,0x01,0xf0,0x22,0xe4,0x90,0x9e,0x51,0xf0,0x22,0x90,0xfd,
-0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x17,0xf0,0xa3,0x74,0x01,0xf0,0x12,
-0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
-0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,
-0x18,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,
-0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,
-0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x19,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,
-0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
-0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x1a,0xf0,
-0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,
-0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,
-0x1f,0x90,0xfd,0x50,0x74,0x1b,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,
-0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,
-0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x1c,0xf0,0xa3,0x74,
-0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,
-0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x2f,0x90,
-0xfd,0x50,0x74,0x1d,0xf0,0xa3,0x74,0x03,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,
-0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0xfd,0x53,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,
-0x90,0xfd,0x54,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,
-0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x1e,0xf0,0xa3,0x74,0x01,0xf0,
-0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
-0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x12,0x1f,0x04,0xff,0xe4,0xfc,0xfd,0xfe,0x78,0x18,
-0x12,0x1f,0xc4,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x4a,0x12,0x43,
-0x46,0xec,0x54,0x03,0xfc,0x12,0x43,0x19,0x90,0x9e,0x46,0x02,0x1f,0xd7,0x90,0xfd,
-0x58,0xe0,0x20,0xe0,0x3b,0x12,0x1f,0x04,0x90,0xfd,0x50,0xf0,0xa3,0x74,0x04,0xf0,
-0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0xfd,0x52,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,
-0x90,0xfd,0x53,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0xfd,0x54,0xf0,0x90,0x00,
-0x04,0x12,0x1f,0x1d,0x90,0xfd,0x55,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,
-0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x21,0x90,0xfd,0x50,0x74,0x1f,0xf0,0xa3,0x74,
-0x01,0xf0,0x12,0x1f,0x04,0x54,0x01,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,
-0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,
-0x21,0x90,0xfd,0x50,0x74,0x20,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x54,0x01,
-0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
-0x04,0xf0,0x22,0x12,0x1f,0x04,0xff,0x30,0xe0,0x54,0x90,0xfd,0x58,0xe0,0x20,0xe0,
-0x4d,0x90,0xfd,0x50,0x74,0x0a,0xf0,0xa3,0x74,0x06,0xf0,0x90,0x00,0x01,0x12,0x1f,
-0x1d,0x90,0xfd,0x52,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0xfd,0x53,0xf0,0xa3,
-0xe4,0xf0,0xef,0xc3,0x13,0x30,0xe0,0x06,0xa3,0x74,0xa0,0xf0,0x80,0x06,0x90,0xfd,
-0x55,0x74,0xc0,0xf0,0x90,0xfd,0x56,0x74,0x10,0xf0,0xa3,0x74,0x80,0xf0,0x90,0xfd,
-0x50,0x74,0x0a,0xf0,0xa3,0x74,0x06,0xf0,0x90,0xfd,0x58,0x74,0x01,0xf0,0x90,0x00,
-0x02,0x12,0x1f,0x1d,0xfe,0x90,0x00,0x01,0x12,0x1f,0x1d,0x7c,0x00,0x24,0x00,0xff,
-0xec,0x3e,0xfe,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0xfc,0x74,0x20,0x2f,0xff,
-0xe4,0x3e,0xfe,0x90,0x9e,0x76,0xef,0xf0,0xee,0xf9,0x90,0x02,0x09,0xe0,0xc3,0x13,
-0x90,0xfd,0x10,0xf0,0xec,0xc3,0x99,0x50,0x43,0xec,0x70,0x04,0x7d,0x04,0x80,0x02,
-0xe4,0xfd,0xed,0xc3,0x94,0x20,0x50,0x07,0xaf,0x05,0x71,0xda,0x0d,0x80,0xf3,0x0c,
-0x90,0xfd,0x10,0xe0,0x04,0xf0,0xec,0xb5,0x01,0xda,0xe4,0xfd,0xed,0x75,0xf0,0x08,
-0xa4,0xff,0x90,0x9e,0x76,0xe0,0xfb,0xc3,0xef,0x9b,0x74,0x80,0xf8,0x65,0xf0,0x98,
-0x50,0x07,0xaf,0x05,0x71,0xda,0x0d,0x80,0xe3,0x0c,0x80,0xb8,0x90,0x00,0x81,0xe0,
-0x44,0x80,0x12,0x44,0xc9,0xd0,0xd0,0x92,0xaf,0x22,0x90,0xfd,0x58,0xe0,0x30,0xe0,
-0x08,0x90,0x01,0xb8,0xe0,0x04,0xf0,0x80,0xf1,0xef,0x75,0xf0,0x08,0xa4,0x24,0x00,
-0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x50,0xf0,0xef,0x75,0xf0,0x08,
-0xa4,0x24,0x01,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x51,0xf0,0xef,
-0x75,0xf0,0x08,0xa4,0x24,0x02,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,
-0x52,0xf0,0xef,0x75,0xf0,0x08,0xa4,0x24,0x03,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
-0xe0,0x90,0xfd,0x53,0xf0,0xef,0x75,0xf0,0x08,0xa4,0x24,0x04,0xf5,0x82,0xe4,0x34,
-0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x54,0xf0,0xef,0x75,0xf0,0x08,0xa4,0x24,0x05,0xf5,
-0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x55,0xf0,0xef,0x75,0xf0,0x08,0xa4,
-0x24,0x06,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x56,0xf0,0xef,0x75,
-0xf0,0x08,0xa4,0x24,0x07,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x57,
-0xf0,0xa3,0x74,0x01,0xf0,0x22,0x12,0x1f,0x04,0x90,0xfe,0x10,0x60,0x05,0xe0,0x44,
-0x01,0xf0,0x22,0xe0,0x54,0xfe,0xf0,0x22,0x90,0x01,0xb8,0xe0,0x04,0xf0,0x90,0xfd,
-0x58,0xe0,0x90,0x01,0xb9,0xf0,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,
-0x74,0x23,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,
-0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0x9e,0x7a,
-0x12,0x43,0x7e,0x12,0x1f,0x04,0x20,0xe0,0x02,0xa1,0x9c,0xb1,0xe7,0x90,0x9e,0x7a,
-0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0x54,0x01,0xfe,0x90,0x9e,0x86,0xe0,0x54,0xfe,
-0x4e,0xf0,0xef,0x54,0x02,0xff,0xe0,0x54,0xfd,0x4f,0xf0,0x12,0x1f,0x04,0xff,0x54,
-0x04,0xfe,0x90,0x9e,0x86,0xe0,0x54,0xfb,0x4e,0xf0,0xef,0x54,0x10,0xff,0xe0,0x54,
-0xef,0x4f,0xf0,0x12,0x1f,0x04,0xff,0x54,0x20,0xfe,0x90,0x9e,0x86,0xe0,0x54,0xdf,
-0x4e,0xf0,0xef,0x54,0x40,0xff,0xe0,0x54,0xbf,0x4f,0xf0,0x90,0x00,0x01,0x12,0x1f,
-0x1d,0xff,0xc3,0x94,0x17,0x50,0x12,0xef,0xc3,0x94,0x03,0x90,0x9e,0x87,0x50,0x05,
-0x74,0x03,0xf0,0x80,0x0a,0xef,0xf0,0x80,0x06,0x90,0x9e,0x87,0x74,0x17,0xf0,0x90,
-0x9e,0x7a,0x12,0x43,0x5e,0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,0xc3,0x94,0x18,0x50,
-0x12,0xef,0xc3,0x94,0x03,0x90,0x9e,0x88,0x50,0x05,0x74,0x03,0xf0,0x80,0x0a,0xef,
-0xf0,0x80,0x06,0x90,0x9e,0x88,0x74,0x18,0xf0,0xe4,0x90,0x9e,0x50,0xf0,0x90,0x9e,
-0x86,0xe0,0xc4,0x54,0x0f,0x30,0xe0,0x0d,0x75,0x69,0x04,0x90,0x05,0x00,0x74,0x1c,
-0xf0,0xa3,0x74,0x11,0xf0,0x90,0x05,0x58,0x74,0x02,0xf0,0x22,0x90,0x9e,0x7a,0x12,
-0x43,0x5e,0x12,0x1f,0x04,0xff,0x13,0x13,0x13,0x54,0x1f,0x90,0x9e,0x76,0x30,0xe0,
-0x09,0x12,0x1f,0xe3,0x00,0x00,0x03,0x10,0x80,0x07,0x12,0x1f,0xe3,0x00,0x00,0x03,
-0x00,0xb1,0xe7,0x90,0x00,0x40,0x74,0x24,0xf0,0x90,0x07,0x78,0x74,0x01,0xf0,0xfb,
-0x7a,0x9e,0x79,0x76,0x12,0x4c,0x0d,0x90,0x05,0x22,0xe4,0xf0,0x90,0x05,0x00,0x74,
-0x1c,0xf0,0xa3,0x74,0x43,0xf0,0x22,0x90,0x9e,0x86,0xe0,0x54,0xfe,0xf0,0xa3,0x74,
-0x0b,0xf0,0xa3,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x8b,0xf0,0xa3,0xf0,0x90,0x9e,0x86,
-0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xfb,0xf0,0xe0,0x54,0xef,0xf0,0xe0,0x54,0xf7,0xf0,
-0xe0,0x54,0xdf,0xf0,0xe0,0x54,0xbf,0xf0,0x90,0x9e,0x89,0xe0,0x54,0xfe,0xf0,0xe0,
-0x54,0xfb,0xf0,0xe4,0xa3,0xf0,0x22,0x75,0xe8,0x07,0x90,0xfd,0x68,0x74,0x02,0xf0,
-0x90,0x9e,0x43,0xe0,0x54,0xfe,0xf0,0x54,0xfb,0xf0,0x54,0xfd,0xf0,0x54,0xf7,0xf0,
-0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0x12,0x1f,0xe3,0x00,0x00,0x00,0x00,0x7f,0x80,0x7e,
-0x08,0x12,0x2c,0x87,0x90,0x9e,0x4a,0x12,0x1f,0xd7,0x90,0x00,0x2e,0xe0,0x90,0x9e,
-0x4e,0xf0,0x90,0x00,0x2d,0xe0,0x90,0x9e,0x4f,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,
-0x04,0x26,0xe0,0x44,0x10,0xf0,0x90,0x07,0x83,0xe4,0xf0,0x90,0x07,0x78,0x74,0x03,
-0xf0,0xb1,0xe7,0x7d,0x04,0x7f,0x02,0x02,0x3a,0xdf,0x90,0xfd,0x58,0xe0,0x20,0xe0,
-0x21,0x90,0xfd,0x50,0x74,0x24,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x54,0x01,
-0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
-0x04,0xf0,0x22,0x12,0x1f,0x04,0xff,0x54,0x01,0xfe,0x90,0x9e,0x89,0xe0,0x54,0xfe,
-0x4e,0xf0,0xef,0x54,0x02,0xff,0xe0,0x54,0xfd,0x4f,0xf0,0x90,0x00,0x01,0x12,0x1f,
-0x1d,0x90,0x9e,0x8a,0xf0,0x22,0xe4,0x90,0x9f,0x11,0xf0,0xa3,0xf0,0x90,0x01,0xeb,
-0xe0,0x54,0xc0,0x60,0x43,0xc3,0x90,0x9f,0x12,0xe0,0x94,0x88,0x90,0x9f,0x11,0xe0,
-0x94,0x13,0x40,0x0a,0x90,0x01,0xc6,0xe0,0x44,0x04,0xf0,0x7f,0x00,0x22,0x90,0x9f,
-0x11,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,0x14,0x7e,0x00,0x12,0x3b,0x3b,0xd3,
-0x90,0x9f,0x12,0xe0,0x94,0x64,0x90,0x9f,0x11,0xe0,0x94,0x00,0x40,0xbf,0x90,0x01,
-0xc7,0xe0,0x30,0xe2,0xb8,0x7f,0x00,0x22,0x7f,0x01,0x22,0xd3,0x10,0xaf,0x01,0xc3,
-0xc0,0xd0,0xef,0x54,0xfc,0xff,0x90,0x01,0xe8,0xf0,0xee,0xa3,0xf0,0x90,0x01,0xeb,
-0x74,0x80,0xf0,0xd1,0xd6,0x90,0x01,0xec,0xe0,0xff,0x90,0x9f,0x0a,0x12,0x43,0x5e,
-0x90,0x00,0x03,0xef,0x12,0x42,0x32,0x90,0x01,0xed,0xe0,0x90,0x00,0x02,0x12,0x42,
-0x32,0x90,0x01,0xee,0xe0,0x90,0x00,0x01,0x12,0x42,0x32,0x90,0x01,0xef,0xe0,0x12,
-0x42,0x20,0x90,0x9f,0x0a,0x12,0x43,0x5e,0x12,0x43,0x26,0xd0,0xd0,0x92,0xaf,0x22,
-0x22,0x90,0x05,0x22,0x74,0xff,0xf0,0x90,0x9e,0xe1,0x74,0x04,0xf0,0x22,0x12,0x57,
-0x90,0x80,0xee,0x90,0x05,0x22,0x74,0xff,0xf0,0x90,0x05,0x27,0xe0,0x44,0x40,0xf0,
-0x90,0x9e,0xe1,0x74,0x04,0xf0,0x22,0x90,0x05,0x22,0x74,0xff,0xf0,0x90,0x9e,0xdb,
-0x74,0x05,0xf0,0x22,0x90,0x05,0x22,0x74,0xff,0xf0,0x90,0x9e,0xdb,0x74,0x02,0xf0,
-0x22,0x90,0x05,0x27,0xe0,0x54,0xbf,0xf0,0x90,0x05,0x22,0x74,0x6f,0xf0,0x90,0x9e,
-0xdb,0x74,0x06,0xf0,0x22,0x90,0x05,0x22,0x74,0xff,0xf0,0xe4,0x90,0x9f,0x13,0xf0,
-0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,
-0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,0x90,0x9f,0x14,0xe0,0x94,0xe8,0x90,0x9f,
-0x13,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,0x22,0x7f,0x32,0x7e,0x00,0x12,0x3b,0x3b,
-0x90,0x9f,0x13,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x80,0xc6,0xd3,0x10,0xaf,0x01,
-0xc3,0xc0,0xd0,0x90,0x9f,0x1e,0xef,0xf0,0xd3,0x94,0x07,0x50,0x47,0xe0,0xff,0x74,
-0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,
-0x5f,0xf0,0x12,0x4f,0x6d,0x90,0x9f,0x1e,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,
-0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,
-0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,
-0xf8,0xff,0x80,0x4c,0x90,0x9f,0x1e,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,
-0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x62,0xe0,0x5f,0xf0,
-0x12,0x4f,0x6d,0x90,0x9f,0x1e,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,
-0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x60,0xe0,0xfb,0xe4,0xfe,
-0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,
-0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9f,0x16,0xed,
-0xf0,0x90,0x9f,0x15,0xef,0xf0,0xd3,0x94,0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,
-0x9f,0x15,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,
-0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9f,0x15,0xe0,0xff,0x74,0x01,
-0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,
-0x12,0x4f,0x6d,0x90,0x9f,0x15,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,
-0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0x80,0x67,0x90,0x9f,0x15,0xe0,0x24,0xf8,
-0xf0,0xa3,0xe0,0x70,0x1a,0x90,0x9f,0x15,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
-0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x63,0xe0,0x5f,0xf0,0x80,0x17,0x90,
-0x9f,0x15,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,
-0x90,0x00,0x63,0xe0,0x4f,0xf0,0x12,0x4f,0x6d,0x90,0x9f,0x15,0xe0,0xff,0x74,0x01,
-0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x12,0x4f,0x65,0x90,0x9f,0x15,0xe0,
-0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,
-0x62,0xe0,0x5f,0xf0,0x12,0x4f,0x6d,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,
-0xc3,0xc0,0xd0,0x90,0x9f,0x18,0xed,0xf0,0x90,0x9f,0x17,0xef,0xf0,0xd3,0x94,0x07,
-0x50,0x65,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,
-0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,0x12,0x4f,0x6d,0x90,0x9f,0x17,0xe0,0xff,0x74,
-0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,
-0xf0,0x12,0x4f,0x6d,0x90,0x9f,0x18,0xe0,0x60,0x16,0x90,0x9f,0x17,0xe0,0xff,0x74,
-0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x45,0x80,0x62,
-0x90,0x9f,0x17,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,
-0xf4,0xff,0x90,0x00,0x45,0x80,0x64,0x90,0x9f,0x17,0xe0,0x24,0xf8,0xf0,0xe0,0xff,
-0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x12,0x4f,0x65,0x90,0x9f,
-0x17,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,
-0x00,0x62,0xe0,0x4f,0xf0,0x12,0x4f,0x6d,0x90,0x9f,0x18,0xe0,0x60,0x18,0x90,0x9f,
-0x17,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,
-0x00,0x61,0xe0,0x4f,0x80,0x17,0x90,0x9f,0x17,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
-0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x61,0xe0,0x5f,0xf0,0x12,0x4f,
-0x6d,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x06,0x90,0xe0,0x44,0x01,0xf0,0x90,0x9e,0xcc,
-0xe0,0x30,0xe0,0x31,0x90,0x9e,0xca,0xe0,0xff,0x90,0x9e,0xc9,0xe0,0xfe,0xc4,0x13,
-0x54,0x01,0xfd,0x31,0x9c,0x90,0x9e,0xcb,0xe0,0x75,0xf0,0x20,0xa4,0xff,0xae,0xf0,
-0x12,0x3b,0x3b,0x90,0x9e,0xca,0xe0,0xff,0x90,0x9e,0xc9,0xe0,0xfe,0xc4,0x13,0x54,
-0x01,0xf4,0xfd,0x31,0x9c,0x22,0x90,0x9e,0x76,0x12,0x43,0x7e,0x12,0x1f,0x04,0x20,
-0xe0,0x02,0x61,0xbe,0x90,0x9e,0x76,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0x54,0x01,
-0xfe,0x90,0x9e,0xc9,0xe0,0x54,0xfe,0x4e,0xf0,0xef,0x54,0x04,0xff,0xe0,0x54,0xfb,
-0x4f,0xf0,0x12,0x1f,0x04,0xff,0x54,0x02,0xfe,0x90,0x9e,0xc9,0xe0,0x54,0xfd,0x4e,
-0xf0,0xef,0x54,0x08,0xff,0xe0,0x54,0xf7,0x4f,0xf0,0x12,0x1f,0x04,0xff,0x54,0x10,
-0xfe,0x90,0x9e,0xc9,0xe0,0x54,0xef,0x4e,0xf0,0xef,0x54,0x20,0xff,0xe0,0x54,0xdf,
-0x4f,0xf0,0x12,0x1f,0x04,0xff,0x54,0x40,0xfe,0x90,0x9e,0xc9,0xe0,0x54,0xbf,0x4e,
-0xf0,0xef,0x54,0x80,0xff,0xe0,0x54,0x7f,0x4f,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,
-0x90,0x9e,0xcb,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x9e,0xca,0xf0,0x90,0x00,
-0x03,0x12,0x1f,0x1d,0xff,0x54,0x01,0xfe,0x90,0x9e,0xcc,0xe0,0x54,0xfe,0x4e,0xf0,
-0xef,0x54,0x02,0xff,0xe0,0x54,0xfd,0x4f,0xf0,0xe4,0x12,0x44,0xc9,0x90,0x9e,0x76,
-0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0xc3,0x13,0x30,0xe0,0x07,0x90,0x06,0x90,0xe0,
-0x44,0x02,0xf0,0xef,0x13,0x13,0x54,0x3f,0x30,0xe0,0x07,0x90,0x06,0x90,0xe0,0x44,
-0x04,0xf0,0x12,0x1f,0x04,0x13,0x13,0x13,0x54,0x1f,0x30,0xe0,0x07,0x90,0x06,0x90,
-0xe0,0x44,0x08,0xf0,0x90,0x9e,0xcc,0xe0,0x30,0xe0,0x12,0x90,0x9e,0xca,0xe0,0xff,
-0x90,0x9e,0xc9,0xe0,0xfe,0xc4,0x13,0x54,0x01,0xf4,0xfd,0x31,0x9c,0x22,0x90,0x06,
-0x90,0xe4,0xf0,0x71,0xcc,0x90,0x01,0x3f,0x74,0x04,0xf0,0x22,0x90,0x9e,0xc9,0xe0,
-0x54,0xfe,0xf0,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xfb,0xf0,0xe0,0x54,0xf7,0xf0,0xe0,
-0x54,0xef,0xf0,0xe0,0x54,0xdf,0xf0,0xe0,0x54,0xbf,0xf0,0xe0,0x54,0x7f,0xf0,0xe4,
-0xa3,0xf0,0xa3,0xf0,0xa3,0xe0,0x54,0xfe,0xf0,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xfb,
-0xf0,0x22,0x90,0x9e,0xc1,0xe0,0x54,0xfe,0xf0,0xe0,0x54,0x7f,0xf0,0x90,0x01,0x17,
-0xe0,0xfe,0x90,0x01,0x16,0xe0,0x7c,0x00,0x24,0x00,0xff,0xec,0x3e,0x90,0x9e,0xc7,
-0xf0,0xa3,0xef,0xf0,0x90,0x01,0x04,0xe0,0x54,0x0f,0x90,0x9e,0x6b,0xf0,0xe0,0xff,
-0x74,0x40,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,
-0x90,0x9e,0xc6,0xf0,0xee,0x90,0x9e,0xc5,0xf0,0x80,0x81,0xd3,0x10,0xaf,0x01,0xc3,
-0xc0,0xd0,0x12,0x1f,0x04,0x54,0x01,0xff,0x90,0x9e,0xc1,0xe0,0x54,0xfe,0x4f,0xf0,
-0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x9e,0xc2,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,
-0x90,0x9e,0xc3,0xf0,0x90,0x9e,0xc1,0xe0,0x30,0xe0,0x20,0x90,0x06,0x09,0xe0,0x54,
-0xfe,0xf0,0x90,0x02,0x86,0xe0,0x44,0x04,0xf0,0x43,0x57,0x04,0x7d,0x08,0xe4,0xff,
-0x12,0x3a,0xc5,0x90,0x01,0x3f,0x74,0x04,0xf0,0x80,0x10,0x7d,0x08,0xe4,0xff,0x12,
-0x3a,0x54,0x90,0x02,0x86,0xe0,0x54,0xfb,0xf0,0x71,0xbe,0xd0,0xd0,0x92,0xaf,0x22,
-0xe5,0x68,0x30,0xe3,0x04,0xe4,0xff,0x80,0x02,0x7f,0x01,0x02,0x48,0x7d,0x90,0x9e,
-0xbe,0xe0,0x30,0xe0,0x2d,0xe5,0x67,0xb4,0x01,0x28,0x90,0x9e,0xbd,0xe0,0x04,0xf0,
-0xe0,0xb4,0x0a,0x0b,0x90,0x9e,0xc0,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0xbd,0xf0,0x90,
-0x9e,0xc0,0xe0,0xff,0x90,0x9e,0xbf,0xe0,0xb5,0x07,0x07,0x91,0xb0,0xe4,0x90,0x9e,
-0xc0,0xf0,0x22,0x12,0x1f,0x04,0xff,0x54,0x01,0xfe,0x90,0x9e,0xbe,0xe0,0x54,0xfe,
-0x4e,0xf0,0xef,0xc3,0x13,0x30,0xe0,0x0a,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x9e,
-0xbf,0xf0,0x22,0x90,0x9e,0xc1,0xe0,0xc4,0x13,0x13,0x13,0x54,0x01,0x20,0xe0,0x07,
-0x90,0x01,0x3f,0xe0,0x30,0xe2,0x0a,0x90,0x9e,0xc1,0xe0,0x44,0x80,0xf0,0x7f,0x00,
-0x22,0x7f,0x01,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x2d,0x90,0xfd,0x50,0x74,0x11,
-0xf0,0xa3,0x74,0x04,0xf0,0x90,0x9d,0xaa,0xe0,0x90,0xfd,0x52,0xf0,0x90,0x9d,0xab,
-0xe0,0x90,0xfd,0x53,0xf0,0x90,0x9d,0xac,0xe0,0x90,0xfd,0x54,0xf0,0xa3,0x74,0x28,
-0xf0,0x90,0xfd,0x58,0x74,0x01,0xf0,0x22,0x43,0x57,0x01,0x22,0x90,0x9e,0xe6,0xe0,
-0x54,0xf0,0x44,0x0a,0xf0,0x90,0xfd,0x60,0xe0,0x90,0x9e,0xe8,0xf0,0x90,0xfd,0x62,
-0xe0,0x90,0x9e,0xe9,0xf0,0x90,0xfd,0x63,0xe0,0x90,0x9e,0xea,0xf0,0x90,0xfd,0x64,
-0xe0,0x90,0x9e,0xeb,0xf0,0x90,0xfd,0x65,0xe0,0x90,0x9e,0xec,0xf0,0x90,0xfd,0x60,
-0xe0,0x90,0x9e,0xe6,0x30,0xe6,0x08,0xe0,0x54,0x0f,0x44,0x50,0xf0,0x80,0x16,0xe0,
-0x54,0x0f,0x44,0x70,0xf0,0x90,0xfd,0x66,0xe0,0x90,0x9e,0xed,0xf0,0x90,0xfd,0x67,
-0xe0,0x90,0x9e,0xee,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0xe8,0x90,0x9e,0xfe,0x12,0x43,
-0x7e,0x7a,0x9e,0x79,0xe6,0x02,0x5d,0x37,0x90,0x9e,0x86,0xe0,0x30,0xe0,0x50,0xe0,
-0xff,0xc4,0x13,0x13,0x54,0x03,0x90,0x07,0x78,0x30,0xe0,0x05,0x74,0x0d,0xf0,0x80,
-0x03,0x74,0x09,0xf0,0x90,0x9e,0x52,0x12,0x1f,0xe3,0x00,0x00,0x03,0x10,0x7b,0x01,
-0x7a,0x9e,0x79,0x52,0x12,0x4c,0x0d,0x90,0x9e,0x8b,0x74,0x01,0xf0,0x90,0x9e,0x86,
-0xe0,0xc4,0x13,0x54,0x07,0x30,0xe0,0x06,0x90,0x05,0x22,0xe4,0xf0,0x22,0x90,0x9e,
-0x86,0xe0,0xc4,0x54,0x0f,0x30,0xe0,0x07,0x90,0x05,0x22,0xe4,0x12,0x49,0x1c,0x22,
-0x90,0x9e,0x86,0xe0,0x30,0xe0,0x41,0xe4,0xf5,0x48,0xa3,0xe0,0xf5,0x49,0xe4,0xfb,
-0xfd,0x7f,0x60,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x63,0x74,0x05,0xf0,0x90,0x9e,
-0x52,0x12,0x1f,0xe3,0x00,0x00,0x03,0x10,0x7b,0x01,0x7a,0x9e,0x79,0x52,0x12,0x4c,
-0x0d,0x90,0x9e,0x8b,0x74,0x01,0xf0,0xa3,0xf0,0x90,0x9e,0x96,0xe0,0x90,0x05,0x22,
-0x60,0x04,0x74,0x6f,0xf0,0x22,0xe4,0xf0,0x22,0x00,0x79,0x4e,};
-
-u8 Rtl8723UFwBTImgArray[Rtl8723UBTImgArrayLength] = {
-0x30,};
-
-
- //WiFi for BT MP New FW 0326
-const u8 Rtl8723SFwUMCBCutMPImgArray[Rtl8723SUMCBCutMPImgArrayLength] = {
-0x02, 0x23, 0x02, 0x00, 0x21, 0x00, 0x00, 0x00, 0x03, 0x27, 0x23, 0x01, 0x4E, 0x5E, 0x01, 0x00,
-0x73, 0x22, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x02, 0x4A, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x61, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x67, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x68, 0x81, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x6B, 0xB7, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03,
-0x00, 0x04, 0x06, 0x05, 0x04, 0x02, 0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09,
-0x08, 0x06, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08,
-0x0A, 0x09, 0x08, 0x00, 0x00, 0x08, 0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10,
-0x00, 0x18, 0x22, 0x21, 0x20, 0x18, 0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21,
-0x20, 0x08, 0x00, 0x20, 0x22, 0x21, 0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20,
-0x22, 0x20, 0x18, 0x08, 0x00, 0x20, 0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00,
-0x00, 0x30, 0x31, 0x2F, 0x10, 0x10, 0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28,
-0x10, 0x00, 0x00, 0x30, 0x31, 0x20, 0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30,
-0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04,
-0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05,
-0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13,
-0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A, 0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F,
-0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24,
-0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78,
-0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40, 0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40,
-0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8, 0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02,
-0x00, 0x04, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48,
-0x00, 0x60, 0x00, 0x6C, 0x00, 0x28, 0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8,
-0x00, 0xF0, 0x01, 0x18, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58,
-0x03, 0x20, 0x03, 0xE8, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07,
-0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04,
-0x05, 0x06, 0x07, 0x08, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18,
-0x10, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0xBB, 0x01, 0x0F, 0xF8, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x28,
-0xF0, 0x22, 0x50, 0x09, 0xC5, 0x82, 0x29, 0xF8, 0xE5, 0x82, 0x26, 0xF6, 0x22, 0xBB, 0xFE, 0x09,
-0xC5, 0x82, 0x29, 0xF8, 0xE2, 0x25, 0x82, 0xF2, 0x22, 0xF8, 0xEA, 0x25, 0x83, 0xF5, 0x83, 0xE9,
-0x93, 0x28, 0x22, 0xBB, 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22,
-0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8, 0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83,
-0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22, 0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE,
-0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0,
-0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A,
-0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7,
-0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3, 0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83,
-0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01, 0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82,
-0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82,
-0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22, 0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0,
-0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A, 0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22,
-0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7,
-0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB, 0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8,
-0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5,
-0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB,
-0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x5B, 0xFF, 0xEE,
-0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED,
-0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, 0xCF, 0xF4, 0xCF, 0xCE, 0xF4, 0xCE, 0xCD, 0xF4, 0xCD, 0xCC,
-0xF4, 0xCC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8,
-0x9C, 0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22,
-0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5,
-0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9,
-0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82, 0x15, 0x82, 0x70,
-0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0,
-0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3,
-0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68,
-0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12,
-0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83,
-0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60, 0xE9, 0xA3, 0xA3,
-0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0xFB, 0x90, 0x93, 0x63, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00,
-0xE5, 0x65, 0x70, 0x03, 0x02, 0x44, 0xF0, 0xE5, 0x62, 0x64, 0x01, 0x60, 0x03, 0x02, 0x44, 0xF0,
-0x0B, 0x90, 0x93, 0x40, 0xF0, 0x04, 0x70, 0x03, 0x02, 0x44, 0xF0, 0x43, 0x66, 0x10, 0x90, 0x93,
-0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A, 0xE0, 0x54, 0x0F, 0xFF, 0x90,
-0x93, 0x58, 0xE0, 0xD3, 0x9F, 0x50, 0x0D, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0xE0, 0xF5, 0x49,
-0xE4, 0x1B, 0x80, 0x56, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93,
-0x58, 0xE0, 0xC3, 0x9F, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x37, 0xE0, 0x04, 0x2F, 0xF5,
-0x49, 0xE4, 0xFB, 0x80, 0x35, 0x90, 0x93, 0x58, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x13,
-0xE4, 0xF5, 0x48, 0x90, 0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x2F, 0xF5, 0x49, 0xE4,
-0xFB, 0x80, 0x17, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x58, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF,
-0x90, 0x93, 0x4F, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12,
-0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
-0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x12, 0x9B, 0x79, 0x90, 0x05, 0x22, 0xE4, 0xF0,
-0x22, 0xE4, 0x90, 0x93, 0x5A, 0xF0, 0x90, 0x93, 0x41, 0xF0, 0xF5, 0x66, 0x22, 0x22, 0xE4, 0xFF,
-0x02, 0x4E, 0x27, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0xE4, 0xFB, 0x90, 0x93, 0x5D, 0x12, 0x1F,
-0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x46, 0x78, 0xE5, 0x62, 0x64, 0x01,
-0x60, 0x03, 0x02, 0x46, 0x78, 0xE5, 0x65, 0x14, 0x60, 0x2B, 0x24, 0xFD, 0x60, 0x27, 0x24, 0x02,
-0x24, 0xFB, 0x50, 0x02, 0x80, 0x21, 0x90, 0x93, 0x40, 0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3,
-0xE0, 0x60, 0x14, 0x90, 0x93, 0x40, 0xE0, 0x70, 0x08, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x93, 0x40,
-0xF0, 0x7B, 0x01, 0x80, 0x02, 0x7B, 0x01, 0xEB, 0x70, 0x03, 0x02, 0x46, 0x78, 0x43, 0x66, 0x10,
-0x90, 0x93, 0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x44, 0xE0, 0x54, 0x0F,
-0xFF, 0x90, 0x93, 0x58, 0xE0, 0xC3, 0x9F, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0x80,
-0x2D, 0x90, 0x93, 0x36, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33,
-0xFE, 0x90, 0x93, 0x58, 0xE0, 0xC3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x08,
-0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3A, 0x80, 0x06, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0xE0, 0x80,
-0x2D, 0x90, 0x93, 0x58, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4, 0xF5, 0x48, 0x90,
-0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x93,
-0x58, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x04, 0x2F, 0xF5, 0x49,
-0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0,
-0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69,
-0xE5, 0x63, 0x64, 0x0C, 0x60, 0x6F, 0x90, 0x93, 0x13, 0xE0, 0xFF, 0x90, 0x93, 0x58, 0xE0, 0xD3,
-0x9F, 0x40, 0x08, 0x90, 0x93, 0x14, 0xE0, 0x04, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x93, 0x14, 0xF0,
-0x90, 0x93, 0x58, 0xE0, 0x90, 0x93, 0x13, 0xF0, 0xA3, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x46, 0xE4,
-0xF0, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8,
-0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x70, 0x21, 0x12, 0x4A, 0x65, 0xE4, 0xF5, 0x48, 0x90, 0x93,
-0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
-0x5B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x55, 0x80, 0x09, 0x43, 0x66, 0x01, 0x12, 0x51, 0x48, 0x90,
-0x93, 0x51, 0x74, 0x01, 0xF0, 0x12, 0x9B, 0x79, 0x22, 0xE4, 0x90, 0x93, 0x63, 0xF0, 0xE5, 0x65,
-0x70, 0x03, 0x02, 0x47, 0x32, 0x90, 0x93, 0x5A, 0xE0, 0x60, 0x11, 0xE4, 0xF0, 0x53, 0x66, 0xFD,
-0xE5, 0x66, 0x54, 0x07, 0x60, 0x03, 0x02, 0x47, 0x32, 0x02, 0x47, 0x2F, 0x90, 0x93, 0x41, 0xE0,
-0x04, 0xF0, 0x53, 0x66, 0xEF, 0x90, 0x93, 0x58, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x36, 0xE0, 0xC4,
-0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A, 0x90, 0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x36,
-0xE0, 0x54, 0x0F, 0xB5, 0x07, 0x0A, 0x90, 0x93, 0x39, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x80, 0x22,
-0x90, 0x93, 0x36, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE,
-0x90, 0x93, 0x58, 0xE0, 0xB5, 0x07, 0x0B, 0xE4, 0xB5, 0x06, 0x07, 0xF0, 0x90, 0x05, 0x58, 0x74,
-0x03, 0xF0, 0x90, 0x93, 0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x06, 0x90,
-0x93, 0x63, 0x74, 0x5A, 0xF0, 0x90, 0x93, 0x63, 0xE0, 0xFF, 0x90, 0x93, 0x48, 0xE0, 0x2F, 0xFF,
-0xE4, 0x33, 0xFE, 0x90, 0x93, 0x41, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
-0x40, 0x0D, 0xE5, 0x62, 0xB4, 0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12,
-0x52, 0x17, 0x22, 0xE4, 0xF5, 0x66, 0xF5, 0x65, 0x75, 0x64, 0x0C, 0x75, 0x63, 0x0C, 0x90, 0x93,
-0x59, 0xF0, 0x90, 0x93, 0x55, 0xF0, 0x90, 0x93, 0x52, 0xF0, 0x90, 0x93, 0x57, 0x04, 0xF0, 0x90,
-0x93, 0x40, 0xF0, 0xE4, 0x90, 0x93, 0x5A, 0xF0, 0x90, 0x93, 0x42, 0xF0, 0x90, 0x93, 0x4F, 0x74,
-0x05, 0xF0, 0xE4, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x93, 0x4D, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90,
-0x93, 0x48, 0xF0, 0x90, 0x93, 0x4B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x45, 0x74, 0x14, 0xF0, 0x90,
-0x93, 0x50, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x43, 0xF0, 0x90, 0x93, 0x3C, 0xF0, 0x90, 0x93,
-0xB2, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x90, 0x93, 0x5C, 0xF0, 0x90, 0x93, 0x58, 0xF0, 0x90, 0x93,
-0x3D, 0xF0, 0x90, 0x93, 0x56, 0xF0, 0x90, 0x93, 0x47, 0xF0, 0x90, 0x93, 0x44, 0xF0, 0x90, 0x93,
-0x51, 0xF0, 0x90, 0x93, 0x4A, 0xF0, 0x90, 0x93, 0x46, 0xF0, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x93,
-0x49, 0xF0, 0x90, 0x93, 0xB1, 0xE0, 0xB4, 0x02, 0x05, 0x90, 0x00, 0x93, 0xE4, 0xF0, 0x90, 0x93,
-0x36, 0xE0, 0x54, 0x7F, 0xF0, 0xE0, 0x54, 0xF0, 0xF0, 0xE0, 0x54, 0x8F, 0xF0, 0xE4, 0xA3, 0xF0,
-0xA3, 0xF0, 0x90, 0x93, 0x3A, 0xF0, 0x90, 0x93, 0x39, 0xF0, 0x22, 0xEF, 0x60, 0x5F, 0xAF, 0x05,
-0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x93,
-0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07,
-0x30, 0xE0, 0x6B, 0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x13, 0xE0, 0x25, 0xE0, 0x25,
-0xE0, 0xFF, 0x74, 0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0x74,
-0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x74, 0x7F, 0xF0, 0x22, 0xAF, 0x05, 0x74,
-0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0x93, 0x19,
-0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xBF, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30,
-0xE0, 0x0C, 0x74, 0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x22, 0x90,
-0x93, 0x15, 0xE0, 0x30, 0xE0, 0x22, 0x90, 0x93, 0x26, 0xE0, 0x60, 0x09, 0x90, 0x01, 0xB9, 0x74,
-0x40, 0xF0, 0x02, 0x49, 0x29, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x02, 0x80, 0x2F,
-0x90, 0x93, 0x4C, 0xE0, 0x60, 0x67, 0x80, 0x5D, 0x12, 0x51, 0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08,
-0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x61, 0xE5, 0x66, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01,
-0xB9, 0x74, 0x02, 0xF0, 0x80, 0x53, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x08, 0x90,
-0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x42, 0xE5, 0x66, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB9, 0x74,
-0x08, 0xF0, 0x80, 0x35, 0xE5, 0x66, 0x30, 0xE4, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80,
-0x28, 0x90, 0x93, 0x42, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x1A, 0x90,
-0x93, 0x4C, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x80, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9,
-0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F,
-0x00, 0x22, 0xE4, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x93, 0x5D, 0xF0, 0xE0,
-0x54, 0xC0, 0x70, 0x18, 0x90, 0x93, 0x51, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0x53, 0x66, 0xFD,
-0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x14, 0x12, 0x52, 0x17, 0x80, 0x0F, 0x90, 0x93, 0x3D, 0xE0,
-0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x90, 0x93, 0x5D, 0xE0, 0x30,
-0xE6, 0x1B, 0x43, 0x66, 0x01, 0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64,
-0x0C, 0x60, 0x13, 0x12, 0x51, 0x48, 0x80, 0x0E, 0x12, 0x50, 0x77, 0x80, 0x09, 0x90, 0x93, 0x51,
-0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0xE4, 0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x5D, 0xE0, 0x30,
-0xE7, 0x2A, 0x43, 0x66, 0x02, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x4B, 0xE0, 0xF5, 0x49, 0xE4, 0xFB,
-0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90, 0x93,
-0x5A, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x53, 0x66, 0xFD, 0x22,
-0x8E, 0x25, 0x8F, 0x26, 0xAD, 0x26, 0xAC, 0x25, 0xAF, 0x24, 0x12, 0x47, 0xEB, 0xAF, 0x26, 0xAE,
-0x25, 0x90, 0x04, 0x80, 0xE0, 0x54, 0x0F, 0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x01, 0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, 0xAC, 0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0x44, 0xFA, 0xF0, 0x74, 0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
-0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
-0xE0, 0x44, 0x0F, 0xF0, 0x90, 0x04, 0x53, 0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51,
-0x74, 0xFF, 0xF0, 0x90, 0x04, 0x50, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xED, 0xF0, 0x22, 0x7D, 0x01, 0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x8F, 0x68, 0x8D, 0x69, 0xE5, 0x68, 0x54, 0x0F, 0xFF, 0xE5, 0x63, 0x54, 0x0F, 0x6F, 0x60, 0x72,
-0xE5, 0x68, 0x30, 0xE2, 0x30, 0xE5, 0x63, 0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x51, 0xA1, 0xE5,
-0x63, 0x30, 0xE3, 0x10, 0xE5, 0x68, 0x20, 0xE3, 0x0B, 0x12, 0x4D, 0x55, 0xEF, 0x60, 0x53, 0x12,
-0x51, 0xD4, 0x80, 0x4E, 0xE5, 0x63, 0x20, 0xE3, 0x49, 0xE5, 0x68, 0x30, 0xE3, 0x44, 0xAF, 0x69,
-0x12, 0x51, 0x86, 0x80, 0x3D, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x68, 0x20,
-0xE3, 0x09, 0x12, 0x4D, 0x55, 0xEF, 0x60, 0x2A, 0x12, 0x51, 0xD4, 0xE5, 0x63, 0x54, 0x0F, 0xFF,
-0xBF, 0x04, 0x0E, 0xE5, 0x68, 0x20, 0xE2, 0x09, 0x12, 0x48, 0x8F, 0xEF, 0x60, 0x14, 0x12, 0x51,
-0x1F, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x02, 0x09, 0x12, 0x4B, 0xF7, 0xEF, 0x60, 0x03, 0x12,
-0x52, 0x04, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x02, 0x4B, 0x35, 0x02, 0x52, 0xF4, 0xE4, 0x93, 0xA3,
-0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4,
-0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8,
-0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04,
-0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x4F, 0x75, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF,
-0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54,
-0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4,
-0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8,
-0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0xEF, 0x64, 0x01, 0x70, 0x3E, 0x7D,
-0x78, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x22, 0x90, 0x01, 0x36,
-0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F,
-0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x4A, 0x65, 0x90, 0x06,
-0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36,
-0x74, 0x7B, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x3A, 0x93, 0x7D, 0x02, 0x7F,
-0x03, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x06, 0x04, 0xE0, 0x44,
-0x80, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, 0xF0, 0x12, 0x4F, 0x28, 0xE5, 0x62, 0x20, 0xE0,
-0x05, 0xE4, 0x90, 0x93, 0x42, 0xF0, 0x22, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x10, 0x12, 0x51,
-0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x5C, 0xE5, 0x14,
-0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x50, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94,
-0x01, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x3F, 0x90, 0x02, 0x87, 0xE0, 0x60,
-0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x31, 0x90, 0x01, 0xAF, 0xE0, 0x60, 0x02, 0x80,
-0x07, 0x90, 0x02, 0x86, 0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x1A,
-0x90, 0x93, 0x43, 0xE0, 0x70, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x0C, 0x90, 0x01,
-0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x02, 0xF0,
-0x7F, 0x00, 0x22, 0xE5, 0x62, 0x64, 0x01, 0x70, 0x6B, 0xE5, 0x65, 0x60, 0x67, 0xE5, 0x65, 0x64,
-0x02, 0x60, 0x06, 0xE5, 0x65, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x93, 0x40,
-0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x93, 0x57, 0xF0, 0x90, 0x93, 0x40, 0xE0, 0x70, 0x07, 0x90,
-0x93, 0x57, 0xE0, 0xFF, 0x80, 0x05, 0x90, 0x93, 0x40, 0xE0, 0xFF, 0x90, 0x93, 0x40, 0xEF, 0xF0,
-0x90, 0x93, 0x42, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x93, 0x58,
-0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
-0x02, 0xF0, 0x53, 0x66, 0xFD, 0x53, 0x66, 0xEF, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80,
-0x03, 0x12, 0x49, 0x32, 0x22, 0x90, 0x93, 0xB1, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x91, 0x80, 0x0C,
-0x90, 0x93, 0xB1, 0xE0, 0x70, 0x04, 0x7D, 0xD4, 0x80, 0x02, 0x7D, 0x40, 0x7F, 0x93, 0x12, 0x54,
-0x0A, 0x90, 0x00, 0x29, 0xE0, 0x54, 0x3F, 0xFD, 0x7F, 0x29, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x28,
-0xE0, 0x54, 0xFC, 0xFD, 0x7F, 0x28, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x08, 0xE0, 0x44, 0x10, 0xFD,
-0x7F, 0x08, 0x12, 0x54, 0x0A, 0x7F, 0x01, 0x12, 0x4E, 0x81, 0x90, 0x00, 0x00, 0xE0, 0x44, 0x20,
-0xFD, 0xE4, 0xFF, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x20, 0xE0, 0x54, 0xFE, 0xFD, 0x7F, 0x20, 0x12,
-0x54, 0x0A, 0x90, 0x00, 0x90, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x54, 0x0A, 0x7F, 0x14,
-0x7E, 0x00, 0x02, 0x3B, 0x09, 0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0, 0x13, 0x90, 0x93, 0x1A, 0xE0,
-0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x18, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x49, 0x12,
-0x51, 0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x39, 0x90,
-0x93, 0x55, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x2B, 0x90, 0x93, 0x52,
-0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x1D, 0xE5, 0x64, 0x54, 0x0F, 0xD3,
-0x94, 0x04, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4,
-0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x7F, 0x00,
-0x22, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xC8, 0x12, 0x44, 0xF1, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8,
-0x12, 0x1E, 0xF6, 0xF5, 0x65, 0x14, 0x60, 0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03,
-0x70, 0x44, 0x7F, 0x01, 0x80, 0x3D, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12,
-0x1F, 0x0F, 0xFD, 0xE4, 0xFF, 0x12, 0x50, 0x39, 0x80, 0x29, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8,
-0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x01, 0x12, 0x50, 0x39, 0x1F, 0x80, 0x14, 0x90,
-0x93, 0x8A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x02, 0x12, 0x50,
-0x39, 0xE4, 0xFF, 0x12, 0x4B, 0x7A, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x24,
-0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x90,
-0x04, 0x1D, 0xE0, 0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x27, 0x74, 0xFF, 0xF0, 0x12, 0x5E,
-0x42, 0xBF, 0x01, 0x0D, 0x90, 0x93, 0xAA, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x1F, 0x12, 0x49,
-0xD0, 0x90, 0x05, 0x22, 0xE5, 0x27, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0xAA, 0xE0, 0xFF, 0x7D, 0x01,
-0x12, 0x58, 0x1F, 0x12, 0x49, 0xD0, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0x8F, 0x6C, 0xE4, 0x90, 0x94, 0x44, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00,
-0x30, 0xE7, 0x02, 0x7F, 0x01, 0xEF, 0x65, 0x6C, 0x60, 0x3E, 0xC3, 0x90, 0x94, 0x45, 0xE0, 0x94,
-0x88, 0x90, 0x94, 0x44, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x80, 0xF0,
-0x22, 0x90, 0x94, 0x44, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00, 0x12,
-0x3B, 0x09, 0xD3, 0x90, 0x94, 0x45, 0xE0, 0x94, 0x32, 0x90, 0x94, 0x44, 0xE0, 0x94, 0x00, 0x40,
-0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE0, 0xB2, 0x22, 0x90, 0x00, 0x20, 0xE0, 0x44, 0x01, 0xFD,
-0x7F, 0x20, 0x12, 0x54, 0x0A, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x00, 0xE0,
-0x54, 0xDF, 0xFD, 0xE4, 0xFF, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x28, 0xE0, 0x44, 0x03, 0xFD, 0x7F,
-0x28, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x08, 0xE0, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x54, 0x0A,
-0xE4, 0xFF, 0x12, 0x4E, 0x81, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x29, 0xE0,
-0x44, 0xC0, 0xFD, 0x7F, 0x29, 0x02, 0x54, 0x0A, 0xE4, 0xFF, 0x90, 0x00, 0x6A, 0xE0, 0x30, 0xE2,
-0x22, 0xE0, 0x30, 0xE0, 0x20, 0xE0, 0x30, 0xE1, 0x0D, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x02, 0x30,
-0xE3, 0x13, 0x7F, 0x03, 0x80, 0x0F, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x03, 0x30, 0xE3, 0x06, 0x7F,
-0x02, 0x80, 0x02, 0x7F, 0x03, 0xEF, 0xFD, 0xD3, 0x90, 0x93, 0x4E, 0xE0, 0x9D, 0x90, 0x93, 0x4D,
-0xE0, 0x94, 0x00, 0x50, 0x05, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0xA3, 0xE0,
-0x90, 0x05, 0x58, 0xF0, 0x22, 0x48, 0x93, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x48, 0x93, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x93, 0x9F, 0x00, 0x41,
-0x93, 0xAE, 0x00, 0x41, 0x93, 0x94, 0x00, 0x41, 0x94, 0x4C, 0x00, 0x41, 0x93, 0x13, 0x00, 0x41,
-0x93, 0x14, 0x00, 0x41, 0x92, 0x69, 0x00, 0x41, 0x92, 0x6A, 0x00, 0x41, 0x92, 0x68, 0x00, 0x41,
-0x94, 0x3D, 0x00, 0x41, 0x94, 0x4A, 0x00, 0x00, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
-0x93, 0x56, 0x74, 0x01, 0xF0, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x94, 0x31, 0x12,
-0x1F, 0xC9, 0x90, 0x94, 0x31, 0x12, 0x43, 0x84, 0xEC, 0x44, 0x02, 0xFC, 0x90, 0x94, 0x31, 0x12,
-0x1F, 0xC9, 0x90, 0x94, 0x31, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00,
-0x7E, 0x08, 0x12, 0x34, 0x30, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50,
-0x02, 0x80, 0x35, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x2E, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09,
-0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x12, 0x9B, 0x79, 0x90, 0x93, 0x59, 0xE0,
-0x60, 0x06, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x0D, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
-0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x22, 0xEF, 0x14, 0x60, 0x09, 0x14, 0x60, 0x16,
-0x24, 0x02, 0x70, 0x32, 0x80, 0x0A, 0x90, 0x93, 0x57, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x40, 0xF0,
-0xE4, 0x90, 0x93, 0x5C, 0xF0, 0x22, 0xED, 0x70, 0x0A, 0x90, 0x93, 0x50, 0xE0, 0x90, 0x93, 0x57,
-0xF0, 0x80, 0x05, 0x90, 0x93, 0x57, 0xED, 0xF0, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x93, 0x40, 0xF0,
-0x90, 0x93, 0x5C, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
-0x08, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C,
-0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02,
-0xF0, 0x90, 0x93, 0x52, 0x14, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x0C, 0x50, 0x03, 0x12,
-0x4A, 0x65, 0x22, 0x90, 0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00,
-0xFF, 0xEC, 0x3E, 0x90, 0x93, 0x3E, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x01, 0x04, 0xE0, 0x54, 0x0F,
-0xFF, 0x74, 0x40, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
-0xF9, 0x90, 0x93, 0x54, 0xF0, 0xEE, 0x90, 0x93, 0x53, 0xF0, 0x22, 0xEF, 0x70, 0x0B, 0x90, 0x93,
-0xB0, 0xE0, 0x90, 0x94, 0x35, 0x60, 0x0B, 0x80, 0x12, 0x90, 0x93, 0xB0, 0xE0, 0x90, 0x94, 0x35,
-0x60, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x02, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00,
-0x01, 0x10, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x35, 0x7F, 0x60, 0x7E, 0x08, 0x02, 0x55, 0x6B, 0x90,
-0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x5E, 0x42, 0xEF, 0x70,
-0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93, 0x12, 0x54,
-0x62, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x90, 0x93, 0x46, 0xE0, 0x70, 0x1A, 0x90, 0x04,
-0x1D, 0xE0, 0x70, 0x14, 0x90, 0x93, 0xA9, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x58, 0x1F, 0x8E, 0x6A,
-0x8F, 0x6B, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0x47, 0xE0, 0x60, 0x16, 0x90,
-0x93, 0x4A, 0xE0, 0x70, 0x10, 0x90, 0x93, 0x44, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74, 0x0D,
-0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF, 0xF0, 0xEF, 0x60, 0x0A,
-0xE5, 0x62, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x4E, 0x27, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x0C,
-0x22, 0x90, 0x94, 0x4D, 0xEF, 0xF0, 0x12, 0x98, 0x8F, 0x90, 0x94, 0x4D, 0xE0, 0x60, 0x05, 0x90,
-0x05, 0x22, 0xE4, 0xF0, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4,
-0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60,
-0x02, 0x7F, 0x00, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x05,
-0x7F, 0x01, 0x12, 0x4E, 0x27, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0xE5, 0x64, 0x30, 0xE6,
-0x12, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0x90, 0x01, 0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0,
-0x53, 0x64, 0xBF, 0x22, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x01, 0x12, 0x4C, 0xE5, 0x12, 0x4E, 0xD9,
-0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x7D, 0x01, 0xAF, 0x64, 0x02, 0x4A, 0x69, 0x90, 0x02,
-0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12, 0x43,
-0xF7, 0x52, 0x49, 0x00, 0x40, 0x52, 0x71, 0x00, 0x80, 0x52, 0x9C, 0x01, 0x00, 0x52, 0xB0, 0x02,
-0x00, 0x52, 0xC8, 0x04, 0x00, 0x00, 0x00, 0x52, 0xE5, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE, 0xFF,
-0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06, 0xCE,
-0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x80,
-0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF, 0x2D,
-0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x07,
-0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04, 0xFE,
-0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80, 0x35,
-0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF, 0x2D,
-0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE, 0xFF,
-0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D, 0x00,
-0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x21, 0xF0,
-0xA3, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x75, 0xF0, 0xA3, 0xF0, 0xF1, 0x9F, 0x75, 0x8E, 0x02,
-0xB1, 0x34, 0xF1, 0xBF, 0x90, 0x93, 0xB1, 0xEF, 0xF0, 0xF1, 0xA7, 0x90, 0x93, 0xB3, 0xEF, 0xF0,
-0x12, 0x60, 0x3E, 0x90, 0x93, 0x95, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x14, 0xF5, 0x09,
-0xF5, 0x62, 0x90, 0x93, 0xB0, 0xF0, 0x90, 0x00, 0xCC, 0xE0, 0x54, 0xF7, 0xF0, 0x12, 0x88, 0x65,
-0x12, 0x47, 0x33, 0x12, 0x37, 0x1C, 0xF1, 0xB3, 0x71, 0xE1, 0x12, 0x60, 0x02, 0xF1, 0xD2, 0xF1,
-0x98, 0x12, 0x60, 0x20, 0x12, 0x44, 0xFD, 0x12, 0x60, 0xAC, 0xB1, 0x1C, 0x90, 0x93, 0x77, 0xE5,
-0xD9, 0xF0, 0xC2, 0xAF, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40, 0xF0, 0x91, 0x52, 0x75, 0xE8, 0x03,
-0x43, 0xA8, 0x85, 0x12, 0x96, 0x00, 0xD2, 0xAF, 0x51, 0xEA, 0x12, 0x60, 0x56, 0x90, 0x93, 0x75,
-0xE0, 0x64, 0x01, 0xF0, 0x24, 0xF4, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x52, 0xA3, 0xF0, 0xE5, 0x14,
-0x30, 0xE0, 0x09, 0xC2, 0xAF, 0x53, 0x14, 0xFE, 0xB1, 0x44, 0xD2, 0xAF, 0xE5, 0x14, 0x30, 0xE4,
-0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xEF, 0xD2, 0xAF, 0x12, 0x6F, 0xBB, 0xE5, 0x14, 0x30, 0xE6, 0x0A,
-0xC2, 0xAF, 0x53, 0x14, 0xBF, 0xD2, 0xAF, 0x12, 0x80, 0x62, 0xE5, 0x14, 0x30, 0xE7, 0x09, 0xC2,
-0xAF, 0x53, 0x14, 0x7F, 0xD2, 0xAF, 0xB1, 0xD2, 0xC2, 0xAF, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0xBF,
-0x01, 0x0D, 0x90, 0x93, 0x43, 0x74, 0x01, 0xF0, 0x51, 0x17, 0xE4, 0x90, 0x93, 0x43, 0xF0, 0xD2,
-0xAF, 0x90, 0x01, 0xBD, 0xE5, 0x63, 0xF0, 0x90, 0x93, 0x59, 0xE0, 0x90, 0x01, 0xBC, 0xF0, 0x80,
-0x8C, 0x90, 0x01, 0x3C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3,
-0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x54, 0x91, 0x0A, 0x7D, 0xFF, 0x7F, 0x55, 0x91, 0x0A,
-0x7D, 0xFF, 0x7F, 0x56, 0x91, 0x0A, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
-0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xED, 0xF0, 0x91, 0x52, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
-0x01, 0x30, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0,
-0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x91, 0x0A, 0xE4, 0xFD, 0x7F, 0x51, 0x91, 0x0A, 0xE4,
-0xFD, 0x7F, 0x52, 0x91, 0x0A, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0x90, 0x00, 0x02, 0xE0, 0x44,
-0x01, 0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xF2, 0x12, 0x1F, 0xD5, 0x00,
-0x00, 0x00, 0x00, 0x90, 0x93, 0xF6, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x02,
-0xE0, 0x54, 0xFE, 0xF0, 0x91, 0x52, 0x91, 0x4B, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x90,
-0x01, 0x00, 0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20,
-0xF0, 0x90, 0x93, 0x4A, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x3D,
-0xE0, 0x60, 0x34, 0xE4, 0x90, 0x93, 0x56, 0xF0, 0xFF, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93,
-0xF2, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF2, 0x12, 0x43, 0x84, 0xEC, 0x54, 0xFD, 0xFC, 0x90, 0x93,
-0xF2, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF2, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9,
-0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x47, 0xE0, 0x60, 0x22, 0xE4, 0xFF, 0x11,
-0xEB, 0x90, 0x93, 0x5B, 0xE0, 0x60, 0x12, 0x90, 0x93, 0xF6, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03,
-0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xF6, 0xB1, 0x67, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90,
-0x93, 0x51, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x94, 0x3E, 0xE0,
-0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x94, 0x40, 0xF0, 0x90, 0x94, 0x3E, 0xE0, 0x54, 0x7F, 0xF0, 0xA3,
-0x74, 0x0A, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0xAD, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD,
-0x7F, 0x80, 0x81, 0x0A, 0xE4, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x6B, 0x12, 0x73, 0x5E, 0xEF, 0xB4,
-0x02, 0x14, 0x90, 0x94, 0x4A, 0xE0, 0x64, 0x04, 0x60, 0x07, 0x43, 0x14, 0x01, 0xE0, 0x04, 0xF0,
-0x22, 0xE4, 0x90, 0x94, 0x4A, 0xF0, 0x22, 0x7F, 0x70, 0x7E, 0x08, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
-0xC0, 0xD0, 0xEF, 0x54, 0xFC, 0xFF, 0x90, 0x01, 0xE8, 0xF0, 0xEE, 0x44, 0xF0, 0xA3, 0xF0, 0x90,
-0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEC, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90,
-0x01, 0xED, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEE, 0xF0, 0x12, 0x1E, 0xF6,
-0x90, 0x01, 0xEF, 0xF0, 0x90, 0x01, 0xEB, 0x74, 0x40, 0xF0, 0x12, 0x97, 0x34, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0x90, 0x93, 0x04, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x16, 0xEF, 0x7B, 0x01, 0xB4, 0x01,
-0x06, 0x7A, 0x93, 0x79, 0x0B, 0x80, 0x04, 0x7A, 0x93, 0x79, 0x07, 0x7F, 0x80, 0x7E, 0x08, 0xB1,
-0x6B, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1, 0x40, 0xEF, 0x60, 0x4E, 0x90, 0x92,
-0x69, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6E, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01,
-0xC0, 0x02, 0xC0, 0x01, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74, 0x92, 0x35, 0xF0,
-0xFA, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0xD0, 0x01, 0xD0, 0x02, 0xD1, 0x31, 0x90, 0x92, 0x69,
-0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92,
-0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x10, 0x12, 0x43, 0xC8, 0x90, 0x92,
-0x68, 0xE0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0xF1, 0x40, 0xEF, 0x70, 0x02, 0xC1, 0xEC, 0x90,
-0x94, 0x10, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x75, 0x23, 0x02, 0x7B, 0x01,
-0x7A, 0x01, 0x79, 0xA0, 0xD1, 0xF1, 0x90, 0x94, 0x13, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21,
-0x89, 0x22, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5,
-0x23, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2, 0xD1, 0xF1, 0x90, 0x01, 0xAF, 0x74, 0xFF, 0xF0, 0x90,
-0x93, 0xB1, 0xE0, 0x64, 0x01, 0x70, 0x48, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A,
-0x21, 0x89, 0x22, 0x75, 0x23, 0x02, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x20, 0xD1, 0xF1, 0x90, 0x94,
-0x13, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8,
-0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x22, 0xD1,
-0xF1, 0x90, 0x93, 0x95, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0x74, 0xFF, 0xF0, 0x90,
-0x92, 0x68, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x94,
-0x0A, 0x12, 0x43, 0xC8, 0xAB, 0x20, 0xAA, 0x21, 0xA9, 0x22, 0x90, 0x94, 0x0D, 0x12, 0x43, 0xC8,
-0xAF, 0x23, 0x15, 0x23, 0xEF, 0x60, 0x1E, 0x90, 0x94, 0x0D, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43,
-0xB1, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x94, 0x0A, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0xEF,
-0x12, 0x42, 0x53, 0x80, 0xDB, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9, 0x1F, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0x7F, 0xAF, 0x7E, 0x01, 0x90, 0x94, 0x39, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3,
-0xF0, 0x90, 0x94, 0x39, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C, 0xC3,
-0x90, 0x94, 0x3C, 0xE0, 0x94, 0xE8, 0x90, 0x94, 0x3B, 0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01,
-0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x94, 0x3B, 0xE4, 0x75, 0xF0, 0x01, 0x12,
-0x42, 0x87, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x80, 0xC6, 0x7F, 0x01, 0x22, 0x8F, 0x82,
-0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x64, 0x74, 0x20, 0xF0, 0x22, 0x90,
-0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30, 0xE3, 0x02,
-0x7F, 0x01, 0x22, 0xE4, 0x90, 0x92, 0x69, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xAF, 0xF0, 0x22, 0x90,
-0x00, 0xF4, 0xE0, 0x20, 0xE3, 0x09, 0xE0, 0x7F, 0x01, 0x20, 0xE2, 0x05, 0x7F, 0x02, 0x22, 0x7F,
-0x00, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74, 0x10, 0xF0, 0x90,
-0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01,
-0xC4, 0x74, 0xE7, 0xF0, 0x74, 0x57, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05,
-0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7,
-0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3,
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF,
-0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x0E, 0x74, 0x0F,
-0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0,
-0x54, 0xEF, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x3F, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0xFD,
-0x62, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x93, 0x67, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x54, 0x3F, 0x25,
-0xE0, 0x25, 0xE0, 0xFF, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x93, 0x68, 0xF0, 0x90,
-0x93, 0x67, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xE4, 0xFF, 0x90, 0x94, 0x1C, 0xEF, 0xF0, 0xA3, 0xED,
-0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x19, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x94,
-0x21, 0xF0, 0xD1, 0x3C, 0xBF, 0x01, 0x02, 0x11, 0xEC, 0x90, 0x94, 0x21, 0xE0, 0x90, 0x05, 0x22,
-0xF0, 0x80, 0x02, 0x11, 0xEC, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0xAC, 0xE0,
-0xFF, 0x7D, 0x01, 0x11, 0x1F, 0x90, 0x94, 0x1F, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90,
-0x94, 0x1C, 0xE0, 0xFF, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x94, 0x2B, 0xF0, 0xEF, 0x60, 0x10,
-0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x0E,
-0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05,
-0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x74, 0x11,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05, 0x74, 0x16,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x02, 0xF0, 0x74, 0x16, 0x2F, 0xF5,
-0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0x03, 0xF0, 0xAE, 0x05, 0x74, 0x22, 0x2E, 0xF5,
-0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEB, 0xF0, 0x90, 0x94, 0x2B, 0xE0, 0xFF, 0x74, 0x23, 0x2E,
-0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x63, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0x12, 0x9B, 0xA7, 0x90, 0x93, 0x27, 0xE0,
-0x64, 0x01, 0x60, 0x02, 0x41, 0xAE, 0x90, 0x93, 0x1A, 0xE0, 0x30, 0xE0, 0x18, 0xE0, 0xC3, 0x13,
-0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90, 0x93, 0x1A, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x06, 0xA3,
-0xE0, 0x90, 0x93, 0x63, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x63, 0xE0, 0x24, 0x03, 0xF5, 0x49,
-0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0,
-0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x27, 0x30, 0xE0, 0x05, 0x74, 0x05, 0xF0,
-0x80, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F,
-0x90, 0x93, 0x16, 0xE0, 0xFF, 0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90,
-0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x54, 0x07, 0x30, 0xE0, 0x6E, 0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25,
-0xE0, 0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xB9,
-0x80, 0x51, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0,
-0x54, 0xDF, 0xF0, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x30, 0xE0, 0x27, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB,
-0xF0, 0xE4, 0x90, 0x93, 0x2A, 0xF0, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x06, 0xF0,
-0x90, 0x93, 0x4C, 0xE0, 0x60, 0x07, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22,
-0x74, 0x6F, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0xA1, 0xAC, 0x90, 0x93,
-0x27, 0xE0, 0x64, 0x02, 0x60, 0x02, 0x61, 0x8D, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54,
-0x3F, 0x30, 0xE0, 0x08, 0xD1, 0x3C, 0xBF, 0x01, 0x03, 0x12, 0x54, 0x62, 0xE4, 0xFF, 0xD1, 0xE6,
-0x90, 0x93, 0x1A, 0xE0, 0x30, 0xE0, 0x1F, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90,
-0x93, 0x1A, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x90, 0x93, 0x63, 0xF0, 0x90,
-0x93, 0x1A, 0xE0, 0x54, 0xEF, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x16, 0xE0, 0x24, 0x03, 0xFF,
-0x90, 0x93, 0x63, 0xE0, 0x2F, 0xFF, 0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0xFF, 0x90, 0x93, 0x64,
-0xE0, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
-0x63, 0x74, 0x05, 0xF0, 0xE4, 0xFF, 0xD1, 0x83, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x93,
-0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80,
-0x2F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4,
-0x13, 0x54, 0x07, 0x20, 0xE0, 0x14, 0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x80, 0x0B, 0xE5,
-0x65, 0x60, 0x0D, 0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0,
-0x90, 0x93, 0x18, 0xE0, 0x30, 0xE0, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0,
-0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0xC1, 0x36, 0x90, 0x93, 0x27,
-0xE0, 0x64, 0x03, 0x60, 0x02, 0x81, 0xE1, 0x7F, 0x01, 0xD1, 0xE6, 0x90, 0x93, 0x19, 0xE0, 0xFF,
-0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x98, 0x8F, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x20, 0xE0, 0x02, 0x81, 0x3D, 0x90, 0x93, 0x1F, 0xE0, 0xFF, 0x90, 0x93, 0x29,
-0xE0, 0xD3, 0x9F, 0x40, 0x4D, 0xE0, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0xFE,
-0xC3, 0xEF, 0x9E, 0xFF, 0x24, 0x03, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x93, 0x17, 0xE0, 0xD3, 0x9D,
-0xEC, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x40, 0x08, 0xE0, 0x9F, 0x90, 0x93, 0x66, 0xF0, 0x80,
-0x06, 0x90, 0x93, 0x66, 0x74, 0x03, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x66, 0xE0, 0xF5, 0x49,
-0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0,
-0x80, 0x24, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x22, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60,
-0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x1D, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x27, 0xF0,
-0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x29, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48,
-0x90, 0x93, 0x65, 0xE0, 0xFF, 0x90, 0x93, 0x17, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD,
-0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x63,
-0x74, 0x05, 0xF0, 0x7F, 0x01, 0xD1, 0x83, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20,
-0xE0, 0x2F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1A, 0x90, 0x93, 0x1A, 0xE0,
-0x44, 0x20, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x02, 0x80, 0x0F, 0x90, 0x05, 0x22, 0xE4, 0xF0,
-0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x08, 0xE5, 0x65, 0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A,
-0x69, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90,
-0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0x13,
-0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x51, 0x48, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93,
-0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0x7F, 0x01, 0xC1,
-0x38, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x04, 0x60, 0x02, 0xA1, 0xB2, 0xF5, 0x48, 0x75, 0x49, 0x03,
-0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90,
-0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F,
-0x90, 0x93, 0x17, 0xE0, 0xFF, 0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90,
-0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x54, 0x07, 0x30, 0xE0, 0x6E, 0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25,
-0xE0, 0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xB9,
-0x80, 0x51, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0,
-0x54, 0xDF, 0xF0, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x30, 0xE0, 0x27, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB,
-0xF0, 0xE4, 0x90, 0x93, 0x2A, 0xF0, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x07, 0xF0,
-0x90, 0x93, 0x4C, 0xE0, 0x60, 0x07, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22,
-0x74, 0x6F, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0x90, 0x05, 0x22, 0xE4,
-0xF0, 0x22, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x05, 0x60, 0x02, 0xC1, 0x3B, 0x90, 0x93, 0x19, 0xE0,
-0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x08, 0xD1, 0x3C, 0xBF, 0x01, 0x03, 0x12, 0x54, 0x62,
-0xE4, 0xFF, 0xD1, 0xE6, 0xD1, 0x83, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4,
-0x13, 0x54, 0x07, 0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F, 0x90, 0x93,
-0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07,
-0x20, 0xE0, 0x14, 0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x80, 0x0B, 0xE5, 0x65, 0x60, 0x0D,
-0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x18,
-0xE0, 0x30, 0xE0, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13,
-0x13, 0x54, 0x01, 0x30, 0xE0, 0x05, 0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x22, 0x90, 0x05, 0x22, 0x74,
-0xFF, 0xF0, 0xE4, 0x90, 0x94, 0x48, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3,
-0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90,
-0x94, 0x49, 0xE0, 0x94, 0xE8, 0x90, 0x94, 0x48, 0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22,
-0x7F, 0x32, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x94, 0x48, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42,
-0x87, 0x80, 0xC6, 0x90, 0x94, 0x2C, 0xEF, 0xF0, 0x12, 0x9D, 0x50, 0x90, 0x93, 0x18, 0xE0, 0xFF,
-0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x08, 0x90, 0x94, 0x2C, 0xE0, 0xFF, 0x12, 0x50, 0xEB, 0x90,
-0x94, 0x2D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x90, 0x94, 0x2C, 0xE0, 0xB4, 0x01, 0x10,
-0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x16, 0x80, 0x0A,
-0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90, 0x94, 0x2D, 0x12, 0x1F, 0xD5,
-0x00, 0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x2D, 0x12, 0x55, 0x67, 0x90, 0x94, 0x2C,
-0xE0, 0x90, 0x93, 0x26, 0xF0, 0x22, 0xEF, 0x64, 0x03, 0x60, 0x02, 0xE1, 0xB4, 0x90, 0x94, 0x02,
-0x74, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0x13, 0x13, 0x13,
-0x54, 0x1F, 0x30, 0xE0, 0x30, 0x90, 0x94, 0x06, 0x74, 0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0, 0xA3,
-0x74, 0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0,
-0x41, 0x90, 0x94, 0x02, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3,
-0x74, 0x55, 0xF0, 0x80, 0x2D, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x17, 0x90,
-0x94, 0x02, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55,
-0xF0, 0xA3, 0x74, 0x5A, 0x80, 0x05, 0x90, 0x94, 0x06, 0x74, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0xA3, 0xF0, 0x90, 0x94, 0x02, 0xE0, 0x90, 0x06, 0xC0, 0xF0, 0x90, 0x94, 0x03, 0xE0, 0x90, 0x06,
-0xC1, 0xF0, 0x90, 0x94, 0x04, 0xE0, 0x90, 0x06, 0xC2, 0xF0, 0x90, 0x94, 0x05, 0xE0, 0x90, 0x06,
-0xC3, 0xF0, 0x90, 0x94, 0x06, 0xE0, 0x90, 0x06, 0xC4, 0xF0, 0x90, 0x94, 0x07, 0xE0, 0x90, 0x06,
-0xC5, 0xF0, 0x90, 0x94, 0x08, 0xE0, 0x90, 0x06, 0xC6, 0xF0, 0x90, 0x94, 0x09, 0xE0, 0x90, 0x06,
-0xC7, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x06, 0xCC, 0x30, 0xE0,
-0x17, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xEF, 0x90,
-0x06, 0xCC, 0xB4, 0x01, 0x03, 0xE4, 0xF0, 0x22, 0x74, 0x03, 0xF0, 0x22, 0x12, 0x57, 0xE7, 0xBF,
-0x01, 0x0F, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x1F, 0x90, 0x04, 0x1F, 0x74, 0x20,
-0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC, 0xEF, 0x30, 0xE0, 0x02,
-0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5, 0x2B, 0x90, 0x01, 0x30,
-0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3, 0xE5, 0x2B, 0xF0, 0x22,
-0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32, 0x43, 0x32, 0x20, 0x90,
-0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32, 0xF0, 0x22, 0x90, 0x93,
-0xB3, 0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E, 0xFD, 0x7F, 0x33,
-0x22, 0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0xE4, 0x90, 0x93, 0x78, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x98,
-0xE0, 0x7F, 0x00, 0x30, 0xE4, 0x02, 0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E, 0xC3, 0x90, 0x93,
-0x79, 0xE0, 0x94, 0x88, 0x90, 0x93, 0x78, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0,
-0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0x78, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14,
-0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0x79, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x78, 0xE0,
-0x94, 0x00, 0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0x90, 0x01, 0x01, 0xE0,
-0x44, 0x04, 0xF0, 0x90, 0x01, 0x9C, 0x74, 0x7E, 0xF0, 0xA3, 0x74, 0x92, 0xF0, 0xA3, 0x74, 0xA0,
-0xF0, 0xA3, 0x74, 0x24, 0xF0, 0x90, 0x01, 0x9B, 0x74, 0x49, 0xF0, 0x90, 0x01, 0x9A, 0x74, 0xE0,
-0xF0, 0x90, 0x01, 0x99, 0xE4, 0xF0, 0x90, 0x01, 0x98, 0x04, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0,
-0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04,
-0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x93, 0x5D, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01,
-0x80, 0x18, 0xEE, 0x64, 0x01, 0x60, 0x07, 0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3C, 0x90, 0x93,
-0x5D, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x3D, 0xF0, 0x79, 0x40, 0x90, 0x93, 0x5D, 0xE0, 0xFE, 0xA3,
-0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x93, 0x9F,
-0xF0, 0x22, 0x90, 0x93, 0x9F, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0C, 0xE4, 0xF0,
-0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x5F, 0xCC, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0,
-0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03,
-0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x4B, 0xF0, 0x74, 0x61,
-0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x28, 0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D,
-0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E, 0xA3, 0xE0, 0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0,
-0x02, 0x61, 0x45, 0x90, 0x01, 0x34, 0x74, 0x01, 0xF0, 0x85, 0xD1, 0x0A, 0x85, 0xD3, 0x0C, 0x85,
-0xD4, 0x0D, 0x85, 0xD5, 0x0E, 0x85, 0xD6, 0x0F, 0x85, 0xD7, 0x10, 0x85, 0xD9, 0x11, 0x85, 0xD2,
-0x0B, 0x75, 0x20, 0x00, 0x75, 0x21, 0x00, 0x75, 0x22, 0x0A, 0x75, 0x23, 0x08, 0xFB, 0x7A, 0x93,
-0x79, 0xA0, 0x12, 0x56, 0xF1, 0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x01, 0xFE, 0xEF,
-0xC4, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x70, 0x02, 0x41, 0xF0, 0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4,
-0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0x41, 0xF0, 0xEF, 0x54, 0x1F, 0xF5, 0x4D, 0x90,
-0x93, 0xA2, 0xE0, 0x54, 0x3F, 0xF5, 0x4E, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D,
-0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42,
-0x87, 0xE5, 0x4E, 0xD3, 0x94, 0x04, 0x40, 0x03, 0x75, 0x4E, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x4D,
-0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xE0, 0xFE,
-0xA3, 0xE0, 0xFF, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0,
-0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43,
-0x9C, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0xA1, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0,
-0x2F, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82,
-0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0xA3, 0xE0, 0xFF,
-0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x67, 0xAF, 0x4D, 0x12, 0x7A, 0xA1, 0x80, 0x60,
-0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x53, 0x90, 0x93, 0xA4,
-0xE0, 0x54, 0x1F, 0xFF, 0xFD, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D,
-0xF5, 0x83, 0xE4, 0x8D, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0xA3, 0xE0, 0xFE, 0xC4, 0x13, 0x13,
-0x13, 0x54, 0x01, 0x30, 0xE0, 0x0F, 0xEE, 0x54, 0x7F, 0xFD, 0x8F, 0x55, 0xAB, 0x4E, 0xAF, 0x4D,
-0x12, 0x7A, 0x3D, 0x80, 0x1B, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x11, 0x90,
-0x04, 0x30, 0xE0, 0xB4, 0x01, 0x0A, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x04, 0xCF, 0xF0,
-0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x46, 0x90, 0x93, 0x59, 0xE0, 0x60, 0x37, 0x90,
-0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x12, 0x51, 0xBB, 0xEF, 0x64, 0x01,
-0x70, 0x2D, 0xF5, 0x48, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E,
-0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0,
-0x90, 0x93, 0x55, 0xF0, 0x80, 0x09, 0x12, 0x51, 0xBB, 0xBF, 0x01, 0x03, 0x12, 0x52, 0x17, 0x90,
-0x94, 0x4B, 0xE0, 0x04, 0xF0, 0xE5, 0x2C, 0x20, 0xE1, 0x02, 0x61, 0xE7, 0x90, 0x01, 0x34, 0x74,
-0x02, 0xF0, 0x90, 0xFD, 0x10, 0x74, 0x7F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x30, 0xE5, 0x0B, 0x75,
-0x4F, 0x88, 0x75, 0x50, 0x0F, 0x75, 0x51, 0x0F, 0x80, 0x09, 0x75, 0x4F, 0xC0, 0x75, 0x50, 0x08,
-0x75, 0x51, 0x07, 0x90, 0x04, 0x7F, 0xE0, 0x55, 0x51, 0xF5, 0x12, 0x90, 0x04, 0x7E, 0xE0, 0x55,
-0x51, 0xF5, 0x13, 0x65, 0x12, 0x60, 0x60, 0xE4, 0xFF, 0xE5, 0x12, 0x75, 0xF0, 0x08, 0xA4, 0x25,
-0x4F, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x15, 0x2F,
-0xF8, 0xA6, 0x06, 0x0F, 0xBF, 0x08, 0xE2, 0x75, 0x20, 0x00, 0x75, 0x21, 0x00, 0x75, 0x22, 0x15,
-0x75, 0x23, 0x08, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x97, 0x12, 0x56, 0xF1, 0x90, 0x93, 0x97, 0xE0,
-0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0xD1, 0x6A, 0xE5, 0x12, 0x24, 0x01,
-0xFF, 0xE4, 0x33, 0xFE, 0xAD, 0x50, 0x7C, 0x00, 0x12, 0x1F, 0x4E, 0xAF, 0x05, 0x8F, 0x12, 0x90,
-0x04, 0x7F, 0xEF, 0xF0, 0xB5, 0x13, 0xA0, 0xE5, 0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x34, 0x74,
-0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90, 0x01, 0x34, 0x74, 0x10, 0xF0, 0x43, 0x14, 0x10,
-0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF, 0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54, 0xDF, 0xF0,
-0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8, 0x00, 0x75, 0xE8, 0x00, 0x12, 0x54, 0x1F, 0x90,
-0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x54, 0x52, 0x80, 0xFE, 0xE5, 0x2C, 0x30, 0xE6, 0x06,
-0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0x81, 0xF1, 0x90, 0x93, 0xB2,
-0x74, 0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x93, 0xAF, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90,
-0x05, 0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x12, 0x45, 0x09, 0x90,
-0x93, 0x2D, 0xE0, 0x20, 0xE0, 0x02, 0x81, 0xE6, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF,
-0x12, 0x50, 0xEB, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00,
-0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x13,
-0x54, 0x07, 0xFF, 0xE0, 0xFE, 0xC3, 0x13, 0x54, 0x0F, 0xC3, 0x9F, 0x40, 0x30, 0xE0, 0x54, 0xFE,
-0xF0, 0xE0, 0x54, 0xE1, 0xF0, 0x90, 0x93, 0x32, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F,
-0xC9, 0x7F, 0x60, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x2E, 0x12, 0x43, 0x84, 0x90, 0x81,
-0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x80, 0x1C, 0x90, 0x93, 0x2D,
-0xE0, 0xFF, 0xC3, 0x13, 0x54, 0x0F, 0xFE, 0xEF, 0x54, 0xE1, 0xFF, 0xEE, 0x04, 0x54, 0x0F, 0xFE,
-0x25, 0xE0, 0x4F, 0xF0, 0x80, 0x03, 0x12, 0x6B, 0x40, 0x12, 0x6B, 0x09, 0x90, 0x93, 0xB2, 0xE4,
-0xF0, 0xE5, 0x2E, 0x30, 0xE1, 0x45, 0x90, 0x01, 0x36, 0x74, 0x02, 0xF0, 0x43, 0x14, 0x40, 0x12,
-0x9D, 0xA9, 0x11, 0xDC, 0x90, 0x93, 0x5C, 0xE0, 0x60, 0x1D, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4,
-0x16, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90,
-0x93, 0x57, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x05, 0x08, 0xE5, 0x08, 0xC3, 0x94, 0xFF, 0x40, 0x0B,
-0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x43,
-0x90, 0x01, 0x36, 0x74, 0x04, 0xF0, 0x12, 0x4C, 0x73, 0x90, 0x93, 0x5C, 0xE0, 0x60, 0x34, 0x90,
-0x93, 0x57, 0xE0, 0xFF, 0x90, 0x93, 0x40, 0xE0, 0x6F, 0x70, 0x28, 0x90, 0x93, 0x57, 0xE0, 0x90,
-0x05, 0x73, 0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x7D,
-0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93, 0x40,
-0xE0, 0x14, 0xF0, 0xE5, 0x2E, 0x30, 0xE3, 0x34, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0, 0xE5, 0x62,
-0x64, 0x01, 0x70, 0x28, 0xE5, 0x65, 0x60, 0x24, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C,
-0x74, 0x02, 0xF0, 0x75, 0x48, 0x00, 0x90, 0x93, 0x4B, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F,
-0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4,
-0x2B, 0x90, 0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x20, 0xE5, 0x65, 0x60, 0x1C,
-0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x5A, 0xE4, 0xF0,
-0x53, 0x66, 0xFD, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x52, 0x17, 0xE5, 0x2E, 0x30, 0xE5,
-0x25, 0x90, 0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x1A, 0xE5, 0x65, 0x60, 0x16,
-0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64, 0x0C, 0x60, 0x08, 0x12, 0x51,
-0x48, 0x80, 0x03, 0x12, 0x50, 0x77, 0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40,
-0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x10, 0xE5, 0x65, 0x60, 0x0C, 0x53, 0x66, 0xFE, 0xE5, 0x66, 0x54,
-0x07, 0x70, 0x03, 0x12, 0x52, 0x17, 0xE5, 0x2F, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x37, 0x74, 0x02,
-0xF0, 0x12, 0x4F, 0xFA, 0x74, 0x4B, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0xD0,
-0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0,
-0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x93, 0x5D, 0xE0, 0x54, 0xF0,
-0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x15, 0x90, 0x94,
-0x19, 0x12, 0x43, 0xC8, 0x0B, 0x7A, 0x93, 0x79, 0x5D, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x90, 0x94, 0x16, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92, 0x69, 0xE0, 0xB5,
-0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x90, 0x92, 0x69, 0xE0, 0x70, 0x06, 0xA3,
-0xE0, 0x64, 0x09, 0x60, 0x0B, 0x90, 0x92, 0x69, 0xE0, 0x14, 0xFF, 0xA3, 0xE0, 0xB5, 0x07, 0x0F,
-0x12, 0x57, 0x40, 0xEF, 0x60, 0x72, 0x12, 0x55, 0xD2, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x90,
-0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6E, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xA8, 0x01,
-0xFC, 0x7D, 0x01, 0x90, 0x94, 0x16, 0x12, 0x43, 0xA8, 0x7E, 0x00, 0x7F, 0x02, 0x12, 0x1E, 0xD0,
-0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA,
-0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x94, 0x19, 0x12, 0x43, 0xA8, 0x8B, 0x20,
-0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x16, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54,
-0x0F, 0xF5, 0x23, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x56, 0xF1, 0x90, 0x92, 0x6A, 0xE0,
-0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAD, 0x07, 0x90,
-0x93, 0x63, 0xE0, 0x54, 0xF0, 0x44, 0x05, 0xF0, 0x54, 0x0F, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x65,
-0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x65, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93,
-0x79, 0x63, 0xC1, 0x89, 0xAD, 0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x07, 0xF0, 0x54,
-0x0F, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x6E, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90,
-0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0xC1, 0x89, 0xAD, 0x07, 0x90, 0x93, 0x6C,
-0xE0, 0x54, 0xF0, 0x44, 0x09, 0xF0, 0x54, 0x0F, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x6E, 0xEF, 0xF0,
-0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C,
-0xC1, 0x89, 0x90, 0x93, 0x8F, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x92, 0xE0, 0x54, 0xF0, 0x44, 0x02,
-0xF0, 0x54, 0x0F, 0x44, 0xC0, 0xF0, 0x90, 0x93, 0x8F, 0x12, 0x43, 0xA8, 0x90, 0x94, 0x19, 0x12,
-0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x92, 0xC1, 0x89, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82,
-0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x7D, 0xDA, 0x90, 0x01, 0xC4,
-0xED, 0xF0, 0x74, 0x67, 0xFF, 0xA3, 0xF0, 0x53, 0x91, 0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE, 0x90,
-0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90, 0x00, 0x52, 0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0, 0x5E,
-0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06, 0x90, 0x00, 0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D, 0x30,
-0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20, 0xF0, 0xE5, 0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00, 0x55,
-0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7, 0x06, 0x90, 0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5, 0x3E,
-0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74, 0x01, 0xF0, 0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90, 0x00,
-0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30, 0xE2, 0x06, 0x90, 0x00, 0x56, 0x74, 0x04, 0xF0, 0xE5,
-0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56, 0x74, 0x08, 0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0xA3,
-0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0,
-0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00,
-0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x75, 0x56,
-0x00, 0x90, 0x01, 0xC4, 0x74, 0x81, 0xF0, 0x74, 0x68, 0xA3, 0xF0, 0x53, 0x91, 0xDF, 0x90, 0x01,
-0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0, 0x55, 0x31, 0xF5, 0x35, 0xA3, 0xE0, 0x55, 0x32,
-0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37, 0xE5, 0x34, 0x30, 0xE0, 0x06, 0x90, 0x01, 0x3C,
-0x74, 0x01, 0xF0, 0xE5, 0x34, 0x30, 0xE1, 0x10, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93,
-0x15, 0xE0, 0x20, 0xE0, 0x03, 0x12, 0x46, 0x79, 0xE5, 0x34, 0x30, 0xE2, 0x36, 0x90, 0x01, 0x3C,
-0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE0, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93, 0x45,
-0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B,
-0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x55, 0xE4, 0xF0,
-0x12, 0x52, 0x17, 0xE5, 0x34, 0x30, 0xE3, 0x36, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0x90, 0x06,
-0x92, 0xE0, 0x30, 0xE1, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB,
-0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06,
-0x92, 0x74, 0x02, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x52, 0xE4, 0xF0, 0x12, 0x52, 0x17, 0xE5, 0x34,
-0x30, 0xE4, 0x34, 0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x30, 0xE0, 0x24,
-0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x07, 0x78, 0x74, 0x01,
-0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12,
-0x34, 0x30, 0x80, 0x03, 0x12, 0x59, 0x97, 0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3C, 0x74,
-0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x18, 0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90, 0x00, 0x83,
-0xE0, 0xF5, 0x64, 0x90, 0x01, 0xBB, 0xE5, 0x64, 0xF0, 0x12, 0x51, 0xEC, 0x12, 0x52, 0x17, 0xE5,
-0x35, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3D, 0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90,
-0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90, 0x93, 0xAE, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53,
-0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0xFD, 0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x06, 0x90,
-0x01, 0x3E, 0x74, 0x01, 0xF0, 0xE5, 0x36, 0x30, 0xE1, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0,
-0xE5, 0x36, 0x30, 0xE3, 0x08, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xD1, 0x50, 0xE5, 0x36, 0x30,
-0xE4, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x10, 0xF0, 0xE5, 0x36, 0x30, 0xE2, 0x76, 0x90, 0x01, 0x3E,
-0x74, 0x04, 0xF0, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE7, 0x13, 0x74, 0x80, 0xF0, 0x90, 0x07, 0x95,
-0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x44, 0x04, 0xF0, 0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x90, 0x07, 0x8F,
-0xE0, 0x30, 0xE6, 0x12, 0x74, 0x40, 0xF0, 0x90, 0x07, 0x7C, 0xE0, 0xB4, 0x06, 0x08, 0x90, 0x07,
-0x80, 0xE0, 0xFF, 0x12, 0x67, 0x3D, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE5, 0x14, 0x74, 0x20, 0xF0,
-0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3, 0xE0, 0x44, 0x01,
-0xF0, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE2, 0x0D, 0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x54, 0xFB, 0xF0,
-0x7F, 0x01, 0x12, 0x55, 0xB2, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE0, 0x07, 0x74, 0x01, 0xF0, 0xFF,
-0x12, 0x55, 0xB2, 0xE5, 0x36, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x20, 0xF0, 0xE5, 0x36,
-0x30, 0xE6, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x40, 0xF0, 0xE5, 0x36, 0x30, 0xE7, 0x06, 0x90, 0x01,
-0x3E, 0x74, 0x80, 0xF0, 0xE5, 0x37, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x43,
-0x14, 0x80, 0xE5, 0x37, 0x30, 0xE4, 0x1C, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0x12, 0x44, 0x24,
-0x90, 0x93, 0x57, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x71,
-0x40, 0x71, 0x09, 0x74, 0x81, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x68, 0xA3, 0xF0, 0xD0, 0x07,
-0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0,
-0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x94, 0x3E, 0xE0, 0x30, 0xE0, 0x2F,
-0xE5, 0x62, 0xB4, 0x01, 0x2A, 0x90, 0x94, 0x3D, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x0B, 0x90,
-0x94, 0x40, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x3D, 0xF0, 0x90, 0x94, 0x40, 0xE0, 0xFF, 0x90,
-0x94, 0x3F, 0xE0, 0xD3, 0x9F, 0x50, 0x08, 0x12, 0x44, 0xFE, 0xE4, 0x90, 0x94, 0x40, 0xF0, 0x22,
-0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0, 0x6F, 0x7F, 0x01, 0x12, 0x5E, 0xE6, 0x90, 0x93, 0x19, 0xE0,
-0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x98, 0x8F, 0x7F, 0x01, 0x12, 0x5E, 0x83,
-0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x29, 0x90, 0x93, 0x15, 0xE0, 0xC4,
-0x54, 0x0F, 0x30, 0xE0, 0x1F, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x4C, 0xE0,
-0x60, 0x06, 0x7D, 0x01, 0x7F, 0x04, 0x80, 0x09, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x7D, 0x01, 0x7F,
-0x0C, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x4C, 0xE0, 0x90, 0x05, 0x22, 0x60, 0x05, 0x74, 0x6F, 0xF0,
-0x80, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0,
-0x05, 0x7F, 0x01, 0x12, 0x55, 0xB2, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0,
-0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05,
-0xC0, 0x06, 0xC0, 0x07, 0x53, 0x91, 0xBF, 0x90, 0xFD, 0x68, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x35,
-0x90, 0x93, 0x94, 0xE0, 0x70, 0x16, 0x90, 0x00, 0x2E, 0xE0, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x00,
-0x2D, 0xE0, 0x90, 0x93, 0x10, 0xF0, 0x90, 0x93, 0x94, 0x74, 0x01, 0xF0, 0x90, 0xFD, 0x60, 0xE0,
-0x54, 0x3F, 0xD3, 0x94, 0x09, 0x50, 0x03, 0x12, 0x99, 0xED, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x0E,
-0x60, 0x02, 0x81, 0xB8, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x20, 0xE0,
-0x02, 0x81, 0xB8, 0x90, 0xFD, 0x62, 0xE0, 0x54, 0xC0, 0xFE, 0x90, 0x07, 0x90, 0xE0, 0x54, 0x3F,
-0x4E, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x07, 0x91, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x07,
-0x92, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x07, 0x93, 0xF0, 0x90, 0x07, 0x95, 0x74, 0x01, 0xF0,
-0xEF, 0x20, 0xE0, 0x44, 0x90, 0x93, 0x04, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x19, 0x90,
-0x07, 0x78, 0x12, 0x58, 0x7F, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x49, 0x90,
-0x07, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x80, 0x40, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13, 0x30,
-0xE0, 0x11, 0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3, 0xE0,
-0x44, 0x01, 0xF0, 0x90, 0x07, 0x78, 0x80, 0x14, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0x13, 0x13, 0x54,
-0x3F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x12, 0x58, 0x7F, 0x80, 0x0C, 0xE0, 0x44, 0x10, 0xF0,
-0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x0F, 0x0A, 0x90,
-0xFD, 0x62, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xD1, 0xBF, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x15, 0x70,
-0x76, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6A, 0xF0, 0xE0, 0x30, 0xE6, 0x1C, 0xF4, 0x54, 0x3F,
-0x04, 0xFF, 0x90, 0x93, 0x0F, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0xC3, 0x9F, 0x90, 0x93, 0x69, 0xF0,
-0xD3, 0x94, 0x3F, 0x40, 0x20, 0xE4, 0xF0, 0x80, 0x1C, 0x90, 0x93, 0x0F, 0xE0, 0x13, 0x13, 0x54,
-0x3F, 0xFF, 0x90, 0x93, 0x6A, 0xE0, 0x54, 0x3F, 0x2F, 0x90, 0x93, 0x69, 0xF0, 0xD3, 0x94, 0x3F,
-0x40, 0x03, 0x74, 0x3F, 0xF0, 0x90, 0x93, 0x69, 0xE0, 0xFF, 0x90, 0x01, 0xE7, 0xF0, 0xEF, 0x54,
-0x30, 0xC4, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x69, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x4F, 0x90,
-0x93, 0x6B, 0xF0, 0x90, 0x00, 0x2E, 0xF0, 0xEE, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x93, 0x10, 0xE0,
-0x54, 0x0F, 0x4F, 0x90, 0x00, 0x2D, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x16, 0x08, 0x90, 0xFD,
-0x62, 0xE0, 0xFF, 0x12, 0x67, 0x64, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x21, 0x08, 0x90, 0xFD, 0x62,
-0xE0, 0xFF, 0x12, 0x67, 0x8B, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x22, 0x02, 0xD1, 0x6E, 0x90, 0xFD,
-0x60, 0xE0, 0x64, 0x23, 0x70, 0x7B, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x2C, 0x30, 0xE0, 0x05,
-0x74, 0x01, 0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x30, 0xE1, 0x5B, 0x90, 0x93,
-0x2D, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x7F, 0x60, 0x7E, 0x08, 0x12,
-0x2C, 0x6E, 0x90, 0x93, 0x32, 0x12, 0x1F, 0xC9, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x7F, 0x70, 0x7E,
-0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0x2E, 0x12, 0x1F, 0xC9, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5,
-0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x01, 0xBE, 0xE0, 0x04,
-0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0x2D, 0x30, 0xE2, 0x08, 0xE0, 0x54, 0x1F, 0x44, 0x20,
-0xF0, 0x80, 0x06, 0xE0, 0x54, 0x1F, 0x44, 0x60, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0xFF, 0x12, 0x9A,
-0x59, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x24, 0x02, 0xD1, 0x96, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x25,
-0x13, 0x90, 0xFD, 0x62, 0xE0, 0x60, 0x0D, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x93,
-0x24, 0x74, 0x04, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x26, 0x05, 0x7F, 0x01, 0x12, 0x9A, 0xF5,
-0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x30, 0x07, 0xE4, 0xFB, 0xFD, 0x7F, 0x01, 0xD1, 0xEA, 0x90, 0xFD,
-0x68, 0xE0, 0x44, 0x01, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0,
-0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32,
-0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x11, 0x90, 0x93, 0x1C, 0xE0,
-0xC3, 0x13, 0x30, 0xE0, 0x08, 0xE0, 0x44, 0x04, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, 0x00,
-0x75, 0xE0, 0x44, 0x01, 0xF0, 0x7F, 0x01, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0x74,
-0x03, 0xF0, 0x7F, 0x02, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0xE4, 0xF0, 0x90, 0x00,
-0x75, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x0D, 0xF0, 0x54,
-0x0F, 0x44, 0x10, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6E, 0xF0, 0x7B, 0x01, 0x7A, 0x93,
-0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x66, 0x89, 0xAE,
-0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x04, 0xF0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90,
-0x93, 0x6E, 0xEE, 0xF0, 0xA3, 0xED, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19,
-0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x66, 0x89, 0xAC, 0x07, 0x90, 0x93, 0xD9, 0xE0,
-0x44, 0x0F, 0xF0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0x93, 0xDB, 0xEC, 0xF0, 0x60, 0x32, 0x90,
-0xFD, 0x63, 0xE0, 0x90, 0x93, 0xDC, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0x90, 0x93, 0xDD, 0xF0, 0x90,
-0xFD, 0x64, 0xE0, 0x90, 0x93, 0xDE, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0xDF, 0xF0, 0x90,
-0xFD, 0x66, 0xE0, 0x90, 0x93, 0xE0, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0xE1, 0xF0, 0x80,
-0x11, 0x90, 0x93, 0xDC, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xDB, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93,
-0x79, 0xD9, 0x02, 0x66, 0x89, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x1E, 0xF6, 0x90,
-0x93, 0x83, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x84, 0xF0, 0x90, 0x00, 0x02,
-0x12, 0x1F, 0x0F, 0x90, 0x93, 0x85, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x86,
-0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x87, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0,
-0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x15, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x83, 0x7F, 0x30, 0x12,
-0x96, 0xD8, 0x90, 0x93, 0x83, 0xE0, 0xFB, 0x7D, 0x01, 0xE4, 0x80, 0x07, 0x90, 0x93, 0x83, 0xE0,
-0xFB, 0xE4, 0xFD, 0xFF, 0xD1, 0xEA, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
-0xC0, 0xD0, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0,
-0xFD, 0x70, 0x03, 0x02, 0x71, 0x06, 0x90, 0x94, 0x4C, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8,
-0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x03,
-0x02, 0x70, 0xFF, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12, 0x43, 0x9C,
-0xE0, 0x90, 0x93, 0x79, 0xF0, 0x75, 0x20, 0x01, 0x75, 0x21, 0x93, 0x75, 0x22, 0x79, 0x75, 0x23,
-0x01, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x7A, 0x12, 0x56, 0xF1, 0x90, 0x93, 0x7A, 0xE0, 0xFF, 0xC4,
-0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x94, 0x4C, 0x30, 0xE0, 0x59, 0xE0, 0x75, 0xF0, 0x02, 0x90,
-0x00, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7B, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0,
-0x02, 0x90, 0x00, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90, 0x94, 0x4C, 0xE0,
-0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D, 0xF0, 0x90, 0x94,
-0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7E, 0xF0,
-0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
-0x7F, 0xF0, 0x80, 0x33, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C, 0xE0, 0x90,
-0x93, 0x7B, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x9C,
-0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12,
-0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01, 0x7A, 0x93, 0x79,
-0x7B, 0x31, 0x0B, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x90, 0x94, 0x4C, 0xE0, 0xFE, 0x74, 0x01, 0xA8,
-0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x94,
-0x4C, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01,
-0xCC, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x02, 0x6F, 0xCC, 0x90,
-0x01, 0xC6, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xC8, 0xEF, 0x12, 0x43, 0xD1, 0x71, 0xAF, 0x01, 0x71, 0xA6, 0x02, 0x71, 0xF7, 0x03, 0x72, 0x00,
-0x05, 0x72, 0x09, 0x06, 0x73, 0x4B, 0x07, 0x72, 0x11, 0x0B, 0x72, 0x1A, 0x10, 0x72, 0x22, 0x11,
-0x72, 0x2A, 0x12, 0x72, 0x32, 0x16, 0x72, 0x3C, 0x17, 0x72, 0x46, 0x18, 0x72, 0x50, 0x19, 0x73,
-0x17, 0x1B, 0x73, 0x20, 0x1C, 0x72, 0x59, 0x1D, 0x72, 0x63, 0x1E, 0x72, 0x6E, 0x21, 0x72, 0x77,
-0x22, 0x72, 0x80, 0x23, 0x72, 0x89, 0x24, 0x72, 0x92, 0x25, 0x72, 0x9B, 0x26, 0x72, 0xA4, 0x27,
-0x72, 0xAD, 0x28, 0x72, 0xB6, 0x29, 0x71, 0xB8, 0x2D, 0x71, 0xC1, 0x2E, 0x72, 0xBF, 0x2F, 0x73,
-0x29, 0x30, 0x72, 0xD0, 0x32, 0x72, 0xC7, 0x33, 0x71, 0xD3, 0x34, 0x72, 0xD9, 0x36, 0x72, 0xE2,
-0x37, 0x72, 0xEB, 0x38, 0x72, 0xF3, 0x3A, 0x71, 0xCA, 0x3B, 0x72, 0xFC, 0x3E, 0x73, 0x05, 0x3F,
-0x73, 0x0E, 0x41, 0x73, 0x32, 0x46, 0x71, 0xDC, 0x47, 0x71, 0xEE, 0x48, 0x71, 0xE5, 0x49, 0x73,
-0x3B, 0x4B, 0x00, 0x00, 0x73, 0x44, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8B, 0x7D, 0x90,
-0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8B, 0x83, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8C,
-0x64, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8C, 0xAC, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8,
-0x02, 0x8C, 0xE5, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0x17, 0x90, 0x93, 0x80, 0x12,
-0x43, 0xA8, 0x02, 0x8D, 0x1D, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0xDD, 0x90, 0x93,
-0x80, 0x12, 0x43, 0xA8, 0x02, 0x96, 0xD0, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0xEE,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0x5F, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x81,
-0x1C, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0xAC, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8,
-0x61, 0x4C, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x61, 0x52, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8,
-0x61, 0x58, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x01, 0x80, 0x2F, 0x90, 0x93, 0x80, 0x12,
-0x43, 0xA8, 0x7F, 0x02, 0x80, 0x25, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x03, 0x80, 0x1B,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x18, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xE4,
-0xFF, 0x80, 0x08, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x04, 0x02, 0x8E, 0x36, 0x90, 0x93,
-0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x50, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x69,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x82, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x8F, 0x9B, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0xB4, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x02, 0x8F, 0xCD, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0xE6, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xA8, 0x02, 0x8F, 0xFF, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x18, 0x90,
-0x93, 0x80, 0x12, 0x43, 0xA8, 0x81, 0x0D, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x40,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x59, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x90, 0x72, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x92, 0x25, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x61, 0xEB, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x92, 0x37, 0x90, 0x93, 0x80, 0x12,
-0x43, 0xA8, 0x02, 0x96, 0x63, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x96, 0x7C, 0x90, 0x93,
-0x80, 0x12, 0x43, 0xA8, 0x02, 0x96, 0xB7, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0xA4,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0x8B, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x99, 0xB9, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x6F, 0x55, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x02, 0x97, 0x22, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x7D, 0x05, 0x7F, 0x0B,
-0x80, 0x10, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x0A, 0x7D, 0x01, 0x7F, 0x0D, 0x80, 0x04, 0x7D, 0x03,
-0x7F, 0x11, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x41, 0x12, 0x43, 0xC8, 0xE4,
-0xFE, 0x90, 0x00, 0xA3, 0xE0, 0x54, 0xF8, 0x44, 0x05, 0xF0, 0x90, 0x00, 0xA0, 0xE0, 0x54, 0x0F,
-0x64, 0x04, 0x70, 0x5A, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x49, 0x90, 0xFD, 0x50, 0xEF, 0xF0,
-0xA3, 0xED, 0xF0, 0xEE, 0xC3, 0x9D, 0x50, 0x1E, 0x90, 0x94, 0x41, 0x12, 0x43, 0xA8, 0x8E, 0x82,
-0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x52, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5,
-0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDD, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x0F, 0x74, 0x52, 0x2E, 0xF5,
-0x82, 0xE4, 0x34, 0xFD, 0xF5, 0x83, 0xE4, 0xF0, 0x0E, 0x80, 0xEB, 0x90, 0xFD, 0x58, 0x74, 0x01,
-0xF0, 0xFF, 0x80, 0x12, 0x90, 0x01, 0x43, 0xE0, 0x04, 0xF0, 0x7F, 0x02, 0x80, 0x08, 0x90, 0x01,
-0x42, 0xE0, 0x04, 0xF0, 0x7F, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F,
-0x23, 0x71, 0x62, 0xEF, 0xB4, 0x03, 0x05, 0x7F, 0xFF, 0x12, 0x9A, 0x59, 0x22, 0x12, 0x1E, 0xF6,
-0xFF, 0xE9, 0x24, 0x01, 0xF9, 0xE4, 0x3A, 0xFA, 0x7D, 0x04, 0x61, 0x62, 0x90, 0x00, 0x04, 0x12,
-0x1F, 0x0F, 0xFF, 0x54, 0x1F, 0xFE, 0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06,
-0x90, 0x93, 0x83, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x85, 0x12,
-0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x88,
-0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x93,
-0x89, 0xF0, 0x90, 0x93, 0x83, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C,
-0xAD, 0x82, 0xAC, 0x83, 0x90, 0x93, 0x8A, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09,
-0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43, 0xC8, 0x90,
-0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0x0F, 0xFF, 0x90, 0x93,
-0x8C, 0x12, 0x43, 0xA8, 0xEF, 0x12, 0x42, 0x53, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00,
-0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x8C, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0xEF, 0x12,
-0x42, 0x65, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90,
-0x93, 0x8A, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x1E, 0xF6,
-0x8D, 0x82, 0x8C, 0x83, 0xA3, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0xFE, 0x90, 0x93, 0x83, 0xE0, 0xFF,
-0x24, 0xC2, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x84, 0xE0, 0xFE,
-0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF,
-0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x89, 0xE0, 0xFE, 0x75, 0xF0,
-0x09, 0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x8F, 0x57, 0xEF, 0x25, 0xE0, 0x24,
-0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xAF, 0x82, 0xF5, 0x58, 0x8F, 0x59, 0xE5, 0x57, 0x75, 0xF0,
-0x02, 0xA4, 0x24, 0x02, 0xF9, 0x74, 0x89, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C,
-0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAF, 0x82, 0x85, 0x83, 0x5D,
-0x8F, 0x5E, 0xE5, 0x57, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35, 0xF0, 0x75,
-0x5F, 0x01, 0xF5, 0x60, 0x89, 0x61, 0x74, 0xC2, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5,
-0x83, 0xE0, 0x12, 0x43, 0xD1, 0x75, 0xAA, 0x00, 0x75, 0xBF, 0x01, 0x75, 0xD4, 0x02, 0x75, 0xE9,
-0x03, 0x76, 0x12, 0x04, 0x76, 0x27, 0x05, 0x76, 0x3C, 0x06, 0x76, 0x62, 0x0C, 0x76, 0x8F, 0x0D,
-0x76, 0xBC, 0x0E, 0x76, 0xE9, 0x0F, 0x00, 0x00, 0x77, 0x1D, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47,
-0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80, 0x3C, 0xE5,
-0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3,
-0x74, 0x10, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
-0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x05, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5,
-0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x57, 0x25, 0xE0,
-0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0x8F, 0xF0,
-0xE1, 0x1D, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74,
-0x0F, 0xF0, 0xA3, 0x74, 0xF5, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
-0x34, 0x90, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0,
-0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0xE5,
-0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0,
-0xE1, 0x1D, 0x90, 0x04, 0x47, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90,
-0x04, 0x46, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90,
-0x04, 0x45, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x44, 0xE1, 0x14, 0x90,
-0x04, 0x4B, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4A, 0xE0,
-0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x49, 0xE0,
-0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04, 0x4F, 0xE0,
-0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4E, 0xE0, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x4D, 0xE0, 0x85, 0x59, 0x82,
-0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x52, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
-0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x51, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83,
-0xF0, 0x90, 0x04, 0x50, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB, 0x5F, 0xAA,
-0x60, 0xA9, 0x61, 0x12, 0x1E, 0xF6, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53,
-0xAB, 0x5A, 0xE5, 0x5C, 0x24, 0x01, 0xF9, 0xE4, 0x35, 0x5B, 0xFA, 0xC0, 0x03, 0xC0, 0x02, 0xC0,
-0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x90, 0x00, 0x01, 0x12, 0x1F,
-0x0F, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0x85, 0x59, 0x82, 0x85, 0x58,
-0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xE0, 0xFE, 0xEF,
-0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xC0, 0x83, 0xC0,
-0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82,
-0xD0, 0x83, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
-0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x4C, 0x90, 0x93, 0x8F, 0x74, 0x0B, 0xF0, 0x90, 0x93, 0x8F,
-0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x50, 0x03, 0x02, 0x78, 0x63, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07,
-0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24,
-0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60,
-0x0A, 0x90, 0x93, 0x8F, 0xE0, 0x24, 0x10, 0xA3, 0xF0, 0x80, 0x68, 0x90, 0x93, 0x8F, 0xE0, 0x14,
-0xF0, 0x80, 0xBA, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83,
-0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x47, 0x90, 0x93, 0x8F, 0x74, 0x0F, 0xF0, 0x90, 0x93, 0x8F,
-0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x40, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05,
-0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82,
-0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x93,
-0x8F, 0xE0, 0xA3, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0x8F, 0xE0, 0x14, 0xF0, 0x80, 0xBF, 0xE4, 0x90,
-0x93, 0x90, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83,
-0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x8F, 0xF0, 0x90, 0x93, 0x8F, 0xE0,
-0xFF, 0xC3, 0x94, 0x10, 0x40, 0x02, 0x21, 0x1C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
-0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5,
-0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x06, 0x90,
-0x93, 0x8F, 0xE0, 0x80, 0x63, 0x90, 0x93, 0x8F, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5, 0x57, 0x25,
-0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60,
-0x46, 0xE4, 0x90, 0x93, 0x8F, 0xF0, 0x90, 0x93, 0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x0C, 0x50, 0x3C,
-0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
-0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E,
-0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x93, 0x8F, 0xE0, 0x24, 0x10, 0x80, 0x09, 0x90,
-0x93, 0x8F, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x91, 0xF0, 0x90, 0x93, 0x90, 0xE0,
-0xFF, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xEF, 0xF0, 0x90, 0x93,
-0x91, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xEE, 0xF0,
-0xE5, 0x57, 0xC3, 0x94, 0x20, 0x50, 0x2C, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x04,
-0xF5, 0x83, 0xE0, 0xD3, 0x9F, 0x40, 0x02, 0x80, 0x47, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4,
-0x34, 0x04, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x91, 0xE0, 0xA3, 0xF0, 0x80,
-0x37, 0x80, 0x2D, 0x74, 0x27, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF,
-0x90, 0x93, 0x90, 0xE0, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x07, 0x90, 0x93, 0x92, 0xEE, 0xF0, 0x80,
-0x17, 0x90, 0x93, 0x91, 0xE0, 0xFE, 0xEF, 0xC3, 0x9E, 0x50, 0x05, 0xA3, 0xEE, 0xF0, 0x80, 0x08,
-0x90, 0x93, 0x90, 0xE0, 0x90, 0x93, 0x92, 0xF0, 0x90, 0x93, 0x92, 0xE0, 0xFD, 0xAF, 0x57, 0x31,
-0xF4, 0x90, 0x93, 0x92, 0xE0, 0xFF, 0x74, 0xA7, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
-0x83, 0xEF, 0xF0, 0x90, 0x93, 0x90, 0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90, 0x8A, 0x83,
-0x74, 0x03, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x0B, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x02, 0xF0,
-0x22, 0xEF, 0xD3, 0x94, 0x03, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90,
-0x8A, 0x83, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0xC3, 0x94, 0x20, 0x50,
-0x0E, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED, 0xF0, 0x80, 0x29, 0x74,
-0x27, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xED, 0xF0, 0x90, 0x93, 0xCC, 0xEF, 0xF0,
-0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0xCD, 0xF0, 0x7B, 0x01,
-0x7A, 0x93, 0x79, 0xCC, 0x7D, 0x02, 0x71, 0xB9, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F, 0x52, 0x8D,
-0x53, 0xE5, 0x53, 0x54, 0x1F, 0x90, 0x93, 0x5F, 0xF0, 0x74, 0x01, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
-0x88, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x93, 0x60, 0x74, 0x01, 0xF0, 0xEB, 0xC3,
-0x94, 0x01, 0x40, 0x02, 0x80, 0x3B, 0x90, 0x93, 0x5D, 0xE0, 0x25, 0x55, 0xFF, 0xA3, 0xF0, 0xA3,
-0xE0, 0x90, 0x41, 0xA4, 0x93, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x13, 0x74, 0x01, 0x25, 0x52, 0xF5,
-0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAD, 0x53, 0xAF, 0x52, 0x21, 0xF4, 0x90, 0x93,
-0x5E, 0xE0, 0xFF, 0x74, 0x01, 0x25, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEF, 0xF0,
-0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
-0x62, 0xF0, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x54, 0x1F, 0x90,
-0x93, 0x61, 0xF0, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0,
-0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x5D,
-0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x85, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89,
-0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x85, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x25,
-0xE0, 0x25, 0xE0, 0xFF, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEF, 0xF0,
-0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0xC8, 0x40, 0x0D,
-0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0x74, 0xC8, 0xF0, 0x90, 0x93, 0x62,
-0xE0, 0xFF, 0x90, 0x93, 0x61, 0xE0, 0xD3, 0x9F, 0x40, 0x02, 0xEF, 0xF0, 0x90, 0x93, 0x61, 0xE0,
-0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74,
-0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74,
-0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0,
-0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x05,
-0x90, 0x93, 0x61, 0xE0, 0xFD, 0x31, 0xF4, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60,
-0x12, 0x90, 0x04, 0x30, 0xE0, 0x70, 0x0C, 0x04, 0xF0, 0xA3, 0xF0, 0xA3, 0x04, 0xF0, 0x90, 0x04,
-0xCF, 0x04, 0xF0, 0x90, 0x93, 0x61, 0xE0, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x90, 0x94, 0x22, 0x12, 0x43, 0xC8, 0x90, 0x94, 0x25, 0xE0, 0x54, 0xF0, 0x44, 0x06, 0xFF, 0xF0,
-0xED, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFE, 0xEF, 0x54, 0x0F, 0x4E, 0xF0, 0x90, 0x94, 0x22, 0x12,
-0x43, 0xA8, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x25, 0x12, 0x66,
-0x89, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAC, 0x07, 0xEC, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84,
-0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x80,
-0x11, 0x74, 0x27, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93,
-0x88, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x93, 0x8B, 0xF0, 0x75, 0xF0, 0x09,
-0xEC, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x8D, 0xF0, 0x75, 0xF0, 0x09, 0xEC,
-0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0x90, 0x93, 0x8E, 0xF0, 0xEC, 0x25, 0xE0, 0x24,
-0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x8F, 0xCB,
-0xF0, 0xA3, 0xEB, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
-0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x91, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x74, 0xC6, 0x2C, 0xF5,
-0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C, 0x90, 0x93, 0x8E,
-0xE0, 0x90, 0x93, 0x8B, 0xF0, 0x90, 0x93, 0x88, 0xF0, 0xED, 0x70, 0x02, 0xA1, 0x70, 0x90, 0x93,
-0x8C, 0xED, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x93, 0x8B, 0xE0, 0x90, 0x93,
-0x88, 0xF0, 0x90, 0x93, 0x8C, 0xE0, 0x14, 0xF0, 0x90, 0x93, 0x8C, 0xE0, 0x70, 0x02, 0xA1, 0x70,
-0x90, 0x93, 0x8B, 0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02, 0xA1, 0x70, 0xE4, 0x90, 0x93, 0x8A,
-0xF0, 0xEF, 0x14, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x8D, 0xE0, 0xFD, 0x90, 0x93, 0x89, 0xE0,
-0xFF, 0xD3, 0x9D, 0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0, 0xFF, 0x74, 0x01,
-0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90,
-0x93, 0x91, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93, 0x89, 0xE0, 0xFF,
-0xC3, 0x94, 0x10, 0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33,
-0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8F, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E,
-0x60, 0x1A, 0x90, 0x93, 0x89, 0xE0, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0x04, 0xF0,
-0x90, 0x93, 0x8C, 0xE0, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0x6F, 0x60, 0x08, 0x90, 0x93, 0x89, 0xE0,
-0x14, 0xF0, 0x80, 0x83, 0x90, 0x93, 0x8C, 0xE0, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0xC3, 0x9F, 0x50,
-0x0F, 0x90, 0x93, 0x89, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x93, 0x8D, 0xE0, 0x90, 0x93, 0x88, 0xF0,
-0x90, 0x93, 0x88, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83,
-0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34,
-0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13,
-0xFF, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3,
-0xEF, 0xF0, 0xAF, 0x04, 0x90, 0x93, 0x88, 0xE0, 0xFD, 0x31, 0xF4, 0x90, 0x93, 0x88, 0xE0, 0xFF,
-0x22, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x39, 0xEF, 0x30, 0xE0, 0x17, 0xED, 0xC4, 0x54, 0xF0, 0xFD,
-0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x0F,
-0x80, 0x10, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
-0x54, 0xF0, 0xF0, 0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x4D, 0xF0,
-0x22, 0xAD, 0x07, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
-0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x80, 0x11, 0x74, 0x27, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x88,
-0xE0, 0xF9, 0x54, 0x1F, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C,
-0xE0, 0xFF, 0x90, 0x93, 0x8B, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89,
-0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x8C, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xED, 0x25,
-0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93,
-0x8E, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x93, 0x89, 0xE0, 0xFE, 0x25, 0xE0, 0x24, 0x34, 0xF5,
-0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xED, 0x25, 0xE0,
-0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB, 0xF0, 0xEE, 0xC3,
-0x9F, 0x40, 0x02, 0xE1, 0x5E, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4,
-0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0xEF, 0x04, 0x90, 0x93, 0x8A, 0xF0, 0x90, 0x93, 0x8B, 0xE0,
-0xFF, 0x90, 0x93, 0x8A, 0xE0, 0xFE, 0xD3, 0x9F, 0x40, 0x02, 0xE1, 0x98, 0xEE, 0xC3, 0x94, 0x10,
-0x40, 0x21, 0xEE, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3,
-0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8C, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F,
-0x4E, 0x70, 0x27, 0x90, 0x93, 0x8A, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59, 0x74, 0x01, 0x7E,
-0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93,
-0x8E, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x93, 0x8A, 0xE0, 0xB4, 0x11,
-0x0D, 0x90, 0x93, 0x8D, 0xE0, 0x30, 0xE7, 0x06, 0x90, 0x93, 0x8A, 0x74, 0x17, 0xF0, 0x90, 0x93,
-0x8A, 0xE0, 0xFF, 0x64, 0x13, 0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x93, 0x8C, 0xE0, 0x30,
-0xE0, 0x06, 0x90, 0x93, 0x8A, 0x74, 0x18, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0x90, 0x93, 0x89, 0xF0,
-0x90, 0x93, 0x88, 0xF0, 0x80, 0x42, 0x90, 0x93, 0x8A, 0xE0, 0x04, 0xF0, 0xC1, 0xBC, 0x90, 0x93,
-0x8B, 0xE0, 0xFC, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0x28, 0x2D, 0xF5, 0x82,
-0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43,
-0x9C, 0xE0, 0xB4, 0x01, 0x10, 0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x93, 0x89, 0xE0, 0x44, 0x40, 0x90,
-0x93, 0x88, 0xF0, 0x80, 0x03, 0xAF, 0x01, 0x22, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x25, 0xE0, 0x24,
-0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF,
-0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF,
-0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82,
-0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90, 0x93, 0x89, 0xE0,
-0xD3, 0x9C, 0x40, 0x5E, 0x90, 0x93, 0x8B, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
-0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x89, 0xEF, 0xF0, 0x90, 0x93, 0x88, 0xF0, 0xFC, 0xA3,
-0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA,
-0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83,
-0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25,
-0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF,
-0x04, 0x22, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0x05,
-0x90, 0x93, 0x88, 0xE0, 0x44, 0x80, 0xFD, 0x12, 0x79, 0xF4, 0x90, 0x93, 0x88, 0xE0, 0x44, 0x80,
-0xFF, 0x22, 0xE4, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x40, 0x40,
-0x03, 0x02, 0x88, 0x64, 0xEF, 0xB4, 0x20, 0x14, 0x90, 0x8F, 0x46, 0xE0, 0x04, 0xF0, 0x90, 0x89,
-0x01, 0xE0, 0xFF, 0x90, 0x8F, 0x46, 0xE0, 0xB5, 0x07, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x78, 0xE0,
-0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02,
-0x88, 0x5B, 0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xFE,
-0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEE, 0x94, 0x00, 0x50, 0x03, 0x02, 0x88, 0x5B, 0x90, 0x93, 0x78,
-0xE0, 0x94, 0x20, 0x40, 0x09, 0x90, 0x8F, 0x46, 0xE0, 0x60, 0x03, 0x02, 0x88, 0x64, 0x90, 0x93,
-0x78, 0xE0, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75, 0x5A, 0x01,
-0xF5, 0x5B, 0x89, 0x5C, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5,
-0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x93, 0x7D, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0,
-0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93, 0x7F,
-0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74,
-0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93, 0x79, 0xF0,
-0x80, 0x14, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0,
-0x54, 0x3F, 0x90, 0x93, 0x79, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFE, 0x54, 0x1F, 0xA3, 0xF0, 0x90,
-0x93, 0x78, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
-0x82, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05,
-0x40, 0x02, 0x61, 0xF9, 0x90, 0x93, 0x82, 0xE0, 0xFF, 0x90, 0x93, 0x7A, 0xE0, 0x9F, 0x40, 0x13,
-0x90, 0x93, 0x82, 0xE0, 0x90, 0x93, 0x7A, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0x90, 0x93, 0x79, 0xF0,
-0xEF, 0x4E, 0xF0, 0x90, 0x93, 0x7A, 0xE0, 0xFF, 0x90, 0x41, 0x18, 0x93, 0xFE, 0x90, 0x93, 0x78,
-0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x40, 0x06, 0xEF,
-0x90, 0x40, 0xE0, 0x80, 0x07, 0x90, 0x93, 0x7A, 0xE0, 0x90, 0x40, 0xFC, 0x93, 0x90, 0x93, 0x81,
-0xF0, 0x90, 0x93, 0x81, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x56, 0xF9, 0x74, 0x40, 0x35, 0xF0,
-0xFA, 0x7B, 0xFF, 0x8B, 0x57, 0xF5, 0x58, 0x89, 0x59, 0x90, 0x93, 0x78, 0xE0, 0x25, 0xE0, 0x24,
-0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93, 0x7B, 0xCF,
-0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
-0x12, 0x42, 0x9D, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12,
-0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x7E,
-0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0,
-0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58,
-0xA9, 0x59, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9,
-0x5C, 0x90, 0x00, 0x04, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B,
-0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x03, 0x12,
-0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x06, 0x12, 0x42,
-0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87,
-0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB,
-0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x08, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F,
-0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59,
-0x90, 0x00, 0x05, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7D, 0xE0, 0xFC, 0xA3, 0xE0,
-0xFD, 0x12, 0x1F, 0x3C, 0xD3, 0x90, 0x93, 0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x40,
-0x0C, 0xA3, 0xE0, 0x9F, 0xF0, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0xF0, 0x80, 0x07, 0xE4, 0x90, 0x93,
-0x7B, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x7B, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0x78, 0xE0,
-0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
-0x90, 0x93, 0x79, 0xE0, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4,
-0x93, 0xFC, 0x74, 0x01, 0x93, 0xFD, 0xD3, 0xEF, 0x9D, 0xEE, 0x9C, 0x50, 0x02, 0x61, 0xC8, 0x90,
-0x93, 0x78, 0xE0, 0xFF, 0x24, 0x82, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0x74,
-0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9E, 0x40, 0x03, 0xEF,
-0x80, 0x1C, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
-0xE0, 0xFE, 0x74, 0x82, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x90,
-0x93, 0x83, 0xF0, 0x90, 0x93, 0x83, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x02, 0x80, 0x23, 0x90, 0x93,
-0x78, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x01,
-0x40, 0x0F, 0x74, 0xC6, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x14, 0xF0, 0x80,
-0x0F, 0x90, 0x93, 0x78, 0xE0, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0,
-0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x60,
-0x02, 0xE1, 0x09, 0x12, 0x7E, 0x01, 0xE1, 0x09, 0x90, 0x93, 0x79, 0xE0, 0x25, 0xE0, 0x24, 0x6C,
-0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xC3, 0x90,
-0x93, 0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x40, 0x02, 0xE1, 0x09, 0x90, 0x93, 0x78,
-0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x7B, 0xF6, 0xE1, 0x09, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x67,
-0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x02, 0xA1, 0xD7, 0x90,
-0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x03, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x19, 0x40, 0x3D,
-0x80, 0x2E, 0xEE, 0xB4, 0x02, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x11, 0x40, 0x2E, 0x80,
-0x1F, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x0A,
-0x40, 0x1B, 0x80, 0x0C, 0xEE, 0x70, 0x11, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x03, 0x40, 0x0D,
-0x90, 0x8E, 0xC5, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x8E, 0xC5, 0xF0, 0x90, 0x93, 0x78,
-0xE0, 0xFE, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x87, 0xF0,
-0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0xC3, 0x94, 0x30, 0x50,
-0x0A, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0x74, 0x67, 0x2F, 0xA1, 0x82, 0x90, 0x8E, 0xC5, 0xE0, 0x64,
-0x01, 0x60, 0x02, 0xA1, 0x77, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE0, 0x64, 0x0A, 0x60, 0x5B, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xEE, 0x24, 0x05, 0xFB,
-0xE4, 0x33, 0xFA, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xFF, 0xD3,
-0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x38, 0x90, 0x93, 0x78, 0xE0, 0xFE, 0xEF,
-0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
-0xE0, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x16, 0x90, 0x93, 0x78, 0xE0,
-0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x7A, 0xE0, 0x6F,
-0x60, 0x56, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0,
-0xFF, 0xD3, 0x94, 0x42, 0x40, 0x08, 0x90, 0x93, 0x87, 0x74, 0x05, 0xF0, 0x80, 0x11, 0xEF, 0xD3,
-0x94, 0x39, 0x90, 0x93, 0x87, 0x40, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0x90,
-0x93, 0x78, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0x74,
-0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x24,
-0x06, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0x80, 0x2F, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x67, 0xF5,
-0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x14, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0x90, 0x93, 0x78, 0xE0,
-0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x7A, 0xE0, 0xFE,
-0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xEE, 0xF0,
-0x90, 0x93, 0x87, 0xE0, 0xFE, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xEE,
-0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01, 0x11, 0xE4,
-0x90, 0x93, 0x87, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0,
-0x90, 0x93, 0x87, 0xE0, 0xFD, 0xE1, 0x06, 0xEC, 0x64, 0x06, 0x60, 0x02, 0xE1, 0x09, 0x90, 0x93,
-0x7B, 0xF0, 0xA3, 0xF0, 0x90, 0x41, 0xE1, 0x93, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7D, 0xE0, 0xFC,
-0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x85, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93,
-0x78, 0xE0, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x87, 0xF0,
-0xE4, 0x90, 0x93, 0x84, 0xF0, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0xD3, 0x94, 0x04, 0x50, 0x47, 0xAB,
-0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x75, 0xF0, 0x02, 0xEF, 0xA4, 0xF5, 0x82, 0x85, 0xF0, 0x83, 0x12,
-0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0xEF, 0x90, 0x41, 0xDC, 0x93, 0xFF, 0x7E, 0x00, 0x12, 0x1F, 0x3C,
-0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0x85, 0xE0, 0xFE, 0xA3, 0xE0,
-0xFF, 0xD3, 0x90, 0x93, 0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x50, 0x08, 0x90, 0x93,
-0x84, 0xE0, 0x04, 0xF0, 0x80, 0xAF, 0x90, 0x93, 0x84, 0xE0, 0xC3, 0x13, 0xF0, 0x90, 0x93, 0x87,
-0xE0, 0xFF, 0xB4, 0x01, 0x0D, 0x90, 0x93, 0x84, 0xE0, 0x70, 0x5D, 0x90, 0x93, 0x87, 0x04, 0xF0,
-0x80, 0x5B, 0xEF, 0xB4, 0x03, 0x1D, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93, 0x87,
-0x74, 0x03, 0xF0, 0x80, 0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x87, 0x74, 0x01, 0xF0, 0x80,
-0x3C, 0x80, 0x35, 0x90, 0x93, 0x87, 0xE0, 0x64, 0x05, 0x70, 0x32, 0x90, 0x93, 0x84, 0xE0, 0xFF,
-0x70, 0x08, 0x90, 0x93, 0x87, 0x74, 0x05, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x93, 0x87, 0xB4, 0x01,
-0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3, 0x90, 0x93, 0x80, 0xE0, 0x94, 0x03,
-0x90, 0x93, 0x7F, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0xD3, 0x90, 0x93,
-0x80, 0xE0, 0x94, 0x03, 0x90, 0x93, 0x7F, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x87,
-0xF0, 0x90, 0x93, 0x87, 0xE0, 0xFD, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xC4, 0xF5, 0x82, 0xE4,
-0x34, 0x8C, 0xF5, 0x83, 0xED, 0xF0, 0x12, 0x7D, 0xC1, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x67,
-0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x05, 0x50, 0x0F, 0x74, 0x67, 0x2F,
-0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x78, 0xE0,
-0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x7F, 0xE0, 0xFE,
-0xA3, 0xE0, 0xFF, 0xC3, 0x74, 0xFF, 0x9F, 0xFF, 0x74, 0xFF, 0x9E, 0xFE, 0x90, 0x93, 0x78, 0xE0,
-0xFD, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0,
-0xD3, 0x9F, 0xEA, 0x9E, 0x50, 0x1C, 0x90, 0x93, 0x7F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xED, 0x25,
-0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87,
-0x80, 0x14, 0x90, 0x93, 0x78, 0xE0, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5,
-0x83, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x84, 0xF5,
-0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0x74, 0xFF, 0x9D, 0xFB,
-0x74, 0xFF, 0x9C, 0xFA, 0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83,
-0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x9B, 0xEE, 0x9A, 0x90, 0x93, 0x78, 0xE0, 0x50, 0x13, 0x25, 0xE0,
-0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEC, 0x8D, 0xF0, 0x12, 0x42, 0x87, 0x80,
-0x10, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xA3,
-0xF0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x00, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x04, 0xE4,
-0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00,
-0x08, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80,
-0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04,
-0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x84,
-0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x04,
-0xF0, 0x02, 0x80, 0x67, 0x22, 0x90, 0x04, 0x44, 0x74, 0x11, 0xF0, 0xA3, 0x74, 0xF0, 0xF0, 0xA3,
-0x74, 0x0F, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3,
-0x94, 0x10, 0x50, 0x14, 0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE4, 0xF0,
-0x90, 0x93, 0x78, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8F, 0x46, 0xF0, 0x90, 0x89, 0x01,
-0x04, 0xF0, 0xE4, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x40, 0x40,
-0x02, 0x41, 0x5E, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3,
-0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75,
-0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x04, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A,
-0xEF, 0x90, 0x84, 0x06, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90,
-0x84, 0x08, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0xA7, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
-0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83,
-0xE4, 0xF0, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0x07,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC7, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83,
-0xE4, 0xF0, 0x90, 0x8E, 0x04, 0xF0, 0x90, 0x41, 0x92, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0x90,
-0x41, 0x5A, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF,
-0x90, 0x93, 0x78, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83,
-0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0x74,
-0x01, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x74,
-0xC2, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0C, 0xF0, 0x75, 0xF0, 0x09, 0xED,
-0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90,
-0x8A, 0x84, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90,
-0x8A, 0x88, 0x12, 0x43, 0x9C, 0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x89, 0x12,
-0x43, 0x9C, 0xE4, 0xF0, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x0F, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4,
-0x34, 0x04, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x80, 0x0D, 0x74, 0x27, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
-0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x04, 0xF0, 0x01, 0xA7, 0x22, 0x12,
-0x1E, 0xF6, 0xFF, 0xC3, 0x94, 0x40, 0x50, 0x14, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFE, 0x74,
-0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0xB4, 0x40, 0x0A,
-0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x8A, 0x82, 0xF0, 0x22, 0x90, 0x00, 0x04, 0x12, 0x1F,
-0x0F, 0xFF, 0x54, 0x3F, 0xFE, 0xEF, 0x54, 0x80, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0xFD, 0xAF,
-0x06, 0x02, 0x74, 0x30, 0x12, 0x1E, 0xF6, 0x90, 0x89, 0x01, 0xF0, 0x22, 0x90, 0x00, 0x02, 0x12,
-0x1F, 0x0F, 0xFD, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFC, 0xED, 0xC3, 0x94, 0x40, 0x40, 0x02,
-0xE4, 0xFD, 0xEC, 0xC3, 0x94, 0x40, 0x40, 0x02, 0xE4, 0xFC, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5,
-0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x83, 0xF0, 0xEE, 0xA3,
-0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3,
-0xE0, 0x90, 0x93, 0x85, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xEC,
-0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90,
-0x93, 0x89, 0xF0, 0xEE, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x8B, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xEC, 0xF0,
-0xA3, 0x74, 0xFF, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83,
-0xE4, 0xF0, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83,
-0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83,
-0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83,
-0xE4, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x83, 0x02, 0x67, 0xB2, 0x12, 0x1E, 0xF6,
-0xF5, 0x62, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8,
-0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8,
-0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x59, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F,
-0x90, 0x93, 0x3C, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x01, 0x90, 0x93, 0x3D,
-0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x01, 0x90, 0x93, 0x47, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F,
-0xFF, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x44, 0xF0, 0xEF, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90,
-0x93, 0x4A, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x54, 0x01, 0x90, 0x93, 0x46,
-0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x01, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F,
-0xFF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x49, 0xF0, 0xE0, 0x70, 0x38, 0x90, 0x93, 0x47,
-0xE0, 0x70, 0x10, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03,
-0x10, 0x80, 0x0F, 0x7F, 0x01, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5, 0x00, 0x00,
-0x03, 0x00, 0x90, 0x93, 0x86, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x70,
-0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x3D, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x90, 0x93,
-0x83, 0x12, 0x43, 0xA8, 0x12, 0x4D, 0xC1, 0x90, 0x93, 0x59, 0xE0, 0x90, 0x01, 0xE6, 0xF0, 0xD0,
-0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x30, 0xE0, 0x25, 0x12, 0x1E,
-0xF6, 0x90, 0x93, 0x48, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x4B, 0xF0, 0xEF,
-0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x45, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93,
-0x50, 0xF0, 0x22, 0x90, 0x93, 0x48, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4B, 0x74, 0x05, 0xF0, 0x90,
-0x93, 0x45, 0x74, 0x14, 0xF0, 0x90, 0x93, 0x50, 0x74, 0x05, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x30,
-0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F,
-0xFF, 0x90, 0x93, 0x4D, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x4F, 0x74, 0x05,
-0xF0, 0x90, 0x93, 0x4D, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0xA3, 0xE0,
-0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x4C, 0xF0, 0x60, 0x20, 0x90, 0x93,
-0x15, 0xE0, 0x20, 0xE0, 0x19, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x3D, 0xE0,
-0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x12, 0x51, 0x69, 0x90, 0x93,
-0x4C, 0xE0, 0x90, 0x01, 0xE7, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x02, 0x43, 0xC8, 0x12, 0x1E, 0xF6,
-0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x0F, 0xFF,
-0xE0, 0x54, 0xF0, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54, 0x70, 0xFF, 0x90, 0x93, 0x36, 0xE0, 0x54,
-0x8F, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x38, 0xF0, 0x90, 0x00, 0x03,
-0x12, 0x1F, 0x0F, 0x90, 0x93, 0x39, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x3A,
-0xF0, 0x90, 0x00, 0x01, 0x74, 0x19, 0x12, 0x42, 0x20, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF,
-0xD3, 0x94, 0x20, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x01, 0xF0, 0x80, 0x57, 0xEF, 0xD3, 0x94,
-0x40, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x02, 0xF0, 0x80, 0x49, 0xEF, 0xD3, 0x94, 0x60, 0x50,
-0x08, 0x90, 0x93, 0x37, 0x74, 0x03, 0xF0, 0x80, 0x3B, 0xEF, 0xD3, 0x94, 0x80, 0x50, 0x08, 0x90,
-0x93, 0x37, 0x74, 0x04, 0xF0, 0x80, 0x2D, 0xEF, 0xD3, 0x94, 0xA0, 0x50, 0x08, 0x90, 0x93, 0x37,
-0x74, 0x05, 0xF0, 0x80, 0x1F, 0xEF, 0xD3, 0x94, 0xC0, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x06,
-0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0xE0, 0x90, 0x93, 0x37, 0x50, 0x05, 0x74, 0x07, 0xF0, 0x80,
-0x03, 0x74, 0x08, 0xF0, 0x90, 0x93, 0x37, 0xE0, 0x90, 0x93, 0x3B, 0xF0, 0x22, 0x12, 0x1E, 0xF6,
-0x60, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x02,
-0x09, 0xE0, 0xFD, 0x12, 0x1E, 0xF6, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90, 0x93, 0xA8, 0xF0, 0x90,
-0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xA9, 0xF0, 0x90, 0x00, 0x02, 0x12,
-0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xAA, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF,
-0xED, 0x2F, 0x90, 0x93, 0xAB, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xAE, 0x05, 0xED,
-0x2F, 0x90, 0x93, 0xAC, 0xF0, 0x22, 0xEF, 0x70, 0x21, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x14, 0x90,
-0x00, 0x40, 0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0x3F, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x44, 0x01,
-0xF0, 0x80, 0x07, 0x90, 0x07, 0x78, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x64, 0x01, 0x70, 0x6A, 0x12,
-0x1E, 0xF6, 0x90, 0x00, 0x01, 0x30, 0xE0, 0x2E, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC0, 0xF0, 0x90,
-0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC1, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90,
-0x06, 0xC2, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC3, 0xF0, 0x90, 0x06, 0xCC,
-0xE0, 0x54, 0xFE, 0xF0, 0x80, 0x2C, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC4, 0xF0, 0x90, 0x00, 0x02,
-0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC5, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC6,
-0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC7, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x44,
-0x01, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x44, 0x02, 0xF0, 0xEF, 0xB4, 0x02, 0x11, 0x12, 0x1E, 0xF6,
-0x90, 0x06, 0xC8, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC9, 0xF0, 0xEF, 0xB4,
-0x03, 0x11, 0x12, 0x1E, 0xF6, 0x90, 0x06, 0xCA, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
-0x06, 0xCB, 0xF0, 0xEF, 0x64, 0x04, 0x70, 0x1F, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x07, 0x83, 0x30,
-0xE0, 0x06, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0x6F, 0xF0, 0xEF, 0x30, 0xE1, 0x07,
-0x90, 0x07, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93,
-0x83, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0x90, 0x92, 0x6B, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F,
-0x0F, 0x90, 0x92, 0x6C, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x92, 0x6D, 0xF0, 0x90,
-0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x73, 0x5E, 0xEF, 0xB4, 0x02, 0x03, 0x43, 0x14, 0x01, 0x22,
-0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12,
-0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x17, 0x02, 0x73, 0x62, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90,
-0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x18, 0x02,
-0x73, 0x62, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93,
-0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x19, 0x02, 0x73, 0x62, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F,
-0x1A, 0x02, 0x73, 0x62, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8,
-0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1B, 0x02, 0x73, 0x62, 0x90, 0x93, 0x83,
-0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D,
-0x01, 0x7F, 0x1C, 0x02, 0x73, 0x62, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12,
-0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x03, 0x7F, 0x1D, 0x02, 0x73, 0x62, 0x90,
-0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xA8, 0x7D, 0x01, 0x7F, 0x1E, 0x02, 0x73, 0x62, 0x12, 0x1E, 0xF6, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE,
-0x78, 0x18, 0x12, 0x1F, 0xB6, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0x90, 0x93, 0x0B,
-0x12, 0x43, 0x84, 0xEC, 0x54, 0x03, 0xFC, 0x12, 0x43, 0x59, 0x90, 0x93, 0x07, 0x02, 0x1F, 0xC9,
-0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12,
-0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1F, 0x02, 0x73, 0x62, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90,
-0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x20, 0x02,
-0x73, 0x62, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0x90, 0x01, 0xBC, 0xF0, 0xEF, 0x30, 0xE0, 0x5C,
-0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x4E, 0x90, 0xFD, 0x50, 0x74, 0x0A, 0xF0, 0xA3, 0x74, 0x06,
-0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0xFD, 0x52, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F,
-0x0F, 0x90, 0xFD, 0x53, 0xF0, 0xA3, 0xE4, 0xF0, 0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x90, 0xFD, 0x55,
-0x30, 0xE0, 0x05, 0x74, 0xA0, 0xF0, 0x80, 0x03, 0x74, 0xC0, 0xF0, 0x90, 0xFD, 0x56, 0x74, 0x10,
-0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x90, 0xFD, 0x50, 0x74, 0x0A, 0xF0, 0xA3, 0x74, 0x06, 0xF0, 0x90,
-0xFD, 0x58, 0x74, 0x01, 0xF0, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x00, 0x02, 0x12,
-0x1F, 0x0F, 0xFE, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E,
-0xFE, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFC, 0x74, 0x20, 0x2F, 0xFF, 0xE4, 0x3E,
-0xFE, 0x90, 0x93, 0x83, 0xEF, 0xF0, 0xEE, 0xF9, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x02, 0xF0, 0x90,
-0x02, 0x09, 0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xEC, 0xC3, 0x99, 0x50, 0x43, 0xEC, 0x70,
-0x04, 0x7D, 0x04, 0x80, 0x02, 0xE4, 0xFD, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x07, 0xAF, 0x05, 0x31,
-0x79, 0x0D, 0x80, 0xF3, 0x0C, 0x90, 0xFD, 0x10, 0xE0, 0x04, 0xF0, 0xEC, 0xB5, 0x01, 0xDA, 0xE4,
-0xFD, 0xED, 0x75, 0xF0, 0x08, 0xA4, 0xFF, 0x90, 0x93, 0x83, 0xE0, 0xFB, 0xC3, 0xEF, 0x9B, 0x74,
-0x80, 0xF8, 0x65, 0xF0, 0x98, 0x50, 0x07, 0xAF, 0x05, 0x31, 0x79, 0x0D, 0x80, 0xE3, 0x0C, 0x80,
-0xB8, 0x90, 0x00, 0x81, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x81, 0x12, 0x54, 0x0A, 0x90, 0x01, 0xBD,
-0xE0, 0x44, 0x04, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xFD, 0x58, 0xE0, 0x30, 0xE0, 0x08,
-0x90, 0x01, 0xB8, 0xE0, 0x04, 0xF0, 0x80, 0xF1, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5,
-0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x50, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4,
-0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x51, 0xF0, 0xEF, 0x75,
-0xF0, 0x08, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x52,
-0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
-0x90, 0xFD, 0x53, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x54, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x05, 0xF5, 0x82,
-0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x55, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24,
-0x06, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x56, 0xF0, 0xEF, 0x75, 0xF0,
-0x08, 0xA4, 0x24, 0x07, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x57, 0xF0,
-0xA3, 0x74, 0x01, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0xFE, 0x10, 0x60, 0x05, 0xE0, 0x44, 0x01,
-0xF0, 0x22, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93,
-0x87, 0x12, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x15, 0xE0, 0x54,
-0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF,
-0x54, 0x04, 0xFE, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x10, 0xFF, 0xE0,
-0x54, 0xEF, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x15, 0xE0, 0x54,
-0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFC,
-0x54, 0x80, 0xFF, 0x90, 0x93, 0x15, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
-0x0F, 0xFD, 0x54, 0x01, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xED, 0x54, 0x02,
-0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFD, 0x54, 0x04, 0xFF,
-0x90, 0x93, 0x18, 0xE0, 0x54, 0xFB, 0x4F, 0xF0, 0xED, 0x54, 0x10, 0xFF, 0xE0, 0x54, 0xEF, 0x4F,
-0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x18, 0xE0, 0x54,
-0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12,
-0x1F, 0x0F, 0x54, 0x80, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x00, 0x04,
-0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF,
-0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54,
-0x80, 0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x10, 0xFF, 0xE0, 0x54,
-0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x19,
-0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54, 0xF7, 0x4F, 0xF0, 0xEC, 0x20,
-0xE0, 0x02, 0x81, 0xB1, 0x90, 0x05, 0x54, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x25, 0xF0, 0x90, 0x93,
-0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1C, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00,
-0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x16, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93,
-0x17, 0xF0, 0x80, 0x4E, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F,
-0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03, 0x90, 0x93, 0x16, 0x50, 0x05, 0x74,
-0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x93, 0x16, 0x74, 0x2A, 0xF0, 0x90, 0x00,
-0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03, 0x90, 0x93,
-0x17, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x93, 0x17, 0x74,
-0x2A, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x3D, 0x90, 0x93,
-0x16, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x1E, 0xF0, 0xE0, 0xC3, 0x13, 0xA3, 0xF0, 0x90,
-0x93, 0x17, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x20, 0xF0, 0x90, 0x93, 0x16, 0xE0, 0xC3,
-0x13, 0x90, 0x93, 0x21, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x22, 0xF0, 0x90,
-0x01, 0x3E, 0x74, 0x08, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0xAD, 0xE4, 0x90, 0x93, 0x11, 0xF0,
-0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xC4, 0x13, 0x13, 0x54,
-0x03, 0x20, 0xE0, 0x14, 0x12, 0x1E, 0xF6, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x04, 0x7F,
-0x01, 0x80, 0x02, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30,
-0xE0, 0x18, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x03, 0x75, 0x64, 0x04,
-0x90, 0x05, 0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x11, 0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0,
-0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x27, 0x74, 0x01, 0xF0, 0x80, 0x2B, 0x90,
-0x93, 0x1D, 0xE0, 0xB4, 0x04, 0x08, 0x90, 0x93, 0x27, 0x74, 0x04, 0xF0, 0x80, 0x1C, 0x90, 0x93,
-0x1D, 0xE0, 0xB4, 0x06, 0x08, 0x90, 0x93, 0x27, 0x74, 0x02, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0x1D,
-0xE0, 0xB4, 0x07, 0x06, 0x90, 0x93, 0x27, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x80,
-0x64, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F,
-0x90, 0x93, 0x83, 0x30, 0xE0, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x80, 0x07, 0x12,
-0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0xB1, 0x4D, 0x90, 0x00, 0x40, 0x74, 0x20, 0xF0, 0x90, 0x93,
-0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x90,
-0x07, 0x78, 0x30, 0xE0, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0x7B, 0x01, 0x7A,
-0x93, 0x79, 0x83, 0x12, 0x55, 0x67, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x05, 0x00, 0x74, 0x1C,
-0xF0, 0xA3, 0x74, 0x43, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0x90, 0x93, 0x26,
-0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x09, 0x90, 0x93,
-0x04, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x0C, 0x7F, 0x01, 0x12, 0x55, 0xB2, 0x90, 0x93, 0x04, 0xE0,
-0x54, 0xFD, 0xF0, 0x7F, 0x03, 0x12, 0x5E, 0xE6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x15,
-0xE0, 0x54, 0xFE, 0xF0, 0xA3, 0x74, 0x0B, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x93, 0x26,
-0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54,
-0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x93,
-0x18, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54, 0xEF,
-0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0xA3, 0xE0, 0x54,
-0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x93, 0x28, 0x74, 0x02, 0xF0,
-0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE4,
-0xA3, 0xF0, 0x90, 0x93, 0x25, 0xF0, 0x90, 0x93, 0x1C, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x93,
-0x23, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x29, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x1C, 0xE0, 0x54, 0xFD,
-0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xFB, 0xF0,
-0xE0, 0x54, 0xF7, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xE1, 0xF0, 0x22,
-0x90, 0x93, 0x04, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0x54, 0xFD, 0xF0, 0x54, 0xF7, 0xF0,
-0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0x12, 0x1F, 0xD5, 0x20, 0x08, 0x30, 0x70, 0x90, 0x93, 0x0B,
-0x12, 0x1F, 0xD5, 0xC0, 0x08, 0x30, 0x70, 0xE4, 0x90, 0x93, 0x11, 0xF0, 0xA3, 0xF0, 0x43, 0xE8,
-0x04, 0x90, 0xFD, 0x68, 0x74, 0x02, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x07,
-0x83, 0xE4, 0xF0, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x04, 0x64, 0xE4, 0xF0, 0x90, 0x00,
-0x40, 0x74, 0x20, 0xF0, 0xB1, 0x4D, 0x90, 0x93, 0x2C, 0x74, 0x01, 0xF0, 0x7D, 0x04, 0x7F, 0x02,
-0x02, 0x3A, 0xAD, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90,
-0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x24, 0x02, 0x73, 0x62, 0x12, 0x1E, 0xF6, 0xFF,
-0x54, 0x01, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0,
-0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0x54,
-0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54, 0xF7, 0x4F, 0xF0, 0x90, 0x00, 0x01, 0x12,
-0x1F, 0x0F, 0x90, 0x93, 0x1B, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86,
-0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x03, 0x7F, 0x26, 0x02, 0x73, 0x62,
-0x12, 0x1E, 0xF6, 0x90, 0x93, 0xB0, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
-0x93, 0x8A, 0x12, 0x43, 0xC8, 0xE4, 0xFE, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x2F, 0x90, 0xFD,
-0x50, 0xEF, 0xF0, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x1E, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8, 0x8E,
-0x82, 0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x51, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD,
-0xF5, 0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDC, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0xAE, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
-0x93, 0xAF, 0xF0, 0x22, 0xE4, 0x90, 0x94, 0x46, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xEB, 0xE0, 0x54,
-0xC0, 0x60, 0x43, 0xC3, 0x90, 0x94, 0x47, 0xE0, 0x94, 0x88, 0x90, 0x94, 0x46, 0xE0, 0x94, 0x13,
-0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x04, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x94, 0x46, 0xE4,
-0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x94,
-0x47, 0xE0, 0x94, 0x64, 0x90, 0x94, 0x46, 0xE0, 0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC7, 0xE0,
-0x30, 0xE2, 0xB8, 0x7F, 0x00, 0x22, 0x7F, 0x01, 0x22, 0x90, 0x93, 0xE2, 0x12, 0x1F, 0xC9, 0x90,
-0x93, 0xE6, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x7F, 0x1F, 0xFE, 0xFD, 0xFC, 0x90,
-0x93, 0xE6, 0x12, 0x43, 0x90, 0xD3, 0x12, 0x43, 0x73, 0x50, 0x41, 0x90, 0x93, 0xE6, 0x12, 0x43,
-0x84, 0xA9, 0x07, 0x90, 0x93, 0xE2, 0x12, 0x43, 0x84, 0xA8, 0x01, 0x12, 0x1F, 0xA3, 0xEF, 0x54,
-0x01, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0x7B, 0x01, 0xFA, 0xF9, 0xF8, 0xC3, 0x12, 0x43, 0x73, 0x60,
-0x1B, 0x90, 0x93, 0xE6, 0x12, 0x43, 0x84, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D,
-0xFD, 0xE4, 0x3C, 0xFC, 0x90, 0x93, 0xE6, 0x12, 0x1F, 0xC9, 0x80, 0xAD, 0x90, 0x93, 0xE6, 0x02,
-0x43, 0x84, 0x90, 0x93, 0xB4, 0x12, 0x1F, 0xC9, 0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, 0x93,
-0xB8, 0x12, 0x43, 0x90, 0xC3, 0x12, 0x43, 0x73, 0x90, 0x93, 0xB4, 0x60, 0x68, 0x12, 0x43, 0x84,
-0x12, 0x2C, 0x6E, 0x90, 0x93, 0xC0, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB8, 0x12, 0x43, 0x84, 0x12,
-0x97, 0x89, 0x90, 0x93, 0xC4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB8, 0x12, 0x43, 0x84, 0x12, 0x43,
-0x66, 0x90, 0x93, 0xC0, 0x12, 0x43, 0x90, 0x12, 0x43, 0x4C, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06,
-0xC0, 0x07, 0x90, 0x93, 0xC4, 0x12, 0x43, 0x84, 0xA9, 0x07, 0x90, 0x93, 0xBC, 0x12, 0x43, 0x84,
-0xA8, 0x01, 0x12, 0x1F, 0xB6, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0x59,
-0x90, 0x93, 0xC8, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB4, 0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07,
-0x90, 0x93, 0xC8, 0x80, 0x0A, 0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0xBC, 0x12,
-0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0xD0, 0x07, 0xD0, 0x06, 0x02, 0x34, 0x30, 0xD3,
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xEA, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00,
-0x90, 0x93, 0xEE, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x02,
-0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x4A, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78,
-0x74, 0x03, 0xF0, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x14, 0x12, 0x51, 0xBB, 0xBF, 0x01, 0x0B, 0x90,
-0x93, 0x15, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03, 0x12, 0x4F, 0xB8, 0x90, 0x93, 0x2D,
-0xE0, 0x20, 0xE0, 0x24, 0x90, 0x93, 0x47, 0xE0, 0x60, 0x1E, 0x7F, 0x01, 0x12, 0x50, 0xEB, 0x90,
-0x93, 0x5B, 0xE0, 0x60, 0x13, 0x90, 0x93, 0xEE, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x7B,
-0x01, 0x7A, 0x93, 0x79, 0xEE, 0x12, 0x55, 0x67, 0x12, 0x54, 0x4B, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x4E, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50,
-0x47, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF,
-0x90, 0x00, 0x46, 0xE0, 0x5F, 0xF0, 0x12, 0x54, 0x52, 0x90, 0x94, 0x4E, 0xE0, 0xFD, 0x74, 0x01,
-0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90,
-0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7,
-0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4C, 0x90, 0x94, 0x4E, 0xE0, 0x24, 0xF8, 0xF0, 0xE0,
-0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00,
-0x62, 0xE0, 0x5F, 0xF0, 0x12, 0x54, 0x52, 0x90, 0x94, 0x4E, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00,
-0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x60,
-0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE,
-0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x12,
-0x1E, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x94, 0x3E, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xE0, 0x30, 0xE0,
-0x03, 0x12, 0x44, 0xFE, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x30,
-0xE0, 0x0A, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x94, 0x3F, 0xF0, 0x22, 0x90, 0x93, 0x6C,
-0xE0, 0x54, 0xF0, 0x44, 0x0A, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90, 0x93, 0x6E, 0xF0, 0x90, 0xFD,
-0x62, 0xE0, 0x90, 0x93, 0x6F, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93, 0x70, 0xF0, 0x90, 0xFD,
-0x64, 0xE0, 0x90, 0x93, 0x71, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0x72, 0xF0, 0x90, 0xFD,
-0x60, 0xE0, 0x90, 0x93, 0x6C, 0x30, 0xE6, 0x08, 0xE0, 0x54, 0x0F, 0x44, 0x50, 0xF0, 0x80, 0x16,
-0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93, 0x73, 0xF0, 0x90, 0xFD,
-0x67, 0xE0, 0x90, 0x93, 0x74, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12,
-0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x66, 0x89, 0xAD, 0x07, 0x90, 0x93, 0xFA, 0xE0, 0x54,
-0xF0, 0x44, 0x0C, 0xF0, 0x54, 0x0F, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0xFC, 0xF0, 0x90,
-0xFD, 0x63, 0xE0, 0x90, 0x93, 0xFD, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0xFE, 0xF0, 0x90,
-0xFD, 0x65, 0xE0, 0x90, 0x93, 0xFF, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x94, 0x00, 0xF0, 0x90,
-0xFD, 0x67, 0xE0, 0x90, 0x94, 0x01, 0xF0, 0xED, 0xB4, 0x02, 0x0B, 0x90, 0x93, 0xFA, 0xE0, 0x54,
-0x0F, 0x44, 0x20, 0xF0, 0x80, 0x3C, 0xED, 0xB4, 0x04, 0x0B, 0x90, 0x93, 0xFA, 0xE0, 0x54, 0x0F,
-0x44, 0x60, 0xF0, 0x80, 0x2D, 0xED, 0xF4, 0x70, 0x29, 0x90, 0x93, 0xFA, 0xE0, 0x54, 0x0F, 0x44,
-0x60, 0xF0, 0x90, 0x93, 0x2C, 0xE0, 0x60, 0x08, 0x90, 0x93, 0xFC, 0x74, 0x01, 0xF0, 0x80, 0x05,
-0xE4, 0x90, 0x93, 0xFC, 0xF0, 0xE4, 0x90, 0x93, 0xFD, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xFC, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93,
-0x79, 0xFA, 0x02, 0x66, 0x89, 0xAD, 0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x0E, 0xF0,
-0x54, 0x0F, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6F, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90,
-0x93, 0x70, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0x71, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90,
-0x93, 0x72, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93, 0x73, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90,
-0x93, 0x74, 0xF0, 0xED, 0xB4, 0x01, 0x11, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0x0F, 0x44, 0x20, 0xF0,
-0x90, 0x93, 0x6E, 0x74, 0x01, 0xF0, 0x80, 0x13, 0xED, 0xB4, 0x02, 0x0F, 0x90, 0x93, 0x6C, 0xE0,
-0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0x93, 0x6E, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x6C, 0xE0, 0xFF,
-0xC4, 0x54, 0x0F, 0x60, 0x13, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43,
-0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x12, 0x66, 0x89, 0x22, 0x90, 0x93, 0x47, 0xE0, 0x60, 0x27, 0x90,
-0x93, 0x4A, 0xE0, 0x70, 0x21, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90,
-0x07, 0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x93, 0x44, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74,
-0x0D, 0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03,
-0x20, 0xE0, 0x02, 0xA1, 0x4F, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x01, 0x70, 0x39, 0x90, 0x06, 0x92,
-0xE0, 0x20, 0xE2, 0x06, 0x90, 0x94, 0x4B, 0xE0, 0x60, 0x21, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0,
-0x90, 0x93, 0x29, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x4B, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFF,
-0x90, 0x93, 0x29, 0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02, 0xA1, 0x3A, 0xE4, 0x90, 0x93, 0x1D, 0xF0,
-0x90, 0x93, 0x27, 0x04, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x04, 0x70, 0x3A, 0x90, 0x06,
-0x92, 0xE0, 0x20, 0xE2, 0x06, 0x90, 0x94, 0x4B, 0xE0, 0x60, 0x21, 0x90, 0x06, 0x92, 0x74, 0x04,
-0xF0, 0x90, 0x93, 0x29, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x4B, 0xF0, 0x90, 0x93, 0x20, 0xE0,
-0xFF, 0x90, 0x93, 0x29, 0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02, 0xA1, 0x3A, 0xE4, 0x90, 0x93, 0x1D,
-0xF0, 0x90, 0x93, 0x27, 0x74, 0x04, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x06, 0x60, 0x02,
-0x81, 0xFE, 0x90, 0x93, 0x2A, 0xE0, 0xB4, 0x04, 0x0F, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F,
-0x90, 0x93, 0x27, 0x30, 0xE0, 0x4E, 0xA1, 0x4C, 0x90, 0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54, 0x3F,
-0x30, 0xE0, 0x45, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54,
-0x0F, 0x30, 0xE0, 0x02, 0xA1, 0x0D, 0x90, 0x93, 0x2A, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0x2F,
-0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x21, 0xE0, 0x2F,
-0xFF, 0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x90, 0x93, 0x27,
-0x40, 0x02, 0xA1, 0x4C, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01,
-0x12, 0x4E, 0x27, 0x90, 0x93, 0x2A, 0xE0, 0x04, 0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB,
-0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93,
-0x2A, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03,
-0x12, 0x1F, 0x3C, 0x90, 0x93, 0x21, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32,
-0xEE, 0x64, 0x80, 0x94, 0x80, 0x40, 0x58, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x93,
-0x1D, 0xE0, 0x64, 0x07, 0x70, 0x49, 0x90, 0x93, 0x2A, 0xE0, 0xB4, 0x04, 0x05, 0x90, 0x93, 0x27,
-0x80, 0x3A, 0x90, 0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0C, 0xE0, 0x54, 0xFB,
-0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x27, 0x80, 0x23, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F,
-0x01, 0x12, 0x4E, 0x27, 0x90, 0x93, 0x2A, 0xE0, 0x04, 0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03,
-0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x22,
-0xEF, 0x64, 0x01, 0x70, 0x3C, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0,
-0x07, 0x90, 0x07, 0x78, 0x74, 0x0D, 0xF0, 0x22, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30,
-0xE0, 0x0D, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x24, 0x80, 0x0E, 0x90,
-0x93, 0x18, 0xE0, 0xC3, 0x13, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x02, 0x80, 0x14, 0x74, 0x09, 0xF0,
-0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x07, 0x78, 0x30, 0xE0,
-0x04, 0x74, 0x03, 0xF0, 0x22, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x93,
-0x15, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x4B, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03,
-0x30, 0xE0, 0x2A, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x21, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F,
-0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x1D, 0x74,
-0x01, 0xF0, 0xE4, 0x90, 0x93, 0x29, 0xF0, 0x90, 0x93, 0x27, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48,
-0x90, 0x93, 0x5D, 0xE0, 0xFF, 0x90, 0x93, 0x16, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD,
-0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0x74, 0x01, 0xF0, 0x90, 0x01, 0x63,
-0x74, 0x05, 0xF0, 0x90, 0x93, 0x26, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x08, 0x90,
-0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x15, 0xE0,
-0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F,
-0x30, 0xE0, 0x03, 0x12, 0x51, 0x48, 0xE4, 0x90, 0x94, 0x4B, 0xF0, 0x22, 0x85, 0xD2,
-};
-
-
-
-u8 Rtl8723UFwUMCBCutImgArrayWithBT[Rtl8723UUMCBCutImgArrayWithBTLength] = {
-0x02, 0x23, 0x02, 0x00, 0x21, 0x00, 0x00, 0x00, 0x03, 0x28, 0x14, 0x04, 0x16, 0x5E, 0x01, 0x00,
-0x73, 0x22, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x02, 0x4A, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x61, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x67, 0xDB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x68, 0x82, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x6B, 0xB8, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03,
-0x00, 0x04, 0x06, 0x05, 0x04, 0x02, 0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09,
-0x08, 0x06, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08,
-0x0A, 0x09, 0x08, 0x00, 0x00, 0x08, 0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10,
-0x00, 0x18, 0x22, 0x21, 0x20, 0x18, 0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21,
-0x20, 0x08, 0x00, 0x20, 0x22, 0x21, 0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20,
-0x22, 0x20, 0x18, 0x08, 0x00, 0x20, 0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00,
-0x00, 0x30, 0x31, 0x2F, 0x10, 0x10, 0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28,
-0x10, 0x00, 0x00, 0x30, 0x31, 0x20, 0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30,
-0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04,
-0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05,
-0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13,
-0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A, 0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F,
-0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24,
-0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78,
-0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40, 0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40,
-0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8, 0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02,
-0x00, 0x04, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48,
-0x00, 0x60, 0x00, 0x6C, 0x00, 0x28, 0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8,
-0x00, 0xF0, 0x01, 0x18, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58,
-0x03, 0x20, 0x03, 0xE8, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07,
-0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04,
-0x05, 0x06, 0x07, 0x08, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18,
-0x10, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0xBB, 0x01, 0x0F, 0xF8, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x28,
-0xF0, 0x22, 0x50, 0x09, 0xC5, 0x82, 0x29, 0xF8, 0xE5, 0x82, 0x26, 0xF6, 0x22, 0xBB, 0xFE, 0x09,
-0xC5, 0x82, 0x29, 0xF8, 0xE2, 0x25, 0x82, 0xF2, 0x22, 0xF8, 0xEA, 0x25, 0x83, 0xF5, 0x83, 0xE9,
-0x93, 0x28, 0x22, 0xBB, 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22,
-0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8, 0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83,
-0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22, 0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE,
-0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0,
-0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A,
-0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7,
-0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3, 0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83,
-0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01, 0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82,
-0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82,
-0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22, 0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0,
-0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A, 0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22,
-0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7,
-0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB, 0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8,
-0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5,
-0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB,
-0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x5B, 0xFF, 0xEE,
-0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED,
-0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, 0xCF, 0xF4, 0xCF, 0xCE, 0xF4, 0xCE, 0xCD, 0xF4, 0xCD, 0xCC,
-0xF4, 0xCC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8,
-0x9C, 0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22,
-0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5,
-0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9,
-0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82, 0x15, 0x82, 0x70,
-0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0,
-0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3,
-0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68,
-0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12,
-0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83,
-0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60, 0xE9, 0xA3, 0xA3,
-0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0xFB, 0x90, 0x93, 0x63, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00,
-0xE5, 0x65, 0x70, 0x03, 0x02, 0x44, 0xF0, 0xE5, 0x62, 0x64, 0x01, 0x60, 0x03, 0x02, 0x44, 0xF0,
-0x0B, 0x90, 0x93, 0x40, 0xF0, 0x04, 0x70, 0x03, 0x02, 0x44, 0xF0, 0x43, 0x66, 0x10, 0x90, 0x93,
-0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A, 0xE0, 0x54, 0x0F, 0xFF, 0x90,
-0x93, 0x58, 0xE0, 0xD3, 0x9F, 0x50, 0x0D, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0xE0, 0xF5, 0x49,
-0xE4, 0x1B, 0x80, 0x56, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93,
-0x58, 0xE0, 0xC3, 0x9F, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x37, 0xE0, 0x04, 0x2F, 0xF5,
-0x49, 0xE4, 0xFB, 0x80, 0x35, 0x90, 0x93, 0x58, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x13,
-0xE4, 0xF5, 0x48, 0x90, 0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x2F, 0xF5, 0x49, 0xE4,
-0xFB, 0x80, 0x17, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x58, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF,
-0x90, 0x93, 0x4F, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12,
-0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
-0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x12, 0x9B, 0x40, 0x90, 0x05, 0x22, 0xE4, 0xF0,
-0x22, 0xE4, 0x90, 0x93, 0x5A, 0xF0, 0x90, 0x93, 0x41, 0xF0, 0xF5, 0x66, 0x22, 0x22, 0xE4, 0xFF,
-0x02, 0x4E, 0x27, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0xE4, 0xFB, 0x90, 0x93, 0x5D, 0x12, 0x1F,
-0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x46, 0x78, 0xE5, 0x62, 0x64, 0x01,
-0x60, 0x03, 0x02, 0x46, 0x78, 0xE5, 0x65, 0x14, 0x60, 0x2B, 0x24, 0xFD, 0x60, 0x27, 0x24, 0x02,
-0x24, 0xFB, 0x50, 0x02, 0x80, 0x21, 0x90, 0x93, 0x40, 0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3,
-0xE0, 0x60, 0x14, 0x90, 0x93, 0x40, 0xE0, 0x70, 0x08, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x93, 0x40,
-0xF0, 0x7B, 0x01, 0x80, 0x02, 0x7B, 0x01, 0xEB, 0x70, 0x03, 0x02, 0x46, 0x78, 0x43, 0x66, 0x10,
-0x90, 0x93, 0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x44, 0xE0, 0x54, 0x0F,
-0xFF, 0x90, 0x93, 0x58, 0xE0, 0xC3, 0x9F, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0x80,
-0x2D, 0x90, 0x93, 0x36, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33,
-0xFE, 0x90, 0x93, 0x58, 0xE0, 0xC3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x08,
-0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3A, 0x80, 0x06, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0xE0, 0x80,
-0x2D, 0x90, 0x93, 0x58, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4, 0xF5, 0x48, 0x90,
-0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x93,
-0x58, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x04, 0x2F, 0xF5, 0x49,
-0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0,
-0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69,
-0xE5, 0x63, 0x64, 0x0C, 0x60, 0x6F, 0x90, 0x93, 0x13, 0xE0, 0xFF, 0x90, 0x93, 0x58, 0xE0, 0xD3,
-0x9F, 0x40, 0x08, 0x90, 0x93, 0x14, 0xE0, 0x04, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x93, 0x14, 0xF0,
-0x90, 0x93, 0x58, 0xE0, 0x90, 0x93, 0x13, 0xF0, 0xA3, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x46, 0xE4,
-0xF0, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8,
-0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x70, 0x21, 0x12, 0x4A, 0x65, 0xE4, 0xF5, 0x48, 0x90, 0x93,
-0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
-0x5B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x55, 0x80, 0x09, 0x43, 0x66, 0x01, 0x12, 0x51, 0x48, 0x90,
-0x93, 0x51, 0x74, 0x01, 0xF0, 0x12, 0x9B, 0x40, 0x22, 0xE4, 0x90, 0x93, 0x63, 0xF0, 0xE5, 0x65,
-0x70, 0x03, 0x02, 0x47, 0x32, 0x90, 0x93, 0x5A, 0xE0, 0x60, 0x11, 0xE4, 0xF0, 0x53, 0x66, 0xFD,
-0xE5, 0x66, 0x54, 0x07, 0x60, 0x03, 0x02, 0x47, 0x32, 0x02, 0x47, 0x2F, 0x90, 0x93, 0x41, 0xE0,
-0x04, 0xF0, 0x53, 0x66, 0xEF, 0x90, 0x93, 0x58, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x36, 0xE0, 0xC4,
-0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A, 0x90, 0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x36,
-0xE0, 0x54, 0x0F, 0xB5, 0x07, 0x0A, 0x90, 0x93, 0x39, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x80, 0x22,
-0x90, 0x93, 0x36, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE,
-0x90, 0x93, 0x58, 0xE0, 0xB5, 0x07, 0x0B, 0xE4, 0xB5, 0x06, 0x07, 0xF0, 0x90, 0x05, 0x58, 0x74,
-0x03, 0xF0, 0x90, 0x93, 0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x06, 0x90,
-0x93, 0x63, 0x74, 0x5A, 0xF0, 0x90, 0x93, 0x63, 0xE0, 0xFF, 0x90, 0x93, 0x48, 0xE0, 0x2F, 0xFF,
-0xE4, 0x33, 0xFE, 0x90, 0x93, 0x41, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
-0x40, 0x0D, 0xE5, 0x62, 0xB4, 0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12,
-0x52, 0x17, 0x22, 0xE4, 0xF5, 0x66, 0xF5, 0x65, 0x75, 0x64, 0x0C, 0x75, 0x63, 0x0C, 0x90, 0x93,
-0x59, 0xF0, 0x90, 0x93, 0x55, 0xF0, 0x90, 0x93, 0x52, 0xF0, 0x90, 0x93, 0x57, 0x04, 0xF0, 0x90,
-0x93, 0x40, 0xF0, 0xE4, 0x90, 0x93, 0x5A, 0xF0, 0x90, 0x93, 0x42, 0xF0, 0x90, 0x93, 0x4F, 0x74,
-0x05, 0xF0, 0xE4, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x93, 0x4D, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90,
-0x93, 0x48, 0xF0, 0x90, 0x93, 0x4B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x45, 0x74, 0x14, 0xF0, 0x90,
-0x93, 0x50, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x43, 0xF0, 0x90, 0x93, 0x3C, 0xF0, 0x90, 0x93,
-0xB2, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x90, 0x93, 0x5C, 0xF0, 0x90, 0x93, 0x58, 0xF0, 0x90, 0x93,
-0x3D, 0xF0, 0x90, 0x93, 0x56, 0xF0, 0x90, 0x93, 0x47, 0xF0, 0x90, 0x93, 0x44, 0xF0, 0x90, 0x93,
-0x51, 0xF0, 0x90, 0x93, 0x4A, 0xF0, 0x90, 0x93, 0x46, 0xF0, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x93,
-0x49, 0xF0, 0x90, 0x93, 0xB1, 0xE0, 0xB4, 0x02, 0x05, 0x90, 0x00, 0x93, 0xE4, 0xF0, 0x90, 0x93,
-0x36, 0xE0, 0x54, 0x7F, 0xF0, 0xE0, 0x54, 0xF0, 0xF0, 0xE0, 0x54, 0x8F, 0xF0, 0xE4, 0xA3, 0xF0,
-0xA3, 0xF0, 0x90, 0x93, 0x3A, 0xF0, 0x90, 0x93, 0x39, 0xF0, 0x22, 0xEF, 0x60, 0x5F, 0xAF, 0x05,
-0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x93,
-0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07,
-0x30, 0xE0, 0x6B, 0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x13, 0xE0, 0x25, 0xE0, 0x25,
-0xE0, 0xFF, 0x74, 0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0x74,
-0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x74, 0x7F, 0xF0, 0x22, 0xAF, 0x05, 0x74,
-0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0x93, 0x19,
-0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xBF, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30,
-0xE0, 0x0C, 0x74, 0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x22, 0x90,
-0x93, 0x15, 0xE0, 0x30, 0xE0, 0x22, 0x90, 0x93, 0x26, 0xE0, 0x60, 0x09, 0x90, 0x01, 0xB9, 0x74,
-0x40, 0xF0, 0x02, 0x49, 0x29, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x02, 0x80, 0x2F,
-0x90, 0x93, 0x4C, 0xE0, 0x60, 0x67, 0x80, 0x5D, 0x12, 0x51, 0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08,
-0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x61, 0xE5, 0x66, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01,
-0xB9, 0x74, 0x02, 0xF0, 0x80, 0x53, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x08, 0x90,
-0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x42, 0xE5, 0x66, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB9, 0x74,
-0x08, 0xF0, 0x80, 0x35, 0xE5, 0x66, 0x30, 0xE4, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80,
-0x28, 0x90, 0x93, 0x42, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x1A, 0x90,
-0x93, 0x4C, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x80, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9,
-0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F,
-0x00, 0x22, 0xE4, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x93, 0x5D, 0xF0, 0xE0,
-0x54, 0xC0, 0x70, 0x18, 0x90, 0x93, 0x51, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0x53, 0x66, 0xFD,
-0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x14, 0x12, 0x52, 0x17, 0x80, 0x0F, 0x90, 0x93, 0x3D, 0xE0,
-0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x90, 0x93, 0x5D, 0xE0, 0x30,
-0xE6, 0x1B, 0x43, 0x66, 0x01, 0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64,
-0x0C, 0x60, 0x13, 0x12, 0x51, 0x48, 0x80, 0x0E, 0x12, 0x50, 0x77, 0x80, 0x09, 0x90, 0x93, 0x51,
-0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0xE4, 0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x5D, 0xE0, 0x30,
-0xE7, 0x2A, 0x43, 0x66, 0x02, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x4B, 0xE0, 0xF5, 0x49, 0xE4, 0xFB,
-0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90, 0x93,
-0x5A, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x53, 0x66, 0xFD, 0x22,
-0x8E, 0x25, 0x8F, 0x26, 0xAD, 0x26, 0xAC, 0x25, 0xAF, 0x24, 0x12, 0x47, 0xEB, 0xAF, 0x26, 0xAE,
-0x25, 0x90, 0x04, 0x80, 0xE0, 0x54, 0x0F, 0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x01, 0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, 0xAC, 0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0x44, 0xFA, 0xF0, 0x74, 0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
-0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
-0xE0, 0x44, 0x0F, 0xF0, 0x90, 0x04, 0x53, 0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51,
-0x74, 0xFF, 0xF0, 0x90, 0x04, 0x50, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xED, 0xF0, 0x22, 0x7D, 0x01, 0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x8F, 0x68, 0x8D, 0x69, 0xE5, 0x68, 0x54, 0x0F, 0xFF, 0xE5, 0x63, 0x54, 0x0F, 0x6F, 0x60, 0x72,
-0xE5, 0x68, 0x30, 0xE2, 0x30, 0xE5, 0x63, 0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x51, 0xA1, 0xE5,
-0x63, 0x30, 0xE3, 0x10, 0xE5, 0x68, 0x20, 0xE3, 0x0B, 0x12, 0x4D, 0x55, 0xEF, 0x60, 0x53, 0x12,
-0x51, 0xD4, 0x80, 0x4E, 0xE5, 0x63, 0x20, 0xE3, 0x49, 0xE5, 0x68, 0x30, 0xE3, 0x44, 0xAF, 0x69,
-0x12, 0x51, 0x86, 0x80, 0x3D, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x68, 0x20,
-0xE3, 0x09, 0x12, 0x4D, 0x55, 0xEF, 0x60, 0x2A, 0x12, 0x51, 0xD4, 0xE5, 0x63, 0x54, 0x0F, 0xFF,
-0xBF, 0x04, 0x0E, 0xE5, 0x68, 0x20, 0xE2, 0x09, 0x12, 0x48, 0x8F, 0xEF, 0x60, 0x14, 0x12, 0x51,
-0x1F, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x02, 0x09, 0x12, 0x4B, 0xF7, 0xEF, 0x60, 0x03, 0x12,
-0x52, 0x04, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x02, 0x4B, 0x35, 0x02, 0x52, 0xF4, 0xE4, 0x93, 0xA3,
-0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4,
-0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8,
-0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04,
-0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x4F, 0x75, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF,
-0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54,
-0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4,
-0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8,
-0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0xEF, 0x64, 0x01, 0x70, 0x3E, 0x7D,
-0x78, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x22, 0x90, 0x01, 0x36,
-0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F,
-0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x4A, 0x65, 0x90, 0x06,
-0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36,
-0x74, 0x7B, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x3A, 0x93, 0x7D, 0x02, 0x7F,
-0x03, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x06, 0x04, 0xE0, 0x44,
-0x80, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, 0xF0, 0x12, 0x4F, 0x28, 0xE5, 0x62, 0x20, 0xE0,
-0x05, 0xE4, 0x90, 0x93, 0x42, 0xF0, 0x22, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x10, 0x12, 0x51,
-0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x5C, 0xE5, 0x14,
-0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x50, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94,
-0x01, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x3F, 0x90, 0x02, 0x87, 0xE0, 0x60,
-0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x31, 0x90, 0x01, 0xAF, 0xE0, 0x60, 0x02, 0x80,
-0x07, 0x90, 0x02, 0x86, 0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x1A,
-0x90, 0x93, 0x43, 0xE0, 0x70, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x0C, 0x90, 0x01,
-0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x02, 0xF0,
-0x7F, 0x00, 0x22, 0xE5, 0x62, 0x64, 0x01, 0x70, 0x6B, 0xE5, 0x65, 0x60, 0x67, 0xE5, 0x65, 0x64,
-0x02, 0x60, 0x06, 0xE5, 0x65, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x93, 0x40,
-0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x93, 0x57, 0xF0, 0x90, 0x93, 0x40, 0xE0, 0x70, 0x07, 0x90,
-0x93, 0x57, 0xE0, 0xFF, 0x80, 0x05, 0x90, 0x93, 0x40, 0xE0, 0xFF, 0x90, 0x93, 0x40, 0xEF, 0xF0,
-0x90, 0x93, 0x42, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x93, 0x58,
-0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
-0x02, 0xF0, 0x53, 0x66, 0xFD, 0x53, 0x66, 0xEF, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80,
-0x03, 0x12, 0x49, 0x32, 0x22, 0x90, 0x93, 0xB1, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x91, 0x80, 0x0C,
-0x90, 0x93, 0xB1, 0xE0, 0x70, 0x04, 0x7D, 0xD4, 0x80, 0x02, 0x7D, 0x40, 0x7F, 0x93, 0x12, 0x54,
-0x0A, 0x90, 0x00, 0x29, 0xE0, 0x54, 0x3F, 0xFD, 0x7F, 0x29, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x28,
-0xE0, 0x54, 0xFC, 0xFD, 0x7F, 0x28, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x08, 0xE0, 0x44, 0x10, 0xFD,
-0x7F, 0x08, 0x12, 0x54, 0x0A, 0x7F, 0x01, 0x12, 0x4E, 0x81, 0x90, 0x00, 0x00, 0xE0, 0x44, 0x20,
-0xFD, 0xE4, 0xFF, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x20, 0xE0, 0x54, 0xFE, 0xFD, 0x7F, 0x20, 0x12,
-0x54, 0x0A, 0x90, 0x00, 0x90, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x54, 0x0A, 0x7F, 0x14,
-0x7E, 0x00, 0x02, 0x3B, 0x09, 0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0, 0x13, 0x90, 0x93, 0x1A, 0xE0,
-0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x18, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x49, 0x12,
-0x51, 0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x39, 0x90,
-0x93, 0x55, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x2B, 0x90, 0x93, 0x52,
-0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x1D, 0xE5, 0x64, 0x54, 0x0F, 0xD3,
-0x94, 0x04, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4,
-0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x7F, 0x00,
-0x22, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xC8, 0x12, 0x44, 0xF1, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8,
-0x12, 0x1E, 0xF6, 0xF5, 0x65, 0x14, 0x60, 0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03,
-0x70, 0x44, 0x7F, 0x01, 0x80, 0x3D, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12,
-0x1F, 0x0F, 0xFD, 0xE4, 0xFF, 0x12, 0x50, 0x39, 0x80, 0x29, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8,
-0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x01, 0x12, 0x50, 0x39, 0x1F, 0x80, 0x14, 0x90,
-0x93, 0x8A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x02, 0x12, 0x50,
-0x39, 0xE4, 0xFF, 0x12, 0x4B, 0x7A, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x24,
-0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x90,
-0x04, 0x1D, 0xE0, 0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x27, 0x74, 0xFF, 0xF0, 0x12, 0x5E,
-0x42, 0xBF, 0x01, 0x0D, 0x90, 0x93, 0xAA, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x1F, 0x12, 0x49,
-0xD0, 0x90, 0x05, 0x22, 0xE5, 0x27, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0xAA, 0xE0, 0xFF, 0x7D, 0x01,
-0x12, 0x58, 0x1F, 0x12, 0x49, 0xD0, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0x8F, 0x6C, 0xE4, 0x90, 0x94, 0x44, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00,
-0x30, 0xE7, 0x02, 0x7F, 0x01, 0xEF, 0x65, 0x6C, 0x60, 0x3E, 0xC3, 0x90, 0x94, 0x45, 0xE0, 0x94,
-0x88, 0x90, 0x94, 0x44, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x80, 0xF0,
-0x22, 0x90, 0x94, 0x44, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00, 0x12,
-0x3B, 0x09, 0xD3, 0x90, 0x94, 0x45, 0xE0, 0x94, 0x32, 0x90, 0x94, 0x44, 0xE0, 0x94, 0x00, 0x40,
-0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE0, 0xB2, 0x22, 0x90, 0x00, 0x20, 0xE0, 0x44, 0x01, 0xFD,
-0x7F, 0x20, 0x12, 0x54, 0x0A, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x00, 0xE0,
-0x54, 0xDF, 0xFD, 0xE4, 0xFF, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x28, 0xE0, 0x44, 0x03, 0xFD, 0x7F,
-0x28, 0x12, 0x54, 0x0A, 0x90, 0x00, 0x08, 0xE0, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x54, 0x0A,
-0xE4, 0xFF, 0x12, 0x4E, 0x81, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x29, 0xE0,
-0x44, 0xC0, 0xFD, 0x7F, 0x29, 0x02, 0x54, 0x0A, 0xE4, 0xFF, 0x90, 0x00, 0x6A, 0xE0, 0x30, 0xE2,
-0x22, 0xE0, 0x30, 0xE0, 0x20, 0xE0, 0x30, 0xE1, 0x0D, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x02, 0x30,
-0xE3, 0x13, 0x7F, 0x03, 0x80, 0x0F, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x03, 0x30, 0xE3, 0x06, 0x7F,
-0x02, 0x80, 0x02, 0x7F, 0x03, 0xEF, 0xFD, 0xD3, 0x90, 0x93, 0x4E, 0xE0, 0x9D, 0x90, 0x93, 0x4D,
-0xE0, 0x94, 0x00, 0x50, 0x05, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0xA3, 0xE0,
-0x90, 0x05, 0x58, 0xF0, 0x22, 0x48, 0x93, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x48, 0x93, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x93, 0x9F, 0x00, 0x41,
-0x93, 0xAE, 0x00, 0x41, 0x93, 0x94, 0x00, 0x41, 0x94, 0x4C, 0x00, 0x41, 0x93, 0x13, 0x00, 0x41,
-0x93, 0x14, 0x00, 0x41, 0x92, 0x69, 0x00, 0x41, 0x92, 0x6A, 0x00, 0x41, 0x92, 0x68, 0x00, 0x41,
-0x94, 0x3D, 0x00, 0x41, 0x94, 0x4A, 0x00, 0x00, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
-0x93, 0x56, 0x74, 0x01, 0xF0, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x94, 0x31, 0x12,
-0x1F, 0xC9, 0x90, 0x94, 0x31, 0x12, 0x43, 0x84, 0xEC, 0x44, 0x02, 0xFC, 0x90, 0x94, 0x31, 0x12,
-0x1F, 0xC9, 0x90, 0x94, 0x31, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00,
-0x7E, 0x08, 0x12, 0x34, 0x30, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50,
-0x02, 0x80, 0x35, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x2E, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09,
-0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x12, 0x9B, 0x40, 0x90, 0x93, 0x59, 0xE0,
-0x60, 0x06, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x0D, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
-0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x22, 0xEF, 0x14, 0x60, 0x09, 0x14, 0x60, 0x16,
-0x24, 0x02, 0x70, 0x32, 0x80, 0x0A, 0x90, 0x93, 0x57, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x40, 0xF0,
-0xE4, 0x90, 0x93, 0x5C, 0xF0, 0x22, 0xED, 0x70, 0x0A, 0x90, 0x93, 0x50, 0xE0, 0x90, 0x93, 0x57,
-0xF0, 0x80, 0x05, 0x90, 0x93, 0x57, 0xED, 0xF0, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x93, 0x40, 0xF0,
-0x90, 0x93, 0x5C, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
-0x08, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C,
-0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02,
-0xF0, 0x90, 0x93, 0x52, 0x14, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x0C, 0x50, 0x03, 0x12,
-0x4A, 0x65, 0x22, 0x90, 0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00,
-0xFF, 0xEC, 0x3E, 0x90, 0x93, 0x3E, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x01, 0x04, 0xE0, 0x54, 0x0F,
-0xFF, 0x74, 0x40, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
-0xF9, 0x90, 0x93, 0x54, 0xF0, 0xEE, 0x90, 0x93, 0x53, 0xF0, 0x22, 0xEF, 0x70, 0x0B, 0x90, 0x93,
-0xB0, 0xE0, 0x90, 0x94, 0x35, 0x60, 0x0B, 0x80, 0x12, 0x90, 0x93, 0xB0, 0xE0, 0x90, 0x94, 0x35,
-0x60, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x02, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00,
-0x01, 0x10, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x35, 0x7F, 0x60, 0x7E, 0x08, 0x02, 0x55, 0x6B, 0x90,
-0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x5E, 0x42, 0xEF, 0x70,
-0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93, 0x12, 0x54,
-0x62, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x90, 0x93, 0x46, 0xE0, 0x70, 0x1A, 0x90, 0x04,
-0x1D, 0xE0, 0x70, 0x14, 0x90, 0x93, 0xA9, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x58, 0x1F, 0x8E, 0x6A,
-0x8F, 0x6B, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0x47, 0xE0, 0x60, 0x16, 0x90,
-0x93, 0x4A, 0xE0, 0x70, 0x10, 0x90, 0x93, 0x44, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74, 0x0D,
-0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF, 0xF0, 0xEF, 0x60, 0x0A,
-0xE5, 0x62, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x4E, 0x27, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x0C,
-0x22, 0x90, 0x94, 0x4D, 0xEF, 0xF0, 0x12, 0x98, 0x56, 0x90, 0x94, 0x4D, 0xE0, 0x60, 0x05, 0x90,
-0x05, 0x22, 0xE4, 0xF0, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4,
-0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60,
-0x02, 0x7F, 0x00, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x05,
-0x7F, 0x01, 0x12, 0x4E, 0x27, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0xE5, 0x64, 0x30, 0xE6,
-0x12, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0x90, 0x01, 0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0,
-0x53, 0x64, 0xBF, 0x22, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x01, 0x12, 0x4C, 0xE5, 0x12, 0x4E, 0xD9,
-0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x7D, 0x01, 0xAF, 0x64, 0x02, 0x4A, 0x69, 0x90, 0x02,
-0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12, 0x43,
-0xF7, 0x52, 0x49, 0x00, 0x40, 0x52, 0x71, 0x00, 0x80, 0x52, 0x9C, 0x01, 0x00, 0x52, 0xB0, 0x02,
-0x00, 0x52, 0xC8, 0x04, 0x00, 0x00, 0x00, 0x52, 0xE5, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE, 0xFF,
-0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06, 0xCE,
-0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x80,
-0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF, 0x2D,
-0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x07,
-0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04, 0xFE,
-0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80, 0x35,
-0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF, 0x2D,
-0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE, 0xFF,
-0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D, 0x00,
-0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x21, 0xF0,
-0xA3, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x75, 0xF0, 0xA3, 0xF0, 0xF1, 0x9F, 0x75, 0x8E, 0x02,
-0xB1, 0x34, 0xF1, 0xBF, 0x90, 0x93, 0xB1, 0xEF, 0xF0, 0xF1, 0xA7, 0x90, 0x93, 0xB3, 0xEF, 0xF0,
-0x12, 0x60, 0x3E, 0x90, 0x93, 0x95, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x14, 0xF5, 0x09,
-0xF5, 0x62, 0x90, 0x93, 0xB0, 0xF0, 0x90, 0x00, 0xCC, 0xE0, 0x54, 0xF7, 0xF0, 0x12, 0x88, 0x77,
-0x12, 0x47, 0x33, 0x12, 0x37, 0x1C, 0xF1, 0xB3, 0x71, 0xE1, 0x12, 0x60, 0x02, 0xF1, 0xD2, 0xF1,
-0x98, 0x12, 0x60, 0x20, 0x12, 0x44, 0xFD, 0x12, 0x60, 0xAC, 0xB1, 0x1C, 0x90, 0x93, 0x77, 0xE5,
-0xD9, 0xF0, 0xC2, 0xAF, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40, 0xF0, 0x91, 0x52, 0x75, 0xE8, 0x03,
-0x43, 0xA8, 0x85, 0x12, 0x96, 0x12, 0xD2, 0xAF, 0x51, 0xEA, 0x12, 0x60, 0x56, 0x90, 0x93, 0x75,
-0xE0, 0x64, 0x01, 0xF0, 0x24, 0xF4, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x52, 0xA3, 0xF0, 0xE5, 0x14,
-0x30, 0xE0, 0x09, 0xC2, 0xAF, 0x53, 0x14, 0xFE, 0xB1, 0x44, 0xD2, 0xAF, 0xE5, 0x14, 0x30, 0xE4,
-0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xEF, 0xD2, 0xAF, 0x12, 0x6F, 0xCE, 0xE5, 0x14, 0x30, 0xE6, 0x0A,
-0xC2, 0xAF, 0x53, 0x14, 0xBF, 0xD2, 0xAF, 0x12, 0x80, 0x74, 0xE5, 0x14, 0x30, 0xE7, 0x09, 0xC2,
-0xAF, 0x53, 0x14, 0x7F, 0xD2, 0xAF, 0xB1, 0xD2, 0xC2, 0xAF, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0xBF,
-0x01, 0x0D, 0x90, 0x93, 0x43, 0x74, 0x01, 0xF0, 0x51, 0x17, 0xE4, 0x90, 0x93, 0x43, 0xF0, 0xD2,
-0xAF, 0x90, 0x01, 0xBD, 0xE5, 0x63, 0xF0, 0x90, 0x93, 0x59, 0xE0, 0x90, 0x01, 0xBC, 0xF0, 0x80,
-0x8C, 0x90, 0x01, 0x3C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3,
-0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x54, 0x91, 0x0A, 0x7D, 0xFF, 0x7F, 0x55, 0x91, 0x0A,
-0x7D, 0xFF, 0x7F, 0x56, 0x91, 0x0A, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
-0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xED, 0xF0, 0x91, 0x52, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
-0x01, 0x30, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0,
-0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x91, 0x0A, 0xE4, 0xFD, 0x7F, 0x51, 0x91, 0x0A, 0xE4,
-0xFD, 0x7F, 0x52, 0x91, 0x0A, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0x90, 0x00, 0x02, 0xE0, 0x44,
-0x01, 0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xF2, 0x12, 0x1F, 0xD5, 0x00,
-0x00, 0x00, 0x00, 0x90, 0x93, 0xF6, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x02,
-0xE0, 0x54, 0xFE, 0xF0, 0x91, 0x52, 0x91, 0x4B, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x90,
-0x01, 0x00, 0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20,
-0xF0, 0x90, 0x93, 0x4A, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x3D,
-0xE0, 0x60, 0x34, 0xE4, 0x90, 0x93, 0x56, 0xF0, 0xFF, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93,
-0xF2, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF2, 0x12, 0x43, 0x84, 0xEC, 0x54, 0xFD, 0xFC, 0x90, 0x93,
-0xF2, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF2, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9,
-0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x47, 0xE0, 0x60, 0x22, 0xE4, 0xFF, 0x11,
-0xEB, 0x90, 0x93, 0x5B, 0xE0, 0x60, 0x12, 0x90, 0x93, 0xF6, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03,
-0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xF6, 0xB1, 0x67, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90,
-0x93, 0x51, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x94, 0x3E, 0xE0,
-0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x94, 0x40, 0xF0, 0x90, 0x94, 0x3E, 0xE0, 0x54, 0x7F, 0xF0, 0xA3,
-0x74, 0x0A, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0xAD, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD,
-0x7F, 0x80, 0x81, 0x0A, 0xE4, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x6B, 0x12, 0x73, 0x70, 0xEF, 0xB4,
-0x02, 0x14, 0x90, 0x94, 0x4A, 0xE0, 0x64, 0x04, 0x60, 0x07, 0x43, 0x14, 0x01, 0xE0, 0x04, 0xF0,
-0x22, 0xE4, 0x90, 0x94, 0x4A, 0xF0, 0x22, 0x7F, 0x70, 0x7E, 0x08, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
-0xC0, 0xD0, 0xEF, 0x54, 0xFC, 0xFF, 0x90, 0x01, 0xE8, 0xF0, 0xEE, 0x44, 0xF0, 0xA3, 0xF0, 0x90,
-0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEC, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90,
-0x01, 0xED, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEE, 0xF0, 0x12, 0x1E, 0xF6,
-0x90, 0x01, 0xEF, 0xF0, 0x90, 0x01, 0xEB, 0x74, 0x40, 0xF0, 0x12, 0x96, 0xFC, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0x90, 0x93, 0x04, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x16, 0xEF, 0x7B, 0x01, 0xB4, 0x01,
-0x06, 0x7A, 0x93, 0x79, 0x0B, 0x80, 0x04, 0x7A, 0x93, 0x79, 0x07, 0x7F, 0x80, 0x7E, 0x08, 0xB1,
-0x6B, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1, 0x40, 0xEF, 0x60, 0x4E, 0x90, 0x92,
-0x69, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6E, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01,
-0xC0, 0x02, 0xC0, 0x01, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74, 0x92, 0x35, 0xF0,
-0xFA, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0xD0, 0x01, 0xD0, 0x02, 0xD1, 0x31, 0x90, 0x92, 0x69,
-0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92,
-0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x10, 0x12, 0x43, 0xC8, 0x90, 0x92,
-0x68, 0xE0, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0xF1, 0x40, 0xEF, 0x70, 0x02, 0xC1, 0xEC, 0x90,
-0x94, 0x10, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x75, 0x23, 0x02, 0x7B, 0x01,
-0x7A, 0x01, 0x79, 0xA0, 0xD1, 0xF1, 0x90, 0x94, 0x13, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21,
-0x89, 0x22, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5,
-0x23, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2, 0xD1, 0xF1, 0x90, 0x01, 0xAF, 0x74, 0xFF, 0xF0, 0x90,
-0x93, 0xB1, 0xE0, 0x64, 0x01, 0x70, 0x48, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A,
-0x21, 0x89, 0x22, 0x75, 0x23, 0x02, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x20, 0xD1, 0xF1, 0x90, 0x94,
-0x13, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8,
-0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x22, 0xD1,
-0xF1, 0x90, 0x93, 0x95, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0x74, 0xFF, 0xF0, 0x90,
-0x92, 0x68, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x94,
-0x0A, 0x12, 0x43, 0xC8, 0xAB, 0x20, 0xAA, 0x21, 0xA9, 0x22, 0x90, 0x94, 0x0D, 0x12, 0x43, 0xC8,
-0xAF, 0x23, 0x15, 0x23, 0xEF, 0x60, 0x1E, 0x90, 0x94, 0x0D, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43,
-0xB1, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x94, 0x0A, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0xEF,
-0x12, 0x42, 0x53, 0x80, 0xDB, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9, 0x1F, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0x7F, 0xAF, 0x7E, 0x01, 0x90, 0x94, 0x39, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3,
-0xF0, 0x90, 0x94, 0x39, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C, 0xC3,
-0x90, 0x94, 0x3C, 0xE0, 0x94, 0xE8, 0x90, 0x94, 0x3B, 0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01,
-0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x94, 0x3B, 0xE4, 0x75, 0xF0, 0x01, 0x12,
-0x42, 0x87, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x80, 0xC6, 0x7F, 0x01, 0x22, 0x8F, 0x82,
-0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x64, 0x74, 0x20, 0xF0, 0x22, 0x90,
-0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30, 0xE3, 0x02,
-0x7F, 0x01, 0x22, 0xE4, 0x90, 0x92, 0x69, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xAF, 0xF0, 0x22, 0x90,
-0x00, 0xF4, 0xE0, 0x20, 0xE3, 0x09, 0xE0, 0x7F, 0x01, 0x20, 0xE2, 0x05, 0x7F, 0x02, 0x22, 0x7F,
-0x00, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74, 0x10, 0xF0, 0x90,
-0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01,
-0xC4, 0x74, 0xE7, 0xF0, 0x74, 0x57, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05,
-0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7,
-0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3,
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF,
-0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x0E, 0x74, 0x0F,
-0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0,
-0x54, 0xEF, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x3F, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0xFD,
-0x62, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x93, 0x67, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x54, 0x3F, 0x25,
-0xE0, 0x25, 0xE0, 0xFF, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x93, 0x68, 0xF0, 0x90,
-0x93, 0x67, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xE4, 0xFF, 0x90, 0x94, 0x1C, 0xEF, 0xF0, 0xA3, 0xED,
-0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x19, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x94,
-0x21, 0xF0, 0xD1, 0x3C, 0xBF, 0x01, 0x02, 0x11, 0xEC, 0x90, 0x94, 0x21, 0xE0, 0x90, 0x05, 0x22,
-0xF0, 0x80, 0x02, 0x11, 0xEC, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0xAC, 0xE0,
-0xFF, 0x7D, 0x01, 0x11, 0x1F, 0x90, 0x94, 0x1F, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90,
-0x94, 0x1C, 0xE0, 0xFF, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x94, 0x2B, 0xF0, 0xEF, 0x60, 0x10,
-0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x0E,
-0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05,
-0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x74, 0x11,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05, 0x74, 0x16,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x02, 0xF0, 0x74, 0x16, 0x2F, 0xF5,
-0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0x03, 0xF0, 0xAE, 0x05, 0x74, 0x22, 0x2E, 0xF5,
-0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEB, 0xF0, 0x90, 0x94, 0x2B, 0xE0, 0xFF, 0x74, 0x23, 0x2E,
-0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x63, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0x12, 0x9B, 0x6E, 0x90, 0x93, 0x27, 0xE0,
-0x64, 0x01, 0x60, 0x02, 0x41, 0xAE, 0x90, 0x93, 0x1A, 0xE0, 0x30, 0xE0, 0x18, 0xE0, 0xC3, 0x13,
-0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90, 0x93, 0x1A, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x06, 0xA3,
-0xE0, 0x90, 0x93, 0x63, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x63, 0xE0, 0x24, 0x03, 0xF5, 0x49,
-0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0,
-0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x27, 0x30, 0xE0, 0x05, 0x74, 0x05, 0xF0,
-0x80, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F,
-0x90, 0x93, 0x16, 0xE0, 0xFF, 0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90,
-0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x54, 0x07, 0x30, 0xE0, 0x6E, 0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25,
-0xE0, 0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xB9,
-0x80, 0x51, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0,
-0x54, 0xDF, 0xF0, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x30, 0xE0, 0x27, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB,
-0xF0, 0xE4, 0x90, 0x93, 0x2A, 0xF0, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x06, 0xF0,
-0x90, 0x93, 0x4C, 0xE0, 0x60, 0x07, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22,
-0x74, 0x6F, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0xA1, 0xAC, 0x90, 0x93,
-0x27, 0xE0, 0x64, 0x02, 0x60, 0x02, 0x61, 0x8D, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54,
-0x3F, 0x30, 0xE0, 0x08, 0xD1, 0x3C, 0xBF, 0x01, 0x03, 0x12, 0x54, 0x62, 0xE4, 0xFF, 0xD1, 0xE6,
-0x90, 0x93, 0x1A, 0xE0, 0x30, 0xE0, 0x1F, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90,
-0x93, 0x1A, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x90, 0x93, 0x63, 0xF0, 0x90,
-0x93, 0x1A, 0xE0, 0x54, 0xEF, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x16, 0xE0, 0x24, 0x03, 0xFF,
-0x90, 0x93, 0x63, 0xE0, 0x2F, 0xFF, 0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0xFF, 0x90, 0x93, 0x64,
-0xE0, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
-0x63, 0x74, 0x05, 0xF0, 0xE4, 0xFF, 0xD1, 0x83, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x93,
-0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80,
-0x2F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4,
-0x13, 0x54, 0x07, 0x20, 0xE0, 0x14, 0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x80, 0x0B, 0xE5,
-0x65, 0x60, 0x0D, 0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0,
-0x90, 0x93, 0x18, 0xE0, 0x30, 0xE0, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0,
-0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0xC1, 0x36, 0x90, 0x93, 0x27,
-0xE0, 0x64, 0x03, 0x60, 0x02, 0x81, 0xE1, 0x7F, 0x01, 0xD1, 0xE6, 0x90, 0x93, 0x19, 0xE0, 0xFF,
-0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x98, 0x56, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x20, 0xE0, 0x02, 0x81, 0x3D, 0x90, 0x93, 0x1F, 0xE0, 0xFF, 0x90, 0x93, 0x29,
-0xE0, 0xD3, 0x9F, 0x40, 0x4D, 0xE0, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0xFE,
-0xC3, 0xEF, 0x9E, 0xFF, 0x24, 0x03, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x93, 0x17, 0xE0, 0xD3, 0x9D,
-0xEC, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x40, 0x08, 0xE0, 0x9F, 0x90, 0x93, 0x66, 0xF0, 0x80,
-0x06, 0x90, 0x93, 0x66, 0x74, 0x03, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x66, 0xE0, 0xF5, 0x49,
-0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0,
-0x80, 0x24, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x22, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60,
-0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x1D, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x27, 0xF0,
-0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x29, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48,
-0x90, 0x93, 0x65, 0xE0, 0xFF, 0x90, 0x93, 0x17, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD,
-0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x63,
-0x74, 0x05, 0xF0, 0x7F, 0x01, 0xD1, 0x83, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20,
-0xE0, 0x2F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1A, 0x90, 0x93, 0x1A, 0xE0,
-0x44, 0x20, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x02, 0x80, 0x0F, 0x90, 0x05, 0x22, 0xE4, 0xF0,
-0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x08, 0xE5, 0x65, 0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A,
-0x69, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90,
-0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0x13,
-0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x51, 0x48, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93,
-0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0x7F, 0x01, 0xC1,
-0x38, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x04, 0x60, 0x02, 0xA1, 0xB2, 0xF5, 0x48, 0x75, 0x49, 0x03,
-0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90,
-0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F,
-0x90, 0x93, 0x17, 0xE0, 0xFF, 0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90,
-0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x54, 0x07, 0x30, 0xE0, 0x6E, 0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25,
-0xE0, 0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xB9,
-0x80, 0x51, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0,
-0x54, 0xDF, 0xF0, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x30, 0xE0, 0x27, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB,
-0xF0, 0xE4, 0x90, 0x93, 0x2A, 0xF0, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x07, 0xF0,
-0x90, 0x93, 0x4C, 0xE0, 0x60, 0x07, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22,
-0x74, 0x6F, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x3B, 0x90, 0x05, 0x22, 0xE4,
-0xF0, 0x22, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x05, 0x60, 0x02, 0xC1, 0x3B, 0x90, 0x93, 0x19, 0xE0,
-0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x08, 0xD1, 0x3C, 0xBF, 0x01, 0x03, 0x12, 0x54, 0x62,
-0xE4, 0xFF, 0xD1, 0xE6, 0xD1, 0x83, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4,
-0x13, 0x54, 0x07, 0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F, 0x90, 0x93,
-0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07,
-0x20, 0xE0, 0x14, 0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x80, 0x0B, 0xE5, 0x65, 0x60, 0x0D,
-0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x18,
-0xE0, 0x30, 0xE0, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13,
-0x13, 0x54, 0x01, 0x30, 0xE0, 0x05, 0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x22, 0x90, 0x05, 0x22, 0x74,
-0xFF, 0xF0, 0xE4, 0x90, 0x94, 0x48, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3,
-0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90,
-0x94, 0x49, 0xE0, 0x94, 0xE8, 0x90, 0x94, 0x48, 0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22,
-0x7F, 0x32, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x94, 0x48, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42,
-0x87, 0x80, 0xC6, 0x90, 0x94, 0x2C, 0xEF, 0xF0, 0x12, 0x9D, 0x17, 0x90, 0x93, 0x18, 0xE0, 0xFF,
-0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x08, 0x90, 0x94, 0x2C, 0xE0, 0xFF, 0x12, 0x50, 0xEB, 0x90,
-0x94, 0x2D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x90, 0x94, 0x2C, 0xE0, 0xB4, 0x01, 0x10,
-0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x16, 0x80, 0x0A,
-0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90, 0x94, 0x2D, 0x12, 0x1F, 0xD5,
-0x00, 0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x2D, 0x12, 0x55, 0x67, 0x90, 0x94, 0x2C,
-0xE0, 0x90, 0x93, 0x26, 0xF0, 0x22, 0xEF, 0x64, 0x03, 0x60, 0x02, 0xE1, 0xB4, 0x90, 0x94, 0x02,
-0x74, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0x13, 0x13, 0x13,
-0x54, 0x1F, 0x30, 0xE0, 0x30, 0x90, 0x94, 0x06, 0x74, 0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0, 0xA3,
-0x74, 0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0,
-0x41, 0x90, 0x94, 0x02, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3,
-0x74, 0x55, 0xF0, 0x80, 0x2D, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x17, 0x90,
-0x94, 0x02, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55,
-0xF0, 0xA3, 0x74, 0x5A, 0x80, 0x05, 0x90, 0x94, 0x06, 0x74, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0xA3, 0xF0, 0x90, 0x94, 0x02, 0xE0, 0x90, 0x06, 0xC0, 0xF0, 0x90, 0x94, 0x03, 0xE0, 0x90, 0x06,
-0xC1, 0xF0, 0x90, 0x94, 0x04, 0xE0, 0x90, 0x06, 0xC2, 0xF0, 0x90, 0x94, 0x05, 0xE0, 0x90, 0x06,
-0xC3, 0xF0, 0x90, 0x94, 0x06, 0xE0, 0x90, 0x06, 0xC4, 0xF0, 0x90, 0x94, 0x07, 0xE0, 0x90, 0x06,
-0xC5, 0xF0, 0x90, 0x94, 0x08, 0xE0, 0x90, 0x06, 0xC6, 0xF0, 0x90, 0x94, 0x09, 0xE0, 0x90, 0x06,
-0xC7, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x06, 0xCC, 0x30, 0xE0,
-0x17, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xEF, 0x90,
-0x06, 0xCC, 0xB4, 0x01, 0x03, 0xE4, 0xF0, 0x22, 0x74, 0x03, 0xF0, 0x22, 0x12, 0x57, 0xE7, 0xBF,
-0x01, 0x0F, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x1F, 0x90, 0x04, 0x1F, 0x74, 0x20,
-0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC, 0xEF, 0x30, 0xE0, 0x02,
-0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5, 0x2B, 0x90, 0x01, 0x30,
-0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3, 0xE5, 0x2B, 0xF0, 0x22,
-0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32, 0x43, 0x32, 0x20, 0x90,
-0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32, 0xF0, 0x22, 0x90, 0x93,
-0xB3, 0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E, 0xFD, 0x7F, 0x33,
-0x22, 0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0xE4, 0x90, 0x93, 0x78, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x98,
-0xE0, 0x7F, 0x00, 0x30, 0xE4, 0x02, 0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E, 0xC3, 0x90, 0x93,
-0x79, 0xE0, 0x94, 0x88, 0x90, 0x93, 0x78, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0,
-0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0x78, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14,
-0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0x79, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x78, 0xE0,
-0x94, 0x00, 0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0x90, 0x01, 0x01, 0xE0,
-0x44, 0x04, 0xF0, 0x90, 0x01, 0x9C, 0x74, 0x7E, 0xF0, 0xA3, 0x74, 0x92, 0xF0, 0xA3, 0x74, 0xA0,
-0xF0, 0xA3, 0x74, 0x24, 0xF0, 0x90, 0x01, 0x9B, 0x74, 0x49, 0xF0, 0x90, 0x01, 0x9A, 0x74, 0xE0,
-0xF0, 0x90, 0x01, 0x99, 0xE4, 0xF0, 0x90, 0x01, 0x98, 0x04, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0,
-0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C, 0x13, 0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04,
-0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x93, 0x5D, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01,
-0x80, 0x18, 0xEE, 0x64, 0x01, 0x60, 0x07, 0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3C, 0x90, 0x93,
-0x5D, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x3D, 0xF0, 0x79, 0x40, 0x90, 0x93, 0x5D, 0xE0, 0xFE, 0xA3,
-0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x93, 0x9F,
-0xF0, 0x22, 0x90, 0x93, 0x9F, 0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0C, 0xE4, 0xF0,
-0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x5F, 0xCC, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0,
-0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03,
-0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x4B, 0xF0, 0x74, 0x61,
-0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x28, 0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D,
-0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E, 0xA3, 0xE0, 0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0,
-0x02, 0x61, 0x45, 0x90, 0x01, 0x34, 0x74, 0x01, 0xF0, 0x85, 0xD1, 0x0A, 0x85, 0xD3, 0x0C, 0x85,
-0xD4, 0x0D, 0x85, 0xD5, 0x0E, 0x85, 0xD6, 0x0F, 0x85, 0xD7, 0x10, 0x85, 0xD9, 0x11, 0x85, 0xD2,
-0x0B, 0x75, 0x20, 0x00, 0x75, 0x21, 0x00, 0x75, 0x22, 0x0A, 0x75, 0x23, 0x08, 0xFB, 0x7A, 0x93,
-0x79, 0xA0, 0x12, 0x56, 0xF1, 0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x01, 0xFE, 0xEF,
-0xC4, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x70, 0x02, 0x41, 0xF0, 0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4,
-0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0x41, 0xF0, 0xEF, 0x54, 0x1F, 0xF5, 0x4D, 0x90,
-0x93, 0xA2, 0xE0, 0x54, 0x3F, 0xF5, 0x4E, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D,
-0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42,
-0x87, 0xE5, 0x4E, 0xD3, 0x94, 0x04, 0x40, 0x03, 0x75, 0x4E, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x4D,
-0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xE0, 0xFE,
-0xA3, 0xE0, 0xFF, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0,
-0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43,
-0x9C, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0xA1, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0,
-0x2F, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82,
-0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0xA3, 0xE0, 0xFF,
-0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x67, 0xAF, 0x4D, 0x12, 0x7A, 0xB3, 0x80, 0x60,
-0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x53, 0x90, 0x93, 0xA4,
-0xE0, 0x54, 0x1F, 0xFF, 0xFD, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D,
-0xF5, 0x83, 0xE4, 0x8D, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0xA3, 0xE0, 0xFE, 0xC4, 0x13, 0x13,
-0x13, 0x54, 0x01, 0x30, 0xE0, 0x0F, 0xEE, 0x54, 0x7F, 0xFD, 0x8F, 0x55, 0xAB, 0x4E, 0xAF, 0x4D,
-0x12, 0x7A, 0x4F, 0x80, 0x1B, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x11, 0x90,
-0x04, 0x30, 0xE0, 0xB4, 0x01, 0x0A, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x04, 0xCF, 0xF0,
-0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x46, 0x90, 0x93, 0x59, 0xE0, 0x60, 0x37, 0x90,
-0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x12, 0x51, 0xBB, 0xEF, 0x64, 0x01,
-0x70, 0x2D, 0xF5, 0x48, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E,
-0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0,
-0x90, 0x93, 0x55, 0xF0, 0x80, 0x09, 0x12, 0x51, 0xBB, 0xBF, 0x01, 0x03, 0x12, 0x52, 0x17, 0x90,
-0x94, 0x4B, 0xE0, 0x04, 0xF0, 0xE5, 0x2C, 0x20, 0xE1, 0x02, 0x61, 0xE7, 0x90, 0x01, 0x34, 0x74,
-0x02, 0xF0, 0x90, 0xFD, 0x10, 0x74, 0x7F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x30, 0xE5, 0x0B, 0x75,
-0x4F, 0x88, 0x75, 0x50, 0x0F, 0x75, 0x51, 0x0F, 0x80, 0x09, 0x75, 0x4F, 0xC0, 0x75, 0x50, 0x08,
-0x75, 0x51, 0x07, 0x90, 0x04, 0x7F, 0xE0, 0x55, 0x51, 0xF5, 0x12, 0x90, 0x04, 0x7E, 0xE0, 0x55,
-0x51, 0xF5, 0x13, 0x65, 0x12, 0x60, 0x60, 0xE4, 0xFF, 0xE5, 0x12, 0x75, 0xF0, 0x08, 0xA4, 0x25,
-0x4F, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x15, 0x2F,
-0xF8, 0xA6, 0x06, 0x0F, 0xBF, 0x08, 0xE2, 0x75, 0x20, 0x00, 0x75, 0x21, 0x00, 0x75, 0x22, 0x15,
-0x75, 0x23, 0x08, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x97, 0x12, 0x56, 0xF1, 0x90, 0x93, 0x97, 0xE0,
-0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0xD1, 0x6A, 0xE5, 0x12, 0x24, 0x01,
-0xFF, 0xE4, 0x33, 0xFE, 0xAD, 0x50, 0x7C, 0x00, 0x12, 0x1F, 0x4E, 0xAF, 0x05, 0x8F, 0x12, 0x90,
-0x04, 0x7F, 0xEF, 0xF0, 0xB5, 0x13, 0xA0, 0xE5, 0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x34, 0x74,
-0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90, 0x01, 0x34, 0x74, 0x10, 0xF0, 0x43, 0x14, 0x10,
-0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF, 0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54, 0xDF, 0xF0,
-0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8, 0x00, 0x75, 0xE8, 0x00, 0x12, 0x54, 0x1F, 0x90,
-0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x54, 0x52, 0x80, 0xFE, 0xE5, 0x2C, 0x30, 0xE6, 0x06,
-0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0x81, 0xF1, 0x90, 0x93, 0xB2,
-0x74, 0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x93, 0xAF, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90,
-0x05, 0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x12, 0x45, 0x09, 0x90,
-0x93, 0x2D, 0xE0, 0x20, 0xE0, 0x02, 0x81, 0xE6, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF,
-0x12, 0x50, 0xEB, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00,
-0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x13,
-0x54, 0x07, 0xFF, 0xE0, 0xFE, 0xC3, 0x13, 0x54, 0x0F, 0xC3, 0x9F, 0x40, 0x30, 0xE0, 0x54, 0xFE,
-0xF0, 0xE0, 0x54, 0xE1, 0xF0, 0x90, 0x93, 0x32, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F,
-0xC9, 0x7F, 0x60, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x2E, 0x12, 0x43, 0x84, 0x90, 0x81,
-0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x80, 0x1C, 0x90, 0x93, 0x2D,
-0xE0, 0xFF, 0xC3, 0x13, 0x54, 0x0F, 0xFE, 0xEF, 0x54, 0xE1, 0xFF, 0xEE, 0x04, 0x54, 0x0F, 0xFE,
-0x25, 0xE0, 0x4F, 0xF0, 0x80, 0x03, 0x12, 0x6B, 0x41, 0x12, 0x6B, 0x0A, 0x90, 0x93, 0xB2, 0xE4,
-0xF0, 0xE5, 0x2E, 0x30, 0xE1, 0x45, 0x90, 0x01, 0x36, 0x74, 0x02, 0xF0, 0x43, 0x14, 0x40, 0x12,
-0x9D, 0x70, 0x11, 0xDC, 0x90, 0x93, 0x5C, 0xE0, 0x60, 0x1D, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4,
-0x16, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90,
-0x93, 0x57, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x05, 0x08, 0xE5, 0x08, 0xC3, 0x94, 0xFF, 0x40, 0x0B,
-0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x43,
-0x90, 0x01, 0x36, 0x74, 0x04, 0xF0, 0x12, 0x4C, 0x73, 0x90, 0x93, 0x5C, 0xE0, 0x60, 0x34, 0x90,
-0x93, 0x57, 0xE0, 0xFF, 0x90, 0x93, 0x40, 0xE0, 0x6F, 0x70, 0x28, 0x90, 0x93, 0x57, 0xE0, 0x90,
-0x05, 0x73, 0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x7D,
-0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93, 0x40,
-0xE0, 0x14, 0xF0, 0xE5, 0x2E, 0x30, 0xE3, 0x34, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0, 0xE5, 0x62,
-0x64, 0x01, 0x70, 0x28, 0xE5, 0x65, 0x60, 0x24, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C,
-0x74, 0x02, 0xF0, 0x75, 0x48, 0x00, 0x90, 0x93, 0x4B, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F,
-0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4,
-0x2B, 0x90, 0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x20, 0xE5, 0x65, 0x60, 0x1C,
-0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x5A, 0xE4, 0xF0,
-0x53, 0x66, 0xFD, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x52, 0x17, 0xE5, 0x2E, 0x30, 0xE5,
-0x25, 0x90, 0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x1A, 0xE5, 0x65, 0x60, 0x16,
-0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64, 0x0C, 0x60, 0x08, 0x12, 0x51,
-0x48, 0x80, 0x03, 0x12, 0x50, 0x77, 0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40,
-0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x10, 0xE5, 0x65, 0x60, 0x0C, 0x53, 0x66, 0xFE, 0xE5, 0x66, 0x54,
-0x07, 0x70, 0x03, 0x12, 0x52, 0x17, 0xE5, 0x2F, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x37, 0x74, 0x02,
-0xF0, 0x12, 0x4F, 0xFA, 0x74, 0x4B, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0xD0,
-0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0,
-0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x93, 0x5D, 0xE0, 0x54, 0xF0,
-0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x15, 0x90, 0x94,
-0x19, 0x12, 0x43, 0xC8, 0x0B, 0x7A, 0x93, 0x79, 0x5D, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x90, 0x94, 0x16, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92, 0x69, 0xE0, 0xB5,
-0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x90, 0x92, 0x69, 0xE0, 0x70, 0x06, 0xA3,
-0xE0, 0x64, 0x09, 0x60, 0x0B, 0x90, 0x92, 0x69, 0xE0, 0x14, 0xFF, 0xA3, 0xE0, 0xB5, 0x07, 0x0F,
-0x12, 0x57, 0x40, 0xEF, 0x60, 0x72, 0x12, 0x55, 0xD2, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x90,
-0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6E, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xA8, 0x01,
-0xFC, 0x7D, 0x01, 0x90, 0x94, 0x16, 0x12, 0x43, 0xA8, 0x7E, 0x00, 0x7F, 0x02, 0x12, 0x1E, 0xD0,
-0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA,
-0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x94, 0x19, 0x12, 0x43, 0xA8, 0x8B, 0x20,
-0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x16, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54,
-0x0F, 0xF5, 0x23, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x56, 0xF1, 0x90, 0x92, 0x6A, 0xE0,
-0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAD, 0x07, 0x90,
-0x93, 0x63, 0xE0, 0x54, 0xF0, 0x44, 0x05, 0xF0, 0x54, 0x0F, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x65,
-0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x65, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93,
-0x79, 0x63, 0xC1, 0x89, 0xAD, 0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x09, 0xF0, 0x54,
-0x0F, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x6E, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90,
-0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0xC1, 0x89, 0x90, 0x93, 0x8F, 0x12, 0x43,
-0xC8, 0x90, 0x93, 0x92, 0xE0, 0x54, 0xF0, 0x44, 0x02, 0xF0, 0x54, 0x0F, 0x44, 0xC0, 0xF0, 0x90,
-0x93, 0x8F, 0x12, 0x43, 0xA8, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79,
-0x92, 0xC1, 0x89, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x0D, 0xF0, 0x54, 0x0F, 0x44, 0x10,
-0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6E, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90,
-0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0xC1, 0x89, 0xC0, 0xE0, 0xC0, 0x83, 0xC0,
-0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x7D, 0xDB, 0x90, 0x01,
-0xC4, 0xED, 0xF0, 0x74, 0x67, 0xFF, 0xA3, 0xF0, 0x53, 0x91, 0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE,
-0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90, 0x00, 0x52, 0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0,
-0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06, 0x90, 0x00, 0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D,
-0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20, 0xF0, 0xE5, 0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00,
-0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7, 0x06, 0x90, 0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5,
-0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74, 0x01, 0xF0, 0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90,
-0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30, 0xE2, 0x06, 0x90, 0x00, 0x56, 0x74, 0x04, 0xF0,
-0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56, 0x74, 0x08, 0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0,
-0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0,
-0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0,
-0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x75,
-0x56, 0x00, 0x90, 0x01, 0xC4, 0x74, 0x82, 0xF0, 0x74, 0x68, 0xA3, 0xF0, 0x53, 0x91, 0xDF, 0x90,
-0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0, 0x55, 0x31, 0xF5, 0x35, 0xA3, 0xE0, 0x55,
-0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37, 0xE5, 0x34, 0x30, 0xE0, 0x06, 0x90, 0x01,
-0x3C, 0x74, 0x01, 0xF0, 0xE5, 0x34, 0x30, 0xE1, 0x10, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90,
-0x93, 0x15, 0xE0, 0x20, 0xE0, 0x03, 0x12, 0x46, 0x79, 0xE5, 0x34, 0x30, 0xE2, 0x36, 0x90, 0x01,
-0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE0, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93,
-0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
-0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x55, 0xE4,
-0xF0, 0x12, 0x52, 0x17, 0xE5, 0x34, 0x30, 0xE3, 0x36, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0x90,
-0x06, 0x92, 0xE0, 0x30, 0xE1, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4,
-0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90,
-0x06, 0x92, 0x74, 0x02, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x52, 0xE4, 0xF0, 0x12, 0x52, 0x17, 0xE5,
-0x34, 0x30, 0xE4, 0x34, 0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x30, 0xE0,
-0x24, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x07, 0x78, 0x74,
-0x01, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08,
-0x12, 0x34, 0x30, 0x80, 0x03, 0x12, 0x59, 0x97, 0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3C,
-0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x18, 0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90, 0x00,
-0x83, 0xE0, 0xF5, 0x64, 0x90, 0x01, 0xBB, 0xE5, 0x64, 0xF0, 0x12, 0x51, 0xEC, 0x12, 0x52, 0x17,
-0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3D, 0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B,
-0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90, 0x93, 0xAE, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05,
-0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0xFD, 0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x06,
-0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0xE5, 0x36, 0x30, 0xE1, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x02,
-0xF0, 0xE5, 0x36, 0x30, 0xE3, 0x08, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xD1, 0x43, 0xE5, 0x36,
-0x30, 0xE4, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x10, 0xF0, 0xE5, 0x36, 0x30, 0xE2, 0x76, 0x90, 0x01,
-0x3E, 0x74, 0x04, 0xF0, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE7, 0x13, 0x74, 0x80, 0xF0, 0x90, 0x07,
-0x95, 0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x44, 0x04, 0xF0, 0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x90, 0x07,
-0x8F, 0xE0, 0x30, 0xE6, 0x12, 0x74, 0x40, 0xF0, 0x90, 0x07, 0x7C, 0xE0, 0xB4, 0x06, 0x08, 0x90,
-0x07, 0x80, 0xE0, 0xFF, 0x12, 0x67, 0x3D, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE5, 0x14, 0x74, 0x20,
-0xF0, 0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3, 0xE0, 0x44,
-0x01, 0xF0, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE2, 0x0D, 0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x54, 0xFB,
-0xF0, 0x7F, 0x01, 0x12, 0x55, 0xB2, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE0, 0x07, 0x74, 0x01, 0xF0,
-0xFF, 0x12, 0x55, 0xB2, 0xE5, 0x36, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x20, 0xF0, 0xE5,
-0x36, 0x30, 0xE6, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x40, 0xF0, 0xE5, 0x36, 0x30, 0xE7, 0x06, 0x90,
-0x01, 0x3E, 0x74, 0x80, 0xF0, 0xE5, 0x37, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0,
-0x43, 0x14, 0x80, 0xE5, 0x37, 0x30, 0xE4, 0x1C, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0x12, 0x44,
-0x24, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x93,
-0x71, 0x41, 0x71, 0x0A, 0x74, 0x82, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x68, 0xA3, 0xF0, 0xD0,
-0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0,
-0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x94, 0x3E, 0xE0, 0x30, 0xE0,
-0x2F, 0xE5, 0x62, 0xB4, 0x01, 0x2A, 0x90, 0x94, 0x3D, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x0B,
-0x90, 0x94, 0x40, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x3D, 0xF0, 0x90, 0x94, 0x40, 0xE0, 0xFF,
-0x90, 0x94, 0x3F, 0xE0, 0xD3, 0x9F, 0x50, 0x08, 0x12, 0x44, 0xFE, 0xE4, 0x90, 0x94, 0x40, 0xF0,
-0x22, 0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0, 0x6F, 0x7F, 0x01, 0x12, 0x5E, 0xE6, 0x90, 0x93, 0x19,
-0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x98, 0x56, 0x7F, 0x01, 0x12, 0x5E,
-0x83, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x29, 0x90, 0x93, 0x15, 0xE0,
-0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1F, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x4C,
-0xE0, 0x60, 0x06, 0x7D, 0x01, 0x7F, 0x04, 0x80, 0x09, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x7D, 0x01,
-0x7F, 0x0C, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x4C, 0xE0, 0x90, 0x05, 0x22, 0x60, 0x05, 0x74, 0x6F,
-0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30,
-0xE0, 0x05, 0x7F, 0x01, 0x12, 0x55, 0xB2, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82,
-0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0,
-0x05, 0xC0, 0x06, 0xC0, 0x07, 0x53, 0x91, 0xBF, 0x90, 0xFD, 0x68, 0xE0, 0x20, 0xE0, 0x02, 0xC1,
-0x28, 0x90, 0x93, 0x94, 0xE0, 0x70, 0x16, 0x90, 0x00, 0x2E, 0xE0, 0x90, 0x93, 0x0F, 0xF0, 0x90,
-0x00, 0x2D, 0xE0, 0x90, 0x93, 0x10, 0xF0, 0x90, 0x93, 0x94, 0x74, 0x01, 0xF0, 0x90, 0xFD, 0x60,
-0xE0, 0x54, 0x3F, 0xD3, 0x94, 0x09, 0x50, 0x03, 0x12, 0x99, 0xB4, 0x90, 0xFD, 0x60, 0xE0, 0x64,
-0x0E, 0x60, 0x02, 0x81, 0xB9, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x20,
-0xE0, 0x02, 0x81, 0xB9, 0x90, 0xFD, 0x62, 0xE0, 0x54, 0xC0, 0xFE, 0x90, 0x07, 0x90, 0xE0, 0x54,
-0x3F, 0x4E, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x07, 0x91, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90,
-0x07, 0x92, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x07, 0x93, 0xF0, 0x90, 0x07, 0x95, 0x74, 0x01,
-0xF0, 0xEF, 0x20, 0xE0, 0x44, 0x90, 0x93, 0x04, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x19,
-0x90, 0x07, 0x78, 0x12, 0x58, 0x7F, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x49,
-0x90, 0x07, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x80, 0x40, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13,
-0x30, 0xE0, 0x11, 0xE4, 0xFF, 0x12, 0x55, 0xB2, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3,
-0xE0, 0x44, 0x01, 0xF0, 0x90, 0x07, 0x78, 0x80, 0x14, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0x13, 0x13,
-0x54, 0x3F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x12, 0x58, 0x7F, 0x80, 0x0C, 0xE0, 0x44, 0x10,
-0xF0, 0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x0F, 0x0A,
-0x90, 0xFD, 0x62, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xD1, 0x89, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x15,
-0x70, 0x76, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6A, 0xF0, 0xE0, 0x30, 0xE6, 0x1C, 0xF4, 0x54,
-0x3F, 0x04, 0xFF, 0x90, 0x93, 0x0F, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0xC3, 0x9F, 0x90, 0x93, 0x69,
-0xF0, 0xD3, 0x94, 0x3F, 0x40, 0x20, 0xE4, 0xF0, 0x80, 0x1C, 0x90, 0x93, 0x0F, 0xE0, 0x13, 0x13,
-0x54, 0x3F, 0xFF, 0x90, 0x93, 0x6A, 0xE0, 0x54, 0x3F, 0x2F, 0x90, 0x93, 0x69, 0xF0, 0xD3, 0x94,
-0x3F, 0x40, 0x03, 0x74, 0x3F, 0xF0, 0x90, 0x93, 0x69, 0xE0, 0xFF, 0x90, 0x01, 0xE7, 0xF0, 0xEF,
-0x54, 0x30, 0xC4, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x69, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x4F,
-0x90, 0x93, 0x6B, 0xF0, 0x90, 0x00, 0x2E, 0xF0, 0xEE, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x93, 0x10,
-0xE0, 0x54, 0x0F, 0x4F, 0x90, 0x00, 0x2D, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x21, 0x08, 0x90,
-0xFD, 0x62, 0xE0, 0xFF, 0x12, 0x67, 0x64, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x22, 0x02, 0xD1, 0x61,
-0x90, 0xFD, 0x60, 0xE0, 0x64, 0x23, 0x70, 0x7B, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x2C, 0x30,
-0xE0, 0x05, 0x74, 0x01, 0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x30, 0xE1, 0x5B,
-0x90, 0x93, 0x2D, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x7F, 0x60, 0x7E,
-0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0x32, 0x12, 0x1F, 0xC9, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x7F,
-0x70, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0x2E, 0x12, 0x1F, 0xC9, 0x90, 0x81, 0x57, 0x12,
-0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x01, 0xBE,
-0xE0, 0x04, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0x2D, 0x30, 0xE2, 0x08, 0xE0, 0x54, 0x1F,
-0x44, 0x20, 0xF0, 0x80, 0x06, 0xE0, 0x54, 0x1F, 0x44, 0x60, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0xFF,
-0x12, 0x9A, 0x20, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x24, 0x03, 0x12, 0x67, 0xB3, 0x90, 0xFD, 0x60,
-0xE0, 0xB4, 0x25, 0x13, 0x90, 0xFD, 0x62, 0xE0, 0x60, 0x0D, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x01,
-0xF0, 0x90, 0x93, 0x24, 0x74, 0x04, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x26, 0x05, 0x7F, 0x01,
-0x12, 0x9A, 0xBC, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x30, 0x07, 0xE4, 0xFB, 0xFD, 0x7F, 0x01, 0xD1,
-0xB4, 0x90, 0xFD, 0x68, 0xE0, 0x44, 0x01, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04,
-0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0,
-0xD0, 0xE0, 0x32, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x11, 0x90,
-0x93, 0x1C, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x08, 0xE0, 0x44, 0x04, 0xF0, 0xE0, 0x54, 0xFD, 0xF0,
-0x22, 0x90, 0x00, 0x75, 0xE0, 0x44, 0x01, 0xF0, 0x7F, 0x01, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90,
-0xFE, 0x13, 0x74, 0x03, 0xF0, 0x7F, 0x02, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0xE4,
-0xF0, 0x90, 0x00, 0x75, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0xAE, 0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54,
-0xF0, 0x44, 0x04, 0xF0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x6E, 0xEE, 0xF0, 0xA3, 0xED,
-0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79,
-0x6C, 0x02, 0x66, 0x89, 0xAC, 0x07, 0x90, 0x93, 0xD9, 0xE0, 0x44, 0x0F, 0xF0, 0x54, 0x0F, 0x44,
-0x70, 0xF0, 0x90, 0x93, 0xDB, 0xEC, 0xF0, 0x60, 0x32, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93, 0xDC,
-0xF0, 0x90, 0xFD, 0x61, 0xE0, 0x90, 0x93, 0xDD, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0xDE,
-0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0xDF, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93, 0xE0,
-0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0xE1, 0xF0, 0x80, 0x11, 0x90, 0x93, 0xDC, 0xED, 0xF0,
-0xA3, 0xEB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93,
-0x79, 0xDB, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0xD9, 0x02, 0x66, 0x89, 0xD3,
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x83, 0xF0, 0x90, 0x00, 0x01,
-0x12, 0x1F, 0x0F, 0x90, 0x93, 0x84, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x85,
-0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x86, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F,
-0x0F, 0x90, 0x93, 0x87, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0,
-0x14, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x83, 0x7F, 0x30, 0xF1, 0x84, 0x90, 0x93, 0x83, 0xE0, 0xFB,
-0x7D, 0x01, 0xE4, 0x80, 0x07, 0x90, 0x93, 0x83, 0xE0, 0xFB, 0xE4, 0xFD, 0xFF, 0xD1, 0xB4, 0xD0,
-0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x8A, 0x12, 0x43,
-0xC8, 0xE4, 0xFE, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x2F, 0x90, 0xFD, 0x50, 0xEF, 0xF0, 0xEE,
-0xC3, 0x94, 0x07, 0x50, 0x1E, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8, 0x8E, 0x82, 0x75, 0x83, 0x00,
-0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x51, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5, 0x83, 0xEF, 0xF0,
-0x0E, 0x80, 0xDC, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10,
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x93, 0x78, 0xF0, 0x90,
-0x93, 0x78, 0xE0, 0xFD, 0x70, 0x03, 0x02, 0x71, 0x18, 0x90, 0x94, 0x4C, 0xE0, 0xFF, 0x74, 0x01,
-0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF,
-0x5D, 0x70, 0x02, 0x21, 0x11, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12,
-0x43, 0x9C, 0xE0, 0x90, 0x93, 0x79, 0xF0, 0x75, 0x20, 0x01, 0x75, 0x21, 0x93, 0x75, 0x22, 0x79,
-0x75, 0x23, 0x01, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x7A, 0x12, 0x56, 0xF1, 0x90, 0x93, 0x7A, 0xE0,
-0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x94, 0x4C, 0x30, 0xE0, 0x59, 0xE0, 0x75, 0xF0,
-0x02, 0x90, 0x00, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7B, 0xF0, 0x90, 0x94, 0x4C, 0xE0,
-0x75, 0xF0, 0x02, 0x90, 0x00, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90, 0x94,
-0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D, 0xF0,
-0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
-0x7E, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x9C, 0xE0,
-0x90, 0x93, 0x7F, 0xF0, 0x80, 0x33, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C,
-0xE0, 0x90, 0x93, 0x7B, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12,
-0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01,
-0xD3, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01, 0x7A,
-0x93, 0x79, 0x7B, 0x31, 0x1D, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x90, 0x94, 0x4C, 0xE0, 0xFE, 0x74,
-0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x93, 0x78, 0xF0,
-0x90, 0x94, 0x4C, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC,
-0x90, 0x01, 0xCC, 0xF0, 0x90, 0x94, 0x4C, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x02, 0x6F,
-0xDF, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xC8, 0xEF, 0x12, 0x43, 0xD1, 0x71, 0xC1, 0x01, 0x71, 0xB8, 0x02, 0x72, 0x09, 0x03,
-0x72, 0x12, 0x05, 0x72, 0x1B, 0x06, 0x73, 0x5D, 0x07, 0x72, 0x23, 0x0B, 0x72, 0x2C, 0x10, 0x72,
-0x34, 0x11, 0x72, 0x3C, 0x12, 0x72, 0x44, 0x16, 0x72, 0x4E, 0x17, 0x72, 0x58, 0x18, 0x72, 0x62,
-0x19, 0x73, 0x29, 0x1B, 0x73, 0x32, 0x1C, 0x72, 0x6B, 0x1D, 0x72, 0x75, 0x1E, 0x72, 0x80, 0x21,
-0x72, 0x89, 0x22, 0x72, 0x92, 0x23, 0x72, 0x9B, 0x24, 0x72, 0xA4, 0x25, 0x72, 0xAD, 0x26, 0x72,
-0xB6, 0x27, 0x72, 0xBF, 0x28, 0x72, 0xC8, 0x29, 0x71, 0xCA, 0x2D, 0x71, 0xD3, 0x2E, 0x72, 0xD1,
-0x2F, 0x73, 0x3B, 0x30, 0x72, 0xE2, 0x32, 0x72, 0xD9, 0x33, 0x71, 0xE5, 0x34, 0x72, 0xEB, 0x36,
-0x72, 0xF4, 0x37, 0x72, 0xFD, 0x38, 0x73, 0x05, 0x3A, 0x71, 0xDC, 0x3B, 0x73, 0x0E, 0x3E, 0x73,
-0x17, 0x3F, 0x73, 0x20, 0x41, 0x73, 0x44, 0x46, 0x71, 0xEE, 0x47, 0x72, 0x00, 0x48, 0x71, 0xF7,
-0x49, 0x73, 0x4D, 0x4B, 0x00, 0x00, 0x73, 0x56, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8B,
-0x8F, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8B, 0x95, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8,
-0x02, 0x8C, 0x76, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8C, 0xBE, 0x90, 0x93, 0x80, 0x12,
-0x43, 0xA8, 0x02, 0x8C, 0xF7, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0x29, 0x90, 0x93,
-0x80, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0x2F, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0xEF,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x96, 0xE2, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x8E, 0x00, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0x71, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x81, 0x2E, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0xBE, 0x90, 0x93, 0x80, 0x12,
-0x43, 0xA8, 0x61, 0x5E, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x61, 0x64, 0x90, 0x93, 0x80, 0x12,
-0x43, 0xA8, 0x61, 0x6A, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x01, 0x80, 0x2F, 0x90, 0x93,
-0x80, 0x12, 0x43, 0xA8, 0x7F, 0x02, 0x80, 0x25, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x03,
-0x80, 0x1B, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x2A, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0xE4, 0xFF, 0x80, 0x08, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x04, 0x02, 0x8E, 0x48,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x62, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x8F, 0x7B, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x94, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x02, 0x8F, 0xAD, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0xC6, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xA8, 0x02, 0x8F, 0xDF, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0xF8, 0x90,
-0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x11, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x90,
-0x2A, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x81, 0x1F, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x90, 0x52, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x6B, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x02, 0x90, 0x84, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x92, 0x37, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xA8, 0x61, 0xFD, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x92, 0x49, 0x90, 0x93,
-0x80, 0x12, 0x43, 0xA8, 0x02, 0x96, 0x75, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x96, 0x8E,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x96, 0xC9, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x8A, 0xB6, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0x9D, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x02, 0x99, 0x80, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x6F, 0x1F, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xA8, 0x02, 0x96, 0xEA, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x7D, 0x05,
-0x7F, 0x0B, 0x80, 0x10, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x0A, 0x7D, 0x01, 0x7F, 0x0D, 0x80, 0x04,
-0x7D, 0x03, 0x7F, 0x11, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x41, 0x12, 0x43,
-0xC8, 0xE4, 0xFE, 0x90, 0x00, 0xA3, 0xE0, 0x54, 0xF8, 0x44, 0x05, 0xF0, 0x90, 0x00, 0xA0, 0xE0,
-0x54, 0x0F, 0x64, 0x04, 0x70, 0x5A, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x49, 0x90, 0xFD, 0x50,
-0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xEE, 0xC3, 0x9D, 0x50, 0x1E, 0x90, 0x94, 0x41, 0x12, 0x43, 0xA8,
-0x8E, 0x82, 0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x52, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
-0xFD, 0xF5, 0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDD, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x0F, 0x74, 0x52,
-0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5, 0x83, 0xE4, 0xF0, 0x0E, 0x80, 0xEB, 0x90, 0xFD, 0x58,
-0x74, 0x01, 0xF0, 0xFF, 0x80, 0x12, 0x90, 0x01, 0x43, 0xE0, 0x04, 0xF0, 0x7F, 0x02, 0x80, 0x08,
-0x90, 0x01, 0x42, 0xE0, 0x04, 0xF0, 0x7F, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x83,
-0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D,
-0x01, 0x7F, 0x23, 0x71, 0x74, 0xEF, 0xB4, 0x03, 0x05, 0x7F, 0xFF, 0x12, 0x9A, 0x20, 0x22, 0x12,
-0x1E, 0xF6, 0xFF, 0xE9, 0x24, 0x01, 0xF9, 0xE4, 0x3A, 0xFA, 0x7D, 0x04, 0x61, 0x74, 0x90, 0x00,
-0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x1F, 0xFE, 0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD,
-0xAF, 0x06, 0x90, 0x93, 0x83, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93,
-0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90,
-0x93, 0x88, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03,
-0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x83, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x86, 0x12,
-0x43, 0x9C, 0xAD, 0x82, 0xAC, 0x83, 0x90, 0x93, 0x8A, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75,
-0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43,
-0xC8, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0x0F, 0xFF,
-0x90, 0x93, 0x8C, 0x12, 0x43, 0xA8, 0xEF, 0x12, 0x42, 0x53, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8,
-0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x8C, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01,
-0xEF, 0x12, 0x42, 0x65, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F,
-0xFF, 0x90, 0x93, 0x8A, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12,
-0x1E, 0xF6, 0x8D, 0x82, 0x8C, 0x83, 0xA3, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0xFE, 0x90, 0x93, 0x83,
-0xE0, 0xFF, 0x24, 0xC2, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x84,
-0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x75, 0xF0,
-0x09, 0xEF, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x89, 0xE0, 0xFE,
-0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x8F, 0x57, 0xEF, 0x25,
-0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xAF, 0x82, 0xF5, 0x58, 0x8F, 0x59, 0xE5, 0x57,
-0x75, 0xF0, 0x02, 0xA4, 0x24, 0x02, 0xF9, 0x74, 0x89, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5, 0x5B,
-0x89, 0x5C, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAF, 0x82, 0x85,
-0x83, 0x5D, 0x8F, 0x5E, 0xE5, 0x57, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35,
-0xF0, 0x75, 0x5F, 0x01, 0xF5, 0x60, 0x89, 0x61, 0x74, 0xC2, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34,
-0x89, 0xF5, 0x83, 0xE0, 0x12, 0x43, 0xD1, 0x75, 0xBC, 0x00, 0x75, 0xD1, 0x01, 0x75, 0xE6, 0x02,
-0x75, 0xFB, 0x03, 0x76, 0x24, 0x04, 0x76, 0x39, 0x05, 0x76, 0x4E, 0x06, 0x76, 0x74, 0x0C, 0x76,
-0xA1, 0x0D, 0x76, 0xCE, 0x0E, 0x76, 0xFB, 0x0F, 0x00, 0x00, 0x77, 0x2F, 0xE5, 0x57, 0x25, 0xE0,
-0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80,
-0x3C, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0,
-0xF0, 0xA3, 0x74, 0x10, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34,
-0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x05, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24,
-0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x57,
-0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74,
-0x8F, 0xF0, 0xE1, 0x2F, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
-0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF5, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5,
-0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x57,
-0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D,
-0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0,
-0xA3, 0xF0, 0xE1, 0x2F, 0x90, 0x04, 0x47, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42,
-0x53, 0x90, 0x04, 0x46, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42,
-0x65, 0x90, 0x04, 0x45, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x44, 0xE1,
-0x26, 0x90, 0x04, 0x4B, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04,
-0x4A, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04,
-0x49, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04,
-0x4F, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4E, 0xE0, 0xAB,
-0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x4D, 0xE0, 0x85,
-0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB,
-0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x52, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B,
-0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x51, 0xE0, 0x85, 0x59, 0x82, 0x85,
-0x58, 0x83, 0xF0, 0x90, 0x04, 0x50, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xF0, 0xAB,
-0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB,
-0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x12, 0x1E, 0xF6, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12,
-0x42, 0x53, 0xAB, 0x5A, 0xE5, 0x5C, 0x24, 0x01, 0xF9, 0xE4, 0x35, 0x5B, 0xFA, 0xC0, 0x03, 0xC0,
-0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x90, 0x00, 0x01,
-0x12, 0x1F, 0x0F, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0x85, 0x59, 0x82,
-0x85, 0x58, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xE0,
-0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xC0,
-0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E,
-0xD0, 0x82, 0xD0, 0x83, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89,
-0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x4C, 0x90, 0x93, 0x8F, 0x74, 0x0B, 0xF0, 0x90,
-0x93, 0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x50, 0x03, 0x02, 0x78, 0x75, 0x74, 0x01, 0x7E, 0x00,
-0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25,
-0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F,
-0x4E, 0x60, 0x0A, 0x90, 0x93, 0x8F, 0xE0, 0x24, 0x10, 0xA3, 0xF0, 0x80, 0x68, 0x90, 0x93, 0x8F,
-0xE0, 0x14, 0xF0, 0x80, 0xBA, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
-0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x47, 0x90, 0x93, 0x8F, 0x74, 0x0F, 0xF0, 0x90,
-0x93, 0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x40, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
-0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47,
-0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08,
-0x90, 0x93, 0x8F, 0xE0, 0xA3, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0x8F, 0xE0, 0x14, 0xF0, 0x80, 0xBF,
-0xE4, 0x90, 0x93, 0x90, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
-0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x8F, 0xF0, 0x90, 0x93,
-0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x40, 0x02, 0x21, 0x2E, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07,
-0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24,
-0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60,
-0x06, 0x90, 0x93, 0x8F, 0xE0, 0x80, 0x63, 0x90, 0x93, 0x8F, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5,
-0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
-0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x8F, 0xF0, 0x90, 0x93, 0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x0C,
-0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
-0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
-0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x93, 0x8F, 0xE0, 0x24, 0x10, 0x80,
-0x09, 0x90, 0x93, 0x8F, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x91, 0xF0, 0x90, 0x93,
-0x90, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xEF, 0xF0,
-0x90, 0x93, 0x91, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C,
-0xEE, 0xF0, 0xE5, 0x57, 0xC3, 0x94, 0x20, 0x50, 0x2C, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4,
-0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3, 0x9F, 0x40, 0x02, 0x80, 0x47, 0x74, 0x84, 0x25, 0x57, 0xF5,
-0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x91, 0xE0, 0xA3,
-0xF0, 0x80, 0x37, 0x80, 0x2D, 0x74, 0x27, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83,
-0xE0, 0xFF, 0x90, 0x93, 0x90, 0xE0, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x07, 0x90, 0x93, 0x92, 0xEE,
-0xF0, 0x80, 0x17, 0x90, 0x93, 0x91, 0xE0, 0xFE, 0xEF, 0xC3, 0x9E, 0x50, 0x05, 0xA3, 0xEE, 0xF0,
-0x80, 0x08, 0x90, 0x93, 0x90, 0xE0, 0x90, 0x93, 0x92, 0xF0, 0x90, 0x93, 0x92, 0xE0, 0xFD, 0xAF,
-0x57, 0x51, 0x06, 0x90, 0x93, 0x92, 0xE0, 0xFF, 0x74, 0xA7, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34,
-0x91, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x90, 0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90,
-0x8A, 0x83, 0x74, 0x03, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x0B, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74,
-0x02, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x03, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x01, 0xF0, 0x22,
-0xE4, 0x90, 0x8A, 0x83, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0xC3, 0x94,
-0x20, 0x50, 0x0E, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED, 0xF0, 0x80,
-0x29, 0x74, 0x27, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xED, 0xF0, 0x90, 0x93, 0xCC,
-0xEF, 0xF0, 0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0xCD, 0xF0,
-0x7B, 0x01, 0x7A, 0x93, 0x79, 0xCC, 0x7D, 0x02, 0x71, 0xCB, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F,
-0x52, 0x8D, 0x53, 0xE5, 0x53, 0x54, 0x1F, 0x90, 0x93, 0x5F, 0xF0, 0x74, 0x01, 0x2F, 0xF5, 0x82,
-0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x93, 0x60, 0x74, 0x01, 0xF0,
-0xEB, 0xC3, 0x94, 0x01, 0x40, 0x02, 0x80, 0x3B, 0x90, 0x93, 0x5D, 0xE0, 0x25, 0x55, 0xFF, 0xA3,
-0xF0, 0xA3, 0xE0, 0x90, 0x41, 0xA4, 0x93, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x13, 0x74, 0x01, 0x25,
-0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAD, 0x53, 0xAF, 0x52, 0x41, 0x06,
-0x90, 0x93, 0x5E, 0xE0, 0xFF, 0x74, 0x01, 0x25, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
-0xEF, 0xF0, 0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0,
-0x90, 0x93, 0x62, 0xF0, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x54,
-0x1F, 0x90, 0x93, 0x61, 0xF0, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0,
-0x04, 0xF0, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05,
-0x40, 0x5D, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x85,
-0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x82, 0x2D, 0xF5, 0x82, 0xE4,
-0x34, 0x89, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x85, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
-0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
-0xEF, 0xF0, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0xC8,
-0x40, 0x0D, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0x74, 0xC8, 0xF0, 0x90,
-0x93, 0x62, 0xE0, 0xFF, 0x90, 0x93, 0x61, 0xE0, 0xD3, 0x9F, 0x40, 0x02, 0xEF, 0xF0, 0x90, 0x93,
-0x61, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93,
-0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5,
-0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED,
-0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
-0xAF, 0x05, 0x90, 0x93, 0x61, 0xE0, 0xFD, 0x51, 0x06, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64,
-0x03, 0x60, 0x12, 0x90, 0x04, 0x30, 0xE0, 0x70, 0x0C, 0x04, 0xF0, 0xA3, 0xF0, 0xA3, 0x04, 0xF0,
-0x90, 0x04, 0xCF, 0x04, 0xF0, 0x90, 0x93, 0x61, 0xE0, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
-0xC0, 0xD0, 0x90, 0x94, 0x22, 0x12, 0x43, 0xC8, 0x90, 0x94, 0x25, 0xE0, 0x54, 0xF0, 0x44, 0x06,
-0xFF, 0xF0, 0xED, 0x54, 0x0F, 0xC4, 0x54, 0xF0, 0xFE, 0xEF, 0x54, 0x0F, 0x4E, 0xF0, 0x90, 0x94,
-0x22, 0x12, 0x43, 0xA8, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x25,
-0x12, 0x66, 0x89, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAC, 0x07, 0xEC, 0xC3, 0x94, 0x20, 0x50, 0x13,
-0x74, 0x84, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88,
-0xF0, 0x80, 0x11, 0x74, 0x27, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F,
-0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x93, 0x8B, 0xF0, 0x75,
-0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x8D, 0xF0, 0x75, 0xF0,
-0x09, 0xEC, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0x90, 0x93, 0x8E, 0xF0, 0xEC, 0x25,
-0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93,
-0x8F, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89,
-0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x91, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x74, 0xC6,
-0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C, 0x90,
-0x93, 0x8E, 0xE0, 0x90, 0x93, 0x8B, 0xF0, 0x90, 0x93, 0x88, 0xF0, 0xED, 0x70, 0x02, 0xA1, 0x82,
-0x90, 0x93, 0x8C, 0xED, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x93, 0x8B, 0xE0,
-0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x8C, 0xE0, 0x14, 0xF0, 0x90, 0x93, 0x8C, 0xE0, 0x70, 0x02,
-0xA1, 0x82, 0x90, 0x93, 0x8B, 0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02, 0xA1, 0x82, 0xE4, 0x90,
-0x93, 0x8A, 0xF0, 0xEF, 0x14, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x8D, 0xE0, 0xFD, 0x90, 0x93,
-0x89, 0xE0, 0xFF, 0xD3, 0x9D, 0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0, 0xFF,
-0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
-0xFF, 0x90, 0x93, 0x91, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93, 0x89,
-0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05,
-0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8F, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0,
-0x5F, 0x4E, 0x60, 0x1A, 0x90, 0x93, 0x89, 0xE0, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x8A, 0xE0,
-0x04, 0xF0, 0x90, 0x93, 0x8C, 0xE0, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0x6F, 0x60, 0x08, 0x90, 0x93,
-0x89, 0xE0, 0x14, 0xF0, 0x80, 0x83, 0x90, 0x93, 0x8C, 0xE0, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0xC3,
-0x9F, 0x50, 0x0F, 0x90, 0x93, 0x89, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x93, 0x8D, 0xE0, 0x90, 0x93,
-0x88, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41,
-0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82,
-0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE,
-0xEF, 0x13, 0xFF, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE,
-0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x90, 0x93, 0x88, 0xE0, 0xFD, 0x51, 0x06, 0x90, 0x93, 0x88,
-0xE0, 0xFF, 0x22, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x39, 0xEF, 0x30, 0xE0, 0x17, 0xED, 0xC4, 0x54,
-0xF0, 0xFD, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
-0x54, 0x0F, 0x80, 0x10, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5,
-0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
-0x4D, 0xF0, 0x22, 0xAD, 0x07, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2D, 0xF5, 0x82,
-0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x80, 0x11, 0x74, 0x27,
-0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x90,
-0x93, 0x88, 0xE0, 0xF9, 0x54, 0x1F, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12,
-0x43, 0x9C, 0xE0, 0xFF, 0x90, 0x93, 0x8B, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
-0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x8C, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0,
-0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0,
-0x90, 0x93, 0x8E, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x93, 0x89, 0xE0, 0xFE, 0x25, 0xE0, 0x24,
-0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xED,
-0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB, 0xF0,
-0xEE, 0xC3, 0x9F, 0x40, 0x02, 0xE1, 0x70, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0xEF, 0x04, 0x90, 0x93, 0x8A, 0xF0, 0x90, 0x93,
-0x8B, 0xE0, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0xFE, 0xD3, 0x9F, 0x40, 0x02, 0xE1, 0xAA, 0xEE, 0xC3,
-0x94, 0x10, 0x40, 0x21, 0xEE, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
-0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8C, 0xE0, 0x5E, 0xFE, 0xA3,
-0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93, 0x8A, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59, 0x74,
-0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF,
-0x90, 0x93, 0x8E, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x93, 0x8A, 0xE0,
-0xB4, 0x11, 0x0D, 0x90, 0x93, 0x8D, 0xE0, 0x30, 0xE7, 0x06, 0x90, 0x93, 0x8A, 0x74, 0x17, 0xF0,
-0x90, 0x93, 0x8A, 0xE0, 0xFF, 0x64, 0x13, 0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x93, 0x8C,
-0xE0, 0x30, 0xE0, 0x06, 0x90, 0x93, 0x8A, 0x74, 0x18, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0x90, 0x93,
-0x89, 0xF0, 0x90, 0x93, 0x88, 0xF0, 0x80, 0x42, 0x90, 0x93, 0x8A, 0xE0, 0x04, 0xF0, 0xC1, 0xCE,
-0x90, 0x93, 0x8B, 0xE0, 0xFC, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0x28, 0x2D,
-0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A,
-0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01, 0x10, 0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x93, 0x89, 0xE0, 0x44,
-0x40, 0x90, 0x93, 0x88, 0xF0, 0x80, 0x03, 0xAF, 0x01, 0x22, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x25,
-0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93,
-0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93,
-0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02,
-0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90, 0x93,
-0x89, 0xE0, 0xD3, 0x9C, 0x40, 0x5E, 0x90, 0x93, 0x8B, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5, 0x82,
-0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x89, 0xEF, 0xF0, 0x90, 0x93, 0x88, 0xF0,
-0xFC, 0xA3, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4,
-0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41,
-0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF,
-0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF,
-0xF0, 0xAF, 0x04, 0x22, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0,
-0xAF, 0x05, 0x90, 0x93, 0x88, 0xE0, 0x44, 0x80, 0xFD, 0x12, 0x7A, 0x06, 0x90, 0x93, 0x88, 0xE0,
-0x44, 0x80, 0xFF, 0x22, 0xE4, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94,
-0x40, 0x40, 0x03, 0x02, 0x88, 0x76, 0xEF, 0xB4, 0x20, 0x14, 0x90, 0x8F, 0x46, 0xE0, 0x04, 0xF0,
-0x90, 0x89, 0x01, 0xE0, 0xFF, 0x90, 0x8F, 0x46, 0xE0, 0xB5, 0x07, 0x02, 0xE4, 0xF0, 0x90, 0x93,
-0x78, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0xE0, 0x64, 0x01, 0x60,
-0x03, 0x02, 0x88, 0x6D, 0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83,
-0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEE, 0x94, 0x00, 0x50, 0x03, 0x02, 0x88, 0x6D, 0x90,
-0x93, 0x78, 0xE0, 0x94, 0x20, 0x40, 0x09, 0x90, 0x8F, 0x46, 0xE0, 0x60, 0x03, 0x02, 0x88, 0x76,
-0x90, 0x93, 0x78, 0xE0, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75,
-0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34,
-0x87, 0xF5, 0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x93, 0x7D, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF,
-0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
-0x93, 0x7F, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x50,
-0x13, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93,
-0x79, 0xF0, 0x80, 0x14, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
-0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93, 0x79, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFE, 0x54, 0x1F, 0xA3,
-0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0,
-0x90, 0x93, 0x82, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3,
-0x94, 0x05, 0x40, 0x02, 0x81, 0x0B, 0x90, 0x93, 0x82, 0xE0, 0xFF, 0x90, 0x93, 0x7A, 0xE0, 0x9F,
-0x40, 0x13, 0x90, 0x93, 0x82, 0xE0, 0x90, 0x93, 0x7A, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0x90, 0x93,
-0x79, 0xF0, 0xEF, 0x4E, 0xF0, 0x90, 0x93, 0x7A, 0xE0, 0xFF, 0x90, 0x41, 0x18, 0x93, 0xFE, 0x90,
-0x93, 0x78, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x40,
-0x06, 0xEF, 0x90, 0x40, 0xE0, 0x80, 0x07, 0x90, 0x93, 0x7A, 0xE0, 0x90, 0x40, 0xFC, 0x93, 0x90,
-0x93, 0x81, 0xF0, 0x90, 0x93, 0x81, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x56, 0xF9, 0x74, 0x40,
-0x35, 0xF0, 0xFA, 0x7B, 0xFF, 0x8B, 0x57, 0xF5, 0x58, 0x89, 0x59, 0x90, 0x93, 0x78, 0xE0, 0x25,
-0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93,
-0x7B, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B,
-0xA9, 0x5C, 0x12, 0x42, 0x9D, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F,
-0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F,
-0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0x12, 0x42, 0xC8, 0xFD,
-0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57,
-0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x04, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90,
-0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00,
-0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x06,
-0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12,
-0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x7E,
-0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x08, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0,
-0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58,
-0xA9, 0x59, 0x90, 0x00, 0x05, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7D, 0xE0, 0xFC,
-0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0xD3, 0x90, 0x93, 0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0,
-0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F, 0xF0, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0xF0, 0x80, 0x07, 0xE4,
-0x90, 0x93, 0x7B, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x7B, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93,
-0x78, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3,
-0xEF, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5,
-0x83, 0xE4, 0x93, 0xFC, 0x74, 0x01, 0x93, 0xFD, 0xD3, 0xEF, 0x9D, 0xEE, 0x9C, 0x50, 0x02, 0x61,
-0xDA, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x82, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0,
-0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9E, 0x40,
-0x03, 0xEF, 0x80, 0x1C, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E,
-0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x82, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xC3,
-0x9E, 0x90, 0x93, 0x83, 0xF0, 0x90, 0x93, 0x83, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x02, 0x80, 0x23,
-0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3,
-0x94, 0x01, 0x40, 0x0F, 0x74, 0xC6, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x14,
-0xF0, 0x80, 0x0F, 0x90, 0x93, 0x78, 0xE0, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
-0xE4, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
-0xE0, 0x60, 0x02, 0xE1, 0x1B, 0x12, 0x7E, 0x13, 0xE1, 0x1B, 0x90, 0x93, 0x79, 0xE0, 0x25, 0xE0,
-0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF,
-0xC3, 0x90, 0x93, 0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x40, 0x02, 0xE1, 0x1B, 0x90,
-0x93, 0x78, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x7C, 0x08, 0xE1, 0x1B, 0x90, 0x93, 0x78, 0xE0, 0xFF,
-0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x02, 0xA1,
-0xE9, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x03, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x19,
-0x40, 0x3D, 0x80, 0x2E, 0xEE, 0xB4, 0x02, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x11, 0x40,
-0x2E, 0x80, 0x1F, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3,
-0x94, 0x0A, 0x40, 0x1B, 0x80, 0x0C, 0xEE, 0x70, 0x11, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x03,
-0x40, 0x0D, 0x90, 0x8E, 0xC5, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x8E, 0xC5, 0xF0, 0x90,
-0x93, 0x78, 0xE0, 0xFE, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93,
-0x87, 0xF0, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0xC3, 0x94,
-0x30, 0x50, 0x0A, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0x74, 0x67, 0x2F, 0xA1, 0x94, 0x90, 0x8E, 0xC5,
-0xE0, 0x64, 0x01, 0x60, 0x02, 0xA1, 0x89, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x64, 0x0A, 0x60, 0x5B, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xEE, 0x24,
-0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0,
-0xFF, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x38, 0x90, 0x93, 0x78, 0xE0,
-0xFE, 0xEF, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E,
-0xF5, 0x83, 0xE0, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x16, 0x90, 0x93,
-0x78, 0xE0, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x7A,
-0xE0, 0x6F, 0x60, 0x56, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5,
-0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x42, 0x40, 0x08, 0x90, 0x93, 0x87, 0x74, 0x05, 0xF0, 0x80, 0x11,
-0xEF, 0xD3, 0x94, 0x39, 0x90, 0x93, 0x87, 0x40, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01,
-0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0,
-0xFE, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x78,
-0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0x80, 0x2F, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24,
-0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x14, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0x90, 0x93,
-0x78, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x7A,
-0xE0, 0xFE, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83,
-0xEE, 0xF0, 0x90, 0x93, 0x87, 0xE0, 0xFE, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5,
-0x83, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01,
-0x11, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83,
-0xE4, 0xF0, 0x90, 0x93, 0x87, 0xE0, 0xFD, 0xE1, 0x18, 0xEC, 0x64, 0x06, 0x60, 0x02, 0xE1, 0x1B,
-0x90, 0x93, 0x7B, 0xF0, 0xA3, 0xF0, 0x90, 0x41, 0xE1, 0x93, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7D,
-0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x85, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
-0x90, 0x93, 0x78, 0xE0, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93,
-0x87, 0xF0, 0xE4, 0x90, 0x93, 0x84, 0xF0, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0xD3, 0x94, 0x04, 0x50,
-0x47, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x75, 0xF0, 0x02, 0xEF, 0xA4, 0xF5, 0x82, 0x85, 0xF0,
-0x83, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0xEF, 0x90, 0x41, 0xDC, 0x93, 0xFF, 0x7E, 0x00, 0x12,
-0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0x85, 0xE0, 0xFE,
-0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x93, 0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x50, 0x08,
-0x90, 0x93, 0x84, 0xE0, 0x04, 0xF0, 0x80, 0xAF, 0x90, 0x93, 0x84, 0xE0, 0xC3, 0x13, 0xF0, 0x90,
-0x93, 0x87, 0xE0, 0xFF, 0xB4, 0x01, 0x0D, 0x90, 0x93, 0x84, 0xE0, 0x70, 0x5D, 0x90, 0x93, 0x87,
-0x04, 0xF0, 0x80, 0x5B, 0xEF, 0xB4, 0x03, 0x1D, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0x70, 0x08, 0x90,
-0x93, 0x87, 0x74, 0x03, 0xF0, 0x80, 0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x87, 0x74, 0x01,
-0xF0, 0x80, 0x3C, 0x80, 0x35, 0x90, 0x93, 0x87, 0xE0, 0x64, 0x05, 0x70, 0x32, 0x90, 0x93, 0x84,
-0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93, 0x87, 0x74, 0x05, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x93, 0x87,
-0xB4, 0x01, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3, 0x90, 0x93, 0x80, 0xE0,
-0x94, 0x03, 0x90, 0x93, 0x7F, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0xD3,
-0x90, 0x93, 0x80, 0xE0, 0x94, 0x03, 0x90, 0x93, 0x7F, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90,
-0x93, 0x87, 0xF0, 0x90, 0x93, 0x87, 0xE0, 0xFD, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xC4, 0xF5,
-0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xED, 0xF0, 0x12, 0x7D, 0xD3, 0x90, 0x93, 0x78, 0xE0, 0xFF,
-0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x05, 0x50, 0x0F, 0x74,
-0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x0F, 0x90, 0x93,
-0x78, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x7F,
-0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x74, 0xFF, 0x9F, 0xFF, 0x74, 0xFF, 0x9E, 0xFE, 0x90, 0x93,
-0x78, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFA,
-0xA3, 0xE0, 0xD3, 0x9F, 0xEA, 0x9E, 0x50, 0x1C, 0x90, 0x93, 0x7F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF,
-0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEE, 0x8F, 0xF0, 0x12,
-0x42, 0x87, 0x80, 0x14, 0x90, 0x93, 0x78, 0xE0, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34,
-0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x25, 0xE0, 0x24,
-0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0x74, 0xFF,
-0x9D, 0xFB, 0x74, 0xFF, 0x9C, 0xFA, 0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x9B, 0xEE, 0x9A, 0x90, 0x93, 0x78, 0xE0, 0x50, 0x13,
-0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEC, 0x8D, 0xF0, 0x12, 0x42,
-0x87, 0x80, 0x10, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF,
-0xF0, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x00, 0xAB,
-0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00,
-0x04, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F,
-0x90, 0x00, 0x08, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x25, 0xE0,
-0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0,
-0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0,
-0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x78,
-0xE0, 0x04, 0xF0, 0x02, 0x80, 0x79, 0x22, 0x90, 0x04, 0x44, 0x74, 0x11, 0xF0, 0xA3, 0x74, 0xF0,
-0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0,
-0xFF, 0xC3, 0x94, 0x10, 0x50, 0x14, 0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83,
-0xE4, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8F, 0x46, 0xF0, 0x90,
-0x89, 0x01, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94,
-0x40, 0x40, 0x02, 0x41, 0x70, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0xE4,
-0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3,
-0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x04, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75,
-0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x06, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A,
-0xEF, 0x90, 0x84, 0x08, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0xA7, 0x2F, 0xF5, 0x82,
-0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE4, 0xF0,
-0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0,
-0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0,
-0xEF, 0x25, 0xE0, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0,
-0xEF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0,
-0xEF, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0,
-0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0,
-0x74, 0x07, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC7, 0x2F, 0xF5,
-0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91,
-0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8E, 0x04, 0xF0, 0x90, 0x41, 0x92, 0x93, 0xFE, 0x74, 0x01, 0x93,
-0xFF, 0x90, 0x41, 0x5A, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE, 0xEF,
-0x13, 0xFF, 0x90, 0x93, 0x78, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A,
-0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8B, 0x12, 0x43,
-0x9C, 0x74, 0x01, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0x74, 0x01,
-0xF0, 0x74, 0xC2, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0C, 0xF0, 0x75, 0xF0,
-0x09, 0xED, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x09,
-0xED, 0x90, 0x8A, 0x84, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0x75, 0xF0, 0x09,
-0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A,
-0x89, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x0F, 0x74, 0x84, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x80, 0x0D, 0x74, 0x27, 0x2D, 0xF5, 0x82,
-0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x04, 0xF0, 0x01, 0xB9,
-0x22, 0x12, 0x1E, 0xF6, 0xFF, 0xC3, 0x94, 0x40, 0x50, 0x14, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
-0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0xB4,
-0x40, 0x0A, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x8A, 0x82, 0xF0, 0x22, 0x90, 0x00, 0x04,
-0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x3F, 0xFE, 0xEF, 0x54, 0x80, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
-0xFD, 0xAF, 0x06, 0x02, 0x74, 0x42, 0x12, 0x1E, 0xF6, 0x90, 0x89, 0x01, 0xF0, 0x22, 0x90, 0x00,
-0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFC, 0xED, 0xC3, 0x94, 0x40,
-0x40, 0x02, 0xE4, 0xFD, 0xEC, 0xC3, 0x94, 0x40, 0x40, 0x02, 0xE4, 0xFC, 0xED, 0x25, 0xE0, 0x24,
-0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x83, 0xF0,
-0xEE, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
-0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x85, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x74, 0xFF,
-0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3,
-0xE0, 0x90, 0x93, 0x89, 0xF0, 0xEE, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x8B, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3,
-0xEC, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x83, 0x02, 0x67, 0x8B, 0x12,
-0x1E, 0xF6, 0xF5, 0x62, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x83, 0x12,
-0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0x83, 0x12,
-0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x59, 0xF0, 0x90, 0x00, 0x03, 0x12,
-0x1F, 0x0F, 0x90, 0x93, 0x3C, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x01, 0x90,
-0x93, 0x3D, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x01, 0x90, 0x93, 0x47, 0xF0, 0x90, 0x00, 0x04, 0x12,
-0x1F, 0x0F, 0xFF, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x44, 0xF0, 0xEF, 0x13, 0x13, 0x13, 0x54,
-0x01, 0x90, 0x93, 0x4A, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x54, 0x01, 0x90,
-0x93, 0x46, 0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x01, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x00, 0x04, 0x12,
-0x1F, 0x0F, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x49, 0xF0, 0xE0, 0x70, 0x38, 0x90,
-0x93, 0x47, 0xE0, 0x70, 0x10, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5, 0x00,
-0x00, 0x03, 0x10, 0x80, 0x0F, 0x7F, 0x01, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5,
-0x00, 0x00, 0x03, 0x00, 0x90, 0x93, 0x86, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9,
-0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x3D, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8,
-0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x4D, 0xC1, 0x90, 0x93, 0x59, 0xE0, 0x90, 0x01, 0xE6,
-0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x30, 0xE0, 0x25,
-0x12, 0x1E, 0xF6, 0x90, 0x93, 0x48, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x4B,
-0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x45, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F,
-0x90, 0x93, 0x50, 0xF0, 0x22, 0x90, 0x93, 0x48, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4B, 0x74, 0x05,
-0xF0, 0x90, 0x93, 0x45, 0x74, 0x14, 0xF0, 0x90, 0x93, 0x50, 0x74, 0x05, 0xF0, 0x22, 0x12, 0x1E,
-0xF6, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x00, 0x01, 0x12,
-0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x4D, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x4F,
-0x74, 0x05, 0xF0, 0x90, 0x93, 0x4D, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4D, 0xE0,
-0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x4C, 0xF0, 0x60, 0x20,
-0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x19, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93,
-0x3D, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x12, 0x51, 0x69,
-0x90, 0x93, 0x4C, 0xE0, 0x90, 0x01, 0xE7, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x02, 0x43, 0xC8, 0x12,
-0x1E, 0xF6, 0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54,
-0x0F, 0xFF, 0xE0, 0x54, 0xF0, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54, 0x70, 0xFF, 0x90, 0x93, 0x36,
-0xE0, 0x54, 0x8F, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x38, 0xF0, 0x90,
-0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x39, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90,
-0x93, 0x3A, 0xF0, 0x90, 0x00, 0x01, 0x74, 0x19, 0x12, 0x42, 0x20, 0x90, 0x00, 0x01, 0x12, 0x1F,
-0x0F, 0xFF, 0xD3, 0x94, 0x20, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x01, 0xF0, 0x80, 0x57, 0xEF,
-0xD3, 0x94, 0x40, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x02, 0xF0, 0x80, 0x49, 0xEF, 0xD3, 0x94,
-0x60, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x03, 0xF0, 0x80, 0x3B, 0xEF, 0xD3, 0x94, 0x80, 0x50,
-0x08, 0x90, 0x93, 0x37, 0x74, 0x04, 0xF0, 0x80, 0x2D, 0xEF, 0xD3, 0x94, 0xA0, 0x50, 0x08, 0x90,
-0x93, 0x37, 0x74, 0x05, 0xF0, 0x80, 0x1F, 0xEF, 0xD3, 0x94, 0xC0, 0x50, 0x08, 0x90, 0x93, 0x37,
-0x74, 0x06, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0xE0, 0x90, 0x93, 0x37, 0x50, 0x05, 0x74, 0x07,
-0xF0, 0x80, 0x03, 0x74, 0x08, 0xF0, 0x90, 0x93, 0x37, 0xE0, 0x90, 0x93, 0x3B, 0xF0, 0x22, 0x12,
-0x1E, 0xF6, 0x60, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x22,
-0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x1E, 0xF6, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90, 0x93, 0xA8,
-0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xA9, 0xF0, 0x90, 0x00,
-0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xAA, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
-0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xAB, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xAE,
-0x05, 0xED, 0x2F, 0x90, 0x93, 0xAC, 0xF0, 0x22, 0xEF, 0x70, 0x21, 0x12, 0x1E, 0xF6, 0x30, 0xE0,
-0x14, 0x90, 0x00, 0x40, 0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0x3F, 0xF0, 0x90, 0x07, 0x78, 0xE0,
-0x44, 0x01, 0xF0, 0x80, 0x07, 0x90, 0x07, 0x78, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x64, 0x01, 0x70,
-0x6A, 0x12, 0x1E, 0xF6, 0x90, 0x00, 0x01, 0x30, 0xE0, 0x2E, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC0,
-0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC1, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
-0x0F, 0x90, 0x06, 0xC2, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC3, 0xF0, 0x90,
-0x06, 0xCC, 0xE0, 0x54, 0xFE, 0xF0, 0x80, 0x2C, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC4, 0xF0, 0x90,
-0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC5, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90,
-0x06, 0xC6, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC7, 0xF0, 0x90, 0x06, 0xCC,
-0xE0, 0x44, 0x01, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x44, 0x02, 0xF0, 0xEF, 0xB4, 0x02, 0x11, 0x12,
-0x1E, 0xF6, 0x90, 0x06, 0xC8, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC9, 0xF0,
-0xEF, 0xB4, 0x03, 0x11, 0x12, 0x1E, 0xF6, 0x90, 0x06, 0xCA, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F,
-0x0F, 0x90, 0x06, 0xCB, 0xF0, 0xEF, 0x64, 0x04, 0x70, 0x1F, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x07,
-0x83, 0x30, 0xE0, 0x06, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0x6F, 0xF0, 0xEF, 0x30,
-0xE1, 0x07, 0x90, 0x07, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8,
-0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0x90, 0x92, 0x6B, 0xF0, 0x90, 0x00, 0x01,
-0x12, 0x1F, 0x0F, 0x90, 0x92, 0x6C, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x92, 0x6D,
-0xF0, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x73, 0x70, 0xEF, 0xB4, 0x02, 0x03, 0x43, 0x14,
-0x01, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93,
-0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x17, 0x02, 0x73, 0x74, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F,
-0x18, 0x02, 0x73, 0x74, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8,
-0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x19, 0x02, 0x73, 0x74, 0x90, 0x93, 0x83,
-0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D,
-0x01, 0x7F, 0x1A, 0x02, 0x73, 0x74, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12,
-0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1B, 0x02, 0x73, 0x74, 0x90,
-0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xA8, 0x7D, 0x01, 0x7F, 0x1C, 0x02, 0x73, 0x74, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93,
-0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x03, 0x7F, 0x1D, 0x02, 0x73,
-0x74, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83,
-0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1E, 0x02, 0x73, 0x74, 0x12, 0x1E, 0xF6, 0xFF, 0xE4, 0xFC,
-0xFD, 0xFE, 0x78, 0x18, 0x12, 0x1F, 0xB6, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0x90,
-0x93, 0x0B, 0x12, 0x43, 0x84, 0xEC, 0x54, 0x03, 0xFC, 0x12, 0x43, 0x59, 0x90, 0x93, 0x07, 0x02,
-0x1F, 0xC9, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93,
-0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1F, 0x02, 0x73, 0x74, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F,
-0x20, 0x02, 0x73, 0x74, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0x90, 0x01, 0xBC, 0xF0, 0xEF, 0x30,
-0xE0, 0x5C, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x4E, 0x90, 0xFD, 0x50, 0x74, 0x0A, 0xF0, 0xA3,
-0x74, 0x06, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0xFD, 0x52, 0xF0, 0x90, 0x00, 0x02,
-0x12, 0x1F, 0x0F, 0x90, 0xFD, 0x53, 0xF0, 0xA3, 0xE4, 0xF0, 0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x90,
-0xFD, 0x55, 0x30, 0xE0, 0x05, 0x74, 0xA0, 0xF0, 0x80, 0x03, 0x74, 0xC0, 0xF0, 0x90, 0xFD, 0x56,
-0x74, 0x10, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x90, 0xFD, 0x50, 0x74, 0x0A, 0xF0, 0xA3, 0x74, 0x06,
-0xF0, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x00,
-0x02, 0x12, 0x1F, 0x0F, 0xFE, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x7C, 0x00, 0x24, 0x00, 0xFF,
-0xEC, 0x3E, 0xFE, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFC, 0x74, 0x20, 0x2F, 0xFF,
-0xE4, 0x3E, 0xFE, 0x90, 0x93, 0x83, 0xEF, 0xF0, 0xEE, 0xF9, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x02,
-0xF0, 0x90, 0x02, 0x09, 0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xEC, 0xC3, 0x99, 0x50, 0x43,
-0xEC, 0x70, 0x04, 0x7D, 0x04, 0x80, 0x02, 0xE4, 0xFD, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x07, 0xAF,
-0x05, 0x31, 0x8B, 0x0D, 0x80, 0xF3, 0x0C, 0x90, 0xFD, 0x10, 0xE0, 0x04, 0xF0, 0xEC, 0xB5, 0x01,
-0xDA, 0xE4, 0xFD, 0xED, 0x75, 0xF0, 0x08, 0xA4, 0xFF, 0x90, 0x93, 0x83, 0xE0, 0xFB, 0xC3, 0xEF,
-0x9B, 0x74, 0x80, 0xF8, 0x65, 0xF0, 0x98, 0x50, 0x07, 0xAF, 0x05, 0x31, 0x8B, 0x0D, 0x80, 0xE3,
-0x0C, 0x80, 0xB8, 0x90, 0x00, 0x81, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x81, 0x12, 0x54, 0x0A, 0x90,
-0x01, 0xBD, 0xE0, 0x44, 0x04, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xFD, 0x58, 0xE0, 0x30,
-0xE0, 0x08, 0x90, 0x01, 0xB8, 0xE0, 0x04, 0xF0, 0x80, 0xF1, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24,
-0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x50, 0xF0, 0xEF, 0x75, 0xF0,
-0x08, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x51, 0xF0,
-0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90,
-0xFD, 0x52, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
-0x83, 0xE0, 0x90, 0xFD, 0x53, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x04, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x54, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x05,
-0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x55, 0xF0, 0xEF, 0x75, 0xF0, 0x08,
-0xA4, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x56, 0xF0, 0xEF,
-0x75, 0xF0, 0x08, 0xA4, 0x24, 0x07, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD,
-0x57, 0xF0, 0xA3, 0x74, 0x01, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0xFE, 0x10, 0x60, 0x05, 0xE0,
-0x44, 0x01, 0xF0, 0x22, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x15,
-0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E,
-0xF6, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x10,
-0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x15,
-0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x12, 0x1E,
-0xF6, 0xFC, 0x54, 0x80, 0xFF, 0x90, 0x93, 0x15, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x00, 0x03,
-0x12, 0x1F, 0x0F, 0xFD, 0x54, 0x01, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xED,
-0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFD, 0x54,
-0x04, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xFB, 0x4F, 0xF0, 0xED, 0x54, 0x10, 0xFF, 0xE0, 0x54,
-0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x18,
-0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00,
-0x03, 0x12, 0x1F, 0x0F, 0x54, 0x80, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90,
-0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xDF, 0x4E,
-0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F,
-0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x10, 0xFF,
-0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x04, 0xFE, 0x90,
-0x93, 0x19, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54, 0xF7, 0x4F, 0xF0,
-0xEC, 0x20, 0xE0, 0x02, 0x81, 0xC3, 0x90, 0x05, 0x54, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x25, 0xF0,
-0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1C, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8,
-0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x16, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
-0x90, 0x93, 0x17, 0xF0, 0x80, 0x4E, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12,
-0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03, 0x90, 0x93, 0x16, 0x50,
-0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x93, 0x16, 0x74, 0x2A, 0xF0,
-0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03,
-0x90, 0x93, 0x17, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x93,
-0x17, 0x74, 0x2A, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x3D,
-0x90, 0x93, 0x16, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x1E, 0xF0, 0xE0, 0xC3, 0x13, 0xA3,
-0xF0, 0x90, 0x93, 0x17, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x20, 0xF0, 0x90, 0x93, 0x16,
-0xE0, 0xC3, 0x13, 0x90, 0x93, 0x21, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x22,
-0xF0, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0xAD, 0xE4, 0x90, 0x93,
-0x11, 0xF0, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x20, 0xE0, 0x14, 0x12, 0x1E, 0xF6, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0,
-0x04, 0x7F, 0x01, 0x80, 0x02, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54,
-0x0F, 0x30, 0xE0, 0x18, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x03, 0x75,
-0x64, 0x04, 0x90, 0x05, 0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x11, 0xF0, 0x90, 0x05, 0x58, 0x74,
-0x03, 0xF0, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x27, 0x74, 0x01, 0xF0, 0x80,
-0x2B, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x04, 0x08, 0x90, 0x93, 0x27, 0x74, 0x04, 0xF0, 0x80, 0x1C,
-0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x06, 0x08, 0x90, 0x93, 0x27, 0x74, 0x02, 0xF0, 0x80, 0x0D, 0x90,
-0x93, 0x1D, 0xE0, 0xB4, 0x07, 0x06, 0x90, 0x93, 0x27, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x1D,
-0xF0, 0x80, 0x64, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0x13, 0x13, 0x13,
-0x54, 0x1F, 0x90, 0x93, 0x83, 0x30, 0xE0, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x80,
-0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0xB1, 0x5F, 0x90, 0x00, 0x40, 0x74, 0x20, 0xF0,
-0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x13, 0x13, 0x13, 0x54,
-0x1F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0x7B,
-0x01, 0x7A, 0x93, 0x79, 0x83, 0x12, 0x55, 0x67, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x05, 0x00,
-0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x43, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0x90,
-0x93, 0x26, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x09,
-0x90, 0x93, 0x04, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x0C, 0x7F, 0x01, 0x12, 0x55, 0xB2, 0x90, 0x93,
-0x04, 0xE0, 0x54, 0xFD, 0xF0, 0x7F, 0x03, 0x12, 0x5E, 0xE6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
-0x93, 0x15, 0xE0, 0x54, 0xFE, 0xF0, 0xA3, 0x74, 0x0B, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xE4, 0x90,
-0x93, 0x26, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0,
-0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0,
-0x90, 0x93, 0x18, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0,
-0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0xA3,
-0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x93, 0x28, 0x74,
-0x02, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF,
-0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x25, 0xF0, 0x90, 0x93, 0x1C, 0xE0, 0x54, 0xFE, 0xF0, 0xE4,
-0x90, 0x93, 0x23, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x29, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x1C, 0xE0,
-0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54,
-0xFB, 0xF0, 0xE0, 0x54, 0xF7, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xE1,
-0xF0, 0x22, 0x90, 0x93, 0x04, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0x54, 0xFD, 0xF0, 0x54,
-0xF7, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0x12, 0x1F, 0xD5, 0x20, 0x08, 0x30, 0x70, 0x90,
-0x93, 0x0B, 0x12, 0x1F, 0xD5, 0xC0, 0x08, 0x30, 0x70, 0xE4, 0x90, 0x93, 0x11, 0xF0, 0xA3, 0xF0,
-0x43, 0xE8, 0x04, 0x90, 0xFD, 0x68, 0x74, 0x02, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x44, 0x10, 0xF0,
-0x90, 0x07, 0x83, 0xE4, 0xF0, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x04, 0x64, 0xE4, 0xF0,
-0x90, 0x00, 0x40, 0x74, 0x20, 0xF0, 0xB1, 0x5F, 0x90, 0x93, 0x2C, 0x74, 0x01, 0xF0, 0x7D, 0x04,
-0x7F, 0x02, 0x02, 0x3A, 0xAD, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43,
-0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x24, 0x02, 0x73, 0x74, 0x12, 0x1E,
-0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02,
-0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x1A,
-0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54, 0xF7, 0x4F, 0xF0, 0x90, 0x00,
-0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x1B, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90,
-0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x03, 0x7F, 0x26, 0x02,
-0x73, 0x74, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0xB0, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0xAE,
-0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0xAF, 0xF0, 0x22, 0xE4, 0x90, 0x94, 0x46,
-0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xEB, 0xE0, 0x54, 0xC0, 0x60, 0x43, 0xC3, 0x90, 0x94, 0x47, 0xE0,
-0x94, 0x88, 0x90, 0x94, 0x46, 0xE0, 0x94, 0x13, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x04,
-0xF0, 0x7F, 0x00, 0x22, 0x90, 0x94, 0x46, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14,
-0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x94, 0x47, 0xE0, 0x94, 0x64, 0x90, 0x94, 0x46, 0xE0,
-0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE2, 0xB8, 0x7F, 0x00, 0x22, 0x7F, 0x01,
-0x22, 0x90, 0x93, 0xE2, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xE6, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00,
-0x00, 0xE4, 0x7F, 0x1F, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0xE6, 0x12, 0x43, 0x90, 0xD3, 0x12, 0x43,
-0x73, 0x50, 0x41, 0x90, 0x93, 0xE6, 0x12, 0x43, 0x84, 0xA9, 0x07, 0x90, 0x93, 0xE2, 0x12, 0x43,
-0x84, 0xA8, 0x01, 0x12, 0x1F, 0xA3, 0xEF, 0x54, 0x01, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0x7B, 0x01,
-0xFA, 0xF9, 0xF8, 0xC3, 0x12, 0x43, 0x73, 0x60, 0x1B, 0x90, 0x93, 0xE6, 0x12, 0x43, 0x84, 0xEF,
-0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, 0x93, 0xE6, 0x12,
-0x1F, 0xC9, 0x80, 0xAD, 0x90, 0x93, 0xE6, 0x02, 0x43, 0x84, 0x90, 0x93, 0xB4, 0x12, 0x1F, 0xC9,
-0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0xB8, 0x12, 0x43, 0x90, 0xC3, 0x12, 0x43, 0x73,
-0x90, 0x93, 0xB4, 0x60, 0x67, 0x12, 0x43, 0x84, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0xC0, 0x12, 0x1F,
-0xC9, 0x90, 0x93, 0xB8, 0x12, 0x43, 0x84, 0xF1, 0x51, 0x90, 0x93, 0xC4, 0x12, 0x1F, 0xC9, 0x90,
-0x93, 0xB8, 0x12, 0x43, 0x84, 0x12, 0x43, 0x66, 0x90, 0x93, 0xC0, 0x12, 0x43, 0x90, 0x12, 0x43,
-0x4C, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0xC4, 0x12, 0x43, 0x84, 0xA9,
-0x07, 0x90, 0x93, 0xBC, 0x12, 0x43, 0x84, 0xA8, 0x01, 0x12, 0x1F, 0xB6, 0xD0, 0x03, 0xD0, 0x02,
-0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0x59, 0x90, 0x93, 0xC8, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB4,
-0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0xC8, 0x80, 0x0A, 0x12, 0x43, 0x84, 0xC0,
-0x06, 0xC0, 0x07, 0x90, 0x93, 0xBC, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0xD0,
-0x07, 0xD0, 0x06, 0x02, 0x34, 0x30, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xEA,
-0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xEE, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00,
-0x00, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x93,
-0x4A, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x14,
-0x12, 0x51, 0xBB, 0xBF, 0x01, 0x0B, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x30, 0xE0,
-0x03, 0x12, 0x4F, 0xB8, 0x90, 0x93, 0x2D, 0xE0, 0x20, 0xE0, 0x24, 0x90, 0x93, 0x47, 0xE0, 0x60,
-0x1E, 0x7F, 0x01, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x5B, 0xE0, 0x60, 0x13, 0x90, 0x93, 0xEE, 0x12,
-0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xEE, 0x12, 0x55, 0x67, 0x12,
-0x54, 0x4B, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94,
-0x4E, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x47, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80,
-0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46, 0xE0, 0x5F, 0xF0, 0x12, 0x54, 0x52,
-0x90, 0x94, 0x4E, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33,
-0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8,
-0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4C, 0x90,
-0x94, 0x4E, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3,
-0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x62, 0xE0, 0x5F, 0xF0, 0x12, 0x54, 0x52, 0x90, 0x94,
-0x4E, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
-0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x60, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08,
-0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x94, 0x3E, 0xE0,
-0x54, 0xFE, 0x4F, 0xF0, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x44, 0xFE, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xA8, 0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
-0x94, 0x3F, 0xF0, 0x22, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x0A, 0xF0, 0x90, 0xFD, 0x60,
-0xE0, 0x90, 0x93, 0x6E, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6F, 0xF0, 0x90, 0xFD, 0x63,
-0xE0, 0x90, 0x93, 0x70, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0x71, 0xF0, 0x90, 0xFD, 0x65,
-0xE0, 0x90, 0x93, 0x72, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90, 0x93, 0x6C, 0x30, 0xE6, 0x08, 0xE0,
-0x54, 0x0F, 0x44, 0x50, 0xF0, 0x80, 0x16, 0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0xFD, 0x66,
-0xE0, 0x90, 0x93, 0x73, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0x74, 0xF0, 0x7B, 0x01, 0x7A,
-0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x66, 0x89,
-0xAD, 0x07, 0x90, 0x93, 0xFA, 0xE0, 0x54, 0xF0, 0x44, 0x0C, 0xF0, 0x54, 0x0F, 0xF0, 0x90, 0xFD,
-0x62, 0xE0, 0x90, 0x93, 0xFC, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93, 0xFD, 0xF0, 0x90, 0xFD,
-0x64, 0xE0, 0x90, 0x93, 0xFE, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0xFF, 0xF0, 0x90, 0xFD,
-0x66, 0xE0, 0x90, 0x94, 0x00, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x94, 0x01, 0xF0, 0xED, 0xB4,
-0x02, 0x0B, 0x90, 0x93, 0xFA, 0xE0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x80, 0x3C, 0xED, 0xB4, 0x04,
-0x0B, 0x90, 0x93, 0xFA, 0xE0, 0x54, 0x0F, 0x44, 0x60, 0xF0, 0x80, 0x2D, 0xED, 0xF4, 0x70, 0x29,
-0x90, 0x93, 0xFA, 0xE0, 0x54, 0x0F, 0x44, 0x60, 0xF0, 0x90, 0x93, 0x2C, 0xE0, 0x60, 0x08, 0x90,
-0x93, 0xFC, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x93, 0xFC, 0xF0, 0xE4, 0x90, 0x93, 0xFD,
-0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xFC, 0x90,
-0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0xFA, 0x02, 0x66, 0x89, 0xAD, 0x07, 0x90, 0x93,
-0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x0E, 0xF0, 0x54, 0x0F, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93,
-0x6F, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93, 0x70, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93,
-0x71, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0x72, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93,
-0x73, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0x74, 0xF0, 0xED, 0xB4, 0x01, 0x11, 0x90, 0x93,
-0x6C, 0xE0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x6E, 0x74, 0x01, 0xF0, 0x80, 0x13, 0xED,
-0xB4, 0x02, 0x0F, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0x93, 0x6E, 0x74,
-0x02, 0xF0, 0x90, 0x93, 0x6C, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x60, 0x13, 0x7B, 0x01, 0x7A, 0x93,
-0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x12, 0x66, 0x89, 0x22,
-0x90, 0x93, 0x47, 0xE0, 0x60, 0x27, 0x90, 0x93, 0x4A, 0xE0, 0x70, 0x21, 0x90, 0x93, 0x18, 0xE0,
-0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x93, 0x44,
-0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74, 0x0D, 0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93,
-0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x02, 0xA1, 0x16, 0x90, 0x93, 0x1D, 0xE0,
-0x64, 0x01, 0x70, 0x39, 0x90, 0x06, 0x92, 0xE0, 0x20, 0xE2, 0x06, 0x90, 0x94, 0x4B, 0xE0, 0x60,
-0x21, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x29, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94,
-0x4B, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02,
-0xA1, 0x01, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x90, 0x93, 0x27, 0x04, 0xF0, 0x22, 0x90, 0x93, 0x1D,
-0xE0, 0x64, 0x04, 0x70, 0x3A, 0x90, 0x06, 0x92, 0xE0, 0x20, 0xE2, 0x06, 0x90, 0x94, 0x4B, 0xE0,
-0x60, 0x21, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x29, 0xE0, 0x04, 0xF0, 0xE4, 0x90,
-0x94, 0x4B, 0xF0, 0x90, 0x93, 0x20, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0xB5, 0x07, 0x02, 0x80,
-0x02, 0xA1, 0x01, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x90, 0x93, 0x27, 0x74, 0x04, 0xF0, 0x22, 0x90,
-0x93, 0x1D, 0xE0, 0x64, 0x06, 0x60, 0x02, 0x81, 0xC5, 0x90, 0x93, 0x2A, 0xE0, 0xB4, 0x04, 0x0F,
-0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x27, 0x30, 0xE0, 0x4E, 0xA1, 0x13, 0x90,
-0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x45, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3,
-0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x02, 0x81, 0xD4, 0x90, 0x93, 0x2A,
-0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12,
-0x1F, 0x3C, 0x90, 0x93, 0x21, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE,
-0x64, 0x80, 0x94, 0x80, 0x90, 0x93, 0x27, 0x40, 0x02, 0xA1, 0x13, 0x74, 0x02, 0xF0, 0x22, 0x90,
-0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4E, 0x27, 0x90, 0x93, 0x2A, 0xE0, 0x04, 0xF0,
-0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90,
-0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x2A, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0x2F, 0xFF,
-0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x21, 0xE0, 0x2F, 0xFF,
-0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x40, 0x58, 0x90, 0x07,
-0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x07, 0x70, 0x49, 0x90, 0x93, 0x2A,
-0xE0, 0xB4, 0x04, 0x05, 0x90, 0x93, 0x27, 0x80, 0x3A, 0x90, 0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54,
-0x3F, 0x30, 0xE0, 0x0C, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x27, 0x80, 0x23,
-0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4E, 0x27, 0x90, 0x93, 0x2A, 0xE0, 0x04,
-0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77,
-0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x64, 0x01, 0x70, 0x3C, 0x90, 0x93, 0x15, 0xE0,
-0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x07, 0x90, 0x07, 0x78, 0x74, 0x0D, 0xF0, 0x22, 0x90,
-0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x90, 0x07,
-0x78, 0x30, 0xE0, 0x24, 0x80, 0x0E, 0x90, 0x93, 0x18, 0xE0, 0xC3, 0x13, 0x90, 0x07, 0x78, 0x30,
-0xE0, 0x02, 0x80, 0x14, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x13,
-0x54, 0x01, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x04, 0x74, 0x03, 0xF0, 0x22, 0x74, 0x01, 0xF0, 0x22,
-0xE4, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x12, 0x90, 0x93,
-0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x2A, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x21,
-0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x06, 0x92,
-0x74, 0x04, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x93, 0x29, 0xF0, 0x90, 0x93,
-0x27, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x5D, 0xE0, 0xFF, 0x90, 0x93, 0x16, 0xE0,
-0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93,
-0x27, 0x74, 0x01, 0xF0, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x26, 0x74, 0x01, 0xF0,
-0x90, 0x93, 0x4C, 0xE0, 0x60, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90, 0x05,
-0x22, 0xE4, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93,
-0x15, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x51, 0x48, 0xE4, 0x90, 0x94,
-0x4B, 0xF0, 0x22, 0x00, 0x8C, 0xC1,
-};
-
-
-u8 Rtl8723UFwUMCBCutImgArrayWithoutBT[Rtl8723UUMCBCutImgArrayWithoutBTLength] = {
-0x02, 0x23, 0x02, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x02, 0x01, 0x10, 0x06, 0xE0, 0x4A, 0x01, 0x00,
-0x03, 0x21, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x02, 0x4A, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x59, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x61, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x61, 0xDA, 0x00, 0x00,
-0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03, 0x00, 0x04, 0x06, 0x05, 0x04, 0x02,
-0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09, 0x08, 0x06, 0x00, 0x08, 0x0A, 0x09,
-0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x00, 0x00, 0x08,
-0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10, 0x00, 0x18, 0x22, 0x21, 0x20, 0x18,
-0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21, 0x20, 0x08, 0x00, 0x20, 0x22, 0x21,
-0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20, 0x22, 0x20, 0x18, 0x08, 0x00, 0x20,
-0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00, 0x00, 0x30, 0x31, 0x2F, 0x10, 0x10,
-0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28, 0x10, 0x00, 0x00, 0x30, 0x31, 0x20,
-0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04,
-0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05,
-0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05, 0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E,
-0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E,
-0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A,
-0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F, 0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04,
-0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60,
-0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78, 0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40,
-0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40, 0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8,
-0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0C,
-0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x6C, 0x00, 0x28,
-0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8, 0x00, 0xF0, 0x01, 0x18, 0x00, 0x64,
-0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58, 0x03, 0x20, 0x03, 0xE8, 0x02, 0x02,
-0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07, 0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E,
-0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
-0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x05, 0x06,
-0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0xBB, 0x01, 0x0F, 0xF8, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x28,
-0xF0, 0x22, 0x50, 0x09, 0xC5, 0x82, 0x29, 0xF8, 0xE5, 0x82, 0x26, 0xF6, 0x22, 0xBB, 0xFE, 0x09,
-0xC5, 0x82, 0x29, 0xF8, 0xE2, 0x25, 0x82, 0xF2, 0x22, 0xF8, 0xEA, 0x25, 0x83, 0xF5, 0x83, 0xE9,
-0x93, 0x28, 0x22, 0xBB, 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22,
-0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8, 0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83,
-0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22, 0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE,
-0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0,
-0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A,
-0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7,
-0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3, 0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83,
-0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01, 0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82,
-0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82,
-0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22, 0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0,
-0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A, 0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22,
-0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7,
-0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB, 0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8,
-0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5,
-0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB,
-0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x5B, 0xFF, 0xEE,
-0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED,
-0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, 0xCF, 0xF4, 0xCF, 0xCE, 0xF4, 0xCE, 0xCD, 0xF4, 0xCD, 0xCC,
-0xF4, 0xCC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8,
-0x9C, 0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22,
-0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5,
-0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9,
-0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82, 0x15, 0x82, 0x70,
-0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0,
-0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3,
-0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68,
-0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12,
-0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83,
-0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60, 0xE9, 0xA3, 0xA3,
-0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0x90, 0x93, 0x07, 0xF0, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x44, 0xDD,
-0x90, 0x93, 0x51, 0xE0, 0x60, 0x11, 0xE4, 0xF0, 0x53, 0x66, 0xFD, 0xE5, 0x66, 0x54, 0x07, 0x60,
-0x03, 0x02, 0x44, 0xDD, 0x02, 0x44, 0xDA, 0x90, 0x93, 0x38, 0xE0, 0x04, 0xF0, 0x53, 0x66, 0xEF,
-0x90, 0x93, 0x4F, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
-0x30, 0xE0, 0x3A, 0x90, 0x93, 0x4F, 0xE0, 0xFF, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0x0F, 0xB5, 0x07,
-0x0A, 0x90, 0x93, 0x30, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x80, 0x22, 0x90, 0x93, 0x2D, 0xE0, 0xC4,
-0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93, 0x4F, 0xE0, 0xB5,
-0x07, 0x0B, 0xE4, 0xB5, 0x06, 0x07, 0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x2D,
-0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x06, 0x90, 0x93, 0x07, 0x74, 0x5A, 0xF0,
-0x90, 0x93, 0x07, 0xE0, 0xFF, 0x90, 0x93, 0x3F, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93,
-0x38, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x40, 0x0D, 0xE5, 0x62, 0xB4,
-0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12, 0x51, 0x9C, 0x22, 0xEF, 0x60,
-0x0F, 0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22,
-0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x02,
-0x55, 0xE5, 0x22, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0xE4, 0x90, 0x93, 0x01, 0xF0, 0xA3, 0x12,
-0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x46, 0xAB, 0xE5, 0x62, 0x64,
-0x01, 0x60, 0x03, 0x02, 0x46, 0xAB, 0xE5, 0x65, 0x14, 0x60, 0x29, 0x24, 0xFD, 0x60, 0x25, 0x24,
-0x02, 0x24, 0xFB, 0x50, 0x02, 0x80, 0x23, 0x90, 0x93, 0x37, 0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04,
-0xA3, 0xE0, 0x60, 0x16, 0x90, 0x93, 0x37, 0xE0, 0x70, 0x0A, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x93,
-0x37, 0xF0, 0x80, 0x00, 0x90, 0x93, 0x01, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0,
-0x16, 0xA3, 0xE0, 0xB4, 0x06, 0x05, 0xE4, 0x90, 0x93, 0x01, 0xF0, 0xE4, 0xFF, 0x12, 0x5E, 0x91,
-0xEF, 0x70, 0x04, 0x90, 0x93, 0x01, 0xF0, 0x90, 0x93, 0x01, 0xE0, 0x70, 0x03, 0x02, 0x46, 0x9B,
-0x43, 0x66, 0x10, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x44,
-0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0xC3, 0x9F, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90,
-0x93, 0x2E, 0x80, 0x2D, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F,
-0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93, 0x4F, 0xE0, 0xC3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80,
-0x98, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x31, 0x80, 0x06, 0xE4, 0xF5, 0x48, 0x90, 0x93,
-0x2E, 0xE0, 0x80, 0x2D, 0x90, 0x93, 0x4F, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4,
-0xF5, 0x48, 0x90, 0x93, 0x4F, 0xE0, 0xFF, 0x90, 0x93, 0x46, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5,
-0x48, 0x90, 0x93, 0x4F, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x46, 0xE0, 0x04,
-0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57,
-0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04,
-0x12, 0x48, 0xF4, 0xE5, 0x63, 0x64, 0x0C, 0x60, 0x6F, 0x90, 0x93, 0x2B, 0xE0, 0xFF, 0x90, 0x93,
-0x4F, 0xE0, 0xD3, 0x9F, 0x40, 0x08, 0x90, 0x93, 0x2C, 0xE0, 0x04, 0xF0, 0x80, 0x05, 0xE4, 0x90,
-0x93, 0x2C, 0xF0, 0x90, 0x93, 0x4F, 0xE0, 0x90, 0x93, 0x2B, 0xF0, 0xA3, 0xE0, 0xC3, 0x94, 0x05,
-0x40, 0x46, 0xE4, 0xF0, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x4D, 0xE0, 0x70, 0x03,
-0x12, 0x4F, 0x63, 0x90, 0x93, 0x50, 0xE0, 0x64, 0x02, 0x70, 0x21, 0x12, 0x48, 0xF0, 0xE4, 0xF5,
-0x48, 0x90, 0x93, 0x3C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39,
-0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x4C, 0x80, 0x09, 0x43, 0x66, 0x01, 0x12,
-0x51, 0x2B, 0x90, 0x93, 0x48, 0x74, 0x01, 0xF0, 0x12, 0x51, 0x4C, 0x90, 0x93, 0x98, 0xE0, 0x30,
-0xE0, 0x09, 0x12, 0x67, 0x4A, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x07,
-0xF0, 0xA3, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x47, 0xA2,
-0xE5, 0x62, 0x64, 0x01, 0x60, 0x03, 0x02, 0x47, 0xA2, 0x90, 0x93, 0x07, 0x04, 0xF0, 0xE4, 0x90,
-0x93, 0x37, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x16, 0xA3, 0xE0, 0xB4, 0x06, 0x05, 0xE4,
-0x90, 0x93, 0x07, 0xF0, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x70, 0x04, 0x90, 0x93, 0x07, 0xF0,
-0x90, 0x93, 0x07, 0xE0, 0x70, 0x03, 0x02, 0x47, 0xA2, 0x43, 0x66, 0x10, 0x90, 0x93, 0x2D, 0xE0,
-0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x32, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x4F,
-0xE0, 0xD3, 0x9F, 0x50, 0x09, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x2E, 0xE0, 0x80, 0x4A, 0xE4, 0xF5,
-0x48, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0xC3, 0x9F, 0x75, 0xF0,
-0x03, 0xA4, 0xFF, 0x90, 0x93, 0x2E, 0xE0, 0x04, 0x2F, 0x80, 0x2D, 0x90, 0x93, 0x4F, 0xE0, 0x64,
-0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x4F, 0xE0, 0xFF, 0x90, 0x93,
-0x46, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x4F, 0xE0, 0x14, 0x75, 0xF0, 0x03,
-0xA4, 0xFF, 0x90, 0x93, 0x46, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E,
-0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94,
-0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x48, 0xF4, 0x12, 0x51, 0x4C, 0x90, 0x05, 0x22,
-0xE4, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x09, 0x12, 0x67, 0x4A, 0x90, 0x05, 0x22, 0x74,
-0xFF, 0xF0, 0x22, 0xE4, 0xF5, 0x66, 0xF5, 0x65, 0x75, 0x64, 0x0C, 0x75, 0x63, 0x0C, 0x90, 0x93,
-0x50, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x90, 0x93, 0x49, 0xF0, 0x90, 0x93, 0x4E, 0x04, 0xF0, 0x90,
-0x93, 0x37, 0xF0, 0xE4, 0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x39, 0xF0, 0x90, 0x93, 0x46, 0x74,
-0x05, 0xF0, 0xE4, 0x90, 0x93, 0x38, 0xF0, 0x90, 0x93, 0x44, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90,
-0x93, 0x3F, 0xF0, 0x90, 0x93, 0x42, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x3C, 0x74, 0x14, 0xF0, 0x90,
-0x93, 0x47, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x3A, 0xF0, 0x90, 0x93, 0x33, 0xF0, 0x90, 0x93,
-0x71, 0xF0, 0x90, 0x93, 0x43, 0xF0, 0x90, 0x93, 0x53, 0xF0, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x93,
-0x34, 0xF0, 0x90, 0x93, 0x4D, 0xF0, 0x90, 0x93, 0x3E, 0xF0, 0x90, 0x93, 0x3B, 0xF0, 0x90, 0x93,
-0x48, 0xF0, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x93, 0x3D, 0xF0, 0x90, 0x93, 0x52, 0xF0, 0x90, 0x93,
-0x40, 0xF0, 0x90, 0x93, 0x70, 0xE0, 0xB4, 0x02, 0x05, 0x90, 0x00, 0x93, 0xE4, 0xF0, 0x90, 0x93,
-0x2D, 0xE0, 0x54, 0x7F, 0xF0, 0xE0, 0x54, 0xF0, 0xF0, 0xE0, 0x54, 0x8F, 0xF0, 0xE4, 0xA3, 0xF0,
-0xA3, 0xF0, 0x90, 0x93, 0x31, 0xF0, 0x90, 0x93, 0x30, 0xF0, 0x22, 0x8E, 0x69, 0x8F, 0x6A, 0xAD,
-0x6A, 0xAC, 0x69, 0xAF, 0x68, 0x12, 0x44, 0xDE, 0xAF, 0x6A, 0xAE, 0x69, 0x90, 0x04, 0x80, 0xE0,
-0x54, 0x0F, 0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
-0x44, 0x01, 0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xFB,
-0xF0, 0xAC, 0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0xFA,
-0xF0, 0x74, 0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F, 0xF0, 0xAC,
-0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F, 0xF0, 0x90,
-0x04, 0x53, 0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0, 0x90, 0x04,
-0x50, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54,
-0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED, 0xF0, 0x22,
-0x7D, 0x01, 0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x6C, 0x8D, 0x6D, 0xE5,
-0x6C, 0x54, 0x0F, 0xFF, 0xE5, 0x63, 0x54, 0x0F, 0x6F, 0x60, 0x72, 0xE5, 0x6C, 0x30, 0xE2, 0x30,
-0xE5, 0x63, 0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x51, 0x69, 0xE5, 0x63, 0x30, 0xE3, 0x10, 0xE5,
-0x6C, 0x20, 0xE3, 0x0B, 0x12, 0x4D, 0x9D, 0xEF, 0x60, 0x53, 0x12, 0x51, 0x05, 0x80, 0x4E, 0xE5,
-0x63, 0x20, 0xE3, 0x49, 0xE5, 0x6C, 0x30, 0xE3, 0x44, 0xAF, 0x6D, 0x12, 0x50, 0x8A, 0x80, 0x3D,
-0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x6C, 0x20, 0xE3, 0x09, 0x12, 0x4D, 0x9D,
-0xEF, 0x60, 0x2A, 0x12, 0x51, 0x05, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x04, 0x0E, 0xE5, 0x6C,
-0x20, 0xE2, 0x09, 0x12, 0x4B, 0x16, 0xEF, 0x60, 0x14, 0x12, 0x50, 0xB3, 0xE5, 0x63, 0x54, 0x0F,
-0xFF, 0xBF, 0x02, 0x09, 0x12, 0x4C, 0x72, 0xEF, 0x60, 0x03, 0x12, 0x51, 0xB0, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0xE4, 0x90, 0x93, 0x01, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x93, 0x01, 0xF0, 0xE0,
-0x54, 0xC0, 0x70, 0x11, 0x90, 0x93, 0x48, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0x53, 0x66, 0xFD,
-0x12, 0x51, 0x9C, 0x80, 0x0F, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x4D, 0xE0, 0x70,
-0x03, 0x12, 0x4F, 0x63, 0x90, 0x93, 0x01, 0xE0, 0x30, 0xE6, 0x15, 0x43, 0x66, 0x01, 0x90, 0x93,
-0x50, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x51, 0x2B, 0x80, 0x0E, 0x12, 0x4F, 0x1D, 0x80, 0x09,
-0x90, 0x93, 0x48, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0xE4, 0x90, 0x93, 0x48, 0xF0, 0x90, 0x93,
-0x01, 0xE0, 0x30, 0xE7, 0x23, 0x43, 0x66, 0x02, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x42, 0xE0, 0xF5,
-0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05,
-0xF0, 0x90, 0x93, 0x51, 0x74, 0x01, 0xF0, 0x22, 0x53, 0x66, 0xFD, 0x22, 0xEF, 0x64, 0x01, 0x70,
-0x48, 0x7D, 0x78, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x22, 0x90,
-0x01, 0x36, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12,
-0x3A, 0x3F, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x48, 0xF0,
-0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x67, 0x4A, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F,
-0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36, 0x74, 0x7B, 0xF0, 0xA3,
-0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x3A, 0x93, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93,
-0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x06,
-0x0A, 0xE0, 0x44, 0x07, 0xF0, 0x12, 0x4E, 0x3E, 0xE5, 0x62, 0x20, 0xE0, 0x05, 0xE4, 0x90, 0x93,
-0x39, 0xF0, 0x22, 0x02, 0x4A, 0xD1, 0x02, 0x52, 0xA5, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3,
-0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54,
-0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4,
-0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40,
-0x80, 0x90, 0x4F, 0xE3, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5,
-0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60,
-0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5,
-0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA,
-0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0x12, 0x51, 0x83, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01,
-0xB9, 0x74, 0x01, 0xF0, 0x80, 0x61, 0xE5, 0x66, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74,
-0x02, 0xF0, 0x80, 0x53, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x08, 0x90, 0x01, 0xB9,
-0x74, 0x04, 0xF0, 0x80, 0x42, 0xE5, 0x66, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0,
-0x80, 0x35, 0xE5, 0x66, 0x30, 0xE4, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x28, 0x90,
-0x93, 0x39, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x1A, 0x90, 0x93, 0x43,
-0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x80, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0,
-0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F, 0x00, 0x22,
-0xE5, 0x62, 0x64, 0x01, 0x70, 0x6B, 0xE5, 0x65, 0x60, 0x67, 0xE5, 0x65, 0x64, 0x02, 0x60, 0x06,
-0xE5, 0x65, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x93, 0x37, 0xF0, 0x90, 0x06,
-0xAA, 0xE0, 0x90, 0x93, 0x4E, 0xF0, 0x90, 0x93, 0x37, 0xE0, 0x70, 0x07, 0x90, 0x93, 0x4E, 0xE0,
-0xFF, 0x80, 0x05, 0x90, 0x93, 0x37, 0xE0, 0xFF, 0x90, 0x93, 0x37, 0xEF, 0xF0, 0x90, 0x93, 0x39,
-0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x38, 0xF0, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x05,
-0x58, 0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x53,
-0x66, 0xFD, 0x53, 0x66, 0xEF, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x03, 0x12, 0x49,
-0x82, 0x22, 0x90, 0x93, 0x70, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x91, 0x80, 0x0C, 0x90, 0x93, 0x70,
-0xE0, 0x70, 0x04, 0x7D, 0xD4, 0x80, 0x02, 0x7D, 0x40, 0x7F, 0x93, 0x12, 0x53, 0xB6, 0x90, 0x00,
-0x29, 0xE0, 0x54, 0x3F, 0xFD, 0x7F, 0x29, 0x12, 0x53, 0xB6, 0x90, 0x00, 0x28, 0xE0, 0x54, 0xFC,
-0xFD, 0x7F, 0x28, 0x12, 0x53, 0xB6, 0x90, 0x00, 0x08, 0xE0, 0x44, 0x10, 0xFD, 0x7F, 0x08, 0x12,
-0x53, 0xB6, 0x7F, 0x01, 0x12, 0x4D, 0x45, 0x90, 0x00, 0x00, 0xE0, 0x44, 0x20, 0xFD, 0xE4, 0xFF,
-0x12, 0x53, 0xB6, 0x90, 0x00, 0x20, 0xE0, 0x54, 0xFE, 0xFD, 0x7F, 0x20, 0x12, 0x53, 0xB6, 0x90,
-0x00, 0x90, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x53, 0xB6, 0x7F, 0x14, 0x7E, 0x00, 0x02,
-0x3B, 0x09, 0x12, 0x51, 0x83, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0,
-0x80, 0x54, 0xE5, 0x18, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x48, 0xE5, 0x64,
-0x54, 0x0F, 0xD3, 0x94, 0x01, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x37, 0x90,
-0x02, 0x87, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x29, 0x90, 0x02, 0x86,
-0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x1A, 0x90, 0x93, 0x3A, 0xE0,
-0x70, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90,
-0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x02, 0xF0, 0x7F, 0x00, 0x22, 0x90,
-0x93, 0x21, 0x12, 0x43, 0xC8, 0x12, 0x51, 0xC3, 0x90, 0x93, 0x21, 0x12, 0x43, 0xA8, 0x12, 0x1E,
-0xF6, 0xF5, 0x65, 0x14, 0x60, 0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03, 0x70, 0x44,
-0x7F, 0x01, 0x80, 0x3D, 0x90, 0x93, 0x21, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
-0xFD, 0xE4, 0xFF, 0x12, 0x4F, 0xA5, 0x80, 0x29, 0x90, 0x93, 0x21, 0x12, 0x43, 0xA8, 0x90, 0x00,
-0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x01, 0x12, 0x4F, 0xA5, 0x1F, 0x80, 0x14, 0x90, 0x93, 0x21,
-0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x02, 0x12, 0x4F, 0xA5, 0xE4,
-0xFF, 0x12, 0x4A, 0x0C, 0x22, 0x8F, 0x70, 0xE4, 0x90, 0x93, 0xE3, 0xF0, 0xA3, 0xF0, 0x90, 0x01,
-0x09, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0xEF, 0x65, 0x70, 0x60, 0x3E, 0xC3, 0x90,
-0x93, 0xE4, 0xE0, 0x94, 0x88, 0x90, 0x93, 0xE3, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6,
-0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0xE3, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F,
-0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0xE4, 0xE0, 0x94, 0x32, 0x90, 0x93, 0xE3,
-0xE0, 0x94, 0x00, 0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE0, 0xB2, 0x22, 0x12, 0x51, 0x83,
-0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x39, 0x90, 0x93, 0x4C,
-0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x2B, 0x90, 0x93, 0x49, 0xE0, 0x60,
-0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x1D, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x04,
-0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90,
-0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x7F, 0x00, 0x22, 0x90,
-0x00, 0x20, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x20, 0x12, 0x53, 0xB6, 0x7F, 0xF4, 0x7E, 0x01, 0x12,
-0x3B, 0x09, 0x90, 0x00, 0x00, 0xE0, 0x54, 0xDF, 0xFD, 0xE4, 0xFF, 0x12, 0x53, 0xB6, 0x90, 0x00,
-0x28, 0xE0, 0x44, 0x03, 0xFD, 0x7F, 0x28, 0x12, 0x53, 0xB6, 0x90, 0x00, 0x08, 0xE0, 0x54, 0xEF,
-0xFD, 0x7F, 0x08, 0x12, 0x53, 0xB6, 0xE4, 0xFF, 0x12, 0x4D, 0x45, 0x7F, 0x64, 0x7E, 0x00, 0x12,
-0x3B, 0x09, 0x90, 0x00, 0x29, 0xE0, 0x44, 0xC0, 0xFD, 0x7F, 0x29, 0x02, 0x53, 0xB6, 0xE4, 0xFF,
-0x90, 0x00, 0x6A, 0xE0, 0x30, 0xE2, 0x22, 0xE0, 0x30, 0xE0, 0x20, 0xE0, 0x30, 0xE1, 0x0D, 0x90,
-0x00, 0x60, 0xE0, 0x7F, 0x02, 0x30, 0xE3, 0x13, 0x7F, 0x03, 0x80, 0x0F, 0x90, 0x00, 0x60, 0xE0,
-0x7F, 0x03, 0x30, 0xE3, 0x06, 0x7F, 0x02, 0x80, 0x02, 0x7F, 0x03, 0xEF, 0xFD, 0xD3, 0x90, 0x93,
-0x45, 0xE0, 0x9D, 0x90, 0x93, 0x44, 0xE0, 0x94, 0x00, 0x50, 0x05, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0,
-0x90, 0x93, 0x44, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
-0xC0, 0xD0, 0x8F, 0x68, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x6B,
-0x74, 0xFF, 0xF0, 0x12, 0x8A, 0x65, 0xBF, 0x01, 0x0D, 0x90, 0x93, 0x69, 0xE0, 0xFF, 0x7D, 0x01,
-0x12, 0x58, 0x95, 0x12, 0x48, 0x5B, 0x90, 0x05, 0x22, 0xE5, 0x6B, 0xF0, 0x80, 0x0D, 0x90, 0x93,
-0x69, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x95, 0x12, 0x48, 0x5B, 0x90, 0x04, 0x1F, 0x74, 0x20,
-0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x3D, 0x90,
-0x93, 0x50, 0xE0, 0x60, 0x27, 0x12, 0x48, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3C, 0xE0, 0xF5,
-0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05,
-0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x22, 0xE5, 0x63, 0x54, 0x0F,
-0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x48, 0xF4, 0x22, 0x90, 0x01, 0x5F,
-0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3C, 0xE0, 0xF5,
-0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05,
-0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x49, 0x14, 0xF0, 0xE5, 0x63, 0x54, 0x0F,
-0xC3, 0x94, 0x0C, 0x50, 0x0D, 0x12, 0x48, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x03, 0x12,
-0x67, 0x4A, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x4D, 0x74, 0x01, 0xF0,
-0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0xD3, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xD3,
-0x12, 0x43, 0x84, 0xEC, 0x44, 0x02, 0xFC, 0x90, 0x93, 0xD3, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xD3,
-0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30,
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x14, 0x60, 0x09, 0x14, 0x60, 0x16, 0x24, 0x02, 0x70, 0x32,
-0x80, 0x0A, 0x90, 0x93, 0x4E, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x37, 0xF0, 0xE4, 0x90, 0x93, 0x53,
-0xF0, 0x22, 0xED, 0x70, 0x0A, 0x90, 0x93, 0x47, 0xE0, 0x90, 0x93, 0x4E, 0xF0, 0x80, 0x05, 0x90,
-0x93, 0x4E, 0xED, 0xF0, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x93, 0x37, 0xF0, 0x90, 0x93, 0x53, 0x74,
-0x01, 0xF0, 0x22, 0x48, 0x93, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x93,
-0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x93, 0x5E, 0x00, 0x41, 0x93, 0x6D,
-0x00, 0x41, 0x93, 0xE9, 0x00, 0x41, 0x93, 0x2B, 0x00, 0x41, 0x93, 0x2C, 0x00, 0x41, 0x92, 0x69,
-0x00, 0x41, 0x92, 0x6A, 0x00, 0x41, 0x92, 0x68, 0x00, 0x41, 0x93, 0xDF, 0x00, 0x00, 0x90, 0x01,
-0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0x90, 0x93,
-0x35, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x01, 0x04, 0xE0, 0x54, 0x0F, 0xFF, 0x74, 0x40, 0x7E, 0x00,
-0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x90, 0x93, 0x4B, 0xF0,
-0xEE, 0x90, 0x93, 0x4A, 0xF0, 0x22, 0xEF, 0x70, 0x0B, 0x90, 0x93, 0x6F, 0xE0, 0x90, 0x93, 0xD7,
-0x60, 0x0B, 0x80, 0x12, 0x90, 0x93, 0x6F, 0xE0, 0x90, 0x93, 0xD7, 0x60, 0x09, 0x12, 0x1F, 0xD5,
-0x00, 0x00, 0x02, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x01, 0x10, 0x7B, 0x01, 0x7A,
-0x93, 0x79, 0xD7, 0x7F, 0x60, 0x7E, 0x08, 0x02, 0x56, 0x9D, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF,
-0xF0, 0xEF, 0x60, 0x0A, 0xE5, 0x62, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x4E, 0x8B, 0x53, 0x63,
-0xF0, 0x43, 0x63, 0x0C, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x07, 0x90, 0x05, 0x27, 0xE0, 0x54,
-0x7F, 0xF0, 0x22, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12,
-0x8A, 0x65, 0xEF, 0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12,
-0x3A, 0x93, 0x12, 0x54, 0x14, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0xE5, 0x64, 0x30, 0xE6,
-0x12, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0x90, 0x01, 0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0,
-0x53, 0x64, 0xBF, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x0A, 0x90, 0x00, 0x83, 0xE0, 0x30, 0xE0,
-0x03, 0x75, 0x64, 0x02, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01,
-0x05, 0x7F, 0x01, 0x12, 0x4E, 0x8B, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x90, 0x93, 0x98, 0xE0,
-0x30, 0xE0, 0x07, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0x3D, 0xE0, 0x70,
-0x1A, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x14, 0x90, 0x93, 0x68, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x58,
-0x95, 0x8E, 0x6E, 0x8F, 0x6F, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0x3E, 0xE0,
-0x60, 0x16, 0x90, 0x93, 0x41, 0xE0, 0x70, 0x10, 0x90, 0x93, 0x3B, 0xE0, 0x90, 0x07, 0x78, 0x60,
-0x04, 0x74, 0x0D, 0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93, 0xEA, 0xEF, 0xF0, 0x12, 0x56,
-0x14, 0x90, 0x93, 0xEA, 0xE0, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x53, 0x63, 0xF0, 0x43,
-0x63, 0x04, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B,
-0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0x90, 0x93, 0x98, 0xE0,
-0x30, 0xE0, 0x05, 0xAF, 0x64, 0x02, 0x5F, 0x72, 0x7D, 0x01, 0xAF, 0x64, 0x12, 0x48, 0xF4, 0x22,
-0x53, 0x63, 0xF0, 0x43, 0x63, 0x01, 0x12, 0x4C, 0x02, 0x12, 0x4D, 0xEF, 0x53, 0x63, 0xF0, 0x43,
-0x63, 0x02, 0x22, 0xE4, 0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x38, 0xF0, 0xF5, 0x66, 0x22, 0x90,
-0x02, 0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12,
-0x43, 0xF7, 0x51, 0xFA, 0x00, 0x40, 0x52, 0x22, 0x00, 0x80, 0x52, 0x4D, 0x01, 0x00, 0x52, 0x61,
-0x02, 0x00, 0x52, 0x79, 0x04, 0x00, 0x00, 0x00, 0x52, 0x96, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE,
-0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06,
-0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
-0x80, 0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF,
-0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78,
-0x07, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04,
-0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80,
-0x35, 0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF,
-0x2D, 0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE,
-0xFF, 0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D,
-0x00, 0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x1F,
-0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x0C, 0xF0, 0xA3, 0xF0, 0x12, 0x60, 0xFB, 0x75,
-0x8E, 0x02, 0x91, 0xE6, 0x12, 0x60, 0x52, 0x90, 0x93, 0x70, 0xEF, 0xF0, 0x12, 0x60, 0x65, 0x90,
-0x93, 0x72, 0xEF, 0xF0, 0x12, 0x60, 0x71, 0x90, 0x93, 0x54, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4,
-0xF5, 0x18, 0xF5, 0x0D, 0xF5, 0x62, 0x90, 0x93, 0x6F, 0xF0, 0x90, 0x00, 0xCC, 0xE0, 0x54, 0xF7,
-0xF0, 0x12, 0x7E, 0x58, 0x12, 0x47, 0xA3, 0x12, 0x37, 0x1C, 0x7F, 0x03, 0x12, 0x88, 0x1B, 0x71,
-0x8D, 0x12, 0x60, 0x16, 0x12, 0x60, 0x89, 0x12, 0x60, 0x9E, 0x12, 0x60, 0x34, 0x12, 0x45, 0x02,
-0x12, 0x61, 0x03, 0x91, 0xCE, 0x90, 0x93, 0x0E, 0xE5, 0xD9, 0xF0, 0xC2, 0xAF, 0x90, 0x00, 0x80,
-0xE0, 0x44, 0x40, 0xF0, 0x71, 0xFE, 0x75, 0xE8, 0x03, 0x43, 0xA8, 0x85, 0xD2, 0xAF, 0x12, 0x82,
-0xBB, 0x51, 0x9B, 0x12, 0x60, 0xA5, 0x90, 0x93, 0x0C, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0xA5, 0x90,
-0x01, 0xC4, 0xF0, 0x74, 0x52, 0xA3, 0xF0, 0xE5, 0x18, 0x30, 0xE4, 0x0A, 0xC2, 0xAF, 0x53, 0x18,
-0xEF, 0xD2, 0xAF, 0x12, 0x67, 0x8F, 0xE5, 0x18, 0x30, 0xE6, 0x0A, 0xC2, 0xAF, 0x53, 0x18, 0xBF,
-0xD2, 0xAF, 0x12, 0x76, 0x54, 0xE5, 0x18, 0x30, 0xE7, 0x0A, 0xC2, 0xAF, 0x53, 0x18, 0x7F, 0xD2,
-0xAF, 0x12, 0x82, 0x61, 0xC2, 0xAF, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0xBF, 0x01, 0x0D, 0x90, 0x93,
-0x3A, 0x74, 0x01, 0xF0, 0x31, 0x9C, 0xE4, 0x90, 0x93, 0x3A, 0xF0, 0xD2, 0xAF, 0x90, 0x01, 0xBD,
-0xE5, 0x63, 0xF0, 0x90, 0x93, 0x50, 0xE0, 0x90, 0x01, 0xBC, 0xF0, 0x80, 0x99, 0x90, 0x01, 0x3C,
-0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
-0xF0, 0xFD, 0x7F, 0x54, 0x71, 0xB6, 0x7D, 0xFF, 0x7F, 0x55, 0x71, 0xB6, 0x7D, 0xFF, 0x7F, 0x56,
-0x71, 0xB6, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75,
-0x83, 0x00, 0xED, 0xF0, 0x71, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x30, 0xE4, 0xF0,
-0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0xFD, 0x7F, 0x50, 0x71, 0xB6, 0xE4, 0xFD, 0x7F, 0x51, 0x71, 0xB6, 0xE4, 0xFD, 0x7F, 0x52, 0x71,
-0xB6, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0x90, 0x00, 0x02, 0xE0, 0x44, 0x01, 0xF0, 0xD3, 0x10,
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x05,
-0x22, 0x74, 0xFF, 0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xB4, 0x12, 0x1F,
-0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xB8, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90,
-0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x71, 0xFE, 0x71, 0xF7, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE,
-0xF0, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0,
-0x44, 0x20, 0xF0, 0x90, 0x93, 0x41, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90,
-0x93, 0x34, 0xE0, 0x60, 0x34, 0xE4, 0x90, 0x93, 0x4D, 0xF0, 0xFF, 0x7E, 0x08, 0x12, 0x2C, 0x6E,
-0x90, 0x93, 0xB4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB4, 0x12, 0x43, 0x84, 0xEC, 0x54, 0xFD, 0xFC,
-0x90, 0x93, 0xB4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB4, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12,
-0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x3E, 0xE0, 0x60, 0x22, 0xE4,
-0xFF, 0x11, 0x56, 0x90, 0x93, 0x52, 0xE0, 0x60, 0x12, 0x90, 0x93, 0xB8, 0x12, 0x1F, 0xD5, 0x00,
-0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xB8, 0xD1, 0x99, 0x90, 0x07, 0x78, 0x74, 0x01,
-0xF0, 0x90, 0x93, 0x48, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93,
-0xE0, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x93, 0xE2, 0xF0, 0x90, 0x93, 0xE0, 0xE0, 0x54, 0x7F,
-0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x6C, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44,
-0x80, 0xFD, 0x7F, 0x80, 0x61, 0xB6, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x8A, 0x65, 0xEF,
-0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x91, 0x14, 0x90, 0x93, 0x9F, 0x74, 0x02, 0xF0,
-0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x9F, 0xE0, 0x90, 0x93, 0xEB, 0xF0,
-0x6F, 0x70, 0x02, 0xA1, 0xDC, 0xEF, 0x14, 0x60, 0x3B, 0x14, 0x60, 0x5F, 0x14, 0x70, 0x02, 0xA1,
-0xB6, 0x24, 0x03, 0x60, 0x02, 0xA1, 0xDC, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x03, 0x04, 0xD1, 0xE4,
-0xA1, 0xDC, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x02, 0x04, 0xD1, 0xFC, 0xA1, 0xDC, 0x90, 0x93, 0xEB,
-0xE0, 0xB4, 0x04, 0x04, 0xF1, 0x00, 0xA1, 0xDC, 0x90, 0x93, 0xEB, 0xE0, 0x64, 0x01, 0x70, 0x7C,
-0xD1, 0xE6, 0x80, 0x78, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4, 0x03, 0x04, 0xF1, 0x35, 0x80, 0x6C,
-0xEF, 0xB4, 0x02, 0x04, 0xF1, 0x04, 0x80, 0x64, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4, 0x04, 0x04,
-0xF1, 0x1A, 0x80, 0x58, 0xEF, 0x70, 0x55, 0xD1, 0x01, 0x80, 0x51, 0x90, 0x93, 0xEB, 0xE0, 0xB4,
-0x03, 0x04, 0xF1, 0x25, 0x80, 0x46, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x01, 0x04, 0x91, 0xF6, 0x80,
-0x3B, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x04, 0x04, 0xF1, 0x11, 0x80, 0x30, 0x90, 0x93, 0xEB, 0xE0,
-0x70, 0x2A, 0xB1, 0xE1, 0x80, 0x26, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4, 0x01, 0x04, 0xB1, 0xE5,
-0x80, 0x1A, 0xEF, 0xB4, 0x02, 0x04, 0xB1, 0xFD, 0x80, 0x12, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4,
-0x04, 0x05, 0x12, 0x44, 0xFF, 0x80, 0x05, 0xEF, 0x70, 0x02, 0xB1, 0xF9, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0xD1, 0x01, 0x81, 0xF6, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x54,
-0xBF, 0xF0, 0x90, 0x93, 0x9F, 0x74, 0x03, 0xF0, 0x22, 0xD1, 0x01, 0x80, 0xE8, 0xD1, 0x14, 0x80,
-0xE4, 0x90, 0x01, 0x3E, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0xAD, 0x90, 0x93, 0x9F,
-0x74, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xAC, 0x12, 0x1F,
-0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xB0, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90,
-0x01, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x41, 0xE0,
-0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x0A, 0x31, 0x83,
-0xEF, 0x64, 0x01, 0x60, 0x03, 0x12, 0x4F, 0x63, 0x90, 0x93, 0x3E, 0xE0, 0x60, 0x1C, 0x7F, 0x01,
-0x11, 0x56, 0x90, 0x93, 0x52, 0xE0, 0x60, 0x12, 0x90, 0x93, 0xB0, 0x12, 0x1F, 0xD5, 0x00, 0x00,
-0x03, 0x10, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xB0, 0xD1, 0x99, 0x71, 0xF7, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0x90, 0x93, 0xEC, 0xEF, 0xF0, 0xD1, 0x14, 0x90, 0x93, 0xEC, 0xE0, 0x60, 0x05, 0x90, 0x05,
-0x22, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x99, 0xF0, 0x22, 0x7F, 0x70, 0x7E, 0x08, 0xD3, 0x10, 0xAF,
-0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0x54, 0xFC, 0xFF, 0x90, 0x01, 0xE8, 0xF0, 0xEE, 0x44, 0xF0, 0xA3,
-0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEC, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F,
-0x0F, 0x90, 0x01, 0xED, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEE, 0xF0, 0x12,
-0x1E, 0xF6, 0x90, 0x01, 0xEF, 0xF0, 0x90, 0x01, 0xEB, 0x74, 0x40, 0xF0, 0x12, 0x88, 0x6C, 0xD0,
-0xD0, 0x92, 0xAF, 0x22, 0xF1, 0x35, 0x7D, 0x03, 0x7F, 0x02, 0x12, 0x3A, 0x3F, 0x90, 0x05, 0x27,
-0xE4, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE4, 0x90, 0x93, 0x9F, 0xF0, 0x22, 0xF1, 0x04, 0x80, 0xE6,
-0xF1, 0x1A, 0x80, 0xE2, 0xD1, 0x14, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x9F, 0x04, 0xF0,
-0x22, 0x91, 0x14, 0x90, 0x93, 0x9F, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90,
-0x93, 0x9F, 0x04, 0xF0, 0x22, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x91, 0x0E, 0x90, 0x93,
-0x9F, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40,
-0xF0, 0x90, 0x93, 0x9F, 0x74, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
-0x93, 0xED, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x46, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08,
-0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46, 0xE0, 0x5F, 0xF0, 0x71, 0xFE,
-0x90, 0x93, 0xED, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33,
-0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8,
-0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4B, 0x90,
-0x93, 0xED, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3,
-0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x62, 0xE0, 0x5F, 0xF0, 0x71, 0xFE, 0x90, 0x93, 0xED,
-0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
-0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x60, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80,
-0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F,
-0x82, 0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x8B, 0x21, 0x8A, 0x22, 0x89, 0x23, 0x90, 0x93, 0xBC, 0x12, 0x43, 0xC8, 0xAB, 0x24, 0xAA, 0x25,
-0xA9, 0x26, 0x90, 0x93, 0xBF, 0x12, 0x43, 0xC8, 0xAF, 0x27, 0x15, 0x27, 0xEF, 0x60, 0x1E, 0x90,
-0x93, 0xBF, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x93, 0xBC,
-0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0xEF, 0x12, 0x42, 0x53, 0x80, 0xDB, 0xAB, 0x21, 0xAA,
-0x22, 0xA9, 0x23, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
-0x01, 0xC4, 0x74, 0x48, 0xF0, 0x74, 0x58, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90,
-0x05, 0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01,
-0xC7, 0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0x11, 0x48, 0xBF, 0x01, 0x0F, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x95, 0x90, 0x04,
-0x1F, 0x74, 0x20, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF,
-0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF,
-0xF0, 0xED, 0x60, 0x0E, 0x74, 0x0F, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44,
-0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0,
-0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21,
-0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03,
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C, 0x13,
-0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x93, 0x01,
-0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01, 0x60, 0x07,
-0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3B, 0x90, 0x93, 0x01, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x3D,
-0xF0, 0x79, 0x40, 0x90, 0x93, 0x01, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83, 0xE0,
-0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x93, 0x5E, 0xF0, 0x22, 0x90, 0x93, 0x5E, 0xE0, 0x04,
-0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0B, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0, 0x02,
-0x11, 0x80, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00,
-0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07,
-0x90, 0x01, 0xC4, 0x74, 0x63, 0xF0, 0x74, 0x59, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x28,
-0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E, 0xA3, 0xE0,
-0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x61, 0x57, 0x90, 0x01, 0x34, 0x74, 0x01,
-0xF0, 0x85, 0xD1, 0x0E, 0x85, 0xD3, 0x10, 0x85, 0xD4, 0x11, 0x85, 0xD5, 0x12, 0x85, 0xD6, 0x13,
-0x85, 0xD7, 0x14, 0x85, 0xD9, 0x15, 0x85, 0xD2, 0x0F, 0x75, 0x24, 0x00, 0x75, 0x25, 0x00, 0x75,
-0x26, 0x0E, 0x75, 0x27, 0x08, 0xFB, 0x7A, 0x93, 0x79, 0x5F, 0x12, 0x57, 0xF9, 0x90, 0x93, 0x60,
-0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x01, 0xFE, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x70, 0x02,
-0x61, 0x08, 0x90, 0x93, 0x60, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02,
-0x61, 0x08, 0xEF, 0x54, 0x1F, 0xF5, 0x4D, 0x90, 0x93, 0x61, 0xE0, 0x54, 0x3F, 0xF5, 0x4E, 0x90,
-0x93, 0x63, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34,
-0x87, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xE5, 0x4E, 0xD3, 0x94, 0x04, 0x40, 0x03,
-0x75, 0x4E, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0x75, 0xF0,
-0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0x63, 0xE0, 0x54,
-0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43,
-0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93,
-0x60, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x2F, 0x90, 0x93, 0x63, 0xE0, 0x54, 0x1F, 0xFF,
-0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8F, 0xF0,
-0x12, 0x42, 0x87, 0x90, 0x93, 0x62, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0,
-0x67, 0xAF, 0x4D, 0x12, 0x71, 0x11, 0x80, 0x60, 0x90, 0x93, 0x60, 0xE0, 0xFF, 0xC4, 0x13, 0x13,
-0x54, 0x03, 0x30, 0xE0, 0x53, 0x90, 0x93, 0x63, 0xE0, 0x54, 0x1F, 0xFF, 0xFD, 0xE5, 0x4D, 0x25,
-0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8D, 0xF0, 0x12, 0x42, 0x87,
-0x90, 0x93, 0x62, 0xE0, 0xFE, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x0F, 0xEE, 0x54,
-0x7F, 0xFD, 0x8F, 0x55, 0xAB, 0x4E, 0xAF, 0x4D, 0x12, 0x70, 0xAD, 0x80, 0x1B, 0x90, 0x01, 0x02,
-0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x11, 0x90, 0x04, 0x30, 0xE0, 0xB4, 0x01, 0x0A, 0xE4, 0xF0,
-0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x04, 0xCF, 0xF0, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80,
-0x46, 0x90, 0x93, 0x50, 0xE0, 0x60, 0x37, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
-0x04, 0xF0, 0x12, 0x51, 0x83, 0xEF, 0x64, 0x01, 0x70, 0x2D, 0xF5, 0x48, 0x90, 0x93, 0x3C, 0xE0,
-0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74,
-0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x80, 0x09, 0x12, 0x51,
-0x83, 0xBF, 0x01, 0x03, 0x12, 0x51, 0x9C, 0xE5, 0x2C, 0x20, 0xE1, 0x02, 0x61, 0xF9, 0x90, 0x01,
-0x34, 0x74, 0x02, 0xF0, 0x90, 0xFD, 0x10, 0x74, 0x7F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x30, 0xE5,
-0x0B, 0x75, 0x4F, 0x88, 0x75, 0x50, 0x0F, 0x75, 0x51, 0x0F, 0x80, 0x09, 0x75, 0x4F, 0xC0, 0x75,
-0x50, 0x08, 0x75, 0x51, 0x07, 0x90, 0x04, 0x7F, 0xE0, 0x55, 0x51, 0xF5, 0x16, 0x90, 0x04, 0x7E,
-0xE0, 0x55, 0x51, 0xF5, 0x17, 0x65, 0x16, 0x60, 0x60, 0xE4, 0xFF, 0xE5, 0x16, 0x75, 0xF0, 0x08,
-0xA4, 0x25, 0x4F, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74,
-0x19, 0x2F, 0xF8, 0xA6, 0x06, 0x0F, 0xBF, 0x08, 0xE2, 0x75, 0x24, 0x00, 0x75, 0x25, 0x00, 0x75,
-0x26, 0x19, 0x75, 0x27, 0x08, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x56, 0x12, 0x57, 0xF9, 0x90, 0x93,
-0x56, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0xD1, 0x9F, 0xE5, 0x16,
-0x24, 0x01, 0xFF, 0xE4, 0x33, 0xFE, 0xAD, 0x50, 0x7C, 0x00, 0x12, 0x1F, 0x4E, 0xAF, 0x05, 0x8F,
-0x16, 0x90, 0x04, 0x7F, 0xEF, 0xF0, 0xB5, 0x17, 0xA0, 0xE5, 0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01,
-0x34, 0x74, 0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90, 0x01, 0x34, 0x74, 0x10, 0xF0, 0x43,
-0x18, 0x10, 0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF, 0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54,
-0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8, 0x00, 0x75, 0xE8, 0x00, 0x12, 0x53,
-0xCB, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x53, 0xFE, 0x80, 0xFE, 0xE5, 0x2C, 0x30,
-0xE6, 0x06, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xE5, 0x2E, 0x30, 0xE0, 0x52, 0x90, 0x93, 0x71,
-0x74, 0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x93, 0x6E, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90,
-0x05, 0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x9E, 0xE0,
-0x30, 0xE0, 0x0D, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x06, 0x90, 0x93, 0xA0, 0x74, 0x01, 0xF0,
-0x90, 0x93, 0x98, 0xE0, 0xFF, 0x30, 0xE0, 0x0D, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x06, 0x90,
-0x93, 0x9A, 0x74, 0x01, 0xF0, 0x12, 0x45, 0x09, 0xF1, 0xBF, 0x90, 0x93, 0x71, 0xE4, 0xF0, 0xE5,
-0x2E, 0x30, 0xE1, 0x7D, 0x90, 0x01, 0x36, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x62, 0xE0, 0xFE, 0x90,
-0x05, 0x61, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xF5, 0x0A, 0xEC, 0x3E, 0xF5, 0x09, 0x90, 0x05, 0x22,
-0xE0, 0xB4, 0xFF, 0x06, 0x90, 0x01, 0xE6, 0xE0, 0x04, 0xF0, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x01,
-0xE4, 0xF0, 0x43, 0x18, 0x40, 0x11, 0xF5, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x0C, 0xE4, 0xFF,
-0xD1, 0x91, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x53, 0xE0, 0x60, 0x1D,
-0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x16, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x01,
-0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x05, 0x08, 0xE5,
-0x08, 0xC3, 0x94, 0xFF, 0x40, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01,
-0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x7B, 0x90, 0x01, 0x36, 0x74, 0x04, 0xF0, 0x90, 0x05, 0x62, 0xE0,
-0xFE, 0x90, 0x05, 0x61, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xF5, 0x0C, 0xEC, 0x3E, 0xF5, 0x0B, 0xD3,
-0xE5, 0x0C, 0x95, 0x0A, 0xE5, 0x0B, 0x95, 0x09, 0x40, 0x06, 0x90, 0x01, 0xE5, 0xE0, 0x04, 0xF0,
-0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x0D, 0x90, 0x93, 0x39, 0xE4, 0xF0, 0x90, 0x93, 0x99, 0xE0,
-0x64, 0x06, 0x60, 0x3D, 0x12, 0x4B, 0x90, 0x90, 0x93, 0x53, 0xE0, 0x60, 0x34, 0x90, 0x93, 0x4E,
-0xE0, 0xFF, 0x90, 0x93, 0x37, 0xE0, 0x6F, 0x70, 0x28, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x05, 0x73,
-0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x7D, 0x01, 0x7F,
-0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93, 0x37, 0xE0, 0x14,
-0xF0, 0xE5, 0x2E, 0x30, 0xE3, 0x34, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0, 0xE5, 0x62, 0x64, 0x01,
-0x70, 0x28, 0xE5, 0x65, 0x60, 0x24, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02,
-0xF0, 0x75, 0x48, 0x00, 0x90, 0x93, 0x42, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E,
-0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4, 0x2B, 0x90,
-0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x20, 0xE5, 0x65, 0x60, 0x1C, 0x90, 0x01,
-0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x51, 0xE4, 0xF0, 0x53, 0x66,
-0xFD, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x51, 0x9C, 0xE5, 0x2E, 0x30, 0xE5, 0x1F, 0x90,
-0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x14, 0xE5, 0x65, 0x60, 0x10, 0x90, 0x93,
-0x50, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x51, 0x2B, 0x80, 0x03, 0x12, 0x4F, 0x1D, 0xE5, 0x2E,
-0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x10, 0xE5, 0x65,
-0x60, 0x0C, 0x53, 0x66, 0xFE, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x51, 0x9C, 0xE5, 0x2F,
-0x30, 0xE1, 0x18, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x08,
-0x90, 0x93, 0x9D, 0x74, 0x01, 0xF0, 0x80, 0x03, 0x12, 0x4E, 0xD6, 0x74, 0x63, 0x04, 0x90, 0x01,
-0xC4, 0xF0, 0x74, 0x59, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03,
-0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0,
-0x32, 0x8F, 0x71, 0x90, 0x05, 0x43, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x22, 0x90,
-0x93, 0x01, 0xE0, 0x54, 0xF0, 0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A,
-0x00, 0x79, 0x19, 0x90, 0x93, 0xCB, 0x12, 0x43, 0xC8, 0x0B, 0x7A, 0x93, 0x79, 0x01, 0xD3, 0x10,
-0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xC8, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x6A, 0xE0, 0xFF,
-0x90, 0x92, 0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x90, 0x92,
-0x69, 0xE0, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0B, 0x90, 0x92, 0x69, 0xE0, 0x14, 0xFF,
-0xA3, 0xE0, 0xB5, 0x07, 0x0F, 0x12, 0x81, 0x51, 0xEF, 0x60, 0x72, 0x12, 0x82, 0x61, 0x90, 0x01,
-0x3F, 0x74, 0x02, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6B, 0xF9, 0x74,
-0x92, 0x35, 0xF0, 0xA8, 0x01, 0xFC, 0x7D, 0x01, 0x90, 0x93, 0xC8, 0x12, 0x43, 0xA8, 0x7E, 0x00,
-0x7F, 0x02, 0x12, 0x1E, 0xD0, 0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6D, 0xF9,
-0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x93, 0xCB,
-0x12, 0x43, 0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x90, 0x93, 0xC8, 0x12, 0x43, 0xA8, 0x12,
-0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x27, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x57,
-0xF9, 0x90, 0x92, 0x6A, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0xAE, 0x07, 0xE4, 0xFF, 0xD1, 0x91, 0xEF, 0x60, 0x19, 0x90, 0x93, 0x98, 0xE0, 0xC4,
-0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x0D, 0xAF, 0x06, 0x7D, 0x01, 0x12, 0x48, 0xF4, 0x12, 0x67,
-0x4A, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x93, 0x26, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x29,
-0xE0, 0x54, 0xF0, 0x44, 0x02, 0xF0, 0x54, 0x0F, 0x44, 0xC0, 0xF0, 0x90, 0x93, 0x26, 0x12, 0x43,
-0xA8, 0x90, 0x93, 0xCB, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x29, 0xC1, 0xBE, 0x90,
-0x93, 0xE0, 0xE0, 0x30, 0xE0, 0x2F, 0xE5, 0x62, 0xB4, 0x01, 0x2A, 0x90, 0x93, 0xDF, 0xE0, 0x04,
-0xF0, 0xE0, 0xB4, 0x0A, 0x0B, 0x90, 0x93, 0xE2, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0xDF, 0xF0,
-0x90, 0x93, 0xE2, 0xE0, 0xFF, 0x90, 0x93, 0xE1, 0xE0, 0xD3, 0x9F, 0x50, 0x08, 0x12, 0x8A, 0xA6,
-0xE4, 0x90, 0x93, 0xE2, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC,
-0xEF, 0x30, 0xE0, 0x02, 0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF,
-0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5,
-0x2B, 0x90, 0x01, 0x30, 0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3,
-0xE5, 0x2B, 0xF0, 0x22, 0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32,
-0x43, 0x32, 0x20, 0x90, 0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32,
-0xF0, 0x22, 0x90, 0x00, 0xF4, 0xE0, 0x20, 0xE3, 0x09, 0xE0, 0x7F, 0x01, 0x20, 0xE2, 0x05, 0x7F,
-0x02, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30, 0xE3, 0x02, 0x7F, 0x01,
-0x22, 0x90, 0x93, 0x72, 0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E,
-0xFD, 0x7F, 0x33, 0x22, 0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D,
-0x90, 0x05, 0x41, 0x74, 0x10, 0xF0, 0x90, 0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01,
-0x64, 0x74, 0x20, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x0F, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x98, 0xE0,
-0x7F, 0x00, 0x30, 0xE4, 0x02, 0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E, 0xC3, 0x90, 0x93, 0x10,
-0xE0, 0x94, 0x88, 0x90, 0x93, 0x0F, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44,
-0x80, 0xF0, 0x22, 0x90, 0x93, 0x0F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E,
-0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0x10, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x0F, 0xE0, 0x94,
-0x00, 0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0x90, 0x01, 0x94, 0xE0, 0x44,
-0x01, 0xF0, 0x22, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01, 0x9C, 0x74, 0x7E, 0xF0,
-0xA3, 0x74, 0x92, 0xF0, 0xA3, 0x74, 0xA0, 0xF0, 0xA3, 0x74, 0x24, 0xF0, 0x90, 0x01, 0x9B, 0x74,
-0x49, 0xF0, 0x90, 0x01, 0x9A, 0x74, 0xE0, 0xF0, 0x90, 0x01, 0x99, 0xE4, 0xF0, 0x90, 0x01, 0x98,
-0x04, 0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05,
-0xC0, 0x06, 0xC0, 0x07, 0x7D, 0x33, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x61, 0xFF, 0xA3, 0xF0,
-0x53, 0x91, 0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE, 0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90,
-0x00, 0x52, 0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0, 0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06,
-0x90, 0x00, 0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D, 0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20,
-0xF0, 0xE5, 0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00, 0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7,
-0x06, 0x90, 0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5, 0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74,
-0x01, 0xF0, 0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90, 0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30,
-0xE2, 0x06, 0x90, 0x00, 0x56, 0x74, 0x04, 0xF0, 0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56,
-0x74, 0x08, 0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0,
-0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83,
-0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0,
-0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x75, 0x56, 0x00, 0x90, 0x01, 0xC4, 0x74, 0xDA, 0xF0,
-0x74, 0x61, 0xA3, 0xF0, 0x53, 0x91, 0xDF, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3,
-0xE0, 0x55, 0x31, 0xF5, 0x35, 0xA3, 0xE0, 0x55, 0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5,
-0x37, 0xE5, 0x34, 0x30, 0xE0, 0x1A, 0x90, 0x01, 0x3C, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x98, 0xE0,
-0x30, 0xE0, 0x0D, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0,
-0xE5, 0x34, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x44, 0x24, 0xE5, 0x34,
-0x30, 0xE2, 0x36, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE0, 0x21,
-0x75, 0x48, 0x00, 0x90, 0x93, 0x3C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01,
-0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x80,
-0x08, 0x90, 0x93, 0x4C, 0xE4, 0xF0, 0x12, 0x51, 0x9C, 0xE5, 0x34, 0x30, 0xE3, 0x36, 0x90, 0x01,
-0x3C, 0x74, 0x08, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93,
-0x3C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
-0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x49, 0xE4,
-0xF0, 0x12, 0x51, 0x9C, 0xE5, 0x34, 0x30, 0xE4, 0x06, 0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0xE5,
-0x34, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3C, 0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x18, 0x90,
-0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90, 0x00, 0x83, 0xE0, 0xF5, 0x64, 0x90, 0x01, 0xBB, 0xE5, 0x64,
-0xF0, 0x12, 0x50, 0xDC, 0x12, 0x51, 0x9C, 0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3D, 0x74,
-0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90, 0x93, 0x6D,
-0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0xFD, 0xE0,
-0x04, 0xF0, 0xE5, 0x36, 0x20, 0xE0, 0x02, 0x61, 0xAF, 0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0x90,
-0x93, 0x9E, 0xE0, 0x30, 0xE0, 0x13, 0xA3, 0xE0, 0x64, 0x03, 0x60, 0x0D, 0x7F, 0x01, 0x12, 0x5E,
-0x91, 0xEF, 0x60, 0x05, 0x7F, 0x01, 0x12, 0x55, 0x11, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x5F,
-0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x60, 0x3B, 0x91, 0x86, 0x90, 0x93, 0x99, 0xE0, 0xFF, 0x64,
-0x06, 0x60, 0x30, 0xEF, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x04,
-0xE4, 0xFF, 0x80, 0x14, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90,
-0x93, 0x99, 0xE0, 0xB4, 0x02, 0x04, 0x7F, 0x01, 0x91, 0xDA, 0x7D, 0x01, 0xAF, 0x64, 0x12, 0x48,
-0xF4, 0xF1, 0x4A, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x75, 0x48, 0x00, 0x75, 0x49, 0x03, 0xE4,
-0xFB, 0xFD, 0x7F, 0x50, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x53, 0x74, 0x05, 0xF0, 0xE5,
-0x36, 0x30, 0xE1, 0x3C, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x9E, 0xE0, 0x30, 0xE0,
-0x13, 0xA3, 0xE0, 0x64, 0x03, 0x60, 0x0D, 0x7F, 0x01, 0x12, 0x5E, 0x91, 0xEF, 0x70, 0x05, 0x7F,
-0x02, 0x12, 0x55, 0x11, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x15, 0x12, 0x89, 0xF6, 0x90, 0x93,
-0x99, 0xE0, 0x64, 0x06, 0x60, 0x0A, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x70, 0x02, 0x91, 0xA8,
-0xE5, 0x36, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xE5, 0x36, 0x30, 0xE4, 0x06,
-0x90, 0x01, 0x3E, 0x74, 0x10, 0xF0, 0xE5, 0x36, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x04,
-0xF0, 0xE5, 0x36, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x20, 0xF0, 0xE5, 0x36, 0x30, 0xE6,
-0x06, 0x90, 0x01, 0x3E, 0x74, 0x40, 0xF0, 0xE5, 0x36, 0x30, 0xE7, 0x06, 0x90, 0x01, 0x3E, 0x74,
-0x80, 0xF0, 0xE5, 0x37, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x43, 0x18, 0x80,
-0xE5, 0x37, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0x12, 0x46, 0xAC, 0x90, 0x93,
-0x4E, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x12, 0x5F, 0xBF,
-0x74, 0xDA, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0,
-0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0,
-0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x93, 0x98, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03,
-0x30, 0xE0, 0x0A, 0xA3, 0xE0, 0x64, 0x06, 0x60, 0x04, 0x7F, 0x06, 0x91, 0xDA, 0x90, 0x93, 0x99,
-0xE0, 0x64, 0x06, 0x60, 0x02, 0xF1, 0x29, 0x22, 0x90, 0x93, 0x39, 0xE0, 0x60, 0x16, 0x90, 0x93,
-0x99, 0xE0, 0x70, 0x04, 0x7F, 0x05, 0x80, 0x1F, 0x90, 0x93, 0x99, 0xE0, 0x64, 0x01, 0x70, 0x19,
-0x7F, 0x02, 0x80, 0x13, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x01, 0x04, 0x7F, 0x03, 0x80, 0x08, 0x90,
-0x93, 0x99, 0xE0, 0x70, 0x04, 0x7F, 0x04, 0x91, 0xDA, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
-0xD0, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0x6F, 0x70, 0x02, 0xC1, 0xAC, 0xEF, 0x12, 0x43, 0xD1, 0x65,
-0x08, 0x00, 0x65, 0x43, 0x01, 0x65, 0x8A, 0x02, 0x65, 0xC5, 0x03, 0x65, 0xFE, 0x04, 0x66, 0x37,
-0x05, 0x66, 0x73, 0x06, 0x00, 0x00, 0x66, 0xAC, 0xEE, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56,
-0x81, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xFF, 0xB4, 0x05, 0x04, 0xD1, 0xBB, 0xC1, 0xAC, 0xEF,
-0xB4, 0x06, 0x06, 0x7F, 0x01, 0xD1, 0xD0, 0x80, 0x16, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x06,
-0x7F, 0x01, 0xD1, 0xB1, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0xD1,
-0xF0, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56, 0x81, 0x80,
-0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1, 0xBB, 0x90, 0x93, 0x99, 0xE0, 0x70, 0x04,
-0xD1, 0xE6, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0x7F, 0x01, 0xD1, 0xD0,
-0xC1, 0xAC, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xD1, 0xB1, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0,
-0x64, 0x02, 0x60, 0x02, 0xC1, 0xAC, 0xD1, 0xC5, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04,
-0x07, 0x7F, 0x01, 0x12, 0x56, 0x81, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1,
-0xBB, 0x90, 0x93, 0x99, 0xE0, 0x70, 0x04, 0xD1, 0xE6, 0x80, 0x16, 0x90, 0x93, 0x99, 0xE0, 0xFE,
-0xB4, 0x06, 0x06, 0x7F, 0x01, 0xD1, 0xD0, 0x80, 0x08, 0xEE, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0xD1,
-0xB1, 0xF1, 0x1C, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56,
-0x81, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1, 0xBB, 0x90, 0x93, 0x99, 0xE0,
-0x70, 0x04, 0xD1, 0xE6, 0x80, 0x14, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF,
-0xD1, 0xD0, 0x80, 0x06, 0xEE, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0xF1, 0x05, 0xC1, 0xAC, 0x90, 0x93,
-0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xD1, 0xD0, 0x80, 0x13, 0xEE, 0xB4, 0x03, 0x06,
-0x7F, 0x01, 0xD1, 0xB1, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0x90,
-0x93, 0x99, 0xE0, 0xB4, 0x01, 0x04, 0xD1, 0xF0, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05,
-0x02, 0xD1, 0xBB, 0xD1, 0xFB, 0x80, 0x75, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4,
-0xFF, 0xD1, 0xD0, 0x80, 0x13, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xD1, 0xB1, 0x80, 0x09, 0x90,
-0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x01, 0x04, 0xD1,
-0xF0, 0x80, 0x0C, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x05, 0x7F, 0x01, 0x12, 0x56, 0x81, 0xF1,
-0x0F, 0x80, 0x39, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56, 0x81, 0x80,
-0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1, 0xBB, 0x90, 0x93, 0x99, 0xE0, 0x70, 0x04,
-0xD1, 0xE6, 0x80, 0x16, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x06, 0xE4, 0xFF, 0xD1, 0xB1, 0x80,
-0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0xF1, 0x36, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0x12, 0x51, 0x69, 0x90, 0x93, 0x99, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0,
-0x90, 0x93, 0x99, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x99, 0x04, 0xF0, 0x22,
-0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90,
-0x93, 0x99, 0x74, 0x01, 0xF0, 0x22, 0x12, 0x51, 0x05, 0x90, 0x93, 0x99, 0x74, 0x01, 0xF0, 0x22,
-0x7F, 0x01, 0x12, 0x50, 0x8A, 0xE4, 0x90, 0x93, 0x99, 0xF0, 0x22, 0x12, 0x54, 0x0E, 0x90, 0x93,
-0x99, 0x74, 0x04, 0xF0, 0x22, 0x12, 0x50, 0xB3, 0x90, 0x93, 0x99, 0x74, 0x03, 0xF0, 0x22, 0x90,
-0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x99, 0x74, 0x05, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74,
-0xFF, 0xF0, 0x90, 0x93, 0x99, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x93, 0x9D, 0xE0, 0xB4, 0x01, 0x05,
-0xE4, 0xF0, 0x12, 0x4E, 0xD6, 0x22, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, 0x90, 0x05, 0x22,
-0x74, 0x6F, 0xF0, 0x90, 0x93, 0x99, 0x74, 0x06, 0xF0, 0x22, 0x90, 0x93, 0x99, 0xE0, 0x64, 0x06,
-0x60, 0x3C, 0xE5, 0x63, 0x54, 0x0F, 0x14, 0x60, 0x2E, 0x14, 0x60, 0x1E, 0x24, 0xFE, 0x60, 0x0E,
-0x24, 0xF8, 0x70, 0x2A, 0xE4, 0x90, 0x93, 0x99, 0xF0, 0x90, 0x05, 0x22, 0xF0, 0x22, 0x90, 0x93,
-0x99, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x99, 0x74, 0x03, 0xF0,
-0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0xD3,
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x93, 0x0F, 0xF0,
-0x90, 0x93, 0x0F, 0xE0, 0xFD, 0x70, 0x03, 0x02, 0x68, 0xDA, 0x90, 0x93, 0xE9, 0xE0, 0xFF, 0x74,
-0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF,
-0xEF, 0x5D, 0x70, 0x03, 0x02, 0x68, 0xD3, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01,
-0xD0, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x10, 0xF0, 0x75, 0x24, 0x01, 0x75, 0x25, 0x93, 0x75,
-0x26, 0x10, 0x75, 0x27, 0x01, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x11, 0x12, 0x57, 0xF9, 0x90, 0x93,
-0x11, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0xE9, 0x30, 0xE0, 0x59, 0xE0,
-0x75, 0xF0, 0x02, 0x90, 0x00, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x12, 0xF0, 0x90, 0x93,
-0xE9, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x13, 0xF0,
-0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
-0x14, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x9C, 0xE0,
-0x90, 0x93, 0x15, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43,
-0x9C, 0xE0, 0x90, 0x93, 0x16, 0xF0, 0x80, 0x33, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12,
-0x43, 0x9C, 0xE0, 0x90, 0x93, 0x12, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01,
-0xD2, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x13, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04,
-0x90, 0x01, 0xD3, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x14, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B,
-0x01, 0x7A, 0x93, 0x79, 0x12, 0x11, 0xDF, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x90, 0x93, 0xE9, 0xE0,
-0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x93,
-0x0F, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33,
-0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0,
-0x02, 0x67, 0xA0, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
-0x93, 0x17, 0x12, 0x43, 0xC8, 0xEF, 0x12, 0x43, 0xD1, 0x69, 0x2E, 0x01, 0x69, 0x26, 0x02, 0x69,
-0x73, 0x03, 0x69, 0x7C, 0x05, 0x69, 0x85, 0x06, 0x69, 0xC8, 0x07, 0x69, 0x8D, 0x08, 0x69, 0x96,
-0x0B, 0x69, 0x9F, 0x1B, 0x69, 0xA7, 0x1C, 0x69, 0x37, 0x2D, 0x69, 0x40, 0x2E, 0x69, 0xAF, 0x30,
-0x69, 0x52, 0x34, 0x69, 0x49, 0x3B, 0x69, 0x5A, 0x47, 0x69, 0x6B, 0x48, 0x69, 0x63, 0x49, 0x69,
-0xB8, 0x4B, 0x00, 0x00, 0x69, 0xC1, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xB9, 0x90, 0x93,
-0x17, 0x12, 0x43, 0xA8, 0x02, 0x82, 0xC7, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x83, 0xA8,
-0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x83, 0xF0, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02,
-0x84, 0x29, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xBF, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8,
-0x02, 0x84, 0x54, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xD5, 0x90, 0x93, 0x17, 0x12, 0x43,
-0xA8, 0xE1, 0xCD, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x85, 0x14, 0x90, 0x93, 0x17, 0x12,
-0x43, 0xA8, 0x02, 0x80, 0x54, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x80, 0x3C, 0x90, 0x93, 0x17,
-0x12, 0x43, 0xA8, 0x02, 0x85, 0x5C, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x80, 0x80, 0x90,
-0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xC5, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xA1, 0x90,
-0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0xAB, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x88,
-0x5A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF,
-0x54, 0x1F, 0xFE, 0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06, 0x90, 0x93, 0x1A,
-0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x1C, 0x12, 0x43, 0xA8, 0x90,
-0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x00,
-0x04, 0x12, 0x1F, 0x0F, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x93, 0x20, 0xF0, 0x90,
-0x93, 0x1A, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAD, 0x82, 0xAC,
-0x83, 0x90, 0x93, 0x21, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84,
-0xF9, 0x74, 0x8A, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x1C, 0x12,
-0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x23, 0x12, 0x43,
-0xA8, 0xEF, 0x12, 0x42, 0x53, 0x90, 0x93, 0x1C, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F,
-0x0F, 0xFF, 0x90, 0x93, 0x23, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x65, 0x90,
-0x93, 0x1C, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x21, 0xE0,
-0xFC, 0xA3, 0xE0, 0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0x8D, 0x82, 0x8C,
-0x83, 0xA3, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0xFF, 0x24, 0xC2, 0xF5,
-0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x1B, 0xE0, 0xFE, 0x75, 0xF0, 0x09,
-0xEF, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8B,
-0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x20, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90,
-0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x8F, 0x57, 0xEF, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82,
-0xE4, 0x34, 0x90, 0xAF, 0x82, 0xF5, 0x58, 0x8F, 0x59, 0xE5, 0x57, 0x75, 0xF0, 0x02, 0xA4, 0x24,
-0x02, 0xF9, 0x74, 0x89, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C, 0x75, 0xF0, 0x09,
-0xE5, 0x57, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAF, 0x82, 0x85, 0x83, 0x5D, 0x8F, 0x5E, 0xE5,
-0x57, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35, 0xF0, 0x75, 0x5F, 0x01, 0xF5,
-0x60, 0x89, 0x61, 0x74, 0xC2, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x12,
-0x43, 0xD1, 0x6B, 0x57, 0x00, 0x6B, 0x6C, 0x01, 0x6B, 0x81, 0x02, 0x6B, 0x96, 0x03, 0x6B, 0xBF,
-0x04, 0x6B, 0xD4, 0x05, 0x6B, 0xE9, 0x06, 0x6C, 0x0F, 0x0C, 0x6C, 0x3C, 0x0D, 0x6C, 0x69, 0x0E,
-0x6C, 0x96, 0x0F, 0x00, 0x00, 0x6C, 0xCA, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
-0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80, 0x3C, 0xE5, 0x57, 0x25, 0xE0,
-0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x10, 0x80,
-0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0,
-0xF0, 0xA3, 0x74, 0x05, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34,
-0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5,
-0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0x8F, 0xF0, 0x81, 0xCA, 0xE5,
-0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3,
-0x74, 0xF5, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
-0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5,
-0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0xE5, 0x57, 0x25, 0xE0,
-0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x81, 0xCA, 0x90,
-0x04, 0x47, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x46, 0xE0,
-0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x45, 0xE0,
-0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x44, 0x81, 0xC1, 0x90, 0x04, 0x4B, 0xE0,
-0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4A, 0xE0, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x49, 0xE0, 0x85, 0x59, 0x82,
-0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04, 0x4F, 0xE0, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4E, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
-0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x4D, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83,
-0xF0, 0x90, 0x04, 0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
-0x12, 0x42, 0x53, 0x90, 0x04, 0x52, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01,
-0x12, 0x42, 0x65, 0x90, 0x04, 0x51, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04,
-0x50, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
-0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61,
-0x12, 0x1E, 0xF6, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0xAB, 0x5A, 0xE5,
-0x5C, 0x24, 0x01, 0xF9, 0xE4, 0x35, 0x5B, 0xFA, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E,
-0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x5F, 0xD0,
-0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xC0, 0x83,
-0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82,
-0xD0, 0x83, 0xF0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF,
-0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0,
-0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3,
-0xE0, 0x4E, 0x60, 0x4B, 0x90, 0x93, 0x26, 0x74, 0x0B, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3,
-0x94, 0x00, 0x50, 0x02, 0xC1, 0x0F, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3,
-0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
-0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x0A, 0x90, 0x93, 0x26,
-0xE0, 0x24, 0x10, 0xA3, 0xF0, 0x80, 0x68, 0x90, 0x93, 0x26, 0xE0, 0x14, 0xF0, 0x80, 0xBB, 0xE5,
-0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
-0x4E, 0x60, 0x47, 0x90, 0x93, 0x26, 0x74, 0x0F, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3, 0x94,
-0x00, 0x40, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
-0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
-0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x93, 0x26, 0xE0, 0xA3, 0xF0,
-0x80, 0x0D, 0x90, 0x93, 0x26, 0xE0, 0x14, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0xE5,
-0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
-0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x26, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3, 0x94, 0x10,
-0x40, 0x02, 0xC1, 0xC8, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
-0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
-0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x06, 0x90, 0x93, 0x26, 0xE0, 0x80,
-0x63, 0x90, 0x93, 0x26, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5,
-0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93,
-0x26, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3, 0x94, 0x0C, 0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00,
-0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25,
-0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F,
-0x4E, 0x60, 0x08, 0x90, 0x93, 0x26, 0xE0, 0x24, 0x10, 0x80, 0x09, 0x90, 0x93, 0x26, 0xE0, 0x04,
-0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x28, 0xF0, 0x90, 0x93, 0x27, 0xE0, 0xFF, 0x75, 0xF0, 0x09,
-0xE5, 0x57, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xEF, 0xF0, 0x90, 0x93, 0x28, 0xE0, 0xFE, 0x75,
-0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0xE5, 0x57, 0xC3, 0x94,
-0x20, 0x50, 0x2C, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3,
-0x9F, 0x40, 0x02, 0x80, 0x47, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83,
-0xE0, 0xC3, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x28, 0xE0, 0xA3, 0xF0, 0x80, 0x37, 0x80, 0x2D, 0x74,
-0x27, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x27, 0xE0,
-0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x07, 0x90, 0x93, 0x29, 0xEE, 0xF0, 0x80, 0x17, 0x90, 0x93, 0x28,
-0xE0, 0xFE, 0xEF, 0xC3, 0x9E, 0x50, 0x05, 0xA3, 0xEE, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x27, 0xE0,
-0x90, 0x93, 0x29, 0xF0, 0x90, 0x93, 0x29, 0xE0, 0xFD, 0xAF, 0x57, 0x12, 0x70, 0x63, 0x90, 0x93,
-0x29, 0xE0, 0xFF, 0x74, 0xA7, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xEF, 0xF0,
-0x90, 0x93, 0x27, 0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x03, 0xF0,
-0x22, 0xEF, 0xD3, 0x94, 0x0B, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x02, 0xF0, 0x22, 0xEF, 0xD3,
-0x94, 0x03, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x8A, 0x83, 0xF0,
-0x22, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x3F, 0xFE, 0xEF, 0x54, 0x80, 0xC4, 0x13,
-0x13, 0x13, 0x54, 0x01, 0xFD, 0xAF, 0x06, 0x21, 0xDD, 0x12, 0x1E, 0xF6, 0xF5, 0x62, 0x22, 0x90,
-0x93, 0x1A, 0x02, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0x90, 0x89, 0x01, 0xF0, 0x22, 0x12, 0x1E, 0xF6,
-0x90, 0x93, 0x6F, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x60, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE,
-0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xCE,
-0x12, 0x43, 0xC8, 0x90, 0x93, 0xD1, 0xE0, 0x54, 0xF0, 0x44, 0x06, 0xFF, 0xF0, 0xED, 0x54, 0x0F,
-0xC4, 0x54, 0xF0, 0xFE, 0xEF, 0x54, 0x0F, 0x4E, 0xF0, 0x90, 0x93, 0xCE, 0x12, 0x43, 0xA8, 0x90,
-0x93, 0xCB, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xD1, 0x12, 0x5E, 0xBE, 0xD0, 0xD0,
-0x92, 0xAF, 0x22, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x39, 0xEF, 0x30, 0xE0, 0x17, 0xED, 0xC4, 0x54,
-0xF0, 0xFD, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
-0x54, 0x0F, 0x80, 0x10, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5,
-0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
-0x4D, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x0E,
-0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED, 0xF0, 0x80, 0x2A, 0x74, 0x27,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xED, 0xF0, 0x90, 0x93, 0x8B, 0xEF, 0xF0, 0x24,
-0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x8C, 0xF0, 0x7B, 0x01, 0x7A,
-0x93, 0x79, 0x8B, 0x7D, 0x02, 0x12, 0x6F, 0xE6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F, 0x52, 0x8D,
-0x53, 0xE5, 0x53, 0x54, 0x1F, 0x90, 0x93, 0x03, 0xF0, 0x74, 0x01, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
-0x88, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x01, 0xF0, 0x90, 0x93, 0x04, 0x74, 0x01, 0xF0, 0xEB, 0xC3,
-0x94, 0x01, 0x40, 0x02, 0x80, 0x3B, 0x90, 0x93, 0x01, 0xE0, 0x25, 0x55, 0xFF, 0xA3, 0xF0, 0xA3,
-0xE0, 0x90, 0x41, 0x9E, 0x93, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x13, 0x74, 0x01, 0x25, 0x52, 0xF5,
-0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAD, 0x53, 0xAF, 0x52, 0x01, 0x63, 0x90, 0x93,
-0x02, 0xE0, 0xFF, 0x74, 0x01, 0x25, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEF, 0xF0,
-0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
-0x06, 0xF0, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x54, 0x1F, 0x90,
-0x93, 0x05, 0xF0, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0,
-0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x5D,
-0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x85, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89,
-0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x85, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x25,
-0xE0, 0x25, 0xE0, 0xFF, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEF, 0xF0,
-0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0xC8, 0x40, 0x0D,
-0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0x74, 0xC8, 0xF0, 0x90, 0x93, 0x06,
-0xE0, 0xFF, 0x90, 0x93, 0x05, 0xE0, 0xD3, 0x9F, 0x40, 0x02, 0xEF, 0xF0, 0x90, 0x93, 0x05, 0xE0,
-0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74,
-0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74,
-0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0,
-0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x05,
-0x90, 0x93, 0x05, 0xE0, 0xFD, 0x11, 0x63, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60,
-0x12, 0x90, 0x04, 0x30, 0xE0, 0x70, 0x0C, 0x04, 0xF0, 0xA3, 0xF0, 0xA3, 0x04, 0xF0, 0x90, 0x04,
-0xCF, 0x04, 0xF0, 0x90, 0x93, 0x05, 0xE0, 0xFF, 0x22, 0xAC, 0x07, 0xEC, 0xC3, 0x94, 0x20, 0x50,
-0x13, 0x74, 0x84, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93,
-0x1F, 0xF0, 0x80, 0x11, 0x74, 0x27, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54,
-0x7F, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x93, 0x22, 0xF0,
-0x75, 0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x24, 0xF0, 0x75,
-0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0x90, 0x93, 0x25, 0xF0, 0xEC,
-0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90,
-0x93, 0x26, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34,
-0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x28, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x74,
-0xC6, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C,
-0x90, 0x93, 0x25, 0xE0, 0x90, 0x93, 0x22, 0xF0, 0x90, 0x93, 0x1F, 0xF0, 0xED, 0x70, 0x02, 0x61,
-0xA3, 0x90, 0x93, 0x23, 0xED, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x93, 0x22,
-0xE0, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x93, 0x23, 0xE0, 0x14, 0xF0, 0x90, 0x93, 0x23, 0xE0, 0x70,
-0x02, 0x61, 0xA3, 0x90, 0x93, 0x22, 0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02, 0x61, 0xA3, 0xE4,
-0x90, 0x93, 0x21, 0xF0, 0xEF, 0x14, 0x90, 0x93, 0x20, 0xF0, 0x90, 0x93, 0x24, 0xE0, 0xFD, 0x90,
-0x93, 0x20, 0xE0, 0xFF, 0xD3, 0x9D, 0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0,
-0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
-0xF9, 0xFF, 0x90, 0x93, 0x28, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93,
-0x20, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
-0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x26, 0xE0, 0x5E, 0xFE, 0xA3,
-0xE0, 0x5F, 0x4E, 0x60, 0x1A, 0x90, 0x93, 0x20, 0xE0, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x93, 0x21,
-0xE0, 0x04, 0xF0, 0x90, 0x93, 0x23, 0xE0, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0x6F, 0x60, 0x08, 0x90,
-0x93, 0x20, 0xE0, 0x14, 0xF0, 0x80, 0x83, 0x90, 0x93, 0x23, 0xE0, 0xFF, 0x90, 0x93, 0x21, 0xE0,
-0xC3, 0x9F, 0x50, 0x0F, 0x90, 0x93, 0x20, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x93, 0x24, 0xE0, 0x90,
-0x93, 0x1F, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34,
-0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
-0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
-0xFE, 0xEF, 0x13, 0xFF, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83,
-0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x90, 0x93, 0x1F, 0xE0, 0xFD, 0x11, 0x63, 0x90, 0x93,
-0x1F, 0xE0, 0xFF, 0x22, 0xAD, 0x07, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x1F, 0xF0, 0x80, 0x11, 0x74,
-0x27, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x1F, 0xF0,
-0x90, 0x93, 0x1F, 0xE0, 0xF9, 0x54, 0x1F, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88,
-0x12, 0x43, 0x9C, 0xE0, 0xFF, 0x90, 0x93, 0x22, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82,
-0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x23, 0xCB, 0xF0, 0xA3, 0xEB,
-0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3,
-0xE0, 0x90, 0x93, 0x25, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x93, 0x20, 0xE0, 0xFE, 0x25, 0xE0,
-0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB,
-0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB,
-0xF0, 0xEE, 0xC3, 0x9F, 0x40, 0x02, 0xA1, 0x51, 0x90, 0x93, 0x20, 0xE0, 0xFF, 0x74, 0x28, 0x2D,
-0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0xEF, 0x04, 0x90, 0x93, 0x21, 0xF0, 0x90,
-0x93, 0x22, 0xE0, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0xFE, 0xD3, 0x9F, 0x40, 0x02, 0xA1, 0x8B, 0xEE,
-0xC3, 0x94, 0x10, 0x40, 0x21, 0xEE, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
-0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x23, 0xE0, 0x5E, 0xFE,
-0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93, 0x21, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59,
-0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
-0xFF, 0x90, 0x93, 0x25, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x93, 0x21,
-0xE0, 0xB4, 0x11, 0x0D, 0x90, 0x93, 0x24, 0xE0, 0x30, 0xE7, 0x06, 0x90, 0x93, 0x21, 0x74, 0x17,
-0xF0, 0x90, 0x93, 0x21, 0xE0, 0xFF, 0x64, 0x13, 0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x93,
-0x23, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x93, 0x21, 0x74, 0x18, 0xF0, 0x90, 0x93, 0x21, 0xE0, 0x90,
-0x93, 0x20, 0xF0, 0x90, 0x93, 0x1F, 0xF0, 0x80, 0x42, 0x90, 0x93, 0x21, 0xE0, 0x04, 0xF0, 0x81,
-0xAF, 0x90, 0x93, 0x22, 0xE0, 0xFC, 0x90, 0x93, 0x20, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0x28,
-0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A,
-0x8A, 0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01, 0x10, 0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x93, 0x20, 0xE0,
-0x44, 0x40, 0x90, 0x93, 0x1F, 0xF0, 0x80, 0x03, 0xAF, 0x01, 0x22, 0x90, 0x93, 0x20, 0xE0, 0xFF,
-0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01,
-0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01,
-0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24,
-0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90,
-0x93, 0x20, 0xE0, 0xD3, 0x9C, 0x40, 0x5E, 0x90, 0x93, 0x22, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x20, 0xEF, 0xF0, 0x90, 0x93, 0x1F,
-0xF0, 0xFC, 0xA3, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83,
-0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
-0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13,
-0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3,
-0xEF, 0xF0, 0xAF, 0x04, 0x22, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4,
-0xF0, 0xAF, 0x05, 0x90, 0x93, 0x1F, 0xE0, 0x44, 0x80, 0xFD, 0x11, 0x63, 0x90, 0x93, 0x1F, 0xE0,
-0x44, 0x80, 0xFF, 0x22, 0xE4, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xC3, 0x94,
-0x40, 0x40, 0x03, 0x02, 0x7E, 0x57, 0xEF, 0xB4, 0x20, 0x14, 0x90, 0x8F, 0x46, 0xE0, 0x04, 0xF0,
-0x90, 0x89, 0x01, 0xE0, 0xFF, 0x90, 0x8F, 0x46, 0xE0, 0xB5, 0x07, 0x02, 0xE4, 0xF0, 0x90, 0x93,
-0x0F, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0xE0, 0x64, 0x01, 0x60,
-0x03, 0x02, 0x7E, 0x4E, 0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83,
-0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEE, 0x94, 0x00, 0x50, 0x03, 0x02, 0x7E, 0x4E, 0x90,
-0x93, 0x0F, 0xE0, 0x94, 0x20, 0x40, 0x09, 0x90, 0x8F, 0x46, 0xE0, 0x60, 0x03, 0x02, 0x7E, 0x57,
-0x90, 0x93, 0x0F, 0xE0, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75,
-0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34,
-0x87, 0xF5, 0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x93, 0x14, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF,
-0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
-0x93, 0x16, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x50,
-0x13, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93,
-0x10, 0xF0, 0x80, 0x14, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
-0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93, 0x10, 0xF0, 0x90, 0x93, 0x10, 0xE0, 0xFE, 0x54, 0x1F, 0xA3,
-0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0,
-0x90, 0x93, 0x19, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3,
-0x94, 0x05, 0x40, 0x03, 0x02, 0x79, 0xEC, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x90, 0x93, 0x11, 0xE0,
-0x9F, 0x40, 0x13, 0x90, 0x93, 0x19, 0xE0, 0x90, 0x93, 0x11, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0x90,
-0x93, 0x10, 0xF0, 0xEF, 0x4E, 0xF0, 0x90, 0x93, 0x11, 0xE0, 0xFF, 0x90, 0x41, 0x12, 0x93, 0xFE,
-0x90, 0x93, 0x0F, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xC3, 0x9E,
-0x40, 0x06, 0xEF, 0x90, 0x40, 0xDA, 0x80, 0x07, 0x90, 0x93, 0x11, 0xE0, 0x90, 0x40, 0xF6, 0x93,
-0x90, 0x93, 0x18, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x50, 0xF9, 0x74,
-0x40, 0x35, 0xF0, 0xFA, 0x7B, 0xFF, 0x8B, 0x57, 0xF5, 0x58, 0x89, 0x59, 0x90, 0x93, 0x0F, 0xE0,
-0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
-0x93, 0x12, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x9D, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE,
-0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x01, 0x12, 0x1F,
-0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0x12, 0x42, 0xC8,
-0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB,
-0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A,
-0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x04, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C,
-0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90,
-0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00,
-0x06, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0,
-0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF,
-0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x08, 0x12, 0x42, 0xC8, 0xFD, 0xAC,
-0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA,
-0x58, 0xA9, 0x59, 0x90, 0x00, 0x05, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x14, 0xE0,
-0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0xD3, 0x90, 0x93, 0x13, 0xE0, 0x9F, 0x90, 0x93, 0x12,
-0xE0, 0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F, 0xF0, 0x90, 0x93, 0x12, 0xE0, 0x9E, 0xF0, 0x80, 0x07,
-0xE4, 0x90, 0x93, 0x12, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x12, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90,
-0x93, 0x0F, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0,
-0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x10, 0xE0, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41,
-0xF5, 0x83, 0xE4, 0x93, 0xFC, 0x74, 0x01, 0x93, 0xFD, 0xD3, 0xEF, 0x9D, 0xEE, 0x9C, 0x50, 0x02,
-0x21, 0xBB, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0x82, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
-0xE0, 0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9E,
-0x40, 0x03, 0xEF, 0x80, 0x1C, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34,
-0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x82, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0,
-0xC3, 0x9E, 0x90, 0x93, 0x1A, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x02, 0x80,
-0x23, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0,
-0xD3, 0x94, 0x01, 0x40, 0x0F, 0x74, 0xC6, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0,
-0x14, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5,
-0x83, 0xE4, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5,
-0x83, 0xE0, 0x60, 0x02, 0x81, 0xFC, 0x12, 0x73, 0xF4, 0x81, 0xFC, 0x90, 0x93, 0x10, 0xE0, 0x25,
-0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93,
-0xFF, 0xC3, 0x90, 0x93, 0x13, 0xE0, 0x9F, 0x90, 0x93, 0x12, 0xE0, 0x9E, 0x40, 0x02, 0x81, 0xFC,
-0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x72, 0x29, 0x81, 0xFC, 0x90, 0x93, 0x0F, 0xE0,
-0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x02,
-0x61, 0xCA, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x03, 0x0B, 0x90, 0x93, 0x11, 0xE0, 0xC3, 0x94,
-0x19, 0x40, 0x3D, 0x80, 0x2E, 0xEE, 0xB4, 0x02, 0x0B, 0x90, 0x93, 0x11, 0xE0, 0xC3, 0x94, 0x11,
-0x40, 0x2E, 0x80, 0x1F, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x93, 0x11, 0xE0,
-0xC3, 0x94, 0x0A, 0x40, 0x1B, 0x80, 0x0C, 0xEE, 0x70, 0x11, 0x90, 0x93, 0x11, 0xE0, 0xC3, 0x94,
-0x03, 0x40, 0x0D, 0x90, 0x8E, 0xC5, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x8E, 0xC5, 0xF0,
-0x90, 0x93, 0x0F, 0xE0, 0xFE, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90,
-0x93, 0x1E, 0xF0, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0xC3,
-0x94, 0x30, 0x50, 0x0A, 0xE4, 0x90, 0x93, 0x1E, 0xF0, 0x74, 0x67, 0x2F, 0x61, 0x75, 0x90, 0x8E,
-0xC5, 0xE0, 0x64, 0x01, 0x60, 0x02, 0x61, 0x6A, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0x06, 0xF5, 0x82,
-0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x64, 0x0A, 0x60, 0x5B, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xEE,
-0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
-0xE0, 0xFF, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x38, 0x90, 0x93, 0x0F,
-0xE0, 0xFE, 0xEF, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
-0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x16, 0x90,
-0x93, 0x0F, 0xE0, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93,
-0x11, 0xE0, 0x6F, 0x60, 0x56, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E,
-0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x42, 0x40, 0x08, 0x90, 0x93, 0x1E, 0x74, 0x05, 0xF0, 0x80,
-0x11, 0xEF, 0xD3, 0x94, 0x39, 0x90, 0x93, 0x1E, 0x40, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74,
-0x01, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
-0xE0, 0xFE, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93,
-0x0F, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0x80, 0x2F, 0x90, 0x93, 0x0F, 0xE0, 0xFF,
-0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82,
-0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x14, 0xE4, 0x90, 0x93, 0x1E, 0xF0, 0x90,
-0x93, 0x0F, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93,
-0x11, 0xE0, 0xFE, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
-0x83, 0xEE, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFE, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C,
-0xF5, 0x83, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xE0, 0xB4,
-0x01, 0x11, 0xE4, 0x90, 0x93, 0x1E, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
-0x83, 0xE4, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFD, 0x81, 0xF9, 0xEC, 0x64, 0x06, 0x60, 0x02, 0x81,
-0xFC, 0x90, 0x93, 0x12, 0xF0, 0xA3, 0xF0, 0x90, 0x41, 0xDB, 0x93, 0xFF, 0x7E, 0x00, 0x90, 0x93,
-0x14, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x1C, 0xEE, 0xF0, 0xA3, 0xEF,
-0xF0, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90,
-0x93, 0x1E, 0xF0, 0xE4, 0x90, 0x93, 0x1B, 0xF0, 0x90, 0x93, 0x1B, 0xE0, 0xFF, 0xD3, 0x94, 0x04,
-0x50, 0x47, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x75, 0xF0, 0x02, 0xEF, 0xA4, 0xF5, 0x82, 0x85,
-0xF0, 0x83, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0xEF, 0x90, 0x41, 0xD6, 0x93, 0xFF, 0x7E, 0x00,
-0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0x1C, 0xE0,
-0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x93, 0x13, 0xE0, 0x9F, 0x90, 0x93, 0x12, 0xE0, 0x9E, 0x50,
-0x08, 0x90, 0x93, 0x1B, 0xE0, 0x04, 0xF0, 0x80, 0xAF, 0x90, 0x93, 0x1B, 0xE0, 0xC3, 0x13, 0xF0,
-0x90, 0x93, 0x1E, 0xE0, 0xFF, 0xB4, 0x01, 0x0D, 0x90, 0x93, 0x1B, 0xE0, 0x70, 0x5D, 0x90, 0x93,
-0x1E, 0x04, 0xF0, 0x80, 0x5B, 0xEF, 0xB4, 0x03, 0x1D, 0x90, 0x93, 0x1B, 0xE0, 0xFF, 0x70, 0x08,
-0x90, 0x93, 0x1E, 0x74, 0x03, 0xF0, 0x80, 0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x1E, 0x74,
-0x01, 0xF0, 0x80, 0x3C, 0x80, 0x35, 0x90, 0x93, 0x1E, 0xE0, 0x64, 0x05, 0x70, 0x32, 0x90, 0x93,
-0x1B, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93, 0x1E, 0x74, 0x05, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x93,
-0x1E, 0xB4, 0x01, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3, 0x90, 0x93, 0x17,
-0xE0, 0x94, 0x03, 0x90, 0x93, 0x16, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x1E, 0xF0,
-0xD3, 0x90, 0x93, 0x17, 0xE0, 0x94, 0x03, 0x90, 0x93, 0x16, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4,
-0x90, 0x93, 0x1E, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFD, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xC4,
-0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xED, 0xF0, 0x12, 0x70, 0x23, 0x90, 0x93, 0x0F, 0xE0,
-0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x05, 0x50, 0x0F,
-0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x0F, 0x90,
-0x93, 0x0F, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93,
-0x16, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x74, 0xFF, 0x9F, 0xFF, 0x74, 0xFF, 0x9E, 0xFE, 0x90,
-0x93, 0x0F, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
-0xFA, 0xA3, 0xE0, 0xD3, 0x9F, 0xEA, 0x9E, 0x50, 0x1C, 0x90, 0x93, 0x16, 0xE0, 0xFE, 0xA3, 0xE0,
-0xFF, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEE, 0x8F, 0xF0,
-0x12, 0x42, 0x87, 0x80, 0x14, 0x90, 0x93, 0x0F, 0xE0, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x25, 0xE0,
-0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0x74,
-0xFF, 0x9D, 0xFB, 0x74, 0xFF, 0x9C, 0xFA, 0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34,
-0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x9B, 0xEE, 0x9A, 0x90, 0x93, 0x0F, 0xE0, 0x50,
-0x13, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEC, 0x8D, 0xF0, 0x12,
-0x42, 0x87, 0x80, 0x10, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74,
-0xFF, 0xF0, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x00,
-0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90,
-0x00, 0x04, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43,
-0x1F, 0x90, 0x00, 0x08, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x25,
-0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
-0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x93,
-0x0F, 0xE0, 0x04, 0xF0, 0x02, 0x76, 0x59, 0x22, 0x90, 0x04, 0x44, 0x74, 0x11, 0xF0, 0xA3, 0x74,
-0xF0, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x93, 0x0F,
-0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x14, 0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5,
-0x83, 0xE4, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8F, 0x46, 0xF0,
-0x90, 0x89, 0x01, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xC3,
-0x94, 0x40, 0x40, 0x03, 0x02, 0x80, 0x53, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x00, 0x12, 0x43,
-0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12, 0x43, 0x9C, 0xE4,
-0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x04, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3,
-0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x06, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75,
-0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x08, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0xA7, 0x2F,
-0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83,
-0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0,
-0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0,
-0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0,
-0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0,
-0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0,
-0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0,
-0xA3, 0xF0, 0x74, 0x07, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC7,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4,
-0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8E, 0x04, 0xF0, 0x90, 0x41, 0x8C, 0x93, 0xFE, 0x74,
-0x01, 0x93, 0xFF, 0x90, 0x41, 0x54, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13,
-0xFE, 0xEF, 0x13, 0xFF, 0x90, 0x93, 0x0F, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
-0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8B,
-0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C,
-0x74, 0x01, 0xF0, 0x74, 0xC2, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0C, 0xF0,
-0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x75,
-0xF0, 0x09, 0xED, 0x90, 0x8A, 0x84, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0x75,
-0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09, 0xED,
-0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x0F, 0x74, 0x84,
-0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x80, 0x0D, 0x74, 0x27, 0x2D,
-0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0x04, 0xF0,
-0x02, 0x7E, 0x9A, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0xC3, 0x94, 0x40, 0x50, 0x14, 0x90, 0x00, 0x02,
-0x12, 0x1F, 0x0F, 0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEE, 0xF0,
-0x22, 0xEF, 0xB4, 0x40, 0x0A, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x8A, 0x82, 0xF0, 0x22,
-0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFC, 0xED, 0xC3,
-0x94, 0x40, 0x40, 0x02, 0xE4, 0xFD, 0xEC, 0xC3, 0x94, 0x40, 0x40, 0x02, 0xE4, 0xFC, 0xED, 0x25,
-0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93,
-0x1A, 0xF0, 0xEE, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5,
-0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x1C, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xED, 0xF0, 0xA3,
-0x74, 0xFF, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
-0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x20, 0xF0, 0xEE, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5,
-0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x22, 0xF0, 0xEE, 0xA3,
-0xF0, 0xA3, 0xEC, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x1A, 0x02, 0x5F,
-0x97, 0x7F, 0xAF, 0x7E, 0x01, 0x90, 0x93, 0xDB, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0,
-0xA3, 0xF0, 0x90, 0x93, 0xDB, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C,
-0xC3, 0x90, 0x93, 0xDE, 0xE0, 0x94, 0xE8, 0x90, 0x93, 0xDD, 0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90,
-0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x93, 0xDD, 0xE4, 0x75, 0xF0, 0x01,
-0x12, 0x42, 0x87, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x80, 0xC6, 0x7F, 0x01, 0x22, 0xD3,
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xC2, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x68, 0xE0,
-0xFF, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x65, 0x31, 0x51, 0xEF, 0x70, 0x02, 0x41,
-0x5C, 0x90, 0x93, 0xC2, 0x12, 0x43, 0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x75, 0x27, 0x02,
-0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0x12, 0x57, 0xF9, 0x90, 0x93, 0xC5, 0x12, 0x43, 0xA8, 0x8B,
-0x24, 0x8A, 0x25, 0x89, 0x26, 0x90, 0x93, 0xC2, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4,
-0x54, 0x0F, 0xF5, 0x27, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2, 0x12, 0x57, 0xF9, 0x90, 0x01, 0xAF,
-0x74, 0xFF, 0xF0, 0x90, 0x93, 0x70, 0xE0, 0x64, 0x01, 0x70, 0x4A, 0x90, 0x93, 0xC2, 0x12, 0x43,
-0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x75, 0x27, 0x02, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x20,
-0x12, 0x57, 0xF9, 0x90, 0x93, 0xC5, 0x12, 0x43, 0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x90,
-0x93, 0xC2, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x27, 0x7B, 0x01,
-0x7A, 0xFD, 0x79, 0x22, 0x12, 0x57, 0xF9, 0x90, 0x93, 0x54, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82,
-0x8E, 0x83, 0x74, 0xFF, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0x69, 0xE0, 0x75, 0xF0, 0x0F, 0xA4,
-0x24, 0x6B, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x02, 0xC0, 0x01, 0xE0, 0x75,
-0xF0, 0x0F, 0xA4, 0x24, 0x6D, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x90, 0x93, 0xC5, 0x12, 0x43,
-0xC8, 0xD0, 0x01, 0xD0, 0x02, 0x31, 0x9F, 0x90, 0x92, 0x69, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A,
-0x02, 0xE4, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92, 0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D,
-0x02, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x92, 0x69, 0xF0,
-0xA3, 0xF0, 0x90, 0x01, 0xAF, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93,
-0x1A, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x1D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93,
-0x1A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x50, 0xF0, 0x90, 0x00,
-0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x33, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54,
-0x01, 0x90, 0x93, 0x34, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x01, 0x90, 0x93, 0x3E, 0xF0, 0x90, 0x00,
-0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x3B, 0xF0, 0xEF, 0x13, 0x13,
-0x13, 0x54, 0x01, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x54,
-0x01, 0x90, 0x93, 0x3D, 0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x01, 0x90, 0x93, 0x52, 0xF0, 0x90, 0x00,
-0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x40, 0xF0, 0xE0, 0x70,
-0x38, 0x90, 0x93, 0x3E, 0xE0, 0x70, 0x10, 0xFF, 0x12, 0x50, 0x56, 0x90, 0x93, 0x1D, 0x12, 0x1F,
-0xD5, 0x00, 0x00, 0x03, 0x10, 0x80, 0x0F, 0x7F, 0x01, 0x12, 0x50, 0x56, 0x90, 0x93, 0x1D, 0x12,
-0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x90, 0x93, 0x1D, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12,
-0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x34, 0xE0, 0x70, 0x03, 0x12,
-0x4F, 0x63, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x4C, 0xDF, 0x90, 0x93, 0x50, 0xE0, 0x90,
-0x01, 0xE6, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x30,
-0xE0, 0x25, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x3F, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
-0x93, 0x42, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x3C, 0xF0, 0x90, 0x00, 0x03, 0x12,
-0x1F, 0x0F, 0x90, 0x93, 0x47, 0xF0, 0x22, 0x90, 0x93, 0x3F, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x42,
-0x74, 0x05, 0xF0, 0x90, 0x93, 0x3C, 0x74, 0x14, 0xF0, 0x90, 0x93, 0x47, 0x74, 0x05, 0xF0, 0x22,
-0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x46, 0xF0, 0x90, 0x00,
-0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x44, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90,
-0x93, 0x46, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x44, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x93,
-0x44, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x43, 0xF0,
-0x60, 0x19, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x48, 0xF4, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x09, 0x90,
-0x93, 0x4D, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0x63, 0x12, 0x51, 0x4C, 0x90, 0x93, 0x43, 0xE0, 0x90,
-0x01, 0xE7, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x2D, 0xE0, 0x54,
-0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x0F, 0xFF, 0xE0, 0x54, 0xF0, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54,
-0x70, 0xFF, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0x8F, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
-0x90, 0x93, 0x2F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x30, 0xF0, 0x90, 0x00,
-0x04, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x31, 0xF0, 0x90, 0x00, 0x01, 0x74, 0x19, 0x12, 0x42, 0x20,
-0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xD3, 0x94, 0x20, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74,
-0x01, 0xF0, 0x80, 0x57, 0xEF, 0xD3, 0x94, 0x40, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x02, 0xF0,
-0x80, 0x49, 0xEF, 0xD3, 0x94, 0x60, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x03, 0xF0, 0x80, 0x3B,
-0xEF, 0xD3, 0x94, 0x80, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x04, 0xF0, 0x80, 0x2D, 0xEF, 0xD3,
-0x94, 0xA0, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x05, 0xF0, 0x80, 0x1F, 0xEF, 0xD3, 0x94, 0xC0,
-0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x06, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0xE0, 0x90, 0x93,
-0x2E, 0x50, 0x05, 0x74, 0x07, 0xF0, 0x80, 0x03, 0x74, 0x08, 0xF0, 0x90, 0x93, 0x2E, 0xE0, 0x90,
-0x93, 0x32, 0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x1E, 0xF6, 0xFE, 0xAF, 0x05, 0xED,
-0x2E, 0x90, 0x93, 0x67, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93,
-0x68, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x69, 0xF0, 0x90,
-0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x6A, 0xF0, 0x90, 0x00, 0x04, 0x12,
-0x1F, 0x0F, 0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90, 0x93, 0x6B, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01,
-0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xC8, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x12, 0x1E,
-0xF6, 0xC3, 0x13, 0x20, 0xE0, 0x02, 0xC1, 0xB6, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E,
-0xF6, 0xFF, 0x54, 0x02, 0xFE, 0x90, 0x93, 0x9E, 0xE0, 0x54, 0xFD, 0x4E, 0xFE, 0xF0, 0xEF, 0x54,
-0x01, 0xFF, 0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x08, 0xFD, 0xEF,
-0x54, 0xF7, 0x4D, 0xFF, 0x90, 0x93, 0x9E, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E,
-0xFF, 0xF0, 0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x20, 0xFD, 0xEF, 0x54, 0xDF, 0x4D, 0xFF, 0x90, 0x93,
-0x9E, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0xEF, 0x54, 0xBF, 0x4E, 0xF0, 0x20, 0xE0, 0x02, 0xC1, 0xA2,
-0x90, 0x93, 0x1D, 0x74, 0x21, 0xF0, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF,
-0x13, 0x13, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x9E, 0xE0, 0xFD, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x60,
-0x31, 0xEF, 0x54, 0x04, 0xFF, 0xED, 0x54, 0xFB, 0x4F, 0xF0, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30,
-0xE0, 0x15, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x3A, 0x93, 0x90, 0x93,
-0x1D, 0xE0, 0x44, 0x08, 0xF0, 0x80, 0x0B, 0xE4, 0x90, 0x93, 0xA0, 0xF0, 0x7D, 0x40, 0xFF, 0x12,
-0x3A, 0x22, 0x90, 0x93, 0x9E, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90,
-0x93, 0x1D, 0xE0, 0x44, 0x12, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x93, 0x1D,
-0xE0, 0x44, 0x14, 0xF0, 0x90, 0x93, 0x9E, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x07, 0x90,
-0x93, 0x1D, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x93, 0x9E, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20,
-0xE0, 0x07, 0x90, 0x93, 0x1D, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93, 0x1D, 0xE0, 0x90, 0x05, 0x27,
-0xF0, 0x90, 0x93, 0x9F, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x55, 0x11, 0x90, 0x93, 0x9E, 0xE0,
-0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x04, 0x7F, 0x03, 0x80, 0x0E, 0x7F, 0x01, 0x12, 0x5E,
-0x91, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x12, 0x55, 0x11, 0x7F, 0x02, 0x02,
-0x88, 0x14, 0x90, 0x93, 0x1D, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27, 0xF0, 0xE4, 0xFF, 0x12, 0x55,
-0x11, 0x7F, 0x03, 0x02, 0x88, 0x14, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF,
-0x54, 0x02, 0xFE, 0x90, 0x93, 0x98, 0xE0, 0x54, 0xFD, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF,
-0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7,
-0x4D, 0xFF, 0x90, 0x93, 0x98, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0,
-0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x40, 0xFD, 0xEF, 0x54, 0xBF, 0x4D, 0xFF, 0x90, 0x93, 0x98, 0xF0,
-0xEE, 0x54, 0x04, 0xFE, 0xEF, 0x54, 0xFB, 0x4E, 0xF0, 0x20, 0xE0, 0x02, 0xE1, 0xC7, 0x90, 0x93,
-0x1D, 0x74, 0x31, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x15, 0x90,
-0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x3A, 0x93, 0x90, 0x93, 0x1D, 0xE0, 0x44,
-0x08, 0xF0, 0x80, 0x0B, 0xE4, 0x90, 0x93, 0x9A, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x3A, 0x22, 0x90,
-0x93, 0x98, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x93, 0x1D, 0xE0,
-0x44, 0x02, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x93, 0x1D, 0xE0, 0x44, 0x04,
-0xF0, 0x90, 0x93, 0x1D, 0xE0, 0x54, 0x0E, 0x60, 0x0C, 0x90, 0x01, 0x3E, 0x74, 0x03, 0xF0, 0xFD,
-0x7F, 0x02, 0x12, 0x3A, 0xAD, 0x90, 0x93, 0x1D, 0xE0, 0x90, 0x05, 0x27, 0xF0, 0x90, 0x93, 0x98,
-0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x64, 0x06, 0x60, 0x33,
-0x7F, 0x06, 0x12, 0x64, 0xDA, 0x80, 0x2C, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93,
-0x99, 0xE0, 0xB4, 0x06, 0x1B, 0x7F, 0x01, 0x12, 0x64, 0xDA, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF,
-0x60, 0x09, 0x7D, 0x01, 0xAF, 0x64, 0x12, 0x48, 0xF4, 0x80, 0x05, 0x12, 0x64, 0xA8, 0x80, 0x03,
-0x12, 0x67, 0x4A, 0x7F, 0x01, 0x80, 0x4D, 0x90, 0x93, 0x1D, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27,
-0xF0, 0x7D, 0x03, 0x7F, 0x02, 0x12, 0x3A, 0x3F, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x06, 0x02, 0x80,
-0x1B, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05,
-0x04, 0xE4, 0xFF, 0x80, 0x14, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09,
-0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x05, 0x7F, 0x01, 0x12, 0x64, 0xDA, 0x12, 0x67, 0x29, 0x12,
-0x51, 0x9C, 0x7F, 0x03, 0x11, 0x1B, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAD, 0x07, 0xEF, 0x64, 0x01,
-0x60, 0x04, 0xEF, 0xB4, 0x03, 0x15, 0x90, 0x93, 0x9E, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0,
-0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xED, 0x64, 0x02, 0x60, 0x04,
-0xED, 0xB4, 0x03, 0x15, 0x90, 0x93, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3,
-0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x6D,
-0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x6E, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0xE5,
-0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xEB, 0xE0, 0x54, 0xC0, 0x60, 0x43, 0xC3, 0x90, 0x93, 0xE6, 0xE0,
-0x94, 0x88, 0x90, 0x93, 0xE5, 0xE0, 0x94, 0x13, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x04,
-0xF0, 0x7F, 0x00, 0x22, 0x90, 0x93, 0xE5, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14,
-0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0xE6, 0xE0, 0x94, 0x64, 0x90, 0x93, 0xE5, 0xE0,
-0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE2, 0xB8, 0x7F, 0x00, 0x22, 0x7F, 0x01,
-0x22, 0x90, 0x93, 0xA4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xA8, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00,
-0x00, 0xE4, 0x7F, 0x1F, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0xA8, 0x12, 0x43, 0x90, 0xD3, 0x12, 0x43,
-0x73, 0x50, 0x41, 0x90, 0x93, 0xA8, 0x12, 0x43, 0x84, 0xA9, 0x07, 0x90, 0x93, 0xA4, 0x12, 0x43,
-0x84, 0xA8, 0x01, 0x12, 0x1F, 0xA3, 0xEF, 0x54, 0x01, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0x7B, 0x01,
-0xFA, 0xF9, 0xF8, 0xC3, 0x12, 0x43, 0x73, 0x60, 0x1B, 0x90, 0x93, 0xA8, 0x12, 0x43, 0x84, 0xEF,
-0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, 0x93, 0xA8, 0x12,
-0x1F, 0xC9, 0x80, 0xAD, 0x90, 0x93, 0xA8, 0x02, 0x43, 0x84, 0x90, 0x93, 0x73, 0x12, 0x1F, 0xC9,
-0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0x77, 0x12, 0x43, 0x90, 0xC3, 0x12, 0x43, 0x73,
-0x90, 0x93, 0x73, 0x60, 0x67, 0x12, 0x43, 0x84, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0x7F, 0x12, 0x1F,
-0xC9, 0x90, 0x93, 0x77, 0x12, 0x43, 0x84, 0x11, 0xC1, 0x90, 0x93, 0x83, 0x12, 0x1F, 0xC9, 0x90,
-0x93, 0x77, 0x12, 0x43, 0x84, 0x12, 0x43, 0x66, 0x90, 0x93, 0x7F, 0x12, 0x43, 0x90, 0x12, 0x43,
-0x4C, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0x83, 0x12, 0x43, 0x84, 0xA9,
-0x07, 0x90, 0x93, 0x7B, 0x12, 0x43, 0x84, 0xA8, 0x01, 0x12, 0x1F, 0xB6, 0xD0, 0x03, 0xD0, 0x02,
-0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0x59, 0x90, 0x93, 0x87, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0x73,
-0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0x87, 0x80, 0x0A, 0x12, 0x43, 0x84, 0xC0,
-0x06, 0xC0, 0x07, 0x90, 0x93, 0x7B, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0xD0,
-0x07, 0xD0, 0x06, 0x02, 0x34, 0x30, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x9F, 0x74,
-0x04, 0xF0, 0x22, 0x12, 0x56, 0x01, 0x80, 0xEE, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x05,
-0x27, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93, 0x9F, 0x74, 0x04, 0xF0, 0x22, 0x12, 0x56, 0x14, 0x90,
-0x93, 0x9F, 0x74, 0x04, 0xF0, 0x22, 0x90, 0x01, 0x57, 0xE0, 0x60, 0x3C, 0x90, 0x01, 0x57, 0xE4,
-0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x51, 0xE0, 0x60, 0x07, 0xE4, 0xF0, 0x53,
-0x66, 0xFD, 0x80, 0x24, 0x90, 0x93, 0x38, 0xE0, 0x04, 0xF0, 0x53, 0x66, 0xEF, 0x90, 0x93, 0x3F,
-0xE0, 0xFF, 0x90, 0x93, 0x38, 0xE0, 0xD3, 0x9F, 0x40, 0x0E, 0xE5, 0x62, 0xB4, 0x01, 0x09, 0x90,
-0x93, 0x39, 0xE0, 0x70, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x5B, 0xE0, 0x60, 0x10, 0x90, 0x01,
-0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x4C, 0xF0, 0x90, 0x01,
-0x5F, 0xE0, 0x60, 0x10, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0xE4,
-0x90, 0x93, 0x49, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0xE7, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0,
-0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01,
-0x22, 0xD3, 0x90, 0x93, 0xE8, 0xE0, 0x94, 0xE8, 0x90, 0x93, 0xE7, 0xE0, 0x94, 0x03, 0x40, 0x03,
-0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x93, 0xE7, 0xE4, 0x75, 0xF0,
-0x01, 0x12, 0x42, 0x87, 0x80, 0xC6, 0xE4, 0xFF, 0x02, 0x4E, 0x8B, 0x90, 0x93, 0x1A, 0x12, 0x43,
-0xC8, 0x12, 0x1E, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x93, 0xE0, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xE0,
-0x30, 0xE0, 0x02, 0x51, 0xA6, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xC3, 0x13,
-0x30, 0xE0, 0x0A, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0xE1, 0xF0, 0x22, 0x7E, 0xBF,
-};
-
-#ifdef CONFIG_MP_INCLUDED//BT_MP 16980 const u1Byte Rtl8723EFwBTImgArray[Rtl8723EBTImgArrayLength] = {
-u8 Rtl8723EFwBTImgArray[Rtl8723EBTImgArrayLength] = {
-0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x4E,0xB2,0xCF,0xF7,0x12,0x6B,0x6B,0xEB,
-0x4F,0xB4,0x60,0xCA,0x4C,0xB2,0x68,0xF1,0x1A,0x6B,0x4E,0xB5,0x60,0xCA,0x4B,0xB2,
-0x00,0x68,0x0A,0x6E,0x00,0x18,0x2E,0x2E,0x00,0xC2,0x44,0xB7,0x4A,0xB2,0x4B,0xB3,
-0xE8,0x4F,0x00,0xC2,0xC0,0xF0,0x58,0x9F,0x40,0xF0,0x0C,0xC7,0x4A,0xB0,0x6D,0xEA,
-0xC0,0xF0,0x58,0xDF,0x45,0xF1,0x09,0x6A,0x00,0xF1,0x50,0xCF,0x0E,0xF0,0x1D,0x6A,
-0x80,0xF1,0x62,0xA7,0x43,0xDF,0x42,0xB2,0x00,0x69,0x25,0xDF,0x44,0xDF,0x68,0x32,
-0x69,0xE2,0x40,0xB3,0x44,0x32,0x26,0xDF,0x27,0xDF,0x28,0xDF,0x29,0xDF,0x40,0xCB,
-0x90,0x67,0xB1,0x67,0x30,0x6E,0x00,0x18,0x64,0x2E,0x04,0xD7,0x01,0x6A,0x4B,0xEA,
-0x47,0xD8,0x3A,0xB3,0x40,0x98,0x3A,0xB4,0xB1,0x67,0x6D,0xEA,0x40,0xD8,0x0A,0x6B,
-0x08,0x6A,0x6C,0xC0,0x0C,0x6E,0x00,0x18,0x64,0x2E,0x4D,0xC0,0x27,0xB3,0x02,0x6C,
-0x8B,0xEC,0x40,0x9B,0x03,0x6B,0x6B,0xEB,0x8C,0xEA,0x6C,0xEA,0x05,0x6B,0x6B,0xEB,
-0x6C,0xEA,0x22,0xB3,0x40,0xDB,0x22,0xB3,0x40,0x9B,0x8C,0xEA,0x40,0xDB,0x04,0x97,
-0x0E,0xF0,0x1D,0x6A,0x2C,0xB3,0x43,0xDF,0x2A,0xB2,0x60,0xDA,0x2C,0xB3,0x2B,0xB2,
-0x60,0xDA,0x2D,0xB3,0x2B,0xB2,0x60,0xDA,0x2D,0xB3,0x2C,0xB2,0x60,0xDA,0x2E,0xB3,
-0x2C,0xB2,0x60,0xDA,0x2E,0xB3,0x2D,0xB2,0x60,0xDA,0x2F,0xB3,0x2D,0xB2,0x60,0xDA,
-0x2F,0xB3,0x2E,0xB2,0x60,0xDA,0x30,0xB3,0x2E,0xB2,0x60,0xDA,0x30,0xB3,0x2F,0xB2,
-0x60,0xDA,0x31,0xB3,0x2F,0xB2,0x60,0xDA,0x30,0xB2,0x32,0xB3,0x20,0xCA,0x30,0xB2,
-0x60,0xDA,0x31,0xB2,0x08,0xF1,0x11,0x6B,0x6B,0xEB,0x20,0xCA,0x2F,0xB2,0x60,0xCA,
-0x2F,0xB2,0x20,0xDA,0x2F,0xB2,0x80,0x18,0x43,0x36,0x20,0xDA,0x08,0x97,0x07,0x91,
-0x06,0x90,0x00,0xEF,0x05,0x63,0x00,0x00,0xF4,0x00,0x11,0x80,0xF0,0x00,0x11,0x80,
-0xD0,0x04,0x11,0x80,0xD2,0x04,0x11,0x80,0xCA,0xA0,0x11,0x80,0xCC,0xA0,0x11,0x80,
-0xC4,0xF5,0x04,0x80,0xD6,0xA0,0x11,0x80,0x00,0x00,0x00,0x18,0x58,0xC5,0xC8,0x19,
-0x14,0xA1,0x11,0x80,0xD8,0xA0,0x11,0x80,0x00,0x00,0x00,0x70,0x08,0xA1,0x11,0x80,
-0xBC,0x00,0x11,0x80,0xA1,0xA9,0x10,0x80,0x44,0x00,0x11,0x80,0x21,0xA3,0x10,0x80,
-0x4C,0x05,0x11,0x80,0x25,0xAD,0x10,0x80,0x44,0x05,0x11,0x80,0x3D,0xCD,0x10,0x80,
-0x58,0x09,0x11,0x80,0x11,0xD1,0x10,0x80,0x3C,0x00,0x11,0x80,0x6D,0xA6,0x10,0x80,
-0xA0,0x05,0x11,0x80,0x41,0xAA,0x10,0x80,0x5C,0x05,0x11,0x80,0x61,0xD7,0x10,0x80,
-0x90,0x06,0x11,0x80,0x45,0xC9,0x10,0x80,0xEC,0x04,0x11,0x80,0xAD,0xAE,0x10,0x80,
-0x6C,0x06,0x11,0x80,0x45,0xD0,0x10,0x80,0x16,0xA1,0x11,0x80,0xD4,0x04,0x11,0x80,
-0xB1,0xCE,0x10,0x80,0xC8,0xA0,0x11,0x80,0x18,0xA1,0x11,0x80,0x1C,0xA1,0x11,0x80,
-0x20,0xA1,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x04,0x67,0x2F,0x24,
-0x80,0x98,0x00,0x6A,0x00,0xF4,0x24,0x98,0xBD,0x67,0x00,0xF4,0x44,0xD8,0xE1,0xF7,
-0x1F,0x6A,0x4C,0xEC,0x00,0x18,0x2A,0xDF,0x10,0x4D,0x12,0x2A,0x5D,0x67,0x68,0xAA,
-0xFF,0xF7,0x1F,0x6A,0x4C,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,
-0x6B,0xE2,0x0E,0xB3,0x48,0x32,0x69,0xE2,0xE0,0xF0,0x4B,0xA2,0x01,0x72,0x0A,0x60,
-0x0B,0xB2,0xB0,0x67,0x00,0x18,0xE0,0x1D,0x83,0x9A,0x07,0x2A,0x00,0x18,0x6A,0x1E,
-0x11,0x67,0x04,0x10,0x00,0x18,0x7B,0x57,0x90,0x67,0x11,0x67,0xD1,0x29,0x08,0x97,
-0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0x9C,0x31,0x11,0x80,
-0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x0A,0xD4,0xFF,0x6C,0x8C,0xEE,0x04,0x76,
-0x04,0xD6,0x34,0x61,0x1F,0xB2,0x03,0x6B,0x40,0x9A,0x42,0x32,0x4A,0x32,0x6C,0xEA,
-0x01,0x72,0x2C,0x61,0x0A,0x93,0x40,0xA3,0x8C,0xEA,0x03,0x72,0x27,0x61,0x22,0xA3,
-0x8C,0xE9,0x24,0x29,0x44,0xA3,0x03,0xA3,0x8C,0xEA,0x40,0x32,0x8C,0xE8,0x00,0x1C,
-0xDD,0x31,0x4D,0xE8,0x14,0xB3,0x1A,0x65,0x40,0xAB,0x0E,0xEA,0x14,0x2A,0x13,0xB2,
-0x98,0x67,0x00,0x9A,0x20,0xDA,0x12,0xB2,0x20,0xDA,0x08,0xF1,0x11,0x6A,0x4B,0xEA,
-0x00,0x1C,0xE5,0x31,0x40,0xCB,0x00,0x18,0xA9,0x1D,0x01,0x6C,0x07,0x20,0x80,0x18,
-0x79,0x28,0x90,0x67,0x03,0x10,0x00,0x1C,0xE5,0x31,0x98,0x67,0x0A,0x94,0x00,0x18,
-0xBD,0x89,0x04,0x95,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x00,0x00,
-0x6C,0x1D,0x11,0x80,0x18,0xA1,0x11,0x80,0x1C,0xA1,0x11,0x80,0x20,0xA1,0x11,0x80,
-0x03,0xB2,0x01,0x6B,0x40,0x9A,0x52,0x32,0x20,0xE8,0x6C,0xEA,0x50,0x60,0x00,0xB0,
-0x03,0xB2,0x01,0x6B,0x40,0x9A,0x4A,0x32,0x20,0xE8,0x6C,0xEA,0x50,0x60,0x00,0xB0,
-0xF3,0x63,0x18,0x62,0x17,0xD1,0x16,0xD0,0x7D,0x67,0x00,0x6A,0x20,0xF0,0x50,0xC3,
-0xB4,0xB3,0x9D,0x67,0x00,0x69,0x58,0xAB,0x40,0xF0,0x48,0xCC,0x20,0xF0,0x5A,0xA3,
-0x20,0xF0,0x79,0xA3,0x40,0x32,0x4D,0xEB,0xAF,0xB2,0x0D,0xD3,0x01,0x6B,0x40,0x9A,
-0x0F,0xD2,0xAE,0xB2,0x40,0x9A,0x0E,0xD2,0xAD,0xB2,0x00,0x9A,0xAD,0xB2,0x40,0x9A,
-0x10,0xD2,0x0E,0x92,0x6C,0xEA,0x3A,0x22,0xBD,0x67,0x83,0x67,0x30,0x4D,0x00,0x6E,
-0x00,0x18,0x71,0x23,0x23,0x67,0x02,0x2A,0x03,0x69,0x26,0x11,0x9D,0x67,0x20,0xF0,
-0x70,0xA4,0x0F,0x94,0xFF,0x6A,0x4C,0xEB,0x80,0xF7,0x82,0x32,0x2C,0xEA,0x4E,0xEB,
-0xA2,0xB4,0x1B,0x2B,0xA0,0xB2,0x4D,0xE8,0x40,0x9C,0x56,0x32,0x2C,0xEA,0x02,0x2A,
-0x9F,0xB2,0x4D,0xE8,0x7D,0x67,0x40,0xF0,0x68,0xAB,0x01,0xF0,0x00,0x6A,0x05,0x69,
-0x6C,0xEA,0xFF,0xF7,0x1F,0x6B,0x6C,0xEA,0x04,0x22,0x00,0x18,0xA4,0x1D,0x0D,0x94,
-0x0D,0x10,0x00,0x18,0xA9,0x1D,0x0D,0x94,0x09,0x10,0x96,0xB2,0x4C,0xE8,0x40,0x9C,
-0x56,0x32,0x2C,0xEA,0x02,0x2A,0x94,0xB2,0x4C,0xE8,0x09,0x69,0x0E,0x94,0x01,0x6F,
-0x86,0x32,0xEC,0xEA,0x41,0x22,0x8D,0xB3,0x40,0x9B,0x56,0x32,0xEC,0xEA,0x3C,0x22,
-0xBD,0x67,0x10,0x6A,0xC7,0x67,0x02,0x6C,0x30,0x4D,0x14,0xD7,0x00,0x18,0x71,0x23,
-0x4D,0xE9,0x14,0x97,0x06,0x2A,0x20,0x6A,0x4D,0xE9,0xFF,0xF7,0x1F,0x6C,0x8C,0xE9,
-0xDB,0x10,0x0F,0x94,0x5D,0x67,0x20,0xF0,0x70,0xA2,0x40,0xF7,0x82,0x32,0xEC,0xEA,
-0x4E,0xEB,0x7E,0xB2,0x80,0x9A,0x19,0x2B,0x7D,0xB2,0x4D,0xE8,0x44,0x67,0xEC,0xEA,
-0x02,0x2A,0x79,0xB2,0x4D,0xE8,0x7D,0x67,0x40,0xF0,0x68,0xAB,0x01,0xF0,0x00,0x6A,
-0xFF,0xF7,0x1F,0x6C,0x6C,0xEA,0x8C,0xEA,0x04,0x22,0x00,0x18,0xA4,0x1D,0x0D,0x94,
-0x0B,0x10,0x00,0x18,0xA9,0x1D,0x0D,0x94,0x07,0x10,0x73,0xB2,0x4C,0xE8,0x44,0x67,
-0xEC,0xEA,0x02,0x2A,0x6F,0xB2,0x4C,0xE8,0x0E,0x93,0x01,0x6C,0x6A,0x32,0x8C,0xEA,
-0x41,0x22,0x6A,0xB3,0x40,0x9B,0x0F,0x6B,0x46,0xEC,0x6C,0xEA,0x03,0x72,0x3A,0x60,
-0xFF,0x6A,0xBD,0x67,0x01,0x4A,0x04,0x6C,0x30,0x4D,0x02,0x6E,0x00,0x18,0x71,0x23,
-0x4D,0xE9,0x03,0x2A,0x00,0xF2,0x00,0x6A,0x45,0x10,0x9D,0x67,0x20,0xF0,0x50,0xA4,
-0x5E,0xB3,0x80,0x9B,0x13,0x22,0x61,0xB2,0x03,0x6B,0x4D,0xE8,0x82,0x32,0x4A,0x32,
-0x6C,0xEA,0x01,0x72,0x04,0x60,0x96,0x32,0x01,0x6C,0x8C,0xEA,0x02,0x2A,0x5C,0xB2,
-0x4D,0xE8,0x00,0xF4,0x00,0x6A,0x4D,0xE9,0x01,0x6B,0x12,0x10,0x5A,0xB2,0x03,0x6B,
-0x4C,0xE8,0x82,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,0x04,0x60,0x96,0x32,0x01,0x6B,
-0x6C,0xEA,0x02,0x2A,0x55,0xB2,0x4C,0xE8,0x01,0xF0,0x00,0x6A,0x4D,0xE9,0x00,0x6B,
-0x50,0xB2,0x60,0xC2,0x0E,0x94,0x01,0x6B,0x8E,0x32,0x6C,0xEA,0x18,0x22,0x47,0xB2,
-0x40,0x9A,0x46,0xEB,0x0F,0x6B,0x6C,0xEA,0x03,0x72,0x11,0x60,0xBD,0x67,0x02,0xF0,
-0x00,0x6A,0x08,0x6C,0x30,0x4D,0x03,0x6E,0x00,0x18,0x71,0x23,0x4D,0xE9,0x07,0x2A,
-0x04,0xF0,0x00,0x6A,0x4D,0xE9,0xFF,0xF7,0x1F,0x6A,0x4C,0xE9,0x4D,0x10,0x44,0xB2,
-0x3E,0xB3,0x0C,0xEA,0x6E,0xEA,0x11,0x2A,0x38,0xB2,0x0F,0x6B,0x40,0x9A,0x46,0x32,
-0x6C,0xEA,0x01,0x72,0x0A,0x61,0x80,0x18,0xC0,0x28,0x00,0x65,0x06,0x22,0x80,0x6A,
-0x4D,0xE9,0x39,0xB2,0x4C,0xE8,0x39,0xB2,0x4C,0xE8,0xC0,0xF5,0x02,0x32,0x01,0x6B,
-0x6C,0xEA,0x0C,0x22,0x2D,0xB2,0x03,0x6B,0x40,0x9A,0x42,0x32,0x4A,0x32,0x6C,0xEA,
-0x01,0x72,0x04,0x61,0x2B,0xB2,0x4C,0xE8,0x2B,0xB2,0x4C,0xE8,0x04,0x6A,0x2C,0xEA,
-0x08,0x2A,0x2D,0xB2,0x4C,0xE8,0x2D,0xB2,0x4C,0xE8,0x26,0xB2,0x4C,0xE8,0x26,0xB2,
-0x4C,0xE8,0x2C,0xB3,0x50,0x67,0x6C,0xEA,0x6E,0xEA,0x0C,0x2A,0x1F,0xB2,0x03,0x6B,
-0x40,0x9A,0x42,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,0x04,0x61,0x1F,0xB2,0x4D,0xE8,
-0x1F,0xB2,0x4D,0xE8,0x24,0xB3,0x50,0x67,0x6C,0xEA,0x6E,0xEA,0x03,0x2A,0x00,0x18,
-0xBB,0x30,0x00,0x6C,0x12,0xB2,0x00,0xDA,0x05,0x6A,0x10,0x94,0x04,0xD2,0x0C,0x0A,
-0x05,0xD2,0x0E,0x93,0x0F,0x92,0x0A,0xD4,0xFA,0x6D,0x04,0x6C,0x21,0xF3,0x1F,0x6E,
-0xA1,0xF1,0x1A,0x6F,0x06,0xD1,0x09,0xD0,0x07,0xD2,0x20,0x18,0x1B,0x32,0x08,0xD3,
-0x18,0x97,0x17,0x91,0x16,0x90,0x00,0xEF,0x0D,0x63,0x00,0x00,0x41,0x00,0x00,0x00,
-0xDC,0x00,0x11,0x80,0x44,0xA0,0x00,0xB0,0x40,0x60,0x00,0xB0,0x40,0xA0,0x00,0xB0,
-0x50,0xA0,0x00,0xB0,0x00,0x00,0x80,0x00,0x6C,0x1D,0x11,0x80,0x00,0x00,0x40,0x00,
-0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xBF,0xFF,0x00,0x00,0x20,0x00,0x00,0x00,0x10,0x00,
-0x17,0x00,0x11,0x80,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xEF,0xFF,0x00,0x00,0xA0,0x00,
-0x00,0x00,0xC0,0x00,0x00,0x00,0x30,0x00,0x01,0x6D,0xA4,0xEC,0x07,0xB2,0x06,0xB4,
-0x60,0x9C,0x40,0x9A,0x6E,0xEA,0xAC,0xEA,0x02,0x2A,0xAE,0xEB,0x60,0xDC,0x20,0xE8,
-0x00,0x65,0x00,0x00,0x3C,0x60,0x00,0xB0,0x50,0x60,0x00,0xB0,0xF8,0x63,0x0E,0x62,
-0x0D,0xD1,0x0C,0xD0,0x6A,0xB2,0x01,0x6F,0x20,0x9A,0x2A,0x65,0x36,0x36,0xEC,0xEE,
-0x0B,0x2E,0x68,0xB4,0x03,0x6B,0x6B,0xEB,0x40,0x9C,0x6C,0xEA,0x40,0xDC,0x66,0xB4,
-0x02,0x6B,0x40,0x9C,0x6D,0xEA,0x40,0xDC,0x64,0xB2,0x00,0x6B,0x0A,0xD3,0xA3,0x67,
-0x60,0x9A,0x63,0xB2,0x40,0x9A,0x0A,0x65,0x62,0xB2,0x00,0x9A,0x51,0x67,0xEC,0xEA,
-0x10,0x22,0x80,0xF7,0x62,0x32,0x88,0x67,0x8E,0xEA,0xEC,0xEA,0x01,0x5A,0xA7,0x67,
-0x08,0x60,0x5D,0xB2,0x03,0x6D,0x4D,0xE8,0x03,0x2E,0x5C,0xB2,0x07,0x6D,0x4D,0xE8,
-0x0A,0xD7,0x29,0x67,0xC0,0x99,0x01,0x6C,0xD6,0x32,0x8C,0xEA,0x1E,0x22,0x08,0x6A,
-0x4D,0xED,0x02,0x32,0x52,0x32,0x8C,0xEA,0xFF,0xF7,0x1F,0x6F,0x16,0x22,0x28,0x67,
-0x26,0x32,0x40,0xF7,0x62,0x33,0x4E,0xEB,0x8C,0xEB,0x83,0xEB,0x0E,0x60,0x10,0x6A,
-0x4D,0xED,0x4E,0xB2,0xEC,0xED,0x4D,0xE8,0x46,0x67,0x8C,0xEA,0x05,0x2A,0x4A,0xB2,
-0x4D,0xE8,0x20,0x6A,0x4D,0xED,0xEC,0xED,0x0A,0xD4,0x68,0x67,0x6A,0x32,0x01,0x6E,
-0xCC,0xEA,0x16,0x22,0x40,0x6A,0x29,0x67,0x4D,0xED,0x80,0x99,0x44,0xB2,0x03,0x6B,
-0x4D,0xE8,0x82,0x32,0x4A,0x32,0x6C,0xEA,0xCA,0xEA,0x03,0x60,0x96,0x32,0xCC,0xEA,
-0x07,0x2A,0x80,0x6A,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x4C,0xED,0x3D,0xB2,0x4D,0xE8,
-0x02,0x6A,0xAC,0xEA,0x08,0x2A,0x3C,0xB2,0x4C,0xE8,0x3C,0xB2,0x4C,0xE8,0x3C,0xB2,
-0x4C,0xE8,0x3C,0xB2,0x4C,0xE8,0x3C,0xB2,0x0C,0xEA,0x07,0x22,0x36,0xB2,0x01,0x6B,
-0x4C,0xE8,0x36,0xB2,0x4C,0xE8,0x39,0xB2,0x60,0xC2,0x29,0xB3,0x03,0x69,0x40,0x9B,
-0x42,0x32,0x4A,0x32,0x2C,0xEA,0x01,0x72,0x04,0x61,0x31,0xB2,0x4C,0xE8,0x2E,0xB2,
-0x4C,0xE8,0x33,0xB2,0x88,0x67,0x06,0xD5,0x07,0xD4,0xFA,0x6D,0x04,0x6C,0x01,0xF4,
-0x00,0x6E,0xA1,0xF1,0x19,0x6F,0x04,0xD1,0x05,0xD2,0x20,0x18,0x1B,0x32,0x08,0xD0,
-0x0A,0x92,0x12,0x22,0x2B,0xB3,0x50,0x67,0x6C,0xEA,0x6E,0xEA,0x0B,0x2A,0x18,0xB3,
-0x40,0x9B,0x42,0x32,0x4A,0x32,0x2C,0xEA,0x01,0x72,0x04,0x61,0x1C,0xB2,0x4D,0xE8,
-0x1C,0xB2,0x4D,0xE8,0x17,0xB2,0x00,0xDA,0x23,0xB2,0x01,0x6C,0xA0,0x9A,0xBE,0x32,
-0x8C,0xEA,0x17,0x22,0x40,0xF5,0x02,0x32,0x8C,0xEA,0x07,0x22,0x1B,0xB2,0x00,0x6B,
-0x80,0xC2,0x1E,0xB2,0x60,0xC2,0x1E,0xB2,0x60,0xC2,0xA2,0x32,0x8C,0xEA,0x05,0x22,
-0x00,0x18,0xA5,0x23,0x00,0x65,0x19,0xB3,0x40,0xC3,0x14,0xB2,0x00,0x18,0x04,0x24,
-0x80,0xA2,0x0E,0x97,0x0D,0x91,0x0C,0x90,0x00,0xEF,0x08,0x63,0x6C,0x1D,0x11,0x80,
-0x30,0x60,0x00,0xB0,0x34,0x60,0x00,0xB0,0x44,0xA0,0x00,0xB0,0x50,0x60,0x00,0xB0,
-0x40,0xA0,0x00,0xB0,0x00,0x00,0x80,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x20,0x00,
-0x00,0x00,0x10,0x00,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,0x7F,0xFF,
-0xFF,0xFF,0xBF,0xFF,0x00,0x00,0x30,0x00,0x17,0x00,0x11,0x80,0xFC,0xA5,0x10,0x80,
-0x00,0x00,0xC0,0x00,0x54,0x45,0x11,0x80,0x16,0x00,0x11,0x80,0x18,0x00,0x11,0x80,
-0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x34,0xB2,0x00,0x6E,0x01,0x6B,0x20,0x6C,
-0xFF,0xF7,0x1F,0x6D,0x0A,0x65,0xE6,0x67,0x06,0x67,0x4B,0x65,0x2C,0x65,0x6D,0x65,
-0x2D,0xB1,0xC8,0x32,0x15,0xE1,0x10,0x27,0x68,0x67,0x69,0xE2,0x80,0x9A,0x6A,0x67,
-0x64,0xEF,0x86,0xEF,0x80,0xDD,0x41,0x9A,0xFF,0x4B,0x29,0x67,0x6C,0xEA,0xEF,0xE1,
-0x44,0xEB,0x4D,0xEC,0x80,0xDD,0x04,0x10,0x68,0x67,0x69,0xE2,0x40,0x9A,0x40,0xDD,
-0x01,0x4E,0xFF,0x69,0x2C,0xEE,0x10,0x76,0x11,0x61,0x88,0x67,0x1E,0xB5,0x01,0x4F,
-0x60,0x9C,0x2C,0xEF,0x4A,0x67,0x44,0xEF,0x11,0xE5,0xFF,0x4A,0xA9,0x67,0x4C,0xEB,
-0xEB,0xE5,0x64,0xEA,0x40,0x9C,0x00,0x6E,0x6D,0xEA,0x40,0xDC,0x04,0x48,0x4B,0x67,
-0x4C,0xE8,0x00,0xF4,0x01,0x58,0xCC,0x61,0x13,0xB4,0xFF,0x6E,0x55,0x6D,0x00,0xF4,
-0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x0F,0xB4,0xFF,0x6E,0x00,0x6D,0x00,0xF5,
-0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x0B,0xB4,0xFF,0x6E,0xB1,0x67,0x00,0xF6,
-0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x07,0xB4,0xFF,0x6E,0x0F,0x6D,0x00,0xF7,
-0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0xEF,
-0x04,0x63,0x00,0x00,0x00,0xF8,0x10,0x80,0xDC,0xF4,0x04,0x80,0xFD,0x63,0x05,0x62,
-0x04,0xD0,0x11,0xB2,0x00,0x68,0xEE,0x6C,0x00,0xDA,0x10,0xB2,0x07,0x6D,0x00,0xDA,
-0x00,0x18,0x9A,0x33,0x00,0x65,0x0E,0xB4,0x4A,0xF5,0x16,0x6B,0x6B,0xEB,0xFF,0xF7,
-0x1F,0x6A,0x01,0x48,0x4C,0xE8,0x00,0xF4,0x00,0x58,0x60,0xCC,0xFA,0x61,0x07,0xB2,
-0x03,0x6B,0x05,0x97,0x60,0xDA,0x04,0x90,0x03,0xB2,0x01,0x6B,0x60,0xDA,0x00,0xEF,
-0x03,0x63,0x00,0x00,0x10,0xA3,0x00,0xB0,0x20,0xA3,0x00,0xB0,0xF0,0x00,0x00,0xB6,
-0xFD,0x63,0x04,0x62,0x17,0xB3,0x16,0xB2,0x80,0x18,0x53,0x2A,0x60,0xDA,0x16,0xB3,
-0x16,0xB2,0x21,0xB4,0x04,0x97,0x52,0xDB,0x15,0xB2,0x55,0xDB,0x15,0xB2,0x49,0xDB,
-0x15,0xB2,0x4C,0xDB,0x15,0xB2,0x4F,0xDB,0x15,0xB2,0x46,0xDB,0x15,0xB2,0x5B,0xDB,
-0x15,0xB2,0x40,0xDB,0x15,0xB2,0x58,0xDB,0x16,0xB3,0x15,0xB2,0x60,0xDA,0xC0,0xF0,
-0x50,0x9C,0x40,0x6B,0x6D,0xEA,0xC0,0xF0,0x50,0xDC,0x14,0xB3,0x49,0x9C,0x6D,0xEA,
-0x13,0xB3,0x6D,0xEA,0x49,0xDC,0x00,0xEF,0x03,0x63,0x00,0x00,0xCC,0x2C,0x11,0x80,
-0xB9,0xAD,0x10,0x80,0xB8,0x95,0x11,0x80,0x45,0xD4,0x10,0x80,0xB9,0xAF,0x10,0x80,
-0x4D,0xB0,0x10,0x80,0x51,0xB1,0x10,0x80,0x95,0xD0,0x10,0x80,0x01,0xD1,0x10,0x80,
-0x01,0xC8,0x10,0x80,0x0D,0xD0,0x10,0x80,0x35,0xC9,0x10,0x80,0x3C,0x1C,0x11,0x80,
-0x61,0xA2,0x10,0x80,0xDC,0x00,0x11,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x80,0x00,
-0xF6,0x63,0x12,0x62,0x11,0xD1,0x10,0xD0,0x14,0xD4,0x16,0xD6,0x80,0xAC,0xFF,0xF7,
-0x1F,0x6B,0x8C,0xEB,0x7F,0xF4,0x08,0x73,0x47,0x60,0x7F,0xF4,0x08,0x6A,0x62,0xEA,
-0x0E,0x61,0x3F,0xF4,0x00,0x73,0x35,0x60,0x3F,0xF4,0x00,0x6A,0x42,0xEB,0x20,0xF1,
-0x04,0x61,0x7F,0xF4,0x06,0x6A,0x42,0xEB,0x00,0xF1,0x1F,0x61,0x0F,0x10,0x7F,0xF4,
-0x0A,0x73,0x5C,0x60,0x7F,0xF4,0x0A,0x6A,0x42,0xEB,0x34,0x61,0x5F,0xF5,0x00,0x73,
-0x5E,0x60,0x5F,0xF5,0x03,0x73,0x00,0xF1,0x02,0x60,0x0F,0x11,0xFF,0xF7,0x1F,0x6A,
-0x8C,0xEA,0x7F,0xF4,0x06,0x72,0x03,0x61,0x88,0xB2,0x00,0x6B,0x60,0xDA,0x88,0xB2,
-0x0F,0x6B,0x40,0x9A,0x46,0x32,0x6C,0xEA,0x03,0x72,0x04,0x61,0x85,0xB2,0x60,0x9A,
-0x85,0xB2,0x60,0xDA,0x86,0xB3,0x85,0xB2,0x60,0xDA,0x87,0xB3,0x85,0xB2,0x60,0xDA,
-0xFF,0x17,0x7E,0xB2,0x85,0xB3,0x40,0x9A,0x6E,0xEA,0xE0,0xF0,0x0E,0x2A,0x14,0x92,
-0x63,0xA2,0x83,0xB2,0x60,0xC2,0xE1,0x10,0x14,0x94,0x82,0xB2,0x63,0xA4,0x80,0xF1,
-0x61,0xC2,0xDB,0x10,0x14,0x93,0x80,0xB1,0xFF,0xF7,0x1F,0x6C,0x43,0xA3,0x44,0x33,
-0x4D,0xE3,0x6C,0x33,0x4D,0xE3,0x40,0x99,0x68,0x30,0x8C,0xE8,0x4F,0xEA,0x03,0x22,
-0x00,0x18,0xFD,0x1D,0x91,0x67,0x0F,0x20,0x00,0x18,0x40,0xA4,0x00,0x65,0x77,0xB6,
-0x00,0x6A,0x01,0x6C,0xB1,0x67,0xE2,0x67,0x00,0x18,0xF3,0x1D,0x04,0xD2,0x80,0x99,
-0x00,0x18,0x0C,0x1E,0xB0,0x67,0x72,0xB2,0x00,0xCA,0xB7,0x10,0x14,0x93,0x00,0x6E,
-0x43,0xA3,0x01,0x22,0x01,0x6E,0x6B,0xB2,0x80,0xF1,0xD1,0xC2,0xAE,0x10,0x14,0x94,
-0x14,0x93,0x61,0xF3,0x06,0x6D,0x85,0xA4,0x0E,0xD4,0x48,0xA3,0x27,0xA3,0xFF,0xF7,
-0x1F,0x6C,0x40,0x32,0x4D,0xE9,0x00,0x6A,0x45,0xC3,0x4A,0xC3,0x8C,0xE9,0x00,0x18,
-0x9A,0x33,0x22,0x6C,0x5F,0xB0,0xF3,0x6A,0xFF,0xF7,0x1F,0x6B,0x20,0xF0,0xBF,0xA0,
-0x24,0x6C,0xA0,0x35,0x4D,0xED,0x00,0x18,0x9A,0x33,0x6C,0xED,0x40,0xF0,0x41,0xA0,
-0x40,0xF0,0xA0,0xA0,0x26,0x6C,0x40,0x32,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x00,0x18,
-0x9A,0x33,0x4C,0xED,0xEB,0xF0,0x12,0x6D,0x00,0x18,0x9A,0x33,0x28,0x6C,0x93,0xF7,
-0x1A,0x6D,0x00,0x18,0x9A,0x33,0x2A,0x6C,0x00,0x18,0xEE,0x33,0x01,0x6C,0x7D,0x21,
-0xFF,0xF7,0x1F,0x6B,0x51,0x67,0x6C,0xE9,0x00,0xF4,0x01,0x59,0x02,0x61,0x00,0xF4,
-0x00,0x6A,0xFF,0xF7,0x1F,0x69,0x4C,0xE9,0x0E,0x92,0xFF,0x6C,0xFF,0x4A,0x8C,0xEA,
-0x04,0x5A,0x28,0x61,0x47,0xB0,0x00,0x6A,0x7D,0x67,0x06,0xD2,0x0C,0xCB,0xE0,0xF7,
-0x1F,0x6A,0x4C,0xE9,0x44,0xB3,0x06,0x92,0x80,0xF4,0x20,0x34,0x01,0x6D,0x6C,0xEA,
-0x8D,0xEA,0x06,0xD2,0x00,0x6C,0x41,0xB2,0x04,0xD4,0x05,0xD4,0x9D,0x67,0x18,0x4C,
-0xC5,0x67,0x00,0x6F,0x07,0xD2,0x3F,0x10,0xE0,0xF7,0x1F,0x6A,0x8C,0xEA,0x88,0x67,
-0x80,0xF4,0x40,0x32,0x8C,0xEB,0x4D,0xEB,0x38,0xB2,0xFF,0x6D,0xEC,0xED,0x60,0xDE,
-0x41,0xDE,0x2B,0x10,0x0E,0x92,0x00,0x6D,0x91,0x67,0x40,0x33,0x34,0xB2,0x25,0x67,
-0x41,0xE3,0x7D,0x67,0x18,0x4B,0x30,0xB2,0x8B,0x65,0x32,0xB3,0x0A,0x65,0xFF,0xF7,
-0x1F,0x6A,0x6B,0x65,0xFF,0x6B,0x4A,0x65,0x2B,0x65,0x6C,0x67,0xAC,0x32,0x79,0xE2,
-0x20,0xDE,0x00,0xF1,0x01,0x5C,0x00,0xCE,0x21,0xDE,0x60,0x9E,0xE1,0x45,0xD4,0x61,
-0x48,0x67,0x6C,0xEA,0xA9,0x67,0x6B,0x67,0x6D,0xEA,0x80,0x4C,0xEC,0xED,0x40,0xDE,
-0x80,0x4C,0x4A,0x67,0x04,0x5D,0x4C,0xEC,0xE8,0x61,0x00,0x6F,0x9D,0x67,0x04,0xD7,
-0x05,0xD7,0x18,0x4C,0x01,0x6E,0x00,0x18,0xF7,0x33,0x00,0x65,0x0E,0x10,0x02,0x6C,
-0x01,0x6D,0x00,0x18,0x1C,0x80,0x00,0x6E,0x08,0x10,0x14,0x93,0x16,0x92,0x80,0xAB,
-0x00,0x18,0xFA,0x8B,0xA0,0xA2,0x01,0x6A,0x01,0x10,0x00,0x6A,0x12,0x97,0x11,0x91,
-0x10,0x90,0x00,0xEF,0x0A,0x63,0x00,0x00,0x38,0x91,0x10,0x80,0x6C,0x1D,0x11,0x80,
-0x2C,0x00,0x00,0xB5,0x48,0x91,0x10,0x80,0x44,0x91,0x10,0x80,0x32,0x97,0x79,0x23,
-0x78,0xA0,0x00,0xB0,0x01,0x00,0xA5,0x01,0xAE,0x23,0x87,0x54,0xD0,0x00,0x11,0x80,
-0xDC,0x00,0x11,0x80,0x88,0x07,0x11,0x80,0x01,0x91,0x02,0x80,0x14,0xA1,0x11,0x80,
-0x00,0xF8,0x10,0x80,0xFF,0xFF,0x03,0xE0,0x00,0x00,0x00,0x80,0x00,0xFB,0x10,0x80,
-0x00,0x00,0x00,0x04,0x03,0xB2,0x00,0x6B,0x60,0xDA,0x20,0xE8,0x00,0x65,0x00,0x00,
-0x04,0x60,0x00,0xB0,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x40,0xAC,0x01,0xF4,
-0x03,0x72,0x2C,0x61,0x80,0x18,0x53,0x2A,0x00,0x69,0x80,0x18,0x45,0x2B,0x00,0x65,
-0x16,0xB2,0x08,0xF1,0x11,0x6B,0x6B,0xEB,0x60,0xCA,0x15,0xB2,0x91,0x67,0x20,0xDA,
-0x14,0xB2,0x20,0x18,0x83,0x39,0x20,0xDA,0x14,0xB2,0x15,0xB0,0xB1,0x67,0x80,0xF1,
-0x62,0xA2,0x90,0x67,0x30,0x6E,0x68,0x32,0x69,0xE2,0x0F,0xB3,0x44,0x32,0x00,0x18,
-0x64,0x2E,0x40,0xCB,0x01,0x6A,0x4B,0xEA,0x47,0xD8,0x0E,0xB3,0x40,0x98,0x0E,0xB4,
-0xB1,0x67,0x6D,0xEA,0x40,0xD8,0x00,0x18,0x64,0x2E,0x0C,0x6E,0x06,0x97,0x05,0x91,
-0x04,0x90,0x00,0x6A,0x00,0xEF,0x04,0x63,0x18,0xA1,0x11,0x80,0x1C,0xA1,0x11,0x80,
-0x20,0xA1,0x11,0x80,0x14,0xA1,0x11,0x80,0xDC,0x00,0x11,0x80,0xD8,0xA0,0x11,0x80,
-0x00,0x00,0x00,0x70,0x08,0xA1,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,
-0xFF,0xF7,0x1F,0x6A,0xCC,0xEA,0x02,0x74,0x0A,0xD4,0x0B,0xD5,0x0D,0xD7,0x04,0xD2,
-0x0D,0x61,0x33,0xB2,0x03,0x6B,0x40,0x9A,0x42,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,
-0x05,0x61,0x30,0xB3,0x40,0x9B,0xC0,0xF7,0x42,0x32,0xFC,0x2A,0x0A,0x93,0x04,0x73,
-0x3A,0x61,0x0B,0x95,0xFF,0x6C,0x44,0x67,0x60,0xA5,0x6C,0xEA,0x10,0x72,0x0A,0x61,
-0x42,0xA5,0x8C,0xEA,0x02,0x72,0x06,0x61,0x27,0xB2,0x00,0x18,0xE0,0x1D,0x81,0x9A,
-0x00,0x6A,0x3E,0x10,0xFF,0x6A,0x6C,0xEA,0x02,0x72,0x01,0x6D,0x04,0x60,0x22,0x72,
-0x02,0x60,0x2F,0x72,0x20,0x61,0xFF,0x6C,0x44,0x67,0x6C,0xEA,0x2F,0x72,0x01,0x6A,
-0x03,0x60,0x0B,0x93,0x42,0xA3,0x8C,0xEA,0xFF,0x6E,0x6F,0x42,0xCC,0xEB,0xCA,0xEB,
-0x12,0x60,0xE6,0x67,0x01,0x68,0x0B,0x92,0x06,0x4D,0xCC,0xED,0xB1,0xE2,0x42,0xA4,
-0xCC,0xEA,0x03,0x5A,0x01,0x61,0x02,0xC4,0xFF,0x4B,0xEC,0xEB,0xFF,0x6E,0x08,0x4D,
-0xCA,0xEB,0xEC,0xED,0xF0,0x61,0x00,0x1C,0xDD,0x31,0x00,0x65,0x0F,0xB1,0x02,0x67,
-0x40,0xA1,0x05,0x22,0x00,0x18,0x43,0x30,0x00,0x65,0x00,0x6A,0x40,0xC1,0x00,0x1C,
-0xE5,0x31,0x90,0x67,0x0A,0x94,0x0B,0x95,0x04,0x96,0x00,0x18,0xCA,0x1E,0x0D,0x97,
-0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x00,0x00,0x6C,0x1D,0x11,0x80,
-0x1C,0xA3,0x00,0xB0,0x9C,0x31,0x11,0x80,0x17,0x00,0x11,0x80,0xFD,0x63,0x04,0x62,
-0x09,0xB2,0x0F,0x6B,0x40,0x9A,0x46,0x32,0x6C,0xEA,0x01,0x72,0x07,0x61,0x80,0x18,
-0xC0,0x28,0x00,0x65,0x03,0x22,0x00,0x18,0xA2,0x31,0x00,0x65,0x04,0x97,0x00,0xEF,
-0x03,0x63,0x00,0x00,0x6C,0x1D,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,
-0xFF,0xF7,0x1F,0x69,0x8C,0xE9,0x24,0x32,0x29,0xE2,0x4C,0x32,0x2B,0xE2,0x4C,0x32,
-0x18,0xB3,0x2B,0xE2,0x48,0x32,0x61,0xE2,0x5C,0x98,0x4F,0xEA,0x05,0x22,0x01,0x6A,
-0x00,0x6B,0x20,0xF2,0x5E,0xC0,0x1E,0x10,0x00,0x18,0x41,0x5E,0x91,0x67,0x04,0xD2,
-0x0C,0x6B,0x18,0x2A,0x5F,0x98,0x41,0xA2,0x44,0x72,0x14,0x60,0x00,0x18,0xA5,0x5E,
-0x91,0x67,0x06,0x22,0x00,0x18,0x69,0x5E,0x91,0x67,0x1F,0x6B,0x0B,0x22,0x05,0x10,
-0x00,0x18,0x80,0x49,0x91,0x67,0x62,0x67,0x05,0x10,0x91,0x67,0x20,0x18,0x13,0x26,
-0x0E,0x6D,0x04,0x93,0x08,0x97,0x07,0x91,0x06,0x90,0x43,0x67,0x00,0xEF,0x05,0x63,
-0x48,0x60,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x03,0x44,0x90,0x67,
-0x00,0x18,0xF2,0x5A,0x0B,0xD5,0x22,0x67,0x1A,0x65,0x1E,0x2A,0xBD,0x67,0x90,0x67,
-0x00,0x18,0x07,0xDF,0x10,0x4D,0x7D,0x67,0x48,0xAB,0x0B,0x93,0xFF,0xF7,0x1F,0x6D,
-0x40,0xCB,0x65,0x67,0x4C,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,
-0x6B,0xE2,0x09,0xB3,0x48,0x32,0x69,0xE2,0x20,0xF2,0x3E,0xC2,0x5D,0x67,0x88,0xAA,
-0x80,0x18,0xB6,0x2B,0xAC,0xEC,0x1A,0x65,0x08,0x97,0x07,0x91,0x06,0x90,0x58,0x67,
-0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,
-0x20,0xB0,0x00,0x6A,0x04,0xD2,0x40,0x98,0x01,0x69,0xC0,0xF6,0x42,0x32,0x2C,0xEA,
-0x09,0x22,0x00,0x18,0x4F,0x9A,0x06,0xD4,0x04,0xD1,0x40,0x98,0x1A,0xB3,0x6C,0xEA,
-0x40,0xD8,0x06,0x94,0x44,0xAC,0xFF,0xF7,0x1F,0x6B,0x06,0x72,0x19,0x61,0x40,0x9C,
-0x17,0x2A,0x45,0xAC,0x6C,0xEA,0x17,0x2A,0x41,0x9C,0x82,0x67,0x42,0x32,0x42,0x32,
-0x6C,0xEA,0x01,0xF0,0x0B,0x72,0x6C,0xEC,0x04,0x61,0x80,0x18,0xB6,0x2B,0x00,0x65,
-0x0A,0x10,0x01,0xF0,0x05,0x72,0x07,0x61,0x00,0x18,0x2C,0x48,0x00,0x65,0x03,0x10,
-0x00,0x18,0x74,0x56,0x00,0x65,0x04,0x92,0x05,0x22,0x06,0xB2,0x07,0xB4,0x60,0x9A,
-0x8D,0xEB,0x60,0xDA,0x0A,0x97,0x09,0x91,0x08,0x90,0x00,0xEF,0x06,0x63,0x00,0x00,
-0x54,0x45,0x11,0x80,0xFF,0xFF,0xFF,0xF7,0x00,0x00,0x00,0x08,0xF8,0x63,0x0E,0x62,
-0x0D,0xD1,0x0C,0xD0,0x39,0xB2,0x03,0x6E,0x40,0x9A,0x42,0x32,0x4A,0x32,0xCC,0xEA,
-0x01,0x72,0x61,0x61,0x44,0xAC,0xFF,0xF7,0x1F,0x69,0x07,0x72,0x11,0x61,0x60,0x9C,
-0xFF,0x6E,0x40,0xA3,0x03,0x72,0x57,0x61,0x42,0xA3,0xCC,0xEA,0x54,0x2A,0x43,0xA3,
-0x64,0xA3,0xCC,0xEA,0xCC,0xEB,0x60,0x33,0x6D,0xEA,0x2D,0xB3,0x40,0xCB,0x4B,0x10,
-0x08,0x72,0x49,0x61,0xA0,0x9C,0x60,0x9D,0x62,0x32,0x5A,0x32,0xCC,0xEA,0x2C,0x22,
-0xE1,0xF7,0x1F,0x6A,0x4C,0xEB,0x1C,0x73,0x27,0x61,0x26,0xB2,0x00,0x18,0xE0,0x1D,
-0x83,0x9A,0x00,0x18,0x6A,0x1E,0x00,0x65,0x23,0xB2,0x60,0xF1,0x47,0xA2,0x18,0x2A,
-0x22,0xB2,0x11,0x67,0xFF,0x6C,0x40,0xAA,0x1F,0x4C,0x4C,0xE8,0xFF,0xF7,0x0F,0x6A,
-0x4C,0xE8,0x00,0x18,0x9A,0x33,0xB0,0x67,0x00,0x18,0xE2,0xBF,0x00,0x65,0x10,0x6A,
-0x4D,0xE8,0xB0,0x67,0xFF,0x6C,0x1F,0x4C,0x00,0x18,0x9A,0x33,0x2C,0xED,0x1E,0x10,
-0x00,0x18,0xF7,0x4F,0x33,0x6C,0x1A,0x10,0x66,0x6A,0x7D,0x67,0x50,0xCB,0x14,0xB2,
-0xFD,0x67,0x06,0xD5,0x80,0x9A,0x00,0x6D,0x04,0x06,0x24,0x4F,0xA9,0xE7,0x40,0xA2,
-0xAD,0xE6,0x01,0x4D,0x08,0x5D,0x40,0xC3,0xF9,0x61,0x06,0x95,0x07,0x96,0x00,0x18,
-0x40,0x1E,0x08,0x97,0x03,0x10,0x00,0x18,0x64,0x8B,0x00,0x65,0x0E,0x97,0x0D,0x91,
-0x0C,0x90,0x00,0xEF,0x08,0x63,0x00,0x00,0x6C,0x1D,0x11,0x80,0x18,0xA1,0x11,0x80,
-0x9C,0x31,0x11,0x80,0x48,0x5C,0x11,0x80,0x1E,0x01,0x00,0xB6,0x84,0x21,0x11,0x80,
-0xFD,0x63,0x04,0x62,0x17,0xB2,0x03,0x6B,0xC4,0x67,0x40,0x9A,0x42,0x32,0x4A,0x32,
-0x6C,0xEA,0x01,0x72,0x1E,0x61,0x44,0xAC,0x66,0x72,0x1B,0x61,0xA0,0x9C,0xE1,0xF7,
-0x1F,0x6A,0xFF,0xF7,0x1F,0x6B,0x80,0x9D,0x4C,0xEC,0x0F,0xB2,0x40,0xAA,0x6C,0xEA,
-0x4E,0xEC,0x0F,0x2C,0x0D,0xB3,0x00,0x6A,0x00,0xF4,0x44,0xDD,0x40,0x9B,0x02,0x2A,
-0xA0,0xDB,0x04,0x10,0x0A,0xB2,0x40,0x9A,0x00,0xF4,0xA4,0xDA,0x08,0xB2,0xA0,0xDA,
-0x03,0x10,0x00,0x18,0x18,0x58,0x86,0x67,0x04,0x97,0x00,0xEF,0x03,0x63,0x00,0x00,
-0x6C,0x1D,0x11,0x80,0x18,0xA1,0x11,0x80,0x1C,0xA1,0x11,0x80,0x20,0xA1,0x11,0x80,
-0xFD,0x63,0x05,0x62,0x04,0xD0,0x0B,0xB0,0xE3,0xF7,0x1F,0x6B,0x7C,0x6C,0x40,0x98,
-0x01,0x6D,0x56,0x32,0x6C,0xEA,0x69,0x98,0x58,0xEB,0x12,0xEA,0x00,0x18,0xEB,0x9F,
-0x4A,0xD8,0x6B,0x98,0x05,0x97,0x4D,0xE3,0x6B,0xD8,0x04,0x90,0x00,0xEF,0x03,0x63,
-0xD8,0xA0,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,0x3B,0xB0,0xBD,0x67,
-0x10,0x4D,0x90,0xA0,0x4F,0xA0,0x80,0x34,0x4D,0xEC,0x4E,0xA0,0x80,0x34,0x00,0x18,
-0x3A,0xBA,0x4D,0xEC,0x7D,0x67,0x48,0xAB,0x8F,0xA0,0xFD,0x67,0x4C,0xCB,0x49,0xAB,
-0x4D,0xCB,0x6A,0xAB,0x03,0x6A,0x4C,0xEB,0x4E,0xA0,0x48,0x32,0x4D,0xEB,0x80,0x32,
-0x48,0x32,0x4D,0xEB,0x50,0xA0,0x6E,0xCF,0x70,0x80,0x48,0x32,0x9A,0x34,0x4D,0xEC,
-0x00,0x53,0x8F,0xCF,0x05,0x60,0x09,0xF4,0x00,0x6A,0x8D,0xEA,0x4F,0xCF,0x06,0x10,
-0x0A,0xF0,0x00,0x6A,0x4B,0xEA,0x8D,0xEA,0x7D,0x67,0x4F,0xCB,0x9D,0x67,0x10,0x4C,
-0xFF,0xF7,0x1F,0x6F,0x0F,0x6A,0x00,0x6E,0x2C,0x65,0x0F,0x65,0x01,0x69,0x4A,0x65,
-0x89,0x67,0xC4,0x30,0x89,0xE0,0x84,0xAA,0x00,0x6D,0xE8,0x67,0x65,0x67,0xEC,0xEC,
-0x44,0x67,0x47,0xEB,0x2C,0xEA,0x07,0x22,0xEA,0x67,0x6B,0xE7,0xF1,0x67,0xE4,0xEA,
-0xED,0xED,0x48,0x67,0x4C,0xED,0x01,0x4B,0xFF,0x6F,0xEC,0xEB,0x10,0x5B,0xF0,0x61,
-0x01,0x4E,0x69,0x67,0xEC,0xEE,0x69,0xE0,0x04,0x5E,0xA4,0xCA,0xE1,0x61,0xFD,0x67,
-0xCC,0xAF,0x51,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x5D,0x67,0xCD,0xAA,0x50,0x6C,
-0x00,0x18,0x01,0xA0,0x01,0x6D,0x7D,0x67,0xCE,0xAB,0x4F,0x6C,0x00,0x18,0x01,0xA0,
-0x01,0x6D,0xFD,0x67,0xCF,0xAF,0x4E,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x0A,0x97,
-0x09,0x91,0x08,0x90,0x00,0xEF,0x06,0x63,0xD8,0xA0,0x11,0x80,0xFB,0x63,0x08,0x62,
-0x07,0xD1,0x06,0xD0,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6B,
-0x04,0xD3,0x6C,0xEA,0xFF,0x6B,0x02,0x4B,0x6B,0xEB,0x6C,0xEA,0xFF,0x6B,0x01,0x4B,
-0xC2,0x67,0x6D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x51,0xB1,0x52,0xB3,
-0x07,0x68,0x41,0x99,0x51,0xB4,0x01,0x6D,0x4E,0x32,0x0C,0xEA,0x69,0xE2,0x60,0xA2,
-0x40,0x99,0x0C,0xEB,0x40,0xF6,0x60,0x33,0x8C,0xEA,0x6D,0xEA,0x57,0x6C,0x00,0x18,
-0xEB,0x9F,0x40,0xD9,0x04,0x93,0x57,0x6C,0x01,0x6D,0x4C,0xEB,0x71,0x6A,0x04,0xD3,
-0x4B,0xEA,0x4C,0xEB,0x40,0x99,0xC3,0x67,0x40,0xF6,0x42,0x32,0x0C,0xEA,0x50,0x32,
-0x00,0x18,0x01,0xA0,0x4D,0xEE,0x40,0x99,0x01,0x6B,0x03,0x67,0x6C,0xEA,0x06,0x22,
-0x41,0x99,0x80,0x6B,0x6C,0xEA,0x01,0x5A,0x18,0x67,0x02,0x48,0x56,0x6C,0x00,0x18,
-0xEB,0x9F,0x01,0x6D,0x00,0x36,0x37,0xB0,0xFF,0xF7,0x1F,0x69,0x1C,0xF0,0x00,0x6B,
-0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0x60,0x98,0xE3,0xF7,0x1F,0x6C,0xD8,0x36,0x76,0x33,
-0x8C,0xEB,0x6D,0xEE,0xFB,0xF7,0x1F,0x6B,0x6C,0xEE,0x4D,0xEE,0x56,0x6C,0x00,0x18,
-0x01,0xA0,0x01,0x6D,0x47,0xA0,0xC6,0xA0,0x58,0x6C,0x40,0x32,0x4D,0xEE,0x00,0x18,
-0x01,0xA0,0x01,0x6D,0x59,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xC8,0xA0,0x04,0x6B,
-0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0x03,0x6B,0x6C,0xEE,0x4D,0xEE,0x59,0x6C,0x00,0x18,
-0x01,0xA0,0x01,0x6D,0x80,0x18,0x7D,0x2C,0x00,0x65,0x40,0x98,0xC0,0xF7,0x42,0x32,
-0x24,0x22,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x81,0x6B,0x2C,0xEA,0x6B,0xEB,
-0x6C,0xEA,0xC2,0x67,0x80,0x6B,0x6D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,
-0x59,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x4C,0xE9,0xE0,0xF1,0x1D,0x6A,0x4B,0xEA,
-0x4C,0xE9,0x45,0xA0,0xFF,0x6B,0xD1,0x67,0x6C,0xEA,0x48,0x32,0xE0,0xF1,0x1C,0x6B,
-0x6C,0xEA,0x59,0x6C,0x01,0x6D,0x4D,0xEE,0x0B,0x10,0x57,0x6C,0x00,0x18,0xEB,0x9F,
-0x01,0x6D,0x4C,0xE9,0x81,0x6A,0x4B,0xEA,0xD1,0x67,0x57,0x6C,0x01,0x6D,0x4C,0xEE,
-0x00,0x18,0x01,0xA0,0x00,0x65,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,
-0xD8,0xA0,0x11,0x80,0x78,0xDB,0x10,0x80,0xFF,0xFF,0xFF,0xF1,0xFB,0x63,0x08,0x62,
-0x07,0xD1,0x06,0xD0,0x0F,0xB1,0xFF,0x68,0x8C,0xE8,0x47,0x99,0x4F,0xEA,0x04,0x22,
-0x87,0x41,0x00,0x18,0xFD,0x1D,0x15,0x4C,0x0E,0x20,0x0B,0xB6,0x00,0x68,0xA7,0x41,
-0x01,0x6C,0x15,0x4D,0xF0,0x67,0x00,0x18,0xF3,0x1D,0x04,0xD0,0x87,0x99,0x00,0x18,
-0x0C,0x1E,0x14,0x6D,0x10,0xC9,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,
-0xD8,0xA0,0x11,0x80,0x85,0xB5,0x10,0x80,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,
-0x00,0x6C,0x02,0xF0,0x00,0x6E,0x00,0x18,0x01,0xA0,0xA4,0x67,0x2D,0xB2,0x3C,0x6C,
-0x00,0x6D,0xC0,0x9A,0x7F,0x6A,0xFF,0xF7,0x1F,0x68,0x80,0xF4,0xC2,0x36,0x4C,0xEE,
-0xC4,0x36,0xFF,0x6A,0x01,0x4E,0x4C,0xEE,0x00,0x18,0x01,0xA0,0xC0,0x36,0x57,0x6C,
-0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xEA,0x01,0xF6,0x01,0x69,0x2B,0xE9,0xC2,0x67,
-0x2C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x57,0x6C,0x00,0x18,0xEB,0x9F,
-0x01,0x6D,0x0C,0xEA,0x2C,0xEA,0x01,0xF6,0x00,0x6B,0xC2,0x67,0x6D,0xEE,0x57,0x6C,
-0x00,0x18,0x01,0xA0,0x01,0x6D,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xEA,
-0x03,0x69,0x2B,0xE9,0xC2,0x67,0x2C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,
-0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xEA,0x2C,0xEA,0x02,0x6B,0xC2,0x67,
-0x6D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x57,0x6C,0x00,0x18,0xEB,0x9F,
-0x01,0x6D,0x4C,0xE8,0xD0,0x67,0x2C,0xEE,0x01,0x6D,0x00,0x18,0x01,0xA0,0x57,0x6C,
-0x80,0x18,0x1B,0x2D,0x01,0x6C,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0xEF,0x04,0x63,
-0xD8,0xA0,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x1A,0xB2,0x06,0xD4,0x47,0x9A,
-0x8E,0xEA,0x05,0x22,0x8F,0xEA,0x03,0x22,0x00,0x18,0xFD,0x1D,0x06,0x04,0x15,0xB0,
-0x42,0x6B,0x41,0x98,0x6C,0xEA,0x6A,0xEA,0x08,0x60,0x47,0x98,0x4F,0xEA,0x1C,0x22,
-0x87,0x40,0x00,0x18,0xFD,0x1D,0x15,0x4C,0x17,0x10,0x7D,0x6C,0x00,0x18,0xEB,0x9F,
-0x01,0x6D,0x02,0x6E,0x4C,0xEE,0x04,0x26,0x50,0xA8,0x01,0x4A,0x50,0xC8,0x0C,0x10,
-0x86,0x67,0x00,0x18,0x01,0xA0,0xA6,0x67,0x49,0x98,0x01,0x4A,0x80,0x18,0x70,0x2C,
-0x49,0xD8,0x80,0x18,0x2E,0x2D,0x00,0x65,0x05,0x97,0x04,0x90,0x00,0xEF,0x03,0x63,
-0xD8,0xA0,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x00,0x6C,0xC4,0x67,0x00,0x18,
-0x01,0xA0,0xA4,0x67,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,
-0x4C,0xEE,0xFF,0x6A,0x04,0x4A,0x4B,0xEA,0x4C,0xEE,0x01,0x6D,0x00,0x18,0x01,0xA0,
-0x57,0x6C,0x0A,0xB0,0x41,0x6B,0x6B,0xEB,0x41,0x98,0x00,0x6C,0x6C,0xEA,0x80,0x18,
-0x1B,0x2D,0x41,0xD8,0x80,0x18,0x70,0x2C,0x00,0x65,0x00,0x6A,0x49,0xC0,0x05,0x97,
-0x04,0x90,0x00,0xEF,0x03,0x63,0x00,0x00,0xD8,0xA0,0x11,0x80,0xFD,0x63,0x04,0x62,
-0x80,0x18,0xBB,0x2C,0x00,0x65,0x0D,0xB3,0x00,0x6A,0x59,0x6C,0x4B,0xDB,0x49,0xDB,
-0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x00,0xF2,0x01,0x6A,
-0x4B,0xEA,0x59,0x6C,0x01,0x6D,0x00,0x18,0x01,0xA0,0x4C,0xEE,0x80,0x18,0x2E,0x2D,
-0x00,0x65,0x04,0x97,0x00,0xEF,0x03,0x63,0xD8,0xA0,0x11,0x80,0xFD,0x63,0x04,0x62,
-0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x02,0xF1,
-0x01,0x6A,0x4B,0xEA,0x4C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x00,0x6C,
-0xA4,0x67,0x00,0x18,0x01,0xA0,0xC4,0x67,0x06,0xB4,0x41,0x6B,0x6B,0xEB,0x41,0x9C,
-0x04,0x97,0x6C,0xEA,0x41,0xDC,0x00,0x6A,0x49,0xC4,0x00,0xEF,0x03,0x63,0x00,0x00,
-0xD8,0xA0,0x11,0x80,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x80,0x18,0xBB,0x2C,
-0x00,0x65,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x69,0x02,0xF0,
-0x01,0x6B,0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0x02,0xF0,0x00,0x68,0xC2,0x67,0x0D,0xEE,
-0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x59,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,
-0x2C,0xEA,0x00,0xF2,0x01,0x6B,0x6B,0xEB,0xC2,0x67,0x6C,0xEE,0x59,0x6C,0x00,0x18,
-0x01,0xA0,0x01,0x6D,0x00,0x6C,0xD0,0x67,0x00,0x18,0x01,0xA0,0xA4,0x67,0x28,0xB2,
-0x03,0x6C,0x00,0x6D,0x00,0x9A,0x07,0x6A,0x00,0xF7,0x02,0x30,0x00,0x18,0xEB,0x9F,
-0x4C,0xE8,0x2C,0xEA,0x1F,0xF4,0x01,0x6B,0x6B,0xEB,0x6C,0xEA,0x21,0xB3,0x05,0x48,
-0x1F,0xF4,0x00,0x6C,0x61,0xE0,0x20,0xF1,0x7A,0xA0,0xC2,0x67,0x00,0x6D,0x60,0x33,
-0x68,0x33,0x8C,0xEB,0x6D,0xEE,0x00,0x18,0x01,0xA0,0x03,0x6C,0x18,0xB3,0x7F,0x6A,
-0x3C,0x6C,0xC0,0x9B,0x00,0x6D,0x01,0x68,0x80,0xF4,0xC2,0x36,0x4C,0xEE,0xC4,0x36,
-0xFF,0x6A,0x06,0x4E,0x4C,0xEE,0x00,0x18,0x01,0xA0,0xC0,0x36,0x57,0x6C,0x00,0x18,
-0xEB,0x9F,0x01,0x6D,0x02,0x6B,0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0xC2,0x67,0x0D,0xEE,
-0xB0,0x67,0x00,0x18,0x01,0xA0,0x57,0x6C,0xB0,0x67,0x00,0x18,0xEB,0x9F,0x57,0x6C,
-0x02,0x6E,0x4C,0xE9,0xCB,0xEE,0xB0,0x67,0x2C,0xEE,0x00,0x18,0x01,0xA0,0x57,0x6C,
-0x06,0x97,0x05,0x91,0x04,0x90,0x00,0xEF,0x04,0x63,0x00,0x00,0xD8,0xA0,0x11,0x80,
-0xDC,0x00,0x11,0x80,0xFD,0x63,0x04,0x62,0x7F,0xF7,0x0F,0x6D,0x00,0x18,0x5D,0xBA,
-0x5E,0x6C,0x0E,0xB2,0xFF,0xF6,0x1F,0x6D,0x00,0x18,0x5D,0xBA,0x81,0xA2,0xFF,0x6D,
-0xD8,0x6C,0x00,0x18,0x9A,0x33,0x08,0x4D,0xFF,0x6C,0x09,0x4C,0x00,0x18,0x9A,0x33,
-0x00,0x6D,0x07,0xB4,0x41,0x6B,0x6B,0xEB,0x41,0x9C,0x04,0x97,0x6C,0xEA,0x41,0xDC,
-0x00,0x6A,0x49,0xC4,0x00,0xEF,0x03,0x63,0x30,0xF4,0x04,0x80,0xD8,0xA0,0x11,0x80,
-0xF7,0x63,0x10,0x62,0x0F,0xD1,0x0E,0xD0,0x72,0xB5,0x73,0xB3,0x07,0x6C,0xC0,0x9D,
-0xFF,0xF7,0x1F,0x6F,0xC0,0x32,0x58,0x32,0x80,0xF5,0x42,0x31,0x41,0x9D,0x4E,0x32,
-0x8C,0xEA,0x69,0xE2,0x60,0xA2,0x6D,0xB2,0x8C,0xEB,0x40,0xF6,0x60,0x33,0xCC,0xEA,
-0x6D,0xEA,0x40,0xF6,0x42,0x33,0x40,0xDD,0xFF,0x6E,0x8C,0xEB,0x61,0x21,0x51,0x67,
-0xEC,0xE9,0x00,0xF4,0x01,0x59,0x02,0x61,0x00,0xF4,0x00,0x6A,0x27,0x67,0x4C,0xE9,
-0x4F,0x43,0xCC,0xEA,0x04,0x5A,0x23,0x61,0x61,0xB0,0x00,0x6F,0x5D,0x67,0x06,0xD7,
-0x0C,0xCA,0x06,0x92,0x5F,0xB3,0x80,0xF4,0x20,0x34,0x01,0x6D,0x6C,0xEA,0x8D,0xEA,
-0x06,0xD2,0x5D,0xB2,0x9D,0x67,0x18,0x4C,0xC5,0x67,0x07,0xD2,0x04,0xD7,0x05,0xD7,
-0x3C,0x10,0xE0,0xF7,0x1F,0x6A,0x4C,0xEB,0x49,0x67,0x80,0xF4,0x60,0x33,0xCC,0xEA,
-0x6D,0xEA,0x40,0xDC,0x54,0xB2,0xFF,0x6D,0xEC,0xED,0x41,0xDC,0x28,0x10,0x53,0xB2,
-0x60,0x33,0x00,0x6D,0x41,0xE3,0x5D,0x67,0x18,0x4A,0xAA,0x65,0x4D,0xB2,0x71,0x67,
-0x0D,0x65,0x2A,0x65,0x4E,0xB2,0x6F,0x65,0x4E,0x65,0x8A,0x65,0xAC,0x32,0xCD,0x67,
-0xD1,0xE2,0x48,0x67,0x40,0xDC,0x00,0xF1,0x01,0x5B,0x00,0xCC,0x41,0xDC,0xC0,0x9C,
-0xE1,0x45,0xD7,0x61,0x49,0x67,0xCC,0xEA,0xAC,0x67,0xAD,0xEA,0xAA,0x67,0x80,0x4B,
-0xEC,0xED,0x80,0x4B,0xCB,0x67,0x04,0x5D,0x40,0xDC,0xCC,0xEB,0xE7,0x61,0x00,0x6F,
-0x9D,0x67,0x04,0xD7,0x05,0xD7,0x18,0x4C,0x01,0x6E,0x00,0x18,0xF7,0x33,0x00,0x65,
-0x34,0xB2,0xC4,0x6C,0xA0,0x9A,0x7F,0x6A,0x80,0xF4,0xA2,0x35,0x4C,0xED,0xA0,0x32,
-0x00,0x18,0x9A,0x33,0x4D,0xED,0x5E,0x6C,0x00,0x18,0x78,0xBA,0x60,0x6D,0x35,0xB2,
-0x35,0xB0,0x2C,0xB3,0x81,0xA2,0x01,0xF4,0x00,0x6D,0x09,0xE4,0x40,0xAA,0x4C,0xED,
-0x40,0x9B,0x0F,0x6B,0x46,0x32,0x6C,0xEA,0x40,0x32,0x50,0x32,0x4D,0xED,0x00,0x18,
-0x9A,0x33,0x2D,0xED,0x2D,0xB2,0x23,0xB6,0xEE,0xF1,0x1F,0x6D,0x21,0xA2,0x60,0x9E,
-0x01,0xE1,0x40,0xA8,0x07,0x68,0x91,0x67,0x4C,0xED,0x01,0x6A,0x6C,0xEA,0x00,0xF7,
-0x62,0x33,0x0C,0xEB,0x40,0x32,0x5C,0x32,0x60,0x33,0x64,0x33,0x4D,0xED,0x00,0x18,
-0x9A,0x33,0x6D,0xED,0x17,0xB2,0x01,0x6C,0xA0,0x9A,0x00,0xF7,0xA2,0x35,0x00,0x18,
-0x68,0x91,0x0C,0xED,0x13,0xB3,0x01,0x6C,0xA0,0x9B,0x00,0xF7,0xA2,0x35,0x00,0x18,
-0x82,0x91,0x0C,0xED,0x5E,0x6C,0x00,0x18,0x78,0xBA,0x90,0x6D,0xFF,0x6D,0x91,0x67,
-0x00,0x18,0x78,0xBA,0x01,0x4D,0xFF,0x6C,0x09,0x4C,0x00,0x18,0x9A,0x33,0x03,0x6D,
-0xFF,0x6D,0xD8,0x6C,0x00,0x18,0x9A,0x33,0x08,0x4D,0xFE,0xF7,0x1F,0x6D,0x00,0x18,
-0x5D,0xBA,0x5E,0x6C,0x10,0x97,0x0F,0x91,0x0E,0x90,0x00,0xEF,0x09,0x63,0x00,0x00,
-0xD8,0xA0,0x11,0x80,0x80,0xDB,0x10,0x80,0xFF,0xFF,0xFF,0xF1,0x00,0xF8,0x10,0x80,
-0xFF,0xFF,0x03,0xE0,0x00,0x00,0x00,0x80,0x00,0xFB,0x10,0x80,0x00,0x00,0x00,0x04,
-0x38,0xF4,0x04,0x80,0x00,0x00,0x00,0xB6,0x30,0xF4,0x04,0x80,0xE0,0x63,0x3F,0x62,
-0x3E,0xD0,0x0F,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x00,0x68,
-0x7D,0x67,0x04,0xF0,0x1F,0x6A,0x9D,0x67,0x12,0xC3,0x48,0xCB,0x00,0x18,0xEC,0xC6,
-0x10,0x4C,0x08,0xB4,0x04,0x63,0x41,0x6B,0x41,0x9C,0x09,0xC4,0x3F,0x97,0x3E,0x90,
-0x6B,0xEB,0x6C,0xEA,0x41,0xDC,0x00,0xEF,0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,
-0xD8,0xA0,0x11,0x80,0xE0,0x63,0x3E,0x62,0x18,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,
-0x64,0x2E,0x08,0x6E,0x16,0xB5,0x17,0xB3,0x07,0x6E,0x41,0x9D,0x16,0xB4,0x4E,0x32,
-0xCC,0xEA,0x69,0xE2,0x40,0xA2,0x60,0x9D,0xCC,0xEA,0x40,0xF6,0x40,0x32,0x8C,0xEB,
-0x4D,0xEB,0x9D,0x67,0x04,0xF0,0x1E,0x6A,0x60,0xDD,0x48,0xCC,0x03,0x6A,0x52,0xC4,
-0x80,0xF4,0x62,0x32,0x7F,0x6C,0x8C,0xEA,0x9D,0x67,0x53,0xC4,0x62,0x32,0x40,0xF6,
-0x62,0x33,0xCC,0xEB,0x75,0xC4,0x54,0xC4,0x00,0x18,0xAA,0xC6,0x10,0x4C,0x04,0x63,
-0x3E,0x97,0x00,0xEF,0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,0xD8,0xA0,0x11,0x80,
-0x70,0xDB,0x10,0x80,0xFF,0xFF,0xFF,0xF1,0xE0,0x63,0x3E,0x62,0x3D,0xD1,0x3C,0xD0,
-0x11,0xB4,0xFB,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x7D,0x67,0x04,0xF0,
-0x1F,0x6A,0x48,0xCB,0x0D,0xB2,0x0E,0xB0,0x00,0x69,0xA1,0xF1,0x48,0xAA,0x9D,0x67,
-0x32,0xC3,0x49,0xD8,0x00,0x18,0xEC,0xC6,0x10,0x4C,0x41,0x98,0x41,0x6B,0x6B,0xEB,
-0x05,0x63,0x6C,0xEA,0x29,0xC0,0x41,0xD8,0x3E,0x97,0x3D,0x91,0x3C,0x90,0x00,0xEF,
-0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,0x58,0x46,0x11,0x80,0xD8,0xA0,0x11,0x80,
-0xE0,0x63,0x3E,0x62,0x0E,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,
-0x7D,0x67,0x04,0xF0,0x1D,0x6A,0x48,0xCB,0x01,0x6A,0x52,0xC3,0x09,0xB2,0x7F,0x6B,
-0x9D,0x67,0x40,0x9A,0x10,0x4C,0x80,0xF4,0x42,0x32,0x6C,0xEA,0x7D,0x67,0x00,0x18,
-0x7C,0xC6,0x53,0xC3,0x04,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0x76,0x5D,0x11,0x80,
-0xD8,0xA0,0x11,0x80,0xE0,0x63,0x3E,0x62,0x24,0xB4,0xFC,0x63,0x08,0x6E,0x00,0x18,
-0x64,0x2E,0x00,0x6D,0x7D,0x67,0x04,0xF0,0x0D,0x6A,0x48,0xCB,0x19,0x6A,0x00,0x6C,
-0x52,0xC3,0x60,0x6A,0x4B,0xEA,0x53,0xC3,0x94,0xC3,0x55,0xC3,0x96,0xC3,0x97,0xC3,
-0x98,0xC3,0x1B,0xB3,0xBD,0x67,0x9F,0xC5,0x54,0xA3,0x20,0xF0,0x80,0xC5,0x20,0xF0,
-0x82,0xC5,0x59,0xC5,0x55,0xA3,0x20,0xF0,0x84,0xC5,0x20,0xF0,0x85,0xC5,0x5A,0xC5,
-0x56,0xA3,0x20,0xF0,0x87,0xC5,0x20,0xF0,0x89,0xC5,0x5B,0xC5,0x57,0xA3,0x5C,0xC5,
-0x58,0xA3,0x5D,0xC5,0x59,0xA3,0x5E,0xC5,0x02,0x6A,0x20,0xF0,0x41,0xC5,0x20,0xF0,
-0x43,0xC5,0x1E,0x6A,0x20,0xF0,0x46,0xC5,0x12,0x6A,0x20,0xF0,0x48,0xC5,0x20,0xF0,
-0x4A,0xC5,0x20,0xF0,0x8B,0xC5,0x9D,0x67,0x00,0x18,0xFC,0xC2,0x10,0x4C,0x04,0x63,
-0x3E,0x97,0x00,0xEF,0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,0xD8,0xA0,0x11,0x80,
-0xE0,0x63,0x3E,0x62,0x1A,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,
-0x7D,0x67,0x04,0xF0,0x06,0x6A,0x48,0xCB,0x0F,0x6A,0x9D,0x67,0x52,0xC3,0x00,0x6A,
-0x54,0xC4,0x56,0xC4,0x57,0xC4,0x58,0xC4,0x59,0xC4,0x5A,0xC4,0x5B,0xC4,0x5C,0xC4,
-0x5D,0xC4,0x5E,0xC4,0x5F,0xC4,0x07,0x6A,0x20,0x6B,0x20,0xF0,0x40,0xC4,0x03,0x6A,
-0x73,0xC4,0x75,0xC4,0x20,0xF0,0x41,0xC4,0x00,0x18,0xA8,0xC1,0x10,0x4C,0x7D,0x67,
-0x04,0xF0,0x0A,0x6A,0x48,0xCB,0x9D,0x67,0x01,0x6A,0x52,0xC3,0x53,0xC3,0x00,0x18,
-0x5E,0xC2,0x10,0x4C,0x04,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0x76,0x5D,0x11,0x80,
-0xE0,0x63,0x3E,0x62,0xFB,0x63,0x7D,0x67,0x00,0xF4,0x06,0x6A,0x48,0xCB,0x03,0x6A,
-0x52,0xC3,0x13,0x6A,0x55,0xC3,0x26,0xB2,0x6D,0xA2,0x08,0x73,0x22,0x60,0x70,0x32,
-0x69,0xE2,0x24,0xB6,0x48,0x32,0x6B,0xE2,0x48,0x32,0xD1,0xE2,0x20,0xF1,0x4F,0xA4,
-0x01,0x6D,0xAC,0xEA,0x16,0x22,0x00,0xF1,0x52,0xAE,0x47,0xEB,0xAC,0xEA,0x11,0x22,
-0x20,0xF1,0x6C,0xAC,0xFF,0xF7,0x1F,0x6A,0x9D,0x67,0x4C,0xEB,0x5D,0x67,0x73,0xC2,
-0xBD,0x67,0x62,0x32,0x7D,0x67,0x54,0xC3,0x00,0xF1,0x18,0x4D,0x00,0x18,0xD2,0x48,
-0x10,0x4C,0x13,0xB2,0x6C,0xA2,0x0A,0x73,0x1D,0x60,0x64,0x32,0x69,0xE2,0x4C,0x32,
-0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x10,0xB3,0x48,0x32,0x71,0xE2,0xE0,0xF0,0x4B,0xA4,
-0xFF,0x6B,0x6C,0xEA,0x01,0x72,0x0E,0x61,0x60,0xF2,0x7C,0xAC,0x5D,0x67,0x9D,0x67,
-0x73,0xC2,0xBD,0x67,0x62,0x32,0x7D,0x67,0x54,0xC3,0x00,0xF1,0x18,0x4D,0x00,0x18,
-0xD2,0x48,0x10,0x4C,0x05,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0xD8,0xA0,0x11,0x80,
-0x58,0x46,0x11,0x80,0x48,0x60,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x12,0xB0,
-0x00,0x6A,0xFF,0x6D,0xC0,0xF1,0x46,0xC0,0xC0,0xF1,0x5A,0xC0,0x03,0x6A,0xC0,0xF1,
-0x58,0xC0,0x0E,0xB2,0x02,0x6B,0xAC,0xEC,0xC0,0xF1,0x65,0xC0,0xC0,0xF1,0x64,0xC0,
-0xC0,0xF1,0x79,0xC0,0x40,0xF1,0x9E,0xC0,0x60,0xC2,0x00,0x18,0xEB,0xA4,0xAC,0xEC,
-0x20,0xF1,0x8E,0x40,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x05,0x97,0x04,0x90,
-0x00,0xEF,0x03,0x63,0x48,0x5C,0x11,0x80,0xBD,0x5B,0x11,0x80,0xE0,0x63,0x3E,0x62,
-0x3D,0xD1,0x3C,0xD0,0xF5,0x63,0x7D,0x67,0x00,0xF4,0x05,0x6A,0x7E,0xB5,0x54,0xCB,
-0x9D,0x67,0x0D,0x6A,0x20,0xF0,0x4A,0xC3,0x2B,0x4C,0x00,0x18,0x2E,0x2E,0x06,0x6E,
-0x7A,0xB0,0x00,0x6A,0x9D,0x67,0x01,0x6B,0x20,0xF0,0x51,0xC4,0x20,0xF0,0x52,0xC4,
-0x20,0xF0,0x73,0xC4,0x20,0xF0,0x54,0xC4,0x20,0xF0,0x55,0xC4,0x20,0xF0,0x56,0xC4,
-0x20,0xF0,0x77,0xC4,0xC0,0xF1,0x46,0xC0,0xC0,0xF1,0x5A,0xC0,0x03,0x6A,0xC0,0xF1,
-0x58,0xC0,0x6F,0xB2,0x02,0x6B,0xC0,0xF1,0x65,0xC0,0xC0,0xF1,0x64,0xC0,0xC0,0xF1,
-0x79,0xC0,0x20,0xF1,0x8E,0x40,0x60,0xC2,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,
-0x60,0xF1,0x4E,0xA0,0x02,0x72,0x07,0x60,0x03,0x52,0x02,0x60,0x01,0x72,0x01,0x10,
-0x03,0x72,0x15,0x61,0xAF,0x10,0x63,0xB5,0x00,0x6B,0xFF,0x6C,0x64,0x32,0x69,0xE2,
-0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x48,0x32,0xA9,0xE2,0x20,0xF0,0x58,0xA2,
-0x8C,0xEA,0x80,0xF0,0x1F,0x2A,0x01,0x4B,0x8C,0xEB,0x0A,0x5B,0xEF,0x61,0x00,0x18,
-0xD4,0x5A,0x0A,0x04,0x62,0x67,0x80,0xF0,0x1D,0x2A,0x0A,0x02,0x06,0x4A,0x64,0xA2,
-0xFF,0xF7,0x1F,0x6C,0xBD,0x67,0x60,0x33,0x4C,0xD3,0x43,0xA2,0x22,0x4D,0x4D,0xEB,
-0x8C,0xEB,0x4C,0xD3,0x5D,0x67,0x20,0xF0,0x53,0xA2,0x7D,0x67,0x4D,0xD2,0x20,0xF0,
-0x74,0xA3,0x0A,0x02,0x0A,0x4A,0x4E,0xD3,0x24,0xA2,0x43,0xA2,0x20,0x31,0x8C,0xE9,
-0x4D,0xE9,0x8C,0xE9,0x9D,0x67,0x20,0xF0,0x97,0xA4,0x4F,0xD4,0x9D,0x67,0x00,0x18,
-0x8E,0xDF,0x20,0x4C,0x50,0xD2,0x62,0x67,0x75,0x2A,0x5D,0x67,0x71,0xAA,0xFF,0xF7,
-0x1F,0x6C,0x3D,0xB5,0x8C,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,
-0x6B,0xE2,0x3C,0xB3,0x48,0x32,0x61,0xE2,0xE0,0xF0,0x8D,0x40,0x00,0x18,0x2E,0x2E,
-0x06,0x6E,0x5D,0x67,0x20,0xF1,0x50,0xAA,0x7D,0x67,0x9D,0x67,0x60,0xF2,0x5E,0xC8,
-0x20,0xF1,0x74,0xA3,0x5D,0x67,0xE0,0xF0,0x7A,0xC0,0x20,0xF1,0x98,0xA4,0x7D,0x67,
-0xE0,0xF0,0x9C,0xC0,0x20,0xF1,0x5C,0xA2,0xE0,0xF0,0x5D,0xC0,0x20,0xF0,0x40,0xA3,
-0xE0,0xF0,0x53,0xC0,0x01,0x6A,0x80,0xF2,0x42,0xC0,0x91,0xAB,0xFF,0xF7,0x1F,0x6A,
-0x00,0x18,0x45,0x95,0x4C,0xEC,0x7D,0x67,0x40,0xF1,0x60,0xA3,0x22,0x32,0x5E,0x32,
-0x00,0xF1,0x71,0xC0,0x18,0x22,0xEF,0xF7,0x1F,0x6A,0x4C,0xE9,0x01,0x6A,0x80,0xF0,
-0x3E,0xC8,0x04,0xD2,0x20,0xB2,0xFF,0xF7,0x1F,0x6C,0xFA,0x6D,0x05,0xD2,0x80,0xF0,
-0x5E,0xA8,0x24,0xF2,0x15,0x6E,0x20,0xF5,0x17,0x6F,0x8C,0xEA,0x06,0x6C,0x20,0x18,
-0x1B,0x32,0x06,0xD2,0x05,0x10,0x5D,0x67,0x40,0xF1,0x40,0xAA,0x80,0xF0,0x5E,0xC8,
-0x00,0x18,0x4E,0x9B,0x0A,0x04,0x22,0x67,0x0F,0x22,0x7D,0x67,0x20,0xF0,0x80,0xA3,
-0xE0,0xF0,0xA8,0xA0,0x00,0x18,0xB6,0xDF,0x00,0x65,0x0B,0xB4,0x00,0x18,0xD3,0xDF,
-0x00,0x65,0x07,0x10,0x0C,0x6B,0x06,0x10,0x5D,0x67,0x91,0xAA,0x20,0x18,0x13,0x26,
-0x01,0x6D,0x71,0x67,0x0B,0x63,0x3E,0x97,0x3D,0x91,0x3C,0x90,0x43,0x67,0x00,0xEF,
-0x20,0x63,0x00,0x00,0xEC,0xA0,0x11,0x80,0x48,0x5C,0x11,0x80,0xBD,0x5B,0x11,0x80,
-0x48,0x60,0x11,0x80,0xFC,0xA5,0x10,0x80,0xF4,0x63,0x16,0x62,0x15,0xD1,0x14,0xD0,
-0x00,0x6A,0x0B,0xD2,0x0C,0xD2,0x0D,0xD2,0x7D,0x67,0x01,0xF4,0x03,0x6A,0x18,0xD4,
-0x54,0xCB,0x62,0xA4,0x23,0xA4,0x02,0x6A,0x1E,0x5B,0xC0,0xF3,0x1B,0x60,0x04,0x0A,
-0x64,0x33,0x4D,0xE3,0x60,0x8B,0x4D,0xE3,0x00,0xEB,0x00,0x65,0x3D,0x00,0x49,0x00,
-0x9D,0x00,0x5B,0x02,0x07,0x03,0x47,0x03,0xD3,0x03,0xAB,0x07,0xF5,0x03,0x07,0x04,
-0x21,0x04,0x33,0x04,0x9D,0x06,0x9D,0x05,0x45,0x04,0x6D,0x05,0x85,0x05,0x9D,0x06,
-0xAD,0x05,0xBF,0x05,0xD1,0x05,0xFF,0x05,0x0B,0x06,0x21,0x06,0x2D,0x06,0x41,0x06,
-0x51,0x06,0x61,0x06,0x6D,0x06,0x7F,0x06,0xA0,0xF7,0x00,0xB2,0x03,0x6C,0x40,0xAA,
-0x0B,0xD2,0x0A,0x13,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,
-0x4C,0xEE,0x02,0xF1,0x03,0x6A,0x4B,0xEA,0x4C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,
-0x01,0x6D,0x00,0x6C,0xA4,0x67,0x00,0x18,0x01,0xA0,0xC4,0x67,0x80,0x18,0x1B,0x2D,
-0x00,0x6C,0x00,0x18,0xFE,0x4F,0x00,0x65,0x00,0x6D,0x9D,0x67,0x28,0x4C,0x80,0x18,
-0x49,0x2B,0xC5,0x67,0x40,0xF7,0x18,0xB3,0x0A,0x6A,0x4C,0xC3,0x08,0x6A,0x4D,0xC3,
-0x00,0x6A,0x49,0xC3,0x4A,0xC3,0x87,0x13,0x0B,0x59,0x18,0x67,0x60,0xF3,0x11,0x20,
-0x20,0xF7,0x1C,0xB4,0x05,0x21,0x41,0x9C,0x40,0x6B,0x6C,0xEA,0x07,0x22,0x53,0x13,
-0x41,0x9C,0x40,0x6B,0x6C,0xEA,0x02,0x2A,0x29,0xC4,0x75,0x13,0x20,0xF7,0x00,0xB3,
-0x04,0x6A,0x01,0x6C,0x29,0xC3,0x04,0xD2,0x00,0xF7,0x18,0xB2,0x06,0xD1,0xFA,0x6D,
-0x05,0xD2,0x4A,0xA3,0x43,0xF7,0x0A,0x6E,0xE1,0xF4,0x11,0x6F,0x07,0xD2,0x61,0x9B,
-0x6A,0x32,0x66,0xEC,0x8C,0xEA,0x8C,0xEB,0x08,0xD2,0x20,0x18,0x1B,0x32,0x09,0xD3,
-0xA0,0xF0,0x04,0x20,0x00,0xF0,0x10,0x0A,0x24,0x33,0x4D,0xE3,0x60,0x8B,0x4D,0xE3,
-0x00,0xEB,0x00,0x65,0x17,0x00,0x8D,0x00,0xB9,0x00,0xEF,0x00,0x0F,0x01,0x13,0x01,
-0x17,0x01,0x39,0x01,0x21,0x01,0x29,0x01,0x31,0x01,0xC0,0xF6,0x04,0xB2,0x61,0x9A,
-0x01,0x6A,0x6C,0xEA,0x0B,0x22,0x02,0x6A,0x6C,0xEA,0x04,0x22,0x80,0x18,0x7D,0x2D,
-0x00,0x65,0x15,0x10,0x80,0x18,0xA3,0x2D,0x00,0x65,0x11,0x10,0x02,0x6A,0x6C,0xEA,
-0x04,0x22,0x80,0x18,0xB6,0x2E,0x00,0x65,0x0A,0x10,0x04,0x6A,0x6C,0xEA,0x04,0x22,
-0x80,0x18,0x87,0x2E,0x00,0x65,0x03,0x10,0x80,0x18,0xF5,0x2D,0x00,0x65,0x80,0xF6,
-0x00,0xB0,0x8A,0x98,0x4B,0x98,0x29,0x98,0x0E,0xD4,0x00,0x18,0xFE,0x4F,0x0F,0xD2,
-0x00,0x6D,0x9D,0x67,0x28,0x4C,0x80,0x18,0x49,0x2B,0xC5,0x67,0x0E,0x93,0x0F,0x94,
-0x0A,0x6A,0x4C,0xC0,0x08,0x6A,0x4D,0xC0,0x29,0xD8,0x6A,0xD8,0x8B,0xD8,0x0B,0x13,
-0x40,0xF6,0x0C,0xB4,0x02,0x6A,0x61,0x9C,0x4D,0xEB,0x04,0x6A,0x6C,0xEA,0x61,0xDC,
-0x07,0x22,0x02,0x6A,0x4B,0xEA,0x6C,0xEA,0x80,0x18,0xCC,0x2E,0x41,0xDC,0x1A,0x10,
-0x01,0x6A,0x6D,0xEA,0x80,0x18,0x93,0x2D,0x41,0xDC,0x14,0x10,0x20,0xF6,0x00,0xB4,
-0x03,0x6A,0x4B,0xEA,0x61,0x9C,0x4C,0xEB,0x02,0x6A,0x4B,0xEA,0x4C,0xEB,0x04,0x6A,
-0x6C,0xEA,0x61,0xDC,0x04,0x22,0x80,0x18,0x99,0x2E,0x00,0x65,0x03,0x10,0x80,0x18,
-0x08,0x2E,0x00,0x65,0xE0,0xF5,0x18,0xB2,0x40,0x6C,0x61,0x9A,0x8D,0xEB,0x61,0xDA,
-0xDA,0x12,0xE0,0xF5,0x0C,0xB0,0x03,0x6B,0x6B,0xEB,0x41,0x98,0x6C,0xEA,0x01,0x6B,
-0x6D,0xEA,0x80,0x18,0xB5,0x2D,0x41,0xD8,0x41,0x98,0x40,0x6B,0x6D,0xEA,0x41,0xD8,
-0xCA,0x12,0x01,0x6C,0x03,0x10,0x02,0x6C,0x01,0x10,0x03,0x6C,0x80,0x18,0x4E,0x2F,
-0x00,0x65,0xC1,0x12,0x80,0x18,0xDD,0x2E,0x00,0x65,0xBD,0x12,0x80,0x18,0x04,0x2F,
-0x00,0x65,0xB9,0x12,0x80,0x18,0x20,0x2F,0x00,0x65,0xB5,0x12,0x80,0x18,0x63,0x2F,
-0x00,0x65,0xA0,0xF2,0x10,0x22,0x12,0x72,0x58,0x67,0x01,0x5A,0x78,0x67,0x01,0x5B,
-0x58,0x67,0x03,0x4A,0xA7,0x12,0x04,0x59,0x60,0xF2,0x1D,0x60,0x80,0x18,0x1B,0x2D,
-0x00,0x6C,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,
-0x02,0xF1,0x03,0x6A,0x4B,0xEA,0x4C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,
-0x00,0x6C,0xA4,0x67,0x00,0x18,0x01,0xA0,0xC4,0x67,0x00,0x18,0xFE,0x4F,0x00,0x65,
-0x00,0x6D,0x9D,0x67,0x28,0x4C,0x80,0x18,0x49,0x2B,0xC5,0x67,0x40,0xF5,0x00,0xB0,
-0x0A,0x6A,0x4C,0xC0,0x08,0x6A,0x2A,0xC0,0x00,0x1C,0xDD,0x31,0x4D,0xC0,0x10,0xD2,
-0x41,0x98,0x05,0x6B,0x6B,0xEB,0x6C,0xEA,0x01,0x71,0x41,0xD8,0x06,0x61,0x80,0x18,
-0x4E,0x2F,0x03,0x6C,0x00,0x18,0xC4,0x53,0x00,0x6C,0x02,0x71,0x04,0x61,0x41,0x98,
-0x04,0x6B,0x6D,0xEA,0x41,0xD8,0x00,0x1C,0xE5,0x31,0x10,0x94,0x02,0x6A,0x04,0xD2,
-0x00,0xF5,0x00,0xB2,0x06,0xD1,0x01,0x6C,0x05,0xD2,0x41,0x98,0xFA,0x6D,0xE3,0xF7,
-0x1E,0x6E,0x4A,0x32,0x8C,0xEA,0xE1,0xF4,0x12,0x6F,0x20,0x18,0x1B,0x32,0x07,0xD2,
-0x52,0x12,0x4F,0x59,0x25,0x60,0x18,0x93,0x44,0xA3,0x08,0x5A,0x21,0x60,0xC0,0xF4,
-0x10,0xB5,0x7F,0x6A,0x4C,0xE9,0x80,0x9D,0xC0,0xF4,0x0C,0xB2,0x80,0xF4,0x20,0x33,
-0x4C,0xEC,0x6D,0xEC,0x80,0xDD,0x18,0x92,0x64,0xA2,0xFF,0x6A,0x4C,0xEB,0x07,0x6A,
-0x4C,0xEB,0xA0,0xF4,0x18,0xB2,0x00,0xF7,0x60,0x33,0x8C,0xEA,0x6D,0xEA,0x40,0xDD,
-0x32,0x12,0x18,0x93,0x0A,0x59,0x45,0xA3,0x84,0xA3,0x40,0x32,0x4D,0xEC,0x03,0x61,
-0x03,0x6C,0x0C,0xD4,0x28,0x12,0x80,0xF4,0x08,0xB6,0x80,0xF4,0x14,0xB3,0xE3,0xF7,
-0x1F,0x6A,0xA0,0x9E,0x8C,0xEA,0x54,0x32,0x6C,0xED,0x80,0xF4,0x08,0xB3,0x4D,0xED,
-0x24,0x32,0x69,0xE2,0x40,0xAA,0xFF,0xF7,0x1F,0x6B,0xA0,0xDE,0x6C,0xEA,0x4C,0x32,
-0x82,0xEA,0xE0,0xF1,0x1E,0x61,0x03,0x59,0x05,0x60,0x02,0x6A,0x4B,0xEA,0x4C,0xED,
-0xA0,0xDE,0x0F,0x10,0x06,0x59,0xFF,0x6B,0x58,0x67,0x01,0x6C,0x6C,0xEA,0x61,0x9E,
-0x8D,0xED,0x8C,0xEA,0x81,0x6C,0x8B,0xEC,0x5C,0x32,0x8C,0xEB,0x4D,0xEB,0xA0,0xDE,
-0x61,0xDE,0x40,0xF4,0x04,0xB2,0x1F,0x6B,0x6B,0xEB,0x49,0xE1,0x80,0xA2,0x0F,0x6A,
-0x4C,0xEC,0x40,0x9E,0x84,0x34,0x6C,0xEA,0x8D,0xEA,0x40,0xDE,0xEC,0x11,0x18,0x92,
-0x85,0xA2,0x05,0x5C,0xA0,0xF1,0x1F,0x60,0x00,0xF4,0x04,0xB5,0x07,0x6A,0x4C,0xEC,
-0x41,0x9D,0x39,0x6B,0x6B,0xEB,0x8C,0x34,0x6C,0xEA,0x8D,0xEA,0x41,0xDD,0xDB,0x11,
-0x18,0x94,0xFB,0xB3,0x43,0xA4,0x46,0xC3,0x44,0xA4,0x47,0xC3,0x45,0xA4,0x48,0xC3,
-0xD2,0x11,0xF7,0xB5,0xFD,0xB3,0x3E,0x34,0x40,0x9D,0xC0,0xF7,0x80,0x34,0x6C,0xEA,
-0x8D,0xEA,0x40,0xDD,0x7F,0x6A,0x4C,0xE9,0x25,0xC5,0xC5,0x11,0x18,0x94,0xF0,0xB3,
-0x43,0xA4,0x4E,0xC3,0x44,0xA4,0x4F,0xC3,0x45,0xA4,0x50,0xC3,0xBC,0x11,0x18,0x94,
-0xEB,0xB3,0x43,0xA4,0x51,0xC3,0x44,0xA4,0x52,0xC3,0x45,0xA4,0x53,0xC3,0xB3,0x11,
-0xE7,0xB6,0xFF,0x6C,0xA4,0x67,0x69,0xA6,0x6C,0xED,0x0A,0x75,0x3F,0x61,0x4C,0xA6,
-0x00,0x6F,0x8C,0xEA,0x0A,0x72,0x13,0x60,0x22,0x67,0x44,0x32,0x29,0xE2,0x4C,0x32,
-0x2B,0xE2,0x4C,0x32,0xE6,0xB3,0x2B,0xE2,0x48,0x32,0x69,0xE2,0x20,0xF0,0x58,0xA2,
-0x05,0x6F,0x8C,0xEA,0x04,0x72,0x03,0x60,0x0A,0x6A,0x00,0x6F,0x4C,0xC6,0x4D,0xA6,
-0x08,0x72,0x6A,0x60,0x22,0x67,0x50,0x32,0x29,0xE2,0xDE,0xB4,0x48,0x32,0x2B,0xE2,
-0x48,0x32,0x89,0xE2,0x20,0xF1,0x4F,0xA2,0x01,0x6B,0x05,0x6F,0x6C,0xEA,0x05,0x22,
-0x00,0xF1,0x52,0xAC,0x47,0xE9,0x6C,0xEA,0x57,0x2A,0x08,0x6A,0x00,0x6F,0x4D,0xC6,
-0x53,0x10,0xD5,0xB0,0x7F,0x4D,0x6E,0x4D,0x05,0x6F,0x90,0x67,0xB5,0xE3,0x06,0x6E,
-0x00,0x18,0x2E,0x2E,0x13,0xD7,0xFF,0xF7,0x38,0xC0,0x25,0x10,0x4B,0x43,0x8C,0xEA,
-0x03,0x5A,0x23,0x60,0xCA,0xB5,0x04,0x6F,0x00,0x69,0x24,0x32,0x29,0xE2,0x4C,0x32,
-0x2B,0xE2,0x4C,0x32,0x2B,0xE2,0x48,0x33,0xA9,0xE3,0x20,0xF0,0x58,0xA2,0x8C,0xEA,
-0x04,0x72,0xDF,0x60,0x01,0x49,0x8C,0xE9,0x0A,0x59,0xEF,0x61,0x2D,0x10,0xC2,0xB0,
-0x60,0xF1,0x02,0x4D,0x05,0x6F,0x90,0x67,0xB5,0xE3,0x06,0x6E,0x00,0x18,0x2E,0x2E,
-0x13,0xD7,0xFF,0xF7,0x39,0xC0,0x13,0x97,0x1F,0x10,0x48,0x43,0x8C,0xEA,0x02,0x5A,
-0xE5,0x67,0x1A,0x60,0xB7,0xB5,0x04,0x6F,0x00,0x69,0x01,0x6E,0xFF,0xF7,0x1F,0x68,
-0x30,0x32,0x29,0xE2,0x48,0x32,0x2B,0xE2,0x48,0x33,0xA9,0xE3,0x20,0xF1,0x4F,0xA2,
-0xCC,0xEA,0x06,0x22,0x00,0xF1,0x52,0xAD,0x0C,0xEA,0x47,0xE9,0xCC,0xEA,0xD7,0x2A,
-0x01,0x49,0x8C,0xE9,0x08,0x59,0xEC,0x61,0xA1,0xB2,0x4A,0xA2,0x0B,0xD2,0x0B,0x93,
-0xE0,0x32,0x4D,0xEB,0x0B,0xD3,0x77,0x10,0xA8,0xB2,0x20,0xF0,0x7C,0xA2,0x0B,0xD3,
-0x20,0xF0,0x7D,0xA2,0x0B,0x94,0x20,0xF0,0x5E,0xA2,0x60,0x33,0x6D,0xEC,0x85,0x10,
-0xA2,0xB2,0x20,0xF0,0x7F,0xA2,0x0B,0xD3,0x40,0xF0,0x60,0xA2,0x0B,0x94,0x40,0xF0,
-0x41,0xA2,0x60,0x33,0x6D,0xEC,0x79,0x10,0x18,0x93,0x43,0xA3,0x62,0xAB,0x60,0x33,
-0x6D,0xEA,0x9B,0xB3,0x41,0xDB,0xFF,0x10,0x18,0x94,0x8D,0xB3,0x43,0xA4,0x54,0xC3,
-0x44,0xA4,0x55,0xC3,0x45,0xA4,0x56,0xC3,0xF6,0x10,0x18,0x94,0x88,0xB3,0x43,0xA4,
-0x57,0xC3,0x44,0xA4,0x58,0xC3,0x45,0xA4,0x59,0xC3,0xED,0x10,0x4F,0x41,0xFF,0x6B,
-0x6C,0xEA,0x09,0x5A,0xC0,0xF0,0x15,0x60,0x5C,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,
-0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x79,0x6A,0x4B,0xEA,0x4C,0xEE,0x2C,0x33,0x78,0x6A,
-0x4C,0xEB,0x5C,0x6C,0x01,0x6D,0x6D,0xEE,0xA7,0x10,0x79,0xB2,0x92,0xAA,0x69,0x9A,
-0x0B,0xD4,0x84,0xB4,0x07,0x10,0x76,0xB2,0x69,0x9A,0x62,0x34,0x82,0x34,0x0B,0xD4,
-0xFF,0xF7,0x1F,0x6C,0x8C,0xEB,0x69,0xDA,0x02,0x6A,0x3C,0x10,0x70,0xB2,0x96,0xAA,
-0x6B,0x9A,0x0B,0xD4,0x7B,0xB4,0x07,0x10,0x6D,0xB2,0x6B,0x9A,0x62,0x34,0x82,0x34,
-0x0B,0xD4,0xFF,0xF7,0x1F,0x6C,0x8C,0xEB,0x6B,0xDA,0xEE,0x17,0x78,0x6C,0x00,0x18,
-0xEB,0x9F,0x01,0x6D,0x02,0x6B,0x0B,0xD2,0x0D,0xD3,0xAD,0x10,0x76,0x6C,0x00,0x18,
-0xEB,0x9F,0x01,0x6D,0x0B,0xD2,0x02,0x6C,0x0D,0xD4,0xA5,0x10,0x77,0x6C,0x00,0x18,
-0xEB,0x9F,0x01,0x6D,0x0B,0xD2,0xD8,0x17,0x5D,0xB2,0x74,0xA2,0x0B,0xD3,0x75,0xA2,
-0x0B,0x94,0x56,0xA2,0x60,0x33,0x6D,0xEC,0x08,0x10,0x59,0xB2,0x77,0xA2,0x0B,0xD3,
-0x78,0xA2,0x0B,0x94,0x59,0xA2,0x60,0x33,0x6D,0xEC,0x40,0x32,0x40,0x32,0x4D,0xEC,
-0x0B,0xD4,0x03,0x6A,0x0D,0xD2,0x87,0x10,0x00,0x6B,0x05,0x59,0x11,0xD3,0x78,0x67,
-0x70,0x23,0x18,0x94,0x42,0xA4,0x02,0xAC,0x0C,0x72,0x05,0x61,0x58,0xB2,0x01,0x6F,
-0x41,0x9A,0x11,0xD2,0x03,0x10,0x11,0x97,0x03,0x6A,0x0D,0xD2,0x74,0x23,0x00,0xF0,
-0x12,0x0A,0x24,0x33,0x4D,0xE3,0x60,0x8B,0x4D,0xE3,0x00,0xEB,0x00,0x65,0x0B,0x00,
-0x29,0x00,0x83,0x00,0xA5,0x00,0xAF,0x00,0x06,0x27,0x11,0x96,0x3F,0x6A,0x90,0x67,
-0x4C,0xEC,0x00,0x6D,0x31,0x10,0x3F,0x6A,0x90,0x67,0x4C,0xEC,0x00,0x18,0xEB,0x9F,
-0xA7,0x67,0x0B,0xD2,0x58,0x10,0x02,0x31,0x01,0x6B,0x6C,0xE9,0x09,0x21,0xA3,0x67,
-0x40,0x6C,0xD1,0x67,0x12,0xD3,0x00,0x18,0x01,0xA0,0x13,0xD7,0x13,0x97,0x12,0x93,
-0x0C,0x27,0x7F,0x6A,0x4C,0xE8,0x07,0x34,0x40,0x6A,0x11,0x96,0x4D,0xEC,0xFF,0x6A,
-0x4C,0xEC,0x00,0x18,0x01,0xA0,0xA3,0x67,0x0B,0x10,0x7F,0x6A,0x4C,0xE8,0x07,0x34,
-0x40,0x6A,0x4D,0xEC,0xFF,0x6A,0x4C,0xEC,0x00,0x18,0xEB,0x9F,0xA3,0x67,0x0B,0xD2,
-0x32,0x21,0x40,0x6C,0x01,0x6D,0x00,0x6E,0x00,0x18,0x01,0xA0,0x00,0x65,0x2B,0x10,
-0x01,0x6A,0x0C,0xEA,0x03,0x22,0x03,0x6B,0x0C,0xD3,0x25,0x10,0x08,0x27,0x11,0x95,
-0xFF,0xF7,0x1F,0x6A,0x90,0x67,0x00,0x18,0x9A,0x33,0x4C,0xED,0x1C,0x10,0x2A,0xB2,
-0x12,0x10,0x01,0x6A,0x0C,0xEA,0x05,0x2A,0x28,0xB2,0x06,0x10,0x01,0x6A,0x0C,0xEA,
-0x02,0x22,0x03,0x6A,0x0F,0x10,0x26,0xB2,0x06,0x27,0x7D,0x67,0x40,0xF0,0x64,0xAB,
-0x49,0xE0,0x60,0xCA,0x08,0x10,0x49,0xE0,0x40,0xAA,0xFF,0xF7,0x1F,0x6C,0x4C,0xEC,
-0x0B,0xD4,0x01,0x10,0x0C,0xD2,0x0D,0x93,0x0C,0x94,0x70,0x32,0x4D,0xEC,0x18,0x92,
-0x83,0xC2,0x18,0x93,0x18,0x94,0x41,0xA3,0x10,0x6B,0x6B,0xEB,0x6C,0xEA,0x41,0xC4,
-0x18,0x92,0x0B,0x96,0x02,0x6C,0x00,0x18,0x2C,0x2B,0xA0,0x9A,0x16,0x97,0x15,0x91,
-0x14,0x90,0x00,0xEF,0x0C,0x63,0x00,0x00,0xD2,0x04,0x11,0x80,0xD8,0xA0,0x11,0x80,
-0xFC,0xA5,0x10,0x80,0xFF,0xFF,0x03,0xFE,0xFF,0xFF,0xFF,0x8F,0x1F,0x00,0xFC,0xFF,
-0x88,0xDB,0x10,0x80,0x9C,0xDB,0x10,0x80,0xFF,0xFF,0xFF,0x7F,0x48,0x60,0x11,0x80,
-0x58,0x46,0x11,0x80,0xEC,0xA0,0x11,0x80,0xDC,0x00,0x11,0x80,0x08,0xA1,0x11,0x80,
-0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0xB6,0x00,0xA0,0x00,0xB0,0x00,0x10,0x00,0xB6,
-0xF8,0x63,0x0E,0x62,0x0D,0xD1,0x0C,0xD0,0x44,0xAC,0x24,0x67,0x01,0x72,0x55,0x61,
-0x00,0x9C,0x5D,0x67,0xFA,0x6D,0x20,0xF0,0x08,0xC2,0x02,0x6A,0x04,0xD2,0x3F,0xB2,
-0x06,0xD0,0x44,0xF2,0x1E,0x6E,0x05,0xD2,0x41,0x9C,0xC1,0xF4,0x1C,0x6F,0x04,0x6C,
-0x20,0x18,0x1B,0x32,0x07,0xD2,0x3F,0x6A,0x4C,0xE8,0x20,0x70,0x0A,0x61,0x62,0xA1,
-0xFF,0x6A,0x4C,0xEB,0x06,0x2B,0x36,0xB2,0x60,0xDA,0x36,0xB2,0x60,0xDA,0x01,0x6A,
-0x42,0xC1,0x7D,0x67,0x20,0xF0,0x68,0xA3,0x3F,0x6A,0x6C,0xEA,0x24,0x72,0x03,0x67,
-0x24,0x61,0x7D,0x67,0x01,0xF4,0x03,0x6A,0x00,0x1C,0xDD,0x31,0x50,0xCB,0x00,0x18,
-0xFE,0x4F,0x02,0x67,0x00,0x6D,0x9D,0x67,0x20,0x4C,0x80,0x18,0x49,0x2B,0xC5,0x67,
-0x29,0xB3,0x40,0x99,0x6C,0xEA,0x29,0xB3,0x6E,0xEA,0x06,0x2A,0x80,0x18,0x4E,0x2F,
-0x03,0x6C,0x00,0x18,0xC4,0x53,0x00,0x6C,0xA0,0x99,0x02,0x6C,0x00,0x18,0x2C,0x2B,
-0x00,0x6E,0x00,0x1C,0xE5,0x31,0x90,0x67,0x32,0x10,0xFF,0x6A,0x4C,0xE8,0x30,0x70,
-0x04,0x61,0x80,0x18,0xEA,0x2F,0x91,0x67,0x2A,0x10,0x44,0xA9,0x02,0x72,0x24,0x61,
-0x1B,0xB2,0x40,0xA2,0x21,0x2A,0x40,0x99,0x04,0xF0,0x0F,0x6B,0x6C,0xEA,0x6A,0xEA,
-0x0B,0x61,0x18,0xB2,0xFF,0xF7,0x1F,0x6B,0x40,0xAA,0x6C,0xEA,0x40,0x32,0x40,0x32,
-0x00,0xF2,0x0F,0x6B,0x6D,0xEA,0x40,0xD9,0x02,0x6A,0x04,0xD2,0x0B,0xB2,0x05,0x6C,
-0xFA,0x6D,0x05,0xD2,0x40,0x99,0xA4,0xF2,0x0E,0x6E,0xC1,0xF4,0x1D,0x6F,0x06,0xD2,
-0x41,0x99,0x20,0x18,0x1B,0x32,0x07,0xD2,0x00,0x18,0xF4,0x2C,0x91,0x67,0x0E,0x97,
-0x0D,0x91,0x0C,0x90,0x00,0xEF,0x08,0x63,0xFC,0xA5,0x10,0x80,0xAC,0xDB,0x10,0x80,
-0x38,0x91,0x10,0x80,0x00,0x00,0xFF,0x00,0x00,0x00,0x01,0x00,0x98,0x00,0x11,0x80,
-0x04,0x09,0x11,0x80,0xFD,0x63,0x04,0x62,0x00,0x18,0x23,0xEA,0x00,0x65,0x04,0x97,
-0x00,0xEF,0x03,0x63,0xEF,0x63,0x20,0x62,0x1F,0xD1,0x1E,0xD0,0x80,0xAC,0x00,0x6A,
-0xC6,0xB3,0x11,0xD4,0xA0,0xA5,0x1B,0xD2,0x84,0x32,0x89,0xE2,0x4C,0x32,0x8B,0xE2,
-0x4C,0x32,0x8B,0xE2,0x48,0x32,0x69,0xE2,0x19,0xD2,0x12,0xD5,0xE0,0xF0,0x6C,0xA2,
-0x18,0xD3,0xA0,0xF0,0x9A,0xAA,0x19,0x93,0x13,0xD4,0xA0,0xF0,0x58,0xAA,0x19,0x94,
-0x14,0xD2,0xA0,0xF0,0x7C,0xAB,0x19,0x92,0x15,0xD3,0x7D,0x67,0x60,0xF0,0x6C,0xA3,
-0xC0,0xF0,0x80,0xAC,0x16,0xD4,0xC0,0xF2,0x74,0xC2,0x9D,0x67,0xE0,0xF0,0x13,0xA2,
-0x60,0xF0,0x8C,0xA4,0xE0,0xF0,0x28,0xA2,0xC0,0xF2,0x95,0xC2,0xB1,0x67,0x00,0x18,
-0x7B,0xBB,0x90,0x67,0x17,0xD2,0x17,0x93,0x48,0x32,0x1C,0xD2,0x69,0xE2,0xAC,0xB3,
-0x44,0x32,0x69,0xE2,0x1A,0xD2,0x19,0x92,0xE0,0xF0,0xA8,0xA2,0x00,0x18,0xC3,0x34,
-0x90,0x67,0x12,0x93,0x0E,0x23,0x18,0x94,0x01,0x74,0x0B,0x61,0x1A,0x92,0x03,0xF4,
-0x00,0x6C,0x18,0xF0,0x00,0x6D,0xC3,0xAA,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x8D,0x93,
-0x4C,0xEE,0x14,0x93,0x05,0x23,0x19,0x94,0x00,0xF2,0x57,0xA4,0x01,0x72,0x15,0x60,
-0x03,0x6A,0x04,0xD2,0x9B,0xB2,0x19,0x93,0x12,0x94,0x05,0xD2,0x14,0x92,0xFA,0x6D,
-0xC4,0xF3,0x1C,0x6E,0x06,0xD2,0x00,0xF2,0x57,0xA3,0x64,0xF4,0x18,0x6F,0x08,0xD4,
-0x04,0x6C,0x20,0x18,0x1B,0x32,0x07,0xD2,0x18,0x11,0x00,0x1C,0xDD,0x31,0x00,0x65,
-0x9D,0x67,0x40,0x4C,0xB1,0x67,0x00,0x18,0x3B,0x94,0x1B,0xD2,0x10,0x92,0x8E,0xB6,
-0x46,0x32,0x01,0x4A,0xCC,0xEA,0x10,0xD2,0x19,0x92,0xC0,0xF2,0xEE,0xAA,0x07,0x2F,
-0x12,0x93,0x01,0x73,0x04,0x61,0x00,0x1C,0xE5,0x31,0x1B,0x94,0xFE,0x10,0x10,0x95,
-0x08,0x25,0x14,0x94,0x06,0x24,0x9B,0xED,0x01,0x2C,0xE5,0xE8,0x10,0xEA,0x00,0x65,
-0x01,0x10,0x00,0x6A,0x14,0x93,0xFF,0xF7,0x1F,0x6C,0x4B,0xE3,0x13,0x93,0x8C,0xEA,
-0x65,0xE2,0x14,0x92,0x23,0xEA,0x01,0x60,0x47,0xE1,0x12,0x93,0x01,0x73,0x18,0x61,
-0x19,0x92,0xEC,0xEC,0xA0,0xF2,0x74,0x9A,0x14,0xD4,0xCC,0xEB,0x73,0xE5,0xA3,0xEB,
-0x44,0x67,0x02,0x61,0x75,0xB2,0x49,0xE4,0x14,0x94,0x9A,0xEA,0x01,0x2C,0xE5,0xE8,
-0x12,0xE9,0x41,0x41,0x00,0x65,0x98,0xEA,0x12,0xEA,0x65,0xE2,0xA7,0xE1,0xCC,0xE9,
-0x19,0x94,0xFF,0x6B,0x14,0x35,0xE0,0xF0,0x48,0xA4,0x6C,0xED,0x02,0x6C,0x6C,0xEA,
-0x40,0x32,0x4C,0x32,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x9A,0x33,0x4C,0xED,
-0x10,0x92,0x2D,0xE2,0x1D,0xD3,0x08,0x59,0x06,0x60,0x1D,0x94,0x14,0x93,0x71,0xE4,
-0x65,0xE1,0x1D,0xD4,0xF8,0x17,0x1D,0x94,0x43,0xE4,0x00,0x18,0xC4,0x36,0x04,0x30,
-0x41,0xE0,0x19,0x92,0x4E,0x6C,0x13,0xDA,0x00,0x18,0x9A,0x33,0x14,0x95,0x1D,0x95,
-0xFF,0xF7,0x1F,0x6B,0x48,0x6C,0x00,0x18,0x9A,0x33,0x6C,0xED,0x18,0x94,0x14,0x24,
-0x16,0x92,0x15,0x93,0x63,0xEA,0x06,0x60,0x43,0xE3,0xFF,0xF7,0x1F,0x6C,0xA2,0x67,
-0x8C,0xE8,0x0C,0x10,0x15,0x92,0x16,0x93,0x63,0xEA,0x06,0x60,0x57,0xE3,0xFF,0xF7,
-0x1F,0x6C,0x8C,0xED,0x02,0x67,0x02,0x10,0x16,0x95,0x15,0x90,0x00,0x18,0x9A,0x33,
-0x4C,0x6C,0x4A,0x6C,0x00,0x18,0x9A,0x33,0xB0,0x67,0x00,0x6C,0x00,0x18,0x9A,0x33,
-0x07,0x6D,0x12,0x92,0x0D,0x2A,0x18,0x93,0x01,0x73,0x0A,0x61,0x17,0x94,0x44,0xB2,
-0x7D,0x67,0x40,0xF0,0x68,0xA3,0x49,0xE4,0x60,0xC2,0x42,0xB2,0x49,0xE4,0x60,0xC2,
-0x1B,0x94,0x00,0x1C,0xE5,0x31,0x02,0x49,0x00,0x18,0x4E,0x05,0x00,0x65,0x01,0xF0,
-0x00,0x6D,0x00,0x18,0x78,0xBA,0x5E,0x6C,0x12,0x92,0x21,0x2A,0x18,0x93,0x01,0x73,
-0x0D,0x61,0x1A,0x92,0x18,0xF0,0x00,0x6C,0x03,0xF4,0x00,0x6D,0x00,0x18,0x8D,0x93,
-0xC3,0xAA,0x19,0x93,0x20,0x6A,0x00,0xF2,0x55,0xC3,0x11,0x10,0x51,0x59,0x07,0x61,
-0x11,0x95,0xFF,0xF7,0x1F,0x6A,0x91,0x67,0x00,0x18,0x3A,0x96,0x4C,0xEC,0x1A,0x92,
-0x18,0xF0,0x00,0x6C,0x01,0xF4,0x00,0x6D,0x00,0x18,0x8D,0x93,0xC3,0xAA,0x18,0x93,
-0x14,0x2B,0x12,0x94,0x12,0x24,0x51,0x59,0x10,0x61,0x11,0x95,0xFF,0xF7,0x1F,0x68,
-0x91,0x67,0x00,0x18,0x3A,0x96,0x0C,0xEC,0x1A,0x92,0x01,0xF4,0x00,0x6C,0x18,0xF0,
-0x00,0x6D,0xC3,0xAA,0x00,0x18,0x8D,0x93,0x0C,0xEE,0x2B,0x6A,0x7D,0x67,0x58,0xCB,
-0x14,0x94,0x1D,0xB2,0xFD,0x67,0x0A,0xD4,0x80,0x9A,0x00,0x6D,0x04,0x06,0x34,0x4F,
-0xA9,0xE7,0x40,0xA2,0xAD,0xE6,0x01,0x4D,0x08,0x5D,0x40,0xC3,0xF9,0x61,0x0A,0x95,
-0x0B,0x96,0x00,0x18,0x40,0x1E,0x0C,0x97,0x17,0x92,0x0F,0x22,0x1C,0x93,0x13,0xB2,
-0x49,0xE3,0x00,0x6B,0xFF,0xF7,0x7C,0xDA,0x1C,0x94,0x11,0xB2,0x49,0xE4,0xFF,0xF7,
-0x7C,0xDA,0x10,0xB2,0x49,0xE4,0xFF,0xF7,0x7C,0xDA,0x20,0x97,0x1F,0x91,0x1E,0x90,
-0x01,0x6A,0x00,0xEF,0x11,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x70,0x45,0x11,0x80,
-0xFC,0xA5,0x10,0x80,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x08,0x48,0x06,0x11,0x80,
-0x3C,0x06,0x11,0x80,0x68,0x52,0x11,0x80,0x18,0x07,0x11,0x80,0xE8,0x06,0x11,0x80,
-0xB8,0x06,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,0xFF,0xF7,0x1F,0x6A,
-0x8C,0xEA,0x04,0xD2,0x04,0x93,0x01,0x69,0x44,0xE9,0x69,0xE2,0x4C,0x32,0x6B,0xE2,
-0x4C,0x32,0x6B,0xE2,0x20,0xB3,0x48,0x32,0x0D,0xD5,0x69,0xE2,0x05,0xD2,0x00,0x68,
-0x20,0x18,0xE4,0x06,0x90,0x67,0x01,0x48,0xFF,0x6B,0x6C,0xE8,0x45,0xE1,0x04,0x58,
-0x6C,0xE9,0xF6,0x61,0x05,0x94,0x44,0x41,0xA0,0xF0,0x88,0xAC,0x98,0xEA,0x17,0xB2,
-0x06,0xD4,0x60,0xF1,0x42,0xA2,0x6C,0xEA,0x02,0x5A,0x12,0xE9,0x00,0x65,0x06,0x61,
-0x40,0xF1,0x00,0x59,0x06,0x60,0xFF,0x69,0x41,0x49,0x03,0x10,0xEE,0x59,0x01,0x60,
-0xEE,0x69,0x00,0x1C,0xDD,0x31,0x00,0x65,0x05,0x93,0x02,0x67,0x26,0x32,0xA0,0xF0,
-0x48,0xCB,0x04,0x94,0x00,0x18,0x2A,0xFF,0x0D,0x95,0x9D,0x67,0x4C,0xAC,0x05,0x94,
-0xA0,0xF0,0x48,0xCC,0x00,0x1C,0xE5,0x31,0x90,0x67,0x0A,0x97,0x09,0x91,0x08,0x90,
-0x00,0xEF,0x06,0x63,0x48,0x60,0x11,0x80,0x48,0x5C,0x11,0x80,0xF8,0x63,0x0E,0x62,
-0x0D,0xD1,0x0C,0xD0,0x5D,0x67,0x03,0x46,0x10,0xD4,0x26,0x67,0x13,0xD7,0x06,0x04,
-0x40,0xF0,0xA4,0xCA,0x06,0x6E,0x00,0x18,0x2E,0x2E,0xB0,0x67,0x69,0xA1,0x9D,0x67,
-0x09,0xD3,0x40,0xF0,0x64,0xAC,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,
-0x6B,0xE2,0x4D,0xB3,0x48,0x32,0x69,0xE2,0x0A,0xD2,0x20,0xF0,0x58,0xA2,0x0D,0x72,
-0x3D,0x60,0x0E,0x52,0x03,0x60,0x06,0x72,0x04,0x60,0x7F,0x10,0x1B,0x72,0x36,0x60,
-0x7C,0x10,0x13,0x93,0x01,0x6A,0x00,0x6D,0x40,0xC3,0x80,0xA9,0xFF,0xF7,0x1F,0x6A,
-0x00,0x18,0xC5,0x4A,0x4C,0xEC,0x0A,0x94,0x00,0x18,0xFD,0x1D,0x28,0x4C,0x09,0x93,
-0x9D,0x67,0x40,0xF0,0x44,0xAC,0x01,0x73,0x14,0x60,0xFF,0xF7,0x1F,0x6C,0x20,0x18,
-0x7C,0x2F,0x4C,0xEC,0x62,0x67,0x0A,0x92,0xE0,0xF0,0x9F,0xA2,0xFF,0x6A,0x4C,0xEC,
-0x20,0x6A,0x4C,0xEC,0x01,0x2C,0x64,0x67,0x01,0x73,0x7D,0x67,0x40,0xF0,0x44,0xAB,
-0x06,0x60,0xFF,0xF7,0x1F,0x6C,0x00,0x18,0xAD,0xE1,0x4C,0xEC,0x52,0x10,0xFF,0xF7,
-0x1F,0x6C,0x4C,0xEC,0x80,0x18,0x25,0x33,0x06,0x05,0x4B,0x10,0x00,0x6C,0x40,0x6B,
-0x1F,0x6A,0x66,0xC0,0x00,0xF0,0x47,0xC8,0x8C,0xC1,0x6A,0xC0,0x27,0xB3,0x00,0xF0,
-0x4B,0xC8,0x10,0x6A,0x90,0xC1,0x8F,0xC0,0x4E,0xC0,0x50,0xAB,0xBD,0x67,0xDD,0x67,
-0x50,0xC0,0x50,0xAB,0xE0,0x6B,0x44,0x4D,0x42,0x32,0x54,0xC1,0x20,0xB2,0x92,0xC0,
-0x20,0x4E,0x41,0xA2,0x91,0x67,0x01,0x6F,0x48,0x32,0x6C,0xEA,0x56,0x32,0xC0,0xF3,
-0x00,0x6B,0x6D,0xEA,0x00,0xF0,0x53,0xC8,0x13,0x93,0x01,0x6A,0x00,0x18,0x37,0x40,
-0x40,0xC3,0x02,0x67,0x16,0x22,0x5D,0x67,0x40,0xF0,0x84,0xAA,0xFF,0xF7,0x1F,0x6B,
-0x00,0x18,0xAE,0x5D,0x6C,0xEC,0x0A,0x94,0x0A,0x96,0x00,0x6F,0x60,0xF2,0xBC,0xAC,
-0x7F,0x4E,0x04,0xD2,0xFF,0xF7,0x1F,0x6A,0x90,0x67,0x4C,0xED,0x00,0x18,0x6F,0x4E,
-0x6E,0x4E,0x10,0x93,0x00,0x6C,0x80,0xC3,0x07,0x10,0x10,0x93,0x0C,0x6A,0x40,0xC3,
-0x03,0x10,0x10,0x94,0x00,0x6A,0x40,0xC4,0x0E,0x97,0x0D,0x91,0x0C,0x90,0x00,0xEF,
-0x08,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x48,0x5C,0x11,0x80,0xC0,0x5B,0x11,0x80,
-0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x4C,0xB2,0x60,0xF1,0x42,0xA2,0x3C,0x22,
-0x00,0x6C,0x84,0x32,0x89,0xE2,0x4C,0x32,0x8B,0xE2,0x4C,0x32,0x48,0xB3,0x8B,0xE2,
-0x48,0x32,0x79,0xE2,0x47,0xB2,0xFF,0x6D,0x20,0xF1,0x4C,0xA2,0x28,0x22,0x46,0xB2,
-0x40,0xA2,0xAC,0xEA,0x24,0x22,0x20,0xF0,0x78,0xA6,0xAC,0xEB,0x20,0x23,0x40,0xF2,
-0x41,0xA6,0xAC,0xEA,0x01,0x72,0x1B,0x61,0x0F,0x73,0x19,0x60,0x14,0x73,0x17,0x60,
-0x3E,0xB3,0xFF,0xF7,0x1F,0x6E,0x40,0xAB,0x01,0x4A,0x40,0xCB,0xCC,0xEA,0xE0,0xF3,
-0x08,0x5A,0x12,0x61,0x00,0x6A,0x40,0xCB,0x39,0xB2,0x02,0x6C,0xA0,0xAA,0x04,0xF0,
-0x0F,0x6A,0x4D,0xED,0xCC,0xED,0x00,0x18,0x2C,0x2B,0x00,0x6E,0x05,0x10,0x01,0x4C,
-0xFF,0x6A,0x4C,0xEC,0x0A,0x5C,0xC5,0x61,0x2C,0xB5,0x01,0x68,0xFF,0x6E,0x40,0xF1,
-0x5E,0xA5,0x0C,0xEA,0x4A,0x22,0x2F,0xB2,0x00,0x6F,0xFF,0xF7,0x1F,0x6C,0x60,0xAA,
-0x02,0xF0,0x00,0x6A,0x6C,0xEA,0x25,0x2A,0x60,0xF1,0x42,0xA5,0xCC,0xEA,0x05,0x2A,
-0x01,0x10,0x00,0x6F,0x28,0xB2,0xE0,0xCA,0x2E,0x10,0x06,0x67,0x20,0xB1,0x27,0xB6,
-0x67,0x67,0xA4,0x67,0x64,0x34,0x69,0xE4,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,
-0x48,0x32,0x29,0xE2,0xE0,0xF0,0x4B,0xA2,0x0C,0xEA,0x01,0x72,0x05,0x61,0xC9,0xE4,
-0x40,0xAA,0xAC,0xEA,0x02,0x5A,0xE5,0x61,0x01,0x4B,0xAC,0xEB,0x0A,0x5B,0xEA,0x61,
-0x12,0x10,0x19,0xB2,0x60,0xAA,0x01,0x4B,0x60,0xCA,0x4F,0xAD,0x8C,0xEB,0x8C,0xEA,
-0x4A,0x32,0x8C,0xEA,0x43,0xEB,0x07,0x61,0x4D,0xAD,0x8C,0xEA,0x4A,0x32,0x8C,0xEA,
-0x43,0xEB,0x01,0x61,0xF0,0x67,0x09,0x27,0x00,0x18,0xB7,0xB5,0x00,0x65,0x00,0x18,
-0x31,0xBE,0x00,0x65,0x0C,0xB2,0x00,0x6B,0x60,0xCA,0x06,0x97,0x05,0x91,0x04,0x90,
-0x00,0x6A,0x00,0xEF,0x04,0x63,0x00,0x00,0x48,0x5C,0x11,0x80,0x48,0x60,0x11,0x80,
-0xDC,0x00,0x11,0x80,0xFE,0x08,0x11,0x80,0x16,0xA1,0x11,0x80,0x04,0x09,0x11,0x80,
-0xE0,0x00,0x00,0xB6,0xC8,0xA0,0x11,0x80,0x10,0x06,0x11,0x80,0xFD,0x63,0x04,0x62,
-0x44,0xAC,0x04,0x72,0x0F,0x61,0x0A,0xB2,0x00,0x6B,0x00,0x18,0x3B,0x2B,0x60,0xC2,
-0x08,0xB6,0x00,0x6B,0x0A,0x6D,0xFF,0x6C,0xC9,0xE3,0x01,0x4B,0x8C,0xEB,0x04,0x5B,
-0xA0,0xC2,0xFA,0x61,0x04,0x97,0x00,0xEF,0x03,0x63,0x00,0x00,0xFE,0x08,0x11,0x80,
-0xB4,0x5B,0x11,0x80,0xFD,0x63,0x04,0x62,0x80,0x18,0x45,0x2B,0x00,0x65,0x0E,0xB2,
-0x00,0x6B,0x0F,0xB4,0x60,0xCA,0x0D,0xB2,0x02,0xF0,0x00,0x6D,0x04,0x97,0x60,0xC2,
-0x0C,0xB2,0x01,0xF0,0x00,0x6B,0xA0,0xF0,0x72,0xCC,0x6C,0xCA,0xAE,0xCA,0x80,0xF0,
-0x43,0xA4,0x05,0x6B,0x6B,0xEB,0x6C,0xEA,0xA0,0xF0,0xB6,0xCC,0x80,0xF0,0x43,0xC4,
-0x00,0xEF,0x03,0x63,0xC8,0xA0,0x11,0x80,0xCA,0xA0,0x11,0x80,0xDC,0x00,0x11,0x80,
-0x48,0x5C,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x44,0xAC,0xC9,0x72,
-0x24,0x61,0x00,0x1C,0xDD,0x31,0x00,0x65,0x15,0xB1,0x04,0xD2,0x60,0xF1,0x54,0xA1,
-0x40,0xF1,0x9E,0xA1,0x04,0x99,0x05,0xD2,0x80,0x6A,0x44,0xD9,0x55,0x6A,0x60,0xF1,
-0x54,0xC1,0x00,0x18,0xEB,0xA4,0x00,0x65,0x60,0xF1,0x54,0xA1,0x04,0xD9,0x55,0x72,
-0x04,0x60,0x00,0x18,0x31,0xBE,0x00,0x65,0x04,0x10,0x5D,0x67,0x54,0xA2,0x60,0xF1,
-0x54,0xC1,0x00,0x1C,0xE5,0x31,0x04,0x94,0x03,0x10,0x00,0x18,0x2F,0xB9,0x00,0x65,
-0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x00,0x00,0x48,0x5C,0x11,0x80,
-0xFD,0x63,0x04,0x62,0x00,0x18,0x24,0xB4,0x00,0x65,0x04,0x97,0x00,0xEF,0x03,0x63,
-0x0D,0xB2,0xFF,0xF7,0x1F,0x6B,0xAC,0xEB,0x43,0xA2,0x01,0x6D,0xAC,0xEA,0x10,0x22,
-0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x07,0xB3,0x48,0x32,
-0x69,0xE2,0x60,0xF2,0x4D,0xA2,0xAA,0xEA,0x03,0x61,0x45,0x67,0x20,0xE8,0xA0,0xC4,
-0x20,0xE8,0x00,0x6A,0x00,0x46,0x11,0x80,0x48,0x60,0x11,0x80,0xF8,0x63,0x0E,0x62,
-0x0D,0xD1,0x0C,0xD0,0xC4,0x67,0xFF,0xF7,0x1F,0x6D,0xAC,0xEE,0xFF,0x76,0x68,0x60,
-0xC4,0x32,0xC9,0xE2,0x4C,0x32,0xCB,0xE2,0x35,0xB3,0x4C,0x32,0xCB,0xE2,0x48,0x32,
-0x65,0xE2,0xC0,0xF0,0x74,0xA9,0x40,0x6F,0xAC,0xEB,0x6C,0xEF,0x25,0x27,0x04,0x6A,
-0x6C,0xEA,0x08,0x22,0xE0,0xF0,0x8D,0x41,0x00,0xF1,0xA7,0x41,0x00,0x18,0x47,0x43,
-0x0A,0xD6,0x0A,0x96,0x7D,0x67,0x01,0x6A,0x58,0xC3,0x86,0x67,0x00,0x6A,0x03,0x6E,
-0xBD,0x67,0x5A,0xC3,0x00,0x68,0x00,0xF2,0x4A,0xC1,0x18,0x4D,0x64,0x6A,0xE6,0x67,
-0x04,0xD2,0x00,0x18,0xA0,0xDD,0x05,0xD0,0x02,0x6C,0x00,0x18,0xE0,0xDC,0xB0,0x67,
-0x6F,0x99,0x4D,0xEB,0x6F,0xD9,0x2D,0x10,0xE0,0xF0,0x4C,0xA1,0xFF,0x6C,0x01,0x72,
-0x1C,0xB2,0x15,0x61,0x43,0xA2,0x01,0x6B,0x6C,0xEA,0x04,0x22,0xC0,0xF2,0x58,0xA1,
-0x8C,0xEA,0x1F,0x2A,0x33,0x6A,0x7D,0x67,0xBD,0x67,0x58,0xC3,0x86,0x67,0x64,0x6A,
-0x18,0x4D,0x02,0x6E,0x04,0xD2,0x00,0x18,0xA0,0xDD,0x05,0xD7,0x12,0x10,0x43,0xA2,
-0x01,0x6B,0x6C,0xEA,0x04,0x22,0xC0,0xF2,0x57,0xA1,0x8C,0xEA,0x0A,0x2A,0x60,0xF2,
-0x4D,0xA1,0x8C,0xEA,0x01,0x72,0x05,0x61,0x9D,0x67,0x20,0x4C,0x80,0x18,0x44,0x34,
-0xA6,0x67,0xC0,0xF0,0x54,0xA9,0x07,0x6B,0x6B,0xEB,0x6C,0xEA,0xC0,0xF0,0x54,0xC9,
-0x0E,0x97,0x0D,0x91,0x0C,0x90,0x00,0xEF,0x08,0x63,0x00,0x00,0x48,0x60,0x11,0x80,
-0x00,0x46,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0xFF,0xF7,0x1F,0x6F,
-0xAC,0xEF,0xE4,0x32,0xE9,0xE2,0x4C,0x32,0xEB,0xE2,0x38,0xB3,0x4C,0x32,0xEB,0xE2,
-0x48,0x32,0x65,0xE2,0xC0,0xF0,0x54,0xA9,0xFF,0xF7,0x1F,0x6B,0xC4,0x67,0x6C,0xEA,
-0x02,0x6B,0x6C,0xEA,0x09,0x2A,0xC4,0xA4,0x01,0x6A,0x87,0x67,0x28,0x6D,0x4C,0xEE,
-0x20,0x18,0x9B,0x27,0x24,0x6F,0x52,0x10,0xF0,0xF0,0x0F,0x41,0xA5,0x46,0x90,0x67,
-0x08,0x6E,0x00,0x18,0x2E,0x2E,0x04,0xD7,0x29,0xB2,0x01,0x6D,0xFF,0x6E,0x60,0xA2,
-0x28,0xB2,0x04,0x97,0x83,0xA2,0xAC,0xEC,0x0E,0x24,0xC0,0xF2,0x56,0xA1,0xCC,0xEA,
-0x03,0x2A,0xC0,0xF2,0xB6,0xC1,0x0C,0x10,0x60,0xF2,0xBC,0xA9,0xFF,0xF7,0x1F,0x6A,
-0x00,0x6C,0x4C,0xED,0x29,0x10,0x20,0xF0,0x58,0xA1,0xCC,0xEA,0x03,0x72,0x1F,0x61,
-0x00,0xF1,0x46,0x81,0x00,0x52,0x17,0x60,0x7E,0x32,0x15,0x22,0xC0,0xF0,0x54,0xA9,
-0x04,0x68,0x03,0x6E,0x0D,0xEA,0x87,0x67,0xC0,0xF0,0x54,0xC9,0x00,0xF1,0xAF,0xC1,
-0x00,0x18,0x2D,0xE2,0xE6,0x67,0x7F,0x6C,0x00,0x18,0xE0,0xDC,0xB0,0x67,0x6F,0x99,
-0x4D,0xEB,0x6F,0xD9,0x13,0x10,0x80,0x18,0x53,0x34,0x87,0x67,0x0F,0x10,0x60,0xF2,
-0xBC,0xA9,0xFF,0xF7,0x1F,0x6B,0x6C,0xED,0x00,0x18,0xF8,0x4E,0xD0,0x67,0xC0,0xF0,
-0x54,0xA9,0x03,0x6B,0x6B,0xEB,0x6C,0xEA,0xC0,0xF0,0x54,0xC9,0x08,0x97,0x07,0x91,
-0x06,0x90,0x01,0x6A,0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0xC0,0x5B,0x11,0x80,
-0x00,0x46,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,0xFF,0xF7,0x1F,0x69,
-0xAC,0xE9,0x24,0x32,0x29,0xE2,0x4C,0x32,0x2B,0xE2,0x38,0xB3,0x4C,0x32,0x2B,0xE2,
-0x48,0x32,0x0C,0xD4,0x61,0xE2,0xC0,0xF0,0x54,0xA8,0x66,0xA4,0xFF,0xF7,0x1F,0x6C,
-0x8C,0xEA,0x04,0x6E,0xCC,0xEA,0x06,0x22,0x00,0xF1,0x4F,0xA0,0xFF,0x6D,0xAC,0xEA,
-0x6E,0xEA,0x0D,0x22,0x0C,0x92,0xFF,0x6C,0x7F,0x6D,0xE4,0xA2,0x24,0x6A,0x04,0xD2,
-0x8C,0xEF,0x01,0x6A,0x91,0x67,0x00,0x18,0xEF,0xE1,0x4C,0xEF,0x47,0x10,0x02,0x5B,
-0x0B,0x60,0x0C,0x95,0x6C,0x34,0x11,0xE4,0xE0,0xF0,0x1F,0x4C,0x08,0x4D,0x08,0x6E,
-0x00,0x18,0x2E,0x2E,0x06,0xD3,0x06,0x93,0x21,0xB2,0x01,0x6D,0x83,0xA2,0xAC,0xEC,
-0x15,0x24,0xC0,0xF2,0x57,0xA0,0xFF,0x6C,0x8C,0xEA,0x07,0x2A,0x80,0x18,0x53,0x34,
-0x91,0x67,0x01,0x6D,0xC0,0xF2,0xB7,0xC0,0x29,0x10,0x1A,0xB2,0x60,0xF2,0xBC,0xA8,
-0x00,0x6C,0xF0,0xA2,0x0C,0x92,0x08,0x4A,0x04,0xD2,0x11,0x10,0x20,0xF0,0x58,0xA0,
-0xFF,0x6D,0xAC,0xEA,0x03,0x72,0x04,0x61,0x00,0x18,0xA5,0xFF,0x91,0x67,0x16,0x10,
-0x10,0xB2,0x60,0xF2,0xBC,0xA8,0xF0,0xA2,0x0C,0x92,0x08,0x4A,0x04,0xD2,0xFF,0xF7,
-0x1F,0x6A,0x4C,0xED,0xFF,0x6A,0xC3,0x67,0x00,0x18,0x8A,0x41,0x4C,0xEF,0xC0,0xF0,
-0x54,0xA8,0x05,0x6B,0x6B,0xEB,0x6C,0xEA,0xC0,0xF0,0x54,0xC8,0x0A,0x97,0x09,0x91,
-0x08,0x90,0x00,0xEF,0x06,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x00,0x46,0x11,0x80,
-0xC0,0x5B,0x11,0x80,0xEF,0x63,0x20,0x62,0x1F,0xD1,0x1E,0xD0,0x64,0xAC,0xC4,0x67,
-0x24,0x73,0x22,0x61,0x94,0xB2,0x60,0xF1,0x50,0xA2,0x1E,0x22,0x7D,0x67,0x01,0xF4,
-0x03,0x6A,0x40,0xF0,0x58,0xCB,0x00,0x1C,0xDD,0x31,0x00,0x65,0x00,0x18,0xFE,0x4F,
-0x02,0x67,0x00,0x6D,0x9D,0x67,0xC5,0x67,0x80,0x18,0x49,0x2B,0x58,0x4C,0x80,0x18,
-0x4E,0x2F,0x03,0x6C,0x00,0x18,0xC4,0x53,0x00,0x6C,0x20,0x18,0x10,0x2F,0x00,0x65,
-0x00,0x1C,0xE5,0x31,0x90,0x67,0x01,0x11,0xFF,0xF7,0x1F,0x69,0x51,0x67,0x6C,0xEA,
-0x9C,0x72,0x1A,0x61,0x00,0x9E,0xFF,0x6F,0x44,0xA0,0x46,0x32,0x2C,0xEA,0x18,0x72,
-0x13,0x61,0xBA,0xA0,0x99,0xA0,0xDD,0x67,0xEC,0xED,0xEC,0xEC,0x00,0x18,0x1A,0xDF,
-0x5A,0x4E,0x06,0x2A,0xBD,0x67,0x40,0xF0,0x9A,0xAD,0x20,0x18,0x62,0x23,0x2C,0xEC,
-0x20,0x18,0xCF,0x06,0x90,0x67,0xD8,0x10,0xFF,0xF7,0x1F,0x6C,0x44,0x67,0x6C,0xEA,
-0x93,0x72,0x29,0x61,0x00,0x9E,0x44,0xA0,0x46,0x32,0x11,0x72,0x07,0x60,0x7F,0x72,
-0x22,0x61,0x45,0xA0,0xFF,0x6B,0x6C,0xEA,0x17,0x72,0x1D,0x61,0x6B,0xA8,0x8C,0xEB,
-0xFF,0x73,0x19,0x60,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,
-0x67,0xB3,0x48,0x32,0x69,0xE2,0xBF,0x9A,0x82,0x67,0x00,0x18,0xB2,0x69,0x1C,0xD6,
-0x01,0x72,0x64,0xA0,0x1C,0x96,0x03,0x61,0x01,0x6A,0x6D,0xEA,0x03,0x10,0x02,0x6A,
-0x4B,0xEA,0x6C,0xEA,0x44,0xC0,0x44,0xAE,0xFF,0xF7,0x1F,0x6C,0x93,0x72,0xA0,0xF0,
-0x09,0x61,0x00,0x9E,0xFF,0x6A,0xA2,0x67,0x64,0xA0,0x6C,0xED,0xA6,0x35,0x8C,0xED,
-0x18,0xD5,0xA5,0xA0,0x4C,0xED,0x19,0xD5,0x4B,0xA8,0x18,0x95,0x8C,0xEA,0x7F,0x75,
-0x1A,0xD2,0x03,0x61,0x19,0x92,0x04,0x72,0x04,0x60,0x18,0x95,0x28,0x75,0x80,0xF0,
-0x11,0x61,0xFF,0x69,0xC1,0x9E,0x51,0x67,0x6C,0xEA,0x46,0x32,0x2C,0xEA,0xA6,0x67,
-0x9D,0x67,0x18,0xD2,0x5C,0x4C,0xDA,0xC0,0x2C,0xED,0x00,0x18,0x3B,0x94,0x1C,0xD6,
-0x18,0x92,0x1C,0x96,0x7F,0x72,0x58,0x67,0x1B,0xD2,0x04,0x22,0xE1,0xF4,0x03,0x6F,
-0x00,0x6B,0x04,0x10,0x65,0xA0,0x01,0xF4,0x16,0x6F,0x2C,0xEB,0x10,0x6A,0x04,0xD2,
-0x40,0xB2,0x18,0x95,0x08,0xD3,0x05,0xD2,0x17,0x92,0x07,0xD5,0x01,0x6B,0x06,0xD2,
-0x59,0xA0,0x0A,0xD6,0x04,0x6C,0x09,0xD2,0x44,0xA0,0xFA,0x6D,0x6C,0xEA,0x0B,0xD2,
-0x4B,0xA8,0x0C,0xD2,0x38,0xB2,0x49,0xE6,0x44,0xA2,0xA2,0xF4,0x10,0x6E,0x6C,0xEA,
-0x0D,0xD2,0x44,0xA0,0x0E,0xD2,0x45,0xA0,0x0F,0xD2,0x46,0xA0,0x10,0xD2,0x47,0xA0,
-0x11,0xD2,0x48,0xA0,0x12,0xD2,0x49,0xA0,0x13,0xD2,0x4A,0xA0,0x14,0xD2,0x4B,0xA0,
-0x20,0x18,0x1B,0x32,0x15,0xD2,0x1A,0x92,0xFF,0x72,0x3E,0x60,0x1A,0x93,0x44,0x32,
-0xFF,0x6D,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x24,0xB3,0x48,0x32,
-0x65,0xE2,0xE0,0xF0,0x4B,0xA1,0xAC,0xEA,0x01,0x72,0x2E,0x61,0x20,0xF0,0x58,0xA1,
-0xFF,0x6B,0x6C,0xEA,0x0B,0x72,0x13,0x61,0x1C,0xB2,0xB0,0x67,0x00,0x18,0xE0,0x1D,
-0x80,0x9A,0x00,0xF2,0x54,0xA1,0xFF,0x6D,0xAC,0xEA,0x01,0x72,0x26,0x61,0x8D,0x99,
-0x00,0x18,0x1A,0x1E,0x00,0x6D,0x00,0x6A,0x00,0xF2,0x54,0xC1,0x1E,0x10,0x1A,0x94,
-0x00,0x18,0x5E,0xDE,0xB0,0x67,0x1B,0x92,0x08,0x2A,0x19,0x93,0x04,0x73,0x05,0x61,
-0x1A,0x95,0x80,0x18,0xD1,0x34,0x90,0x67,0x07,0x10,0x18,0x95,0x28,0x75,0x04,0x61,
-0x1A,0x95,0x80,0x18,0x91,0x34,0x90,0x67,0x08,0xB2,0xB0,0x67,0x00,0x18,0xE0,0x1D,
-0x80,0x9A,0x03,0x10,0x20,0x18,0xFA,0x24,0x86,0x67,0x20,0x97,0x1F,0x91,0x1E,0x90,
-0x00,0xEF,0x11,0x63,0x48,0x5C,0x11,0x80,0x64,0x52,0x11,0x80,0x48,0x60,0x11,0x80,
-0xFC,0xA5,0x10,0x80,0x04,0x46,0x11,0x80,0xFF,0x63,0x00,0xD0,0x0F,0xB0,0xFF,0xF7,
-0x1F,0x6A,0x4C,0xEC,0x00,0x6B,0xE2,0x67,0xFF,0x6E,0x64,0x32,0x69,0xE2,0x48,0x32,
-0x6B,0xE2,0x48,0x32,0x15,0xE2,0x43,0xAD,0xEC,0xEA,0x8E,0xEA,0x05,0x2A,0x42,0x9D,
-0x08,0x72,0x02,0x61,0x00,0x6A,0x05,0x10,0x01,0x4B,0xCC,0xEB,0x03,0x5B,0xED,0x61,
-0x01,0x6A,0x00,0x90,0x20,0xE8,0x01,0x63,0x98,0x5F,0x11,0x80,0xFD,0x63,0x04,0x62,
-0x16,0xB2,0x00,0x6B,0x60,0xF1,0x43,0xA2,0x01,0x72,0x14,0x61,0x14,0xB6,0x83,0x67,
-0xFF,0x6D,0x84,0x32,0x89,0xE2,0x4C,0x32,0x8B,0xE2,0x4C,0x32,0x8B,0xE2,0x48,0x32,
-0xC9,0xE2,0xE0,0xF0,0x4B,0xA2,0xAC,0xEA,0x01,0x72,0x0D,0x60,0x01,0x4C,0xAC,0xEC,
-0x0A,0x5C,0xEF,0x61,0x09,0xB2,0x60,0xF1,0x43,0xA2,0x02,0x5A,0x02,0x60,0x43,0x67,
-0x07,0x23,0x0C,0x6A,0x05,0x10,0x80,0x18,0xAE,0x35,0x00,0x65,0x62,0x67,0xF2,0x17,
-0x04,0x97,0x00,0xEF,0x03,0x63,0x00,0x00,0x48,0x5C,0x11,0x80,0x48,0x60,0x11,0x80,
-0xF9,0x63,0x0C,0x62,0x0B,0xD1,0x0A,0xD0,0x00,0x6A,0x0F,0xD5,0x06,0xD2,0x40,0xAC,
-0x24,0x67,0x01,0xF0,0x0B,0x72,0x0C,0x61,0xBD,0x67,0x80,0x18,0xD5,0x2B,0x10,0x4D,
-0x80,0xA9,0xFF,0xF7,0x1F,0x6B,0xA2,0x67,0x00,0x18,0xC5,0x4A,0x6C,0xEC,0xAC,0x10,
-0x00,0xF4,0x19,0x72,0x2C,0x61,0x49,0xA4,0x03,0x5A,0x02,0x61,0x01,0x6A,0x49,0xC4,
-0x7D,0x67,0x58,0xA3,0x00,0x1C,0xDD,0x31,0x52,0xC3,0xBD,0x67,0x91,0x67,0x12,0x4D,
-0x00,0x18,0xB7,0x45,0x07,0xD2,0x02,0x67,0x0C,0x2A,0xA9,0xA1,0xFF,0x6B,0x20,0x6A,
-0x6C,0xED,0xB8,0x35,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0xAA,0x6C,0x00,0x18,0xB6,0x33,
-0x4C,0xED,0x00,0x1C,0xE5,0x31,0x07,0x94,0x7D,0x67,0x52,0xA3,0xFF,0x6B,0x6C,0xEA,
-0x61,0x2A,0x80,0xA9,0xFF,0xF7,0x1F,0x6A,0xB0,0x67,0x4C,0xEC,0x58,0x10,0x00,0xF4,
-0x05,0x72,0x06,0x61,0x4B,0xA4,0x03,0x5A,0x79,0x61,0x01,0x6A,0x4B,0xC4,0x76,0x10,
-0x41,0xF4,0x12,0x72,0x10,0x61,0x00,0x18,0xE5,0x41,0x00,0x65,0x06,0x94,0x00,0x18,
-0x78,0x36,0x02,0x67,0x80,0xA9,0x06,0x96,0xFF,0xF7,0x1F,0x6A,0x4C,0xEC,0x00,0x18,
-0x33,0x4B,0xB0,0x67,0x3F,0x10,0x01,0xF0,0x04,0x72,0x3F,0x61,0x04,0xA4,0xFF,0xF7,
-0x1F,0x6A,0xFF,0xF7,0x1F,0x6B,0x00,0x30,0x4C,0xE8,0x43,0xA4,0xBD,0x67,0x14,0x4D,
-0x4D,0xE8,0x6C,0xE8,0x00,0x18,0x2A,0xDF,0x90,0x67,0x04,0x22,0x5D,0x67,0x0A,0xCA,
-0x02,0x6A,0x23,0x10,0x7D,0x67,0xAA,0xAB,0xFF,0xF7,0x1F,0x6B,0xAC,0xEB,0x64,0x32,
-0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x27,0xB3,0x48,0x32,0x69,0xE2,
-0x20,0xF0,0x78,0xA2,0xFF,0x6A,0x4C,0xEB,0x12,0x73,0x0A,0x60,0x19,0x73,0x08,0x60,
-0x80,0xA9,0xFF,0xF7,0x1F,0x6A,0x0C,0x6D,0x00,0x18,0xC5,0x4A,0x4C,0xEC,0x2E,0x10,
-0xFF,0xF7,0x1F,0x6C,0x00,0x18,0x0C,0x48,0xAC,0xEC,0x80,0xA9,0xA2,0x67,0x00,0x18,
-0xC5,0x4A,0x00,0x65,0x01,0x6B,0x06,0xD3,0x21,0x10,0x21,0xF4,0x06,0x72,0x1E,0x61,
-0x80,0x18,0xBF,0x35,0x00,0x65,0x10,0x2A,0x14,0xB0,0x7D,0x67,0x78,0xA3,0x60,0xF1,
-0x43,0xA0,0x91,0x67,0x60,0xF1,0x63,0xC0,0x00,0x18,0xFC,0x52,0x08,0xD2,0x7D,0x67,
-0x20,0xF0,0x60,0xA3,0x60,0xF1,0x63,0xC0,0x80,0xA9,0x06,0x96,0xFF,0xF7,0x1F,0x6B,
-0x6C,0xEC,0x00,0x18,0x33,0x4B,0xA2,0x67,0x01,0x6A,0x06,0xD2,0x06,0x92,0x03,0x22,
-0x0F,0x93,0x66,0x6A,0x40,0xC3,0x0C,0x97,0x0B,0x91,0x0A,0x90,0x01,0x6A,0x00,0xEF,
-0x07,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x48,0x5C,0x11,0x80,0xF5,0x63,0x14,0x62,
-0x13,0xD1,0x12,0xD0,0x00,0x6D,0x17,0xF7,0x0C,0x6E,0x00,0x18,0x01,0xA0,0x33,0x6C,
-0x61,0xB4,0x20,0x18,0xD6,0x32,0x00,0x69,0x20,0x18,0x5B,0x30,0x00,0x65,0x00,0x18,
-0xA6,0x5C,0x00,0x65,0x00,0x18,0xC8,0x8A,0x00,0x65,0x00,0x18,0xA3,0x9B,0x00,0x65,
-0x5A,0xB4,0x00,0x18,0x44,0x81,0x00,0x65,0x59,0xB0,0x00,0x18,0x4C,0x81,0x90,0x67,
-0x87,0x40,0x00,0x18,0x4C,0x81,0x01,0x4C,0x56,0xB4,0x57,0xB5,0x20,0xC0,0x00,0x18,
-0x2E,0x2E,0x30,0x6E,0x55,0xB5,0x88,0x40,0xD8,0x4C,0x00,0x18,0x2E,0x2E,0x30,0x6E,
-0x53,0xB5,0x87,0x40,0x11,0x4C,0x00,0x18,0x2E,0x2E,0x18,0x6E,0x51,0xB0,0x03,0x6B,
-0x40,0x98,0x42,0x32,0x4A,0x32,0x6C,0xEA,0x6A,0xEA,0x05,0x60,0x4E,0xB2,0x20,0xF1,
-0x2C,0xC2,0x20,0xF1,0x36,0xC2,0x00,0x18,0x04,0xF6,0x00,0x65,0x00,0x18,0x48,0x3C,
-0x00,0x65,0x00,0x18,0x71,0x32,0x00,0x65,0x00,0x18,0xE2,0x24,0x00,0x65,0x00,0x18,
-0x9A,0x7E,0x00,0x65,0x00,0x18,0xB5,0xC8,0x00,0x65,0x45,0xB3,0x43,0xB2,0x60,0xDA,
-0x00,0x18,0x0B,0x2B,0x00,0x65,0x40,0x98,0x0F,0x6B,0x46,0x32,0x6C,0xEA,0x03,0x72,
-0x05,0x61,0x9D,0x67,0x40,0x4C,0x00,0x18,0x1B,0x28,0x00,0x6D,0x00,0x18,0xE9,0x2F,
-0x00,0x65,0x80,0x18,0x68,0x2A,0x00,0x65,0x20,0x18,0xA2,0x39,0x00,0x65,0x80,0x18,
-0x1C,0x2A,0x00,0x65,0x00,0x1C,0xAD,0x31,0x00,0x65,0x29,0xF6,0x00,0x6D,0x00,0x18,
-0x17,0x2D,0x01,0x6C,0x09,0x6A,0x04,0xD2,0x32,0xB2,0x2F,0xB3,0x01,0x6C,0x05,0xD2,
-0x68,0xF1,0x1A,0x6A,0x06,0xD2,0x30,0xF0,0x0E,0x6A,0x07,0xD2,0x2E,0xB2,0xFA,0x6D,
-0x09,0xF6,0x17,0x6E,0x40,0x9A,0xA1,0xF3,0x16,0x6F,0x08,0xD2,0x40,0xF0,0x41,0xA3,
-0x09,0xD2,0x40,0xF0,0x40,0xA3,0x0A,0xD2,0x20,0xF0,0x5F,0xA3,0x0B,0xD2,0x20,0xF0,
-0x5E,0xA3,0x0C,0xD2,0x20,0xF0,0x5D,0xA3,0x0D,0xD2,0x20,0xF0,0x5C,0xA3,0x20,0x18,
-0x1B,0x32,0x0E,0xD2,0x21,0xB2,0x22,0xB3,0x40,0x9A,0x6E,0xEA,0x19,0x2A,0x21,0xB1,
-0x21,0xB3,0x40,0x99,0x6E,0xEA,0x14,0x2A,0x20,0xB0,0x21,0xB2,0x21,0xB3,0x80,0x98,
-0x8C,0xEA,0x6E,0xEA,0x0B,0x2A,0x20,0xB3,0x00,0xF6,0x82,0x32,0x00,0x6D,0x3F,0xF4,
-0x00,0x6C,0x00,0x18,0xFA,0x8B,0x40,0xC3,0x00,0x6A,0x40,0xD8,0x00,0x6A,0x40,0xD9,
-0x13,0xB3,0x12,0xB2,0x20,0x18,0x3D,0x36,0x60,0xDA,0x14,0x97,0x13,0x91,0x12,0x90,
-0x00,0xEF,0x0B,0x63,0x84,0xC8,0x00,0x80,0x03,0x00,0x00,0xC4,0x98,0x24,0x11,0x80,
-0x38,0x24,0x11,0x80,0xF8,0xDA,0x10,0x80,0x40,0xDB,0x10,0x80,0x28,0xDB,0x10,0x80,
-0x6C,0x1D,0x11,0x80,0xDC,0x00,0x11,0x80,0x5C,0xA1,0x00,0xB0,0x00,0x00,0x01,0x00,
-0xFC,0xA5,0x10,0x80,0x90,0x1E,0x11,0x80,0x3C,0x91,0x10,0x80,0xEF,0xBE,0x23,0x87,
-0x44,0x91,0x10,0x80,0x32,0x97,0x79,0x23,0x40,0x91,0x10,0x80,0xFF,0xFF,0xFF,0x00,
-0xEE,0xFF,0xC0,0x00,0xD0,0x00,0x11,0x80,0x2E,0x5A,0x2C,0x4B,0xCF,0x9D,0xF2,0xCB,
-0x74,0x9C,0x13,0xCE,0x57,0xF4,0x4C,0x54,0x48,0xA9,0xD3,0x53,0xC5,0x19,0x73,0x6F,
-0xF7,0xEB,0x68,0x53,0xCC,0xAE,0x50,0xF1,0x57,0x02,0xE2,0x66,0xA3,0x5C,0xBC,0xD3,
-0xB7,0xA6,0x2F,0xC9,0xAE,0xDC,0x77,0x9E,0x07,0x91,0x5F,0x86,0x91,0x8D,0xDC,0x27,
-0x00,0x5D,0xF1,0xD6,0xCF,0x0C,0x14,0x2B,0x62,0x5E,0xD2,0xEF,0xF4,0xA5,0x18,0xFF,
-0x15,0x20,0x70,0x09,0x98,0x44,0x21,0xA6,0x58,0x6F,0x9F,0xC3,0xFE,0x7E,0x43,0x29,
-0xD2,0x80,0x9E,0xA5,0x11,0x25,0xF8,0xED,0xB0,0x9D,0x42,0xB8,0x1B,0xC5,0xBD,0x00,
-0x9F,0x79,0xE4,0xB5,0x9D,0xBB,0xAA,0x85,0x7F,0xCA,0x85,0x6F,0xB9,0xF7,0xEA,0x25,
-0x07,0x04,0x05,0x01,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x02,0x04,0x00,0x00,0x00,
-0x01,0x03,0x02,0x04,0x00,0x00,0x00,0x00,0x1B,0x00,0xB7,0x00,0x53,0x01,0x36,0x00,
-0x6F,0x01,0xA7,0x02,0x53,0x00,0x28,0x02,0xFD,0x03,0x25,0x00,0x04,0x0B,0x0F,0x04,
-0x0A,0x0E,0x08,0x0B,0x0F,0x00,0x00,0x00,0x7A,0x41,0x2E,0x80,};
-
-#endif //CONFIG_MP_INCLUDED
-
-#ifndef CONFIG_PHY_SETTING_WITH_ODM
-u32 Rtl8723UPHY_REG_2TArray[Rtl8723UPHY_REG_2TArrayLength] = {
-0x0, };
-
-u32 Rtl8723UPHY_REG_1TArray[Rtl8723UPHY_REG_1TArrayLength] = {
-0x800,0x80040000,
-0x804,0x00000003,
-0x808,0x0000fc00,
-0x80c,0x0000000a,
-0x810,0x10005388,
-0x814,0x020c3d10,
-0x818,0x02200385,
-0x81c,0x00000000,
-0x820,0x01000100,
-0x824,0x00390004,
-0x828,0x00000000,
-0x82c,0x00000000,
-0x830,0x00000000,
-0x834,0x00000000,
-0x838,0x00000000,
-0x83c,0x00000000,
-0x840,0x00010000,
-0x844,0x00000000,
-0x848,0x00000000,
-0x84c,0x00000000,
-0x850,0x00000000,
-0x854,0x00000000,
-0x858,0x569a569a,
-0x85c,0x001b25a4,
-0x860,0x66f60110,
-0x864,0x061f0130,
-0x868,0x00000000,
-0x86c,0x32323200,
-0x870,0x07000760,
-0x874,0x22004000,
-0x878,0x00000808,
-0x87c,0x00000000,
-0x880,0xc0083070,
-0x884,0x000004d5,
-0x888,0x00000000,
-0x88c,0xccc000c0,
-0x890,0x00000800,
-0x894,0xfffffffe,
-0x898,0x40302010,
-0x89c,0x00706050,
-0x900,0x00000000,
-0x904,0x00000023,
-0x908,0x00000000,
-0x90c,0x81121111,
-0xa00,0x00d047c8,
-0xa04,0x80ff000c,
-0xa08,0x8c838300,
-0xa0c,0x2e68120f,
-0xa10,0x9500bb78,
-0xa14,0x11144028,
-0xa18,0x00881117,
-0xa1c,0x89140f00,
-0xa20,0x1a1b0000,
-0xa24,0x090e1317,
-0xa28,0x00000204,
-0xa2c,0x00d30000,
-0xa70,0x101fbf00,
-0xa74,0x00000007,
-0xa78,0x00000900,
-0xc00,0x48071d40,
-0xc04,0x03a05611,
-0xc08,0x000000e4,
-0xc0c,0x6c6c6c6c,
-0xc10,0x08800000,
-0xc14,0x40000100,
-0xc18,0x08800000,
-0xc1c,0x40000100,
-0xc20,0x00000000,
-0xc24,0x00000000,
-0xc28,0x00000000,
-0xc2c,0x00000000,
-0xc30,0x69e9ac44,
-0xc34,0x469652cf,
-0xc38,0x49795994,
-0xc3c,0x0a97971c,
-0xc40,0x1f7c403f,
-0xc44,0x000100b7,
-0xc48,0xec020107,
-0xc4c,0x007f037f,
-0xc50,0x69543420,
-0xc54,0x43bc0094,
-0xc58,0x69543420,
-0xc5c,0x433c0094,
-0xc60,0x00000000,
-0xc64,0x7116848b,
-0xc68,0x47c00bff,
-0xc6c,0x00000036,
-0xc70,0x2c7f000d,
-0xc74,0x018610db,
-0xc78,0x0000001f,
-0xc7c,0x00b91612,
-0xc80,0x40000100,
-0xc84,0x20f60000,
-0xc88,0x40000100,
-0xc8c,0x20200000,
-0xc90,0x00121820,
-0xc94,0x00000000,
-0xc98,0x00121820,
-0xc9c,0x00007f7f,
-0xca0,0x00000000,
-0xca4,0x00000080,
-0xca8,0x00000000,
-0xcac,0x00000000,
-0xcb0,0x00000000,
-0xcb4,0x00000000,
-0xcb8,0x00000000,
-0xcbc,0x28000000,
-0xcc0,0x00000000,
-0xcc4,0x00000000,
-0xcc8,0x00000000,
-0xccc,0x00000000,
-0xcd0,0x00000000,
-0xcd4,0x00000000,
-0xcd8,0x64b22427,
-0xcdc,0x00766932,
-0xce0,0x00222222,
-0xce4,0x00000000,
-0xce8,0x37644302,
-0xcec,0x2f97d40c,
-0xd00,0x00080740,
-0xd04,0x00020401,
-0xd08,0x0000907f,
-0xd0c,0x20010201,
-0xd10,0xa0633333,
-0xd14,0x3333bc43,
-0xd18,0x7a8f5b6b,
-0xd2c,0xcc979975,
-0xd30,0x00000000,
-0xd34,0x80608000,
-0xd38,0x00000000,
-0xd3c,0x00027293,
-0xd40,0x00000000,
-0xd44,0x00000000,
-0xd48,0x00000000,
-0xd4c,0x00000000,
-0xd50,0x6437140a,
-0xd54,0x00000000,
-0xd58,0x00000000,
-0xd5c,0x30032064,
-0xd60,0x4653de68,
-0xd64,0x04518a3c,
-0xd68,0x00002101,
-0xd6c,0x2a201c16,
-0xd70,0x1812362e,
-0xd74,0x322c2220,
-0xd78,0x000e3c24,
-0xe00,0x2a2a2a2a,
-0xe04,0x2a2a2a2a,
-0xe08,0x03902a2a,
-0xe10,0x2a2a2a2a,
-0xe14,0x2a2a2a2a,
-0xe18,0x2a2a2a2a,
-0xe1c,0x2a2a2a2a,
-0xe28,0x00000000,
-0xe30,0x1000dc1f,
-0xe34,0x10008c1f,
-0xe38,0x02140102,
-0xe3c,0x681604c2,
-0xe40,0x01007c00,
-0xe44,0x01004800,
-0xe48,0xfb000000,
-0xe4c,0x000028d1,
-0xe50,0x1000dc1f,
-0xe54,0x10008c1f,
-0xe58,0x02140102,
-0xe5c,0x28160d05,
-0xe60,0x00000008,
-0xe68,0x001b25a4,
-0xe6c,0x631b25a0,
-0xe70,0x631b25a0,
-0xe74,0x081b25a0,
-0xe78,0x081b25a0,
-0xe7c,0x081b25a0,
-0xe80,0x081b25a0,
-0xe84,0x631b25a0,
-0xe88,0x081b25a0,
-0xe8c,0x631b25a0,
-0xed0,0x631b25a0,
-0xed4,0x631b25a0,
-0xed8,0x631b25a0,
-0xedc,0x001b25a0,
-0xee0,0x001b25a0,
-0xeec,0x6b1b25a0,
-0xf14,0x00000003,
-0xf4c,0x00000000,
-0xf00,0x00000300,
-};
-
-u32 Rtl8723UPHY_ChangeTo_1T1RArray[Rtl8723UPHY_ChangeTo_1T1RArrayLength] = {
-0x0, };
-
-u32 Rtl8723UPHY_ChangeTo_1T2RArray[Rtl8723UPHY_ChangeTo_1T2RArrayLength] = {
-0x0, };
-
-u32 Rtl8723UPHY_ChangeTo_2T2RArray[Rtl8723UPHY_ChangeTo_2T2RArrayLength] = {
-0x0, };
-
-
-u32 Rtl8723UPHY_REG_1T_mCardArray[Rtl8723UPHY_REG_1T_mCardArrayLength] = {
-0x800,0x80040000,
-0x804,0x00000003,
-0x808,0x0000fc00,
-0x80c,0x0000000a,
-0x810,0x10005388,
-0x814,0x020c3d10,
-0x818,0x02200385,
-0x81c,0x00000000,
-0x820,0x01000100,
-0x824,0x00390004,
-0x828,0x00000000,
-0x82c,0x00000000,
-0x830,0x00000000,
-0x834,0x00000000,
-0x838,0x00000000,
-0x83c,0x00000000,
-0x840,0x00010000,
-0x844,0x00000000,
-0x848,0x00000000,
-0x84c,0x00000000,
-0x850,0x00000000,
-0x854,0x00000000,
-0x858,0x569a569a,
-0x85c,0x001b25a4,
-0x860,0x66f60110,
-0x864,0x061f0130,
-0x868,0x00000000,
-0x86c,0x32323200,
-0x870,0x07000760,
-0x874,0x22004000,
-0x878,0x00000808,
-0x87c,0x00000000,
-0x880,0xc0083070,
-0x884,0x000004d5,
-0x888,0x00000000,
-0x88c,0xccc000c0,
-0x890,0x00000800,
-0x894,0xfffffffe,
-0x898,0x40302010,
-0x89c,0x00706050,
-0x900,0x00000000,
-0x904,0x00000023,
-0x908,0x00000000,
-0x90c,0x81121111,
-0xa00,0x00d047c8,
-0xa04,0x80ff000c,
-0xa08,0x8c838300,
-0xa0c,0x2e68120f,
-0xa10,0x9500bb78,
-0xa14,0x11144028,
-0xa18,0x00881117,
-0xa1c,0x89140f00,
-0xa20,0x1a1b0000,
-0xa24,0x090e1317,
-0xa28,0x00000204,
-0xa2c,0x00d30000,
-0xa70,0x101fbf00,
-0xa74,0x00000007,
-0xa78,0x00000900,
-0xc00,0x48071d40,
-0xc04,0x03a05611,
-0xc08,0x000000e4,
-0xc0c,0x6c6c6c6c,
-0xc10,0x08800000,
-0xc14,0x40000100,
-0xc18,0x08800000,
-0xc1c,0x40000100,
-0xc20,0x00000000,
-0xc24,0x00000000,
-0xc28,0x00000000,
-0xc2c,0x00000000,
-0xc30,0x69e9ac44,
-0xc34,0x469652cf,
-0xc38,0x49795994,
-0xc3c,0x0a97971c,
-0xc40,0x1f7c403f,
-0xc44,0x000100b7,
-0xc48,0xec020107,
-0xc4c,0x007f037f,
-0xc50,0x69543420,
-0xc54,0x43bc0094,
-0xc58,0x69543420,
-0xc5c,0x433c0094,
-0xc60,0x00000000,
-0xc64,0x7116848b,
-0xc68,0x47c00bff,
-0xc6c,0x00000036,
-0xc70,0x2c7f000d,
-0xc74,0x018610db,
-0xc78,0x0000001f,
-0xc7c,0x00b91612,
-0xc80,0x40000100,
-0xc84,0x20f60000,
-0xc88,0x40000100,
-0xc8c,0x20200000,
-0xc90,0x00121820,
-0xc94,0x00000000,
-0xc98,0x00121820,
-0xc9c,0x00007f7f,
-0xca0,0x00000000,
-0xca4,0x00000080,
-0xca8,0x00000000,
-0xcac,0x00000000,
-0xcb0,0x00000000,
-0xcb4,0x00000000,
-0xcb8,0x00000000,
-0xcbc,0x28000000,
-0xcc0,0x00000000,
-0xcc4,0x00000000,
-0xcc8,0x00000000,
-0xccc,0x00000000,
-0xcd0,0x00000000,
-0xcd4,0x00000000,
-0xcd8,0x64b22427,
-0xcdc,0x00766932,
-0xce0,0x00222222,
-0xce4,0x00000000,
-0xce8,0x37644302,
-0xcec,0x2f97d40c,
-0xd00,0x00080740,
-0xd04,0x00020401,
-0xd08,0x0000907f,
-0xd0c,0x20010201,
-0xd10,0xa0633333,
-0xd14,0x3333bc43,
-0xd18,0x7a8f5b6b,
-0xd2c,0xcc979975,
-0xd30,0x00000000,
-0xd34,0x80608000,
-0xd38,0x00000000,
-0xd3c,0x00027293,
-0xd40,0x00000000,
-0xd44,0x00000000,
-0xd48,0x00000000,
-0xd4c,0x00000000,
-0xd50,0x6437140a,
-0xd54,0x00000000,
-0xd58,0x00000000,
-0xd5c,0x30032064,
-0xd60,0x4653de68,
-0xd64,0x04518a3c,
-0xd68,0x00002101,
-0xd6c,0x2a201c16,
-0xd70,0x1812362e,
-0xd74,0x322c2220,
-0xd78,0x000e3c24,
-0xe00,0x2a2a2a2a,
-0xe04,0x2a2a2a2a,
-0xe08,0x03902a2a,
-0xe10,0x2a2a2a2a,
-0xe14,0x2a2a2a2a,
-0xe18,0x2a2a2a2a,
-0xe1c,0x2a2a2a2a,
-0xe28,0x00000000,
-0xe30,0x1000dc1f,
-0xe34,0x10008c1f,
-0xe38,0x02140102,
-0xe3c,0x681604c2,
-0xe40,0x01007c00,
-0xe44,0x01004800,
-0xe48,0xfb000000,
-0xe4c,0x000028d1,
-0xe50,0x1000dc1f,
-0xe54,0x10008c1f,
-0xe58,0x02140102,
-0xe5c,0x28160d05,
-0xe60,0x00000008,
-0xe68,0x001b25a4,
-0xe6c,0x631b25a0,
-0xe70,0x631b25a0,
-0xe74,0x081b25a0,
-0xe78,0x081b25a0,
-0xe7c,0x081b25a0,
-0xe80,0x081b25a0,
-0xe84,0x631b25a0,
-0xe88,0x081b25a0,
-0xe8c,0x631b25a0,
-0xed0,0x631b25a0,
-0xed4,0x631b25a0,
-0xed8,0x631b25a0,
-0xedc,0x001b25a0,
-0xee0,0x001b25a0,
-0xeec,0x6b1b25a0,
-0xf14,0x00000003,
-0xf4c,0x00000000,
-0xf00,0x00000300,
-};
-
-u32 Rtl8723UPHY_REG_1T_SDIOArray[Rtl8723UPHY_REG_1T_SDIOArrayLength] = {
-0x800,0x80040000,
-0x804,0x00000003,
-0x808,0x0000fc00,
-0x80c,0x0000000a,
-0x810,0x10005388,
-0x814,0x020c3d10,
-0x818,0x02200385,
-0x81c,0x00000000,
-0x820,0x01000100,
-0x824,0x00390004,
-0x828,0x00000000,
-0x82c,0x00000000,
-0x830,0x00000000,
-0x834,0x00000000,
-0x838,0x00000000,
-0x83c,0x00000000,
-0x840,0x00010000,
-0x844,0x00000000,
-0x848,0x00000000,
-0x84c,0x00000000,
-0x850,0x00000000,
-0x854,0x00000000,
-0x858,0x569a569a,
-0x85c,0x001b25a4,
-0x860,0x66f60110,
-0x864,0x061f0130,
-0x868,0x00000000,
-0x86c,0x32323200,
-0x870,0x07000760,
-0x874,0x22004000,
-0x878,0x00000808,
-0x87c,0x00000000,
-0x880,0xc0083070,
-0x884,0x000004d5,
-0x888,0x00000000,
-0x88c,0xccc000c0,
-0x890,0x00000800,
-0x894,0xfffffffe,
-0x898,0x40302010,
-0x89c,0x00706050,
-0x900,0x00000000,
-0x904,0x00000023,
-0x908,0x00000000,
-0x90c,0x81121111,
-0xa00,0x00d047c8,
-0xa04,0x80ff000c,
-0xa08,0x8c838300,
-0xa0c,0x2e68120f,
-0xa10,0x9500bb78,
-0xa14,0x11144028,
-0xa18,0x00881117,
-0xa1c,0x89140f00,
-0xa20,0x1a1b0000,
-0xa24,0x090e1317,
-0xa28,0x00000204,
-0xa2c,0x00d30000,
-0xa70,0x101fbf00,
-0xa74,0x00000007,
-0xa78,0x00000900,
-0xc00,0x48071d40,
-0xc04,0x03a05611,
-0xc08,0x000000e4,
-0xc0c,0x6c6c6c6c,
-0xc10,0x08800000,
-0xc14,0x40000100,
-0xc18,0x08800000,
-0xc1c,0x40000100,
-0xc20,0x00000000,
-0xc24,0x00000000,
-0xc28,0x00000000,
-0xc2c,0x00000000,
-0xc30,0x69e9ac44,
-0xc34,0x469652cf,
-0xc38,0x49795994,
-0xc3c,0x0a97971c,
-0xc40,0x1f7c403f,
-0xc44,0x000100b7,
-0xc48,0xec020107,
-0xc4c,0x007f037f,
-0xc50,0x69543420,
-0xc54,0x43bc0094,
-0xc58,0x69543420,
-0xc5c,0x433c0094,
-0xc60,0x00000000,
-0xc64,0x7116848b,
-0xc68,0x47c00bff,
-0xc6c,0x00000036,
-0xc70,0x2c7f000d,
-0xc74,0x018610db,
-0xc78,0x0000001f,
-0xc7c,0x00b91612,
-0xc80,0x40000100,
-0xc84,0x20f60000,
-0xc88,0x40000100,
-0xc8c,0x20200000,
-0xc90,0x00121820,
-0xc94,0x00000000,
-0xc98,0x00121820,
-0xc9c,0x00007f7f,
-0xca0,0x00000000,
-0xca4,0x00000080,
-0xca8,0x00000000,
-0xcac,0x00000000,
-0xcb0,0x00000000,
-0xcb4,0x00000000,
-0xcb8,0x00000000,
-0xcbc,0x28000000,
-0xcc0,0x00000000,
-0xcc4,0x00000000,
-0xcc8,0x00000000,
-0xccc,0x00000000,
-0xcd0,0x00000000,
-0xcd4,0x00000000,
-0xcd8,0x64b22427,
-0xcdc,0x00766932,
-0xce0,0x00222222,
-0xce4,0x00000000,
-0xce8,0x37644302,
-0xcec,0x2f97d40c,
-0xd00,0x00080740,
-0xd04,0x00020401,
-0xd08,0x0000907f,
-0xd0c,0x20010201,
-0xd10,0xa0633333,
-0xd14,0x3333bc43,
-0xd18,0x7a8f5b6b,
-0xd2c,0xcc979975,
-0xd30,0x00000000,
-0xd34,0x80608000,
-0xd38,0x00000000,
-0xd3c,0x00027293,
-0xd40,0x00000000,
-0xd44,0x00000000,
-0xd48,0x00000000,
-0xd4c,0x00000000,
-0xd50,0x6437140a,
-0xd54,0x00000000,
-0xd58,0x00000000,
-0xd5c,0x30032064,
-0xd60,0x4653de68,
-0xd64,0x04518a3c,
-0xd68,0x00002101,
-0xd6c,0x2a201c16,
-0xd70,0x1812362e,
-0xd74,0x322c2220,
-0xd78,0x000e3c24,
-0xe00,0x2a2a2a2a,
-0xe04,0x2a2a2a2a,
-0xe08,0x03902a2a,
-0xe10,0x2a2a2a2a,
-0xe14,0x2a2a2a2a,
-0xe18,0x2a2a2a2a,
-0xe1c,0x2a2a2a2a,
-0xe28,0x00000000,
-0xe30,0x1000dc1f,
-0xe34,0x10008c1f,
-0xe38,0x02140102,
-0xe3c,0x681604c2,
-0xe40,0x01007c00,
-0xe44,0x01004800,
-0xe48,0xfb000000,
-0xe4c,0x000028d1,
-0xe50,0x1000dc1f,
-0xe54,0x10008c1f,
-0xe58,0x02140102,
-0xe5c,0x28160d05,
-0xe60,0x00000008,
-0xe68,0x001b25a4,
-0xe6c,0x631b25a0,
-0xe70,0x631b25a0,
-0xe74,0x081b25a0,
-0xe78,0x081b25a0,
-0xe7c,0x081b25a0,
-0xe80,0x081b25a0,
-0xe84,0x631b25a0,
-0xe88,0x081b25a0,
-0xe8c,0x631b25a0,
-0xed0,0x631b25a0,
-0xed4,0x631b25a0,
-0xed8,0x631b25a0,
-0xedc,0x001b25a0,
-0xee0,0x001b25a0,
-0xeec,0x6b1b25a0,
-0xf14,0x00000003,
-0xf4c,0x00000000,
-0xf00,0x00000300,
-};
-
-u32 Rtl8723URadioA_2TArray[Rtl8723URadioA_2TArrayLength] = {
-0x0, };
-
-u32 Rtl8723URadioB_2TArray[Rtl8723URadioB_2TArrayLength] = {
-0x0, };
-
-u32 Rtl8723URadioA_1TArray[Rtl8723URadioA_1TArrayLength] = {
-0x000,0x00030159,
-0x001,0x00031284,
-0x002,0x00098000,
-0x003,0x00039c63,
-0x004,0x000210e7,
-0x009,0x0002044f,
-0x00a,0x0001a3f1,
-0x00b,0x00014787,
-0x00c,0x000896fe,
-0x00d,0x0000e02c,
-0x00e,0x00039ce7,
-0x00f,0x00000451,
-0x019,0x00000000,
-0x01a,0x00030355,
-0x01b,0x00060a00,
-0x01c,0x000fc378,
-0x01d,0x000a1250,
-0x01e,0x0000024f,
-0x01f,0x00000000,
-0x020,0x0000b614,
-0x021,0x0006c000,
-0x022,0x00000000,
-0x023,0x00001558,
-0x024,0x00000060,
-0x025,0x00000483,
-0x026,0x0004f000,
-0x027,0x000ec7d9,
-0x028,0x00057730,
-0x029,0x00004783,
-0x02a,0x00000001,
-0x02b,0x00021334,
-0x02a,0x00000000,
-0x02b,0x00000054,
-0x02a,0x00000001,
-0x02b,0x00000808,
-0x02b,0x00053333,
-0x02c,0x0000000c,
-0x02a,0x00000002,
-0x02b,0x00000808,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000003,
-0x02b,0x00000808,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000004,
-0x02b,0x00000808,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x00000005,
-0x02b,0x00000808,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x00000006,
-0x02b,0x00000709,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000007,
-0x02b,0x00000709,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000008,
-0x02b,0x0000060a,
-0x02b,0x0004b333,
-0x02c,0x0000000d,
-0x02a,0x00000009,
-0x02b,0x0000060a,
-0x02b,0x00053333,
-0x02c,0x0000000d,
-0x02a,0x0000000a,
-0x02b,0x0000060a,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x0000000b,
-0x02b,0x0000060a,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x0000000c,
-0x02b,0x0000060a,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x0000000d,
-0x02b,0x0000060a,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x0000000e,
-0x02b,0x0000050b,
-0x02b,0x00066666,
-0x02c,0x0000001a,
-0x02a,0x000e0000,
-0x010,0x0004000f,
-0x011,0x000e31fc,
-0x010,0x0006000f,
-0x011,0x000ff9f8,
-0x010,0x0002000f,
-0x011,0x000203f9,
-0x010,0x0003000f,
-0x011,0x000ff500,
-0x010,0x00000000,
-0x011,0x00000000,
-0x010,0x0008000f,
-0x011,0x0003f100,
-0x010,0x0009000f,
-0x011,0x00023100,
-0x012,0x00032000,
-0x012,0x00071000,
-0x012,0x000b0000,
-0x012,0x000fc000,
-0x013,0x000287b3,
-0x013,0x000244b7,
-0x013,0x000204ab,
-0x013,0x0001c49f,
-0x013,0x00018493,
-0x013,0x0001429b,
-0x013,0x00010299,
-0x013,0x0000c29c,
-0x013,0x000081a0,
-0x013,0x000040ac,
-0x013,0x00000020,
-0x014,0x0001944c,
-0x014,0x00059444,
-0x014,0x0009944c,
-0x014,0x000d9444,
-0x015,0x0000f474,
-0x015,0x0004f477,
-0x015,0x0008f474,
-0x015,0x000cf474,
-0x016,0x00000339,
-0x016,0x00040339,
-0x016,0x00080339,
-0x016,0x000c0366,
-0x000,0x00010159,
-0x018,0x0000f401,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01f,0x00000003,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01e,0x00000247,
-0x01f,0x00000000,
-0x000,0x00030159,
-};
-
-u32 Rtl8723URadioB_1TArray[Rtl8723URadioB_1TArrayLength] = {
-0x0, };
-
-u32 Rtl8723URadioA_1T_mCardArray[Rtl8723URadioA_1T_mCardArrayLength] = {
-0x000,0x00030159,
-0x001,0x00031284,
-0x002,0x00098000,
-0x003,0x00018c63,
-0x004,0x000210e7,
-0x009,0x0002044f,
-0x00a,0x0001a3f1,
-0x00b,0x00014787,
-0x00c,0x000896fe,
-0x00d,0x0000e02c,
-0x00e,0x00039ce7,
-0x00f,0x00000451,
-0x019,0x00000000,
-0x01a,0x00030355,
-0x01b,0x00060a00,
-0x01c,0x000fc378,
-0x01d,0x000a1250,
-0x01e,0x0004445f,
-0x01f,0x00080001,
-0x020,0x0000b614,
-0x021,0x0006c000,
-0x022,0x00000000,
-0x023,0x00001558,
-0x024,0x00000060,
-0x025,0x00000483,
-0x026,0x0004f000,
-0x027,0x000ec7d9,
-0x028,0x00057730,
-0x029,0x00004783,
-0x02a,0x00000001,
-0x02b,0x00021334,
-0x02a,0x00000000,
-0x02b,0x00000054,
-0x02a,0x00000001,
-0x02b,0x00000808,
-0x02b,0x00053333,
-0x02c,0x0000000c,
-0x02a,0x00000002,
-0x02b,0x00000808,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000003,
-0x02b,0x00000808,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000004,
-0x02b,0x00000808,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x00000005,
-0x02b,0x00000808,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x00000006,
-0x02b,0x00000709,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000007,
-0x02b,0x00000709,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000008,
-0x02b,0x0000060a,
-0x02b,0x0004b333,
-0x02c,0x0000000d,
-0x02a,0x00000009,
-0x02b,0x0000060a,
-0x02b,0x00053333,
-0x02c,0x0000000d,
-0x02a,0x0000000a,
-0x02b,0x0000060a,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x0000000b,
-0x02b,0x0000060a,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x0000000c,
-0x02b,0x0000060a,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x0000000d,
-0x02b,0x0000060a,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x0000000e,
-0x02b,0x0000050b,
-0x02b,0x00066666,
-0x02c,0x0000001a,
-0x02a,0x000e0000,
-0x010,0x0004000f,
-0x011,0x000e31fc,
-0x010,0x0006000f,
-0x011,0x000ff9f8,
-0x010,0x0002000f,
-0x011,0x000203f9,
-0x010,0x0003000f,
-0x011,0x000ff500,
-0x010,0x00000000,
-0x011,0x00000000,
-0x010,0x0008000f,
-0x011,0x0003f100,
-0x010,0x0009000f,
-0x011,0x00023100,
-0x012,0x00032000,
-0x012,0x00071000,
-0x012,0x000b0000,
-0x012,0x000fc000,
-0x013,0x000287b3,
-0x013,0x000244b7,
-0x013,0x000204ab,
-0x013,0x0001c49f,
-0x013,0x00018493,
-0x013,0x0001429b,
-0x013,0x00010299,
-0x013,0x0000c29c,
-0x013,0x000081a0,
-0x013,0x000040ac,
-0x013,0x00000020,
-0x014,0x0001944c,
-0x014,0x00059444,
-0x014,0x0009944c,
-0x014,0x000d9444,
-0x015,0x0000f424,
-0x015,0x0004f424,
-0x015,0x0008f424,
-0x015,0x000cf424,
-0x016,0x00000339,
-0x016,0x00040339,
-0x016,0x00080339,
-0x016,0x000c0356,
-0x000,0x00010159,
-0x018,0x0000f401,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01f,0x00080003,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01e,0x00044457,
-0x01f,0x00080000,
-0x000,0x00030159,
-};
-
-u32 Rtl8723URadioA_1T_SDIOArray[Rtl8723URadioA_1T_SDIOArrayLength] = {
-0x000,0x00030159,
-0x001,0x00031284,
-0x002,0x00098000,
-0x003,0x00039c63,
-0x004,0x000210e7,
-0x009,0x0002044f,
-0x00a,0x0001a3f1,
-0x00b,0x00014787,
-0x00c,0x000896fe,
-0x00d,0x0000e02c,
-0x00e,0x00039ce7,
-0x00f,0x00000451,
-0x019,0x00000000,
-0x01a,0x00030355,
-0x01b,0x00060a00,
-0x01c,0x000fc378,
-0x01d,0x000a1250,
-0x01e,0x0000024f,
-0x01f,0x00000000,
-0x020,0x0000b614,
-0x021,0x0006c000,
-0x022,0x00000000,
-0x023,0x00001558,
-0x024,0x00000060,
-0x025,0x00000483,
-0x026,0x0004f000,
-0x027,0x000ec7d9,
-0x028,0x00057730,
-0x029,0x00004783,
-0x02a,0x00000001,
-0x02b,0x00021334,
-0x02a,0x00000000,
-0x02b,0x00000054,
-0x02a,0x00000001,
-0x02b,0x00000808,
-0x02b,0x00053333,
-0x02c,0x0000000c,
-0x02a,0x00000002,
-0x02b,0x00000808,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000003,
-0x02b,0x00000808,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000004,
-0x02b,0x00000808,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x00000005,
-0x02b,0x00000808,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x00000006,
-0x02b,0x00000709,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x00000007,
-0x02b,0x00000709,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x00000008,
-0x02b,0x0000060a,
-0x02b,0x0004b333,
-0x02c,0x0000000d,
-0x02a,0x00000009,
-0x02b,0x0000060a,
-0x02b,0x00053333,
-0x02c,0x0000000d,
-0x02a,0x0000000a,
-0x02b,0x0000060a,
-0x02b,0x0005b333,
-0x02c,0x0000000d,
-0x02a,0x0000000b,
-0x02b,0x0000060a,
-0x02b,0x00063333,
-0x02c,0x0000000d,
-0x02a,0x0000000c,
-0x02b,0x0000060a,
-0x02b,0x0006b333,
-0x02c,0x0000000d,
-0x02a,0x0000000d,
-0x02b,0x0000060a,
-0x02b,0x00073333,
-0x02c,0x0000000d,
-0x02a,0x0000000e,
-0x02b,0x0000050b,
-0x02b,0x00066666,
-0x02c,0x0000001a,
-0x02a,0x000e0000,
-0x010,0x0004000f,
-0x011,0x000e31fc,
-0x010,0x0006000f,
-0x011,0x000ff9f8,
-0x010,0x0002000f,
-0x011,0x000203f9,
-0x010,0x0003000f,
-0x011,0x000ff500,
-0x010,0x00000000,
-0x011,0x00000000,
-0x010,0x0008000f,
-0x011,0x0003f100,
-0x010,0x0009000f,
-0x011,0x00023100,
-0x012,0x00032000,
-0x012,0x00071000,
-0x012,0x000b0000,
-0x012,0x000fc000,
-0x013,0x000287b3,
-0x013,0x000244b7,
-0x013,0x000204ab,
-0x013,0x0001c49f,
-0x013,0x00018493,
-0x013,0x0001429b,
-0x013,0x00010299,
-0x013,0x0000c29c,
-0x013,0x000081a0,
-0x013,0x000040ac,
-0x013,0x00000020,
-0x014,0x0001944c,
-0x014,0x00059444,
-0x014,0x0009944c,
-0x014,0x000d9444,
-0x015,0x0000f474,
-0x015,0x0004f477,
-0x015,0x0008f474,
-0x015,0x000cf474,
-0x016,0x00000339,
-0x016,0x00040339,
-0x016,0x00080339,
-0x016,0x000c0366,
-0x000,0x00010159,
-0x018,0x0000f401,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01f,0x00000003,
-0x0fe,0x00000000,
-0x0fe,0x00000000,
-0x01e,0x00000247,
-0x01f,0x00000000,
-0x000,0x00030159,
-};
-
-u32 Rtl8723URadioB_GM_Array[Rtl8723URadioB_GM_ArrayLength] = {
-0x0, };
-
-u32 Rtl8723UMAC_2T_Array[Rtl8723UMAC_2T_ArrayLength] = {
-0x420,0x00000080,
-0x423,0x00000000,
-0x430,0x00000000,
-0x431,0x00000000,
-0x432,0x00000000,
-0x433,0x00000001,
-0x434,0x00000004,
-0x435,0x00000005,
-0x436,0x00000006,
-0x437,0x00000007,
-0x438,0x00000000,
-0x439,0x00000000,
-0x43a,0x00000000,
-0x43b,0x00000001,
-0x43c,0x00000004,
-0x43d,0x00000005,
-0x43e,0x00000006,
-0x43f,0x00000007,
-0x440,0x0000005d,
-0x441,0x00000001,
-0x442,0x00000000,
-0x444,0x00000015,
-0x445,0x000000f0,
-0x446,0x0000000f,
-0x447,0x00000000,
-0x458,0x00000041,
-0x459,0x000000a8,
-0x45a,0x00000072,
-0x45b,0x000000b9,
-0x460,0x00000066,
-0x461,0x00000066,
-0x462,0x00000008,
-0x463,0x00000003,
-0x4c8,0x000000ff,
-0x4c9,0x00000008,
-0x4cc,0x000000ff,
-0x4cd,0x000000ff,
-0x4ce,0x00000001,
-0x500,0x00000026,
-0x501,0x000000a2,
-0x502,0x0000002f,
-0x503,0x00000000,
-0x504,0x00000028,
-0x505,0x000000a3,
-0x506,0x0000005e,
-0x507,0x00000000,
-0x508,0x0000002b,
-0x509,0x000000a4,
-0x50a,0x0000005e,
-0x50b,0x00000000,
-0x50c,0x0000004f,
-0x50d,0x000000a4,
-0x50e,0x00000000,
-0x50f,0x00000000,
-0x512,0x0000001c,
-0x514,0x0000000a,
-0x515,0x00000010,
-0x516,0x0000000a,
-0x517,0x00000010,
-0x51a,0x00000016,
-0x524,0x0000000f,
-0x525,0x0000004f,
-0x546,0x00000040,
-0x547,0x00000000,
-0x550,0x00000010,
-0x551,0x00000010,
-0x559,0x00000002,
-0x55a,0x00000002,
-0x55d,0x000000ff,
-0x605,0x00000030,
-0x608,0x0000000e,
-0x609,0x0000002a,
-0x652,0x00000020,
-0x63c,0x0000000a,
-0x63d,0x0000000e,
-0x63e,0x0000000a,
-0x63f,0x0000000e,
-0x66e,0x00000005,
-0x700,0x00000021,
-0x701,0x00000043,
-0x702,0x00000065,
-0x703,0x00000087,
-0x708,0x00000021,
-0x709,0x00000043,
-0x70a,0x00000065,
-0x70b,0x00000087,
-};
-
-
-u32 Rtl8723UAGCTAB_2TArray[Rtl8723UAGCTAB_2TArrayLength] = {
-0x0, };
-
-u32 Rtl8723UAGCTAB_1TArray[Rtl8723UAGCTAB_1TArrayLength] = {
-0xc78,0x7b000001,
-0xc78,0x7b010001,
-0xc78,0x7b020001,
-0xc78,0x7b030001,
-0xc78,0x7b040001,
-0xc78,0x7b050001,
-0xc78,0x7a060001,
-0xc78,0x79070001,
-0xc78,0x78080001,
-0xc78,0x77090001,
-0xc78,0x760a0001,
-0xc78,0x750b0001,
-0xc78,0x740c0001,
-0xc78,0x730d0001,
-0xc78,0x720e0001,
-0xc78,0x710f0001,
-0xc78,0x70100001,
-0xc78,0x6f110001,
-0xc78,0x6e120001,
-0xc78,0x6d130001,
-0xc78,0x6c140001,
-0xc78,0x6b150001,
-0xc78,0x6a160001,
-0xc78,0x69170001,
-0xc78,0x68180001,
-0xc78,0x67190001,
-0xc78,0x661a0001,
-0xc78,0x651b0001,
-0xc78,0x641c0001,
-0xc78,0x631d0001,
-0xc78,0x621e0001,
-0xc78,0x611f0001,
-0xc78,0x60200001,
-0xc78,0x49210001,
-0xc78,0x48220001,
-0xc78,0x47230001,
-0xc78,0x46240001,
-0xc78,0x45250001,
-0xc78,0x44260001,
-0xc78,0x43270001,
-0xc78,0x42280001,
-0xc78,0x41290001,
-0xc78,0x402a0001,
-0xc78,0x262b0001,
-0xc78,0x252c0001,
-0xc78,0x242d0001,
-0xc78,0x232e0001,
-0xc78,0x222f0001,
-0xc78,0x21300001,
-0xc78,0x20310001,
-0xc78,0x06320001,
-0xc78,0x05330001,
-0xc78,0x04340001,
-0xc78,0x03350001,
-0xc78,0x02360001,
-0xc78,0x01370001,
-0xc78,0x00380001,
-0xc78,0x00390001,
-0xc78,0x003a0001,
-0xc78,0x003b0001,
-0xc78,0x003c0001,
-0xc78,0x003d0001,
-0xc78,0x003e0001,
-0xc78,0x003f0001,
-0xc78,0x7b400001,
-0xc78,0x7b410001,
-0xc78,0x7b420001,
-0xc78,0x7b430001,
-0xc78,0x7b440001,
-0xc78,0x7b450001,
-0xc78,0x7a460001,
-0xc78,0x79470001,
-0xc78,0x78480001,
-0xc78,0x77490001,
-0xc78,0x764a0001,
-0xc78,0x754b0001,
-0xc78,0x744c0001,
-0xc78,0x734d0001,
-0xc78,0x724e0001,
-0xc78,0x714f0001,
-0xc78,0x70500001,
-0xc78,0x6f510001,
-0xc78,0x6e520001,
-0xc78,0x6d530001,
-0xc78,0x6c540001,
-0xc78,0x6b550001,
-0xc78,0x6a560001,
-0xc78,0x69570001,
-0xc78,0x68580001,
-0xc78,0x67590001,
-0xc78,0x665a0001,
-0xc78,0x655b0001,
-0xc78,0x645c0001,
-0xc78,0x635d0001,
-0xc78,0x625e0001,
-0xc78,0x615f0001,
-0xc78,0x60600001,
-0xc78,0x49610001,
-0xc78,0x48620001,
-0xc78,0x47630001,
-0xc78,0x46640001,
-0xc78,0x45650001,
-0xc78,0x44660001,
-0xc78,0x43670001,
-0xc78,0x42680001,
-0xc78,0x41690001,
-0xc78,0x406a0001,
-0xc78,0x266b0001,
-0xc78,0x256c0001,
-0xc78,0x246d0001,
-0xc78,0x236e0001,
-0xc78,0x226f0001,
-0xc78,0x21700001,
-0xc78,0x20710001,
-0xc78,0x06720001,
-0xc78,0x05730001,
-0xc78,0x04740001,
-0xc78,0x03750001,
-0xc78,0x02760001,
-0xc78,0x01770001,
-0xc78,0x00780001,
-0xc78,0x00790001,
-0xc78,0x007a0001,
-0xc78,0x007b0001,
-0xc78,0x007c0001,
-0xc78,0x007d0001,
-0xc78,0x007e0001,
-0xc78,0x007f0001,
-0xc78,0x3800001e,
-0xc78,0x3801001e,
-0xc78,0x3802001e,
-0xc78,0x3803001e,
-0xc78,0x3804001e,
-0xc78,0x3805001e,
-0xc78,0x3806001e,
-0xc78,0x3807001e,
-0xc78,0x3808001e,
-0xc78,0x3c09001e,
-0xc78,0x3e0a001e,
-0xc78,0x400b001e,
-0xc78,0x440c001e,
-0xc78,0x480d001e,
-0xc78,0x4c0e001e,
-0xc78,0x500f001e,
-0xc78,0x5210001e,
-0xc78,0x5611001e,
-0xc78,0x5a12001e,
-0xc78,0x5e13001e,
-0xc78,0x6014001e,
-0xc78,0x6015001e,
-0xc78,0x6016001e,
-0xc78,0x6217001e,
-0xc78,0x6218001e,
-0xc78,0x6219001e,
-0xc78,0x621a001e,
-0xc78,0x621b001e,
-0xc78,0x621c001e,
-0xc78,0x621d001e,
-0xc78,0x621e001e,
-0xc78,0x621f001e,
-};
-
-
-#endif//ENDIF CONFIG_PHY_SETTING_WITH_ODM
-
-u32 Rtl8723UPHY_REG_Array_PG[Rtl8723UPHY_REG_Array_PGLength] = {
-0xe00,0xffffffff,0x0a0c0c0c,
-0xe04,0xffffffff,0x02040608,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x0a0c0d0e,
-0xe14,0xffffffff,0x02040608,
-0xe18,0xffffffff,0x0a0c0d0e,
-0xe1c,0xffffffff,0x02040608,
-0x830,0xffffffff,0x0a0c0c0c,
-0x834,0xffffffff,0x02040608,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x0a0c0d0e,
-0x848,0xffffffff,0x02040608,
-0x84c,0xffffffff,0x0a0c0d0e,
-0x868,0xffffffff,0x02040608,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x04040404,
-0xe04,0xffffffff,0x00020204,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x06060606,
-0xe14,0xffffffff,0x00020406,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x04040404,
-0x834,0xffffffff,0x00020204,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x06060606,
-0x848,0xffffffff,0x00020406,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x04040404,
-0xe04,0xffffffff,0x00020204,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x04040404,
-0x834,0xffffffff,0x00020204,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-0xe00,0xffffffff,0x00000000,
-0xe04,0xffffffff,0x00000000,
-0xe08,0x0000ff00,0x00000000,
-0x86c,0xffffff00,0x00000000,
-0xe10,0xffffffff,0x00000000,
-0xe14,0xffffffff,0x00000000,
-0xe18,0xffffffff,0x00000000,
-0xe1c,0xffffffff,0x00000000,
-0x830,0xffffffff,0x00000000,
-0x834,0xffffffff,0x00000000,
-0x838,0xffffff00,0x00000000,
-0x86c,0x000000ff,0x00000000,
-0x83c,0xffffffff,0x00000000,
-0x848,0xffffffff,0x00000000,
-0x84c,0xffffffff,0x00000000,
-0x868,0xffffffff,0x00000000,
-};
-
-u32 Rtl8723UMACPHY_Array_PG[Rtl8723UMACPHY_Array_PGLength] = {
-0x0, };
-
-#if MP_DRIVER == 1
-
-u32 Rtl8723UPHY_REG_Array_MP[Rtl8723UPHY_REG_Array_MPLength] = {
-0xc30,0x69e9ac4a,
-0xc3c,0x0a979718,
-};
-
-#endif//#if MP_DRIVER == 1
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+/*Created on 2013/01/14, 15:51*/
+#include "../odm_precomp.h"
+
+u8 Rtl8723UFwImgArray[Rtl8723UImgArrayLength] = {
+0x01,0x23,0x02,0x00,0x0e,0x00,0x00,0x00,0x01,0x13,0x16,0x18,0x7c,0x56,0x01,0x00,
+0x54,0x89,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x02,0x44,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x00,0x00,0x00,0x02,0x58,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,0x02,0x60,0xec,0x00,0x00,0x00,0x00,0x00,0x02,0x61,0x93,0x00,0x00,
+0x00,0x00,0x00,0x02,0x67,0x2b,0x05,0x04,0x03,0x02,0x00,0x03,0x06,0x05,0x04,0x03,
+0x00,0x04,0x06,0x05,0x04,0x02,0x00,0x04,0x08,0x07,0x06,0x04,0x00,0x06,0x0a,0x09,
+0x08,0x06,0x00,0x08,0x0a,0x09,0x08,0x04,0x00,0x08,0x0a,0x09,0x08,0x02,0x00,0x08,
+0x0a,0x09,0x08,0x00,0x00,0x08,0x12,0x11,0x10,0x08,0x00,0x10,0x1a,0x19,0x18,0x10,
+0x00,0x18,0x22,0x21,0x20,0x18,0x00,0x20,0x22,0x21,0x20,0x10,0x00,0x20,0x22,0x21,
+0x20,0x08,0x00,0x20,0x22,0x21,0x1c,0x08,0x00,0x20,0x22,0x21,0x14,0x08,0x00,0x20,
+0x22,0x20,0x18,0x08,0x00,0x20,0x31,0x30,0x20,0x10,0x00,0x30,0x31,0x30,0x18,0x00,
+0x00,0x30,0x31,0x2f,0x10,0x10,0x00,0x30,0x31,0x2c,0x10,0x10,0x00,0x30,0x31,0x28,
+0x10,0x00,0x00,0x30,0x31,0x20,0x10,0x00,0x00,0x30,0x31,0x10,0x10,0x00,0x00,0x30,
+0x04,0x04,0x04,0x05,0x04,0x04,0x04,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x04,0x05,
+0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,0x05,0x05,0x06,0x06,0x04,0x04,0x05,0x05,
+0x05,0x05,0x06,0x07,0x0a,0x0b,0x0d,0x10,0x04,0x05,0x05,0x06,0x06,0x09,0x0c,0x11,
+0x08,0x08,0x09,0x09,0x0a,0x0c,0x10,0x11,0x04,0x04,0x04,0x05,0x04,0x04,0x05,0x07,
+0x07,0x07,0x08,0x0a,0x04,0x04,0x04,0x04,0x06,0x0a,0x0b,0x0d,0x05,0x05,0x07,0x07,
+0x08,0x0b,0x0d,0x0f,0x04,0x04,0x04,0x05,0x07,0x07,0x09,0x09,0x0c,0x0e,0x10,0x12,
+0x04,0x04,0x05,0x05,0x06,0x0a,0x11,0x13,0x09,0x09,0x09,0x09,0x0c,0x0e,0x11,0x13,
+0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x26,0x2a,0x18,0x1a,0x1d,0x1f,
+0x21,0x27,0x29,0x2a,0x00,0x00,0x00,0x1f,0x23,0x28,0x2a,0x2c,0x00,0x04,0x00,0x04,
+0x00,0x08,0x00,0x10,0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x90,
+0x00,0xc0,0x00,0xd8,0x00,0x50,0x00,0x78,0x00,0xa0,0x00,0xc8,0x01,0x40,0x01,0x90,
+0x01,0xe0,0x02,0x30,0x01,0x2c,0x01,0x40,0x01,0xe0,0x02,0xd0,0x03,0xe8,0x04,0xb0,
+0x06,0x40,0x07,0xd0,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x0c,0x00,0x12,
+0x00,0x18,0x00,0x24,0x00,0x30,0x00,0x48,0x00,0x60,0x00,0x6c,0x00,0x28,0x00,0x3c,
+0x00,0x50,0x00,0x64,0x00,0xa0,0x00,0xc8,0x00,0xf0,0x01,0x18,0x00,0x64,0x00,0xa0,
+0x00,0xf0,0x01,0x68,0x01,0xf4,0x02,0x58,0x03,0x20,0x03,0xe8,0x02,0x02,0x02,0x02,
+0x02,0x02,0x03,0x03,0x04,0x04,0x05,0x07,0x04,0x04,0x07,0x0a,0x0a,0x0c,0x0c,0x12,
+0x05,0x07,0x07,0x08,0x0b,0x12,0x24,0x3c,0x01,0x01,0x01,0x01,0x01,0x02,0x03,0x04,
+0x05,0x06,0x07,0x08,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x05,0x06,0x07,0x08,
+0x09,0x0a,0x0b,0x0c,0x20,0x1e,0x1c,0x18,0x10,0x18,0x00,0x00,0x00,0x00,0x00,0x00,
+0xbb,0x01,0x06,0x89,0x82,0x8a,0x83,0xf0,0x22,0x50,0x02,0xf7,0x22,0xbb,0xfe,0x01,
+0xf3,0x22,0xf8,0xbb,0x01,0x0d,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,
+0xe8,0xf0,0x22,0x50,0x06,0xe9,0x25,0x82,0xc8,0xf6,0x22,0xbb,0xfe,0x05,0xe9,0x25,
+0x82,0xc8,0xf2,0x22,0xc5,0xf0,0xf8,0xa3,0xe0,0x28,0xf0,0xc5,0xf0,0xf8,0xe5,0x82,
+0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0x38,0xf0,0x22,0xbb,0x01,0x0a,0x89,0x82,0x8a,
+0x83,0xe0,0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x06,0x87,0xf0,0x09,0xe7,0x19,0x22,0xbb,
+0xfe,0x07,0xe3,0xf5,0xf0,0x09,0xe3,0x19,0x22,0x89,0x82,0x8a,0x83,0xe4,0x93,0xf5,
+0xf0,0x74,0x01,0x93,0x22,0xbb,0x01,0x10,0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,
+0xf5,0x83,0xe0,0xf5,0xf0,0xa3,0xe0,0x22,0x50,0x09,0xe9,0x25,0x82,0xf8,0x86,0xf0,
+0x08,0xe6,0x22,0xbb,0xfe,0x0a,0xe9,0x25,0x82,0xf8,0xe2,0xf5,0xf0,0x08,0xe2,0x22,
+0xe5,0x83,0x2a,0xf5,0x83,0xe9,0x93,0xf5,0xf0,0xa3,0xe9,0x93,0x22,0xbb,0x01,0x0a,
+0x89,0x82,0x8a,0x83,0xf0,0xe5,0xf0,0xa3,0xf0,0x22,0x50,0x06,0xf7,0x09,0xa7,0xf0,
+0x19,0x22,0xbb,0xfe,0x06,0xf3,0xe5,0xf0,0x09,0xf3,0x19,0x22,0xf8,0xbb,0x01,0x11,
+0xe5,0x82,0x29,0xf5,0x82,0xe5,0x83,0x3a,0xf5,0x83,0xe8,0xf0,0xe5,0xf0,0xa3,0xf0,
+0x22,0x50,0x09,0xe9,0x25,0x82,0xc8,0xf6,0x08,0xa6,0xf0,0x22,0xbb,0xfe,0x09,0xe9,
+0x25,0x82,0xc8,0xf2,0xe5,0xf0,0x08,0xf2,0x22,0xef,0x4b,0xff,0xee,0x4a,0xfe,0xed,
+0x49,0xfd,0xec,0x48,0xfc,0x22,0xbb,0x01,0x07,0x89,0x82,0x8a,0x83,0x02,0x43,0x46,
+0x50,0x05,0xe9,0xf8,0x02,0x43,0xda,0xbb,0xfe,0x05,0xe9,0xf8,0x02,0x43,0xe6,0x89,
+0x82,0x8a,0x83,0x02,0x43,0xf2,0xe0,0xfc,0xa3,0xe0,0xfd,0xa3,0xe0,0xfe,0xa3,0xe0,
+0xff,0x22,0xa4,0x25,0x82,0xf5,0x82,0xe5,0xf0,0x35,0x83,0xf5,0x83,0x22,0xe0,0xfb,
+0xa3,0xe0,0xfa,0xa3,0xe0,0xf9,0x22,0xf8,0xe0,0xfb,0xa3,0xa3,0xe0,0xf9,0x25,0xf0,
+0xf0,0xe5,0x82,0x15,0x82,0x70,0x02,0x15,0x83,0xe0,0xfa,0x38,0xf0,0x22,0xeb,0xf0,
+0xa3,0xea,0xf0,0xa3,0xe9,0xf0,0x22,0xd0,0x83,0xd0,0x82,0xf8,0xe4,0x93,0x70,0x12,
+0x74,0x01,0x93,0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,0x01,0x93,0xf5,0x82,0x88,0x83,
+0xe4,0x73,0x74,0x02,0x93,0x68,0x60,0xef,0xa3,0xa3,0xa3,0x80,0xdf,0xd0,0x83,0xd0,
+0x82,0xf8,0xe4,0x93,0x70,0x12,0x74,0x01,0x93,0x70,0x0d,0xa3,0xa3,0x93,0xf8,0x74,
+0x01,0x93,0xf5,0x82,0x88,0x83,0xe4,0x73,0x74,0x02,0x93,0xb5,0xf0,0x06,0x74,0x03,
+0x93,0x68,0x60,0xe9,0xa3,0xa3,0xa3,0xa3,0x80,0xd8,0xe6,0xfc,0x08,0xe6,0xfd,0x08,
+0xe6,0xfe,0x08,0xe6,0xff,0x22,0xe2,0xfc,0x08,0xe2,0xfd,0x08,0xe2,0xfe,0x08,0xe2,
+0xff,0x22,0xe4,0x93,0xfc,0x74,0x01,0x93,0xfd,0x74,0x02,0x93,0xfe,0x74,0x03,0x93,
+0xff,0x22,0x02,0x44,0x40,0x02,0x50,0x33,0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0x40,
+0x03,0xf6,0x80,0x01,0xf2,0x08,0xdf,0xf4,0x80,0x29,0xe4,0x93,0xa3,0xf8,0x54,0x07,
+0x24,0x0c,0xc8,0xc3,0x33,0xc4,0x54,0x0f,0x44,0x20,0xc8,0x83,0x40,0x04,0xf4,0x56,
+0x80,0x01,0x46,0xf6,0xdf,0xe4,0x80,0x0b,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
+0x90,0x44,0x85,0xe4,0x7e,0x01,0x93,0x60,0xbc,0xa3,0xff,0x54,0x3f,0x30,0xe5,0x09,
+0x54,0x1f,0xfe,0xe4,0x93,0xa3,0x60,0x01,0x0e,0xcf,0x54,0xc0,0x25,0xe0,0x60,0xa8,
+0x40,0xb8,0xe4,0x93,0xa3,0xfa,0xe4,0x93,0xa3,0xf8,0xe4,0x93,0xa3,0xc8,0xc5,0x82,
+0xc8,0xca,0xc5,0x83,0xca,0xf0,0xa3,0xc8,0xc5,0x82,0xc8,0xca,0xc5,0x83,0xca,0xdf,
+0xe9,0xde,0xe7,0x80,0xbe,0x48,0x9e,0xac,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+0x48,0x9e,0xa3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41,0x9e,0xab,0x00,0x41,
+0x9f,0x19,0x00,0x41,0x9e,0x84,0x80,0x41,0x9e,0x85,0x80,0x41,0x9d,0xa8,0x00,0x41,
+0x9d,0xa9,0x00,0x41,0x9d,0xa7,0x00,0x41,0x9e,0xbd,0x00,0x00,0x90,0x02,0x84,0xef,
+0xf0,0xa3,0xee,0xf0,0xa3,0x74,0x05,0xf0,0x22,0xfd,0x7f,0x81,0xd3,0x10,0xaf,0x01,
+0xc3,0xc0,0xd0,0x8f,0x82,0x75,0x83,0x00,0xed,0xf0,0x12,0x4f,0x6d,0xd0,0xd0,0x92,
+0xaf,0x22,0xe4,0x90,0x9e,0xb9,0xf0,0x90,0x00,0x80,0xe0,0x44,0x80,0xfd,0x7f,0x80,
+0x80,0xda,0x8f,0x82,0x8e,0x83,0xa3,0xa3,0xa3,0xe4,0xf0,0x22,0x12,0x4f,0x49,0x02,
+0x4f,0x7d,0x22,0x02,0x6a,0xe7,0x02,0x6a,0xee,0xef,0x8e,0xf0,0x71,0xad,0x45,0x26,
+0x00,0x40,0x45,0x4e,0x00,0x80,0x45,0x79,0x01,0x00,0x45,0x8d,0x02,0x00,0x45,0xa5,
+0x04,0x00,0x00,0x00,0x45,0xc2,0xed,0x54,0x3f,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,
+0x00,0x7f,0x40,0xef,0x2d,0xff,0xee,0x3c,0xfe,0xef,0x78,0x06,0xce,0xc3,0x13,0xce,
+0x13,0xd8,0xf9,0x78,0x06,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0x80,0x26,0xed,0x54,
+0x7f,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,0x00,0x7f,0x80,0xef,0x2d,0xff,0xee,0x3c,
+0xfe,0xef,0x78,0x07,0xce,0xc3,0x13,0xce,0x13,0xd8,0xf9,0x78,0x07,0xc3,0x33,0xce,
+0x33,0xce,0xd8,0xf9,0xfd,0xac,0x06,0x80,0x49,0xed,0x70,0x04,0xfe,0xff,0x80,0x04,
+0x7e,0x01,0x7f,0x00,0xef,0x2d,0xee,0x3c,0x7d,0x00,0xfc,0x80,0x35,0xec,0x54,0x01,
+0x4d,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,0x02,0x7f,0x00,0xef,0x2d,0xee,0x3c,0xc3,
+0x13,0x7d,0x00,0x80,0x1a,0xec,0x54,0x03,0x4d,0x70,0x04,0xfe,0xff,0x80,0x04,0x7e,
+0x04,0x7f,0x00,0xef,0x2d,0xee,0x3c,0x13,0x13,0x54,0x3f,0x7d,0x00,0x25,0xe0,0x25,
+0xe0,0xfc,0xae,0x04,0xaf,0x05,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0x90,
+0x9e,0x71,0xf0,0xa3,0x74,0x08,0xf0,0xa3,0xf0,0x90,0x01,0x1f,0xe0,0xfe,0x90,0x01,
+0x1e,0xe0,0x7c,0x00,0x24,0x00,0xff,0xec,0x3e,0x90,0x9e,0x6b,0xf0,0xa3,0xef,0xf0,
+0x90,0x02,0x87,0xe0,0x90,0x9e,0x70,0xf0,0x90,0x9e,0xc1,0xe0,0x20,0xe0,0x02,0xe1,
+0x3b,0xe4,0x90,0x9e,0x6f,0xf0,0x90,0x9e,0x70,0xe0,0xff,0x90,0x9e,0x6f,0xe0,0xc3,
+0x9f,0x40,0x02,0xe1,0x3b,0x90,0x9e,0x6b,0xe0,0xfc,0xa3,0xe0,0xfd,0xec,0x90,0xfd,
+0x11,0xf0,0x74,0x02,0x2d,0xf5,0x82,0xe4,0x34,0xfb,0xf5,0x83,0xe0,0x54,0x0f,0xfc,
+0x33,0x33,0x33,0x54,0xf8,0xff,0xed,0x24,0x18,0x2f,0x90,0x9e,0x6d,0xf0,0xe0,0x24,
+0x00,0xf5,0x82,0xe4,0x34,0xfb,0xf5,0x83,0xe0,0x54,0xfc,0x90,0x9e,0x6e,0xf0,0x74,
+0x01,0x2d,0xf5,0x82,0xe4,0x34,0xfb,0xf5,0x83,0xe0,0xfe,0x74,0x00,0x2d,0xf5,0x82,
+0xe4,0x34,0xfb,0xf5,0x83,0xe0,0x7a,0x00,0x24,0x00,0xff,0xea,0x3e,0x54,0x3f,0xab,
+0x07,0xfa,0xaf,0x04,0xef,0x75,0xf0,0x08,0xa4,0x24,0x18,0xff,0xe4,0x35,0xf0,0xfe,
+0xef,0x2b,0xfb,0xee,0x3a,0xfa,0x90,0x9e,0xc5,0xe0,0xfe,0xa3,0xe0,0xff,0xad,0x03,
+0xac,0x02,0xb1,0x09,0xaa,0x06,0xab,0x07,0x90,0x9e,0x6b,0xee,0x8f,0xf0,0x51,0x54,
+0x90,0x9e,0xc7,0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x9e,0x6b,0xe0,0xfc,0xa3,0xe0,0xfd,
+0xd3,0x9f,0xec,0x9e,0x40,0x1b,0x90,0x9e,0xc8,0xe0,0x24,0x01,0xff,0x90,0x9e,0xc7,
+0xe0,0x34,0x00,0xfe,0xc3,0xed,0x9f,0xff,0xec,0x9e,0x90,0x9e,0x6b,0xf0,0xa3,0xef,
+0xf0,0x90,0x9e,0x6e,0xe0,0xff,0x24,0x40,0x60,0x04,0x24,0x20,0x70,0x2b,0x90,0x9e,
+0xc9,0xe0,0xfe,0xc4,0x13,0x13,0x13,0x54,0x01,0x30,0xe0,0x26,0xef,0x90,0x00,0x81,
+0xb4,0xa0,0x05,0xe0,0x44,0x04,0x80,0x03,0xe0,0x44,0x08,0xfd,0x7f,0x81,0x91,0xcc,
+0x90,0x9e,0xc1,0xe0,0x44,0x80,0xf0,0x80,0x09,0x90,0x9e,0xc9,0xe0,0xc4,0x13,0x13,
+0x54,0x03,0x90,0x9e,0xc1,0xe0,0xff,0xc4,0x13,0x13,0x13,0x54,0x01,0x30,0xe0,0x03,
+0x12,0x92,0x86,0x12,0x95,0x13,0xbf,0x01,0x0a,0x90,0x9e,0x6b,0xe0,0xfe,0xa3,0xe0,
+0xff,0x91,0xbc,0x90,0x9e,0x6f,0xe0,0x04,0xf0,0xc1,0x06,0xd0,0xd0,0x92,0xaf,0x22,
+0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x8b,0x60,0x8a,0x61,0x89,0x62,0x90,0x9e,0xef,
+0x71,0x7e,0xab,0x63,0xaa,0x64,0xa9,0x65,0x90,0x9e,0xf2,0x71,0x7e,0xaf,0x66,0x15,
+0x66,0xef,0x60,0x1b,0x90,0x9e,0xf2,0xe4,0x75,0xf0,0x01,0x71,0x67,0x12,0x1f,0x04,
+0xff,0x90,0x9e,0xef,0xe4,0x75,0xf0,0x01,0x71,0x67,0xef,0x51,0x20,0x80,0xde,0xab,
+0x60,0xaa,0x61,0xa9,0x62,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x9e,0xba,0xe0,0xb4,0x01,
+0x04,0x7d,0x91,0x80,0x0c,0x90,0x9e,0xba,0xe0,0x70,0x04,0x7d,0x90,0x80,0x02,0xe4,
+0xfd,0x7f,0x93,0x91,0xcc,0x90,0x00,0x29,0xe0,0x54,0x3f,0xfd,0x7f,0x29,0x91,0xcc,
+0x90,0x00,0x28,0xe0,0x54,0xfc,0xfd,0x7f,0x28,0x91,0xcc,0x90,0x00,0x08,0xe0,0x44,
+0x10,0xfd,0x7f,0x08,0x91,0xcc,0x7f,0x01,0x12,0x78,0xe1,0x90,0x00,0x00,0xe0,0x44,
+0x20,0xfd,0xe4,0xff,0x91,0xcc,0x90,0x00,0x20,0xe0,0x54,0xfe,0xfd,0x7f,0x20,0x91,
+0xcc,0x90,0x00,0x90,0xe0,0x44,0x01,0xfd,0x7f,0x90,0x91,0xcc,0x7f,0x14,0x7e,0x00,
+0x02,0x3b,0x3b,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x04,0x1d,0xe0,0x60,0x1a,
+0x90,0x05,0x22,0xe0,0x54,0x90,0x60,0x07,0x90,0x01,0xc6,0xe0,0x44,0x40,0xf0,0x90,
+0x01,0xc7,0xe0,0x30,0xe1,0xe4,0x7f,0x00,0x80,0x02,0x7f,0x01,0xd0,0xd0,0x92,0xaf,
+0x22,0x90,0x9e,0xb6,0xe0,0xff,0x7d,0x01,0xe4,0xfb,0xfa,0xef,0x30,0xe0,0x02,0x7b,
+0x80,0xef,0xc3,0x13,0x90,0xfd,0x10,0xf0,0x90,0x04,0x25,0xef,0xf0,0xed,0x60,0x0e,
+0x74,0x0f,0x2b,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x80,0xf0,0xaf,0x03,
+0x74,0x08,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe4,0xf0,0x74,0x09,0x2f,0xf5,
+0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf0,0xf0,0x74,0x21,0x2b,0xf5,0x82,0xe4,
+0x34,0xfc,0xf5,0x83,0xe0,0x54,0xf7,0xf0,0xae,0x02,0xaf,0x03,0x22,0x8f,0x25,0x90,
+0x9e,0x86,0xe0,0x30,0xe0,0x39,0x90,0x04,0x1d,0xe0,0x70,0x6a,0x12,0x47,0xf3,0xef,
+0x64,0x01,0x70,0x62,0x11,0x21,0x8e,0x26,0x8f,0x27,0xe5,0x25,0x60,0x10,0x74,0x21,
+0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,0x42,0x74,0x21,
+0x25,0x27,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,0x80,0x31,0x12,
+0x47,0xf3,0xef,0x64,0x01,0x70,0x2f,0x11,0x21,0x8e,0x26,0x8f,0x27,0xe5,0x25,0x60,
+0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,0xf0,0x80,
+0x0f,0x74,0x21,0x25,0x27,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,0xf0,
+0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x90,0x06,0x04,0xe0,0x44,0x40,0xf0,0xe5,0x67,
+0xb4,0x01,0x04,0x7f,0x01,0x11,0x7d,0x53,0x68,0xf0,0x43,0x68,0x04,0x90,0x9e,0xda,
+0xe0,0x30,0xe0,0x07,0x90,0x05,0x27,0xe0,0x44,0x80,0xf0,0x22,0xf0,0x7d,0x01,0x7f,
+0x0c,0x90,0x9f,0x0e,0xed,0xf0,0x90,0x9f,0x0d,0xef,0xf0,0x54,0x0f,0xff,0xe5,0x68,
+0x54,0x0f,0x6f,0x60,0x6d,0x90,0x9f,0x0d,0xe0,0x30,0xe2,0x28,0xe5,0x68,0x20,0xe2,
+0x04,0x7f,0x01,0xf1,0x30,0xe5,0x68,0x30,0xe3,0x09,0x90,0x9f,0x0d,0xe0,0x20,0xe3,
+0x02,0x80,0xa4,0xe5,0x68,0x20,0xe3,0x4a,0x90,0x9f,0x0d,0xe0,0x30,0xe3,0x43,0xa3,
+0xe0,0xff,0xe1,0xb4,0xe5,0x68,0x54,0x0f,0xff,0xbf,0x0c,0x0f,0x90,0x9f,0x0d,0xe0,
+0x20,0xe3,0x08,0x12,0x77,0xa3,0xef,0x60,0x29,0x11,0xf7,0xe5,0x68,0x54,0x0f,0xff,
+0xbf,0x04,0x0f,0x90,0x9f,0x0d,0xe0,0x20,0xe2,0x08,0x12,0x77,0xec,0xef,0x60,0x12,
+0xf1,0x91,0xe5,0x68,0x54,0x0f,0xff,0xbf,0x02,0x08,0x12,0x78,0x6b,0xef,0x60,0x02,
+0xf1,0x1d,0x22,0xe4,0x90,0x9e,0x5a,0xf0,0x90,0x9e,0x86,0xe0,0x20,0xe0,0x02,0x81,
+0x06,0x90,0x9e,0x8c,0xe0,0x64,0x01,0x70,0x5c,0x90,0x9e,0x89,0xe0,0x30,0xe0,0x19,
+0xe0,0xc3,0x13,0x30,0xe0,0x02,0x80,0x0b,0x90,0x9e,0x89,0xe0,0x13,0x13,0x54,0x3f,
+0x30,0xe0,0x06,0xa3,0xe0,0x90,0x9e,0x5a,0xf0,0xe4,0xf5,0x48,0x90,0x9e,0x5a,0xe0,
+0x24,0x03,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x60,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,
+0x63,0x74,0x05,0xf0,0x90,0x9e,0x8c,0xe0,0x04,0xf0,0x90,0x9e,0x86,0xe0,0xc4,0x13,
+0x54,0x07,0x30,0xe0,0x02,0x81,0x06,0x90,0x9e,0x86,0xe0,0xc4,0x54,0x0f,0x20,0xe0,
+0x02,0x61,0xa5,0x61,0x9d,0x90,0x9e,0x8c,0xe0,0x64,0x02,0x60,0x02,0x41,0xc1,0x90,
+0x07,0x78,0x04,0xf0,0x90,0x9e,0x89,0xe0,0x30,0xe0,0x20,0xe0,0xc3,0x13,0x30,0xe0,
+0x02,0x80,0x0b,0x90,0x9e,0x89,0xe0,0x13,0x13,0x54,0x3f,0x30,0xe0,0x0d,0xa3,0xe0,
+0x90,0x9e,0x5a,0xf0,0x90,0x9e,0x89,0xe0,0x54,0xfb,0xf0,0xe4,0xf5,0x48,0x90,0x9e,
+0x87,0xe0,0xff,0xc3,0x74,0x2e,0x9f,0xff,0x90,0x9e,0x5a,0xe0,0xfe,0xc3,0xef,0x9e,
+0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x60,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x63,0x74,
+0x05,0xf0,0x90,0x9e,0x86,0xe0,0xff,0xc3,0x13,0x90,0x9e,0x56,0x30,0xe0,0x09,0x12,
+0x1f,0xe3,0x00,0x00,0x03,0x00,0x80,0x07,0x12,0x1f,0xe3,0x00,0x00,0x03,0x10,0x91,
+0x07,0xe4,0x90,0x9e,0x8b,0xf0,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x86,0xe0,0xc4,0x13,
+0x54,0x07,0x30,0xe0,0x02,0x81,0x00,0x90,0x9e,0x86,0xe0,0xc4,0x54,0x0f,0x30,0xe0,
+0x02,0x80,0x06,0xe5,0x6a,0x70,0x02,0x81,0x00,0xe4,0xfd,0xaf,0x69,0x31,0x21,0x81,
+0x00,0x90,0x9e,0x8c,0xe0,0x64,0x03,0x60,0x02,0x61,0x66,0x90,0x9e,0x86,0xe0,0xc4,
+0x13,0x13,0x54,0x03,0x90,0x07,0x78,0x30,0xe0,0x05,0x74,0x0d,0xf0,0x80,0x03,0x74,
+0x09,0xf0,0xe4,0xf5,0x48,0x90,0x9e,0x88,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x60,
+0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x63,0x74,0x05,0xf0,0x90,0x9e,0x56,0x12,0x1f,
+0xe3,0x00,0x00,0x03,0x10,0x91,0x07,0x90,0x9e,0x8b,0x74,0x01,0xf0,0xa3,0xe0,0x04,
+0xf0,0x90,0x9e,0x86,0xe0,0xc4,0x13,0x54,0x07,0x20,0xe0,0x1f,0x90,0x9e,0x86,0xe0,
+0xc4,0x54,0x0f,0x30,0xe0,0x0b,0x90,0x05,0x22,0xe4,0xf0,0x7d,0x01,0x7f,0x0c,0x80,
+0x08,0xe5,0x6a,0x60,0x06,0xe4,0xfd,0x7f,0x04,0x31,0x21,0x90,0x05,0x22,0xe4,0xf0,
+0x90,0x9e,0x96,0xe0,0x60,0x02,0x81,0x00,0x90,0x9e,0x86,0xe0,0xc4,0x13,0x54,0x07,
+0x30,0xe0,0x02,0x81,0x06,0x90,0x9e,0x86,0xe0,0xff,0x13,0x13,0x54,0x3f,0x20,0xe0,
+0x02,0x81,0x06,0x02,0x64,0x90,0x90,0x9e,0x8c,0xe0,0x64,0x04,0x70,0x3e,0xf5,0x48,
+0x75,0x49,0x03,0xfb,0xfd,0x7f,0x60,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x63,0x74,
+0x05,0xf0,0x90,0x9e,0x8c,0xe0,0x04,0xf0,0x90,0x9e,0x86,0xe0,0xc4,0x13,0x54,0x07,
+0x20,0xe0,0x73,0x90,0x9e,0x86,0xe0,0xc4,0x54,0x0f,0x30,0xe0,0x08,0xe4,0xfd,0x7f,
+0x04,0x31,0x21,0x80,0x5b,0x90,0x05,0x22,0x74,0xff,0xf0,0x22,0x90,0x9e,0x8c,0xe0,
+0x64,0x05,0x70,0x52,0x90,0x07,0x78,0x04,0xf0,0x90,0x9e,0x86,0xe0,0xff,0xc3,0x13,
+0x90,0x9e,0x56,0x30,0xe0,0x09,0x12,0x1f,0xe3,0x00,0x00,0x03,0x00,0x80,0x07,0x12,
+0x1f,0xe3,0x00,0x00,0x03,0x10,0x91,0x07,0xe4,0x90,0x9e,0x8b,0xf0,0xa3,0xf0,0x90,
+0x9e,0x86,0xe0,0xc4,0x13,0x54,0x07,0x20,0xe0,0x16,0x90,0x9e,0x86,0xe0,0xc4,0x54,
+0x0f,0x30,0xe0,0x02,0x80,0x04,0xe5,0x6a,0x60,0x06,0xe4,0xfd,0xaf,0x69,0x31,0x21,
+0x90,0x05,0x22,0x74,0x6f,0xf0,0x22,0x7b,0x01,0x7a,0x9e,0x79,0x56,0x7f,0x70,0x7e,
+0x08,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0x54,0xfc,0xff,0x90,0x01,0xe8,0xf0,
+0xee,0x44,0xf0,0xa3,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0x01,0xec,0xf0,0x90,
+0x00,0x02,0x12,0x1f,0x1d,0x90,0x01,0xed,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,
+0x01,0xee,0xf0,0x12,0x1f,0x04,0x90,0x01,0xef,0xf0,0x90,0x01,0xeb,0x74,0x40,0xf0,
+0x12,0x8e,0xd6,0xd0,0xd0,0x92,0xaf,0x22,0xef,0x64,0x01,0x70,0x32,0x7d,0x78,0x7f,
+0x02,0x12,0x3a,0x54,0x7d,0x02,0x7f,0x03,0x12,0x3a,0x54,0x90,0x01,0x57,0xe4,0xf0,
+0x90,0x01,0x3c,0x74,0x02,0x31,0x1c,0x90,0x9e,0xda,0xe0,0x30,0xe0,0x02,0xd1,0x27,
+0x90,0x06,0x04,0xe0,0x54,0x7f,0xf0,0x90,0x06,0x0a,0xe0,0x54,0xf8,0xf0,0x22,0x90,
+0x01,0x36,0x74,0x78,0xf0,0xa3,0x74,0x02,0xf0,0x7d,0x78,0xff,0x12,0x3a,0xc5,0x7d,
+0x02,0x7f,0x03,0x12,0x3a,0xc5,0x90,0x06,0x04,0xe0,0x44,0x80,0xf0,0x90,0x06,0x0a,
+0xe0,0x44,0x07,0xf0,0x12,0x79,0x87,0xe5,0x67,0x30,0xe0,0x21,0x90,0x9e,0x90,0xe0,
+0x70,0x20,0xe0,0x04,0xf0,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x04,0x50,0x06,0x7d,0x01,
+0x7f,0x04,0x31,0x21,0x90,0x9e,0xda,0xe0,0x30,0xe0,0x07,0xc1,0x27,0xe4,0x90,0x9e,
+0x90,0xf0,0x22,0x8b,0x13,0x8a,0x14,0x89,0x15,0x12,0x77,0x6d,0xab,0x13,0xaa,0x14,
+0xa9,0x15,0x12,0x1f,0x04,0xf5,0x6a,0x12,0x43,0x87,0x4d,0x13,0x00,0x4d,0x1b,0x01,
+0x4d,0x2e,0x02,0x4d,0x42,0x03,0x4d,0x48,0x04,0x4d,0x5f,0x05,0x4d,0x77,0x06,0x00,
+0x00,0x4d,0x82,0x7f,0x01,0x91,0x58,0x7f,0x01,0x80,0x64,0xab,0x13,0xaa,0x14,0xa9,
+0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,0xe4,0xff,0xb1,0x92,0x80,0x18,0xab,0x13,
+0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,0x7f,0x01,0xb1,0x92,0x1f,
+0x80,0x04,0xb1,0x83,0xe4,0xff,0x81,0x58,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,
+0x02,0x12,0x1f,0x1d,0xfd,0xe4,0xff,0xb1,0x92,0x91,0x58,0xe4,0xff,0x80,0x20,0xab,
+0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,0x7f,0x01,0xb1,0x92,
+0x1f,0x91,0x58,0xe4,0xff,0x80,0x08,0xb1,0x83,0xe4,0xff,0x91,0x58,0xe4,0xff,0x12,
+0x77,0x79,0x22,0xab,0x13,0xaa,0x14,0xa9,0x15,0x90,0x00,0x02,0x12,0x1f,0x1d,0xfd,
+0x7f,0x02,0xef,0x24,0xfe,0x60,0x12,0x04,0x70,0x2f,0x90,0x9e,0x9d,0x74,0x01,0xf0,
+0x90,0x9e,0x8e,0xf0,0x90,0x9e,0xa0,0xf0,0x22,0xed,0x70,0x0a,0x90,0x9e,0x9a,0xe0,
+0x90,0x9e,0x9d,0xf0,0x80,0x05,0x90,0x9e,0x9d,0xed,0xf0,0x90,0x9e,0x9d,0xe0,0x90,
+0x9e,0x8e,0xf0,0x90,0x9e,0xa0,0x74,0x01,0xf0,0x22,0x90,0x9e,0xda,0xe0,0x30,0xe0,
+0x04,0xaf,0x69,0x80,0x2f,0x7d,0x01,0xaf,0x69,0x21,0x21,0x11,0xf7,0x90,0x9e,0xdb,
+0x74,0x01,0xf0,0x22,0x90,0x9e,0x43,0xe0,0xc3,0x13,0x30,0xe0,0x16,0xef,0x7b,0x01,
+0xb4,0x01,0x06,0x7a,0x9e,0x79,0x4a,0x80,0x04,0x7a,0x9e,0x79,0x46,0x7f,0x80,0x7e,
+0x08,0x91,0x11,0x22,0xae,0x07,0xe4,0xff,0xd1,0x6c,0xef,0x60,0x17,0x90,0x9e,0xda,
+0xe0,0xc4,0x13,0x13,0x54,0x03,0x20,0xe0,0x0b,0xaf,0x06,0x7d,0x01,0x31,0x21,0xd1,
+0x27,0x7f,0x01,0x22,0x7f,0x00,0x22,0x90,0x9e,0xdb,0xe0,0x64,0x06,0x60,0x3c,0xe5,
+0x68,0x54,0x0f,0x14,0x60,0x2e,0x14,0x60,0x1e,0x24,0xfe,0x60,0x0e,0x24,0xf8,0x70,
+0x2a,0xe4,0x90,0x9e,0xdb,0xf0,0x90,0x05,0x22,0xf0,0x22,0x90,0x9e,0xdb,0x74,0x01,
+0xf0,0x90,0x05,0x22,0xe4,0xf0,0x22,0x90,0x9e,0xdb,0x74,0x03,0xf0,0x90,0x05,0x22,
+0x74,0xff,0xf0,0x22,0x90,0x01,0xc6,0xe0,0x44,0x08,0xf0,0x22,0x8f,0x6e,0x90,0x05,
+0x43,0xe0,0x7f,0x00,0x30,0xe7,0x02,0x7f,0x01,0x22,0xe4,0x90,0x9f,0x1b,0xf0,0xe5,
+0x6a,0x70,0x02,0xe1,0x1c,0xe5,0x67,0x64,0x01,0x60,0x02,0xe1,0x1c,0xe5,0x6a,0x14,
+0x60,0x28,0x24,0xfd,0x60,0x24,0x24,0x02,0x24,0xfb,0x50,0x02,0x80,0x22,0xe4,0x90,
+0x9e,0x8e,0xf0,0xe0,0x60,0x04,0xa3,0xe0,0x60,0x16,0x90,0x9e,0x8e,0xe0,0x70,0x0a,
+0x90,0x9e,0x9d,0xe0,0x90,0x9e,0x8e,0xf0,0x80,0x00,0x90,0x9f,0x1b,0x74,0x01,0xf0,
+0x90,0x9e,0xda,0xe0,0x30,0xe0,0x15,0xa3,0xe0,0xb4,0x06,0x05,0xe4,0x90,0x9f,0x1b,
+0xf0,0xe4,0xff,0xd1,0x6c,0xef,0x70,0x04,0x90,0x9f,0x1b,0xf0,0x90,0x9f,0x1b,0xe0,
+0x60,0x3a,0x43,0x6b,0x10,0xe4,0xf5,0x48,0x90,0x9e,0x99,0xe0,0xf5,0x49,0xe4,0xfb,
+0xfd,0x7f,0x54,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x68,
+0x54,0x0f,0xc3,0x94,0x04,0x50,0x06,0x7d,0x01,0x7f,0x04,0x31,0x21,0x90,0x9e,0xda,
+0xe0,0x30,0xe0,0x08,0xd1,0x27,0x90,0x05,0x22,0x74,0xff,0xf0,0x22,0x53,0x68,0xf0,
+0x43,0x68,0x01,0x12,0x47,0x8a,0x12,0x79,0x39,0x53,0x68,0xf0,0x43,0x68,0x02,0x22,
+0x90,0x9f,0x1a,0xef,0xf0,0xf1,0x49,0x90,0x9f,0x1a,0xe0,0x60,0x05,0x90,0x05,0x22,
+0xe4,0xf0,0x53,0x68,0xf0,0x43,0x68,0x04,0x22,0x90,0x01,0x01,0xe0,0x44,0x02,0xf0,
+0x90,0x01,0x00,0x74,0xff,0xf0,0x90,0x00,0x02,0xe0,0x44,0x01,0xf0,0xf1,0x6d,0x90,
+0x01,0xba,0xe4,0xf0,0x22,0xf4,0xff,0x90,0x00,0x63,0xe0,0x5f,0xf0,0xd3,0x10,0xaf,
+0x01,0xc3,0xc0,0xd0,0x7f,0x10,0xdf,0xfe,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x05,0x22,
+0x74,0x6f,0xf0,0x90,0x05,0x27,0xe0,0x54,0xbf,0xf0,0x90,0x9e,0xe1,0x74,0x03,0xf0,
+0x22,0x90,0x01,0x37,0x74,0x02,0xf0,0x12,0x8f,0xd5,0xef,0x70,0x06,0x90,0x01,0xc8,
+0x74,0xfd,0xf0,0x7d,0x02,0x7f,0x03,0x12,0x3a,0xc5,0x12,0x57,0x64,0x53,0x68,0xf0,
+0x43,0x68,0x02,0x22,0x90,0x06,0x04,0xe0,0x54,0xbf,0xf0,0xef,0x60,0x09,0xe5,0x67,
+0xb4,0x01,0x04,0xe4,0xff,0x11,0x7d,0x53,0x68,0xf0,0x43,0x68,0x0c,0x90,0x9e,0xda,
+0xe0,0x30,0xe0,0x07,0x90,0x05,0x27,0xe0,0x54,0x7f,0xf0,0x22,0x80,0x9f,0x12,0x57,
+0x90,0x80,0x9a,0xf1,0x49,0x90,0x9e,0xe1,0x74,0x04,0xf0,0x22,0xf1,0x91,0x90,0x9e,
+0xdb,0x74,0x03,0xf0,0x22,0xf1,0x30,0x90,0x9e,0xdb,0x74,0x01,0xf0,0x22,0x12,0x47,
+0xf3,0xbf,0x01,0x10,0x90,0x02,0x09,0xe0,0xff,0x7d,0x01,0x12,0x48,0x28,0x90,0x04,
+0x1f,0x74,0x20,0xf0,0x22,0x75,0x28,0x33,0xe4,0xf5,0x29,0x75,0x2a,0x07,0xf5,0x2b,
+0x90,0x01,0x30,0xe5,0x28,0xf0,0xa3,0xe5,0x29,0xf0,0xa3,0xe5,0x2a,0xf0,0xa3,0xe5,
+0x2b,0xf0,0x22,0xe4,0x90,0x9e,0x68,0xf0,0xa3,0xf0,0x12,0x60,0xb4,0x75,0x8e,0x02,
+0x12,0x44,0xe2,0x12,0x60,0x0b,0x90,0x9e,0xba,0xef,0xf0,0x12,0x60,0x1e,0x90,0x9e,
+0xbc,0xef,0xf0,0x12,0x60,0x2a,0x90,0x9e,0xa1,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xf5,
+0x57,0x12,0x82,0x34,0x12,0x77,0x03,0x12,0x37,0x4e,0x31,0x3d,0x11,0x15,0x12,0x60,
+0x42,0x12,0x60,0x57,0xf1,0xe8,0x12,0x45,0x02,0x12,0x60,0xbc,0x12,0x94,0x02,0x31,
+0x25,0x90,0x9e,0x6a,0xe5,0xd9,0xf0,0x12,0x5f,0xdc,0xc2,0xaf,0x90,0x00,0x80,0xe0,
+0x44,0x40,0xf0,0x12,0x4f,0x6d,0x75,0xe8,0x03,0x43,0xa8,0x85,0x12,0x8e,0x27,0xd2,
+0xaf,0x12,0x84,0x56,0x12,0x60,0x5e,0x90,0x9e,0x68,0xe0,0x64,0x01,0xf0,0x24,0x33,
+0x90,0x01,0xc4,0xf0,0x74,0x50,0xa3,0xf0,0xe5,0x57,0x30,0xe0,0x0a,0xc2,0xaf,0x53,
+0x57,0xfe,0x12,0x95,0x34,0xd2,0xaf,0xe5,0x57,0x30,0xe2,0x10,0x12,0x6a,0xf5,0xbf,
+0x01,0x0a,0xc2,0xaf,0x53,0x57,0xfb,0xd2,0xaf,0x12,0x45,0xc7,0xe5,0x57,0x30,0xe4,
+0x0a,0xc2,0xaf,0x53,0x57,0xef,0xd2,0xaf,0x12,0x6b,0x32,0xe5,0x57,0x30,0xe6,0x0a,
+0xc2,0xaf,0x53,0x57,0xbf,0xd2,0xaf,0x12,0x7b,0xd8,0xe5,0x57,0x30,0xe7,0x0a,0xc2,
+0xaf,0x53,0x57,0x7f,0xd2,0xaf,0x12,0x5d,0xe9,0xc2,0xaf,0xe5,0x69,0x54,0x0f,0xff,
+0xbf,0x01,0x0e,0x90,0x9e,0x92,0x74,0x01,0xf0,0x12,0x4d,0xca,0xe4,0x90,0x9e,0x92,
+0xf0,0xd2,0xaf,0x80,0x82,0x90,0x9e,0xbe,0xe0,0x54,0xfe,0xf0,0xe4,0x90,0x9e,0xc0,
+0xf0,0x90,0x9e,0xbe,0xe0,0x54,0x7f,0xf0,0xa3,0x74,0x0a,0xf0,0x22,0x90,0x9e,0xe0,
+0xe0,0x54,0xfe,0xf0,0x54,0xfb,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
+0xa3,0xf0,0x90,0x9e,0xda,0xe0,0x54,0xfe,0xf0,0x54,0xfb,0xf0,0xe4,0xa3,0xf0,0xa3,
+0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,
+0x9e,0x76,0x12,0x43,0x7e,0xe4,0x90,0x9e,0x79,0xf0,0x12,0x1f,0x04,0xc3,0x13,0x20,
+0xe0,0x02,0x41,0xbb,0x90,0x9e,0x76,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0x54,0x02,
+0xfe,0x90,0x9e,0xe0,0xe0,0x54,0xfd,0x4e,0xfe,0xf0,0xef,0x54,0x01,0xff,0xee,0x54,
+0xfe,0x4f,0xff,0xf0,0x12,0x1f,0x04,0xfe,0x54,0x08,0xfd,0xef,0x54,0xf7,0x4d,0xff,
+0x90,0x9e,0xe0,0xf0,0xee,0x54,0x10,0xfe,0xef,0x54,0xef,0x4e,0xff,0xf0,0x12,0x1f,
+0x04,0xfe,0x54,0x20,0xfd,0xef,0x54,0xdf,0x4d,0xff,0x90,0x9e,0xe0,0xf0,0xee,0x54,
+0x40,0xfe,0xef,0x54,0xbf,0x4e,0xf0,0x20,0xe0,0x02,0x41,0xab,0x31,0x3d,0x90,0x9e,
+0x79,0x74,0x21,0xf0,0x90,0x9e,0x76,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0x13,0x13,
+0x54,0x01,0xfe,0x90,0x9e,0xe0,0xe0,0xfd,0x13,0x13,0x54,0x01,0x6e,0x60,0x31,0xef,
+0x54,0x04,0xff,0xed,0x54,0xfb,0x4f,0xf0,0xe0,0x13,0x13,0x54,0x3f,0x30,0xe0,0x15,
+0x90,0x01,0x34,0x74,0x40,0xf0,0xfd,0xe4,0xff,0x12,0x3a,0xc5,0x90,0x9e,0x79,0xe0,
+0x44,0x08,0xf0,0x80,0x0b,0xe4,0x90,0x9e,0xe2,0xf0,0x7d,0x40,0xff,0x12,0x3a,0x54,
+0x90,0x9e,0xe0,0xe0,0xfd,0x13,0x13,0x13,0x54,0x1f,0x30,0xe0,0x07,0x90,0x9e,0x79,
+0xe0,0x44,0x12,0xf0,0xed,0xc4,0x54,0x0f,0x30,0xe0,0x07,0x90,0x9e,0x79,0xe0,0x44,
+0x14,0xf0,0x90,0x9e,0xe0,0xe0,0xc4,0x13,0x54,0x07,0x30,0xe0,0x07,0x90,0x9e,0x79,
+0xe0,0x44,0x80,0xf0,0x90,0x9e,0xe0,0xe0,0xc4,0x13,0x13,0x54,0x03,0x20,0xe0,0x07,
+0x90,0x9e,0x79,0xe0,0x44,0x40,0xf0,0x90,0x9e,0x79,0xe0,0x90,0x05,0x27,0xf0,0x90,
+0x9e,0xe1,0xe0,0x70,0x04,0x7f,0x01,0xd1,0x20,0x90,0x9e,0xe0,0xe0,0xc4,0x13,0x13,
+0x54,0x03,0x30,0xe0,0x04,0x7f,0x03,0x80,0x0e,0x7f,0x01,0x12,0x4e,0x6c,0xef,0x60,
+0x04,0x7f,0x01,0x80,0x02,0x7f,0x02,0xd1,0x20,0x81,0x0e,0x90,0x9e,0x79,0x74,0x01,
+0xf0,0x90,0x05,0x27,0xf0,0xe4,0xff,0xd1,0x20,0x81,0x0c,0x90,0x9e,0x76,0x12,0x43,
+0x5e,0x12,0x1f,0x04,0xff,0x54,0x02,0xfe,0x90,0x9e,0xda,0xe0,0x54,0xfd,0x4e,0xfe,
+0xf0,0xef,0x54,0x01,0xff,0xee,0x54,0xfe,0x4f,0xff,0xf0,0x12,0x1f,0x04,0xfe,0x54,
+0x08,0xfd,0xef,0x54,0xf7,0x4d,0xff,0x90,0x9e,0xda,0xf0,0xee,0x54,0x10,0xfe,0xef,
+0x54,0xef,0x4e,0xff,0xf0,0x12,0x1f,0x04,0x54,0x40,0xfe,0xef,0x54,0xbf,0x4e,0x90,
+0x9e,0xda,0xf0,0x20,0xe0,0x02,0x61,0xdf,0x31,0x3d,0x90,0x9e,0x79,0x74,0x31,0xf0,
+0x90,0x9e,0x76,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0x13,0x13,0x54,0x01,0xfe,0x90,
+0x9e,0xda,0xe0,0xfd,0x13,0x13,0x54,0x01,0x6e,0x60,0x31,0xef,0x54,0x04,0xff,0xed,
+0x54,0xfb,0x4f,0xf0,0xe0,0x13,0x13,0x54,0x3f,0x30,0xe0,0x15,0x90,0x01,0x34,0x74,
+0x40,0xf0,0xfd,0xe4,0xff,0x12,0x3a,0xc5,0x90,0x9e,0x79,0xe0,0x44,0x08,0xf0,0x80,
+0x0b,0xe4,0x90,0x9e,0xdc,0xf0,0x7d,0x40,0xff,0x12,0x3a,0x54,0x90,0x9e,0xda,0xe0,
+0xfd,0x13,0x13,0x13,0x54,0x1f,0x30,0xe0,0x07,0x90,0x9e,0x79,0xe0,0x44,0x02,0xf0,
+0xed,0xc4,0x54,0x0f,0x30,0xe0,0x07,0x90,0x9e,0x79,0xe0,0x44,0x04,0xf0,0x90,0x9e,
+0x79,0xe0,0x54,0x0e,0x60,0x0c,0x90,0x01,0x3e,0x74,0x03,0xf0,0xfd,0x7f,0x02,0x12,
+0x3a,0xdf,0x90,0x9e,0x79,0xe0,0x90,0x05,0x27,0xf0,0x90,0x9e,0xda,0xe0,0xff,0xc4,
+0x13,0x13,0x54,0x03,0x30,0xe0,0x0c,0xa3,0xe0,0x64,0x06,0x60,0x61,0x7f,0x06,0x91,
+0x13,0x80,0x5b,0x90,0x05,0x27,0xe0,0x44,0x40,0xf0,0x90,0x9e,0xdb,0xe0,0xb4,0x06,
+0x19,0x7f,0x01,0x91,0x13,0xe4,0xff,0x12,0x4e,0x6c,0xef,0x60,0x09,0x7d,0x01,0xaf,
+0x69,0x12,0x49,0x21,0x80,0x04,0xf1,0xb6,0x80,0x34,0x12,0x4e,0x27,0x80,0x2f,0x90,
+0x9e,0x79,0x74,0x01,0xf0,0x90,0x05,0x27,0xf0,0x7d,0x03,0x7f,0x02,0x12,0x3a,0x71,
+0x90,0x9e,0xdb,0xe0,0xb4,0x06,0x04,0x7f,0x01,0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,
+0x04,0x04,0xe4,0xff,0x91,0x13,0x12,0x5f,0x5f,0x12,0x4d,0xca,0x31,0x3d,0xd0,0xd0,
+0x92,0xaf,0x22,0x90,0x9e,0xdb,0xe0,0xfe,0x6f,0x70,0x02,0xa1,0xd0,0xef,0x12,0x43,
+0x87,0x54,0x3a,0x00,0x54,0x6f,0x01,0x54,0xaf,0x02,0x54,0xea,0x03,0x55,0x22,0x04,
+0x55,0x5a,0x05,0x55,0x95,0x06,0x00,0x00,0x55,0xd0,0xee,0xb4,0x04,0x04,0x7f,0x01,
+0xa1,0xfc,0x90,0x9e,0xdb,0xe0,0xff,0xb4,0x05,0x02,0xa1,0xd1,0xef,0xb4,0x06,0x06,
+0x7f,0x01,0xb1,0xe6,0x80,0x17,0x90,0x9e,0xdb,0xe0,0xb4,0x03,0x07,0x7f,0x01,0x12,
+0x4f,0xf5,0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,0x02,0x02,0xb1,0xdb,0xc1,0x15,0x90,
+0x9e,0xdb,0xe0,0xb4,0x04,0x06,0x7f,0x01,0xb1,0xfc,0x80,0x09,0x90,0x9e,0xdb,0xe0,
+0xb4,0x05,0x02,0xb1,0xd1,0x90,0x9e,0xdb,0xe0,0x70,0x03,0x02,0x4d,0xdb,0x90,0x9e,
+0xdb,0xe0,0xfe,0xb4,0x06,0x04,0x7f,0x01,0xa1,0xe6,0xee,0xb4,0x03,0x05,0x7f,0x01,
+0x02,0x4f,0xf5,0x90,0x9e,0xdb,0xe0,0x64,0x02,0x60,0x02,0xa1,0xd0,0xa1,0xdb,0x90,
+0x9e,0xdb,0xe0,0xb4,0x04,0x06,0x7f,0x01,0xb1,0xfc,0x80,0x09,0x90,0x9e,0xdb,0xe0,
+0xb4,0x05,0x02,0xb1,0xd1,0x90,0x9e,0xdb,0xe0,0x70,0x05,0x12,0x4d,0xdb,0x80,0x17,
+0x90,0x9e,0xdb,0xe0,0xfe,0xb4,0x06,0x06,0x7f,0x01,0xb1,0xe6,0x80,0x09,0xee,0xb4,
+0x03,0x05,0x7f,0x01,0x12,0x4f,0xf5,0x02,0x8f,0xb4,0x90,0x9e,0xdb,0xe0,0xb4,0x04,
+0x06,0x7f,0x01,0xb1,0xfc,0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,0x05,0x02,0xb1,0xd1,
+0x90,0x9e,0xdb,0xe0,0x70,0x05,0x12,0x4d,0xdb,0x80,0x14,0x90,0x9e,0xdb,0xe0,0xfe,
+0xb4,0x06,0x06,0xe4,0xff,0xb1,0xe6,0x80,0x06,0xee,0xb4,0x02,0x02,0xb1,0xdb,0x02,
+0x4f,0xec,0x90,0x9e,0xdb,0xe0,0xfe,0xb4,0x06,0x06,0xe4,0xff,0xb1,0xe6,0x80,0x14,
+0xee,0xb4,0x03,0x07,0x7f,0x01,0x12,0x4f,0xf5,0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,
+0x02,0x02,0xb1,0xdb,0x90,0x9e,0xdb,0xe0,0xb4,0x01,0x04,0xd1,0x15,0x80,0x09,0x90,
+0x9e,0xdb,0xe0,0xb4,0x05,0x02,0xb1,0xd1,0xe1,0x87,0x90,0x9e,0xdb,0xe0,0xfe,0xb4,
+0x06,0x06,0xe4,0xff,0xb1,0xe6,0x80,0x14,0xee,0xb4,0x03,0x07,0x7f,0x01,0x12,0x4f,
+0xf5,0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,0x02,0x02,0xb1,0xdb,0x90,0x9e,0xdb,0xe0,
+0xb4,0x01,0x04,0xd1,0x15,0x80,0x0b,0x90,0x9e,0xdb,0xe0,0xb4,0x04,0x04,0x7f,0x01,
+0xb1,0xfc,0x02,0x8f,0xa7,0x90,0x9e,0xdb,0xe0,0xb4,0x04,0x06,0x7f,0x01,0xb1,0xfc,
+0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,0x05,0x02,0xb1,0xd1,0x90,0x9e,0xdb,0xe0,0x70,
+0x05,0x12,0x4d,0xdb,0x80,0x17,0x90,0x9e,0xdb,0xe0,0xb4,0x03,0x07,0xe4,0xff,0x12,
+0x4f,0xf5,0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,0x02,0x02,0xb1,0xdb,0x12,0x8f,0xc1,
+0x22,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xdb,0xf0,0x22,0x90,0x05,0x22,0xe4,0xf0,
+0x90,0x9e,0xdb,0x04,0xf0,0x22,0x90,0x05,0x27,0xe0,0x44,0x40,0xf0,0xef,0x60,0x05,
+0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xdb,0x74,0x01,0xf0,0x22,0x90,0x9f,0x1d,0xef,
+0xf0,0x12,0x4f,0x49,0x90,0x9f,0x1d,0xe0,0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,0xe4,
+0x90,0x9e,0xdb,0xf0,0x22,0x7f,0x01,0x12,0x4f,0xb4,0xe4,0x90,0x9e,0xdb,0xf0,0x22,
+0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xe1,0xe0,0x90,0x9f,0x1c,0xf0,0x6f,
+0x70,0x02,0xc1,0xf0,0xef,0x14,0x60,0x3d,0x14,0x60,0x61,0x14,0x70,0x02,0xc1,0xc7,
+0x24,0x03,0x60,0x02,0xc1,0xf0,0x90,0x9f,0x1c,0xe0,0xb4,0x03,0x04,0xf1,0x0c,0xc1,
+0xf0,0x90,0x9f,0x1c,0xe0,0xb4,0x02,0x04,0xf1,0x24,0xc1,0xf0,0x90,0x9f,0x1c,0xe0,
+0xb4,0x04,0x04,0xf1,0x28,0xc1,0xf0,0x90,0x9f,0x1c,0xe0,0x64,0x01,0x60,0x02,0xc1,
+0xf0,0xf1,0x0e,0x80,0x7b,0x90,0x9f,0x1c,0xe0,0xff,0xb4,0x03,0x04,0xf1,0xa3,0x80,
+0x6f,0xef,0xb4,0x02,0x04,0xf1,0x40,0x80,0x67,0x90,0x9f,0x1c,0xe0,0xff,0xb4,0x04,
+0x04,0xf1,0x35,0x80,0x5b,0xef,0x70,0x58,0xf1,0x90,0x80,0x54,0x90,0x9f,0x1c,0xe0,
+0xb4,0x03,0x04,0xf1,0x4e,0x80,0x49,0x90,0x9f,0x1c,0xe0,0xb4,0x01,0x04,0xd1,0xf7,
+0x80,0x3e,0x90,0x9f,0x1c,0xe0,0xb4,0x04,0x04,0xf1,0x2c,0x80,0x33,0x90,0x9f,0x1c,
+0xe0,0x70,0x2d,0xd1,0xf5,0x80,0x29,0x90,0x9f,0x1c,0xe0,0xff,0xb4,0x01,0x05,0x12,
+0x4f,0x7d,0x80,0x1c,0xef,0xb4,0x02,0x05,0x12,0x44,0xfc,0x80,0x13,0x90,0x9f,0x1c,
+0xe0,0xff,0xb4,0x04,0x05,0x12,0x4f,0xdc,0x80,0x06,0xef,0x70,0x03,0x12,0x4f,0xde,
+0xd0,0xd0,0x92,0xaf,0x22,0xf1,0x90,0x12,0x8f,0xd5,0xef,0x70,0x06,0x90,0x01,0xc8,
+0x74,0xfd,0xf0,0xf1,0x64,0x90,0x9e,0xe1,0x74,0x02,0xf0,0x22,0xf1,0xa3,0x7d,0x03,
+0x7f,0x02,0x12,0x3a,0x71,0x90,0x05,0x27,0xe4,0xf0,0xe0,0x54,0xbf,0xf0,0xe4,0x90,
+0x9e,0xe1,0xf0,0x22,0xf1,0x40,0x80,0xe6,0xf1,0x35,0x80,0xe2,0xf1,0x64,0x90,0x9e,
+0xe1,0x74,0x02,0xf0,0x22,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xe1,0x04,0xf0,0x22,
+0x12,0x4f,0x49,0x90,0x05,0x22,0xe4,0xf0,0x90,0x9e,0xe1,0x04,0xf0,0x22,0x90,0x05,
+0x27,0xe0,0x44,0x40,0xf0,0xf1,0x5e,0x90,0x9e,0xe1,0x74,0x02,0xf0,0x22,0x90,0x05,
+0x22,0x74,0xff,0xf0,0x90,0x00,0x02,0xe0,0x54,0xfe,0xf0,0x12,0x4f,0x6d,0x90,0x01,
+0x00,0x74,0x3f,0xf0,0xa3,0xe0,0x54,0xfd,0xf0,0x90,0x05,0x53,0xe0,0x44,0x20,0xf0,
+0x90,0x01,0xba,0x74,0xcc,0xf0,0x22,0xf1,0x5e,0x90,0x9e,0xdb,0x74,0x04,0xf0,0x22,
+0x90,0x01,0x3e,0x74,0x03,0xf0,0xfd,0x7f,0x02,0x12,0x3a,0xdf,0x90,0x9e,0xe1,0x74,
+0x01,0xf0,0x22,0x90,0x05,0x22,0xe4,0xf0,0x90,0x05,0x27,0xe0,0x44,0x40,0xf0,0x90,
+0x9e,0xe1,0x74,0x01,0xf0,0x22,0x90,0x9e,0x90,0xe0,0x60,0x16,0x90,0x9e,0xdb,0xe0,
+0x70,0x04,0x7f,0x05,0x80,0x1f,0x90,0x9e,0xdb,0xe0,0x64,0x01,0x70,0x19,0x7f,0x02,
+0x80,0x13,0x90,0x9e,0xdb,0xe0,0xb4,0x01,0x04,0x7f,0x03,0x80,0x08,0x90,0x9e,0xdb,
+0xe0,0x70,0x04,0x7f,0x04,0x91,0x13,0x22,0x75,0x30,0x1f,0x75,0x31,0x01,0xe4,0xf5,
+0x32,0x43,0x32,0x20,0x90,0x01,0x38,0xe5,0x30,0xf0,0xa3,0xe5,0x31,0xf0,0xa3,0xe5,
+0x32,0xf0,0x22,0x90,0x01,0x30,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,
+0x38,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xfd,0x7f,0x50,0x12,0x44,0xcc,0xe4,0xfd,
+0x7f,0x51,0x12,0x44,0xcc,0xe4,0xfd,0x7f,0x52,0x12,0x44,0xcc,0xe4,0xfd,0x7f,0x53,
+0x02,0x44,0xcc,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,
+0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,
+0x90,0x01,0xc4,0x74,0x33,0xf0,0x74,0x58,0xa3,0xf0,0x90,0x01,0x34,0xe0,0x55,0x28,
+0xf5,0x2c,0x90,0x01,0x36,0xe0,0x55,0x2a,0xf5,0x2e,0xa3,0xe0,0x55,0x2b,0xf5,0x2f,
+0xe5,0x2c,0x20,0xe0,0x02,0x21,0xe9,0x90,0x01,0x34,0x74,0x01,0xf0,0x85,0xd1,0x4d,
+0x85,0xd3,0x4f,0x85,0xd4,0x50,0x85,0xd5,0x51,0x85,0xd6,0x52,0x85,0xd7,0x53,0x85,
+0xd9,0x54,0x85,0xd2,0x4e,0x78,0xac,0x7c,0x9e,0xfd,0x7b,0x00,0x7a,0x00,0x79,0x4d,
+0x7e,0x00,0x7f,0x08,0x12,0x1e,0xde,0x90,0x9e,0xad,0xe0,0xff,0xc4,0x13,0x54,0x01,
+0xfe,0xef,0xc4,0x13,0x13,0x54,0x01,0x6e,0x70,0x02,0x21,0x9b,0x90,0x9e,0xad,0xe0,
+0xff,0xc4,0x13,0x13,0x13,0x54,0x01,0x30,0xe0,0x02,0x21,0x9b,0xef,0x54,0x1f,0xf5,
+0x08,0x90,0x9e,0xae,0xe0,0x54,0x3f,0xf5,0x09,0x90,0x9e,0xb0,0xe0,0x54,0x1f,0xff,
+0xe5,0x08,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0x8f,0xf0,
+0x12,0x42,0x54,0xe5,0x09,0xd3,0x94,0x04,0x40,0x03,0x75,0x09,0x04,0x75,0xf0,0x0a,
+0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x52,0x75,0xf0,0x02,0xe5,0x09,0x12,0x43,0x52,
+0xe0,0xfe,0xa3,0xe0,0xff,0x90,0x9e,0xb0,0xe0,0x54,0x1f,0x2f,0xff,0xe4,0x3e,0xfe,
+0x75,0xf0,0x0a,0xe5,0x08,0x90,0x90,0x00,0x12,0x43,0x52,0x75,0xf0,0x02,0xe5,0x09,
+0x12,0x43,0x52,0xee,0xf0,0xa3,0xef,0xf0,0x90,0x9e,0xad,0xe0,0xc4,0x13,0x13,0x54,
+0x03,0x20,0xe0,0x28,0x90,0x9e,0xb0,0xe0,0x54,0x1f,0xff,0xe5,0x08,0x25,0xe0,0x24,
+0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0x8f,0xf0,0x12,0x42,0x54,0x90,0x9e,
+0xaf,0xe0,0x30,0xe7,0x36,0xaf,0x08,0x12,0x74,0xbb,0x80,0x2f,0x90,0x9e,0xb0,0xe0,
+0x54,0x1f,0xff,0xfd,0xe5,0x08,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,
+0x83,0xe4,0x8d,0xf0,0x12,0x42,0x54,0x90,0x9e,0xaf,0xe0,0xfe,0x30,0xe7,0x0c,0x54,
+0x7f,0xfd,0x8f,0x0d,0xab,0x09,0xaf,0x08,0x12,0x74,0x58,0xe5,0x6a,0x14,0x24,0xfd,
+0x50,0x02,0x80,0x45,0x90,0x9e,0x9e,0xe0,0x60,0x37,0x90,0x01,0x5b,0xe4,0xf0,0x90,
+0x01,0x3c,0x74,0x04,0xf0,0x91,0xb8,0xef,0x64,0x01,0x70,0x2d,0x90,0x9e,0x93,0xe0,
+0xf5,0x48,0x75,0x49,0x00,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,0x01,0x12,0x39,0xa9,0x90,
+0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,0x90,0x9e,0x9c,0xf0,0x80,
+0x08,0x91,0xb8,0xbf,0x01,0x03,0x12,0x4d,0xca,0xe5,0x2c,0x30,0xe1,0x7b,0x90,0x01,
+0x34,0x74,0x02,0xf0,0x90,0xfd,0x10,0x74,0x7f,0xf0,0x90,0x04,0x7f,0xe0,0x54,0x07,
+0xf5,0x55,0x90,0x04,0x7e,0xe0,0x54,0x07,0xf5,0x56,0x65,0x55,0x60,0x5b,0xe4,0xff,
+0x75,0xf0,0x08,0xe5,0x55,0xa4,0x2f,0xf5,0x82,0xe4,0x35,0xf0,0xf5,0x83,0xe5,0x82,
+0x24,0xc0,0xf5,0x82,0xe5,0x83,0x34,0xfc,0xf5,0x83,0xe0,0xfe,0x74,0x58,0x2f,0xf8,
+0xa6,0x06,0x0f,0xbf,0x08,0xda,0x78,0xa3,0x7c,0x9e,0x7d,0x01,0x7b,0x00,0x7a,0x00,
+0x79,0x58,0x7e,0x00,0x7f,0x08,0x12,0x1e,0xde,0x90,0x9e,0xa3,0xe0,0xff,0xc4,0x13,
+0x13,0x54,0x03,0x30,0xe0,0x02,0xb1,0x18,0xe5,0x55,0x24,0x01,0xff,0xef,0x54,0x07,
+0xf5,0x55,0x90,0x04,0x7f,0xf0,0xb5,0x56,0xa5,0xe5,0x2c,0x30,0xe3,0x10,0x90,0x01,
+0x34,0x74,0x08,0xf0,0x90,0x9e,0xc1,0xe0,0x30,0xe0,0x03,0x43,0x57,0x04,0xe5,0x2c,
+0x30,0xe4,0x09,0x90,0x01,0x34,0x74,0x10,0xf0,0x43,0x57,0x10,0xe5,0x2c,0x30,0xe5,
+0x25,0x90,0x01,0xcf,0xe0,0x30,0xe5,0x1e,0xe0,0x54,0xdf,0xf0,0x90,0x01,0x34,0x74,
+0x20,0xf0,0x75,0xa8,0x00,0x75,0xe8,0x00,0x11,0x03,0x90,0x00,0x03,0xe0,0x54,0xfb,
+0xf0,0x12,0x4f,0x6d,0x80,0xfe,0xe5,0x2c,0x30,0xe6,0x06,0x90,0x01,0x34,0x74,0x40,
+0xf0,0xe5,0x2e,0x30,0xe0,0x41,0x90,0x9e,0xbb,0x74,0x01,0xf0,0x90,0x01,0x36,0xf0,
+0x12,0x95,0xd8,0x90,0x9e,0xe0,0xe0,0x30,0xe0,0x0d,0x13,0x13,0x54,0x3f,0x30,0xe0,
+0x06,0x90,0x9e,0xe2,0x74,0x01,0xf0,0x90,0x9e,0xda,0xe0,0xff,0x30,0xe0,0x0d,0x13,
+0x13,0x54,0x3f,0x30,0xe0,0x06,0x90,0x9e,0xdc,0x74,0x01,0xf0,0x12,0x4e,0x7a,0x12,
+0x94,0xbe,0x90,0x9e,0xbb,0xe4,0xf0,0xe5,0x2e,0x30,0xe1,0x60,0x90,0x01,0x36,0x74,
+0x02,0xf0,0x43,0x57,0x40,0x12,0x96,0x30,0x90,0x01,0x02,0xe0,0x54,0x03,0x64,0x01,
+0x70,0x29,0x90,0x01,0x37,0xe0,0x30,0xe0,0x0a,0x74,0x01,0xf0,0x90,0x9e,0xab,0xe4,
+0xf0,0x80,0x18,0x90,0x9e,0xab,0xe0,0x04,0xf0,0xe0,0xc3,0x94,0x0a,0x40,0x0c,0xe4,
+0xf0,0x90,0x04,0x19,0xe0,0x30,0xe0,0x03,0x12,0x4f,0xfe,0x90,0x9e,0xda,0xe0,0x30,
+0xe0,0x0d,0xe4,0xff,0x12,0x4e,0x6c,0xef,0x60,0x05,0x90,0x05,0x22,0xe4,0xf0,0x90,
+0x9e,0xa0,0xe0,0x60,0x07,0x7d,0x02,0x7f,0x02,0x12,0x3a,0x54,0xe5,0x2e,0x30,0xe2,
+0x43,0x90,0x01,0x36,0x74,0x04,0xf0,0x90,0x9e,0xda,0xe0,0x30,0xe0,0x06,0xa3,0xe0,
+0x64,0x06,0x60,0x30,0x12,0x65,0x92,0x90,0x9e,0xa0,0xe0,0x60,0x27,0x90,0x9e,0x9d,
+0xe0,0xff,0x90,0x9e,0x8e,0xe0,0xb5,0x07,0x1b,0x90,0x9e,0x9d,0xe0,0x90,0x05,0x73,
+0xf0,0x90,0x01,0x3f,0x74,0x10,0xf0,0xfd,0x7f,0x03,0x12,0x3a,0xdf,0x7d,0x01,0x7f,
+0x02,0x12,0x3a,0x54,0xe5,0x2e,0x30,0xe3,0x34,0x90,0x01,0x36,0x74,0x08,0xf0,0xe5,
+0x67,0x64,0x01,0x70,0x28,0xe5,0x6a,0x60,0x24,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,
+0x3c,0x74,0x02,0xf0,0x75,0x48,0x00,0x90,0x9e,0x95,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,
+0x7f,0x54,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x57,0x74,0x05,0xf0,0xe5,0x2e,0x30,
+0xe4,0x2b,0x90,0x01,0x36,0x74,0x10,0xf0,0xe5,0x67,0xb4,0x01,0x20,0xe5,0x6a,0x60,
+0x1c,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x9f,0xe4,
+0xf0,0x53,0x6b,0xfd,0xe5,0x6b,0x54,0x07,0x70,0x03,0x12,0x4d,0xca,0xe5,0x2e,0x30,
+0xe5,0x25,0x90,0x01,0x36,0x74,0x20,0xf0,0xe5,0x67,0xb4,0x01,0x1a,0xe5,0x6a,0x60,
+0x16,0x90,0x9e,0x9e,0xe0,0x64,0x02,0x60,0x0b,0xe5,0x68,0x64,0x0c,0x60,0x08,0x12,
+0x64,0x90,0x80,0x03,0x12,0x66,0x76,0xe5,0x2e,0x30,0xe6,0x1b,0x90,0x01,0x36,0x74,
+0x40,0xf0,0xe5,0x67,0xb4,0x01,0x10,0xe5,0x6a,0x60,0x0c,0x53,0x6b,0xfe,0xe5,0x6b,
+0x54,0x07,0x70,0x03,0x12,0x4d,0xca,0xe5,0x2f,0x30,0xe1,0x26,0x90,0x01,0x37,0x74,
+0x02,0xf0,0x90,0x9e,0xda,0xe0,0x30,0xe0,0x17,0xe4,0xff,0x12,0x4e,0x6c,0xef,0x60,
+0x07,0x91,0xd1,0x12,0x4e,0x27,0x80,0x0a,0x90,0x9e,0xdf,0x74,0x01,0xf0,0x80,0x02,
+0x91,0xd1,0x74,0x33,0x04,0x90,0x01,0xc4,0xf0,0x74,0x58,0xa3,0xf0,0xd0,0x07,0xd0,
+0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,
+0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0x90,0x04,0x1a,0xe0,0xf4,0x60,0x03,0x7f,
+0x00,0x22,0x90,0x04,0x1b,0xe0,0x54,0x07,0x64,0x07,0x7f,0x01,0x60,0x02,0x7f,0x00,
+0x22,0x7d,0x02,0x7f,0x03,0x12,0x3a,0x54,0xe5,0x6a,0x14,0x24,0xfd,0x50,0x06,0x24,
+0xfd,0x50,0x24,0x80,0x32,0x90,0x9e,0x86,0xe0,0x20,0xe0,0x2b,0x90,0x9e,0x9e,0xe0,
+0x60,0x06,0x7d,0x01,0x7f,0x0c,0x80,0x1c,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x04,0x50,
+0x16,0x7d,0x01,0x7f,0x04,0x80,0x0d,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x04,0x50,0x07,
+0x7d,0x01,0x7f,0x04,0x12,0x49,0x21,0x22,0x90,0x9e,0x52,0xe0,0x54,0xf0,0x44,0x03,
+0xf0,0x54,0x0f,0x44,0x80,0xf0,0x7b,0x00,0x7a,0x00,0x79,0x58,0x90,0x9e,0xfe,0x12,
+0x43,0x7e,0x0b,0x7a,0x9e,0x79,0x52,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,
+0xfb,0x12,0x43,0x7e,0x90,0x9d,0xa9,0xe0,0xff,0x90,0x9d,0xa8,0xe0,0xb5,0x07,0x07,
+0x7d,0x02,0x7f,0x03,0x12,0x3a,0xdf,0x90,0x9d,0xa8,0xe0,0x70,0x06,0xa3,0xe0,0x64,
+0x09,0x60,0x0b,0x90,0x9d,0xa8,0xe0,0x14,0xff,0xa3,0xe0,0xb5,0x07,0x0d,0xf1,0x05,
+0xef,0x60,0x71,0xb1,0xe9,0x90,0x01,0x3f,0x74,0x02,0xf0,0x90,0x9d,0xa9,0xe0,0x75,
+0xf0,0x0f,0xa4,0x24,0xad,0xf9,0x74,0x9d,0x35,0xf0,0xa8,0x01,0xfc,0x7d,0x01,0x90,
+0x9e,0xfb,0x12,0x43,0x5e,0x7e,0x00,0x7f,0x02,0x12,0x1e,0xde,0x90,0x9d,0xa9,0xe0,
+0x75,0xf0,0x0f,0xa4,0x24,0xaf,0xf9,0x74,0x9d,0x35,0xf0,0xfa,0x7b,0x01,0xc0,0x03,
+0xc0,0x02,0xc0,0x01,0x90,0x9e,0xfe,0x12,0x43,0x5e,0x8b,0x63,0x8a,0x64,0x89,0x65,
+0x90,0x9e,0xfb,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0xc4,0x54,0x0f,0xf5,0x66,0xd0,
+0x01,0xd0,0x02,0xd0,0x03,0x12,0x47,0x40,0x90,0x9d,0xa9,0xe0,0x04,0xf0,0xe0,0xb4,
+0x0a,0x02,0xe4,0xf0,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
+0x90,0x9d,0xa8,0xe0,0x75,0xf0,0x0f,0xa4,0x24,0xad,0xf9,0x74,0x9d,0x35,0xf0,0xfa,
+0x7b,0x01,0xc0,0x02,0xc0,0x01,0xe0,0x75,0xf0,0x0f,0xa4,0x24,0xaf,0xf9,0x74,0x9d,
+0x35,0xf0,0xfa,0x90,0x9e,0xf8,0x12,0x43,0x7e,0xd0,0x01,0xd0,0x02,0xd1,0x43,0x90,
+0x9d,0xa8,0xe0,0x04,0xf0,0xe0,0xb4,0x0a,0x02,0xe4,0xf0,0x90,0x9d,0xa9,0xe0,0xff,
+0x90,0x9d,0xa8,0xe0,0xb5,0x07,0x07,0x7d,0x02,0x7f,0x03,0x12,0x3a,0x71,0xd0,0xd0,
+0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9e,0xf5,0x12,0x43,0x7e,
+0x90,0x9d,0xa7,0xe0,0xff,0x04,0xf0,0x90,0x00,0x01,0xef,0x12,0x42,0x32,0xf1,0x05,
+0xef,0x70,0x02,0xe1,0x00,0x90,0x9e,0xf5,0x12,0x43,0x5e,0x8b,0x63,0x8a,0x64,0x89,
+0x65,0x75,0x66,0x02,0x7b,0x01,0x7a,0x01,0x79,0xa0,0x12,0x47,0x40,0x90,0x9e,0xf8,
+0x12,0x43,0x5e,0x8b,0x63,0x8a,0x64,0x89,0x65,0x90,0x9e,0xf5,0x12,0x43,0x5e,0x12,
+0x1f,0x04,0xff,0xc4,0x54,0x0f,0xf5,0x66,0x7b,0x01,0x7a,0x01,0x79,0xa2,0x12,0x47,
+0x40,0x90,0x01,0xaf,0x74,0xff,0xf0,0x90,0x9e,0xba,0xe0,0x64,0x01,0x70,0x4a,0x90,
+0x9e,0xf5,0x12,0x43,0x5e,0x8b,0x63,0x8a,0x64,0x89,0x65,0x75,0x66,0x02,0x7b,0x01,
+0x7a,0xfd,0x79,0x20,0x12,0x47,0x40,0x90,0x9e,0xf8,0x12,0x43,0x5e,0x8b,0x63,0x8a,
+0x64,0x89,0x65,0x90,0x9e,0xf5,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0xc4,0x54,0x0f,
+0xf5,0x66,0x7b,0x01,0x7a,0xfd,0x79,0x22,0x12,0x47,0x40,0x90,0x9e,0xa1,0xe0,0xfe,
+0xa3,0xe0,0xf5,0x82,0x8e,0x83,0x74,0xff,0xf0,0x90,0x01,0xcb,0xe0,0x64,0x80,0xf0,
+0xd0,0xd0,0x92,0xaf,0x22,0x7f,0xaf,0x7e,0x01,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,
+0x90,0x9f,0x06,0xee,0xf0,0xa3,0xef,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,0x9f,0x06,
+0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x2d,0xc3,0x90,0x9f,0x09,0xe0,
+0x94,0xe8,0x90,0x9f,0x08,0xe0,0x94,0x03,0x40,0x0b,0x90,0x01,0xc6,0xe0,0x44,0x10,
+0xf0,0x7f,0x00,0x80,0x15,0x90,0x9f,0x08,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,
+0x0a,0x7e,0x00,0x12,0x3b,0x3b,0x80,0xc5,0x7f,0x01,0xd0,0xd0,0x92,0xaf,0x22,0x90,
+0x9e,0xdf,0xe0,0xb4,0x01,0x04,0xe4,0xf0,0x91,0xd1,0x22,0x90,0x9e,0xda,0xe0,0xff,
+0xc4,0x13,0x13,0x54,0x03,0x30,0xe0,0x0b,0xa3,0xe0,0x64,0x06,0x60,0x05,0x7f,0x06,
+0x12,0x54,0x13,0x90,0x9e,0xdb,0xe0,0x64,0x06,0x60,0x02,0xf1,0x5f,0x22,0xad,0x07,
+0x90,0x9e,0x56,0xe0,0x54,0xf0,0x44,0x05,0xf0,0x54,0x0f,0x44,0x10,0xf0,0x90,0x9e,
+0x58,0xef,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x58,0x90,0x9e,0xfe,0x12,0x43,0x7e,0x7a,
+0x9e,0x79,0x56,0xa1,0x37,0xad,0x07,0x90,0x9e,0x60,0xe0,0x54,0xf0,0x44,0x07,0xf0,
+0x54,0x0f,0x44,0x10,0xf0,0x90,0x9e,0x62,0xef,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x62,
+0x90,0x9e,0xfe,0x12,0x43,0x7e,0x7a,0x9e,0x79,0x60,0xa1,0x37,0x90,0x01,0x3c,0x74,
+0xff,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x01,0x34,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
+0xfd,0x7f,0x54,0x12,0x44,0xcc,0x7d,0xff,0x7f,0x55,0x12,0x44,0xcc,0x7d,0xff,0x7f,
+0x56,0x12,0x44,0xcc,0x7d,0xff,0x7f,0x57,0x02,0x44,0xcc,0x90,0x00,0xf4,0xe0,0x20,
+0xe3,0x09,0xe0,0x7f,0x01,0x20,0xe2,0x05,0x7f,0x02,0x22,0x7f,0x00,0x22,0x90,0x00,
+0xf3,0xe0,0x7f,0x00,0x30,0xe3,0x02,0x7f,0x01,0x22,0x90,0x9e,0xbc,0xe0,0xb4,0x01,
+0x0c,0x90,0x00,0xf2,0xe0,0x30,0xe7,0x05,0x7e,0xfd,0x7f,0x33,0x22,0x7e,0xfd,0x7f,
+0x2f,0x22,0x90,0x00,0xf3,0xe0,0x30,0xe2,0x0d,0x90,0x05,0x41,0x74,0x10,0xf0,0x90,
+0x05,0x5a,0xf0,0xa3,0xe4,0xf0,0x22,0x90,0x01,0x64,0x74,0x20,0xf0,0x22,0xe4,0x90,
+0x9e,0x6b,0xf0,0xa3,0xf0,0x90,0x01,0x98,0xe0,0x7f,0x00,0x30,0xe4,0x02,0x7f,0x01,
+0xef,0x64,0x01,0x60,0x3e,0xc3,0x90,0x9e,0x6c,0xe0,0x94,0x88,0x90,0x9e,0x6b,0xe0,
+0x94,0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,0x22,0x90,0x9e,0x6b,0xe4,
+0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,0x14,0x7e,0x00,0x12,0x3b,0x3b,0xd3,0x90,0x9e,
+0x6c,0xe0,0x94,0x32,0x90,0x9e,0x6b,0xe0,0x94,0x00,0x40,0xb9,0x90,0x01,0xc7,0xe0,
+0x30,0xe3,0xb2,0x22,0x90,0x01,0x94,0xe0,0x44,0x01,0xf0,0x22,0x90,0x01,0x01,0xe0,
+0x44,0x04,0xf0,0x90,0x01,0x9c,0x74,0x7e,0xf0,0xa3,0x74,0x92,0xf0,0xa3,0x74,0xa0,
+0xf0,0xa3,0x74,0x24,0xf0,0x90,0x01,0x9b,0x74,0x49,0xf0,0x90,0x01,0x9a,0x74,0xe0,
+0xf0,0x90,0x01,0x99,0xe4,0xf0,0x90,0x01,0x98,0x04,0xf0,0x22,0xc0,0xe0,0xc0,0x83,
+0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x7d,0xec,0x90,
+0x01,0xc4,0xed,0xf0,0x74,0x60,0xff,0xa3,0xf0,0x53,0x91,0xef,0x90,0x00,0x51,0xe0,
+0xfe,0x90,0x00,0x55,0xe0,0x5e,0xf5,0x3d,0x90,0x00,0x52,0xe0,0xfe,0x90,0x00,0x56,
+0xe0,0x5e,0xf5,0x3e,0xe5,0x3d,0x30,0xe4,0x06,0x90,0x00,0x55,0x74,0x10,0xf0,0xe5,
+0x3d,0x30,0xe5,0x06,0x90,0x00,0x55,0x74,0x20,0xf0,0xe5,0x3d,0x30,0xe6,0x06,0x90,
+0x00,0x55,0x74,0x40,0xf0,0xe5,0x3d,0x30,0xe7,0x06,0x90,0x00,0x55,0x74,0x80,0xf0,
+0xe5,0x3e,0x30,0xe0,0x06,0x90,0x00,0x56,0x74,0x01,0xf0,0xe5,0x3e,0x30,0xe1,0x06,
+0x90,0x00,0x56,0x74,0x02,0xf0,0xe5,0x3e,0x30,0xe2,0x06,0x90,0x00,0x56,0x74,0x04,
+0xf0,0xe5,0x3e,0x30,0xe3,0x06,0x90,0x00,0x56,0x74,0x08,0xf0,0x90,0x01,0xc4,0xed,
+0xf0,0xa3,0xef,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0xd0,0xd0,0x82,0xd0,0x83,
+0xd0,0xe0,0x32,0xc0,0xe0,0xc0,0xf0,0xc0,0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,
+0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,
+0x90,0x01,0xc4,0x74,0x93,0xf0,0x74,0x61,0xa3,0xf0,0x53,0x91,0xdf,0x90,0x01,0x3c,
+0xe0,0x55,0x30,0xf5,0x34,0xa3,0xe0,0x55,0x31,0xf5,0x35,0xa3,0xe0,0x55,0x32,0xf5,
+0x36,0xa3,0xe0,0x55,0x33,0xf5,0x37,0xe5,0x34,0x30,0xe0,0x06,0x90,0x01,0x3c,0x74,
+0x01,0xf0,0xe5,0x34,0x30,0xe1,0x08,0x90,0x01,0x3c,0x74,0x02,0xf0,0xd1,0x38,0xe5,
+0x34,0x30,0xe2,0x36,0x90,0x01,0x3c,0x74,0x04,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe0,
+0x21,0x75,0x48,0x00,0x90,0x9e,0x93,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x58,0x7e,
+0x01,0x12,0x39,0xa9,0x90,0x01,0x5b,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x01,0xf0,
+0x80,0x08,0x90,0x9e,0x9c,0xe4,0xf0,0x12,0x4d,0xca,0xe5,0x34,0x30,0xe3,0x36,0x90,
+0x01,0x3c,0x74,0x08,0xf0,0x90,0x06,0x92,0xe0,0x30,0xe1,0x21,0x75,0x48,0x00,0x90,
+0x9e,0x93,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,0x01,0x12,0x39,0xa9,0x90,
+0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,0x80,0x08,0x90,0x9e,0x9b,
+0xe4,0xf0,0x12,0x4d,0xca,0xe5,0x34,0x30,0xe4,0x09,0x90,0x01,0x3c,0x74,0x10,0xf0,
+0x12,0x49,0xa3,0xe5,0x34,0x30,0xe5,0x06,0x90,0x01,0x3c,0x74,0x20,0xf0,0xe5,0x35,
+0x30,0xe0,0x18,0x90,0x01,0x3d,0x74,0x01,0xf0,0x90,0x01,0x2f,0xe0,0x44,0x7f,0xf0,
+0x90,0x00,0x83,0xe0,0xf5,0x69,0x91,0x71,0x12,0x4d,0xca,0xe5,0x35,0x30,0xe2,0x0c,
+0x90,0x01,0x3d,0x74,0x04,0xf0,0x53,0x6b,0xfb,0x12,0x4d,0xca,0xe5,0x36,0x30,0xe0,
+0x6d,0x90,0x01,0x3e,0x74,0x01,0xf0,0x90,0x9e,0xe0,0xe0,0x30,0xe0,0x13,0xa3,0xe0,
+0x64,0x03,0x60,0x0d,0x7f,0x01,0x12,0x4e,0x6c,0xef,0x60,0x05,0x7f,0x01,0x12,0x56,
+0x20,0x90,0x9e,0xda,0xe0,0x30,0xe0,0x46,0xe4,0xff,0x12,0x4e,0x6c,0xef,0x60,0x3e,
+0x12,0x5f,0x6b,0x90,0x9e,0xdb,0xe0,0xff,0x64,0x06,0x60,0x32,0xef,0xb4,0x04,0x02,
+0x80,0x07,0x90,0x9e,0xdb,0xe0,0xb4,0x05,0x04,0xe4,0xff,0x80,0x14,0x90,0x9e,0xdb,
+0xe0,0xb4,0x03,0x04,0x7f,0x01,0x80,0x09,0x90,0x9e,0xdb,0xe0,0xb4,0x02,0x05,0x7f,
+0x01,0x12,0x54,0x13,0x7d,0x01,0xaf,0x69,0x12,0x49,0x21,0x12,0x4e,0x27,0xe5,0x36,
+0x30,0xe1,0x3c,0x90,0x01,0x3e,0x74,0x02,0xf0,0x90,0x9e,0xe0,0xe0,0x30,0xe0,0x13,
+0xa3,0xe0,0x64,0x03,0x60,0x0d,0x7f,0x01,0x12,0x4e,0x6c,0xef,0x70,0x05,0x7f,0x02,
+0x12,0x56,0x20,0x90,0x9e,0xda,0xe0,0x30,0xe0,0x15,0xd1,0xbc,0x90,0x9e,0xdb,0xe0,
+0x64,0x06,0x60,0x0b,0xe4,0xff,0x12,0x4e,0x6c,0xef,0x70,0x03,0x12,0x57,0xb6,0xe5,
+0x36,0x30,0xe3,0x09,0x90,0x01,0x3e,0x74,0x08,0xf0,0x43,0x6b,0x04,0xe5,0x36,0x30,
+0xe4,0x06,0x90,0x01,0x3e,0x74,0x10,0xf0,0xe5,0x36,0x30,0xe2,0x76,0x90,0x01,0x3e,
+0x74,0x04,0xf0,0x90,0x07,0x8f,0xe0,0x30,0xe7,0x13,0x74,0x80,0xf0,0x90,0x07,0x95,
+0x74,0x04,0xf0,0xa3,0xe0,0x44,0x04,0xf0,0xe4,0xff,0x12,0x4d,0xe4,0x90,0x07,0x8f,
+0xe0,0x30,0xe6,0x12,0x74,0x40,0xf0,0x90,0x07,0x7c,0xe0,0xb4,0x06,0x08,0x90,0x07,
+0x80,0xe0,0xff,0x12,0x5f,0x8e,0x90,0x07,0x8f,0xe0,0x30,0xe5,0x14,0x74,0x20,0xf0,
+0xe4,0xff,0x12,0x4d,0xe4,0x90,0x07,0x95,0xe0,0x44,0x01,0xf0,0xa3,0xe0,0x44,0x01,
+0xf0,0x90,0x07,0x95,0xe0,0x30,0xe2,0x0d,0x74,0x04,0xf0,0xa3,0xe0,0x54,0xfb,0xf0,
+0x7f,0x01,0x12,0x4d,0xe4,0x90,0x07,0x95,0xe0,0x30,0xe0,0x07,0x74,0x01,0xf0,0xff,
+0x12,0x4d,0xe4,0xe5,0x36,0x30,0xe5,0x06,0x90,0x01,0x3e,0x74,0x20,0xf0,0xe5,0x36,
+0x30,0xe6,0x08,0x90,0x01,0x3e,0x74,0x40,0xf0,0x91,0x90,0xe5,0x36,0x30,0xe7,0x0c,
+0x90,0x01,0x3e,0x74,0x80,0xf0,0x53,0x6b,0xfe,0x12,0x4d,0xca,0xe5,0x37,0x30,0xe1,
+0x09,0x90,0x01,0x3f,0x74,0x02,0xf0,0x43,0x57,0x80,0xe5,0x37,0x30,0xe4,0x1c,0x90,
+0x01,0x3f,0x74,0x10,0xf0,0x12,0x4e,0x7a,0x90,0x9e,0x9d,0xe0,0x90,0x05,0x73,0xf0,
+0x90,0x01,0x36,0x74,0x02,0xf0,0xfd,0xff,0x12,0x3a,0xc5,0x74,0x93,0x04,0x90,0x01,
+0xc4,0xf0,0x74,0x61,0xa3,0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,
+0xd0,0x02,0xd0,0x01,0xd0,0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,
+0x32,0xe5,0x69,0x30,0xe6,0x19,0xe5,0x69,0x54,0x0f,0xff,0x90,0x9e,0x85,0xe0,0xfe,
+0x4f,0x90,0x01,0x2f,0xf0,0xee,0x64,0x80,0x90,0x9e,0x85,0xf0,0x53,0x69,0xbf,0x22,
+0x90,0x9e,0x86,0xe0,0x30,0xe0,0x11,0x90,0x05,0x22,0xe0,0x20,0xe4,0x20,0x12,0x47,
+0xf3,0xef,0x64,0x01,0x70,0x18,0x80,0x06,0x12,0x47,0xf3,0xbf,0x01,0x10,0x90,0x9e,
+0xb5,0xe0,0xff,0xe4,0xfd,0x12,0x48,0x28,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0x90,
+0x06,0xa9,0xe0,0x90,0x9e,0x52,0xf0,0xe0,0x54,0xc0,0x70,0x09,0x53,0x6b,0xfe,0x53,
+0x6b,0xfd,0x12,0x4d,0xca,0x90,0x9e,0x52,0xe0,0x30,0xe6,0x13,0x43,0x6b,0x01,0x90,
+0x9e,0x9e,0xe0,0x64,0x02,0x60,0x04,0x91,0x90,0x80,0x07,0xd1,0x76,0x80,0x03,0x53,
+0x6b,0xfe,0x90,0x9e,0x52,0xe0,0x30,0xe7,0x2a,0x43,0x6b,0x02,0xe4,0xf5,0x48,0x90,
+0x9e,0x95,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x39,0xa9,0x90,
+0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x9f,0x74,0x01,0xf0,0x90,0x9e,0x89,0xe0,0x44,
+0x04,0xf0,0x22,0x53,0x6b,0xfd,0x22,0x90,0x06,0xa9,0xe0,0x90,0x9e,0x52,0xf0,0xe0,
+0x54,0xc0,0x70,0x09,0x53,0x6b,0xfe,0x53,0x6b,0xfd,0x02,0x4d,0xca,0x90,0x9e,0x52,
+0xe0,0x30,0xe6,0x1d,0x90,0x9e,0x8d,0xe0,0x70,0x07,0x43,0x6b,0x01,0x91,0x90,0x80,
+0x13,0x90,0x9e,0x9e,0xe0,0xb4,0x01,0x0c,0x43,0x6b,0x04,0x7f,0x01,0xb1,0xff,0x80,
+0x03,0x53,0x6b,0xfe,0x90,0x9e,0x52,0xe0,0x30,0xe7,0x23,0x43,0x6b,0x02,0xe4,0xf5,
+0x48,0x90,0x9e,0x95,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x54,0x7e,0x01,0x12,0x39,
+0xa9,0x90,0x01,0x57,0x74,0x05,0xf0,0x90,0x9e,0x9f,0x74,0x01,0xf0,0x22,0x53,0x6b,
+0xfd,0x22,0xe5,0x67,0x64,0x01,0x70,0x66,0xe5,0x6a,0x60,0x62,0xe5,0x6a,0x64,0x02,
+0x60,0x06,0xe5,0x6a,0x64,0x05,0x70,0x27,0x90,0x06,0xab,0xe0,0x90,0x9e,0x8e,0xf0,
+0x90,0x06,0xaa,0xe0,0x90,0x9e,0x9d,0xf0,0x90,0x9e,0x8e,0xe0,0x70,0x07,0x90,0x9e,
+0x9d,0xe0,0xff,0x80,0x05,0x90,0x9e,0x8e,0xe0,0xff,0x90,0x9e,0x8e,0xef,0xf0,0x90,
+0x9e,0x90,0xe0,0x60,0x03,0xe0,0x14,0xf0,0xe4,0x90,0x9e,0x8f,0xf0,0x90,0x01,0x57,
+0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x53,0x6b,0xfd,0x53,0x6b,0xef,0xe5,0x6a,0x14,
+0x24,0xfd,0x50,0x06,0x24,0xfd,0x50,0x04,0x80,0x04,0x81,0xbf,0xb1,0x27,0x22,0x8f,
+0x6d,0x12,0x47,0xf3,0xef,0x64,0x01,0x70,0x2e,0x90,0x9e,0xb7,0x12,0x48,0x24,0xe5,
+0x6d,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x44,0x10,
+0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0xef,
+0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xe5,0x6a,0x60,0x39,0x90,0x9e,0x9f,0xe0,
+0x60,0x0d,0xe4,0xf0,0x53,0x6b,0xfd,0xe5,0x6b,0x54,0x07,0x70,0x28,0x80,0x23,0x90,
+0x9e,0x8f,0xe0,0x04,0xf0,0x53,0x6b,0xef,0x90,0x9e,0x94,0xe0,0xff,0x90,0x9e,0x8f,
+0xe0,0xd3,0x9f,0x40,0x0d,0xe5,0x67,0xb4,0x01,0x0b,0xa3,0xe0,0x70,0x07,0xe0,0x04,
+0xf0,0x22,0x12,0x4d,0xca,0x22,0x90,0x01,0x5f,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x08,
+0xf0,0xe4,0xf5,0x48,0x90,0x9e,0x93,0xe0,0xf5,0x49,0xe4,0xfb,0xfd,0x7f,0x5c,0x7e,
+0x01,0x12,0x39,0xa9,0x90,0x01,0x5f,0x74,0x05,0xf0,0x90,0x06,0x92,0x74,0x02,0xf0,
+0x90,0x9e,0x9b,0x14,0xf0,0xe5,0x68,0x54,0x0f,0xc3,0x94,0x0c,0x50,0x0d,0x12,0x49,
+0x1d,0x90,0x9e,0xda,0xe0,0x30,0xe0,0x03,0x12,0x4e,0x27,0x22,0x90,0x01,0x57,0xe0,
+0x60,0x3c,0x90,0x01,0x57,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x02,0xf0,0x90,0x9e,0x9f,
+0xe0,0x60,0x07,0xe4,0xf0,0x53,0x6b,0xfd,0x80,0x24,0x90,0x9e,0x8f,0xe0,0x04,0xf0,
+0x53,0x6b,0xef,0x90,0x9e,0x94,0xe0,0xff,0x90,0x9e,0x8f,0xe0,0xd3,0x9f,0x40,0x0e,
+0xe5,0x67,0xb4,0x01,0x09,0x90,0x9e,0x90,0xe0,0x70,0x03,0xe0,0x04,0xf0,0x90,0x01,
+0x5b,0xe0,0x60,0x10,0x90,0x01,0x5b,0xe4,0xf0,0x90,0x01,0x3c,0x74,0x04,0xf0,0xe4,
+0x90,0x9e,0x9c,0xf0,0x90,0x01,0x5f,0xe0,0x60,0x10,0x90,0x01,0x5f,0xe4,0xf0,0x90,
+0x01,0x3c,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x9b,0xf0,0x22,0xc0,0xe0,0xc0,0xf0,0xc0,
+0x83,0xc0,0x82,0xc0,0xd0,0x75,0xd0,0x00,0xc0,0x00,0xc0,0x01,0xc0,0x02,0xc0,0x03,
+0xc0,0x04,0xc0,0x05,0xc0,0x06,0xc0,0x07,0x53,0x91,0xbf,0x90,0xfd,0x68,0xe0,0x20,
+0xe0,0x03,0x02,0x68,0xe1,0x90,0x01,0xba,0xe0,0x04,0xf0,0x90,0xfd,0x62,0xe0,0x90,
+0x01,0xbc,0xf0,0x90,0xfd,0x63,0xe0,0x90,0x01,0xbd,0xf0,0x90,0xfd,0x60,0xe0,0x90,
+0x01,0xbe,0xf0,0x90,0xfd,0x60,0xe0,0x64,0x0e,0x60,0x03,0x02,0x68,0x22,0x90,0x9e,
+0x43,0xe0,0xff,0x13,0x13,0x13,0x54,0x1f,0x20,0xe0,0x03,0x02,0x68,0x22,0x90,0xfd,
+0x62,0xe0,0x54,0xc0,0xfe,0x90,0x07,0x90,0xe0,0x54,0x3f,0x4e,0xf0,0x90,0xfd,0x63,
+0xe0,0x90,0x07,0x91,0xf0,0x90,0xfd,0x64,0xe0,0x90,0x07,0x92,0xf0,0x90,0xfd,0x65,
+0xe0,0x90,0x07,0x93,0xf0,0x90,0x07,0x95,0x74,0x01,0xf0,0xef,0x20,0xe0,0x44,0x90,
+0x9e,0x43,0xe0,0x13,0x13,0x54,0x3f,0x30,0xe0,0x19,0x90,0x07,0x78,0x12,0x68,0xfc,
+0x90,0x9e,0x43,0xe0,0xff,0xc3,0x13,0x30,0xe0,0x48,0x90,0x07,0x83,0xe0,0x44,0x40,
+0xf0,0x80,0x3f,0x90,0x9e,0x43,0xe0,0xff,0xc3,0x13,0x30,0xe0,0x11,0xe4,0xff,0x12,
+0x4d,0xe4,0x90,0x07,0x95,0xe0,0x44,0x01,0xf0,0xa3,0xe0,0x44,0x01,0xf0,0x90,0x07,
+0x78,0x80,0x13,0x90,0x9e,0x43,0xe0,0xff,0x13,0x13,0x54,0x3f,0x90,0x07,0x78,0x30,
+0xe0,0x04,0x11,0xfc,0x80,0x0c,0xe0,0x44,0x10,0xf0,0xe0,0x44,0x20,0xf0,0xe0,0x54,
+0xdf,0xf0,0x90,0xfd,0x60,0xe0,0xb4,0x0f,0x0a,0x90,0xfd,0x62,0xe0,0xff,0xa3,0xe0,
+0xfd,0x51,0x62,0x90,0xfd,0x60,0xe0,0x64,0x15,0x70,0x64,0x90,0xfd,0x62,0xe0,0x90,
+0x9e,0x5e,0xf0,0x90,0xfd,0x62,0xe0,0x30,0xe0,0x15,0x90,0x9e,0x5e,0xe0,0xf4,0x54,
+0x3f,0x04,0xff,0x90,0x9e,0x4e,0xe0,0x13,0x13,0x54,0x3f,0xc3,0x9f,0x80,0x10,0x90,
+0x9e,0x4e,0xe0,0x13,0x13,0x54,0x3f,0xff,0x90,0x9e,0x5e,0xe0,0x54,0x3f,0x2f,0x90,
+0x9e,0x5d,0xf0,0x90,0x9e,0x5d,0xe0,0xff,0x54,0x30,0xc4,0x54,0x0f,0xfe,0xef,0x25,
+0xe0,0x25,0xe0,0x4e,0x90,0x9e,0x5f,0xf0,0x90,0x00,0x2e,0xf0,0x90,0x9e,0x5d,0xe0,
+0xc4,0x54,0xf0,0xff,0x90,0x9e,0x4f,0xe0,0x54,0x0f,0x4f,0x90,0x00,0x2d,0xf0,0x90,
+0xfd,0x60,0xe0,0xb4,0x16,0x08,0x90,0xfd,0x62,0xe0,0xff,0x12,0x5f,0xb5,0x90,0xfd,
+0x60,0xe0,0xb4,0x21,0x07,0x90,0xfd,0x62,0xe0,0xff,0x31,0xe9,0x90,0xfd,0x60,0xe0,
+0xb4,0x22,0x02,0x51,0x11,0x90,0xfd,0x60,0xe0,0xb4,0x23,0x05,0xa3,0xe0,0xff,0x51,
+0x8d,0x90,0xfd,0x60,0xe0,0xb4,0x24,0x02,0x51,0x39,0x90,0xfd,0x68,0xe0,0x44,0x01,
+0xf0,0xd0,0x07,0xd0,0x06,0xd0,0x05,0xd0,0x04,0xd0,0x03,0xd0,0x02,0xd0,0x01,0xd0,
+0x00,0xd0,0xd0,0xd0,0x82,0xd0,0x83,0xd0,0xf0,0xd0,0xe0,0x32,0xe0,0x54,0xef,0xf0,
+0x90,0xfd,0x63,0xe0,0x54,0x3f,0x25,0xe0,0x25,0xe0,0xff,0x90,0xfd,0x62,0xe0,0x54,
+0x03,0x4f,0x90,0x9e,0x5b,0xf0,0x90,0xfd,0x64,0xe0,0x54,0x3f,0x25,0xe0,0x25,0xe0,
+0xff,0x90,0xfd,0x63,0xe0,0x54,0x03,0x4f,0x90,0x9e,0x5c,0xf0,0x90,0x9e,0x5b,0xe0,
+0xfd,0xa3,0xe0,0xfb,0xe4,0xff,0x90,0x9e,0x60,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0xeb,
+0xf0,0x12,0x47,0xf3,0xef,0x64,0x01,0x60,0x02,0x21,0xe8,0x90,0x9e,0xb8,0x12,0x48,
+0x24,0x90,0x9e,0x60,0xe0,0x60,0x10,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
+0x83,0xe0,0x44,0x10,0xf0,0x80,0x0e,0x74,0x21,0x2f,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
+0x83,0xe0,0x54,0xef,0xf0,0xad,0x07,0x74,0x06,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,
+0x83,0xe0,0x44,0x10,0xf0,0x74,0x11,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,
+0x54,0xef,0xf0,0xad,0x07,0x74,0x16,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,
+0x44,0x02,0xf0,0x74,0x16,0x2d,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x54,0x03,
+0xf0,0x90,0x9e,0x61,0xe0,0xfd,0xac,0x07,0x74,0x22,0x2c,0xf5,0x82,0xe4,0x34,0xfc,
+0xf5,0x83,0xed,0xf0,0x90,0x9e,0x62,0xe0,0xfd,0x74,0x23,0x2c,0xf5,0x82,0xe4,0x34,
+0xfc,0xf5,0x83,0xed,0xf0,0x74,0x24,0x2c,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,
+0x04,0xf0,0x90,0x04,0x1f,0x74,0x20,0xf0,0x22,0xad,0x07,0x90,0x9e,0x60,0xe0,0x54,
+0xf0,0x44,0x09,0xf0,0x54,0x0f,0x44,0x10,0xf0,0x90,0x9e,0x62,0xef,0xf0,0x7b,0x01,
+0x7a,0x9e,0x79,0x62,0x90,0x9e,0xfe,0x12,0x43,0x7e,0x7a,0x9e,0x79,0x60,0x02,0x5d,
+0x37,0x90,0x00,0x75,0xe0,0x44,0x01,0xf0,0x7f,0x01,0x7e,0x00,0x12,0x3a,0xaa,0x90,
+0xfe,0x13,0x74,0x03,0xf0,0x7f,0x02,0x7e,0x00,0x12,0x3a,0xaa,0x90,0xfe,0x13,0xe4,
+0xf0,0x90,0x00,0x75,0xe0,0x54,0xfe,0xf0,0x22,0x90,0x9e,0x60,0xe0,0x54,0xf0,0x44,
+0x0d,0xf0,0x54,0x0f,0x44,0x10,0xf0,0x90,0xfd,0x62,0xe0,0x90,0x9e,0x62,0xf0,0x7b,
+0x01,0x7a,0x9e,0x79,0x62,0x90,0x9e,0xfe,0x12,0x43,0x7e,0x7a,0x9e,0x79,0x60,0x02,
+0x5d,0x37,0xae,0x07,0x90,0x9e,0x60,0xe0,0x54,0xf0,0x44,0x04,0xf0,0x54,0x0f,0x44,
+0x20,0xf0,0x90,0x9e,0x62,0xee,0xf0,0xa3,0xed,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x62,
+0x90,0x9e,0xfe,0x12,0x43,0x7e,0x7a,0x9e,0x79,0x60,0x02,0x5d,0x37,0xad,0x07,0x90,
+0x9e,0x60,0xe0,0x54,0xf0,0x44,0x0c,0xf0,0x54,0x0f,0xf0,0xed,0xb4,0x02,0x08,0xe0,
+0x54,0x0f,0x44,0x20,0xf0,0x80,0x0d,0xed,0xb4,0x04,0x09,0x90,0x9e,0x60,0xe0,0x54,
+0x0f,0x44,0x40,0xf0,0x90,0xfd,0x62,0xe0,0x90,0x9e,0x62,0xf0,0x90,0xfd,0x63,0xe0,
+0x90,0x9e,0x63,0xf0,0x90,0xfd,0x64,0xe0,0x90,0x9e,0x64,0xf0,0x90,0xfd,0x65,0xe0,
+0x90,0x9e,0x65,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0x62,0x90,0x9e,0xfe,0x12,0x43,0x7e,
+0x7a,0x9e,0x79,0x60,0x02,0x5d,0x37,0x8f,0x1f,0x8c,0x20,0x8d,0x21,0x22,0x8f,0x22,
+0x8c,0x23,0x8d,0x24,0x22,0xe4,0x90,0x9e,0x6b,0xf0,0xa3,0xf0,0x90,0x02,0x86,0xe0,
+0x20,0xe1,0x2c,0xc3,0x90,0x9e,0x6c,0xe0,0x94,0xd0,0x90,0x9e,0x6b,0xe0,0x94,0x07,
+0x40,0x0a,0x90,0x01,0xc6,0xe0,0x44,0x20,0xf0,0x7f,0x00,0x22,0x90,0x9e,0x6b,0xe4,
+0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,0x0a,0x7e,0x00,0x12,0x3b,0x3b,0x80,0xcd,0x7f,
+0x01,0x22,0x90,0x01,0xcc,0xe0,0x54,0x0f,0x90,0x9e,0x6b,0xf0,0x90,0x9e,0x6b,0xe0,
+0xfd,0x70,0x02,0x81,0x73,0x90,0x9f,0x19,0xe0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,
+0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xef,0x5d,0x70,0x02,0x81,
+0x6c,0x90,0x9f,0x19,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd0,0x12,0x43,0x52,0xe0,0x90,
+0x9e,0x6c,0xf0,0x75,0x63,0x01,0x75,0x64,0x9e,0x75,0x65,0x6c,0x75,0x66,0x01,0x7b,
+0x01,0x7a,0x9e,0x79,0x6d,0x12,0x47,0x40,0x90,0x9e,0x6d,0xe0,0xff,0xc4,0x13,0x13,
+0x13,0x54,0x01,0x90,0x9f,0x19,0x30,0xe0,0x59,0xe0,0x75,0xf0,0x02,0x90,0x00,0x88,
+0x12,0x43,0x52,0xe0,0x90,0x9e,0x6e,0xf0,0x90,0x9f,0x19,0xe0,0x75,0xf0,0x02,0x90,
+0x00,0x89,0x12,0x43,0x52,0xe0,0x90,0x9e,0x6f,0xf0,0x90,0x9f,0x19,0xe0,0x75,0xf0,
+0x04,0x90,0x01,0xd1,0x12,0x43,0x52,0xe0,0x90,0x9e,0x70,0xf0,0x90,0x9f,0x19,0xe0,
+0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x52,0xe0,0x90,0x9e,0x71,0xf0,0x90,0x9f,
+0x19,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x52,0xe0,0x90,0x9e,0x72,0xf0,
+0x80,0x33,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd1,0x12,0x43,0x52,0xe0,0x90,0x9e,0x6e,
+0xf0,0x90,0x9f,0x19,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd2,0x12,0x43,0x52,0xe0,0x90,
+0x9e,0x6f,0xf0,0x90,0x9f,0x19,0xe0,0x75,0xf0,0x04,0x90,0x01,0xd3,0x12,0x43,0x52,
+0xe0,0x90,0x9e,0x70,0xf0,0xef,0x54,0x7f,0xff,0x7b,0x01,0x7a,0x9e,0x79,0x6e,0x91,
+0x74,0x90,0x9e,0x6b,0xe0,0xff,0x90,0x9f,0x19,0xe0,0xfe,0x74,0x01,0xa8,0x06,0x08,
+0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0x5f,0x90,0x9e,0x6b,0xf0,0x90,0x9f,0x19,0xe0,
+0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x90,0x01,0xcc,0xf0,
+0x90,0x9f,0x19,0xe0,0x04,0xf0,0xe0,0x54,0x03,0xf0,0x61,0x3c,0x90,0x01,0xc6,0xe0,
+0x44,0x02,0xf0,0x22,0x90,0x9e,0x73,0x12,0x43,0x7e,0xef,0x12,0x43,0x87,0x6d,0x0c,
+0x01,0x6d,0x15,0x02,0x6d,0x42,0x03,0x6d,0x4b,0x05,0x6d,0x54,0x06,0x6e,0xad,0x07,
+0x6d,0x5c,0x08,0x6d,0x65,0x10,0x6d,0x6e,0x11,0x6d,0x77,0x12,0x6d,0x80,0x13,0x6d,
+0x89,0x14,0x6d,0x92,0x15,0x6d,0x9b,0x16,0x6d,0xa5,0x17,0x6d,0xaf,0x18,0x6d,0xb9,
+0x19,0x6e,0x82,0x1a,0x6e,0x8b,0x1b,0x6e,0x94,0x1c,0x6d,0xc2,0x1d,0x6d,0xcc,0x1e,
+0x6d,0xd7,0x21,0x6d,0xe0,0x22,0x6d,0xe9,0x23,0x6d,0xf2,0x24,0x6d,0xfb,0x25,0x6e,
+0x04,0x26,0x6e,0x0d,0x27,0x6e,0x16,0x28,0x6e,0x1f,0x29,0x6d,0x1e,0x2d,0x6d,0x27,
+0x2e,0x6e,0x28,0x2f,0x6e,0x9d,0x30,0x6e,0x3a,0x32,0x6e,0x31,0x33,0x6d,0x39,0x34,
+0x6e,0x43,0x36,0x6e,0x4c,0x37,0x6e,0x55,0x38,0x6e,0x5e,0x3a,0x6d,0x30,0x3b,0x6e,
+0x79,0x3c,0x6e,0x67,0x3e,0x6e,0x70,0x3f,0x00,0x00,0x6e,0xa6,0x90,0x9e,0x73,0x12,
+0x43,0x5e,0x02,0x84,0x62,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x84,0x8c,0x90,0x9e,
+0x73,0x12,0x43,0x5e,0x02,0x84,0x92,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x84,0xda,
+0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x85,0x08,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,
+0x85,0x15,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x85,0x30,0x90,0x9e,0x73,0x12,0x43,
+0x5e,0x02,0x84,0x06,0x90,0x9e,0x73,0x12,0x43,0x5e,0xc1,0xae,0x90,0x9e,0x73,0x12,
+0x43,0x5e,0x02,0x51,0x68,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x85,0x78,0x90,0x9e,
+0x73,0x12,0x43,0x5e,0x02,0x85,0xbf,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x85,0xe6,
+0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x86,0x05,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,
+0x86,0x1f,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x86,0xf7,0x90,0x9e,0x73,0x12,0x43,
+0x5e,0x7f,0x01,0x80,0x2f,0x90,0x9e,0x73,0x12,0x43,0x5e,0x7f,0x02,0x80,0x25,0x90,
+0x9e,0x73,0x12,0x43,0x5e,0x7f,0x03,0x80,0x1b,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,
+0x88,0x7c,0x90,0x9e,0x73,0x12,0x43,0x5e,0xe4,0xff,0x80,0x08,0x90,0x9e,0x73,0x12,
+0x43,0x5e,0x7f,0x04,0x02,0x87,0x9a,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x88,0xee,
+0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x89,0x15,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,
+0x89,0x3c,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x89,0x63,0x90,0x9e,0x73,0x12,0x43,
+0x5e,0x02,0x89,0x8a,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x89,0xb1,0x90,0x9e,0x73,
+0x12,0x43,0x5e,0x02,0x89,0xd8,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x8a,0x0f,0x90,
+0x9e,0x73,0x12,0x43,0x5e,0x02,0x8a,0x36,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x8a,
+0x5e,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x8a,0xa1,0x90,0x9e,0x73,0x12,0x43,0x5e,
+0x02,0x8a,0xca,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x8a,0xf3,0x90,0x9e,0x73,0x12,
+0x43,0x5e,0x02,0x8c,0x86,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x8c,0x98,0x90,0x9e,
+0x73,0x12,0x43,0x5e,0x02,0x8c,0xcd,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x8e,0x8a,
+0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x8e,0xb3,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,
+0x94,0x4b,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x92,0xc6,0x90,0x9e,0x73,0x12,0x43,
+0x5e,0x02,0x84,0x4e,0x90,0x9e,0x73,0x12,0x43,0x5e,0x02,0x84,0x35,0x90,0x9e,0x73,
+0x12,0x43,0x5e,0x02,0x94,0xf3,0x90,0x01,0xc6,0xe0,0x44,0x01,0xf0,0x22,0x90,0x00,
+0x04,0x12,0x1f,0x1d,0xff,0x54,0x1f,0xfe,0xef,0x54,0x20,0xc4,0x13,0x54,0x07,0xfd,
+0xaf,0x06,0x90,0x9e,0x76,0xef,0xf0,0xa3,0xed,0xf0,0xa3,0x12,0x43,0x7e,0x90,0x9e,
+0x78,0x12,0x43,0x5e,0x90,0x00,0x03,0x12,0x1f,0x1d,0x54,0xf0,0xc4,0x54,0x0f,0x90,
+0x9e,0x7b,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0x54,0x40,0xc4,0x13,0x13,0x54,0x03,
+0x90,0x9e,0x7c,0xf0,0x90,0x9e,0x76,0xe0,0xff,0x75,0xf0,0x09,0x90,0x96,0x46,0x12,
+0x43,0x52,0xad,0x82,0xac,0x83,0x90,0x9e,0x7d,0xec,0xf0,0xa3,0xed,0xf0,0xef,0x75,
+0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,0xf0,0xfa,0x7b,0x01,0xa3,0x12,0x43,
+0x7e,0x90,0x9e,0x78,0x12,0x43,0x5e,0x90,0x00,0x03,0x12,0x1f,0x1d,0x54,0x0f,0xff,
+0x90,0x9e,0x7f,0x12,0x43,0x5e,0xef,0x12,0x42,0x20,0x90,0x9e,0x78,0x12,0x43,0x5e,
+0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,0x90,0x9e,0x7f,0x12,0x43,0x5e,0x90,0x00,0x01,
+0xef,0x12,0x42,0x32,0x90,0x9e,0x78,0x12,0x43,0x5e,0x90,0x00,0x01,0x12,0x1f,0x1d,
+0xff,0x90,0x9e,0x7d,0xe0,0xfc,0xa3,0xe0,0xfd,0xf5,0x82,0x8c,0x83,0xef,0xf0,0x12,
+0x1f,0x04,0x8d,0x82,0x8c,0x83,0xa3,0xf0,0x90,0x9e,0x7b,0xe0,0xfe,0x90,0x9e,0x76,
+0xe0,0xff,0x24,0x82,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0x90,0x9e,0x77,
+0xe0,0xfe,0x75,0xf0,0x09,0xef,0x90,0x96,0x4a,0x12,0x43,0x52,0xee,0xf0,0x75,0xf0,
+0x09,0xef,0x90,0x96,0x4b,0x12,0x43,0x52,0x74,0x01,0xf0,0x90,0x9e,0x7c,0xe0,0xfe,
+0x75,0xf0,0x09,0xef,0x90,0x96,0x4c,0x12,0x43,0x52,0xee,0xf0,0x8f,0x13,0xef,0x25,
+0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xaf,0x82,0xf5,0x15,0x8f,0x16,0xe5,0x13,
+0x75,0xf0,0x02,0xa4,0x24,0x02,0xf9,0x74,0x95,0x35,0xf0,0x75,0x17,0x01,0xf5,0x18,
+0x89,0x19,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x46,0x12,0x43,0x52,0xaf,0x82,0x85,
+0x83,0x1a,0x8f,0x1b,0xe5,0x13,0x75,0xf0,0x09,0xa4,0x24,0x44,0xf9,0x74,0x96,0x35,
+0xf0,0x75,0x1c,0x01,0xf5,0x1d,0x89,0x1e,0x74,0x82,0x25,0x13,0xf5,0x82,0xe4,0x34,
+0x95,0xf5,0x83,0xe0,0x12,0x43,0x87,0x70,0x3c,0x00,0x70,0x51,0x01,0x70,0x66,0x02,
+0x70,0x7b,0x03,0x70,0xa4,0x04,0x70,0xb9,0x05,0x70,0xce,0x06,0x70,0xf4,0x0c,0x71,
+0x21,0x0d,0x71,0x4e,0x0e,0x71,0x7b,0x0f,0x00,0x00,0x71,0xaf,0xe5,0x13,0x25,0xe0,
+0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x15,0x80,
+0x3c,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,
+0xf0,0xa3,0x74,0x10,0x80,0x27,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,
+0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0x74,0x05,0x80,0x12,0xe5,0x13,0x25,0xe0,0x24,
+0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0xf0,0xf0,0xa3,0xe4,0xf0,0xe5,0x13,
+0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,
+0x8f,0xf0,0x21,0xaf,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
+0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf5,0x80,0x27,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,
+0x82,0xe4,0x34,0x9b,0xf5,0x83,0x74,0x0f,0xf0,0xa3,0x74,0xf0,0x80,0x12,0xe5,0x13,
+0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0x74,0x0d,
+0xf0,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe4,0xf0,
+0xa3,0xf0,0x21,0xaf,0x90,0x04,0x47,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x12,0x42,
+0x20,0x90,0x04,0x46,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x90,0x00,0x01,0x12,0x42,
+0x32,0x90,0x04,0x45,0xe0,0x85,0x16,0x82,0x85,0x15,0x83,0xf0,0x90,0x04,0x44,0x21,
+0xa6,0x90,0x04,0x4b,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x12,0x42,0x20,0x90,0x04,
+0x4a,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x90,0x00,0x01,0x12,0x42,0x32,0x90,0x04,
+0x49,0xe0,0x85,0x16,0x82,0x85,0x15,0x83,0xf0,0x90,0x04,0x48,0x80,0x58,0x90,0x04,
+0x4f,0xe0,0xab,0x17,0xaa,0x18,0xa9,0x19,0x12,0x42,0x20,0x90,0x04,0x4e,0xe0,0xab,
+0x17,0xaa,0x18,0xa9,0x19,0x90,0x00,0x01,0x12,0x42,0x32,0x90,0x04,0x4d,0xe0,0x85,
+0x16,0x82,0x85,0x15,0x83,0xf0,0x90,0x04,0x4c,0x80,0x2b,0x90,0x04,0x53,0xe0,0xab,
+0x17,0xaa,0x18,0xa9,0x19,0x12,0x42,0x20,0x90,0x04,0x52,0xe0,0xab,0x17,0xaa,0x18,
+0xa9,0x19,0x90,0x00,0x01,0x12,0x42,0x32,0x90,0x04,0x51,0xe0,0x85,0x16,0x82,0x85,
+0x15,0x83,0xf0,0x90,0x04,0x50,0xe0,0x85,0x16,0x82,0x85,0x15,0x83,0xa3,0xf0,0xab,
+0x17,0xaa,0x18,0xa9,0x19,0xc0,0x03,0xc0,0x02,0xc0,0x01,0x12,0x1f,0x04,0xff,0xab,
+0x1c,0xaa,0x1d,0xa9,0x1e,0x12,0x1f,0x04,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,
+0x42,0x20,0xab,0x17,0xe5,0x19,0x24,0x01,0xf9,0xe4,0x35,0x18,0xfa,0xc0,0x03,0xc0,
+0x02,0xc0,0x01,0x12,0x1f,0x04,0xff,0xab,0x1c,0xaa,0x1d,0xa9,0x1e,0x90,0x00,0x01,
+0x12,0x1f,0x1d,0x5f,0xd0,0x01,0xd0,0x02,0xd0,0x03,0x12,0x42,0x20,0x85,0x16,0x82,
+0x85,0x15,0x83,0xc0,0x83,0xc0,0x82,0xe0,0xff,0x85,0x1b,0x82,0x85,0x1a,0x83,0xe0,
+0xfe,0xef,0x5e,0xd0,0x82,0xd0,0x83,0xf0,0x85,0x16,0x82,0x85,0x15,0x83,0xa3,0xc0,
+0x83,0xc0,0x82,0xe0,0xff,0x85,0x1b,0x82,0x85,0x1a,0x83,0xa3,0xe0,0xfe,0xef,0x5e,
+0xd0,0x82,0xd0,0x83,0xf0,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,
+0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0x75,0x14,0x0b,0x74,0x01,0x7e,0x00,
+0xa8,0x14,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x13,0x25,
+0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,
+0x4e,0x60,0x06,0xe5,0x14,0x24,0x10,0x80,0x5d,0x15,0x14,0xe5,0x14,0xc3,0x94,0x00,
+0x50,0xca,0x80,0x56,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,
+0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3d,0x75,0x14,0x0f,0x74,0x01,0x7e,0x00,0xa8,
+0x14,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0xe5,0x13,0x25,0xe0,
+0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,
+0x60,0x08,0x90,0x9e,0x82,0xe5,0x14,0xf0,0x80,0x10,0x15,0x14,0xe5,0x14,0xc3,0x94,
+0x00,0x50,0xc8,0x80,0x05,0xe4,0x90,0x9e,0x82,0xf0,0xe5,0x13,0x25,0xe0,0x24,0xc6,
+0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x3b,0xe4,0xf5,
+0x14,0x74,0x01,0x7e,0x00,0xa8,0x14,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,
+0xf9,0xff,0xe5,0x13,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,
+0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x08,0x90,0x9e,0x83,0xe5,0x14,0xf0,0x80,0x5b,
+0x05,0x14,0xe5,0x14,0xb4,0x10,0xca,0x80,0x52,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,
+0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0x4e,0x60,0x39,0xe4,0xf5,0x14,
+0x74,0x01,0x7e,0x00,0xa8,0x14,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,
+0xff,0xe5,0x13,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0x5e,
+0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x06,0xe5,0x14,0x24,0x10,0x80,0x0a,0x05,0x14,0xe5,
+0x14,0xb4,0x0c,0xcc,0x80,0x05,0xe4,0x90,0x9e,0x83,0xf0,0x90,0x9e,0x82,0xe0,0xff,
+0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x48,0x12,0x43,0x52,0xef,0xf0,0x90,0x9e,0x83,
+0xe0,0xfe,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x49,0x12,0x43,0x52,0xee,0xf0,0x74,
+0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0xd3,0x9f,0x40,0x05,0x90,
+0x9e,0x82,0x71,0xfe,0x74,0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,
+0xff,0x90,0x9e,0x83,0xe0,0xfe,0xef,0xc3,0x9e,0x50,0x02,0x71,0xfe,0x90,0x9e,0x82,
+0xe0,0xff,0xd3,0x94,0x13,0x40,0x07,0x90,0x96,0x43,0x74,0x03,0xf0,0x22,0xef,0xd3,
+0x94,0x0b,0x40,0x07,0x90,0x96,0x43,0x74,0x02,0xf0,0x22,0xef,0xd3,0x94,0x03,0x40,
+0x07,0x90,0x96,0x43,0x74,0x01,0xf0,0x22,0xe4,0x90,0x96,0x43,0xf0,0x22,0xe0,0xfd,
+0x74,0x26,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xed,0xf0,0xaf,0x13,0xd3,
+0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xef,0xc3,0x94,0x20,0x50,0x0e,0x74,0x84,0x2f,0xf5,
+0x82,0xe4,0x34,0x04,0xf5,0x83,0xed,0xf0,0x80,0x29,0x74,0xa6,0x2f,0xf5,0x82,0xe4,
+0x34,0x9c,0xf5,0x83,0xed,0xf0,0x90,0x9e,0xcd,0xef,0xf0,0x24,0xa6,0xf5,0x82,0xe4,
+0x34,0x9c,0xf5,0x83,0xe0,0x90,0x9e,0xce,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0xcd,0x7d,
+0x02,0xb1,0x27,0xd0,0xd0,0x92,0xaf,0x22,0x8f,0x0a,0x8d,0x0b,0xe5,0x0b,0x54,0x1f,
+0xf5,0x10,0x74,0x01,0x2f,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,0xf5,0x0e,0x90,
+0x04,0xfd,0xe0,0xb4,0x01,0x05,0x75,0x11,0x03,0x80,0x03,0x75,0x11,0x01,0xeb,0xc3,
+0x95,0x11,0x40,0x04,0xaf,0x0a,0x80,0x33,0xe5,0x0e,0x25,0x0d,0xf5,0x0f,0xe5,0x10,
+0x90,0x41,0xdc,0x93,0xff,0xe5,0x0f,0xd3,0x9f,0x74,0x01,0x40,0x11,0x25,0x0a,0xf5,
+0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xad,0x0b,0xaf,0x0a,0x81,0x0f,0x25,0x0a,
+0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe5,0x0f,0xf0,0x22,0xad,0x07,0x75,0xf0,0x09,
+0xed,0x90,0x96,0x48,0x12,0x43,0x52,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,
+0x9d,0xf5,0x83,0xe0,0x54,0x1f,0xf5,0x12,0xd3,0x9f,0x40,0x02,0x8f,0x12,0xe5,0x12,
+0x25,0xe0,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,
+0x93,0xff,0xe5,0x12,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,
+0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,
+0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x05,
+0xad,0x12,0x91,0x0f,0xaf,0x12,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9f,
+0x01,0x12,0x43,0x7e,0x90,0x9f,0x04,0xe0,0x54,0xf0,0x44,0x06,0xff,0xf0,0xed,0x54,
+0x0f,0xc4,0x54,0xf0,0xfe,0xef,0x54,0x0f,0x4e,0xf0,0x90,0x9f,0x01,0x12,0x43,0x5e,
+0x90,0x9e,0xfe,0x12,0x43,0x7e,0x7b,0x01,0x7a,0x9f,0x79,0x04,0x12,0x5d,0x37,0xd0,
+0xd0,0x92,0xaf,0x22,0xac,0x07,0xec,0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2c,0xf5,
+0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2c,0xf5,0x82,0xe4,0x34,
+0x9c,0xf5,0x83,0xe0,0x54,0x7f,0xf5,0x1e,0xe5,0x1e,0x54,0x1f,0xff,0x90,0x9e,0x77,
+0xf0,0x75,0xf0,0x09,0xec,0x90,0x96,0x49,0x12,0x43,0x52,0xe0,0x90,0x9e,0x79,0xf0,
+0x75,0xf0,0x09,0xec,0x90,0x96,0x48,0x12,0x43,0x52,0xe0,0xfe,0x90,0x9e,0x7a,0xf0,
+0xec,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,
+0x90,0x9e,0x7b,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,0x02,0xf5,0x82,0xe4,
+0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x7d,0xcb,0xf0,0xa3,0xeb,0xf0,
+0xef,0xd3,0x9e,0x40,0x0a,0x90,0x9e,0x7a,0xe0,0x90,0x9e,0x77,0xf0,0xf5,0x1e,0xed,
+0x70,0x02,0xc1,0xba,0x90,0x9e,0x78,0xed,0xf0,0xe5,0x1e,0x30,0xe6,0x0a,0x90,0x9e,
+0x77,0xe0,0xf5,0x1e,0xa3,0xe0,0x14,0xf0,0x90,0x9e,0x78,0xe0,0x70,0x02,0xc1,0xba,
+0x90,0x9e,0x77,0xe0,0xff,0xd3,0x94,0x00,0x50,0x02,0xc1,0xba,0xe4,0x90,0x9e,0x76,
+0xf0,0xef,0x14,0x90,0x9e,0x75,0xf0,0x90,0x9e,0x79,0xe0,0xfd,0x90,0x9e,0x75,0xe0,
+0xff,0xd3,0x9d,0x40,0x6b,0xef,0x94,0x10,0x40,0x21,0xef,0x24,0xf0,0xff,0x74,0x01,
+0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,
+0x9e,0x7d,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x27,0x90,0x9e,0x75,0xe0,0xff,
+0xc3,0x94,0x10,0x50,0x33,0x74,0x01,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,
+0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x7b,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,
+0x60,0x16,0x90,0x9e,0x75,0xe0,0xf5,0x1e,0xa3,0xe0,0x04,0xf0,0x90,0x9e,0x78,0xe0,
+0xff,0x90,0x9e,0x76,0xe0,0x6f,0x60,0x08,0x90,0x9e,0x75,0xe0,0x14,0xf0,0x80,0x87,
+0x90,0x9e,0x78,0xe0,0xff,0x90,0x9e,0x76,0xe0,0xc3,0x9f,0x50,0x0d,0x90,0x9e,0x75,
+0xe0,0xb5,0x05,0x06,0x90,0x9e,0x79,0xe0,0xf5,0x1e,0xe5,0x1e,0x25,0xe0,0x24,0xa4,
+0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xe5,0x1e,
+0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,
+0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xec,0x25,0xe0,0x24,0xc2,0xf5,0x82,
+0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x04,0xad,0x1e,0x91,0x0f,
+0xaf,0x1e,0x22,0xe4,0xf5,0x67,0xf5,0x6b,0xf5,0x6a,0x75,0x69,0x0c,0x75,0x68,0x0c,
+0x90,0x9e,0x9e,0xf0,0x90,0x9e,0x9c,0xf0,0x90,0x9e,0x9b,0xf0,0x90,0x9e,0x9d,0x04,
+0xf0,0x90,0x9e,0x8e,0xf0,0xe4,0x90,0x9e,0x9f,0xf0,0x90,0x9e,0x90,0xf0,0x90,0x9e,
+0x99,0x74,0x07,0xf0,0xe4,0x90,0x9e,0x8f,0xf0,0x90,0x9e,0x97,0xf0,0xa3,0x74,0x0b,
+0xf0,0x90,0x9e,0x94,0x74,0x01,0xf0,0xa3,0x74,0x03,0xf0,0x90,0x9e,0x93,0x74,0x14,
+0xf0,0x90,0x9e,0x9a,0x74,0x05,0xf0,0xe4,0x90,0x9e,0x92,0xf0,0x90,0x9e,0x8d,0xf0,
+0x90,0x9e,0xbb,0xf0,0x90,0x9e,0x96,0xf0,0x90,0x9e,0xa0,0xf0,0x22,0xe4,0x90,0x9e,
+0x9f,0xf0,0x90,0x9e,0x8f,0xf0,0xf5,0x6b,0x22,0xef,0xb4,0x01,0x07,0x7d,0xc8,0x7f,
+0x02,0x02,0x3a,0x71,0x7d,0x60,0x7f,0x02,0x12,0x3a,0x54,0x90,0x01,0x3d,0x74,0x04,
+0xf0,0xa3,0x74,0xc8,0xf0,0x7d,0x04,0x7f,0x01,0x12,0x3a,0xdf,0x7d,0xc8,0x7f,0x02,
+0x02,0x3a,0xdf,0x12,0x5c,0xb8,0xef,0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,
+0xf0,0x80,0x30,0x90,0x9e,0x9c,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,
+0x22,0x90,0x9e,0x9b,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x14,0xe5,
+0x69,0x54,0x0f,0xd3,0x94,0x04,0x40,0x08,0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x03,
+0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x08,0xf0,0x7f,0x00,0x22,0x12,0x5c,0xb8,0xef,
+0x64,0x01,0x60,0x08,0x90,0x01,0xb9,0x74,0x01,0xf0,0x80,0x66,0xe5,0x6b,0x54,0x03,
+0x60,0x08,0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x58,0xe5,0x69,0x54,0x0f,0xd3,0x94,
+0x02,0x40,0x08,0x90,0x01,0xb9,0x74,0x04,0xf0,0x80,0x47,0xe5,0x6b,0x30,0xe2,0x08,
+0x90,0x01,0xb9,0x74,0x08,0xf0,0x80,0x3a,0xe5,0x6b,0x30,0xe4,0x08,0x90,0x01,0xb9,
+0x74,0x10,0xf0,0x80,0x2d,0x90,0x9e,0x90,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x20,
+0xf0,0x80,0x1f,0x90,0x9e,0x8b,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x40,0xf0,0x80,
+0x11,0x90,0x9e,0x96,0xe0,0x60,0x08,0x90,0x01,0xb9,0x74,0x80,0xf0,0x80,0x03,0x7f,
+0x01,0x22,0x90,0x01,0xb8,0x74,0x04,0xf0,0x7f,0x00,0x22,0xe5,0x57,0x60,0x08,0x90,
+0x01,0xb9,0x74,0x01,0xf0,0x80,0x61,0xe5,0x69,0x54,0x0f,0xd3,0x94,0x01,0x40,0x08,
+0x90,0x01,0xb9,0x74,0x02,0xf0,0x80,0x50,0x90,0x02,0x87,0xe0,0x60,0x08,0x90,0x01,
+0xb9,0x74,0x04,0xf0,0x80,0x42,0x90,0x9e,0xba,0xe0,0xb4,0x01,0x10,0x90,0x9e,0xa1,
+0xe0,0xfe,0xa3,0xe0,0xf5,0x82,0x8e,0x83,0xe0,0x60,0x1c,0x80,0x2b,0x90,0x9e,0xba,
+0xe0,0x70,0x14,0x90,0x9d,0xa9,0xe0,0xff,0x90,0x9d,0xa8,0xe0,0x6f,0x60,0x08,0x90,
+0x01,0xb9,0x74,0x08,0xf0,0x80,0x11,0x90,0x9e,0x92,0xe0,0x70,0x08,0x90,0x01,0xb9,
+0x74,0x10,0xf0,0x80,0x03,0x7f,0x01,0x22,0x90,0x01,0xb8,0x74,0x02,0xf0,0x7f,0x00,
+0x22,0x8f,0x6c,0xe4,0x90,0x9f,0x0f,0xf0,0xa3,0xf0,0x90,0x01,0x09,0xe0,0x7f,0x00,
+0x30,0xe7,0x02,0x7f,0x01,0xef,0x65,0x6c,0x60,0x3e,0xc3,0x90,0x9f,0x10,0xe0,0x94,
+0x88,0x90,0x9f,0x0f,0xe0,0x94,0x13,0x40,0x08,0x90,0x01,0xc6,0xe0,0x44,0x80,0xf0,
+0x22,0x90,0x9f,0x0f,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,0x14,0x7e,0x00,0x12,
+0x3b,0x3b,0xd3,0x90,0x9f,0x10,0xe0,0x94,0x32,0x90,0x9f,0x0f,0xe0,0x94,0x00,0x40,
+0xb9,0x90,0x01,0xc7,0xe0,0x30,0xe0,0xb2,0x22,0x90,0x00,0x20,0xe0,0x44,0x01,0xfd,
+0x7f,0x20,0x12,0x44,0xcc,0x7f,0xf4,0x7e,0x01,0x12,0x3b,0x3b,0x90,0x00,0x00,0xe0,
+0x54,0xdf,0xfd,0xe4,0xff,0x12,0x44,0xcc,0x90,0x00,0x28,0xe0,0x44,0x03,0xfd,0x7f,
+0x28,0x12,0x44,0xcc,0x90,0x00,0x08,0xe0,0x54,0xef,0xfd,0x7f,0x08,0x12,0x44,0xcc,
+0xe4,0xff,0x11,0xe1,0x7f,0x64,0x7e,0x00,0x12,0x3b,0x3b,0x90,0x00,0x29,0xe0,0x44,
+0xc0,0xfd,0x7f,0x29,0x02,0x44,0xcc,0x90,0x9e,0x97,0xe0,0xa3,0xe0,0x90,0x05,0x58,
+0xf0,0x22,0xef,0xc3,0x94,0x20,0x50,0x39,0xef,0x30,0xe0,0x17,0xed,0xc4,0x54,0xf0,
+0xfd,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,
+0x0f,0x80,0x10,0xef,0xc3,0x13,0xfe,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
+0xe0,0x54,0xf0,0xf0,0x74,0xa4,0x2e,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x4d,
+0xf0,0x22,0xad,0x07,0xed,0xc3,0x94,0x20,0x50,0x0d,0x74,0x84,0x2d,0xf5,0x82,0xe4,
+0x34,0x04,0xf5,0x83,0xe0,0x80,0x0b,0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,
+0x83,0xe0,0x54,0x7f,0xf5,0x1e,0xe5,0x1e,0x54,0x1f,0xfc,0x75,0xf0,0x09,0xed,0x90,
+0x96,0x48,0x12,0x43,0x52,0xe0,0xff,0x90,0x9e,0x75,0xf0,0xed,0x25,0xe0,0x24,0x02,
+0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe0,0xfb,0xa3,0xe0,0x90,0x9e,0x76,0xcb,0xf0,
+0xa3,0xeb,0xf0,0xed,0x25,0xe0,0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe0,
+0xfb,0xa3,0xe0,0x90,0x9e,0x78,0xcb,0xf0,0xa3,0xeb,0xf0,0xec,0x25,0xe0,0x24,0x6c,
+0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfa,0x74,0x01,0x93,0xfb,0xed,0x25,
+0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xea,0xf0,0xa3,0xeb,0xf0,0xec,
+0xc3,0x9f,0x40,0x02,0x41,0xf0,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,
+0xec,0xf0,0x04,0xfb,0x90,0x9e,0x75,0xe0,0xff,0xeb,0xd3,0x9f,0x40,0x02,0x61,0x21,
+0xeb,0xc3,0x94,0x10,0x40,0x21,0xeb,0x24,0xf0,0xff,0x74,0x01,0x7e,0x00,0xa8,0x07,
+0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,0x76,0xe0,0x5e,
+0xfe,0xa3,0xe0,0x5f,0x4e,0x70,0x23,0xeb,0xc3,0x94,0x10,0x50,0x40,0x74,0x01,0x7e,
+0x00,0xa8,0x03,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x9e,
+0x78,0xe0,0x5e,0xfe,0xa3,0xe0,0x5f,0x4e,0x60,0x23,0xbb,0x11,0x09,0x90,0x9e,0x77,
+0xe0,0x30,0xe7,0x02,0x7b,0x17,0xeb,0x64,0x13,0x60,0x03,0xbb,0x12,0x09,0x90,0x9e,
+0x76,0xe0,0x30,0xe0,0x02,0x7b,0x18,0xac,0x03,0x8c,0x1e,0x80,0x34,0x0b,0x80,0x84,
+0x90,0x9e,0x75,0xe0,0xfb,0x6c,0x70,0x69,0x74,0x67,0x2d,0xf5,0x82,0xe4,0x34,0x9d,
+0xf5,0x83,0xec,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,0x12,0x43,0x52,0xe0,0xb4,
+0x01,0x0c,0xe5,0x1e,0x20,0xe6,0x07,0xec,0x44,0x40,0xf5,0x1e,0x80,0x03,0xaf,0x1e,
+0x22,0xec,0x25,0xe0,0x24,0xa4,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,
+0x74,0x01,0x93,0xff,0xec,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,
+0x74,0x01,0x93,0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,
+0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x80,
+0x5b,0xec,0xd3,0x9b,0x40,0x56,0x90,0x9e,0x75,0xe0,0xff,0x74,0x67,0x2d,0xf5,0x82,
+0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0xac,0x07,0x8f,0x1e,0xec,0x25,0xe0,0x24,0xa4,
+0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0xe4,0x93,0xfe,0x74,0x01,0x93,0xff,0xec,0x25,
+0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,0xf5,0x83,0x74,0x01,0x93,0x2f,0xff,0xe4,
+0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,
+0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0xaf,0x1e,0x22,0x74,0x01,0x2d,0xf5,
+0x82,0xe4,0x34,0x94,0xf5,0x83,0xe4,0xf0,0xaf,0x05,0xe5,0x1e,0x44,0x80,0xfd,0x12,
+0x74,0x0f,0xe5,0x1e,0x44,0x80,0xff,0x22,0xe4,0xf5,0x13,0xe5,0x13,0xb4,0x20,0x14,
+0x90,0x9a,0xc5,0xe0,0x04,0xf0,0x90,0x95,0x01,0xe0,0xff,0x90,0x9a,0xc5,0xe0,0xb5,
+0x07,0x02,0xe4,0xf0,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x4b,0x12,0x43,0x52,0xe0,
+0x64,0x01,0x60,0x03,0x02,0x82,0x27,0xe5,0x13,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,
+0x34,0x93,0xf5,0x83,0xe0,0xfe,0xa3,0xe0,0xd3,0x94,0x00,0xee,0x94,0x00,0x50,0x03,
+0x02,0x82,0x27,0xe5,0x13,0x94,0x20,0x40,0x09,0x90,0x9a,0xc5,0xe0,0x60,0x03,0x02,
+0x82,0x33,0xe5,0x13,0x75,0xf0,0x0a,0xa4,0x24,0x00,0xf9,0x74,0x90,0x35,0xf0,0x75,
+0x18,0x01,0xf5,0x19,0x89,0x1a,0xe5,0x13,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,
+0x93,0xf5,0x83,0xe0,0xff,0xa3,0xe0,0x90,0x9e,0x6f,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,
+0x13,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xff,0xa3,0xe0,
+0x90,0x9e,0x71,0xcf,0xf0,0xa3,0xef,0xf0,0xe5,0x13,0xc3,0x94,0x20,0x50,0x14,0x74,
+0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0xe0,0x54,0x3f,0x90,0x9e,0x6b,
+0xf0,0x80,0x12,0x74,0xa6,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x54,
+0x3f,0x90,0x9e,0x6b,0xf0,0x90,0x9e,0x6b,0xe0,0xfe,0x54,0x1f,0xa3,0xf0,0x75,0xf0,
+0x09,0xe5,0x13,0x90,0x96,0x48,0x12,0x43,0x52,0xe0,0x90,0x9e,0x74,0xf0,0x74,0xe6,
+0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xc3,0x94,0x05,0x40,0x02,0xc1,
+0xfd,0x90,0x9e,0x74,0xe0,0xff,0x90,0x9e,0x6c,0xe0,0x9f,0x40,0x13,0x90,0x9e,0x74,
+0xe0,0x90,0x9e,0x6c,0xf0,0xee,0x54,0x40,0xfe,0x90,0x9e,0x6b,0xf0,0xef,0x4e,0xf0,
+0x90,0x04,0xfd,0xe0,0x54,0x05,0x64,0x01,0x70,0x29,0x90,0x9e,0x6c,0xe0,0xff,0x90,
+0x41,0x50,0x93,0xfe,0x74,0x44,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,
+0xc3,0x9e,0x40,0x06,0xef,0x90,0x40,0xe0,0x80,0x30,0x90,0x9e,0x6c,0xe0,0x90,0x40,
+0xfc,0x80,0x27,0x90,0x9e,0x6c,0xe0,0xff,0x90,0x41,0x50,0x93,0xfe,0x74,0x44,0x25,
+0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xc3,0x9e,0x40,0x06,0xef,0x90,0x41,
+0x18,0x80,0x07,0x90,0x9e,0x6c,0xe0,0x90,0x41,0x34,0x93,0x90,0x9e,0x73,0xf0,0x90,
+0x9e,0x73,0xe0,0x75,0xf0,0x06,0xa4,0x24,0x56,0xf9,0x74,0x40,0x35,0xf0,0x75,0x15,
+0xff,0xf5,0x16,0x89,0x17,0x90,0x9e,0x6b,0xe0,0x90,0x41,0xf8,0x93,0xff,0xd3,0x90,
+0x9e,0x72,0xe0,0x9f,0x90,0x9e,0x71,0xe0,0x94,0x00,0x40,0x0a,0xe4,0xfd,0xaf,0x13,
+0x12,0x75,0x64,0x02,0x81,0xbe,0xe5,0x13,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,
+0x95,0xf5,0x83,0xe0,0xf5,0x1b,0xa3,0xe0,0xf5,0x1c,0xab,0x15,0xaa,0x16,0xa9,0x17,
+0x12,0x1f,0x04,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x12,0x42,0x6a,0xfd,
+0xac,0xf0,0x12,0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,
+0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x01,0x12,0x1f,0x1d,0xff,0x7e,0x00,0xab,0x18,
+0xaa,0x19,0xa9,0x1a,0x90,0x00,0x02,0x12,0x42,0x95,0xfd,0xac,0xf0,0x12,0x1f,0x4a,
+0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,
+0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,
+0x00,0x04,0x12,0x42,0x95,0xfd,0xac,0xf0,0x12,0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,
+0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x03,0x12,0x1f,
+0x1d,0xff,0x7e,0x00,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x06,0x12,0x42,0x95,
+0xfd,0xac,0xf0,0x12,0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,
+0xab,0x15,0xaa,0x16,0xa9,0x17,0x90,0x00,0x04,0x12,0x1f,0x1d,0xff,0x7e,0x00,0xab,
+0x18,0xaa,0x19,0xa9,0x1a,0x90,0x00,0x08,0x12,0x42,0x95,0xfd,0xac,0xf0,0x12,0x1f,
+0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xab,0x15,0xaa,0x16,0xa9,
+0x17,0x90,0x00,0x05,0x12,0x1f,0x1d,0xff,0x7e,0x00,0x90,0x9e,0x6f,0xe0,0xfc,0xa3,
+0xe0,0xfd,0x12,0x1f,0x4a,0xd3,0xe5,0x1c,0x9f,0xe5,0x1b,0x9e,0x40,0x0c,0xe5,0x1c,
+0x9f,0xf5,0x1c,0xe5,0x1b,0x9e,0xf5,0x1b,0x80,0x05,0xe4,0xf5,0x1b,0xf5,0x1c,0xe5,
+0x13,0x25,0xe0,0x24,0xc2,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xe5,0x1b,0xf0,0xa3,
+0xe5,0x1c,0xf0,0x90,0x9e,0x6b,0xe0,0x25,0xe0,0x24,0x6c,0xf5,0x82,0xe4,0x34,0x41,
+0xf5,0x83,0xc3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,0x95,0x1b,0x50,0x07,0xaf,0x13,
+0x31,0xd2,0x02,0x81,0x92,0x90,0x9e,0x6b,0xe0,0x25,0xe0,0x24,0xa4,0xf5,0x82,0xe4,
+0x34,0x41,0xf5,0x83,0xd3,0x74,0x01,0x93,0x95,0x1c,0xe4,0x93,0x95,0x1b,0x50,0x03,
+0x02,0x81,0x92,0x7d,0x01,0xaf,0x13,0x12,0x75,0x64,0x02,0x81,0x92,0x74,0xe6,0x25,
+0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xfc,0x64,0x05,0x60,0x03,0x02,0x80,
+0x9b,0x90,0x96,0x43,0xe0,0xff,0xb4,0x03,0x0b,0x90,0x9e,0x6c,0xe0,0xc3,0x94,0x19,
+0x40,0x3d,0x80,0x2e,0xef,0xb4,0x02,0x0b,0x90,0x9e,0x6c,0xe0,0xc3,0x94,0x11,0x40,
+0x2e,0x80,0x1f,0x90,0x96,0x43,0xe0,0xff,0xb4,0x01,0x0b,0x90,0x9e,0x6c,0xe0,0xc3,
+0x94,0x0a,0x40,0x1b,0x80,0x0c,0xef,0x70,0x11,0x90,0x9e,0x6c,0xe0,0xc3,0x94,0x03,
+0x40,0x0d,0x90,0x9a,0x84,0x74,0x01,0xf0,0x80,0x05,0xe4,0x90,0x9a,0x84,0xf0,0x74,
+0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1d,0x74,0x44,0x25,
+0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xc3,0x94,0x30,0x50,0x03,0x02,
+0x80,0x48,0x90,0x9a,0x84,0xe0,0x64,0x01,0x60,0x03,0x02,0x80,0x48,0x74,0x85,0x25,
+0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0x64,0x0a,0x60,0x51,0xef,0x24,0x05,
+0xff,0xe4,0x33,0xfe,0x74,0x41,0x25,0x13,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xe0,
+0xfd,0xd3,0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x32,0xed,0x24,0x05,0xff,
+0xe4,0x33,0xfe,0x74,0x44,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xd3,
+0x9f,0xee,0x64,0x80,0xf8,0x74,0x80,0x98,0x50,0x14,0x74,0x26,0x25,0x13,0xf5,0x82,
+0xe4,0x34,0x9d,0xf5,0x83,0xe0,0xff,0x90,0x9e,0x6c,0xe0,0x6f,0x60,0x3d,0x74,0x44,
+0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe0,0xff,0xd3,0x94,0x42,0x40,0x05,
+0x75,0x1d,0x05,0x80,0x0e,0xef,0xd3,0x94,0x39,0x40,0x05,0x75,0x1d,0x03,0x80,0x03,
+0x75,0x1d,0x01,0x74,0x41,0x25,0x13,0xf5,0x82,0xe4,0x34,0x94,0xf5,0x83,0xef,0xf0,
+0x74,0x85,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,0x80,0x29,0x74,0xe6,0x25,0x13,0xf5,
+0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x85,0x25,0x13,0xf5,0x82,0xe4,0x34,
+0x9a,0xf5,0x83,0xe0,0x04,0xf0,0x80,0x10,0xe4,0xf5,0x1d,0x74,0xe6,0x25,0x13,0xf5,
+0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x90,0x9e,0x6c,0xe0,0xff,0x74,0x26,0x25,
+0x13,0xf5,0x82,0xe4,0x34,0x9d,0xf5,0x83,0xef,0xf0,0x74,0x84,0x25,0x13,0xf5,0x82,
+0xe4,0x34,0x98,0xf5,0x83,0xe5,0x1d,0xf0,0x75,0xf0,0x09,0xe5,0x13,0x90,0x96,0x4c,
+0x12,0x43,0x52,0xe0,0xb4,0x01,0x10,0xe4,0xf5,0x1d,0x74,0xe6,0x25,0x13,0xf5,0x82,
+0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xad,0x1d,0x21,0x8d,0xec,0x64,0x06,0x60,0x02,
+0x21,0x92,0xf5,0x1b,0xf5,0x1c,0x90,0x42,0x19,0x93,0xff,0x7e,0x00,0x90,0x9e,0x6f,
+0xe0,0xfc,0xa3,0xe0,0xfd,0x12,0x1f,0x4a,0x90,0x9e,0x6d,0xee,0xf0,0xa3,0xef,0xf0,
+0x74,0x84,0x25,0x13,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe0,0xf5,0x1d,0xe4,0xf5,
+0x14,0xab,0x18,0xaa,0x19,0xa9,0x1a,0x75,0xf0,0x02,0xe5,0x14,0xa4,0xf5,0x82,0x85,
+0xf0,0x83,0x12,0x42,0x95,0xfd,0xac,0xf0,0xe5,0x14,0x90,0x42,0x14,0x93,0xff,0x7e,
+0x00,0x12,0x1f,0x4a,0xef,0x25,0x1c,0xf5,0x1c,0xee,0x35,0x1b,0xf5,0x1b,0xc3,0x90,
+0x9e,0x6e,0xe0,0x95,0x1c,0x90,0x9e,0x6d,0xe0,0x95,0x1b,0x40,0x07,0x05,0x14,0xe5,
+0x14,0xb4,0x05,0xbd,0xe5,0x14,0xc3,0x13,0xf5,0x14,0xe5,0x1d,0xb4,0x01,0x06,0xe5,
+0x14,0x70,0x46,0x80,0x13,0xe5,0x1d,0xb4,0x03,0x15,0xe5,0x14,0x70,0x05,0x75,0x1d,
+0x03,0x80,0x39,0xe5,0x14,0xb4,0x01,0x05,0x75,0x1d,0x01,0x80,0x2f,0x80,0x2a,0xe5,
+0x1d,0xb4,0x05,0x28,0xe5,0x14,0x70,0x05,0x75,0x1d,0x05,0x80,0x0d,0xe5,0x14,0xb4,
+0x01,0x05,0x75,0x1d,0x03,0x80,0x03,0x75,0x1d,0x01,0xd3,0x90,0x9e,0x72,0xe0,0x94,
+0x03,0x90,0x9e,0x71,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1d,0xd3,0x90,0x9e,0x72,
+0xe0,0x94,0x03,0x90,0x9e,0x71,0xe0,0x94,0x00,0x40,0x03,0xe4,0xf5,0x1d,0x74,0x84,
+0x25,0x13,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe5,0x1d,0xf0,0xfd,0xaf,0x13,0x12,
+0x79,0x92,0x74,0xe6,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0xd3,0x94,
+0x05,0x74,0xe6,0x50,0x0e,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe0,0x04,
+0xf0,0x80,0x0b,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0xab,0x18,
+0xaa,0x19,0xa9,0x1a,0xe4,0xf5,0xf0,0x12,0x42,0xcd,0xab,0x18,0xaa,0x19,0xa9,0x1a,
+0x90,0x00,0x02,0xe4,0xf5,0xf0,0x12,0x42,0xec,0x90,0x00,0x04,0xe4,0xf5,0xf0,0x12,
+0x42,0xec,0x90,0x00,0x06,0xe4,0xf5,0xf0,0x12,0x42,0xec,0x90,0x00,0x08,0xe4,0xf5,
+0xf0,0x12,0x42,0xec,0xe5,0x13,0x25,0xe0,0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,
+0x83,0xe4,0xf0,0xa3,0xf0,0xe5,0x13,0x25,0xe0,0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,
+0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xe5,0x13,0x25,0xe0,0x24,0x44,0xf5,0x82,0xe4,0x34,
+0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x05,0x13,0xe5,0x13,0xc3,0x94,0x40,0x50,0x03,
+0x02,0x7b,0xdb,0x22,0x90,0x04,0x44,0x74,0x11,0xf0,0xa3,0x74,0xf0,0xf0,0xa3,0x74,
+0x0f,0xf0,0xa3,0xe4,0xf0,0xfd,0x74,0xa4,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,
+0xe4,0xf0,0x0d,0xbd,0x10,0xf0,0xe4,0x90,0x9a,0xc5,0xf0,0x90,0x95,0x01,0x04,0xf0,
+0xe4,0xfd,0x75,0xf0,0x0a,0xed,0x90,0x90,0x00,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,
+0x75,0xf0,0x0a,0xed,0x90,0x90,0x02,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,
+0x0a,0xed,0x90,0x90,0x04,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,
+0x90,0x90,0x06,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x75,0xf0,0x0a,0xed,0x90,0x90,
+0x08,0x12,0x43,0x52,0xe4,0xf0,0xa3,0xf0,0x74,0x26,0x2d,0xf5,0x82,0xe4,0x34,0x9d,
+0xf5,0x83,0x74,0x13,0xf0,0x74,0x85,0x2d,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,
+0xf0,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xed,0x25,0xe0,
+0x24,0x80,0xf5,0x82,0xe4,0x34,0x93,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,
+0x24,0xc4,0xf5,0x82,0xe4,0x34,0x98,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,
+0x24,0xc4,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,
+0x24,0x44,0xf5,0x82,0xe4,0x34,0x99,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,
+0x24,0xc6,0xf5,0x82,0xe4,0x34,0x9a,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0xed,0x25,0xe0,
+0x24,0x46,0xf5,0x82,0xe4,0x34,0x9b,0xf5,0x83,0xe4,0xf0,0xa3,0xf0,0x74,0x86,0x2d,
+0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,0xf0,0x74,0x46,0x2d,0xf5,0x82,0xe4,0x34,
+0x9c,0xf5,0x83,0xe4,0xf0,0x74,0xe6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0xe4,
+0xf0,0x90,0x41,0xca,0x93,0xfe,0x74,0x01,0x93,0xff,0x90,0x41,0x92,0x74,0x01,0x93,
+0x2f,0xff,0xe4,0x93,0x3e,0xc3,0x13,0xfe,0xef,0x13,0xff,0xed,0x25,0xe0,0x24,0xc2,
+0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,0xee,0xf0,0xa3,0xef,0xf0,0x75,0xf0,0x09,0xed,
+0x90,0x96,0x4b,0x12,0x43,0x52,0x74,0x01,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x4a,
+0x12,0x43,0x52,0x74,0x01,0xf0,0x74,0x82,0x2d,0xf5,0x82,0xe4,0x34,0x95,0xf5,0x83,
+0x74,0x0c,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x46,0x12,0x43,0x52,0x74,0xff,0xf0,
+0xa3,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x44,0x12,0x43,0x52,0xe4,0xf0,0xa3,0x74,
+0x0f,0xf0,0x75,0xf0,0x09,0xed,0x90,0x96,0x48,0x12,0x43,0x52,0x74,0x13,0xf0,0x75,
+0xf0,0x09,0xed,0x90,0x96,0x49,0x12,0x43,0x52,0xe4,0xf0,0xed,0xc3,0x94,0x20,0x50,
+0x0f,0x74,0x84,0x2d,0xf5,0x82,0xe4,0x34,0x04,0xf5,0x83,0x74,0x13,0xf0,0x80,0x0d,
+0x74,0xa6,0x2d,0xf5,0x82,0xe4,0x34,0x9c,0xf5,0x83,0x74,0x13,0xf0,0x0d,0xed,0x64,
+0x40,0x60,0x02,0x41,0x62,0x22,0x12,0x1f,0x04,0xf5,0x13,0xc3,0x94,0x40,0x50,0x15,
+0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,0x74,0x44,0x25,0x13,0xf5,0x82,0xe4,0x34,0x9a,
+0xf5,0x83,0xef,0xf0,0x22,0xe5,0x13,0xb4,0x40,0x0a,0x90,0x00,0x02,0x12,0x1f,0x1d,
+0x90,0x96,0x42,0xf0,0x22,0x90,0x00,0x04,0x12,0x1f,0x1d,0xff,0x54,0x3f,0xfe,0xef,
+0x54,0x80,0xc4,0x13,0x13,0x13,0x54,0x01,0xfd,0xaf,0x06,0x02,0x6e,0xc2,0x12,0x1f,
+0x04,0x90,0x95,0x01,0xf0,0x22,0xe4,0x90,0x9d,0xa8,0xf0,0xa3,0xf0,0x90,0x01,0xaf,
+0xf0,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,
+0x9e,0x9e,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0x9e,0x8d,0xf0,0x12,0x1f,0x04,
+0x65,0x6a,0x60,0x03,0x12,0x4c,0xe3,0xd0,0xd0,0x92,0xaf,0x22,0x12,0x1f,0x04,0xf5,
+0x67,0x22,0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,0x30,0xe0,0x25,0x12,0x1f,0x04,0x90,
+0x9e,0x94,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x9e,0x95,0xf0,0xef,0xc3,0x13,
+0x54,0x7f,0x90,0x9e,0x93,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0x9e,0x9a,0xf0,
+0x22,0x90,0x9e,0x94,0x74,0x01,0xf0,0x90,0x9e,0x95,0x74,0x03,0xf0,0x90,0x9e,0x93,
+0x74,0x14,0xf0,0x90,0x9e,0x9a,0x74,0x05,0xf0,0x22,0x12,0x1f,0x04,0x30,0xe0,0x18,
+0xc3,0x13,0x54,0x7f,0x90,0x9e,0x99,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0xff,0x90,
+0x9e,0x97,0xe4,0xf0,0xa3,0xef,0xf0,0x22,0x90,0x9e,0x99,0x74,0x07,0xf0,0x90,0x9e,
+0x97,0xe4,0xf0,0xa3,0x74,0x0b,0xf0,0x22,0x12,0x1f,0x04,0x60,0x02,0x80,0x01,0xe4,
+0x90,0x9e,0x96,0xf0,0x22,0x12,0x1f,0x04,0x30,0xe0,0x07,0x54,0x01,0x90,0x9e,0xa0,
+0xf0,0x22,0x7d,0x10,0x7f,0x03,0x12,0x3a,0x71,0x7d,0x01,0x7f,0x02,0x02,0x3a,0xc5,
+0x90,0x02,0x09,0xe0,0xfd,0x12,0x1f,0x04,0xfe,0xaf,0x05,0xed,0x2e,0x90,0x9e,0xb4,
+0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0xff,0xed,0x2f,0x90,0x9e,0xb5,0xf0,0x90,0x00,
+0x02,0x12,0x1f,0x1d,0xff,0xed,0x2f,0x90,0x9e,0xb6,0xf0,0x90,0x00,0x03,0x12,0x1f,
+0x1d,0xff,0xed,0x2f,0x90,0x9e,0xb7,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0xff,0xae,
+0x05,0xed,0x2f,0x90,0x9e,0xb8,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x3f,0x90,
+0xfd,0x50,0x74,0x0b,0xf0,0xa3,0x74,0x05,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,
+0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0xfd,0x53,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,
+0x90,0xfd,0x54,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0xfd,0x55,0xf0,0x90,0x00,
+0x04,0x12,0x1f,0x1d,0x90,0xfd,0x56,0xf0,0x90,0xfd,0x58,0x74,0x01,0xf0,0x22,0x90,
+0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x0c,0xf0,0xa3,0x74,0x01,0xf0,
+0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
+0x90,0xfd,0x58,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x17,0x90,0xfd,0x50,
+0x74,0x0d,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0x90,0xfd,
+0x58,0x74,0x01,0xf0,0x22,0x12,0x1f,0x04,0x30,0xe0,0x0e,0x90,0x07,0x78,0xe0,0x54,
+0xfd,0xf0,0x90,0x9e,0x50,0x74,0x01,0xf0,0x22,0xe4,0x90,0x9e,0x50,0xf0,0x22,0x90,
+0x07,0x78,0xe0,0x44,0x0c,0xf0,0x12,0x1f,0x04,0xff,0x30,0xe0,0x75,0x90,0xfd,0x58,
+0xe0,0x20,0xe0,0x10,0x90,0xfd,0x50,0x74,0x14,0xf0,0xa3,0x74,0x01,0xf0,0xa3,0xf0,
+0x90,0xfd,0x58,0xf0,0x90,0x9e,0x43,0xe0,0x44,0x08,0xf0,0xef,0x30,0xe1,0x0d,0xe0,
+0x44,0x01,0xf0,0x90,0x07,0x78,0xe0,0x54,0xfd,0xf0,0x80,0x07,0x90,0x07,0x78,0xe0,
+0x44,0x02,0xf0,0x12,0x1f,0x04,0xff,0x30,0xe2,0x1e,0x90,0x9e,0x43,0xe0,0x44,0x04,
+0xf0,0x90,0x04,0x26,0xe0,0x44,0x40,0xf0,0x90,0x07,0x78,0xe0,0x54,0xef,0xf0,0x90,
+0x07,0x83,0xe0,0x44,0x40,0xf0,0x80,0x07,0x90,0x07,0x78,0xe0,0x44,0x10,0xf0,0xef,
+0x30,0xe4,0x63,0x90,0x9e,0x43,0xe0,0x44,0x02,0xf0,0x90,0x04,0x26,0xe0,0x44,0x80,
+0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x12,0x90,0xfd,0x50,0x74,0x14,0xf0,0xa3,
+0x74,0x01,0xf0,0xa3,0xe4,0xf0,0x90,0xfd,0x58,0x04,0xf0,0x90,0x9e,0x43,0xe0,0x54,
+0xfe,0xf0,0xe0,0x54,0xfb,0xf0,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xf7,0xf0,0x90,0x07,
+0x78,0xe0,0x54,0xe3,0xf0,0x90,0x07,0x83,0xe0,0x54,0x3f,0xf0,0x90,0x04,0x26,0xe0,
+0x54,0x3f,0xf0,0x90,0x9e,0x4a,0x12,0x43,0x46,0x90,0x81,0x57,0x12,0x1f,0xd7,0x7f,
+0x80,0x7e,0x08,0x12,0x34,0x55,0x22,0x12,0x1f,0x04,0xff,0x30,0xe0,0x4b,0x90,0x07,
+0x78,0xe0,0x44,0x02,0xf0,0x90,0x07,0x83,0xe0,0x44,0x02,0xf0,0x90,0x07,0x78,0xe0,
+0x44,0x80,0x54,0xbf,0xf0,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1a,0x90,0xfd,0x50,0x74,
+0x1a,0xf0,0xa3,0x74,0x01,0xf0,0xa3,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
+0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0xef,0x30,0xe1,0x5f,0x90,0x9e,0x43,0xe0,0x44,0x02,
+0xf0,0x90,0x07,0x95,0xe0,0x44,0x06,0xf0,0x22,0x90,0x9e,0x43,0xe0,0x54,0xfd,0xf0,
+0x90,0x07,0x78,0xe0,0x54,0x3f,0xf0,0x90,0x07,0x83,0xe0,0x54,0xfd,0xf0,0x90,0x07,
+0x95,0xe0,0x54,0xf9,0xf0,0x90,0x9e,0x4a,0x12,0x43,0x46,0x90,0x81,0x57,0x12,0x1f,
+0xd7,0x7f,0x80,0x7e,0x08,0x12,0x34,0x55,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1a,0x90,
+0xfd,0x50,0x74,0x1a,0xf0,0xa3,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,
+0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0xef,0x70,0x21,0x12,0x1f,0x04,
+0x30,0xe0,0x14,0x90,0x00,0x40,0xe0,0x44,0x20,0xf0,0xe0,0x54,0x3f,0xf0,0x90,0x07,
+0x78,0xe0,0x44,0x01,0xf0,0x80,0x07,0x90,0x07,0x78,0xe0,0x54,0xfe,0xf0,0xef,0x64,
+0x01,0x70,0x6a,0x12,0x1f,0x04,0x90,0x00,0x01,0x30,0xe0,0x2e,0x12,0x1f,0x1d,0x90,
+0x06,0xc0,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0x06,0xc1,0xf0,0x90,0x00,0x03,
+0x12,0x1f,0x1d,0x90,0x06,0xc2,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0x90,0x06,0xc3,
+0xf0,0x90,0x06,0xcc,0xe0,0x54,0xfe,0xf0,0x80,0x2c,0x12,0x1f,0x1d,0x90,0x06,0xc4,
+0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0x06,0xc5,0xf0,0x90,0x00,0x03,0x12,0x1f,
+0x1d,0x90,0x06,0xc6,0xf0,0x90,0x00,0x04,0x12,0x1f,0x1d,0x90,0x06,0xc7,0xf0,0x90,
+0x06,0xcc,0xe0,0x44,0x01,0xf0,0x90,0x06,0xcc,0xe0,0x44,0x02,0xf0,0xef,0xb4,0x02,
+0x11,0x12,0x1f,0x04,0x90,0x06,0xc8,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x06,
+0xc9,0xf0,0xef,0xb4,0x03,0x11,0x12,0x1f,0x04,0x90,0x06,0xca,0xf0,0x90,0x00,0x01,
+0x12,0x1f,0x1d,0x90,0x06,0xcb,0xf0,0xef,0x64,0x04,0x70,0x1f,0x12,0x1f,0x04,0xff,
+0x90,0x07,0x83,0x30,0xe0,0x06,0xe0,0x44,0x10,0xf0,0x80,0x04,0xe0,0x54,0x6f,0xf0,
+0xef,0x30,0xe1,0x07,0x90,0x07,0x83,0xe0,0x44,0x80,0xf0,0x22,0x90,0x9e,0x76,0x12,
+0x43,0x7e,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x37,0x90,0xfd,0x50,0x74,0x11,0xf0,0xa3,
+0x74,0x03,0xf0,0x90,0x9e,0x76,0x12,0x43,0x5e,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,
+0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0xfd,0x53,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,
+0x90,0xfd,0x54,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x80,0x16,
+0x43,0x57,0x01,0x78,0xaa,0x7c,0x9d,0x7d,0x01,0x90,0x9e,0x76,0x12,0x43,0x5e,0x7e,
+0x00,0x7f,0x03,0x12,0x1e,0xde,0x90,0x9e,0x76,0x12,0x43,0x5e,0x12,0x1f,0x04,0x60,
+0x07,0x90,0x9e,0x51,0x74,0x01,0xf0,0x22,0xe4,0x90,0x9e,0x51,0xf0,0x22,0x90,0xfd,
+0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x17,0xf0,0xa3,0x74,0x01,0xf0,0x12,
+0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
+0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,
+0x18,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,
+0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,
+0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x19,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,
+0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
+0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x1a,0xf0,
+0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,
+0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,
+0x1f,0x90,0xfd,0x50,0x74,0x1b,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,
+0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,
+0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x1c,0xf0,0xa3,0x74,
+0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,
+0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x2f,0x90,
+0xfd,0x50,0x74,0x1d,0xf0,0xa3,0x74,0x03,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,
+0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0xfd,0x53,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,
+0x90,0xfd,0x54,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,
+0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,0x74,0x1e,0xf0,0xa3,0x74,0x01,0xf0,
+0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,
+0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x12,0x1f,0x04,0xff,0xe4,0xfc,0xfd,0xfe,0x78,0x18,
+0x12,0x1f,0xc4,0xa8,0x04,0xa9,0x05,0xaa,0x06,0xab,0x07,0x90,0x9e,0x4a,0x12,0x43,
+0x46,0xec,0x54,0x03,0xfc,0x12,0x43,0x19,0x90,0x9e,0x46,0x02,0x1f,0xd7,0x90,0xfd,
+0x58,0xe0,0x20,0xe0,0x3b,0x12,0x1f,0x04,0x90,0xfd,0x50,0xf0,0xa3,0x74,0x04,0xf0,
+0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0xfd,0x52,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,
+0x90,0xfd,0x53,0xf0,0x90,0x00,0x03,0x12,0x1f,0x1d,0x90,0xfd,0x54,0xf0,0x90,0x00,
+0x04,0x12,0x1f,0x1d,0x90,0xfd,0x55,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,
+0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x21,0x90,0xfd,0x50,0x74,0x1f,0xf0,0xa3,0x74,
+0x01,0xf0,0x12,0x1f,0x04,0x54,0x01,0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,
+0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,
+0x21,0x90,0xfd,0x50,0x74,0x20,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x54,0x01,
+0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
+0x04,0xf0,0x22,0x12,0x1f,0x04,0xff,0x30,0xe0,0x54,0x90,0xfd,0x58,0xe0,0x20,0xe0,
+0x4d,0x90,0xfd,0x50,0x74,0x0a,0xf0,0xa3,0x74,0x06,0xf0,0x90,0x00,0x01,0x12,0x1f,
+0x1d,0x90,0xfd,0x52,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,0x90,0xfd,0x53,0xf0,0xa3,
+0xe4,0xf0,0xef,0xc3,0x13,0x30,0xe0,0x06,0xa3,0x74,0xa0,0xf0,0x80,0x06,0x90,0xfd,
+0x55,0x74,0xc0,0xf0,0x90,0xfd,0x56,0x74,0x10,0xf0,0xa3,0x74,0x80,0xf0,0x90,0xfd,
+0x50,0x74,0x0a,0xf0,0xa3,0x74,0x06,0xf0,0x90,0xfd,0x58,0x74,0x01,0xf0,0x90,0x00,
+0x02,0x12,0x1f,0x1d,0xfe,0x90,0x00,0x01,0x12,0x1f,0x1d,0x7c,0x00,0x24,0x00,0xff,
+0xec,0x3e,0xfe,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0xe4,0xfc,0x74,0x20,0x2f,0xff,
+0xe4,0x3e,0xfe,0x90,0x9e,0x76,0xef,0xf0,0xee,0xf9,0x90,0x02,0x09,0xe0,0xc3,0x13,
+0x90,0xfd,0x10,0xf0,0xec,0xc3,0x99,0x50,0x43,0xec,0x70,0x04,0x7d,0x04,0x80,0x02,
+0xe4,0xfd,0xed,0xc3,0x94,0x20,0x50,0x07,0xaf,0x05,0x71,0xda,0x0d,0x80,0xf3,0x0c,
+0x90,0xfd,0x10,0xe0,0x04,0xf0,0xec,0xb5,0x01,0xda,0xe4,0xfd,0xed,0x75,0xf0,0x08,
+0xa4,0xff,0x90,0x9e,0x76,0xe0,0xfb,0xc3,0xef,0x9b,0x74,0x80,0xf8,0x65,0xf0,0x98,
+0x50,0x07,0xaf,0x05,0x71,0xda,0x0d,0x80,0xe3,0x0c,0x80,0xb8,0x90,0x00,0x81,0xe0,
+0x44,0x80,0x12,0x44,0xc9,0xd0,0xd0,0x92,0xaf,0x22,0x90,0xfd,0x58,0xe0,0x30,0xe0,
+0x08,0x90,0x01,0xb8,0xe0,0x04,0xf0,0x80,0xf1,0xef,0x75,0xf0,0x08,0xa4,0x24,0x00,
+0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x50,0xf0,0xef,0x75,0xf0,0x08,
+0xa4,0x24,0x01,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x51,0xf0,0xef,
+0x75,0xf0,0x08,0xa4,0x24,0x02,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,
+0x52,0xf0,0xef,0x75,0xf0,0x08,0xa4,0x24,0x03,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,
+0xe0,0x90,0xfd,0x53,0xf0,0xef,0x75,0xf0,0x08,0xa4,0x24,0x04,0xf5,0x82,0xe4,0x34,
+0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x54,0xf0,0xef,0x75,0xf0,0x08,0xa4,0x24,0x05,0xf5,
+0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x55,0xf0,0xef,0x75,0xf0,0x08,0xa4,
+0x24,0x06,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x56,0xf0,0xef,0x75,
+0xf0,0x08,0xa4,0x24,0x07,0xf5,0x82,0xe4,0x34,0xfc,0xf5,0x83,0xe0,0x90,0xfd,0x57,
+0xf0,0xa3,0x74,0x01,0xf0,0x22,0x12,0x1f,0x04,0x90,0xfe,0x10,0x60,0x05,0xe0,0x44,
+0x01,0xf0,0x22,0xe0,0x54,0xfe,0xf0,0x22,0x90,0x01,0xb8,0xe0,0x04,0xf0,0x90,0xfd,
+0x58,0xe0,0x90,0x01,0xb9,0xf0,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x1f,0x90,0xfd,0x50,
+0x74,0x23,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x90,0xfd,0x52,0xf0,0xa3,0xe4,
+0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0x04,0xf0,0x22,0x90,0x9e,0x7a,
+0x12,0x43,0x7e,0x12,0x1f,0x04,0x20,0xe0,0x02,0xa1,0x9c,0xb1,0xe7,0x90,0x9e,0x7a,
+0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0x54,0x01,0xfe,0x90,0x9e,0x86,0xe0,0x54,0xfe,
+0x4e,0xf0,0xef,0x54,0x02,0xff,0xe0,0x54,0xfd,0x4f,0xf0,0x12,0x1f,0x04,0xff,0x54,
+0x04,0xfe,0x90,0x9e,0x86,0xe0,0x54,0xfb,0x4e,0xf0,0xef,0x54,0x10,0xff,0xe0,0x54,
+0xef,0x4f,0xf0,0x12,0x1f,0x04,0xff,0x54,0x20,0xfe,0x90,0x9e,0x86,0xe0,0x54,0xdf,
+0x4e,0xf0,0xef,0x54,0x40,0xff,0xe0,0x54,0xbf,0x4f,0xf0,0x90,0x00,0x01,0x12,0x1f,
+0x1d,0xff,0xc3,0x94,0x17,0x50,0x12,0xef,0xc3,0x94,0x03,0x90,0x9e,0x87,0x50,0x05,
+0x74,0x03,0xf0,0x80,0x0a,0xef,0xf0,0x80,0x06,0x90,0x9e,0x87,0x74,0x17,0xf0,0x90,
+0x9e,0x7a,0x12,0x43,0x5e,0x90,0x00,0x02,0x12,0x1f,0x1d,0xff,0xc3,0x94,0x18,0x50,
+0x12,0xef,0xc3,0x94,0x03,0x90,0x9e,0x88,0x50,0x05,0x74,0x03,0xf0,0x80,0x0a,0xef,
+0xf0,0x80,0x06,0x90,0x9e,0x88,0x74,0x18,0xf0,0xe4,0x90,0x9e,0x50,0xf0,0x90,0x9e,
+0x86,0xe0,0xc4,0x54,0x0f,0x30,0xe0,0x0d,0x75,0x69,0x04,0x90,0x05,0x00,0x74,0x1c,
+0xf0,0xa3,0x74,0x11,0xf0,0x90,0x05,0x58,0x74,0x02,0xf0,0x22,0x90,0x9e,0x7a,0x12,
+0x43,0x5e,0x12,0x1f,0x04,0xff,0x13,0x13,0x13,0x54,0x1f,0x90,0x9e,0x76,0x30,0xe0,
+0x09,0x12,0x1f,0xe3,0x00,0x00,0x03,0x10,0x80,0x07,0x12,0x1f,0xe3,0x00,0x00,0x03,
+0x00,0xb1,0xe7,0x90,0x00,0x40,0x74,0x24,0xf0,0x90,0x07,0x78,0x74,0x01,0xf0,0xfb,
+0x7a,0x9e,0x79,0x76,0x12,0x4c,0x0d,0x90,0x05,0x22,0xe4,0xf0,0x90,0x05,0x00,0x74,
+0x1c,0xf0,0xa3,0x74,0x43,0xf0,0x22,0x90,0x9e,0x86,0xe0,0x54,0xfe,0xf0,0xa3,0x74,
+0x0b,0xf0,0xa3,0x74,0x08,0xf0,0xe4,0x90,0x9e,0x8b,0xf0,0xa3,0xf0,0x90,0x9e,0x86,
+0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xfb,0xf0,0xe0,0x54,0xef,0xf0,0xe0,0x54,0xf7,0xf0,
+0xe0,0x54,0xdf,0xf0,0xe0,0x54,0xbf,0xf0,0x90,0x9e,0x89,0xe0,0x54,0xfe,0xf0,0xe0,
+0x54,0xfb,0xf0,0xe4,0xa3,0xf0,0x22,0x75,0xe8,0x07,0x90,0xfd,0x68,0x74,0x02,0xf0,
+0x90,0x9e,0x43,0xe0,0x54,0xfe,0xf0,0x54,0xfb,0xf0,0x54,0xfd,0xf0,0x54,0xf7,0xf0,
+0xe4,0xa3,0xf0,0xa3,0xf0,0xa3,0x12,0x1f,0xe3,0x00,0x00,0x00,0x00,0x7f,0x80,0x7e,
+0x08,0x12,0x2c,0x87,0x90,0x9e,0x4a,0x12,0x1f,0xd7,0x90,0x00,0x2e,0xe0,0x90,0x9e,
+0x4e,0xf0,0x90,0x00,0x2d,0xe0,0x90,0x9e,0x4f,0xf0,0xe4,0xa3,0xf0,0xa3,0xf0,0x90,
+0x04,0x26,0xe0,0x44,0x10,0xf0,0x90,0x07,0x83,0xe4,0xf0,0x90,0x07,0x78,0x74,0x03,
+0xf0,0xb1,0xe7,0x7d,0x04,0x7f,0x02,0x02,0x3a,0xdf,0x90,0xfd,0x58,0xe0,0x20,0xe0,
+0x21,0x90,0xfd,0x50,0x74,0x24,0xf0,0xa3,0x74,0x01,0xf0,0x12,0x1f,0x04,0x54,0x01,
+0x90,0xfd,0x52,0xf0,0xa3,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,
+0x04,0xf0,0x22,0x12,0x1f,0x04,0xff,0x54,0x01,0xfe,0x90,0x9e,0x89,0xe0,0x54,0xfe,
+0x4e,0xf0,0xef,0x54,0x02,0xff,0xe0,0x54,0xfd,0x4f,0xf0,0x90,0x00,0x01,0x12,0x1f,
+0x1d,0x90,0x9e,0x8a,0xf0,0x22,0xe4,0x90,0x9f,0x11,0xf0,0xa3,0xf0,0x90,0x01,0xeb,
+0xe0,0x54,0xc0,0x60,0x43,0xc3,0x90,0x9f,0x12,0xe0,0x94,0x88,0x90,0x9f,0x11,0xe0,
+0x94,0x13,0x40,0x0a,0x90,0x01,0xc6,0xe0,0x44,0x04,0xf0,0x7f,0x00,0x22,0x90,0x9f,
+0x11,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x7f,0x14,0x7e,0x00,0x12,0x3b,0x3b,0xd3,
+0x90,0x9f,0x12,0xe0,0x94,0x64,0x90,0x9f,0x11,0xe0,0x94,0x00,0x40,0xbf,0x90,0x01,
+0xc7,0xe0,0x30,0xe2,0xb8,0x7f,0x00,0x22,0x7f,0x01,0x22,0xd3,0x10,0xaf,0x01,0xc3,
+0xc0,0xd0,0xef,0x54,0xfc,0xff,0x90,0x01,0xe8,0xf0,0xee,0xa3,0xf0,0x90,0x01,0xeb,
+0x74,0x80,0xf0,0xd1,0xd6,0x90,0x01,0xec,0xe0,0xff,0x90,0x9f,0x0a,0x12,0x43,0x5e,
+0x90,0x00,0x03,0xef,0x12,0x42,0x32,0x90,0x01,0xed,0xe0,0x90,0x00,0x02,0x12,0x42,
+0x32,0x90,0x01,0xee,0xe0,0x90,0x00,0x01,0x12,0x42,0x32,0x90,0x01,0xef,0xe0,0x12,
+0x42,0x20,0x90,0x9f,0x0a,0x12,0x43,0x5e,0x12,0x43,0x26,0xd0,0xd0,0x92,0xaf,0x22,
+0x22,0x90,0x05,0x22,0x74,0xff,0xf0,0x90,0x9e,0xe1,0x74,0x04,0xf0,0x22,0x12,0x57,
+0x90,0x80,0xee,0x90,0x05,0x22,0x74,0xff,0xf0,0x90,0x05,0x27,0xe0,0x44,0x40,0xf0,
+0x90,0x9e,0xe1,0x74,0x04,0xf0,0x22,0x90,0x05,0x22,0x74,0xff,0xf0,0x90,0x9e,0xdb,
+0x74,0x05,0xf0,0x22,0x90,0x05,0x22,0x74,0xff,0xf0,0x90,0x9e,0xdb,0x74,0x02,0xf0,
+0x22,0x90,0x05,0x27,0xe0,0x54,0xbf,0xf0,0x90,0x05,0x22,0x74,0x6f,0xf0,0x90,0x9e,
+0xdb,0x74,0x06,0xf0,0x22,0x90,0x05,0x22,0x74,0xff,0xf0,0xe4,0x90,0x9f,0x13,0xf0,
+0xa3,0xf0,0x90,0x05,0xf8,0xe0,0x70,0x0f,0xa3,0xe0,0x70,0x0b,0xa3,0xe0,0x70,0x07,
+0xa3,0xe0,0x70,0x03,0x7f,0x01,0x22,0xd3,0x90,0x9f,0x14,0xe0,0x94,0xe8,0x90,0x9f,
+0x13,0xe0,0x94,0x03,0x40,0x03,0x7f,0x00,0x22,0x7f,0x32,0x7e,0x00,0x12,0x3b,0x3b,
+0x90,0x9f,0x13,0xe4,0x75,0xf0,0x01,0x12,0x42,0x54,0x80,0xc6,0xd3,0x10,0xaf,0x01,
+0xc3,0xc0,0xd0,0x90,0x9f,0x1e,0xef,0xf0,0xd3,0x94,0x07,0x50,0x47,0xe0,0xff,0x74,
+0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0xe0,
+0x5f,0xf0,0x12,0x4f,0x6d,0x90,0x9f,0x1e,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,
+0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x44,0xe0,0xfb,
+0xe4,0xfe,0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,
+0xf8,0xff,0x80,0x4c,0x90,0x9f,0x1e,0xe0,0x24,0xf8,0xf0,0xe0,0xff,0x74,0x01,0xa8,
+0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x62,0xe0,0x5f,0xf0,
+0x12,0x4f,0x6d,0x90,0x9f,0x1e,0xe0,0xfd,0x74,0x01,0x7e,0x00,0xa8,0x05,0x08,0x80,
+0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,0xff,0x90,0x00,0x60,0xe0,0xfb,0xe4,0xfe,
+0xef,0x5b,0xa8,0x05,0x08,0x80,0x06,0xce,0xa2,0xe7,0x13,0xce,0x13,0xd8,0xf8,0xff,
+0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,0xc3,0xc0,0xd0,0x90,0x9f,0x16,0xed,
+0xf0,0x90,0x9f,0x15,0xef,0xf0,0xd3,0x94,0x07,0x50,0x4f,0xa3,0xe0,0x70,0x1a,0x90,
+0x9f,0x15,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,
+0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,0x80,0x17,0x90,0x9f,0x15,0xe0,0xff,0x74,0x01,
+0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x47,0xe0,0x4f,0xf0,
+0x12,0x4f,0x6d,0x90,0x9f,0x15,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,
+0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x46,0x80,0x67,0x90,0x9f,0x15,0xe0,0x24,0xf8,
+0xf0,0xa3,0xe0,0x70,0x1a,0x90,0x9f,0x15,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,
+0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x63,0xe0,0x5f,0xf0,0x80,0x17,0x90,
+0x9f,0x15,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,
+0x90,0x00,0x63,0xe0,0x4f,0xf0,0x12,0x4f,0x6d,0x90,0x9f,0x15,0xe0,0xff,0x74,0x01,
+0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x12,0x4f,0x65,0x90,0x9f,0x15,0xe0,
+0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,
+0x62,0xe0,0x5f,0xf0,0x12,0x4f,0x6d,0xd0,0xd0,0x92,0xaf,0x22,0xd3,0x10,0xaf,0x01,
+0xc3,0xc0,0xd0,0x90,0x9f,0x18,0xed,0xf0,0x90,0x9f,0x17,0xef,0xf0,0xd3,0x94,0x07,
+0x50,0x65,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,
+0xff,0x90,0x00,0x47,0xe0,0x5f,0xf0,0x12,0x4f,0x6d,0x90,0x9f,0x17,0xe0,0xff,0x74,
+0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x46,0xe0,0x4f,
+0xf0,0x12,0x4f,0x6d,0x90,0x9f,0x18,0xe0,0x60,0x16,0x90,0x9f,0x17,0xe0,0xff,0x74,
+0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,0x00,0x45,0x80,0x62,
+0x90,0x9f,0x17,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,
+0xf4,0xff,0x90,0x00,0x45,0x80,0x64,0x90,0x9f,0x17,0xe0,0x24,0xf8,0xf0,0xe0,0xff,
+0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0x12,0x4f,0x65,0x90,0x9f,
+0x17,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,
+0x00,0x62,0xe0,0x4f,0xf0,0x12,0x4f,0x6d,0x90,0x9f,0x18,0xe0,0x60,0x18,0x90,0x9f,
+0x17,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,0x80,0x02,0xc3,0x33,0xd8,0xfc,0xff,0x90,
+0x00,0x61,0xe0,0x4f,0x80,0x17,0x90,0x9f,0x17,0xe0,0xff,0x74,0x01,0xa8,0x07,0x08,
+0x80,0x02,0xc3,0x33,0xd8,0xfc,0xf4,0xff,0x90,0x00,0x61,0xe0,0x5f,0xf0,0x12,0x4f,
+0x6d,0xd0,0xd0,0x92,0xaf,0x22,0x90,0x06,0x90,0xe0,0x44,0x01,0xf0,0x90,0x9e,0xcc,
+0xe0,0x30,0xe0,0x31,0x90,0x9e,0xca,0xe0,0xff,0x90,0x9e,0xc9,0xe0,0xfe,0xc4,0x13,
+0x54,0x01,0xfd,0x31,0x9c,0x90,0x9e,0xcb,0xe0,0x75,0xf0,0x20,0xa4,0xff,0xae,0xf0,
+0x12,0x3b,0x3b,0x90,0x9e,0xca,0xe0,0xff,0x90,0x9e,0xc9,0xe0,0xfe,0xc4,0x13,0x54,
+0x01,0xf4,0xfd,0x31,0x9c,0x22,0x90,0x9e,0x76,0x12,0x43,0x7e,0x12,0x1f,0x04,0x20,
+0xe0,0x02,0x61,0xbe,0x90,0x9e,0x76,0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0x54,0x01,
+0xfe,0x90,0x9e,0xc9,0xe0,0x54,0xfe,0x4e,0xf0,0xef,0x54,0x04,0xff,0xe0,0x54,0xfb,
+0x4f,0xf0,0x12,0x1f,0x04,0xff,0x54,0x02,0xfe,0x90,0x9e,0xc9,0xe0,0x54,0xfd,0x4e,
+0xf0,0xef,0x54,0x08,0xff,0xe0,0x54,0xf7,0x4f,0xf0,0x12,0x1f,0x04,0xff,0x54,0x10,
+0xfe,0x90,0x9e,0xc9,0xe0,0x54,0xef,0x4e,0xf0,0xef,0x54,0x20,0xff,0xe0,0x54,0xdf,
+0x4f,0xf0,0x12,0x1f,0x04,0xff,0x54,0x40,0xfe,0x90,0x9e,0xc9,0xe0,0x54,0xbf,0x4e,
+0xf0,0xef,0x54,0x80,0xff,0xe0,0x54,0x7f,0x4f,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,
+0x90,0x9e,0xcb,0xf0,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x9e,0xca,0xf0,0x90,0x00,
+0x03,0x12,0x1f,0x1d,0xff,0x54,0x01,0xfe,0x90,0x9e,0xcc,0xe0,0x54,0xfe,0x4e,0xf0,
+0xef,0x54,0x02,0xff,0xe0,0x54,0xfd,0x4f,0xf0,0xe4,0x12,0x44,0xc9,0x90,0x9e,0x76,
+0x12,0x43,0x5e,0x12,0x1f,0x04,0xff,0xc3,0x13,0x30,0xe0,0x07,0x90,0x06,0x90,0xe0,
+0x44,0x02,0xf0,0xef,0x13,0x13,0x54,0x3f,0x30,0xe0,0x07,0x90,0x06,0x90,0xe0,0x44,
+0x04,0xf0,0x12,0x1f,0x04,0x13,0x13,0x13,0x54,0x1f,0x30,0xe0,0x07,0x90,0x06,0x90,
+0xe0,0x44,0x08,0xf0,0x90,0x9e,0xcc,0xe0,0x30,0xe0,0x12,0x90,0x9e,0xca,0xe0,0xff,
+0x90,0x9e,0xc9,0xe0,0xfe,0xc4,0x13,0x54,0x01,0xf4,0xfd,0x31,0x9c,0x22,0x90,0x06,
+0x90,0xe4,0xf0,0x71,0xcc,0x90,0x01,0x3f,0x74,0x04,0xf0,0x22,0x90,0x9e,0xc9,0xe0,
+0x54,0xfe,0xf0,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xfb,0xf0,0xe0,0x54,0xf7,0xf0,0xe0,
+0x54,0xef,0xf0,0xe0,0x54,0xdf,0xf0,0xe0,0x54,0xbf,0xf0,0xe0,0x54,0x7f,0xf0,0xe4,
+0xa3,0xf0,0xa3,0xf0,0xa3,0xe0,0x54,0xfe,0xf0,0xe0,0x54,0xfd,0xf0,0xe0,0x54,0xfb,
+0xf0,0x22,0x90,0x9e,0xc1,0xe0,0x54,0xfe,0xf0,0xe0,0x54,0x7f,0xf0,0x90,0x01,0x17,
+0xe0,0xfe,0x90,0x01,0x16,0xe0,0x7c,0x00,0x24,0x00,0xff,0xec,0x3e,0x90,0x9e,0xc7,
+0xf0,0xa3,0xef,0xf0,0x90,0x01,0x04,0xe0,0x54,0x0f,0x90,0x9e,0x6b,0xf0,0xe0,0xff,
+0x74,0x40,0x7e,0x00,0xa8,0x07,0x08,0x80,0x05,0xc3,0x33,0xce,0x33,0xce,0xd8,0xf9,
+0x90,0x9e,0xc6,0xf0,0xee,0x90,0x9e,0xc5,0xf0,0x80,0x81,0xd3,0x10,0xaf,0x01,0xc3,
+0xc0,0xd0,0x12,0x1f,0x04,0x54,0x01,0xff,0x90,0x9e,0xc1,0xe0,0x54,0xfe,0x4f,0xf0,
+0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x9e,0xc2,0xf0,0x90,0x00,0x02,0x12,0x1f,0x1d,
+0x90,0x9e,0xc3,0xf0,0x90,0x9e,0xc1,0xe0,0x30,0xe0,0x20,0x90,0x06,0x09,0xe0,0x54,
+0xfe,0xf0,0x90,0x02,0x86,0xe0,0x44,0x04,0xf0,0x43,0x57,0x04,0x7d,0x08,0xe4,0xff,
+0x12,0x3a,0xc5,0x90,0x01,0x3f,0x74,0x04,0xf0,0x80,0x10,0x7d,0x08,0xe4,0xff,0x12,
+0x3a,0x54,0x90,0x02,0x86,0xe0,0x54,0xfb,0xf0,0x71,0xbe,0xd0,0xd0,0x92,0xaf,0x22,
+0xe5,0x68,0x30,0xe3,0x04,0xe4,0xff,0x80,0x02,0x7f,0x01,0x02,0x48,0x7d,0x90,0x9e,
+0xbe,0xe0,0x30,0xe0,0x2d,0xe5,0x67,0xb4,0x01,0x28,0x90,0x9e,0xbd,0xe0,0x04,0xf0,
+0xe0,0xb4,0x0a,0x0b,0x90,0x9e,0xc0,0xe0,0x04,0xf0,0xe4,0x90,0x9e,0xbd,0xf0,0x90,
+0x9e,0xc0,0xe0,0xff,0x90,0x9e,0xbf,0xe0,0xb5,0x07,0x07,0x91,0xb0,0xe4,0x90,0x9e,
+0xc0,0xf0,0x22,0x12,0x1f,0x04,0xff,0x54,0x01,0xfe,0x90,0x9e,0xbe,0xe0,0x54,0xfe,
+0x4e,0xf0,0xef,0xc3,0x13,0x30,0xe0,0x0a,0x90,0x00,0x01,0x12,0x1f,0x1d,0x90,0x9e,
+0xbf,0xf0,0x22,0x90,0x9e,0xc1,0xe0,0xc4,0x13,0x13,0x13,0x54,0x01,0x20,0xe0,0x07,
+0x90,0x01,0x3f,0xe0,0x30,0xe2,0x0a,0x90,0x9e,0xc1,0xe0,0x44,0x80,0xf0,0x7f,0x00,
+0x22,0x7f,0x01,0x22,0x90,0xfd,0x58,0xe0,0x20,0xe0,0x2d,0x90,0xfd,0x50,0x74,0x11,
+0xf0,0xa3,0x74,0x04,0xf0,0x90,0x9d,0xaa,0xe0,0x90,0xfd,0x52,0xf0,0x90,0x9d,0xab,
+0xe0,0x90,0xfd,0x53,0xf0,0x90,0x9d,0xac,0xe0,0x90,0xfd,0x54,0xf0,0xa3,0x74,0x28,
+0xf0,0x90,0xfd,0x58,0x74,0x01,0xf0,0x22,0x43,0x57,0x01,0x22,0x90,0x9e,0xe6,0xe0,
+0x54,0xf0,0x44,0x0a,0xf0,0x90,0xfd,0x60,0xe0,0x90,0x9e,0xe8,0xf0,0x90,0xfd,0x62,
+0xe0,0x90,0x9e,0xe9,0xf0,0x90,0xfd,0x63,0xe0,0x90,0x9e,0xea,0xf0,0x90,0xfd,0x64,
+0xe0,0x90,0x9e,0xeb,0xf0,0x90,0xfd,0x65,0xe0,0x90,0x9e,0xec,0xf0,0x90,0xfd,0x60,
+0xe0,0x90,0x9e,0xe6,0x30,0xe6,0x08,0xe0,0x54,0x0f,0x44,0x50,0xf0,0x80,0x16,0xe0,
+0x54,0x0f,0x44,0x70,0xf0,0x90,0xfd,0x66,0xe0,0x90,0x9e,0xed,0xf0,0x90,0xfd,0x67,
+0xe0,0x90,0x9e,0xee,0xf0,0x7b,0x01,0x7a,0x9e,0x79,0xe8,0x90,0x9e,0xfe,0x12,0x43,
+0x7e,0x7a,0x9e,0x79,0xe6,0x02,0x5d,0x37,0x90,0x9e,0x86,0xe0,0x30,0xe0,0x50,0xe0,
+0xff,0xc4,0x13,0x13,0x54,0x03,0x90,0x07,0x78,0x30,0xe0,0x05,0x74,0x0d,0xf0,0x80,
+0x03,0x74,0x09,0xf0,0x90,0x9e,0x52,0x12,0x1f,0xe3,0x00,0x00,0x03,0x10,0x7b,0x01,
+0x7a,0x9e,0x79,0x52,0x12,0x4c,0x0d,0x90,0x9e,0x8b,0x74,0x01,0xf0,0x90,0x9e,0x86,
+0xe0,0xc4,0x13,0x54,0x07,0x30,0xe0,0x06,0x90,0x05,0x22,0xe4,0xf0,0x22,0x90,0x9e,
+0x86,0xe0,0xc4,0x54,0x0f,0x30,0xe0,0x07,0x90,0x05,0x22,0xe4,0x12,0x49,0x1c,0x22,
+0x90,0x9e,0x86,0xe0,0x30,0xe0,0x41,0xe4,0xf5,0x48,0xa3,0xe0,0xf5,0x49,0xe4,0xfb,
+0xfd,0x7f,0x60,0x7e,0x01,0x12,0x39,0xa9,0x90,0x01,0x63,0x74,0x05,0xf0,0x90,0x9e,
+0x52,0x12,0x1f,0xe3,0x00,0x00,0x03,0x10,0x7b,0x01,0x7a,0x9e,0x79,0x52,0x12,0x4c,
+0x0d,0x90,0x9e,0x8b,0x74,0x01,0xf0,0xa3,0xf0,0x90,0x9e,0x96,0xe0,0x90,0x05,0x22,
+0x60,0x04,0x74,0x6f,0xf0,0x22,0xe4,0xf0,0x22,0x00,0x79,0x4e,};
+
+u8 Rtl8723UFwBTImgArray[Rtl8723UBTImgArrayLength] = {
+0x30,};
+
+
+ //WiFi for BT MP New FW 0326
+const u8 Rtl8723SFwUMCBCutMPImgArray[Rtl8723SUMCBCutMPImgArrayLength] = {
+0x02, 0x23, 0x02, 0x00, 0x22, 0x00, 0x00, 0x00, 0x05, 0x15, 0x14, 0x10, 0x14, 0x47, 0x01, 0x00,
+0x74, 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x4A, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x61, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x67, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x68, 0x55, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x6F, 0xF9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xE4, 0xFB, 0x90, 0x85, 0x76, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x50, 0x70, 0x03,
+0x02, 0x43, 0x8F, 0xE5, 0x4D, 0x64, 0x01, 0x60, 0x03, 0x02, 0x43, 0x8F, 0xE5, 0x50, 0x14, 0x60,
+0x2B, 0x24, 0xFD, 0x60, 0x27, 0x24, 0x02, 0x24, 0xFB, 0x50, 0x02, 0x80, 0x21, 0x90, 0x85, 0x59,
+0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3, 0xE0, 0x60, 0x14, 0x90, 0x85, 0x59, 0xE0, 0x70, 0x08,
+0x90, 0x85, 0x70, 0xE0, 0x90, 0x85, 0x59, 0xF0, 0x7B, 0x01, 0x80, 0x02, 0x7B, 0x01, 0xEB, 0x70,
+0x03, 0x02, 0x43, 0x8F, 0x43, 0x51, 0x10, 0x90, 0x85, 0x4F, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54,
+0x01, 0x30, 0xE0, 0x44, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x85, 0x71, 0xE0, 0xC3, 0x9F, 0x50, 0x08,
+0xE4, 0xF5, 0x48, 0x90, 0x85, 0x50, 0x80, 0x2D, 0x90, 0x85, 0x4F, 0xE0, 0xC4, 0x54, 0x07, 0xFF,
+0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x85, 0x71, 0xE0, 0xC3, 0x9F, 0xEE, 0x64,
+0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x53, 0x80, 0x06, 0xE4,
+0xF5, 0x48, 0x90, 0x85, 0x50, 0xE0, 0x80, 0x2D, 0x90, 0x85, 0x71, 0xE0, 0x64, 0x01, 0x60, 0x03,
+0xE0, 0x70, 0x0F, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x71, 0xE0, 0xFF, 0x90, 0x85, 0x68, 0xE0, 0x2F,
+0x80, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x71, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90,
+0x85, 0x68, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39,
+0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x4E, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07,
+0x7D, 0x01, 0x7F, 0x04, 0x12, 0x49, 0xC6, 0xE5, 0x4E, 0x64, 0x0C, 0x60, 0x6F, 0x90, 0x85, 0x2B,
+0xE0, 0xFF, 0x90, 0x85, 0x71, 0xE0, 0xD3, 0x9F, 0x40, 0x08, 0x90, 0x85, 0x2C, 0xE0, 0x04, 0xF0,
+0x80, 0x05, 0xE4, 0x90, 0x85, 0x2C, 0xF0, 0x90, 0x85, 0x71, 0xE0, 0x90, 0x85, 0x2B, 0xF0, 0xA3,
+0xE0, 0xC3, 0x94, 0x05, 0x40, 0x46, 0xE4, 0xF0, 0x90, 0x85, 0x56, 0xE0, 0x60, 0x09, 0x90, 0x85,
+0x6F, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0x15, 0x90, 0x85, 0x72, 0xE0, 0x64, 0x02, 0x70, 0x21, 0x12,
+0x49, 0xC2, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x5E, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x85, 0x6E, 0x80, 0x09,
+0x43, 0x51, 0x01, 0x12, 0x50, 0xA5, 0x90, 0x85, 0x6A, 0x74, 0x01, 0xF0, 0x12, 0x84, 0xC4, 0x22,
+0xBB, 0x01, 0x0F, 0xF8, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x28,
+0xF0, 0x22, 0x50, 0x09, 0xC5, 0x82, 0x29, 0xF8, 0xE5, 0x82, 0x26, 0xF6, 0x22, 0xBB, 0xFE, 0x09,
+0xC5, 0x82, 0x29, 0xF8, 0xE2, 0x25, 0x82, 0xF2, 0x22, 0xF8, 0xEA, 0x25, 0x83, 0xF5, 0x83, 0xE9,
+0x93, 0x28, 0x22, 0xBB, 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22,
+0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8, 0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83,
+0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22, 0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE,
+0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0,
+0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xEF, 0x5B, 0xFF,
+0xEE, 0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE,
+0xED, 0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, 0xCF, 0xF4, 0xCF, 0xCE, 0xF4, 0xCE, 0xCD, 0xF4, 0xCD,
+0xCC, 0xF4, 0xCC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0,
+0xE8, 0x9C, 0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF,
+0x22, 0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82,
+0xF5, 0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0,
+0xF9, 0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82, 0x15, 0x82,
+0x70, 0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9,
+0xF0, 0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D,
+0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93,
+0x68, 0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70,
+0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88,
+0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60, 0xE9, 0xA3,
+0xA3, 0xA3, 0xA3, 0x80, 0xD8, 0x90, 0x85, 0x60, 0xE0, 0x60, 0x16, 0x90, 0x85, 0x63, 0xE0, 0x70,
+0x10, 0x90, 0x85, 0x5D, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74, 0x0D, 0xF0, 0x22, 0x74, 0x09,
+0xF0, 0x22, 0x22, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0xE4, 0xFB, 0x90, 0x85, 0x7A, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x50, 0x70, 0x03, 0x02, 0x45, 0xD5, 0xE5, 0x4D, 0x64, 0x01,
+0x60, 0x03, 0x02, 0x45, 0xD5, 0x0B, 0x90, 0x85, 0x59, 0xF0, 0x04, 0x70, 0x03, 0x02, 0x45, 0xD5,
+0x43, 0x51, 0x10, 0x90, 0x85, 0x4F, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A,
+0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x85, 0x71, 0xE0, 0xD3, 0x9F, 0x50, 0x0D, 0xE4, 0xF5, 0x48, 0x90,
+0x85, 0x50, 0xE0, 0xF5, 0x49, 0xE4, 0x1B, 0x80, 0x56, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x4F, 0xE0,
+0x54, 0x0F, 0xFF, 0x90, 0x85, 0x71, 0xE0, 0xC3, 0x9F, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x85,
+0x50, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0x80, 0x35, 0x90, 0x85, 0x71, 0xE0, 0x64, 0x01,
+0x60, 0x03, 0xE0, 0x70, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x71, 0xE0, 0xFF, 0x90, 0x85, 0x68,
+0xE0, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0x80, 0x17, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x71, 0xE0, 0x14,
+0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x85, 0x68, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD,
+0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x4E, 0x54,
+0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x49, 0xC6, 0x12, 0x84, 0xC4,
+0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x85, 0x7A, 0xF0, 0xE5, 0x50, 0x70, 0x03, 0x02,
+0x46, 0x8F, 0x90, 0x85, 0x73, 0xE0, 0x60, 0x11, 0xE4, 0xF0, 0x53, 0x51, 0xFD, 0xE5, 0x51, 0x54,
+0x07, 0x60, 0x03, 0x02, 0x46, 0x8F, 0x02, 0x46, 0x8C, 0x90, 0x85, 0x5A, 0xE0, 0x04, 0xF0, 0x53,
+0x51, 0xEF, 0x90, 0x85, 0x71, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0x4F, 0xE0, 0xC4, 0x13, 0x13, 0x13,
+0x54, 0x01, 0x30, 0xE0, 0x3A, 0x90, 0x85, 0x71, 0xE0, 0xFF, 0x90, 0x85, 0x4F, 0xE0, 0x54, 0x0F,
+0xB5, 0x07, 0x0A, 0x90, 0x85, 0x52, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x80, 0x22, 0x90, 0x85, 0x4F,
+0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x85, 0x71,
+0xE0, 0xB5, 0x07, 0x0B, 0xE4, 0xB5, 0x06, 0x07, 0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90,
+0x85, 0x4F, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x06, 0x90, 0x85, 0x7A, 0x74,
+0x5A, 0xF0, 0x90, 0x85, 0x7A, 0xE0, 0xFF, 0x90, 0x85, 0x61, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE,
+0x90, 0x85, 0x5A, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x40, 0x0D, 0xE5,
+0x4D, 0xB4, 0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12, 0x51, 0x63, 0x22,
+0xE4, 0xF5, 0x51, 0xF5, 0x50, 0x75, 0x4F, 0x0C, 0x75, 0x4E, 0x0C, 0x90, 0x85, 0x72, 0xF0, 0x90,
+0x85, 0x6E, 0xF0, 0x90, 0x85, 0x6B, 0xF0, 0x90, 0x85, 0x70, 0x04, 0xF0, 0x90, 0x85, 0x59, 0xF0,
+0xE4, 0x90, 0x85, 0x73, 0xF0, 0x90, 0x85, 0x5B, 0xF0, 0x90, 0x85, 0x68, 0x74, 0x05, 0xF0, 0xE4,
+0x90, 0x85, 0x5A, 0xF0, 0x90, 0x85, 0x66, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x85, 0x61, 0xF0,
+0x90, 0x85, 0x64, 0x74, 0x05, 0xF0, 0x90, 0x85, 0x5E, 0x74, 0x14, 0xF0, 0x90, 0x85, 0x69, 0x74,
+0x05, 0xF0, 0xE4, 0x90, 0x85, 0x5C, 0xF0, 0x90, 0x85, 0x55, 0xF0, 0x90, 0x85, 0xC4, 0xF0, 0x90,
+0x85, 0x65, 0xF0, 0x90, 0x85, 0x75, 0xF0, 0x90, 0x85, 0x71, 0xF0, 0x90, 0x85, 0x56, 0xF0, 0x90,
+0x85, 0x6F, 0xF0, 0x90, 0x85, 0x60, 0xF0, 0x90, 0x85, 0x5D, 0xF0, 0x90, 0x85, 0x6A, 0xF0, 0x90,
+0x85, 0x63, 0xF0, 0x90, 0x85, 0x5F, 0xF0, 0x90, 0x85, 0x74, 0xF0, 0x90, 0x85, 0x62, 0xF0, 0x90,
+0x85, 0xC3, 0xE0, 0xB4, 0x02, 0x05, 0x90, 0x00, 0x93, 0xE4, 0xF0, 0x90, 0x85, 0x4F, 0xE0, 0x54,
+0x7F, 0xF0, 0xE0, 0x54, 0xF0, 0xF0, 0xE0, 0x54, 0x8F, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90,
+0x85, 0x53, 0xF0, 0x90, 0x85, 0x52, 0xF0, 0x22, 0xEF, 0x60, 0x5F, 0xAF, 0x05, 0x74, 0x21, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4,
+0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x6B,
+0x90, 0x85, 0x43, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x13, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x74,
+0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0x74, 0x23, 0x2D, 0xF5,
+0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x74, 0x7F, 0xF0, 0x22, 0xAF, 0x05, 0x74, 0x21, 0x2F, 0xF5,
+0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13,
+0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0x54, 0xBF, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0C, 0x74,
+0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x22, 0x90, 0x85, 0x2D, 0xE0,
+0x30, 0xE0, 0x22, 0x90, 0x85, 0x3E, 0xE0, 0x60, 0x09, 0x90, 0x01, 0xB9, 0x74, 0x40, 0xF0, 0x02,
+0x48, 0x86, 0xE5, 0x4F, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x02, 0x80, 0x2F, 0x90, 0x85, 0x65,
+0xE0, 0x60, 0x67, 0x80, 0x5D, 0x12, 0x50, 0xFB, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9,
+0x74, 0x01, 0xF0, 0x80, 0x61, 0xE5, 0x51, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02,
+0xF0, 0x80, 0x53, 0xE5, 0x4F, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74,
+0x04, 0xF0, 0x80, 0x42, 0xE5, 0x51, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80,
+0x35, 0xE5, 0x51, 0x30, 0xE4, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x28, 0x90, 0x85,
+0x5B, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x1A, 0x90, 0x85, 0x65, 0xE0,
+0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x80, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90,
+0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F, 0x00, 0x22, 0xE4,
+0x90, 0x85, 0x76, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x85, 0x76, 0xF0, 0xE0, 0x54, 0xC0, 0x70,
+0x18, 0x90, 0x85, 0x6A, 0xE0, 0x70, 0x03, 0x53, 0x51, 0xFE, 0x53, 0x51, 0xFD, 0x90, 0x85, 0x2D,
+0xE0, 0x20, 0xE0, 0x14, 0x12, 0x51, 0x63, 0x80, 0x0F, 0x90, 0x85, 0x56, 0xE0, 0x60, 0x09, 0x90,
+0x85, 0x6F, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0x15, 0x90, 0x85, 0x76, 0xE0, 0x30, 0xE6, 0x1B, 0x43,
+0x51, 0x01, 0x90, 0x85, 0x72, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x4E, 0x64, 0x0C, 0x60, 0x13,
+0x12, 0x50, 0xA5, 0x80, 0x0E, 0x12, 0x4F, 0xD4, 0x80, 0x09, 0x90, 0x85, 0x6A, 0xE0, 0x70, 0x03,
+0x53, 0x51, 0xFE, 0xE4, 0x90, 0x85, 0x6A, 0xF0, 0x90, 0x85, 0x76, 0xE0, 0x30, 0xE7, 0x2A, 0x43,
+0x51, 0x02, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x64, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90, 0x85, 0x73, 0x74, 0x01,
+0xF0, 0x90, 0x85, 0x32, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x53, 0x51, 0xFD, 0x22, 0x8E, 0x25, 0x8F,
+0x26, 0xAD, 0x26, 0xAC, 0x25, 0xAF, 0x24, 0x12, 0x47, 0x48, 0xAF, 0x26, 0xAE, 0x25, 0x90, 0x04,
+0x80, 0xE0, 0x54, 0x0F, 0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0x44, 0x01, 0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
+0x54, 0xFB, 0xF0, 0xAC, 0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
+0x44, 0xFA, 0xF0, 0x74, 0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F,
+0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F,
+0xF0, 0x90, 0x04, 0x53, 0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0,
+0x90, 0x04, 0x50, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0x54, 0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED,
+0xF0, 0x22, 0x7D, 0x01, 0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x5C, 0x8D,
+0x5D, 0xE5, 0x5C, 0x54, 0x0F, 0xFF, 0xE5, 0x4E, 0x54, 0x0F, 0x6F, 0x60, 0x72, 0xE5, 0x5C, 0x30,
+0xE2, 0x30, 0xE5, 0x4E, 0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x50, 0xE1, 0xE5, 0x4E, 0x30, 0xE3,
+0x10, 0xE5, 0x5C, 0x20, 0xE3, 0x0B, 0x12, 0x4C, 0xB2, 0xEF, 0x60, 0x53, 0x12, 0x51, 0x14, 0x80,
+0x4E, 0xE5, 0x4E, 0x20, 0xE3, 0x49, 0xE5, 0x5C, 0x30, 0xE3, 0x44, 0xAF, 0x5D, 0x12, 0x50, 0xC6,
+0x80, 0x3D, 0xE5, 0x4E, 0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x5C, 0x20, 0xE3, 0x09, 0x12,
+0x4C, 0xB2, 0xEF, 0x60, 0x2A, 0x12, 0x51, 0x14, 0xE5, 0x4E, 0x54, 0x0F, 0xFF, 0xBF, 0x04, 0x0E,
+0xE5, 0x5C, 0x20, 0xE2, 0x09, 0x12, 0x47, 0xEC, 0xEF, 0x60, 0x14, 0x12, 0x50, 0x7C, 0xE5, 0x4E,
+0x54, 0x0F, 0xFF, 0xBF, 0x02, 0x09, 0x12, 0x4B, 0x54, 0xEF, 0x60, 0x03, 0x12, 0x51, 0x44, 0xD0,
+0xD0, 0x92, 0xAF, 0x22, 0x02, 0x4A, 0x92, 0x02, 0x52, 0x40, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93,
+0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8,
+0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04,
+0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20,
+0x40, 0x80, 0x90, 0x4E, 0xD2, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30,
+0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0,
+0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8,
+0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83,
+0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0xEF, 0x64, 0x01, 0x70, 0x3E, 0x7D, 0x78, 0x7F, 0x02,
+0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x22, 0x90, 0x01, 0x36, 0x74, 0x03, 0xF0,
+0xFD, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x01, 0x57,
+0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x49, 0xC2, 0x90, 0x06, 0x04, 0xE0, 0x54,
+0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36, 0x74, 0x7B, 0xF0,
+0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x3A, 0x93, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A,
+0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x80, 0xF0, 0x90,
+0x06, 0x0A, 0xE0, 0x44, 0x07, 0xF0, 0x12, 0x4E, 0x85, 0xE5, 0x4D, 0x20, 0xE0, 0x05, 0xE4, 0x90,
+0x85, 0x5B, 0xF0, 0x22, 0x90, 0x85, 0x2D, 0xE0, 0x20, 0xE0, 0x10, 0x12, 0x50, 0xFB, 0xEF, 0x64,
+0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x5C, 0xE5, 0x14, 0x60, 0x08, 0x90,
+0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x50, 0xE5, 0x4F, 0x54, 0x0F, 0xD3, 0x94, 0x01, 0x40, 0x08,
+0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x3F, 0x90, 0x02, 0x87, 0xE0, 0x60, 0x08, 0x90, 0x01,
+0xB9, 0x74, 0x04, 0xF0, 0x80, 0x31, 0x90, 0x01, 0xAF, 0xE0, 0x60, 0x02, 0x80, 0x07, 0x90, 0x02,
+0x86, 0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x1A, 0x90, 0x85, 0x5C,
+0xE0, 0x70, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0,
+0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x02, 0xF0, 0x7F, 0x00, 0x22,
+0xE5, 0x4D, 0x64, 0x01, 0x70, 0x6B, 0xE5, 0x50, 0x60, 0x67, 0xE5, 0x50, 0x64, 0x02, 0x60, 0x06,
+0xE5, 0x50, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x85, 0x59, 0xF0, 0x90, 0x06,
+0xAA, 0xE0, 0x90, 0x85, 0x70, 0xF0, 0x90, 0x85, 0x59, 0xE0, 0x70, 0x07, 0x90, 0x85, 0x70, 0xE0,
+0xFF, 0x80, 0x05, 0x90, 0x85, 0x59, 0xE0, 0xFF, 0x90, 0x85, 0x59, 0xEF, 0xF0, 0x90, 0x85, 0x5B,
+0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x85, 0x5A, 0xF0, 0x90, 0x85, 0x71, 0xF0, 0x90, 0x05,
+0x58, 0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x53,
+0x51, 0xFD, 0x53, 0x51, 0xEF, 0xE5, 0x50, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x03, 0x12, 0x48,
+0x8F, 0x22, 0x90, 0x85, 0xC3, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x91, 0x80, 0x0C, 0x90, 0x85, 0xC3,
+0xE0, 0x70, 0x04, 0x7D, 0xD4, 0x80, 0x02, 0xE4, 0xFD, 0x7F, 0x93, 0x12, 0x53, 0x26, 0x90, 0x00,
+0x29, 0xE0, 0x54, 0x3F, 0xFD, 0x7F, 0x29, 0x12, 0x53, 0x26, 0x90, 0x00, 0x28, 0xE0, 0x54, 0xFC,
+0xFD, 0x7F, 0x28, 0x12, 0x53, 0x26, 0x90, 0x00, 0x08, 0xE0, 0x44, 0x10, 0xFD, 0x7F, 0x08, 0x12,
+0x53, 0x26, 0x7F, 0x01, 0x12, 0x4D, 0xDE, 0x90, 0x00, 0x00, 0xE0, 0x44, 0x20, 0xFD, 0xE4, 0xFF,
+0x12, 0x53, 0x26, 0x90, 0x00, 0x20, 0xE0, 0x54, 0xFE, 0xFD, 0x7F, 0x20, 0x12, 0x53, 0x26, 0x90,
+0x00, 0x90, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x53, 0x26, 0x7F, 0x14, 0x7E, 0x00, 0x02,
+0x3B, 0x09, 0x90, 0x85, 0x2D, 0xE0, 0x30, 0xE0, 0x13, 0x90, 0x85, 0x32, 0xE0, 0xC4, 0x13, 0x54,
+0x07, 0x30, 0xE0, 0x18, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x49, 0x12, 0x50, 0xFB, 0xEF,
+0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x39, 0x90, 0x85, 0x6E, 0xE0,
+0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x2B, 0x90, 0x85, 0x6B, 0xE0, 0x60, 0x08,
+0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x1D, 0xE5, 0x4F, 0x54, 0x0F, 0xD3, 0x94, 0x04, 0x40,
+0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01,
+0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x85,
+0xA1, 0x12, 0x44, 0x89, 0x12, 0x51, 0x57, 0x90, 0x85, 0xA1, 0x12, 0x44, 0x69, 0x12, 0x1E, 0xF6,
+0xF5, 0x50, 0x14, 0x60, 0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03, 0x70, 0x44, 0x7F,
+0x01, 0x80, 0x3D, 0x90, 0x85, 0xA1, 0x12, 0x44, 0x69, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD,
+0xE4, 0xFF, 0x12, 0x4F, 0x96, 0x80, 0x29, 0x90, 0x85, 0xA1, 0x12, 0x44, 0x69, 0x90, 0x00, 0x02,
+0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x01, 0x12, 0x4F, 0x96, 0x1F, 0x80, 0x14, 0x90, 0x85, 0xA1, 0x12,
+0x44, 0x69, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x02, 0x12, 0x4F, 0x96, 0xE4, 0xFF,
+0x12, 0x4A, 0xD7, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x24, 0x90, 0x85, 0x56,
+0xE0, 0x60, 0x09, 0x90, 0x85, 0x6F, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0x15, 0x90, 0x04, 0x1D, 0xE0,
+0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x27, 0x74, 0xFF, 0xF0, 0x12, 0x5E, 0x51, 0xBF, 0x01,
+0x0D, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x2E, 0x12, 0x49, 0x2D, 0x90, 0x05,
+0x22, 0xE5, 0x27, 0xF0, 0x80, 0x0D, 0x90, 0x85, 0xBC, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x2E,
+0x12, 0x49, 0x2D, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F, 0x60,
+0xE4, 0x90, 0x86, 0x44, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02,
+0x7F, 0x01, 0xEF, 0x65, 0x60, 0x60, 0x3E, 0xC3, 0x90, 0x86, 0x45, 0xE0, 0x94, 0x88, 0x90, 0x86,
+0x44, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x86,
+0x44, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xF7, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3,
+0x90, 0x86, 0x45, 0xE0, 0x94, 0x32, 0x90, 0x86, 0x44, 0xE0, 0x94, 0x00, 0x40, 0xB9, 0x90, 0x01,
+0xC7, 0xE0, 0x30, 0xE0, 0xB2, 0x22, 0x90, 0x00, 0x20, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x20, 0x12,
+0x53, 0x26, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x00, 0xE0, 0x54, 0xDF, 0xFD,
+0xE4, 0xFF, 0x12, 0x53, 0x26, 0x90, 0x00, 0x28, 0xE0, 0x44, 0x03, 0xFD, 0x7F, 0x28, 0x12, 0x53,
+0x26, 0x90, 0x00, 0x08, 0xE0, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x53, 0x26, 0xE4, 0xFF, 0x12,
+0x4D, 0xDE, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x29, 0xE0, 0x44, 0xC0, 0xFD,
+0x7F, 0x29, 0x02, 0x53, 0x26, 0xE4, 0xFF, 0x90, 0x00, 0x6A, 0xE0, 0x30, 0xE2, 0x22, 0xE0, 0x30,
+0xE0, 0x20, 0xE0, 0x30, 0xE1, 0x0D, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x02, 0x30, 0xE3, 0x13, 0x7F,
+0x03, 0x80, 0x0F, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x03, 0x30, 0xE3, 0x06, 0x7F, 0x02, 0x80, 0x02,
+0x7F, 0x03, 0xEF, 0xFD, 0xD3, 0x90, 0x85, 0x67, 0xE0, 0x9D, 0x90, 0x85, 0x66, 0xE0, 0x94, 0x00,
+0x50, 0x05, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x85, 0x66, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58,
+0xF0, 0x22, 0x48, 0x85, 0xB2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xA9,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x85, 0xB1, 0x00, 0x41, 0x85, 0xC0, 0x00,
+0x41, 0x85, 0xA6, 0x00, 0x41, 0x86, 0x4C, 0x00, 0x41, 0x85, 0x2B, 0x00, 0x41, 0x85, 0x2C, 0x00,
+0x41, 0x84, 0x01, 0x00, 0x41, 0x84, 0x02, 0x00, 0x41, 0x84, 0x00, 0x00, 0x41, 0x86, 0x3D, 0x00,
+0x41, 0x86, 0x4A, 0x00, 0x00, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x85, 0x6F, 0x74,
+0x01, 0xF0, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x86, 0x31, 0x12, 0x1F, 0xC9, 0x90,
+0x86, 0x31, 0x12, 0x44, 0x45, 0xEC, 0x44, 0x02, 0xFC, 0x90, 0x86, 0x31, 0x12, 0x1F, 0xC9, 0x90,
+0x86, 0x31, 0x12, 0x44, 0x45, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12,
+0x34, 0x30, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x50, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x35,
+0x90, 0x85, 0x2D, 0xE0, 0x20, 0xE0, 0x2E, 0x90, 0x85, 0x56, 0xE0, 0x60, 0x09, 0x90, 0x85, 0x6F,
+0xE0, 0x70, 0x03, 0x12, 0x4F, 0x15, 0x12, 0x84, 0xC4, 0x90, 0x85, 0x72, 0xE0, 0x60, 0x06, 0x7D,
+0x01, 0x7F, 0x0C, 0x80, 0x0D, 0xE5, 0x4E, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01,
+0x7F, 0x04, 0x12, 0x49, 0xC6, 0x22, 0xEF, 0x14, 0x60, 0x09, 0x14, 0x60, 0x16, 0x24, 0x02, 0x70,
+0x32, 0x80, 0x0A, 0x90, 0x85, 0x70, 0x74, 0x01, 0xF0, 0x90, 0x85, 0x59, 0xF0, 0xE4, 0x90, 0x85,
+0x75, 0xF0, 0x22, 0xED, 0x70, 0x0A, 0x90, 0x85, 0x69, 0xE0, 0x90, 0x85, 0x70, 0xF0, 0x80, 0x05,
+0x90, 0x85, 0x70, 0xED, 0xF0, 0x90, 0x85, 0x70, 0xE0, 0x90, 0x85, 0x59, 0xF0, 0x90, 0x85, 0x75,
+0x74, 0x01, 0xF0, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0xE4,
+0xF5, 0x48, 0x90, 0x85, 0x5E, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12,
+0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x85,
+0x6B, 0x14, 0xF0, 0xE5, 0x4E, 0x54, 0x0F, 0xC3, 0x94, 0x0C, 0x50, 0x03, 0x12, 0x49, 0xC2, 0x22,
+0x90, 0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E,
+0x90, 0x85, 0x57, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x01, 0x04, 0xE0, 0x54, 0x0F, 0xFF, 0x74, 0x40,
+0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x90, 0x85,
+0x6D, 0xF0, 0xEE, 0x90, 0x85, 0x6C, 0xF0, 0x22, 0xEF, 0x70, 0x0B, 0x90, 0x85, 0xC2, 0xE0, 0x90,
+0x86, 0x35, 0x60, 0x0B, 0x80, 0x12, 0x90, 0x85, 0xC2, 0xE0, 0x90, 0x86, 0x35, 0x60, 0x09, 0x12,
+0x1F, 0xD5, 0x00, 0x00, 0x02, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x01, 0x10, 0x7B,
+0x01, 0x7A, 0x86, 0x79, 0x35, 0x7F, 0x60, 0x7E, 0x08, 0x02, 0x55, 0x11, 0x90, 0x01, 0x37, 0x74,
+0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x5E, 0x51, 0xEF, 0x70, 0x06, 0x90, 0x01,
+0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93, 0x12, 0x54, 0x08, 0x53, 0x4E,
+0xF0, 0x43, 0x4E, 0x02, 0x22, 0x90, 0x85, 0x5F, 0xE0, 0x70, 0x1A, 0x90, 0x04, 0x1D, 0xE0, 0x70,
+0x14, 0x90, 0x85, 0xBB, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x58, 0x2E, 0x8E, 0x5E, 0x8F, 0x5F, 0x90,
+0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF, 0xF0, 0xEF, 0x60, 0x0A,
+0xE5, 0x4D, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x4D, 0x84, 0x53, 0x4E, 0xF0, 0x43, 0x4E, 0x0C,
+0x22, 0x90, 0x86, 0x4D, 0xEF, 0xF0, 0x12, 0x66, 0x8A, 0x90, 0x86, 0x4D, 0xE0, 0x60, 0x05, 0x90,
+0x05, 0x22, 0xE4, 0xF0, 0x53, 0x4E, 0xF0, 0x43, 0x4E, 0x04, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4,
+0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60,
+0x02, 0x7F, 0x00, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE5, 0x4D, 0xB4, 0x01, 0x05,
+0x7F, 0x01, 0x12, 0x4D, 0x84, 0x53, 0x4E, 0xF0, 0x43, 0x4E, 0x04, 0x22, 0xE5, 0x4F, 0x30, 0xE6,
+0x12, 0xE5, 0x4F, 0x54, 0x0F, 0xFF, 0x90, 0x01, 0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0,
+0x53, 0x4F, 0xBF, 0x22, 0x53, 0x4E, 0xF0, 0x43, 0x4E, 0x01, 0x12, 0x4C, 0x42, 0x12, 0x4E, 0x36,
+0x53, 0x4E, 0xF0, 0x43, 0x4E, 0x02, 0x22, 0xE4, 0x90, 0x85, 0x73, 0xF0, 0x90, 0x85, 0x5A, 0xF0,
+0xF5, 0x51, 0x22, 0x7D, 0x01, 0xAF, 0x4F, 0x02, 0x49, 0xC6, 0x90, 0x02, 0x84, 0xEF, 0xF0, 0xA3,
+0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12, 0x44, 0xB8, 0x51, 0x95, 0x00,
+0x40, 0x51, 0xBD, 0x00, 0x80, 0x51, 0xE8, 0x01, 0x00, 0x51, 0xFC, 0x02, 0x00, 0x52, 0x14, 0x04,
+0x00, 0x00, 0x00, 0x52, 0x31, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00,
+0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06, 0xCE, 0xC3, 0x13, 0xCE, 0x13,
+0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x80, 0x26, 0xED, 0x54, 0x7F,
+0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE,
+0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x07, 0xC3, 0x33, 0xCE, 0x33,
+0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E,
+0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80, 0x35, 0xEC, 0x54, 0x01, 0x4D,
+0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0xC3, 0x13,
+0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x04,
+0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D, 0x00, 0x25, 0xE0, 0x25, 0xE0,
+0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x22, 0xF0, 0xA3, 0xE4, 0xF0, 0x22,
+0xE4, 0x90, 0x85, 0x8C, 0xF0, 0xA3, 0xF0, 0x12, 0x60, 0xEF, 0x75, 0x8E, 0x02, 0x91, 0xDA, 0x12,
+0x60, 0x4D, 0x90, 0x85, 0xC3, 0xEF, 0xF0, 0x12, 0x60, 0x60, 0x90, 0x85, 0xC5, 0xEF, 0xF0, 0x12,
+0x60, 0x6C, 0x90, 0x85, 0xA7, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x14, 0xF5, 0x09, 0xF5,
+0x4D, 0x90, 0x85, 0xC2, 0xF0, 0x90, 0x00, 0xCC, 0xE0, 0x54, 0xF7, 0xF0, 0x12, 0x46, 0x90, 0x12,
+0x37, 0x1C, 0x12, 0x77, 0x6C, 0x71, 0x3B, 0x12, 0x60, 0x11, 0x12, 0x60, 0x84, 0xF1, 0xEF, 0x12,
+0x60, 0x2F, 0x12, 0x45, 0x02, 0x12, 0x60, 0xF7, 0x91, 0xC2, 0x90, 0x85, 0x8E, 0xE5, 0xD9, 0xF0,
+0xC2, 0xAF, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40, 0xF0, 0x71, 0x99, 0x75, 0xE8, 0x03, 0x43, 0xA8,
+0x85, 0x12, 0x83, 0x81, 0xD2, 0xAF, 0x51, 0x36, 0x12, 0x60, 0x99, 0x7D, 0xDD, 0x7F, 0x8F, 0x71,
+0x26, 0x90, 0x85, 0x8C, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0x40, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x52,
+0xA3, 0xF0, 0xE5, 0x14, 0x30, 0xE0, 0x09, 0xC2, 0xAF, 0x53, 0x14, 0xFE, 0x91, 0xEA, 0xD2, 0xAF,
+0xE5, 0x14, 0x30, 0xE4, 0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xEF, 0xD2, 0xAF, 0x12, 0x76, 0x1E, 0xE5,
+0x14, 0x30, 0xE7, 0x09, 0xC2, 0xAF, 0x53, 0x14, 0x7F, 0xD2, 0xAF, 0xB1, 0x78, 0xC2, 0xAF, 0xE5,
+0x4F, 0x54, 0x0F, 0xFF, 0xBF, 0x01, 0x0D, 0x90, 0x85, 0x5C, 0x74, 0x01, 0xF0, 0x31, 0x63, 0xE4,
+0x90, 0x85, 0x5C, 0xF0, 0xD2, 0xAF, 0x90, 0x01, 0xBD, 0xE5, 0x4E, 0xF0, 0x90, 0x85, 0x72, 0xE0,
+0x90, 0x01, 0xBC, 0xF0, 0x80, 0x9B, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75,
+0x83, 0x00, 0xED, 0xF0, 0x71, 0x99, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x3C, 0x74, 0xFF,
+0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD,
+0x7F, 0x54, 0x71, 0x26, 0x7D, 0xFF, 0x7F, 0x55, 0x71, 0x26, 0x7D, 0xFF, 0x7F, 0x56, 0x71, 0x26,
+0x7D, 0xFF, 0x7F, 0x57, 0x80, 0xC0, 0x90, 0x01, 0x30, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
+0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x71, 0x26,
+0xE4, 0xFD, 0x7F, 0x51, 0x71, 0x26, 0xE4, 0xFD, 0x7F, 0x52, 0x71, 0x26, 0xE4, 0xFD, 0x7F, 0x53,
+0x80, 0x94, 0x90, 0x00, 0x02, 0xE0, 0x44, 0x01, 0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
+0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8E, 0x53, 0x8F, 0x54, 0x8B, 0x55, 0x8A,
+0x56, 0x89, 0x57, 0xE4, 0x90, 0x86, 0x4E, 0xF0, 0xEF, 0x90, 0x00, 0x31, 0xF0, 0x71, 0x99, 0xE5,
+0x53, 0x54, 0x03, 0xFF, 0x90, 0x00, 0x32, 0xE0, 0x54, 0xFC, 0x4F, 0xF0, 0x71, 0x99, 0x90, 0x00,
+0x33, 0xE0, 0x54, 0x7F, 0xF0, 0x71, 0x99, 0x90, 0x00, 0x33, 0xE0, 0x20, 0xE7, 0x0E, 0x90, 0x86,
+0x4E, 0xE0, 0xC3, 0x94, 0x64, 0x50, 0x05, 0xE0, 0x04, 0xF0, 0x80, 0xEB, 0x90, 0x86, 0x4E, 0xE0,
+0xC3, 0x94, 0x64, 0x50, 0x10, 0x90, 0x00, 0x30, 0xE0, 0xAB, 0x55, 0xAA, 0x56, 0xA9, 0x57, 0x12,
+0x43, 0xC3, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x85, 0xF7, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x85, 0xFB, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x00, 0x00, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x71, 0x99, 0x71, 0x92, 0x90, 0x00,
+0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0,
+0x90, 0x05, 0x53, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0x85, 0x63, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78,
+0x74, 0x01, 0xF0, 0x90, 0x85, 0x56, 0xE0, 0x60, 0x34, 0xE4, 0x90, 0x85, 0x6F, 0xF0, 0xFF, 0x7E,
+0x08, 0x12, 0x2C, 0x6E, 0x90, 0x85, 0xF7, 0x12, 0x1F, 0xC9, 0x90, 0x85, 0xF7, 0x12, 0x44, 0x45,
+0xEC, 0x54, 0xFD, 0xFC, 0x90, 0x85, 0xF7, 0x12, 0x1F, 0xC9, 0x90, 0x85, 0xF7, 0x12, 0x44, 0x45,
+0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x85, 0x60,
+0xE0, 0x60, 0x22, 0xE4, 0xFF, 0x11, 0x48, 0x90, 0x85, 0x74, 0xE0, 0x60, 0x12, 0x90, 0x85, 0xFB,
+0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xFB, 0xB1, 0x0D, 0x90,
+0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x85, 0x6A, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0x90, 0x86, 0x3E, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x86, 0x40, 0xF0, 0x90, 0x86,
+0x3E, 0xE0, 0x54, 0x7F, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x22, 0xE4, 0x90, 0x85, 0xBF, 0xF0, 0x90,
+0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80, 0x61, 0x26, 0xE4, 0x7B, 0x01, 0x7A, 0x84, 0x79,
+0x03, 0x12, 0x6D, 0x3F, 0xEF, 0xB4, 0x02, 0x14, 0x90, 0x86, 0x4A, 0xE0, 0x64, 0x04, 0x60, 0x07,
+0x43, 0x14, 0x01, 0xE0, 0x04, 0xF0, 0x22, 0xE4, 0x90, 0x86, 0x4A, 0xF0, 0x22, 0x7F, 0x70, 0x7E,
+0x08, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0x54, 0xFC, 0xFF, 0x90, 0x01, 0xE8, 0xF0,
+0xEE, 0x44, 0xF0, 0xA3, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEC, 0xF0, 0x90,
+0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xED, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
+0x01, 0xEE, 0xF0, 0x12, 0x1E, 0xF6, 0x90, 0x01, 0xEF, 0xF0, 0x90, 0x01, 0xEB, 0x74, 0x40, 0xF0,
+0x12, 0x81, 0x7E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x84, 0x9C, 0xE0, 0xC3, 0x13, 0x30, 0xE0,
+0x16, 0xEF, 0x7B, 0x01, 0xB4, 0x01, 0x06, 0x7A, 0x84, 0x79, 0xA3, 0x80, 0x04, 0x7A, 0x84, 0x79,
+0x9F, 0x7F, 0x80, 0x7E, 0x08, 0xB1, 0x11, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xF1,
+0x97, 0xEF, 0x60, 0x4E, 0x90, 0x84, 0x01, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x06, 0xF9, 0x74,
+0x84, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x02, 0xC0, 0x01, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24,
+0x08, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0xFA, 0x90, 0x86, 0x18, 0x12, 0x44, 0x89, 0xD0, 0x01, 0xD0,
+0x02, 0xB1, 0xD7, 0x90, 0x84, 0x01, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0x90,
+0x84, 0x02, 0xE0, 0xFF, 0x90, 0x84, 0x01, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12,
+0x3A, 0x3F, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x86,
+0x15, 0x12, 0x44, 0x89, 0x90, 0x84, 0x00, 0xE0, 0x90, 0x00, 0x01, 0x12, 0x43, 0xD5, 0xF1, 0x97,
+0xEF, 0x70, 0x02, 0xC1, 0x92, 0x90, 0x86, 0x15, 0x12, 0x44, 0x69, 0x8B, 0x20, 0x8A, 0x21, 0x89,
+0x22, 0x75, 0x23, 0x02, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0xD1, 0x97, 0x90, 0x86, 0x18, 0x12,
+0x44, 0x69, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x86, 0x15, 0x12, 0x44, 0x69, 0x12, 0x1E,
+0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2, 0xD1, 0x97, 0x90,
+0x01, 0xAF, 0x74, 0xFF, 0xF0, 0x90, 0x85, 0xC3, 0xE0, 0x64, 0x01, 0x70, 0x48, 0x90, 0x86, 0x15,
+0x12, 0x44, 0x69, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x75, 0x23, 0x02, 0x7B, 0x01, 0x7A, 0xFD,
+0x79, 0x20, 0xD1, 0x97, 0x90, 0x86, 0x18, 0x12, 0x44, 0x69, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22,
+0x90, 0x86, 0x15, 0x12, 0x44, 0x69, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0x7B,
+0x01, 0x7A, 0xFD, 0x79, 0x22, 0xD1, 0x97, 0x90, 0x85, 0xA7, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82,
+0x8E, 0x83, 0x74, 0xFF, 0xF0, 0x90, 0x84, 0x00, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64,
+0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1D,
+0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x86, 0x0F, 0x12, 0x44, 0x89, 0xAB, 0x20, 0xAA, 0x21, 0xA9, 0x22,
+0x90, 0x86, 0x12, 0x12, 0x44, 0x89, 0xAF, 0x23, 0x15, 0x23, 0xEF, 0x60, 0x1E, 0x90, 0x86, 0x12,
+0xE4, 0x75, 0xF0, 0x01, 0x12, 0x44, 0x72, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x86, 0x0F, 0xE4, 0x75,
+0xF0, 0x01, 0x12, 0x44, 0x72, 0xEF, 0x12, 0x43, 0xC3, 0x80, 0xDB, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9,
+0x1F, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x86, 0x1B,
+0x12, 0x44, 0x89, 0x90, 0x84, 0x02, 0xE0, 0xFF, 0x90, 0x84, 0x01, 0xE0, 0xB5, 0x07, 0x07, 0x7D,
+0x02, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x90, 0x84, 0x01, 0xE0, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09,
+0x60, 0x0B, 0x90, 0x84, 0x01, 0xE0, 0x14, 0xFF, 0xA3, 0xE0, 0xB5, 0x07, 0x0D, 0xF1, 0x97, 0xEF,
+0x60, 0x70, 0xB1, 0x78, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x90, 0x84, 0x02, 0xE0, 0x75, 0xF0,
+0x0F, 0xA4, 0x24, 0x06, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0xA8, 0x01, 0xFC, 0x7D, 0x01, 0x90, 0x86,
+0x1B, 0x12, 0x44, 0x69, 0x7E, 0x00, 0x7F, 0x02, 0x12, 0x1E, 0xD0, 0x90, 0x84, 0x02, 0xE0, 0x75,
+0xF0, 0x0F, 0xA4, 0x24, 0x08, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0,
+0x02, 0xC0, 0x01, 0x90, 0x86, 0x1E, 0x12, 0x44, 0x69, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90,
+0x86, 0x1B, 0x12, 0x44, 0x69, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0xD0, 0x01,
+0xD0, 0x02, 0xD0, 0x03, 0xD1, 0x97, 0x90, 0x84, 0x02, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02,
+0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0xAF, 0x7E, 0x01, 0x90, 0x86, 0x39, 0xEE, 0xF0,
+0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x86, 0x39, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5,
+0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C, 0xC3, 0x90, 0x86, 0x3C, 0xE0, 0x94, 0xE8, 0x90, 0x86, 0x3B,
+0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90,
+0x86, 0x3B, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xF7, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3B, 0x09,
+0x80, 0xC6, 0x7F, 0x01, 0x22, 0x8F, 0x82, 0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0x90,
+0x01, 0x64, 0x74, 0x20, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xC4,
+0x74, 0xF6, 0xF0, 0x74, 0x57, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22,
+0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7, 0xE0,
+0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF, 0xC3,
+0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x0E, 0x74, 0x0F, 0x2B,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0, 0x54,
+0xEF, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x3F, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0xFD, 0x62,
+0xE0, 0x54, 0x03, 0x4F, 0x90, 0x85, 0x7E, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x54, 0x3F, 0x25, 0xE0,
+0x25, 0xE0, 0xFF, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x85, 0x7F, 0xF0, 0x90, 0x85,
+0x7E, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xE4, 0xFF, 0x90, 0x86, 0x21, 0xEF, 0xF0, 0xA3, 0xED, 0xF0,
+0xA3, 0xEB, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x19, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x86, 0x26,
+0xF0, 0xD1, 0x4B, 0xBF, 0x01, 0x02, 0x11, 0xFB, 0x90, 0x86, 0x26, 0xE0, 0x90, 0x05, 0x22, 0xF0,
+0x80, 0x02, 0x11, 0xFB, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x85, 0xBE, 0xE0, 0xFF,
+0x7D, 0x01, 0x11, 0x2E, 0x90, 0x86, 0x24, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0x86,
+0x21, 0xE0, 0xFF, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x86, 0x2B, 0xF0, 0xEF, 0x60, 0x10, 0x74,
+0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x0E, 0x74,
+0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05, 0x74,
+0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x74, 0x11, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05, 0x74, 0x16, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x02, 0xF0, 0x74, 0x16, 0x2F, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0x03, 0xF0, 0xAE, 0x05, 0x74, 0x22, 0x2E, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEB, 0xF0, 0x90, 0x86, 0x2B, 0xE0, 0xFF, 0x74, 0x23, 0x2E, 0xF5,
+0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
+0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x22, 0xE4, 0x90, 0x85, 0x7A, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90,
+0x85, 0x2D, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x4A, 0x12, 0x85, 0x10, 0x90, 0x85, 0x3F, 0xE0, 0x64,
+0x01, 0x60, 0x02, 0x41, 0xBD, 0x90, 0x85, 0x32, 0xE0, 0x30, 0xE0, 0x18, 0xE0, 0xC3, 0x13, 0x30,
+0xE0, 0x02, 0x80, 0x0A, 0x90, 0x85, 0x32, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x06, 0xA3, 0xE0,
+0x90, 0x85, 0x7A, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x7A, 0xE0, 0x24, 0x03, 0xF5, 0x49, 0xE4,
+0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90,
+0x85, 0x30, 0xE0, 0xC4, 0x54, 0x0F, 0x90, 0x85, 0x3F, 0x30, 0xE0, 0x05, 0x74, 0x05, 0xF0, 0x80,
+0x03, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F, 0x90,
+0x85, 0x2E, 0xE0, 0xFF, 0x90, 0x85, 0x3D, 0xE0, 0xC3, 0x9F, 0x90, 0x85, 0x43, 0xF0, 0x90, 0x85,
+0x2D, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54,
+0x07, 0x30, 0xE0, 0x6E, 0x90, 0x85, 0x43, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25, 0xE0,
+0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xC8, 0x80,
+0x51, 0x90, 0x85, 0x2D, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x85, 0x32, 0xE0, 0x54,
+0xDF, 0xF0, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x49, 0xC6, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x13,
+0x54, 0x03, 0x30, 0xE0, 0x27, 0x90, 0x85, 0x34, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB, 0xF0,
+0xE4, 0x90, 0x85, 0x42, 0xF0, 0x90, 0x85, 0x3F, 0xF0, 0x90, 0x85, 0x35, 0x74, 0x06, 0xF0, 0x90,
+0x85, 0x65, 0xE0, 0x60, 0x07, 0x90, 0x85, 0x34, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22, 0x74,
+0x6F, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x4A, 0xA1, 0xBB, 0x90, 0x85, 0x3F,
+0xE0, 0x64, 0x02, 0x60, 0x02, 0x61, 0x9C, 0x90, 0x85, 0x31, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F,
+0x30, 0xE0, 0x08, 0xD1, 0x4B, 0xBF, 0x01, 0x03, 0x12, 0x54, 0x08, 0xE4, 0xFF, 0xD1, 0xF5, 0x90,
+0x85, 0x32, 0xE0, 0x30, 0xE0, 0x1F, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90, 0x85,
+0x32, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x90, 0x85, 0x7A, 0xF0, 0x90, 0x85,
+0x32, 0xE0, 0x54, 0xEF, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x2E, 0xE0, 0x24, 0x03, 0xFF, 0x90,
+0x85, 0x7A, 0xE0, 0x2F, 0xFF, 0x90, 0x85, 0x3D, 0xE0, 0xC3, 0x9F, 0xFF, 0x90, 0x85, 0x7B, 0xE0,
+0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63,
+0x74, 0x05, 0xF0, 0xE4, 0xFF, 0xD1, 0x92, 0x90, 0x85, 0x3F, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0x2D,
+0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F,
+0x90, 0x85, 0x2D, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13,
+0x54, 0x07, 0x20, 0xE0, 0x14, 0xE4, 0xFD, 0xAF, 0x4F, 0x12, 0x49, 0xC6, 0x80, 0x0B, 0xE5, 0x50,
+0x60, 0x0D, 0xE4, 0xFD, 0xAF, 0x4F, 0x12, 0x49, 0xC6, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90,
+0x85, 0x30, 0xE0, 0x30, 0xE0, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0xC4,
+0x13, 0x13, 0x13, 0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0x4A, 0xC1, 0x45, 0x90, 0x85, 0x3F, 0xE0,
+0x64, 0x03, 0x60, 0x02, 0x81, 0xF0, 0x7F, 0x01, 0xD1, 0xF5, 0x90, 0x85, 0x31, 0xE0, 0xFF, 0x13,
+0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x66, 0x8A, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x13,
+0x54, 0x03, 0x20, 0xE0, 0x02, 0x81, 0x4C, 0x90, 0x85, 0x37, 0xE0, 0xFF, 0x90, 0x85, 0x41, 0xE0,
+0xD3, 0x9F, 0x40, 0x4D, 0xE0, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x85, 0x39, 0xE0, 0xFE, 0xC3,
+0xEF, 0x9E, 0xFF, 0x24, 0x03, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x85, 0x2F, 0xE0, 0xD3, 0x9D, 0xEC,
+0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x40, 0x08, 0xE0, 0x9F, 0x90, 0x85, 0x7D, 0xF0, 0x80, 0x06,
+0x90, 0x85, 0x7D, 0x74, 0x03, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x7D, 0xE0, 0xF5, 0x49, 0xE4,
+0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x85, 0x3F, 0xE0, 0x04, 0xF0, 0x80,
+0x24, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x3A, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E,
+0x01, 0x12, 0x39, 0x77, 0x90, 0x85, 0x35, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x85, 0x3F, 0xF0, 0x90,
+0x06, 0x92, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x85, 0x41, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48, 0x90,
+0x85, 0x7C, 0xE0, 0xFF, 0x90, 0x85, 0x2F, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F,
+0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x85, 0x3F, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x63, 0x74,
+0x05, 0xF0, 0x7F, 0x01, 0xD1, 0x92, 0x90, 0x85, 0x2D, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0,
+0x2F, 0x90, 0x85, 0x2D, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1A, 0x90, 0x85, 0x32, 0xE0, 0x44,
+0x20, 0xF0, 0x90, 0x85, 0x65, 0xE0, 0x60, 0x02, 0x80, 0x0F, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x7D,
+0x01, 0x7F, 0x0C, 0x80, 0x08, 0xE5, 0x50, 0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x49, 0xC6,
+0x90, 0x85, 0x65, 0xE0, 0x60, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90, 0x85,
+0x2D, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x0F, 0x90, 0x85, 0x2D, 0xE0, 0xFF, 0x13, 0x13,
+0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x50, 0xA5, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x85, 0x30,
+0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0x4A, 0x7F, 0x01, 0xC1, 0x47,
+0x90, 0x85, 0x3F, 0xE0, 0x64, 0x04, 0x60, 0x02, 0xA1, 0xC1, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB,
+0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x85,
+0x3F, 0xE0, 0x04, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F, 0x90,
+0x85, 0x2F, 0xE0, 0xFF, 0x90, 0x85, 0x3D, 0xE0, 0xC3, 0x9F, 0x90, 0x85, 0x43, 0xF0, 0x90, 0x85,
+0x2D, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54,
+0x07, 0x30, 0xE0, 0x6E, 0x90, 0x85, 0x43, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25, 0xE0,
+0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xC8, 0x80,
+0x51, 0x90, 0x85, 0x2D, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x85, 0x32, 0xE0, 0x54,
+0xDF, 0xF0, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x49, 0xC6, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x13,
+0x54, 0x03, 0x30, 0xE0, 0x27, 0x90, 0x85, 0x34, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB, 0xF0,
+0xE4, 0x90, 0x85, 0x42, 0xF0, 0x90, 0x85, 0x3F, 0xF0, 0x90, 0x85, 0x35, 0x74, 0x07, 0xF0, 0x90,
+0x85, 0x65, 0xE0, 0x60, 0x07, 0x90, 0x85, 0x34, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22, 0x74,
+0x6F, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x4A, 0x90, 0x05, 0x22, 0xE4, 0xF0,
+0x22, 0x90, 0x85, 0x3F, 0xE0, 0x64, 0x05, 0x60, 0x02, 0xC1, 0x4A, 0x90, 0x85, 0x31, 0xE0, 0xFF,
+0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x08, 0xD1, 0x4B, 0xBF, 0x01, 0x03, 0x12, 0x54, 0x08, 0xE4,
+0xFF, 0xD1, 0xF5, 0xD1, 0x92, 0xE4, 0x90, 0x85, 0x3F, 0xF0, 0x90, 0x85, 0x2D, 0xE0, 0xC4, 0x13,
+0x54, 0x07, 0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F, 0x90, 0x85, 0x2D,
+0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20,
+0xE0, 0x14, 0xE4, 0xFD, 0xAF, 0x4F, 0x12, 0x49, 0xC6, 0x80, 0x0B, 0xE5, 0x50, 0x60, 0x0D, 0xE4,
+0xFD, 0xAF, 0x4F, 0x12, 0x49, 0xC6, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x85, 0x30, 0xE0,
+0x30, 0xE0, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x13, 0x13, 0x13,
+0x54, 0x01, 0x30, 0xE0, 0x05, 0xE4, 0xFF, 0x12, 0x55, 0x58, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF,
+0xF0, 0xE4, 0x90, 0x86, 0x48, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, 0xE0,
+0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x86,
+0x49, 0xE0, 0x94, 0xE8, 0x90, 0x86, 0x48, 0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22, 0x7F,
+0x32, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x86, 0x48, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xF7,
+0x80, 0xC6, 0x90, 0x86, 0x2C, 0xEF, 0xF0, 0x12, 0x86, 0xB9, 0x90, 0x85, 0x30, 0xE0, 0xFF, 0xC4,
+0x13, 0x54, 0x07, 0x20, 0xE0, 0x08, 0x90, 0x86, 0x2C, 0xE0, 0xFF, 0x12, 0x50, 0x48, 0x90, 0x86,
+0x2D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x90, 0x86, 0x2C, 0xE0, 0xB4, 0x01, 0x10, 0x90,
+0x85, 0x2D, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x16, 0x80, 0x0A, 0x90,
+0x85, 0x2D, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90, 0x86, 0x2D, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x86, 0x79, 0x2D, 0x12, 0x55, 0x0D, 0x90, 0x86, 0x2C, 0xE0,
+0x90, 0x85, 0x3E, 0xF0, 0x22, 0xEF, 0x64, 0x03, 0x60, 0x02, 0xE1, 0xC3, 0x90, 0x86, 0x07, 0x74,
+0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0x13, 0x13, 0x13, 0x54,
+0x1F, 0x30, 0xE0, 0x30, 0x90, 0x86, 0x0B, 0x74, 0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0, 0xA3, 0x74,
+0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41,
+0x90, 0x86, 0x07, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3, 0x74,
+0x55, 0xF0, 0x80, 0x2D, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x17, 0x90, 0x86,
+0x07, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0,
+0xA3, 0x74, 0x5A, 0x80, 0x05, 0x90, 0x86, 0x0B, 0x74, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
+0xF0, 0x90, 0x86, 0x07, 0xE0, 0x90, 0x06, 0xC0, 0xF0, 0x90, 0x86, 0x08, 0xE0, 0x90, 0x06, 0xC1,
+0xF0, 0x90, 0x86, 0x09, 0xE0, 0x90, 0x06, 0xC2, 0xF0, 0x90, 0x86, 0x0A, 0xE0, 0x90, 0x06, 0xC3,
+0xF0, 0x90, 0x86, 0x0B, 0xE0, 0x90, 0x06, 0xC4, 0xF0, 0x90, 0x86, 0x0C, 0xE0, 0x90, 0x06, 0xC5,
+0xF0, 0x90, 0x86, 0x0D, 0xE0, 0x90, 0x06, 0xC6, 0xF0, 0x90, 0x86, 0x0E, 0xE0, 0x90, 0x06, 0xC7,
+0xF0, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x06, 0xCC, 0x30, 0xE0, 0x17,
+0xE4, 0xF0, 0x22, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xEF, 0x90, 0x06,
+0xCC, 0xB4, 0x01, 0x03, 0xE4, 0xF0, 0x22, 0x74, 0x03, 0xF0, 0x22, 0x12, 0x57, 0xF6, 0xBF, 0x01,
+0x0F, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x2E, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0,
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC, 0xEF, 0x30, 0xE0, 0x02, 0x7D,
+0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5, 0x2B, 0x90, 0x01, 0x30, 0xE5,
+0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3, 0xE5, 0x2B, 0xF0, 0x22, 0x75,
+0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32, 0x43, 0x32, 0x20, 0x90, 0x01,
+0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32, 0xF0, 0x22, 0x90, 0x00, 0xF4,
+0xE0, 0x20, 0xE3, 0x09, 0xE0, 0x7F, 0x01, 0x20, 0xE2, 0x05, 0x7F, 0x02, 0x22, 0x7F, 0x00, 0x22,
+0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30, 0xE3, 0x02, 0x7F, 0x01, 0x22, 0x90, 0x85, 0xC5, 0xE0,
+0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E, 0xFD, 0x7F, 0x33, 0x22, 0x7E,
+0xFD, 0x7F, 0x2F, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74, 0x10,
+0xF0, 0x90, 0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x85, 0x8F, 0xF0, 0xA3, 0xF0,
+0x90, 0x01, 0x98, 0xE0, 0x7F, 0x00, 0x30, 0xE4, 0x02, 0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E,
+0xC3, 0x90, 0x85, 0x90, 0xE0, 0x94, 0x88, 0x90, 0x85, 0x8F, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90,
+0x01, 0xC6, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x85, 0x8F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43,
+0xF7, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x85, 0x90, 0xE0, 0x94, 0x32, 0x90,
+0x85, 0x8F, 0xE0, 0x94, 0x00, 0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0x90,
+0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01,
+0x9C, 0x74, 0x7E, 0xF0, 0xA3, 0x74, 0x92, 0xF0, 0xA3, 0x74, 0xA0, 0xF0, 0xA3, 0x74, 0x24, 0xF0,
+0x90, 0x01, 0x9B, 0x74, 0x49, 0xF0, 0x90, 0x01, 0x9A, 0x74, 0xE0, 0xF0, 0x90, 0x01, 0x99, 0xE4,
+0xF0, 0x90, 0x01, 0x98, 0x04, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54,
+0x0C, 0x13, 0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90,
+0x85, 0x76, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01,
+0x60, 0x07, 0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3C, 0x90, 0x85, 0x76, 0x74, 0x01, 0xF0, 0xA3,
+0x74, 0x3D, 0xF0, 0x79, 0x40, 0x90, 0x85, 0x76, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E,
+0x83, 0xE0, 0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x85, 0xB1, 0xF0, 0x22, 0x90, 0x85, 0xB1,
+0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0C, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30,
+0xE0, 0x03, 0x12, 0x5F, 0xDB, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0,
+0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0,
+0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x96, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0x90, 0x01, 0x34,
+0xE0, 0x55, 0x28, 0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5,
+0x2E, 0xA3, 0xE0, 0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x41, 0x65, 0x90, 0x01,
+0x34, 0x74, 0x01, 0xF0, 0x85, 0xD1, 0x0A, 0x85, 0xD3, 0x0C, 0x85, 0xD4, 0x0D, 0x85, 0xD5, 0x0E,
+0x85, 0xD6, 0x0F, 0x85, 0xD7, 0x10, 0x85, 0xD9, 0x11, 0x85, 0xD2, 0x0B, 0x75, 0x20, 0x00, 0x75,
+0x21, 0x00, 0x75, 0x22, 0x0A, 0x75, 0x23, 0x08, 0xFB, 0x7A, 0x85, 0x79, 0xB2, 0x12, 0x56, 0x97,
+0xE5, 0x50, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x46, 0x90, 0x85, 0x72, 0xE0, 0x60, 0x37, 0x90,
+0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x12, 0x50, 0xFB, 0xEF, 0x64, 0x01,
+0x70, 0x2D, 0xF5, 0x48, 0x90, 0x85, 0x5E, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E,
+0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0,
+0x90, 0x85, 0x6E, 0xF0, 0x80, 0x09, 0x12, 0x50, 0xFB, 0xBF, 0x01, 0x03, 0x12, 0x51, 0x63, 0x90,
+0x86, 0x4B, 0xE0, 0x04, 0xF0, 0xE5, 0x2C, 0x20, 0xE1, 0x02, 0x61, 0x07, 0x90, 0x01, 0x34, 0x74,
+0x02, 0xF0, 0x90, 0xFD, 0x10, 0x74, 0x7F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x30, 0xE5, 0x0B, 0x75,
+0x58, 0x88, 0x75, 0x59, 0x0F, 0x75, 0x5A, 0x0F, 0x80, 0x09, 0x75, 0x58, 0xC0, 0x75, 0x59, 0x08,
+0x75, 0x5A, 0x07, 0x90, 0x04, 0x7F, 0xE0, 0x55, 0x5A, 0xF5, 0x12, 0x90, 0x04, 0x7E, 0xE0, 0x55,
+0x5A, 0xF5, 0x13, 0x65, 0x12, 0x60, 0x60, 0xE4, 0xFF, 0xE5, 0x12, 0x75, 0xF0, 0x08, 0xA4, 0x25,
+0x58, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x15, 0x2F,
+0xF8, 0xA6, 0x06, 0x0F, 0xBF, 0x08, 0xE2, 0x75, 0x20, 0x00, 0x75, 0x21, 0x00, 0x75, 0x22, 0x15,
+0x75, 0x23, 0x08, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xA9, 0x12, 0x56, 0x97, 0x90, 0x85, 0xA9, 0xE0,
+0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0xB1, 0xBF, 0xE5, 0x12, 0x24, 0x01,
+0xFF, 0xE4, 0x33, 0xFE, 0xAD, 0x59, 0x7C, 0x00, 0x12, 0x1F, 0x4E, 0xAF, 0x05, 0x8F, 0x12, 0x90,
+0x04, 0x7F, 0xEF, 0xF0, 0xB5, 0x13, 0xA0, 0xE5, 0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x34, 0x74,
+0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90, 0x01, 0x34, 0x74, 0x10, 0xF0, 0x43, 0x14, 0x10,
+0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF, 0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54, 0xDF, 0xF0,
+0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8, 0x00, 0x75, 0xE8, 0x00, 0x12, 0x53, 0x66, 0x90,
+0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x53, 0x99, 0x80, 0xFE, 0xE5, 0x2C, 0x30, 0xE6, 0x06,
+0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0x81, 0x0F, 0x90, 0x85, 0xC4,
+0x74, 0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x85, 0xC1, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90,
+0x05, 0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x12, 0x42, 0x20, 0x90,
+0x85, 0x45, 0xE0, 0x20, 0xE0, 0x02, 0x81, 0x06, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF,
+0x12, 0x50, 0x48, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x85, 0x45, 0xE0, 0xC4, 0x13,
+0x54, 0x07, 0xFF, 0xE0, 0xFE, 0xC3, 0x13, 0x54, 0x0F, 0xC3, 0x9F, 0x40, 0x30, 0xE0, 0x54, 0xFE,
+0xF0, 0xE0, 0x54, 0xE1, 0xF0, 0x90, 0x85, 0x4A, 0x12, 0x44, 0x45, 0x90, 0x81, 0x57, 0x12, 0x1F,
+0xC9, 0x7F, 0x60, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x85, 0x46, 0x12, 0x44, 0x45, 0x90, 0x81,
+0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x80, 0x1B, 0x90, 0x85, 0x45,
+0xE0, 0xFF, 0xC3, 0x13, 0x54, 0x0F, 0xFE, 0xEF, 0x54, 0xE1, 0xFF, 0xEE, 0x04, 0x54, 0x0F, 0xFE,
+0x25, 0xE0, 0x4F, 0xF0, 0x80, 0x02, 0xD1, 0x14, 0xB1, 0x84, 0x90, 0x85, 0xC4, 0xE4, 0xF0, 0xE5,
+0x2E, 0x30, 0xE1, 0x41, 0x90, 0x01, 0x36, 0x74, 0x02, 0xF0, 0xF1, 0x0B, 0x31, 0x27, 0x90, 0x85,
+0x75, 0xE0, 0x60, 0x1D, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x16, 0x7D, 0x02, 0x7F, 0x02, 0x12,
+0x3A, 0x22, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x85, 0x70, 0xE0, 0x90, 0x05, 0x73,
+0xF0, 0x05, 0x08, 0xE5, 0x08, 0xC3, 0x94, 0xFF, 0x40, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE,
+0xF0, 0xE0, 0x44, 0x01, 0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x43, 0x90, 0x01, 0x36, 0x74, 0x04, 0xF0,
+0x12, 0x4B, 0xD0, 0x90, 0x85, 0x75, 0xE0, 0x60, 0x34, 0x90, 0x85, 0x70, 0xE0, 0xFF, 0x90, 0x85,
+0x59, 0xE0, 0x6F, 0x70, 0x28, 0x90, 0x85, 0x70, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x90, 0x01, 0x3F,
+0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22,
+0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x85, 0x59, 0xE0, 0x14, 0xF0, 0xE5, 0x2E, 0x30,
+0xE3, 0x34, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0, 0xE5, 0x4D, 0x64, 0x01, 0x70, 0x28, 0xE5, 0x50,
+0x60, 0x24, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x75, 0x48, 0x00,
+0x90, 0x85, 0x64, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77,
+0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4, 0x2B, 0x90, 0x01, 0x36, 0x74, 0x10,
+0xF0, 0xE5, 0x4D, 0xB4, 0x01, 0x20, 0xE5, 0x50, 0x60, 0x1C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90,
+0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x85, 0x73, 0xE4, 0xF0, 0x53, 0x51, 0xFD, 0xE5, 0x51, 0x54,
+0x07, 0x70, 0x03, 0x12, 0x51, 0x63, 0xE5, 0x2E, 0x30, 0xE5, 0x25, 0x90, 0x01, 0x36, 0x74, 0x20,
+0xF0, 0xE5, 0x4D, 0xB4, 0x01, 0x1A, 0xE5, 0x50, 0x60, 0x16, 0x90, 0x85, 0x72, 0xE0, 0x64, 0x02,
+0x60, 0x0B, 0xE5, 0x4E, 0x64, 0x0C, 0x60, 0x08, 0x12, 0x50, 0xA5, 0x80, 0x03, 0x12, 0x4F, 0xD4,
+0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40, 0xF0, 0xE5, 0x4D, 0xB4, 0x01, 0x10,
+0xE5, 0x50, 0x60, 0x0C, 0x53, 0x51, 0xFE, 0xE5, 0x51, 0x54, 0x07, 0x70, 0x03, 0x12, 0x51, 0x63,
+0xE5, 0x2F, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x12, 0x4F, 0x57, 0x74, 0x96,
+0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0,
+0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0,
+0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x86, 0x3E, 0xE0, 0x30, 0xE0, 0x2E, 0xE5, 0x4D, 0xB4, 0x01, 0x29,
+0x90, 0x86, 0x3D, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x0B, 0x90, 0x86, 0x40, 0xE0, 0x04, 0xF0,
+0xE4, 0x90, 0x86, 0x3D, 0xF0, 0x90, 0x86, 0x40, 0xE0, 0xFF, 0x90, 0x86, 0x3F, 0xE0, 0xD3, 0x9F,
+0x50, 0x07, 0xB1, 0xBA, 0xE4, 0x90, 0x86, 0x40, 0xF0, 0x22, 0xE4, 0xFF, 0x02, 0x4D, 0x84, 0x90,
+0x85, 0x76, 0xE0, 0x54, 0xF0, 0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A,
+0x00, 0x79, 0x15, 0x90, 0x86, 0x1E, 0x12, 0x44, 0x89, 0x0B, 0x7A, 0x85, 0x79, 0x76, 0x02, 0x56,
+0xE6, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x12, 0x1E, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x86, 0x3E,
+0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xE0, 0x30, 0xE0, 0x02, 0xB1, 0xBA, 0x90, 0x85, 0x9A, 0x12, 0x44,
+0x69, 0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
+0x86, 0x3F, 0xF0, 0x22, 0x90, 0x85, 0x2D, 0xE0, 0x30, 0xE0, 0x6E, 0x7F, 0x01, 0x12, 0x5E, 0xF5,
+0x90, 0x85, 0x31, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x02, 0xD1, 0x8A, 0x7F, 0x01,
+0x12, 0x5E, 0x92, 0x90, 0x85, 0x2D, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x29, 0x90, 0x85,
+0x2D, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1F, 0x90, 0x85, 0x32, 0xE0, 0x44, 0x20, 0xF0, 0x90,
+0x85, 0x65, 0xE0, 0x60, 0x06, 0x7D, 0x01, 0x7F, 0x04, 0x80, 0x09, 0x90, 0x05, 0x22, 0xE4, 0xF0,
+0x7D, 0x01, 0x7F, 0x0C, 0x12, 0x49, 0xC6, 0x90, 0x85, 0x65, 0xE0, 0x90, 0x05, 0x22, 0x60, 0x05,
+0x74, 0x6F, 0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54,
+0x01, 0x30, 0xE0, 0x05, 0x7F, 0x01, 0x12, 0x55, 0x58, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
+0xD0, 0x90, 0x85, 0xEF, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x85, 0xF3, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74,
+0xFF, 0xF0, 0x90, 0x85, 0x63, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x85,
+0x56, 0xE0, 0x60, 0x14, 0x12, 0x50, 0xFB, 0xBF, 0x01, 0x0B, 0x90, 0x85, 0x2D, 0xE0, 0xFF, 0xC4,
+0x54, 0x0F, 0x30, 0xE0, 0x03, 0x12, 0x4F, 0x15, 0x90, 0x85, 0x45, 0xE0, 0x20, 0xE0, 0x24, 0x90,
+0x85, 0x60, 0xE0, 0x60, 0x1E, 0x7F, 0x01, 0x12, 0x50, 0x48, 0x90, 0x85, 0x74, 0xE0, 0x60, 0x13,
+0x90, 0x85, 0xF3, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0xF3,
+0x12, 0x55, 0x0D, 0x12, 0x53, 0x92, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x85, 0x76, 0xF0,
+0x90, 0x85, 0x2D, 0xE0, 0x20, 0xE0, 0x02, 0xE1, 0xAD, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x13,
+0x54, 0x03, 0x30, 0xE0, 0x2A, 0xE4, 0xF5, 0x48, 0x90, 0x85, 0x39, 0xE0, 0xF5, 0x49, 0xE4, 0xFB,
+0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x85,
+0x35, 0x74, 0x01, 0xF0, 0xE4, 0x90, 0x85, 0x41, 0xF0, 0x90, 0x85, 0x3F, 0xF0, 0x80, 0x20, 0xE4,
+0xF5, 0x48, 0x90, 0x85, 0x76, 0xE0, 0xFF, 0x90, 0x85, 0x2E, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4,
+0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x85, 0x3F, 0x74, 0x01, 0xF0, 0x90,
+0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x85, 0x3E, 0x74, 0x01, 0xF0, 0x90, 0x85, 0x65, 0xE0, 0x60,
+0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x85,
+0x2D, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x0F, 0x90, 0x85, 0x2D, 0xE0, 0xFF, 0x13, 0x13,
+0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x50, 0xA5, 0xE4, 0x90, 0x86, 0x4B, 0xF0, 0x22, 0xC0, 0xE0,
+0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x7D,
+0xAE, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x67, 0xFF, 0xA3, 0xF0, 0x53, 0x91, 0xEF, 0x90, 0x00,
+0x51, 0xE0, 0xFE, 0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90, 0x00, 0x52, 0xE0, 0xFE, 0x90,
+0x00, 0x56, 0xE0, 0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06, 0x90, 0x00, 0x55, 0x74, 0x10,
+0xF0, 0xE5, 0x3D, 0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20, 0xF0, 0xE5, 0x3D, 0x30, 0xE6,
+0x06, 0x90, 0x00, 0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7, 0x06, 0x90, 0x00, 0x55, 0x74,
+0x80, 0xF0, 0xE5, 0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74, 0x01, 0xF0, 0xE5, 0x3E, 0x30,
+0xE1, 0x06, 0x90, 0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30, 0xE2, 0x06, 0x90, 0x00, 0x56,
+0x74, 0x04, 0xF0, 0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56, 0x74, 0x08, 0xF0, 0x90, 0x01,
+0xC4, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82,
+0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75,
+0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06,
+0xC0, 0x07, 0x75, 0x5B, 0x00, 0x90, 0x01, 0xC4, 0x74, 0x55, 0xF0, 0x74, 0x68, 0xA3, 0xF0, 0x53,
+0x91, 0xDF, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0, 0x55, 0x31, 0xF5, 0x35,
+0xA3, 0xE0, 0x55, 0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37, 0xE5, 0x34, 0x30, 0xE0,
+0x06, 0x90, 0x01, 0x3C, 0x74, 0x01, 0xF0, 0xE5, 0x34, 0x30, 0xE1, 0x10, 0x90, 0x01, 0x3C, 0x74,
+0x02, 0xF0, 0x90, 0x85, 0x2D, 0xE0, 0x20, 0xE0, 0x03, 0x12, 0x45, 0xD6, 0xE5, 0x34, 0x30, 0xE2,
+0x36, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE0, 0x21, 0x75, 0x48,
+0x00, 0x90, 0x85, 0x5E, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39,
+0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x08, 0x90,
+0x85, 0x6E, 0xE4, 0xF0, 0x12, 0x51, 0x63, 0xE5, 0x34, 0x30, 0xE3, 0x36, 0x90, 0x01, 0x3C, 0x74,
+0x08, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x21, 0x75, 0x48, 0x00, 0x90, 0x85, 0x5E, 0xE0,
+0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74,
+0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x80, 0x08, 0x90, 0x85, 0x6B, 0xE4, 0xF0, 0x12,
+0x51, 0x63, 0xE5, 0x34, 0x30, 0xE4, 0x3C, 0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x90, 0x85, 0x45,
+0xE0, 0x30, 0xE0, 0x24, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF, 0x12, 0x50, 0x48, 0x90,
+0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F,
+0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x80, 0x03, 0x12, 0x59, 0xA6, 0x90, 0x85, 0x4E, 0xE0, 0x60,
+0x02, 0x51, 0xE8, 0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3C, 0x74, 0x20, 0xF0, 0xE5, 0x35,
+0x30, 0xE0, 0x18, 0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90, 0x00, 0x83, 0xE0, 0xF5, 0x4F, 0x90,
+0x01, 0xBB, 0xE5, 0x4F, 0xF0, 0x12, 0x51, 0x2C, 0x12, 0x51, 0x63, 0xE5, 0x35, 0x30, 0xE2, 0x06,
+0x90, 0x01, 0x3D, 0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3D, 0x74, 0x10,
+0xF0, 0x90, 0x85, 0xC0, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, 0xF0,
+0x90, 0x05, 0xFD, 0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x01,
+0xF0, 0xE5, 0x36, 0x30, 0xE1, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0, 0xE5, 0x36, 0x30, 0xE3,
+0x09, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0x12, 0x84, 0xF2, 0xE5, 0x36, 0x30, 0xE4, 0x06, 0x90,
+0x01, 0x3E, 0x74, 0x10, 0xF0, 0xE5, 0x36, 0x30, 0xE2, 0x76, 0x90, 0x01, 0x3E, 0x74, 0x04, 0xF0,
+0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE7, 0x13, 0x74, 0x80, 0xF0, 0x90, 0x07, 0x95, 0x74, 0x04, 0xF0,
+0xA3, 0xE0, 0x44, 0x04, 0xF0, 0xE4, 0xFF, 0x12, 0x55, 0x58, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE6,
+0x12, 0x74, 0x40, 0xF0, 0x90, 0x07, 0x7C, 0xE0, 0xB4, 0x06, 0x08, 0x90, 0x07, 0x80, 0xE0, 0xFF,
+0x12, 0x84, 0x9C, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE5, 0x14, 0x74, 0x20, 0xF0, 0xE4, 0xFF, 0x12,
+0x55, 0x58, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x07,
+0x95, 0xE0, 0x30, 0xE2, 0x0D, 0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x54, 0xFB, 0xF0, 0x7F, 0x01, 0x12,
+0x55, 0x58, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE0, 0x07, 0x74, 0x01, 0xF0, 0xFF, 0x12, 0x55, 0x58,
+0xE5, 0x36, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x20, 0xF0, 0xE5, 0x36, 0x30, 0xE6, 0x06,
+0x90, 0x01, 0x3E, 0x74, 0x40, 0xF0, 0xE5, 0x36, 0x30, 0xE7, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x80,
+0xF0, 0xE5, 0x37, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x43, 0x14, 0x80, 0xE5,
+0x37, 0x30, 0xE4, 0x1E, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0x12, 0x45, 0x09, 0x90, 0x85, 0x70,
+0xE0, 0x90, 0x05, 0x73, 0xF0, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x12, 0x66, 0x14, 0x12,
+0x65, 0x84, 0x74, 0x55, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x68, 0xA3, 0xF0, 0xD0, 0x07, 0xD0,
+0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0,
+0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x01, 0x63, 0xE4, 0xF0, 0x90, 0x81, 0x57,
+0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x7F, 0x01,
+0x02, 0x55, 0x58, 0x12, 0x1E, 0xF6, 0x90, 0x85, 0x4E, 0xF0, 0x70, 0x02, 0x51, 0xE8, 0x22, 0x90,
+0x85, 0x97, 0x12, 0x44, 0x89, 0xEF, 0x12, 0x44, 0x92, 0x6B, 0xAC, 0x01, 0x6B, 0xA4, 0x02, 0x6B,
+0xF3, 0x03, 0x6B, 0xFC, 0x10, 0x6C, 0x04, 0x11, 0x6C, 0x0C, 0x12, 0x6C, 0x14, 0x16, 0x6C, 0x1E,
+0x17, 0x6C, 0x28, 0x18, 0x6C, 0x32, 0x19, 0x6C, 0x3B, 0x1D, 0x6C, 0x45, 0x1E, 0x6C, 0x50, 0x21,
+0x6C, 0x58, 0x22, 0x6C, 0x60, 0x23, 0x6C, 0x68, 0x24, 0x6C, 0x70, 0x25, 0x6C, 0x78, 0x26, 0x6C,
+0x80, 0x27, 0x6C, 0x88, 0x28, 0x6C, 0x90, 0x29, 0x6B, 0xB5, 0x2D, 0x6B, 0xBE, 0x2E, 0x6C, 0x99,
+0x2F, 0x6C, 0xF9, 0x30, 0x6C, 0xA9, 0x32, 0x6C, 0xA1, 0x33, 0x6B, 0xD0, 0x34, 0x6C, 0xB1, 0x36,
+0x6C, 0xBA, 0x37, 0x6C, 0xC3, 0x38, 0x6C, 0xCB, 0x3A, 0x6B, 0xC7, 0x3B, 0x6C, 0xD4, 0x3E, 0x6C,
+0xDC, 0x3F, 0x6C, 0xE5, 0x41, 0x6D, 0x02, 0x46, 0x6B, 0xD8, 0x47, 0x6B, 0xEA, 0x48, 0x6B, 0xE1,
+0x49, 0x6D, 0x1C, 0x4B, 0x6D, 0x0B, 0x4E, 0x6C, 0xEE, 0x52, 0x6C, 0xF1, 0x53, 0x6D, 0x13, 0x54,
+0x00, 0x00, 0x6D, 0x25, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0xED, 0x90, 0x85, 0x97, 0x12,
+0x44, 0x69, 0x02, 0x77, 0x78, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x78, 0x59, 0x90, 0x85,
+0x97, 0x12, 0x44, 0x69, 0x02, 0x78, 0xA1, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x78, 0xDA,
+0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0xF3, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x79,
+0x0C, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x79, 0xCC, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69,
+0x02, 0x80, 0xE2, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x79, 0xDD, 0x90, 0x85, 0x97, 0x12,
+0x44, 0x69, 0xA1, 0x2D, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xA1, 0x33, 0x90, 0x85, 0x97, 0x12,
+0x44, 0x69, 0xA1, 0x39, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x7F, 0x01, 0x80, 0x2F, 0x90, 0x85,
+0x97, 0x12, 0x44, 0x69, 0x7F, 0x02, 0x80, 0x25, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x7F, 0x03,
+0x80, 0x1B, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x7B, 0x07, 0x90, 0x85, 0x97, 0x12, 0x44,
+0x69, 0xE4, 0xFF, 0x80, 0x08, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x7F, 0x04, 0x02, 0x7A, 0x25,
+0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xC1, 0xE5, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xC1, 0xFD,
+0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0x15, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0x2D,
+0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0x45, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0x5D,
+0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0x75, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0x8D,
+0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x7B, 0x3F, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xC1,
+0xD6, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0xA5, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1,
+0xBD, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x7B, 0x67, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69,
+0x02, 0x7D, 0x1A, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xA1, 0xCC, 0x90, 0x85, 0x97, 0x12, 0x44,
+0x69, 0x02, 0x7D, 0x2C, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0xE1, 0xD5, 0x90, 0x85, 0x97, 0x12,
+0x44, 0x69, 0x02, 0x80, 0x43, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x80, 0x7E, 0x02, 0x80,
+0x97, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x61, 0x03, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02,
+0x65, 0xE1, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x73, 0xE3, 0x90, 0x85, 0x97, 0x12, 0x44,
+0x69, 0xA1, 0xEE, 0x90, 0x85, 0x97, 0x12, 0x44, 0x69, 0x02, 0x80, 0xEA, 0x90, 0x85, 0x97, 0x12,
+0x44, 0x69, 0x02, 0x81, 0x6C, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x7D, 0x05, 0x7F,
+0x0B, 0x80, 0x10, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x0A, 0x7D, 0x01, 0x7F, 0x0D, 0x80, 0x04, 0x7D,
+0x03, 0x7F, 0x11, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x86, 0x41, 0x12, 0x44, 0x89,
+0xE4, 0xFE, 0x90, 0x00, 0xA3, 0xE0, 0x54, 0xF8, 0x44, 0x05, 0xF0, 0x90, 0x00, 0xA0, 0xE0, 0x54,
+0x0F, 0x64, 0x04, 0x70, 0x5A, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x49, 0x90, 0xFD, 0x50, 0xEF,
+0xF0, 0xA3, 0xED, 0xF0, 0xEE, 0xC3, 0x9D, 0x50, 0x1E, 0x90, 0x86, 0x41, 0x12, 0x44, 0x69, 0x8E,
+0x82, 0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x52, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD,
+0xF5, 0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDD, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x0F, 0x74, 0x52, 0x2E,
+0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5, 0x83, 0xE4, 0xF0, 0x0E, 0x80, 0xEB, 0x90, 0xFD, 0x58, 0x74,
+0x01, 0xF0, 0xFF, 0x80, 0x12, 0x90, 0x01, 0x43, 0xE0, 0x04, 0xF0, 0x7F, 0x02, 0x80, 0x08, 0x90,
+0x01, 0x42, 0xE0, 0x04, 0xF0, 0x7F, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x85, 0x9A, 0x12,
+0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D, 0x01,
+0x7F, 0x23, 0xB1, 0x43, 0xEF, 0xB4, 0x03, 0x05, 0x7F, 0xFF, 0x12, 0x75, 0x82, 0x22, 0x90, 0x85,
+0x9A, 0x12, 0x44, 0x89, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x85, 0x9D, 0x74, 0x0A,
+0xF0, 0x90, 0x85, 0x9D, 0xE0, 0xFF, 0x70, 0x02, 0xC1, 0xD1, 0x90, 0xFD, 0x58, 0xE0, 0x30, 0xE0,
+0x02, 0xC1, 0xC8, 0x90, 0xFD, 0x50, 0x74, 0x86, 0xF0, 0xA3, 0xE4, 0xF0, 0xEF, 0xB4, 0x0A, 0x05,
+0xA3, 0x74, 0x10, 0x80, 0x75, 0x90, 0x85, 0x9D, 0xE0, 0xFF, 0xB4, 0x09, 0x0E, 0x90, 0xFD, 0x52,
+0x74, 0x0C, 0xF0, 0x90, 0xFD, 0x54, 0x74, 0x83, 0xF0, 0x80, 0x77, 0xEF, 0xB4, 0x08, 0x0D, 0x90,
+0xFD, 0x52, 0xE4, 0xF0, 0x90, 0xFD, 0x54, 0x74, 0x1D, 0xF0, 0x80, 0x66, 0xEF, 0xB4, 0x07, 0x07,
+0x90, 0xFD, 0x52, 0x74, 0x04, 0x80, 0x43, 0xEF, 0xB4, 0x06, 0x0E, 0x90, 0xFD, 0x52, 0x74, 0x20,
+0xF0, 0x90, 0xFD, 0x54, 0x74, 0x70, 0xF0, 0x80, 0x49, 0xEF, 0xB4, 0x05, 0x0E, 0x90, 0xFD, 0x52,
+0x74, 0x0C, 0xF0, 0x90, 0xFD, 0x54, 0x74, 0x03, 0xF0, 0x80, 0x37, 0xEF, 0xB4, 0x04, 0x07, 0x90,
+0xFD, 0x52, 0x74, 0x24, 0x80, 0x14, 0xEF, 0xB4, 0x03, 0x07, 0x90, 0xFD, 0x52, 0x74, 0x30, 0x80,
+0x09, 0xEF, 0xB4, 0x02, 0x0D, 0x90, 0xFD, 0x52, 0x74, 0x28, 0xF0, 0x90, 0xFD, 0x54, 0xE4, 0xF0,
+0x80, 0x10, 0xEF, 0xB4, 0x01, 0x0C, 0x90, 0xFD, 0x52, 0x74, 0x10, 0xF0, 0x90, 0xFD, 0x54, 0x74,
+0x80, 0xF0, 0x90, 0xFD, 0x53, 0xE4, 0xF0, 0x90, 0xFD, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
+0x04, 0xF0, 0x90, 0x85, 0x9D, 0xE0, 0x14, 0xF0, 0x7F, 0x46, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xC1,
+0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0xE9, 0x24, 0x01, 0xF9, 0xE4, 0x3A,
+0xFA, 0x7D, 0x04, 0xA1, 0x43, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44,
+0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D, 0x01, 0x7F, 0x17, 0xA1, 0x43, 0x90, 0x85, 0x9A,
+0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D,
+0x01, 0x7F, 0x18, 0xA1, 0x43, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44,
+0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D, 0x01, 0x7F, 0x19, 0xA1, 0x43, 0x90, 0x85, 0x9A,
+0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D,
+0x01, 0x7F, 0x1A, 0xA1, 0x43, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44,
+0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D, 0x01, 0x7F, 0x1B, 0xA1, 0x43, 0x90, 0x85, 0x9A,
+0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D,
+0x01, 0x7F, 0x1C, 0xA1, 0x43, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44,
+0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D, 0x03, 0x7F, 0x1D, 0xA1, 0x43, 0x90, 0x85, 0x9A,
+0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D,
+0x01, 0x7F, 0x1E, 0xA1, 0x43, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44,
+0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D, 0x01, 0x7F, 0x1F, 0xA1, 0x43, 0x90, 0x85, 0x9A,
+0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D,
+0x01, 0x7F, 0x20, 0xA1, 0x43, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44,
+0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x7D, 0x01, 0x7F, 0x24, 0xA1, 0x43, 0x12, 0x1E, 0xF6,
+0xF5, 0x4D, 0x22, 0x90, 0x85, 0x9A, 0x02, 0x44, 0x89, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0,
+0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04,
+0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x53, 0x91, 0xBF, 0x90, 0xFD, 0x68, 0xE0, 0x20, 0xE0, 0x02,
+0x41, 0xB9, 0x90, 0x85, 0xA6, 0xE0, 0x70, 0x16, 0x90, 0x00, 0x2E, 0xE0, 0x90, 0x84, 0xA7, 0xF0,
+0x90, 0x00, 0x2D, 0xE0, 0x90, 0x84, 0xA8, 0xF0, 0x90, 0x85, 0xA6, 0x74, 0x01, 0xF0, 0x90, 0xFD,
+0x60, 0xE0, 0x54, 0x3F, 0xD3, 0x94, 0x09, 0x50, 0x02, 0x91, 0x92, 0x90, 0xFD, 0x60, 0xE0, 0x64,
+0x0E, 0x60, 0x02, 0x01, 0xF9, 0x90, 0x84, 0x9C, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x20,
+0xE0, 0x02, 0x01, 0xF9, 0x90, 0xFD, 0x62, 0xE0, 0x54, 0xC0, 0xFE, 0x90, 0x07, 0x90, 0xE0, 0x54,
+0x3F, 0x4E, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x07, 0x91, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90,
+0x07, 0x92, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x07, 0x93, 0xF0, 0x90, 0x07, 0x95, 0x74, 0x01,
+0xF0, 0xEF, 0x20, 0xE0, 0x44, 0x90, 0x84, 0x9C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x19,
+0x90, 0x07, 0x78, 0x12, 0x58, 0x8E, 0x90, 0x84, 0x9C, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x49,
+0x90, 0x07, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x80, 0x40, 0x90, 0x84, 0x9C, 0xE0, 0xFF, 0xC3, 0x13,
+0x30, 0xE0, 0x11, 0xE4, 0xFF, 0x12, 0x55, 0x58, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3,
+0xE0, 0x44, 0x01, 0xF0, 0x90, 0x07, 0x78, 0x80, 0x14, 0x90, 0x84, 0x9C, 0xE0, 0xFF, 0x13, 0x13,
+0x54, 0x3F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x12, 0x58, 0x8E, 0x80, 0x0C, 0xE0, 0x44, 0x10,
+0xF0, 0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x0F, 0x0A,
+0x90, 0xFD, 0x62, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0x71, 0x4D, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x15,
+0x70, 0x76, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x85, 0x81, 0xF0, 0xE0, 0x30, 0xE6, 0x1C, 0xF4, 0x54,
+0x3F, 0x04, 0xFF, 0x90, 0x84, 0xA7, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0xC3, 0x9F, 0x90, 0x85, 0x80,
+0xF0, 0xD3, 0x94, 0x3F, 0x40, 0x20, 0xE4, 0xF0, 0x80, 0x1C, 0x90, 0x84, 0xA7, 0xE0, 0x13, 0x13,
+0x54, 0x3F, 0xFF, 0x90, 0x85, 0x81, 0xE0, 0x54, 0x3F, 0x2F, 0x90, 0x85, 0x80, 0xF0, 0xD3, 0x94,
+0x3F, 0x40, 0x03, 0x74, 0x3F, 0xF0, 0x90, 0x85, 0x80, 0xE0, 0xFF, 0x90, 0x01, 0xE7, 0xF0, 0xEF,
+0x54, 0x30, 0xC4, 0x54, 0x0F, 0xFF, 0x90, 0x85, 0x80, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x4F,
+0x90, 0x85, 0x82, 0xF0, 0x90, 0x00, 0x2E, 0xF0, 0xEE, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x84, 0xA8,
+0xE0, 0x54, 0x0F, 0x4F, 0x90, 0x00, 0x2D, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x21, 0x07, 0x90,
+0xFD, 0x62, 0xE0, 0xFF, 0x51, 0xD4, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x22, 0x02, 0x51, 0xFC, 0x90,
+0xFD, 0x60, 0xE0, 0x64, 0x23, 0x70, 0x7A, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x85, 0x44, 0x30, 0xE0,
+0x05, 0x74, 0x01, 0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x30, 0xE1, 0x5B, 0x90,
+0x85, 0x45, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x7F, 0x60, 0x7E, 0x08,
+0x12, 0x2C, 0x6E, 0x90, 0x85, 0x4A, 0x12, 0x1F, 0xC9, 0xE4, 0xFF, 0x12, 0x50, 0x48, 0x7F, 0x70,
+0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x85, 0x46, 0x12, 0x1F, 0xC9, 0x90, 0x81, 0x57, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x01, 0xBE, 0xE0,
+0x04, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x85, 0x45, 0x30, 0xE2, 0x08, 0xE0, 0x54, 0x1F, 0x44,
+0x20, 0xF0, 0x80, 0x06, 0xE0, 0x54, 0x1F, 0x44, 0x60, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0xFF, 0xB1,
+0x82, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x24, 0x02, 0x71, 0x24, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x25,
+0x13, 0x90, 0xFD, 0x62, 0xE0, 0x60, 0x0D, 0x90, 0x85, 0x34, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x85,
+0x3C, 0x74, 0x04, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x26, 0x04, 0x7F, 0x01, 0x91, 0xFE, 0x90,
+0xFD, 0x60, 0xE0, 0xB4, 0x30, 0x07, 0xE4, 0xFB, 0xFD, 0x7F, 0x01, 0x71, 0x78, 0x90, 0x85, 0x4E,
+0xE0, 0x60, 0x4F, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x31, 0x70, 0x47, 0x90, 0xFD, 0x62, 0xE0, 0x30,
+0xE0, 0x36, 0x90, 0x01, 0x63, 0xE4, 0xF0, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0xE4, 0xFF, 0x12, 0x50, 0x48, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5,
+0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0xE4, 0xFF, 0x12, 0x55, 0x58,
+0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x80, 0x0A, 0x90, 0xFD, 0x62, 0xE0, 0x30, 0xE1, 0x03, 0x12,
+0x6A, 0xE8, 0x90, 0xFD, 0x68, 0xE0, 0x44, 0x01, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0,
+0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0,
+0xF0, 0xD0, 0xE0, 0x32, 0xAD, 0x07, 0x90, 0x85, 0x83, 0xE0, 0x54, 0xF0, 0x44, 0x09, 0xF0, 0x54,
+0x0F, 0x44, 0x10, 0xF0, 0x90, 0x85, 0x85, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0x85, 0x90,
+0x86, 0x1E, 0x12, 0x44, 0x89, 0x7A, 0x85, 0x79, 0x83, 0x02, 0x56, 0xE6, 0x90, 0x00, 0x75, 0xE0,
+0x44, 0x01, 0xF0, 0x7F, 0x01, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0x74, 0x03, 0xF0,
+0x7F, 0x02, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0xE4, 0xF0, 0x90, 0x00, 0x75, 0xE0,
+0x54, 0xFE, 0xF0, 0x22, 0x90, 0x85, 0x83, 0xE0, 0x54, 0xF0, 0x44, 0x0D, 0xF0, 0x54, 0x0F, 0x44,
+0x10, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x85, 0x85, 0xF0, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0x85,
+0x90, 0x86, 0x1E, 0x12, 0x44, 0x89, 0x7A, 0x85, 0x79, 0x83, 0x02, 0x56, 0xE6, 0xAE, 0x07, 0x90,
+0x85, 0x83, 0xE0, 0x54, 0xF0, 0x44, 0x04, 0xF0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90, 0x85, 0x85,
+0xEE, 0xF0, 0xA3, 0xED, 0xF0, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0x85, 0x90, 0x86, 0x1E, 0x12, 0x44,
+0x89, 0x7A, 0x85, 0x79, 0x83, 0x02, 0x56, 0xE6, 0xAC, 0x07, 0x90, 0x85, 0xDE, 0xE0, 0x44, 0x0F,
+0xF0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0x85, 0xE0, 0xEC, 0xF0, 0x60, 0x32, 0x90, 0xFD, 0x63,
+0xE0, 0x90, 0x85, 0xE1, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0x90, 0x85, 0xE2, 0xF0, 0x90, 0xFD, 0x64,
+0xE0, 0x90, 0x85, 0xE3, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x85, 0xE4, 0xF0, 0x90, 0xFD, 0x66,
+0xE0, 0x90, 0x85, 0xE5, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x85, 0xE6, 0xF0, 0x80, 0x11, 0x90,
+0x85, 0xE1, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
+0x7B, 0x01, 0x7A, 0x85, 0x79, 0xE0, 0x90, 0x86, 0x1E, 0x12, 0x44, 0x89, 0x7A, 0x85, 0x79, 0xDE,
+0x02, 0x56, 0xE6, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x1E, 0xF6, 0x90, 0x85, 0x9A,
+0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x9B, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F,
+0x0F, 0x90, 0x85, 0x9C, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x9D, 0xF0, 0x90,
+0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x9E, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0xFD,
+0x58, 0xE0, 0x20, 0xE0, 0x14, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0x9A, 0x7F, 0x30, 0x91, 0x48, 0x90,
+0x85, 0x9A, 0xE0, 0xFB, 0x7D, 0x01, 0xE4, 0x80, 0x07, 0x90, 0x85, 0x9A, 0xE0, 0xFB, 0xE4, 0xFD,
+0xFF, 0x71, 0x78, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x85, 0xA1, 0x12, 0x44, 0x89, 0xE4, 0xFE, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x2F, 0x90, 0xFD,
+0x50, 0xEF, 0xF0, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x1E, 0x90, 0x85, 0xA1, 0x12, 0x44, 0x69, 0x8E,
+0x82, 0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x51, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD,
+0xF5, 0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDC, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0x90, 0x85, 0x83, 0xE0, 0x54, 0xF0, 0x44, 0x0A, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90,
+0x85, 0x85, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x85, 0x86, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90,
+0x85, 0x87, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x85, 0x88, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90,
+0x85, 0x89, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90, 0x85, 0x83, 0x30, 0xE6, 0x08, 0xE0, 0x54, 0x0F,
+0x44, 0x50, 0xF0, 0x80, 0x16, 0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90,
+0x85, 0x8A, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x85, 0x8B, 0xF0, 0x7B, 0x01, 0x7A, 0x85, 0x79,
+0x85, 0x90, 0x86, 0x1E, 0x12, 0x44, 0x89, 0x7A, 0x85, 0x79, 0x83, 0x02, 0x56, 0xE6, 0xAD, 0x07,
+0x90, 0x85, 0x83, 0xE0, 0x54, 0xF0, 0x44, 0x0E, 0xF0, 0x54, 0x0F, 0xF0, 0x90, 0xFD, 0x62, 0xE0,
+0x90, 0x85, 0x86, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x85, 0x87, 0xF0, 0x90, 0xFD, 0x64, 0xE0,
+0x90, 0x85, 0x88, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x85, 0x89, 0xF0, 0x90, 0xFD, 0x66, 0xE0,
+0x90, 0x85, 0x8A, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x85, 0x8B, 0xF0, 0xED, 0xB4, 0x01, 0x11,
+0x90, 0x85, 0x83, 0xE0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90, 0x85, 0x85, 0x74, 0x01, 0xF0, 0x80,
+0x13, 0xED, 0xB4, 0x02, 0x0F, 0x90, 0x85, 0x83, 0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0x85,
+0x85, 0x74, 0x02, 0xF0, 0x90, 0x85, 0x83, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x60, 0x13, 0x7B, 0x01,
+0x7A, 0x85, 0x79, 0x85, 0x90, 0x86, 0x1E, 0x12, 0x44, 0x89, 0x7A, 0x85, 0x79, 0x83, 0x12, 0x56,
+0xE6, 0x22, 0xAD, 0x07, 0x90, 0x85, 0xFF, 0xE0, 0x54, 0xF0, 0x44, 0x0C, 0xF0, 0x54, 0x0F, 0xF0,
+0x90, 0xFD, 0x62, 0xE0, 0x90, 0x86, 0x01, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x86, 0x02, 0xF0,
+0x90, 0xFD, 0x64, 0xE0, 0x90, 0x86, 0x03, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x86, 0x04, 0xF0,
+0x90, 0xFD, 0x66, 0xE0, 0x90, 0x86, 0x05, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x86, 0x06, 0xF0,
+0xED, 0xB4, 0x02, 0x0B, 0x90, 0x85, 0xFF, 0xE0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x80, 0x3C, 0xED,
+0xB4, 0x04, 0x0B, 0x90, 0x85, 0xFF, 0xE0, 0x54, 0x0F, 0x44, 0x60, 0xF0, 0x80, 0x2D, 0xED, 0xF4,
+0x70, 0x29, 0x90, 0x85, 0xFF, 0xE0, 0x54, 0x0F, 0x44, 0x60, 0xF0, 0x90, 0x85, 0x44, 0xE0, 0x60,
+0x08, 0x90, 0x86, 0x01, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x86, 0x01, 0xF0, 0xE4, 0x90,
+0x86, 0x02, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x86, 0x79,
+0x01, 0x90, 0x86, 0x1E, 0x12, 0x44, 0x89, 0x7A, 0x85, 0x79, 0xFF, 0x02, 0x56, 0xE6, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x85, 0x8F, 0xF0, 0x90,
+0x85, 0x8F, 0xE0, 0xFD, 0x70, 0x02, 0xE1, 0x67, 0x90, 0x86, 0x4C, 0xE0, 0xFF, 0x74, 0x01, 0x7E,
+0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D,
+0x70, 0x02, 0xE1, 0x60, 0x90, 0x86, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12, 0x44,
+0x5D, 0xE0, 0x90, 0x85, 0x90, 0xF0, 0x75, 0x20, 0x01, 0x75, 0x21, 0x85, 0x75, 0x22, 0x90, 0x75,
+0x23, 0x01, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0x91, 0x12, 0x56, 0x97, 0x90, 0x85, 0x91, 0xE0, 0xFF,
+0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x86, 0x4C, 0x30, 0xE0, 0x59, 0xE0, 0x75, 0xF0, 0x02,
+0x90, 0x00, 0x88, 0x12, 0x44, 0x5D, 0xE0, 0x90, 0x85, 0x92, 0xF0, 0x90, 0x86, 0x4C, 0xE0, 0x75,
+0xF0, 0x02, 0x90, 0x00, 0x89, 0x12, 0x44, 0x5D, 0xE0, 0x90, 0x85, 0x93, 0xF0, 0x90, 0x86, 0x4C,
+0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x44, 0x5D, 0xE0, 0x90, 0x85, 0x94, 0xF0, 0x90,
+0x86, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x44, 0x5D, 0xE0, 0x90, 0x85, 0x95,
+0xF0, 0x90, 0x86, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x44, 0x5D, 0xE0, 0x90,
+0x85, 0x96, 0xF0, 0x80, 0x33, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x44, 0x5D, 0xE0,
+0x90, 0x85, 0x92, 0xF0, 0x90, 0x86, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x44,
+0x5D, 0xE0, 0x90, 0x85, 0x93, 0xF0, 0x90, 0x86, 0x4C, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3,
+0x12, 0x44, 0x5D, 0xE0, 0x90, 0x85, 0x94, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01, 0x7A, 0x85,
+0x79, 0x92, 0x12, 0x6B, 0x0F, 0x90, 0x85, 0x8F, 0xE0, 0xFF, 0x90, 0x86, 0x4C, 0xE0, 0xFE, 0x74,
+0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x85, 0x8F, 0xF0,
+0x90, 0x86, 0x4C, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC,
+0x90, 0x01, 0xCC, 0xF0, 0x90, 0x86, 0x4C, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0xC1, 0x2F,
+0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x84, 0x01,
+0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xAF, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90,
+0x85, 0x9A, 0x12, 0x44, 0x69, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x72, 0xF0, 0x90,
+0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x55, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF,
+0x54, 0x01, 0x90, 0x85, 0x56, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x01, 0x90, 0x85, 0x60, 0xF0, 0x90,
+0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x13, 0x13, 0x54, 0x01, 0x90, 0x85, 0x5D, 0xF0, 0xEF, 0x13,
+0x13, 0x13, 0x54, 0x01, 0x90, 0x85, 0x63, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4,
+0x54, 0x01, 0x90, 0x85, 0x5F, 0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x01, 0x90, 0x85, 0x74, 0xF0, 0x90,
+0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x90, 0x85, 0x62, 0xF0, 0xE0,
+0x70, 0x38, 0x90, 0x85, 0x60, 0xE0, 0x70, 0x10, 0xFF, 0x12, 0x50, 0x48, 0x90, 0x85, 0x9D, 0x12,
+0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x80, 0x0F, 0x7F, 0x01, 0x12, 0x50, 0x48, 0x90, 0x85, 0x9D,
+0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x45, 0x90, 0x81, 0x57,
+0x12, 0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x85, 0x56, 0xE0, 0x70, 0x03,
+0x12, 0x4F, 0x15, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x12, 0x4D, 0x1E, 0x90, 0x85, 0x72, 0xE0,
+0x90, 0x01, 0xE6, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF,
+0x30, 0xE0, 0x25, 0x12, 0x1E, 0xF6, 0x90, 0x85, 0x61, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F,
+0x90, 0x85, 0x64, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x85, 0x5E, 0xF0, 0x90, 0x00, 0x03,
+0x12, 0x1F, 0x0F, 0x90, 0x85, 0x69, 0xF0, 0x22, 0x90, 0x85, 0x61, 0x74, 0x03, 0xF0, 0x90, 0x85,
+0x64, 0x74, 0x05, 0xF0, 0x90, 0x85, 0x5E, 0x74, 0x14, 0xF0, 0x90, 0x85, 0x69, 0x74, 0x05, 0xF0,
+0x22, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x85, 0x68, 0xF0, 0x90,
+0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x85, 0x66, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F,
+0x90, 0x85, 0x68, 0x74, 0x05, 0xF0, 0x90, 0x85, 0x66, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90,
+0x85, 0x66, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x85, 0x65,
+0xF0, 0x60, 0x20, 0x90, 0x85, 0x2D, 0xE0, 0x20, 0xE0, 0x19, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x49,
+0xC6, 0x90, 0x85, 0x56, 0xE0, 0x60, 0x09, 0x90, 0x85, 0x6F, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0x15,
+0x12, 0x44, 0xE5, 0x90, 0x85, 0x65, 0xE0, 0x90, 0x01, 0xE7, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0xFF,
+0x54, 0x80, 0xFE, 0x90, 0x85, 0x4F, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x0F, 0xFF, 0xE0,
+0x54, 0xF0, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54, 0x70, 0xFF, 0x90, 0x85, 0x4F, 0xE0, 0x54, 0x8F,
+0x4F, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x51, 0xF0, 0x90, 0x00, 0x03, 0x12,
+0x1F, 0x0F, 0x90, 0x85, 0x52, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x53, 0xF0,
+0x90, 0x00, 0x01, 0x74, 0x19, 0x12, 0x43, 0x90, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xD3,
+0x94, 0x20, 0x50, 0x08, 0x90, 0x85, 0x50, 0x74, 0x01, 0xF0, 0x80, 0x57, 0xEF, 0xD3, 0x94, 0x40,
+0x50, 0x08, 0x90, 0x85, 0x50, 0x74, 0x02, 0xF0, 0x80, 0x49, 0xEF, 0xD3, 0x94, 0x60, 0x50, 0x08,
+0x90, 0x85, 0x50, 0x74, 0x03, 0xF0, 0x80, 0x3B, 0xEF, 0xD3, 0x94, 0x80, 0x50, 0x08, 0x90, 0x85,
+0x50, 0x74, 0x04, 0xF0, 0x80, 0x2D, 0xEF, 0xD3, 0x94, 0xA0, 0x50, 0x08, 0x90, 0x85, 0x50, 0x74,
+0x05, 0xF0, 0x80, 0x1F, 0xEF, 0xD3, 0x94, 0xC0, 0x50, 0x08, 0x90, 0x85, 0x50, 0x74, 0x06, 0xF0,
+0x80, 0x11, 0xEF, 0xD3, 0x94, 0xE0, 0x90, 0x85, 0x50, 0x50, 0x05, 0x74, 0x07, 0xF0, 0x80, 0x03,
+0x74, 0x08, 0xF0, 0x90, 0x85, 0x50, 0xE0, 0x90, 0x85, 0x54, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x60,
+0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x02, 0x09,
+0xE0, 0xFD, 0x12, 0x1E, 0xF6, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90, 0x85, 0xBA, 0xF0, 0x90, 0x00,
+0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x85, 0xBB, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F,
+0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x85, 0xBC, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0xED,
+0x2F, 0x90, 0x85, 0xBD, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xAE, 0x05, 0xED, 0x2F,
+0x90, 0x85, 0xBE, 0xF0, 0x22, 0xEF, 0x70, 0x21, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x14, 0x90, 0x00,
+0x40, 0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0x3F, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x44, 0x01, 0xF0,
+0x80, 0x07, 0x90, 0x07, 0x78, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x64, 0x01, 0x70, 0x6A, 0x12, 0x1E,
+0xF6, 0x90, 0x00, 0x01, 0x30, 0xE0, 0x2E, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC0, 0xF0, 0x90, 0x00,
+0x02, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC1, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x06,
+0xC2, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC3, 0xF0, 0x90, 0x06, 0xCC, 0xE0,
+0x54, 0xFE, 0xF0, 0x80, 0x2C, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC4, 0xF0, 0x90, 0x00, 0x02, 0x12,
+0x1F, 0x0F, 0x90, 0x06, 0xC5, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC6, 0xF0,
+0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC7, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x44, 0x01,
+0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x44, 0x02, 0xF0, 0xEF, 0xB4, 0x02, 0x11, 0x12, 0x1E, 0xF6, 0x90,
+0x06, 0xC8, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC9, 0xF0, 0xEF, 0xB4, 0x03,
+0x11, 0x12, 0x1E, 0xF6, 0x90, 0x06, 0xCA, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06,
+0xCB, 0xF0, 0xEF, 0x64, 0x04, 0x70, 0x1F, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x07, 0x83, 0x30, 0xE0,
+0x06, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0x6F, 0xF0, 0xEF, 0x30, 0xE1, 0x07, 0x90,
+0x07, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A,
+0x12, 0x44, 0x69, 0x12, 0x1E, 0xF6, 0x90, 0x84, 0x03, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F,
+0x90, 0x84, 0x04, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x84, 0x05, 0xF0, 0x90, 0x85,
+0x9A, 0x12, 0x44, 0x69, 0x12, 0x6D, 0x3F, 0xEF, 0xB4, 0x02, 0x03, 0x43, 0x14, 0x01, 0x22, 0x12,
+0x1E, 0xF6, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x18, 0x12, 0x1F, 0xB6, 0xA8, 0x04, 0xA9, 0x05,
+0xAA, 0x06, 0xAB, 0x07, 0x90, 0x84, 0xA3, 0x12, 0x44, 0x45, 0xEC, 0x54, 0x03, 0xFC, 0x12, 0x44,
+0x1A, 0x90, 0x84, 0x9F, 0x02, 0x1F, 0xC9, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0x90, 0x01, 0xBC,
+0xF0, 0xEF, 0x30, 0xE0, 0x5C, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x4E, 0x90, 0xFD, 0x50, 0x74,
+0x0A, 0xF0, 0xA3, 0x74, 0x06, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0xFD, 0x52, 0xF0,
+0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0xFD, 0x53, 0xF0, 0xA3, 0xE4, 0xF0, 0x12, 0x1E, 0xF6,
+0xC3, 0x13, 0x90, 0xFD, 0x55, 0x30, 0xE0, 0x05, 0x74, 0xA0, 0xF0, 0x80, 0x03, 0x74, 0xC0, 0xF0,
+0x90, 0xFD, 0x56, 0x74, 0x10, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x90, 0xFD, 0x50, 0x74, 0x0A, 0xF0,
+0xA3, 0x74, 0x06, 0xF0, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x01,
+0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFE, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x7C, 0x00,
+0x24, 0x00, 0xFF, 0xEC, 0x3E, 0xFE, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFC, 0x74,
+0x20, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x85, 0x9A, 0xEF, 0xF0, 0xEE, 0xF9, 0x90, 0x01, 0xBD,
+0xE0, 0x44, 0x02, 0xF0, 0x90, 0x02, 0x09, 0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xEC, 0xC3,
+0x99, 0x50, 0x43, 0xEC, 0x70, 0x04, 0x7D, 0x04, 0x80, 0x02, 0xE4, 0xFD, 0xED, 0xC3, 0x94, 0x20,
+0x50, 0x07, 0xAF, 0x05, 0x91, 0x6E, 0x0D, 0x80, 0xF3, 0x0C, 0x90, 0xFD, 0x10, 0xE0, 0x04, 0xF0,
+0xEC, 0xB5, 0x01, 0xDA, 0xE4, 0xFD, 0xED, 0x75, 0xF0, 0x08, 0xA4, 0xFF, 0x90, 0x85, 0x9A, 0xE0,
+0xFB, 0xC3, 0xEF, 0x9B, 0x74, 0x80, 0xF8, 0x65, 0xF0, 0x98, 0x50, 0x07, 0xAF, 0x05, 0x91, 0x6E,
+0x0D, 0x80, 0xE3, 0x0C, 0x80, 0xB8, 0x90, 0x00, 0x81, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x81, 0x12,
+0x53, 0x26, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x04, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0xFD,
+0x58, 0xE0, 0x30, 0xE0, 0x08, 0x90, 0x01, 0xB8, 0xE0, 0x04, 0xF0, 0x80, 0xF1, 0xEF, 0x75, 0xF0,
+0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x50, 0xF0,
+0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90,
+0xFD, 0x51, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0x90, 0xFD, 0x52, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x03, 0xF5, 0x82, 0xE4,
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x53, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x04,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x54, 0xF0, 0xEF, 0x75, 0xF0, 0x08,
+0xA4, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x55, 0xF0, 0xEF,
+0x75, 0xF0, 0x08, 0xA4, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD,
+0x56, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x07, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0x90, 0xFD, 0x57, 0xF0, 0xA3, 0x74, 0x01, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0xFE, 0x10,
+0x60, 0x05, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x90, 0x85, 0x9E, 0x12, 0x44, 0x89, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0xFE,
+0x90, 0x85, 0x2D, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F,
+0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x85, 0x2D, 0xE0, 0x54, 0xFB, 0x4E, 0xF0,
+0xEF, 0x54, 0x10, 0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x20, 0xFE,
+0x90, 0x85, 0x2D, 0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F,
+0xF0, 0x12, 0x1E, 0xF6, 0xFC, 0x54, 0x80, 0xFF, 0x90, 0x85, 0x2D, 0xE0, 0x54, 0x7F, 0x4F, 0xF0,
+0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFD, 0x54, 0x01, 0xFF, 0x90, 0x85, 0x30, 0xE0, 0x54, 0xFE,
+0x4F, 0xF0, 0xED, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
+0x0F, 0xFD, 0x54, 0x04, 0xFF, 0x90, 0x85, 0x30, 0xE0, 0x54, 0xFB, 0x4F, 0xF0, 0xED, 0x54, 0x10,
+0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE,
+0x90, 0x85, 0x30, 0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F,
+0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0x80, 0xFF, 0x90, 0x85, 0x30, 0xE0, 0x54, 0x7F,
+0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x85, 0x31, 0xE0,
+0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00, 0x04,
+0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x80, 0xFE, 0x90, 0x85, 0x31, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF,
+0x54, 0x10, 0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54,
+0x04, 0xFE, 0x90, 0x85, 0x31, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54,
+0xF7, 0x4F, 0xF0, 0xEC, 0x20, 0xE0, 0x02, 0xE1, 0xA6, 0x90, 0x05, 0x54, 0xE0, 0xC3, 0x13, 0x90,
+0x85, 0x3D, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1C, 0x90, 0x85, 0x9E,
+0x12, 0x44, 0x69, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x2E, 0xF0, 0x90, 0x00, 0x02,
+0x12, 0x1F, 0x0F, 0x90, 0x85, 0x2F, 0xF0, 0x80, 0x4E, 0x90, 0x85, 0x9E, 0x12, 0x44, 0x69, 0x90,
+0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03, 0x90,
+0x85, 0x2E, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x85, 0x2E,
+0x74, 0x2A, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF,
+0xC3, 0x94, 0x03, 0x90, 0x85, 0x2F, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80,
+0x06, 0x90, 0x85, 0x2F, 0x74, 0x2A, 0xF0, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03,
+0x30, 0xE0, 0x3D, 0x90, 0x85, 0x2E, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x85, 0x36, 0xF0, 0xE0,
+0xC3, 0x13, 0xA3, 0xF0, 0x90, 0x85, 0x2F, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x85, 0x38, 0xF0,
+0x90, 0x85, 0x2E, 0xE0, 0xC3, 0x13, 0x90, 0x85, 0x39, 0xF0, 0x90, 0x85, 0x2F, 0xE0, 0xC3, 0x13,
+0x90, 0x85, 0x3A, 0xF0, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0xAD,
+0xE4, 0x90, 0x84, 0xA9, 0xF0, 0x90, 0x85, 0x9E, 0x12, 0x44, 0x69, 0x90, 0x00, 0x03, 0x12, 0x1F,
+0x0F, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x14, 0x12, 0x1E, 0xF6, 0x13, 0x13, 0x13, 0x54,
+0x1F, 0x30, 0xE0, 0x04, 0x7F, 0x01, 0x80, 0x02, 0xE4, 0xFF, 0x12, 0x50, 0x48, 0x90, 0x85, 0x2D,
+0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x18, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30,
+0xE0, 0x03, 0x75, 0x4F, 0x04, 0x90, 0x05, 0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x11, 0xF0, 0x90,
+0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x85, 0x35, 0xE0, 0xB4, 0x01, 0x08, 0x90, 0x85, 0x3F, 0x74,
+0x01, 0xF0, 0x80, 0x2B, 0x90, 0x85, 0x35, 0xE0, 0xB4, 0x04, 0x08, 0x90, 0x85, 0x3F, 0x74, 0x04,
+0xF0, 0x80, 0x1C, 0x90, 0x85, 0x35, 0xE0, 0xB4, 0x06, 0x08, 0x90, 0x85, 0x3F, 0x74, 0x02, 0xF0,
+0x80, 0x0D, 0x90, 0x85, 0x35, 0xE0, 0xB4, 0x07, 0x06, 0x90, 0x85, 0x3F, 0x74, 0x05, 0xF0, 0xE4,
+0x90, 0x85, 0x35, 0xF0, 0x80, 0x65, 0x90, 0x85, 0x9E, 0x12, 0x44, 0x69, 0x12, 0x1E, 0xF6, 0xFF,
+0x13, 0x13, 0x13, 0x54, 0x1F, 0x90, 0x85, 0x9A, 0x30, 0xE0, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00,
+0x03, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x12, 0x83, 0xE4, 0x90, 0x00,
+0x40, 0x74, 0x20, 0xF0, 0x90, 0x85, 0x9E, 0x12, 0x44, 0x69, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F,
+0x13, 0x13, 0x13, 0x54, 0x1F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03,
+0x74, 0x01, 0xF0, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0x9A, 0x12, 0x55, 0x0D, 0x90, 0x05, 0x22, 0xE4,
+0xF0, 0x90, 0x05, 0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x43, 0xF0, 0x90, 0x85, 0x32, 0xE0, 0x54,
+0xDF, 0xF0, 0xE4, 0x90, 0x85, 0x3E, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54,
+0x01, 0x30, 0xE0, 0x09, 0x90, 0x84, 0x9C, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x0C, 0x7F, 0x01, 0x12,
+0x55, 0x58, 0x90, 0x84, 0x9C, 0xE0, 0x54, 0xFD, 0xF0, 0x7F, 0x03, 0x12, 0x5E, 0xF5, 0xD0, 0xD0,
+0x92, 0xAF, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x85, 0x32, 0xE0, 0x54, 0xFE,
+0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54,
+0x04, 0xFE, 0x90, 0x85, 0x32, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54,
+0xF7, 0x4F, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0x33, 0xF0, 0x22, 0x90, 0x85,
+0x9A, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69,
+0x7D, 0x03, 0x7F, 0x26, 0x02, 0x6D, 0x43, 0x90, 0x00, 0xCC, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x00,
+0x6A, 0xE4, 0xF0, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x44,
+0x04, 0xF0, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x02, 0xE0, 0x44, 0x10, 0xF0,
+0x90, 0x00, 0x32, 0xE0, 0x44, 0x04, 0xF0, 0x7F, 0x05, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0x00,
+0x6A, 0x74, 0x15, 0xF0, 0x90, 0x00, 0xFA, 0xE0, 0x44, 0x04, 0xF0, 0x7D, 0xDD, 0x7F, 0x81, 0x02,
+0x53, 0x26, 0x12, 0x1E, 0xF6, 0x90, 0x85, 0xC2, 0xF0, 0x22, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x89,
+0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x90, 0x85, 0x9D, 0x12, 0x44, 0x89, 0xE4, 0x90, 0x85, 0xA1,
+0xF0, 0x90, 0x85, 0x9A, 0x12, 0x44, 0x69, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0xA2,
+0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0xA3, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
+0x0F, 0x90, 0x85, 0xA4, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0xA5, 0xF0, 0x90,
+0x85, 0x9D, 0x12, 0x44, 0x69, 0x12, 0x1E, 0xF6, 0x70, 0x12, 0x90, 0x85, 0xA0, 0x74, 0x3C, 0xF0,
+0x7B, 0x01, 0x7A, 0x85, 0x79, 0xA0, 0x7D, 0x06, 0x7F, 0x87, 0x80, 0x1C, 0x90, 0x85, 0x9D, 0x12,
+0x44, 0x69, 0x12, 0x1E, 0xF6, 0xB4, 0x01, 0x13, 0x90, 0x85, 0xA0, 0x74, 0x40, 0xF0, 0x7B, 0x01,
+0x7A, 0x85, 0x79, 0xA0, 0x7D, 0x04, 0x7F, 0xC7, 0x12, 0x6D, 0x43, 0x22, 0x12, 0x1E, 0xF6, 0x90,
+0x85, 0xC0, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x85, 0xC1, 0xF0, 0x22, 0xE4, 0x90,
+0x86, 0x46, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xEB, 0xE0, 0x54, 0xC0, 0x60, 0x43, 0xC3, 0x90, 0x86,
+0x47, 0xE0, 0x94, 0x88, 0x90, 0x86, 0x46, 0xE0, 0x94, 0x13, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0,
+0x44, 0x04, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x86, 0x46, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xF7,
+0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x86, 0x47, 0xE0, 0x94, 0x64, 0x90, 0x86,
+0x46, 0xE0, 0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE2, 0xB8, 0x7F, 0x00, 0x22,
+0x7F, 0x01, 0x22, 0x90, 0x85, 0xE7, 0x12, 0x1F, 0xC9, 0x90, 0x85, 0xEB, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x00, 0x00, 0xE4, 0x7F, 0x1F, 0xFE, 0xFD, 0xFC, 0x90, 0x85, 0xEB, 0x12, 0x44, 0x51, 0xD3,
+0x12, 0x44, 0x34, 0x50, 0x41, 0x90, 0x85, 0xEB, 0x12, 0x44, 0x45, 0xA9, 0x07, 0x90, 0x85, 0xE7,
+0x12, 0x44, 0x45, 0xA8, 0x01, 0x12, 0x1F, 0xA3, 0xEF, 0x54, 0x01, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC,
+0x7B, 0x01, 0xFA, 0xF9, 0xF8, 0xC3, 0x12, 0x44, 0x34, 0x60, 0x1B, 0x90, 0x85, 0xEB, 0x12, 0x44,
+0x45, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, 0x85,
+0xEB, 0x12, 0x1F, 0xC9, 0x80, 0xAD, 0x90, 0x85, 0xEB, 0x02, 0x44, 0x45, 0x90, 0x85, 0xC6, 0x12,
+0x1F, 0xC9, 0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, 0x85, 0xCA, 0x12, 0x44, 0x51, 0xC3, 0x12,
+0x44, 0x34, 0x90, 0x85, 0xC6, 0x60, 0x67, 0x12, 0x44, 0x45, 0x12, 0x2C, 0x6E, 0x90, 0x85, 0xD2,
+0x12, 0x1F, 0xC9, 0x90, 0x85, 0xCA, 0x12, 0x44, 0x45, 0x31, 0xD3, 0x90, 0x85, 0xD6, 0x12, 0x1F,
+0xC9, 0x90, 0x85, 0xCA, 0x12, 0x44, 0x45, 0x12, 0x44, 0x27, 0x90, 0x85, 0xD2, 0x12, 0x44, 0x51,
+0x12, 0x44, 0x0D, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x85, 0xD6, 0x12, 0x44,
+0x45, 0xA9, 0x07, 0x90, 0x85, 0xCE, 0x12, 0x44, 0x45, 0xA8, 0x01, 0x12, 0x1F, 0xB6, 0xD0, 0x03,
+0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x44, 0x1A, 0x90, 0x85, 0xDA, 0x12, 0x1F, 0xC9, 0x90,
+0x85, 0xC6, 0x12, 0x44, 0x45, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x85, 0xDA, 0x80, 0x0A, 0x12, 0x44,
+0x45, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x85, 0xCE, 0x12, 0x44, 0x45, 0x90, 0x81, 0x57, 0x12, 0x1F,
+0xC9, 0xD0, 0x07, 0xD0, 0x06, 0x02, 0x34, 0x30, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x86, 0x4F, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x47, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08,
+0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46, 0xE0, 0x5F, 0xF0, 0x12, 0x53,
+0x99, 0x90, 0x86, 0x4F, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3,
+0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B,
+0xA8, 0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4C,
+0x90, 0x86, 0x4F, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02,
+0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x62, 0xE0, 0x5F, 0xF0, 0x12, 0x53, 0x99, 0x90,
+0x86, 0x4F, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
+0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x60, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05,
+0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0x90, 0x84, 0x9C, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0x54, 0xFD, 0xF0, 0x54, 0xF7,
+0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0x12, 0x1F, 0xD5, 0x20, 0x08, 0x30, 0x70, 0x90, 0x84,
+0xA3, 0x12, 0x1F, 0xD5, 0xC0, 0x08, 0x30, 0x70, 0xE4, 0x90, 0x84, 0xA9, 0xF0, 0xA3, 0xF0, 0x43,
+0xE8, 0x04, 0x90, 0xFD, 0x68, 0x74, 0x02, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x44, 0x10, 0xF0, 0x90,
+0x07, 0x83, 0xE4, 0xF0, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x04, 0x64, 0xE4, 0xF0, 0x90,
+0x00, 0x40, 0x74, 0x20, 0xF0, 0x71, 0xE4, 0x90, 0x85, 0x44, 0x74, 0x01, 0xF0, 0x7D, 0x04, 0x7F,
+0x02, 0x02, 0x3A, 0xAD, 0x90, 0x85, 0x2D, 0xE0, 0x54, 0xFE, 0xF0, 0xA3, 0x74, 0x0B, 0xF0, 0xA3,
+0x74, 0x08, 0xF0, 0xE4, 0x90, 0x85, 0x3E, 0xF0, 0xA3, 0xF0, 0x90, 0x85, 0x2D, 0xE0, 0x54, 0xFD,
+0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF,
+0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xFD, 0xF0,
+0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0,
+0xE0, 0x54, 0x7F, 0xF0, 0xA3, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F,
+0xF0, 0x90, 0x85, 0x40, 0x74, 0x02, 0xF0, 0x90, 0x85, 0x32, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54,
+0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x85, 0x3D, 0xF0, 0x90, 0x85, 0x34,
+0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x85, 0x3B, 0xF0, 0xA3, 0xF0, 0x90, 0x85, 0x41, 0xF0, 0xA3,
+0xF0, 0x90, 0x85, 0x34, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x85, 0x31, 0xE0,
+0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54, 0xF7, 0xF0, 0x90, 0x85, 0x45, 0xE0, 0x54,
+0xFE, 0xF0, 0xE0, 0x54, 0xE1, 0xF0, 0xE4, 0x90, 0x85, 0x4E, 0xF0, 0x22, 0xAD, 0x07, 0x90, 0x85,
+0x7A, 0xE0, 0x54, 0xF0, 0x44, 0x05, 0xF0, 0x54, 0x0F, 0x44, 0x10, 0xF0, 0x90, 0x85, 0x7C, 0xEF,
+0xF0, 0x7B, 0x01, 0x7A, 0x85, 0x79, 0x7C, 0x90, 0x86, 0x1E, 0x12, 0x44, 0x89, 0x7A, 0x85, 0x79,
+0x7A, 0x02, 0x56, 0xE6, 0x90, 0x85, 0x60, 0xE0, 0x60, 0x27, 0x90, 0x85, 0x63, 0xE0, 0x70, 0x21,
+0x90, 0x85, 0x30, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0,
+0x22, 0x90, 0x85, 0x5D, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74, 0x0D, 0xF0, 0x22, 0x74, 0x09,
+0xF0, 0x22, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x11, 0x90, 0x85,
+0x34, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x08, 0xE0, 0x44, 0x04, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0x22,
+0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x02, 0xC1, 0xB8, 0x90, 0x85,
+0x35, 0xE0, 0x64, 0x01, 0x70, 0x39, 0x90, 0x06, 0x92, 0xE0, 0x20, 0xE2, 0x06, 0x90, 0x86, 0x4B,
+0xE0, 0x60, 0x21, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x85, 0x41, 0xE0, 0x04, 0xF0, 0xE4,
+0x90, 0x86, 0x4B, 0xF0, 0x90, 0x85, 0x36, 0xE0, 0xFF, 0x90, 0x85, 0x41, 0xE0, 0xB5, 0x07, 0x02,
+0x80, 0x02, 0xC1, 0xA3, 0xE4, 0x90, 0x85, 0x35, 0xF0, 0x90, 0x85, 0x3F, 0x04, 0xF0, 0x22, 0x90,
+0x85, 0x35, 0xE0, 0x64, 0x04, 0x70, 0x3A, 0x90, 0x06, 0x92, 0xE0, 0x20, 0xE2, 0x06, 0x90, 0x86,
+0x4B, 0xE0, 0x60, 0x21, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x85, 0x41, 0xE0, 0x04, 0xF0,
+0xE4, 0x90, 0x86, 0x4B, 0xF0, 0x90, 0x85, 0x38, 0xE0, 0xFF, 0x90, 0x85, 0x41, 0xE0, 0xB5, 0x07,
+0x02, 0x80, 0x02, 0xC1, 0xA3, 0xE4, 0x90, 0x85, 0x35, 0xF0, 0x90, 0x85, 0x3F, 0x74, 0x04, 0xF0,
+0x22, 0x90, 0x85, 0x35, 0xE0, 0x64, 0x06, 0x60, 0x02, 0xC1, 0x67, 0x90, 0x85, 0x42, 0xE0, 0xB4,
+0x04, 0x0F, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x54, 0x0F, 0x90, 0x85, 0x3F, 0x30, 0xE0, 0x4E, 0xC1,
+0xB5, 0x90, 0x85, 0x34, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x45, 0xE0, 0x54, 0xFB, 0xF0,
+0xE4, 0xA3, 0xF0, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x02, 0xC1, 0x76, 0x90,
+0x85, 0x42, 0xE0, 0xFF, 0x90, 0x85, 0x41, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D,
+0x03, 0x12, 0x1F, 0x3C, 0x90, 0x85, 0x39, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94,
+0x32, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x90, 0x85, 0x3F, 0x40, 0x02, 0xC1, 0xB5, 0x74, 0x02, 0xF0,
+0x22, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4D, 0x84, 0x90, 0x85, 0x42, 0xE0,
+0x04, 0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39,
+0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x85, 0x42, 0xE0, 0xFF, 0x90, 0x85, 0x41, 0xE0,
+0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12, 0x1F, 0x3C, 0x90, 0x85, 0x39, 0xE0,
+0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x40, 0x58,
+0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x85, 0x35, 0xE0, 0x64, 0x07, 0x70, 0x49, 0x90,
+0x85, 0x42, 0xE0, 0xB4, 0x04, 0x05, 0x90, 0x85, 0x3F, 0x80, 0x3A, 0x90, 0x85, 0x34, 0xE0, 0x13,
+0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0C, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x85, 0x3F,
+0x80, 0x23, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4D, 0x84, 0x90, 0x85, 0x42,
+0xE0, 0x04, 0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12,
+0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x64, 0x01, 0x70, 0x3C, 0x90, 0x85,
+0x2D, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x07, 0x90, 0x07, 0x78, 0x74, 0x0D, 0xF0,
+0x22, 0x90, 0x85, 0x30, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xE0, 0x13, 0x13, 0x54, 0x3F,
+0x90, 0x07, 0x78, 0x30, 0xE0, 0x24, 0x80, 0x0E, 0x90, 0x85, 0x30, 0xE0, 0xC3, 0x13, 0x90, 0x07,
+0x78, 0x30, 0xE0, 0x02, 0x80, 0x14, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x85, 0x31, 0xE0, 0xC4, 0x13,
+0x13, 0x13, 0x54, 0x01, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x04, 0x74, 0x03, 0xF0, 0x22, 0x74, 0x01,
+0xF0, 0x22, 0xBB, 0x72,
+};
+
+u8 Rtl8723UFwUMCBCutImgArrayWithBT[Rtl8723UUMCBCutImgArrayWithBTLength] = {
+0x02, 0x23, 0x02, 0x00, 0x25, 0x00, 0x00, 0x00, 0x06, 0x27, 0x22, 0x20, 0xFC, 0x5E, 0x01, 0x00,
+0x17, 0x25, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x4A, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x61, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x67, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x67, 0xA9, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x6A, 0x89, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03,
+0x00, 0x04, 0x06, 0x05, 0x04, 0x02, 0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09,
+0x08, 0x06, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08,
+0x0A, 0x09, 0x08, 0x00, 0x00, 0x08, 0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10,
+0x00, 0x18, 0x22, 0x21, 0x20, 0x18, 0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21,
+0x20, 0x08, 0x00, 0x20, 0x22, 0x21, 0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20,
+0x22, 0x20, 0x18, 0x08, 0x00, 0x20, 0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00,
+0x00, 0x30, 0x31, 0x2F, 0x10, 0x10, 0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28,
+0x10, 0x00, 0x00, 0x30, 0x31, 0x20, 0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30,
+0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04,
+0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05,
+0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13,
+0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A, 0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F,
+0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24,
+0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78,
+0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40, 0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40,
+0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8, 0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02,
+0x00, 0x04, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48,
+0x00, 0x60, 0x00, 0x6C, 0x00, 0x28, 0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8,
+0x00, 0xF0, 0x01, 0x18, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58,
+0x03, 0x20, 0x03, 0xE8, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07,
+0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C,
+0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04,
+0x05, 0x06, 0x07, 0x08, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18,
+0x10, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xBB, 0x01, 0x0F, 0xF8, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x28,
+0xF0, 0x22, 0x50, 0x09, 0xC5, 0x82, 0x29, 0xF8, 0xE5, 0x82, 0x26, 0xF6, 0x22, 0xBB, 0xFE, 0x09,
+0xC5, 0x82, 0x29, 0xF8, 0xE2, 0x25, 0x82, 0xF2, 0x22, 0xF8, 0xEA, 0x25, 0x83, 0xF5, 0x83, 0xE9,
+0x93, 0x28, 0x22, 0xBB, 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22,
+0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8, 0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83,
+0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22, 0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE,
+0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0,
+0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A,
+0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7,
+0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3, 0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83,
+0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01, 0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82,
+0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82,
+0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22, 0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0,
+0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A, 0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22,
+0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7,
+0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB, 0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8,
+0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5,
+0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB,
+0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x5B, 0xFF, 0xEE,
+0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED,
+0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, 0xCF, 0xF4, 0xCF, 0xCE, 0xF4, 0xCE, 0xCD, 0xF4, 0xCD, 0xCC,
+0xF4, 0xCC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8,
+0x9C, 0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22,
+0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5,
+0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9,
+0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82, 0x15, 0x82, 0x70,
+0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0,
+0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3,
+0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68,
+0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12,
+0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83,
+0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60, 0xE9, 0xA3, 0xA3,
+0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0xFB, 0x90, 0x93, 0x64, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00,
+0xE5, 0x65, 0x70, 0x03, 0x02, 0x44, 0xF0, 0xE5, 0x62, 0x64, 0x01, 0x60, 0x03, 0x02, 0x44, 0xF0,
+0x0B, 0x90, 0x93, 0x41, 0xF0, 0x04, 0x70, 0x03, 0x02, 0x44, 0xF0, 0x43, 0x66, 0x10, 0x90, 0x93,
+0x37, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A, 0xE0, 0x54, 0x0F, 0xFF, 0x90,
+0x93, 0x59, 0xE0, 0xD3, 0x9F, 0x50, 0x0D, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x38, 0xE0, 0xF5, 0x49,
+0xE4, 0x1B, 0x80, 0x56, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93,
+0x59, 0xE0, 0xC3, 0x9F, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x38, 0xE0, 0x04, 0x2F, 0xF5,
+0x49, 0xE4, 0xFB, 0x80, 0x35, 0x90, 0x93, 0x59, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x13,
+0xE4, 0xF5, 0x48, 0x90, 0x93, 0x59, 0xE0, 0xFF, 0x90, 0x93, 0x50, 0xE0, 0x2F, 0xF5, 0x49, 0xE4,
+0xFB, 0x80, 0x17, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x59, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF,
+0x90, 0x93, 0x50, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12,
+0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
+0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x12, 0x9C, 0x26, 0x90, 0x05, 0x22, 0xE4, 0xF0,
+0x22, 0xE4, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x93, 0x42, 0xF0, 0xF5, 0x66, 0x22, 0x22, 0xE4, 0xFF,
+0x02, 0x4E, 0x27, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0xE4, 0xFB, 0x90, 0x93, 0x5E, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x46, 0x78, 0xE5, 0x62, 0x64, 0x01,
+0x60, 0x03, 0x02, 0x46, 0x78, 0xE5, 0x65, 0x14, 0x60, 0x2B, 0x24, 0xFD, 0x60, 0x27, 0x24, 0x02,
+0x24, 0xFB, 0x50, 0x02, 0x80, 0x21, 0x90, 0x93, 0x41, 0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3,
+0xE0, 0x60, 0x14, 0x90, 0x93, 0x41, 0xE0, 0x70, 0x08, 0x90, 0x93, 0x58, 0xE0, 0x90, 0x93, 0x41,
+0xF0, 0x7B, 0x01, 0x80, 0x02, 0x7B, 0x01, 0xEB, 0x70, 0x03, 0x02, 0x46, 0x78, 0x43, 0x66, 0x10,
+0x90, 0x93, 0x37, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x44, 0xE0, 0x54, 0x0F,
+0xFF, 0x90, 0x93, 0x59, 0xE0, 0xC3, 0x9F, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x38, 0x80,
+0x2D, 0x90, 0x93, 0x37, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33,
+0xFE, 0x90, 0x93, 0x59, 0xE0, 0xC3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x08,
+0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3B, 0x80, 0x06, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x38, 0xE0, 0x80,
+0x2D, 0x90, 0x93, 0x59, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4, 0xF5, 0x48, 0x90,
+0x93, 0x59, 0xE0, 0xFF, 0x90, 0x93, 0x50, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x93,
+0x59, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x50, 0xE0, 0x04, 0x2F, 0xF5, 0x49,
+0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0,
+0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69,
+0xE5, 0x63, 0x64, 0x0C, 0x60, 0x6F, 0x90, 0x93, 0x13, 0xE0, 0xFF, 0x90, 0x93, 0x59, 0xE0, 0xD3,
+0x9F, 0x40, 0x08, 0x90, 0x93, 0x14, 0xE0, 0x04, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x93, 0x14, 0xF0,
+0x90, 0x93, 0x59, 0xE0, 0x90, 0x93, 0x13, 0xF0, 0xA3, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x46, 0xE4,
+0xF0, 0x90, 0x93, 0x3E, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x57, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8,
+0x90, 0x93, 0x5A, 0xE0, 0x64, 0x02, 0x70, 0x21, 0x12, 0x4A, 0x65, 0xE4, 0xF5, 0x48, 0x90, 0x93,
+0x46, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
+0x5B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x56, 0x80, 0x09, 0x43, 0x66, 0x01, 0x12, 0x51, 0x48, 0x90,
+0x93, 0x52, 0x74, 0x01, 0xF0, 0x12, 0x9C, 0x26, 0x22, 0xE4, 0x90, 0x93, 0x64, 0xF0, 0xE5, 0x65,
+0x70, 0x03, 0x02, 0x47, 0x32, 0x90, 0x93, 0x5B, 0xE0, 0x60, 0x11, 0xE4, 0xF0, 0x53, 0x66, 0xFD,
+0xE5, 0x66, 0x54, 0x07, 0x60, 0x03, 0x02, 0x47, 0x32, 0x02, 0x47, 0x2F, 0x90, 0x93, 0x42, 0xE0,
+0x04, 0xF0, 0x53, 0x66, 0xEF, 0x90, 0x93, 0x59, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x37, 0xE0, 0xC4,
+0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A, 0x90, 0x93, 0x59, 0xE0, 0xFF, 0x90, 0x93, 0x37,
+0xE0, 0x54, 0x0F, 0xB5, 0x07, 0x0A, 0x90, 0x93, 0x3A, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x80, 0x22,
+0x90, 0x93, 0x37, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE,
+0x90, 0x93, 0x59, 0xE0, 0xB5, 0x07, 0x0B, 0xE4, 0xB5, 0x06, 0x07, 0xF0, 0x90, 0x05, 0x58, 0x74,
+0x03, 0xF0, 0x90, 0x93, 0x37, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x06, 0x90,
+0x93, 0x64, 0x74, 0x5A, 0xF0, 0x90, 0x93, 0x64, 0xE0, 0xFF, 0x90, 0x93, 0x49, 0xE0, 0x2F, 0xFF,
+0xE4, 0x33, 0xFE, 0x90, 0x93, 0x42, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98,
+0x40, 0x0D, 0xE5, 0x62, 0xB4, 0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12,
+0x52, 0x17, 0x22, 0xE4, 0xF5, 0x66, 0xF5, 0x65, 0x75, 0x64, 0x0C, 0x75, 0x63, 0x0C, 0x90, 0x93,
+0x5A, 0xF0, 0x90, 0x93, 0x56, 0xF0, 0x90, 0x93, 0x53, 0xF0, 0x90, 0x93, 0x58, 0x04, 0xF0, 0x90,
+0x93, 0x41, 0xF0, 0xE4, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x93, 0x43, 0xF0, 0x90, 0x93, 0x50, 0x74,
+0x05, 0xF0, 0xE4, 0x90, 0x93, 0x42, 0xF0, 0x90, 0x93, 0x4E, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90,
+0x93, 0x49, 0xF0, 0x90, 0x93, 0x4C, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x46, 0x74, 0x14, 0xF0, 0x90,
+0x93, 0x51, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x44, 0xF0, 0x90, 0x93, 0x3D, 0xF0, 0x90, 0x93,
+0xB4, 0xF0, 0x90, 0x93, 0x4D, 0xF0, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x93, 0x59, 0xF0, 0x90, 0x93,
+0x3E, 0xF0, 0x90, 0x93, 0x57, 0xF0, 0x90, 0x93, 0x48, 0xF0, 0x90, 0x93, 0x45, 0xF0, 0x90, 0x93,
+0x52, 0xF0, 0x90, 0x93, 0x4B, 0xF0, 0x90, 0x93, 0x47, 0xF0, 0x90, 0x93, 0x5C, 0xF0, 0x90, 0x93,
+0x4A, 0xF0, 0x90, 0x93, 0xB3, 0xE0, 0xB4, 0x02, 0x05, 0x90, 0x00, 0x93, 0xE4, 0xF0, 0x90, 0x93,
+0x37, 0xE0, 0x54, 0x7F, 0xF0, 0xE0, 0x54, 0xF0, 0xF0, 0xE0, 0x54, 0x8F, 0xF0, 0xE4, 0xA3, 0xF0,
+0xA3, 0xF0, 0x90, 0x93, 0x3B, 0xF0, 0x90, 0x93, 0x3A, 0xF0, 0x22, 0xEF, 0x60, 0x5F, 0xAF, 0x05,
+0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x93,
+0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07,
+0x30, 0xE0, 0x6B, 0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x13, 0xE0, 0x25, 0xE0, 0x25,
+0xE0, 0xFF, 0x74, 0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0x74,
+0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0x74, 0x7F, 0xF0, 0x22, 0xAF, 0x05, 0x74,
+0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0x93, 0x19,
+0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xBF, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30,
+0xE0, 0x0C, 0x74, 0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x22, 0x90,
+0x93, 0x15, 0xE0, 0x30, 0xE0, 0x22, 0x90, 0x93, 0x26, 0xE0, 0x60, 0x09, 0x90, 0x01, 0xB9, 0x74,
+0x40, 0xF0, 0x02, 0x49, 0x29, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x02, 0x80, 0x2F,
+0x90, 0x93, 0x4D, 0xE0, 0x60, 0x67, 0x80, 0x5D, 0x12, 0x51, 0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08,
+0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x61, 0xE5, 0x66, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01,
+0xB9, 0x74, 0x02, 0xF0, 0x80, 0x53, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x08, 0x90,
+0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x42, 0xE5, 0x66, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB9, 0x74,
+0x08, 0xF0, 0x80, 0x35, 0xE5, 0x66, 0x30, 0xE4, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80,
+0x28, 0x90, 0x93, 0x43, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x1A, 0x90,
+0x93, 0x4D, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x80, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9,
+0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F,
+0x00, 0x22, 0xE4, 0x90, 0x93, 0x5E, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x93, 0x5E, 0xF0, 0xE0,
+0x54, 0xC0, 0x70, 0x18, 0x90, 0x93, 0x52, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0x53, 0x66, 0xFD,
+0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x14, 0x12, 0x52, 0x17, 0x80, 0x0F, 0x90, 0x93, 0x3E, 0xE0,
+0x60, 0x09, 0x90, 0x93, 0x57, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x90, 0x93, 0x5E, 0xE0, 0x30,
+0xE6, 0x1B, 0x43, 0x66, 0x01, 0x90, 0x93, 0x5A, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64,
+0x0C, 0x60, 0x13, 0x12, 0x51, 0x48, 0x80, 0x0E, 0x12, 0x50, 0x77, 0x80, 0x09, 0x90, 0x93, 0x52,
+0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0xE4, 0x90, 0x93, 0x52, 0xF0, 0x90, 0x93, 0x5E, 0xE0, 0x30,
+0xE7, 0x2A, 0x43, 0x66, 0x02, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x4C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB,
+0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90, 0x93,
+0x5B, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x53, 0x66, 0xFD, 0x22,
+0x8E, 0x25, 0x8F, 0x26, 0xAD, 0x26, 0xAC, 0x25, 0xAF, 0x24, 0x12, 0x47, 0xEB, 0xAF, 0x26, 0xAE,
+0x25, 0x90, 0x04, 0x80, 0xE0, 0x54, 0x0F, 0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4,
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x01, 0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
+0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, 0xAC, 0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
+0xF5, 0x83, 0xE0, 0x44, 0xFA, 0xF0, 0x74, 0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0x44, 0x0F, 0xF0, 0x90, 0x04, 0x53, 0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51,
+0x74, 0xFF, 0xF0, 0x90, 0x04, 0x50, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
+0xF5, 0x83, 0xED, 0xF0, 0x22, 0x7D, 0x01, 0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
+0x8F, 0x68, 0x8D, 0x69, 0xE5, 0x68, 0x54, 0x0F, 0xFF, 0xE5, 0x63, 0x54, 0x0F, 0x6F, 0x60, 0x72,
+0xE5, 0x68, 0x30, 0xE2, 0x30, 0xE5, 0x63, 0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x51, 0xA1, 0xE5,
+0x63, 0x30, 0xE3, 0x10, 0xE5, 0x68, 0x20, 0xE3, 0x0B, 0x12, 0x4D, 0x55, 0xEF, 0x60, 0x53, 0x12,
+0x51, 0xD4, 0x80, 0x4E, 0xE5, 0x63, 0x20, 0xE3, 0x49, 0xE5, 0x68, 0x30, 0xE3, 0x44, 0xAF, 0x69,
+0x12, 0x51, 0x86, 0x80, 0x3D, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x68, 0x20,
+0xE3, 0x09, 0x12, 0x4D, 0x55, 0xEF, 0x60, 0x2A, 0x12, 0x51, 0xD4, 0xE5, 0x63, 0x54, 0x0F, 0xFF,
+0xBF, 0x04, 0x0E, 0xE5, 0x68, 0x20, 0xE2, 0x09, 0x12, 0x48, 0x8F, 0xEF, 0x60, 0x14, 0x12, 0x51,
+0x1F, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x02, 0x09, 0x12, 0x4B, 0xF7, 0xEF, 0x60, 0x03, 0x12,
+0x52, 0x04, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x02, 0x4B, 0x35, 0x02, 0x52, 0xF4, 0xE4, 0x93, 0xA3,
+0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4,
+0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8,
+0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04,
+0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x4F, 0x75, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF,
+0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54,
+0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4,
+0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8,
+0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0xEF, 0x64, 0x01, 0x70, 0x3E, 0x7D,
+0x78, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x22, 0x90, 0x01, 0x36,
+0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F,
+0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x4A, 0x65, 0x90, 0x06,
+0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36,
+0x74, 0x7B, 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x3A, 0x93, 0x7D, 0x02, 0x7F,
+0x03, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x06, 0x04, 0xE0, 0x44,
+0x80, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x44, 0x07, 0xF0, 0x12, 0x4F, 0x28, 0xE5, 0x62, 0x20, 0xE0,
+0x05, 0xE4, 0x90, 0x93, 0x43, 0xF0, 0x22, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x10, 0x12, 0x51,
+0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x5C, 0xE5, 0x14,
+0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x50, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94,
+0x01, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x3F, 0x90, 0x02, 0x87, 0xE0, 0x60,
+0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x31, 0x90, 0x01, 0xAF, 0xE0, 0x60, 0x02, 0x80,
+0x07, 0x90, 0x02, 0x86, 0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x1A,
+0x90, 0x93, 0x44, 0xE0, 0x70, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x0C, 0x90, 0x01,
+0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x02, 0xF0,
+0x7F, 0x00, 0x22, 0xE5, 0x62, 0x64, 0x01, 0x70, 0x6B, 0xE5, 0x65, 0x60, 0x67, 0xE5, 0x65, 0x64,
+0x02, 0x60, 0x06, 0xE5, 0x65, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x93, 0x41,
+0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x93, 0x58, 0xF0, 0x90, 0x93, 0x41, 0xE0, 0x70, 0x07, 0x90,
+0x93, 0x58, 0xE0, 0xFF, 0x80, 0x05, 0x90, 0x93, 0x41, 0xE0, 0xFF, 0x90, 0x93, 0x41, 0xEF, 0xF0,
+0x90, 0x93, 0x43, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x42, 0xF0, 0x90, 0x93, 0x59,
+0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
+0x02, 0xF0, 0x53, 0x66, 0xFD, 0x53, 0x66, 0xEF, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80,
+0x03, 0x12, 0x49, 0x32, 0x22, 0x90, 0x93, 0xB3, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x91, 0x80, 0x0C,
+0x90, 0x93, 0xB3, 0xE0, 0x70, 0x04, 0x7D, 0xD4, 0x80, 0x02, 0xE4, 0xFD, 0x7F, 0x93, 0x12, 0x54,
+0x1B, 0x90, 0x00, 0x29, 0xE0, 0x54, 0x3F, 0xFD, 0x7F, 0x29, 0x12, 0x54, 0x1B, 0x90, 0x00, 0x28,
+0xE0, 0x54, 0xFC, 0xFD, 0x7F, 0x28, 0x12, 0x54, 0x1B, 0x90, 0x00, 0x08, 0xE0, 0x44, 0x10, 0xFD,
+0x7F, 0x08, 0x12, 0x54, 0x1B, 0x7F, 0x01, 0x12, 0x4E, 0x81, 0x90, 0x00, 0x00, 0xE0, 0x44, 0x20,
+0xFD, 0xE4, 0xFF, 0x12, 0x54, 0x1B, 0x90, 0x00, 0x20, 0xE0, 0x54, 0xFE, 0xFD, 0x7F, 0x20, 0x12,
+0x54, 0x1B, 0x90, 0x00, 0x90, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x54, 0x1B, 0x7F, 0x14,
+0x7E, 0x00, 0x02, 0x3B, 0x09, 0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0, 0x13, 0x90, 0x93, 0x1A, 0xE0,
+0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x18, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x49, 0x12,
+0x51, 0xBB, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x39, 0x90,
+0x93, 0x56, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x2B, 0x90, 0x93, 0x53,
+0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x1D, 0xE5, 0x64, 0x54, 0x0F, 0xD3,
+0x94, 0x04, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4,
+0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x7F, 0x00,
+0x22, 0x90, 0x93, 0x8B, 0x12, 0x43, 0xC8, 0x12, 0x44, 0xF1, 0x90, 0x93, 0x8B, 0x12, 0x43, 0xA8,
+0x12, 0x1E, 0xF6, 0xF5, 0x65, 0x14, 0x60, 0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03,
+0x70, 0x44, 0x7F, 0x01, 0x80, 0x3D, 0x90, 0x93, 0x8B, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12,
+0x1F, 0x0F, 0xFD, 0xE4, 0xFF, 0x12, 0x50, 0x39, 0x80, 0x29, 0x90, 0x93, 0x8B, 0x12, 0x43, 0xA8,
+0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x01, 0x12, 0x50, 0x39, 0x1F, 0x80, 0x14, 0x90,
+0x93, 0x8B, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x02, 0x12, 0x50,
+0x39, 0xE4, 0xFF, 0x12, 0x4B, 0x7A, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x24,
+0x90, 0x93, 0x3E, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x57, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x90,
+0x04, 0x1D, 0xE0, 0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x27, 0x74, 0xFF, 0xF0, 0x12, 0x5E,
+0x9B, 0xBF, 0x01, 0x0D, 0x90, 0x93, 0xAC, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x2A, 0x12, 0x49,
+0xD0, 0x90, 0x05, 0x22, 0xE5, 0x27, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0xAC, 0xE0, 0xFF, 0x7D, 0x01,
+0x12, 0x58, 0x2A, 0x12, 0x49, 0xD0, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0x8F, 0x6C, 0xE4, 0x90, 0x94, 0x3E, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x09, 0xE0, 0x7F, 0x00,
+0x30, 0xE7, 0x02, 0x7F, 0x01, 0xEF, 0x65, 0x6C, 0x60, 0x3E, 0xC3, 0x90, 0x94, 0x3F, 0xE0, 0x94,
+0x88, 0x90, 0x94, 0x3E, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x80, 0xF0,
+0x22, 0x90, 0x94, 0x3E, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00, 0x12,
+0x3B, 0x09, 0xD3, 0x90, 0x94, 0x3F, 0xE0, 0x94, 0x32, 0x90, 0x94, 0x3E, 0xE0, 0x94, 0x00, 0x40,
+0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE0, 0xB2, 0x22, 0x90, 0x00, 0x20, 0xE0, 0x44, 0x01, 0xFD,
+0x7F, 0x20, 0x12, 0x54, 0x1B, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x00, 0xE0,
+0x54, 0xDF, 0xFD, 0xE4, 0xFF, 0x12, 0x54, 0x1B, 0x90, 0x00, 0x28, 0xE0, 0x44, 0x03, 0xFD, 0x7F,
+0x28, 0x12, 0x54, 0x1B, 0x90, 0x00, 0x08, 0xE0, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x54, 0x1B,
+0xE4, 0xFF, 0x12, 0x4E, 0x81, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x29, 0xE0,
+0x44, 0xC0, 0xFD, 0x7F, 0x29, 0x02, 0x54, 0x1B, 0xE4, 0xFF, 0x90, 0x00, 0x6A, 0xE0, 0x30, 0xE2,
+0x22, 0xE0, 0x30, 0xE0, 0x20, 0xE0, 0x30, 0xE1, 0x0D, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x02, 0x30,
+0xE3, 0x13, 0x7F, 0x03, 0x80, 0x0F, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x03, 0x30, 0xE3, 0x06, 0x7F,
+0x02, 0x80, 0x02, 0x7F, 0x03, 0xEF, 0xFD, 0xD3, 0x90, 0x93, 0x4F, 0xE0, 0x9D, 0x90, 0x93, 0x4E,
+0xE0, 0x94, 0x00, 0x50, 0x05, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x4E, 0xE0, 0xA3, 0xE0,
+0x90, 0x05, 0x58, 0xF0, 0x22, 0x48, 0x93, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x48, 0x93, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x93, 0xA0, 0x00, 0x41,
+0x93, 0xB0, 0x00, 0x41, 0x93, 0x95, 0x00, 0x41, 0x94, 0x46, 0x00, 0x41, 0x93, 0x13, 0x00, 0x41,
+0x93, 0x14, 0x00, 0x41, 0x92, 0x69, 0x00, 0x41, 0x92, 0x6A, 0x00, 0x41, 0x92, 0x68, 0x00, 0x41,
+0x94, 0x37, 0x00, 0x41, 0x94, 0x44, 0x00, 0x00, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x93, 0x57, 0x74, 0x01, 0xF0, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x94, 0x2B, 0x12,
+0x1F, 0xC9, 0x90, 0x94, 0x2B, 0x12, 0x43, 0x84, 0xEC, 0x44, 0x02, 0xFC, 0x90, 0x94, 0x2B, 0x12,
+0x1F, 0xC9, 0x90, 0x94, 0x2B, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00,
+0x7E, 0x08, 0x12, 0x34, 0x30, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50,
+0x02, 0x80, 0x35, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x2E, 0x90, 0x93, 0x3E, 0xE0, 0x60, 0x09,
+0x90, 0x93, 0x57, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x12, 0x9C, 0x26, 0x90, 0x93, 0x5A, 0xE0,
+0x60, 0x06, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x0D, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
+0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x22, 0xEF, 0x14, 0x60, 0x09, 0x14, 0x60, 0x16,
+0x24, 0x02, 0x70, 0x32, 0x80, 0x0A, 0x90, 0x93, 0x58, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x41, 0xF0,
+0xE4, 0x90, 0x93, 0x5D, 0xF0, 0x22, 0xED, 0x70, 0x0A, 0x90, 0x93, 0x51, 0xE0, 0x90, 0x93, 0x58,
+0xF0, 0x80, 0x05, 0x90, 0x93, 0x58, 0xED, 0xF0, 0x90, 0x93, 0x58, 0xE0, 0x90, 0x93, 0x41, 0xF0,
+0x90, 0x93, 0x5D, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
+0x08, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x46, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02,
+0xF0, 0x90, 0x93, 0x53, 0x14, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x0C, 0x50, 0x03, 0x12,
+0x4A, 0x65, 0x22, 0x90, 0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00,
+0xFF, 0xEC, 0x3E, 0x90, 0x93, 0x3F, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x01, 0x04, 0xE0, 0x54, 0x0F,
+0xFF, 0x74, 0x40, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
+0xF9, 0x90, 0x93, 0x55, 0xF0, 0xEE, 0x90, 0x93, 0x54, 0xF0, 0x22, 0xEF, 0x70, 0x0B, 0x90, 0x93,
+0xB2, 0xE0, 0x90, 0x94, 0x2F, 0x60, 0x0B, 0x80, 0x12, 0x90, 0x93, 0xB2, 0xE0, 0x90, 0x94, 0x2F,
+0x60, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x02, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00,
+0x01, 0x10, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x2F, 0x7F, 0x60, 0x7E, 0x08, 0x02, 0x95, 0x86, 0x90,
+0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x5E, 0x9B, 0xEF, 0x70,
+0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93, 0x12, 0x99,
+0x48, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x90, 0x93, 0x47, 0xE0, 0x70, 0x1A, 0x90, 0x04,
+0x1D, 0xE0, 0x70, 0x14, 0x90, 0x93, 0xAB, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x58, 0x2A, 0x8E, 0x6A,
+0x8F, 0x6B, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0x48, 0xE0, 0x60, 0x16, 0x90,
+0x93, 0x4B, 0xE0, 0x70, 0x10, 0x90, 0x93, 0x45, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74, 0x0D,
+0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF, 0xF0, 0xEF, 0x60, 0x0A,
+0xE5, 0x62, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x4E, 0x27, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x0C,
+0x22, 0x90, 0x94, 0x47, 0xEF, 0xF0, 0x12, 0x95, 0xCC, 0x90, 0x94, 0x47, 0xE0, 0x60, 0x05, 0x90,
+0x05, 0x22, 0xE4, 0xF0, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4,
+0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60,
+0x02, 0x7F, 0x00, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x05,
+0x7F, 0x01, 0x12, 0x4E, 0x27, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0xE5, 0x64, 0x30, 0xE6,
+0x12, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0x90, 0x01, 0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0,
+0x53, 0x64, 0xBF, 0x22, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x01, 0x12, 0x4C, 0xE5, 0x12, 0x4E, 0xD9,
+0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x7D, 0x01, 0xAF, 0x64, 0x02, 0x4A, 0x69, 0x90, 0x02,
+0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12, 0x43,
+0xF7, 0x52, 0x49, 0x00, 0x40, 0x52, 0x71, 0x00, 0x80, 0x52, 0x9C, 0x01, 0x00, 0x52, 0xB0, 0x02,
+0x00, 0x52, 0xC8, 0x04, 0x00, 0x00, 0x00, 0x52, 0xE5, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE, 0xFF,
+0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06, 0xCE,
+0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x80,
+0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF, 0x2D,
+0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x07,
+0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04, 0xFE,
+0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80, 0x35,
+0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF, 0x2D,
+0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE, 0xFF,
+0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D, 0x00,
+0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x25, 0xF0,
+0xA3, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x76, 0xF0, 0xA3, 0xF0, 0xF1, 0xBA, 0x75, 0x8E, 0x02,
+0xF1, 0x99, 0x12, 0x60, 0x51, 0x90, 0x93, 0xB3, 0xEF, 0xF0, 0xF1, 0xDA, 0x90, 0x93, 0xB5, 0xEF,
+0xF0, 0x12, 0x60, 0x64, 0x90, 0x93, 0x96, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x14, 0xF5,
+0x09, 0xF5, 0x62, 0x90, 0x93, 0xB2, 0xF0, 0x90, 0x00, 0xCC, 0xE0, 0x54, 0xF7, 0xF0, 0x12, 0x88,
+0x60, 0x12, 0x47, 0x33, 0x12, 0x37, 0x1C, 0xF1, 0xE6, 0x71, 0xF2, 0x12, 0x60, 0x15, 0x12, 0x60,
+0x7C, 0xF1, 0xB3, 0x12, 0x60, 0x33, 0x12, 0x44, 0xFD, 0x12, 0x60, 0xE7, 0xF1, 0xC2, 0x90, 0x93,
+0x78, 0xE5, 0xD9, 0xF0, 0xC2, 0xAF, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40, 0xF0, 0x91, 0x63, 0x75,
+0xE8, 0x03, 0x43, 0xA8, 0x85, 0x12, 0x97, 0x59, 0xD2, 0xAF, 0x51, 0xEA, 0x12, 0x60, 0x91, 0x90,
+0x93, 0x76, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0xF4, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x52, 0xA3, 0xF0,
+0xE5, 0x14, 0x30, 0xE0, 0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xFE, 0x12, 0x9A, 0xE3, 0xD2, 0xAF, 0x90,
+0x93, 0xA9, 0xE0, 0xB4, 0x01, 0x07, 0x91, 0xD2, 0xE4, 0x90, 0x93, 0xA9, 0xF0, 0xE5, 0x14, 0x30,
+0xE4, 0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xEF, 0xD2, 0xAF, 0x12, 0x6F, 0x9E, 0xE5, 0x14, 0x30, 0xE6,
+0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xBF, 0xD2, 0xAF, 0x12, 0x80, 0x5D, 0xE5, 0x14, 0x30, 0xE7, 0x09,
+0xC2, 0xAF, 0x53, 0x14, 0x7F, 0xD2, 0xAF, 0xD1, 0xEC, 0xC2, 0xAF, 0xE5, 0x64, 0x54, 0x0F, 0xFF,
+0xBF, 0x01, 0x0D, 0x90, 0x93, 0x44, 0x74, 0x01, 0xF0, 0x51, 0x17, 0xE4, 0x90, 0x93, 0x44, 0xF0,
+0xD2, 0xAF, 0x90, 0x01, 0xBD, 0xE5, 0x63, 0xF0, 0x90, 0x93, 0x5A, 0xE0, 0x90, 0x01, 0xBC, 0xF0,
+0x61, 0x6F, 0x90, 0x01, 0x3C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0,
+0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x54, 0x91, 0x1B, 0x7D, 0xFF, 0x7F, 0x55, 0x91,
+0x1B, 0x7D, 0xFF, 0x7F, 0x56, 0x91, 0x1B, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
+0xC0, 0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xED, 0xF0, 0x91, 0x63, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
+0x90, 0x01, 0x30, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3,
+0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x91, 0x1B, 0xE4, 0xFD, 0x7F, 0x51, 0x91, 0x1B,
+0xE4, 0xFD, 0x7F, 0x52, 0x91, 0x1B, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0x90, 0x00, 0x02, 0xE0,
+0x44, 0x01, 0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0,
+0x92, 0xAF, 0x22, 0x8E, 0x57, 0x8F, 0x58, 0x8B, 0x59, 0x8A, 0x5A, 0x89, 0x5B, 0xE4, 0x90, 0x93,
+0x7C, 0xF0, 0xEF, 0x90, 0x00, 0x31, 0xF0, 0x91, 0x63, 0xE5, 0x57, 0x54, 0x03, 0xFF, 0x90, 0x00,
+0x32, 0xE0, 0x54, 0xFC, 0x4F, 0xF0, 0x91, 0x63, 0x90, 0x00, 0x33, 0xE0, 0x54, 0x7F, 0xF0, 0x91,
+0x63, 0x90, 0x00, 0x33, 0xE0, 0x20, 0xE7, 0x0E, 0x90, 0x93, 0x7C, 0xE0, 0xC3, 0x94, 0x64, 0x50,
+0x05, 0xE0, 0x04, 0xF0, 0x80, 0xEB, 0x90, 0x93, 0x7C, 0xE0, 0xC3, 0x94, 0x64, 0x50, 0x10, 0x90,
+0x00, 0x30, 0xE0, 0xAB, 0x59, 0xAA, 0x5A, 0xA9, 0x5B, 0x12, 0x42, 0x53, 0x7F, 0x01, 0x22, 0x7F,
+0x00, 0x22, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x79, 0x7F, 0xF5, 0x7E, 0x01, 0x91, 0x73, 0xBF, 0x01,
+0x06, 0x90, 0x93, 0x79, 0xE0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x79, 0x7F, 0xF6, 0x7E,
+0x01, 0x91, 0x73, 0xBF, 0x01, 0x08, 0x90, 0x93, 0x79, 0xE0, 0x90, 0x93, 0x7B, 0xF0, 0x90, 0x93,
+0x7A, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xAE, 0x07, 0x90, 0x93, 0x7C, 0xE0, 0x54, 0xF0, 0xF0, 0x54,
+0x0F, 0x44, 0x50, 0xF0, 0x90, 0x93, 0x7E, 0xEE, 0xF0, 0xA3, 0xED, 0xF0, 0x7B, 0x01, 0x7A, 0x93,
+0x79, 0x7E, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x7C, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x10, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92,
+0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x90, 0x92, 0x69, 0xE0,
+0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0B, 0x90, 0x92, 0x69, 0xE0, 0x14, 0xFF, 0xA3, 0xE0,
+0xB5, 0x07, 0x0D, 0xF1, 0x4B, 0xEF, 0x60, 0x70, 0xD1, 0xEC, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0,
+0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6E, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xA8,
+0x01, 0xFC, 0x7D, 0x01, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x7E, 0x00, 0x7F, 0x02, 0x12, 0x1E,
+0xD0, 0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74, 0x92, 0x35, 0xF0,
+0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x94, 0x13, 0x12, 0x43, 0xA8, 0x8B,
+0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4,
+0x54, 0x0F, 0xF5, 0x23, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0xB1, 0xDD, 0x90, 0x92, 0x6A, 0xE0,
+0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF,
+0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x94, 0x04, 0x12, 0x43, 0xC8,
+0xAB, 0x20, 0xAA, 0x21, 0xA9, 0x22, 0x90, 0x94, 0x07, 0x12, 0x43, 0xC8, 0xAF, 0x23, 0x15, 0x23,
+0xEF, 0x60, 0x1E, 0x90, 0x94, 0x07, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0x12, 0x1E, 0xF6,
+0xFF, 0x90, 0x94, 0x04, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0xEF, 0x12, 0x42, 0x53, 0x80,
+0xDB, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9, 0x1F, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x0A, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x68, 0xE0, 0x90, 0x00, 0x01,
+0x12, 0x42, 0x65, 0xF1, 0x4B, 0xEF, 0x70, 0x02, 0xC1, 0xE7, 0x90, 0x94, 0x0A, 0x12, 0x43, 0xA8,
+0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x75, 0x23, 0x02, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0xB1,
+0xDD, 0x90, 0x94, 0x0D, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x0A,
+0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0x7B, 0x01, 0x7A, 0x01,
+0x79, 0xA2, 0xB1, 0xDD, 0x90, 0x01, 0xAF, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0xB3, 0xE0, 0x64, 0x01,
+0x70, 0x48, 0x90, 0x94, 0x0A, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x75, 0x23,
+0x02, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x20, 0xB1, 0xDD, 0x90, 0x94, 0x0D, 0x12, 0x43, 0xA8, 0x8B,
+0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x0A, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4,
+0x54, 0x0F, 0xF5, 0x23, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x22, 0xB1, 0xDD, 0x90, 0x93, 0x96, 0xE0,
+0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0x74, 0xFF, 0xF0, 0x90, 0x92, 0x68, 0xE0, 0x04, 0xF0,
+0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0xF1, 0x4B, 0xEF, 0x60, 0x4E, 0x90, 0x92, 0x69, 0xE0, 0x75, 0xF0, 0x0F, 0xA4,
+0x24, 0x6E, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x02, 0xC0, 0x01, 0xE0, 0x75,
+0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x90, 0x94, 0x0D, 0x12, 0x43,
+0xC8, 0xD0, 0x01, 0xD0, 0x02, 0xD1, 0x2C, 0x90, 0x92, 0x69, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A,
+0x02, 0xE4, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92, 0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D,
+0x02, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x7F, 0xAF, 0x7E, 0x01, 0x90,
+0x94, 0x33, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x94, 0x33, 0xE0,
+0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C, 0xC3, 0x90, 0x94, 0x36, 0xE0, 0x94,
+0xE8, 0x90, 0x94, 0x35, 0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0,
+0x7F, 0x00, 0x22, 0x90, 0x94, 0x35, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x0A, 0x7E,
+0x00, 0x12, 0x3B, 0x09, 0x80, 0xC6, 0x7F, 0x01, 0x22, 0xE4, 0x90, 0x93, 0xAF, 0xF0, 0x90, 0x00,
+0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80, 0x81, 0x1B, 0x8F, 0x82, 0x8E, 0x83, 0xA3, 0xA3, 0xA3,
+0xE4, 0xF0, 0x22, 0x90, 0x01, 0x64, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x01, 0x94, 0xE0, 0x44, 0x01,
+0xF0, 0x22, 0x90, 0x94, 0x38, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x94, 0x3A, 0xF0, 0x90, 0x94,
+0x38, 0xE0, 0x54, 0x7F, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00,
+0x30, 0xE3, 0x02, 0x7F, 0x01, 0x22, 0xE4, 0x90, 0x92, 0x69, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xAF,
+0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xC4, 0x74, 0xF2, 0xF0, 0x74,
+0x57, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22, 0xE0, 0x54, 0x90, 0x60,
+0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE1, 0xE4, 0x7F,
+0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
+0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10,
+0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x0E, 0x74, 0x0F, 0x2B, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
+0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF7,
+0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0xFD,
+0x63, 0xE0, 0x54, 0x3F, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0xFD, 0x62, 0xE0, 0x54, 0x03, 0x4F,
+0x90, 0x93, 0x68, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x54, 0x3F, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x90,
+0xFD, 0x63, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x93, 0x69, 0xF0, 0x90, 0x93, 0x68, 0xE0, 0xFD, 0xA3,
+0xE0, 0xFB, 0xE4, 0xFF, 0x90, 0x94, 0x16, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90,
+0x04, 0x1D, 0xE0, 0x60, 0x19, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x94, 0x1B, 0xF0, 0xD1, 0x95, 0xBF,
+0x01, 0x02, 0x11, 0xF7, 0x90, 0x94, 0x1B, 0xE0, 0x90, 0x05, 0x22, 0xF0, 0x80, 0x02, 0x11, 0xF7,
+0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0xAE, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x2A,
+0x90, 0x94, 0x19, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD, 0x90, 0x94, 0x16, 0xE0, 0xFF, 0xA3,
+0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x94, 0x25, 0xF0, 0xEF, 0x60, 0x10, 0x74, 0x21, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x80, 0x0E, 0x74, 0x21, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05, 0x74, 0x06, 0x2F, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x74, 0x11, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05, 0x74, 0x16, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x02, 0xF0, 0x74, 0x16, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0x54, 0x03, 0xF0, 0xAE, 0x05, 0x74, 0x22, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xEB, 0xF0, 0x90, 0x94, 0x25, 0xE0, 0xFF, 0x74, 0x23, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
+0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x04,
+0xF0, 0x22, 0xE4, 0x90, 0x93, 0x64, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x20,
+0xE0, 0x02, 0xC1, 0x45, 0x12, 0x9C, 0x54, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x01, 0x60, 0x02, 0x41,
+0xB9, 0x90, 0x93, 0x1A, 0xE0, 0x30, 0xE0, 0x18, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x80, 0x0A,
+0x90, 0x93, 0x1A, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x06, 0xA3, 0xE0, 0x90, 0x93, 0x64, 0xF0,
+0xE4, 0xF5, 0x48, 0x90, 0x93, 0x64, 0xE0, 0x24, 0x03, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4,
+0x54, 0x0F, 0x90, 0x93, 0x27, 0x30, 0xE0, 0x05, 0x74, 0x05, 0xF0, 0x80, 0x03, 0xE0, 0x04, 0xF0,
+0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F, 0x90, 0x93, 0x16, 0xE0, 0xFF,
+0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13,
+0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x6E,
+0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFB, 0xE4,
+0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xC4, 0x80, 0x51, 0x90, 0x93, 0x15,
+0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0xFD,
+0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0,
+0x27, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0x90, 0x93, 0x2A,
+0xF0, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x06, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0x60,
+0x07, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x90, 0x93,
+0x18, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x45, 0xA1, 0xB7, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x02, 0x60,
+0x02, 0x61, 0x98, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x08, 0xD1,
+0x95, 0xBF, 0x01, 0x03, 0x12, 0x99, 0x48, 0xE4, 0xFF, 0xD1, 0x67, 0x90, 0x93, 0x1A, 0xE0, 0x30,
+0xE0, 0x1F, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90, 0x93, 0x1A, 0xE0, 0xC4, 0x54,
+0x0F, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x90, 0x93, 0x64, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xEF,
+0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x16, 0xE0, 0x24, 0x03, 0xFF, 0x90, 0x93, 0x64, 0xE0, 0x2F,
+0xFF, 0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0xFF, 0x90, 0x93, 0x65, 0xE0, 0x2F, 0xF5, 0x49, 0xE4,
+0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0xE4,
+0xFF, 0xD1, 0xDC, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54,
+0x07, 0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F, 0x90, 0x93, 0x15, 0xE0,
+0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0,
+0x14, 0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x69, 0x80, 0x0B, 0xE5, 0x65, 0x60, 0x0D, 0xE4, 0xFD,
+0xAF, 0x64, 0x12, 0x4A, 0x69, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x30,
+0xE0, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54,
+0x01, 0x20, 0xE0, 0x02, 0xC1, 0x45, 0xC1, 0x41, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x03, 0x60, 0x02,
+0x81, 0xEC, 0x7F, 0x01, 0xD1, 0x67, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30,
+0xE0, 0x03, 0x12, 0x95, 0xCC, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0,
+0x02, 0x81, 0x48, 0x90, 0x93, 0x1F, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0xD3, 0x9F, 0x40, 0x4D,
+0xE0, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0xFE, 0xC3, 0xEF, 0x9E, 0xFF, 0x24,
+0x03, 0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x93, 0x17, 0xE0, 0xD3, 0x9D, 0xEC, 0x64, 0x80, 0xF8, 0x74,
+0x80, 0x98, 0x40, 0x08, 0xE0, 0x9F, 0x90, 0x93, 0x67, 0xF0, 0x80, 0x06, 0x90, 0x93, 0x67, 0x74,
+0x03, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x67, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x80, 0x24, 0xE4, 0xF5, 0x48,
+0x90, 0x93, 0x22, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77,
+0x90, 0x93, 0x1D, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x04,
+0xF0, 0xE4, 0x90, 0x93, 0x29, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x66, 0xE0, 0xFF,
+0x90, 0x93, 0x17, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12,
+0x39, 0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x7F, 0x01,
+0xD1, 0xDC, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x2F, 0x90, 0x93, 0x15,
+0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1A, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0x93,
+0x4D, 0xE0, 0x60, 0x02, 0x80, 0x0F, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x7D, 0x01, 0x7F, 0x0C, 0x80,
+0x08, 0xE5, 0x65, 0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x4D, 0xE0,
+0x60, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13,
+0x54, 0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0,
+0x03, 0x12, 0x51, 0x48, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13,
+0x13, 0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0x45, 0x7F, 0x01, 0xC1, 0x43, 0x90, 0x93, 0x27, 0xE0,
+0x64, 0x04, 0x60, 0x02, 0xA1, 0xBD, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E,
+0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0,
+0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F, 0x90, 0x93, 0x17, 0xE0, 0xFF,
+0x90, 0x93, 0x25, 0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13,
+0x54, 0x07, 0x30, 0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x6E,
+0x90, 0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFB, 0xE4,
+0xFD, 0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x11, 0xC4, 0x80, 0x51, 0x90, 0x93, 0x15,
+0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0xFD,
+0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0,
+0x27, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0x90, 0x93, 0x2A,
+0xF0, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x07, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0x60,
+0x07, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x90, 0x93,
+0x18, 0xE0, 0x20, 0xE0, 0x02, 0xC1, 0x45, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x27,
+0xE0, 0x64, 0x05, 0x60, 0x02, 0xC1, 0x45, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F,
+0x30, 0xE0, 0x08, 0xD1, 0x95, 0xBF, 0x01, 0x03, 0x12, 0x99, 0x48, 0xE4, 0xFF, 0xD1, 0x67, 0xD1,
+0xDC, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0,
+0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F,
+0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x14, 0xE4, 0xFD,
+0xAF, 0x64, 0x12, 0x4A, 0x69, 0x80, 0x0B, 0xE5, 0x65, 0x60, 0x0D, 0xE4, 0xFD, 0xAF, 0x64, 0x12,
+0x4A, 0x69, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x30, 0xE0, 0x05, 0x90,
+0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0,
+0x04, 0xE4, 0xFF, 0xD1, 0x46, 0x22, 0x90, 0x93, 0x04, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x17, 0xEF,
+0x7B, 0x01, 0xB4, 0x01, 0x06, 0x7A, 0x93, 0x79, 0x0B, 0x80, 0x04, 0x7A, 0x93, 0x79, 0x07, 0x7F,
+0x80, 0x7E, 0x08, 0x12, 0x95, 0x86, 0x22, 0xEF, 0xB4, 0x03, 0x12, 0x90, 0x93, 0x18, 0xE0, 0xC4,
+0x13, 0x13, 0x54, 0x03, 0x90, 0x06, 0xCC, 0x30, 0xE0, 0x17, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x19,
+0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xEF, 0x90, 0x06, 0xCC, 0xB4, 0x01, 0x03, 0xE4, 0xF0,
+0x22, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0x90, 0x94, 0x42, 0xF0,
+0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07,
+0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x94, 0x43, 0xE0, 0x94, 0xE8, 0x90, 0x94,
+0x42, 0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x3B, 0x09,
+0x90, 0x94, 0x42, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x80, 0xC6, 0x90, 0x94, 0x26, 0xEF,
+0xF0, 0x12, 0x9D, 0xFD, 0x90, 0x93, 0x18, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x08,
+0x90, 0x94, 0x26, 0xE0, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x94, 0x27, 0x12, 0x1F, 0xD5, 0x00, 0x00,
+0x03, 0x10, 0x90, 0x94, 0x26, 0xE0, 0xB4, 0x01, 0x10, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC4, 0x13,
+0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x16, 0x80, 0x0A, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC3, 0x13,
+0x30, 0xE0, 0x0A, 0x90, 0x94, 0x27, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A,
+0x94, 0x79, 0x27, 0x12, 0x95, 0x82, 0x90, 0x94, 0x26, 0xE0, 0x90, 0x93, 0x26, 0xF0, 0x22, 0x90,
+0x93, 0x15, 0xE0, 0x30, 0xE0, 0x72, 0x7F, 0x01, 0xD1, 0x67, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13,
+0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03, 0x12, 0x95, 0xCC, 0x7F, 0x01, 0xD1, 0xDC, 0x90, 0x93, 0x15,
+0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x05, 0x12, 0x95, 0xCC, 0x80, 0x29, 0x90, 0x93,
+0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1F, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x20, 0xF0, 0x90,
+0x93, 0x4D, 0xE0, 0x60, 0x06, 0x7D, 0x01, 0x7F, 0x04, 0x80, 0x09, 0x90, 0x05, 0x22, 0xE4, 0xF0,
+0x7D, 0x01, 0x7F, 0x0C, 0x12, 0x4A, 0x69, 0x90, 0x93, 0x4D, 0xE0, 0x90, 0x05, 0x22, 0x60, 0x05,
+0x74, 0x6F, 0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54,
+0x01, 0x30, 0xE0, 0x04, 0x7F, 0x01, 0xD1, 0x46, 0x22, 0x12, 0x57, 0xF2, 0xBF, 0x01, 0x0F, 0x90,
+0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x2A, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90,
+0x01, 0x63, 0xE4, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x7F, 0x70,
+0x7E, 0x08, 0x12, 0x34, 0x30, 0x7F, 0x01, 0xC1, 0x46, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x36, 0xF0,
+0x70, 0x02, 0xF1, 0xCF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC, 0xEF,
+0x30, 0xE0, 0x02, 0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF, 0x05,
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5, 0x2B,
+0x90, 0x01, 0x30, 0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3, 0xE5,
+0x2B, 0xF0, 0x22, 0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32, 0x43,
+0x32, 0x20, 0x90, 0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32, 0xF0,
+0x22, 0x90, 0x00, 0xF4, 0xE0, 0x20, 0xE3, 0x09, 0xE0, 0x7F, 0x01, 0x20, 0xE2, 0x05, 0x7F, 0x02,
+0x22, 0x7F, 0x00, 0x22, 0x90, 0x93, 0xB5, 0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30,
+0xE7, 0x05, 0x7E, 0xFD, 0x7F, 0x33, 0x22, 0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0x90, 0x00, 0xF3, 0xE0,
+0x30, 0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74, 0x10, 0xF0, 0x90, 0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0,
+0x22, 0xE4, 0x90, 0x93, 0x79, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x98, 0xE0, 0x7F, 0x00, 0x30, 0xE4,
+0x02, 0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E, 0xC3, 0x90, 0x93, 0x7A, 0xE0, 0x94, 0x88, 0x90,
+0x93, 0x79, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90,
+0x93, 0x79, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09,
+0xD3, 0x90, 0x93, 0x7A, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x79, 0xE0, 0x94, 0x00, 0x40, 0xB9, 0x90,
+0x01, 0xC7, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01,
+0x9C, 0x74, 0x7E, 0xF0, 0xA3, 0x74, 0x92, 0xF0, 0xA3, 0x74, 0xA0, 0xF0, 0xA3, 0x74, 0x24, 0xF0,
+0x90, 0x01, 0x9B, 0x74, 0x49, 0xF0, 0x90, 0x01, 0x9A, 0x74, 0xE0, 0xF0, 0x90, 0x01, 0x99, 0xE4,
+0xF0, 0x90, 0x01, 0x98, 0x04, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54,
+0x0C, 0x13, 0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90,
+0x93, 0x5E, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01,
+0x60, 0x07, 0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3C, 0x90, 0x93, 0x5E, 0x74, 0x01, 0xF0, 0xA3,
+0x74, 0x3D, 0xF0, 0x79, 0x40, 0x90, 0x93, 0x5E, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E,
+0x83, 0xE0, 0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x93, 0xA0, 0xF0, 0x22, 0x90, 0x93, 0xA0,
+0xE0, 0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0C, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30,
+0xE0, 0x03, 0x12, 0x5F, 0xB9, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0,
+0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0,
+0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x86, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0x90, 0x01, 0x34,
+0xE0, 0x55, 0x28, 0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5,
+0x2E, 0xA3, 0xE0, 0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x61, 0x80, 0x90, 0x01,
+0x34, 0x74, 0x01, 0xF0, 0x85, 0xD1, 0x0A, 0x85, 0xD3, 0x0C, 0x85, 0xD4, 0x0D, 0x85, 0xD5, 0x0E,
+0x85, 0xD6, 0x0F, 0x85, 0xD7, 0x10, 0x85, 0xD9, 0x11, 0x85, 0xD2, 0x0B, 0x75, 0x20, 0x00, 0x75,
+0x21, 0x00, 0x75, 0x22, 0x0A, 0x75, 0x23, 0x08, 0xFB, 0x7A, 0x93, 0x79, 0xA1, 0x12, 0x55, 0xDD,
+0x90, 0x93, 0xA2, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x01, 0xFE, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x01,
+0x6E, 0x70, 0x02, 0x61, 0x2B, 0x90, 0x93, 0xA2, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
+0x30, 0xE0, 0x02, 0x61, 0x2B, 0xEF, 0x54, 0x1F, 0xF5, 0x4D, 0x90, 0x93, 0xA3, 0xE0, 0x54, 0x3F,
+0xF5, 0x4E, 0x90, 0x93, 0xA5, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x80, 0xF5,
+0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xE5, 0x4E, 0xD3, 0x94,
+0x04, 0x40, 0x03, 0x75, 0x4E, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43,
+0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93,
+0xA5, 0xE0, 0x54, 0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84,
+0x00, 0x12, 0x43, 0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0xA3, 0xEF,
+0xF0, 0x90, 0x93, 0xA2, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x2F, 0x90, 0x93, 0xA5, 0xE0,
+0x54, 0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83,
+0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0xA4, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54,
+0x01, 0x30, 0xE0, 0x67, 0xAF, 0x4D, 0x12, 0x7A, 0x9C, 0x80, 0x60, 0x90, 0x93, 0xA2, 0xE0, 0xFF,
+0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x53, 0x90, 0x93, 0xA5, 0xE0, 0x54, 0x1F, 0xFF, 0xFD,
+0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8D, 0xF0,
+0x12, 0x42, 0x87, 0x90, 0x93, 0xA4, 0xE0, 0xFE, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0,
+0x0F, 0xEE, 0x54, 0x7F, 0xFD, 0x8F, 0x55, 0xAB, 0x4E, 0xAF, 0x4D, 0x12, 0x7A, 0x38, 0x80, 0x1B,
+0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x11, 0x90, 0x04, 0x30, 0xE0, 0xB4, 0x01,
+0x0A, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x04, 0xCF, 0xF0, 0xE5, 0x65, 0x14, 0x24, 0xFD,
+0x50, 0x02, 0x80, 0x46, 0x90, 0x93, 0x5A, 0xE0, 0x60, 0x37, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90,
+0x01, 0x3C, 0x74, 0x04, 0xF0, 0x12, 0x51, 0xBB, 0xEF, 0x64, 0x01, 0x70, 0x2D, 0xF5, 0x48, 0x90,
+0x93, 0x46, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90,
+0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x56, 0xF0, 0x80,
+0x09, 0x12, 0x51, 0xBB, 0xBF, 0x01, 0x03, 0x12, 0x52, 0x17, 0x90, 0x94, 0x45, 0xE0, 0x04, 0xF0,
+0xE5, 0x2C, 0x20, 0xE1, 0x02, 0x81, 0x22, 0x90, 0x01, 0x34, 0x74, 0x02, 0xF0, 0x90, 0xFD, 0x10,
+0x74, 0x7F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x30, 0xE5, 0x0B, 0x75, 0x4F, 0x88, 0x75, 0x50, 0x0F,
+0x75, 0x51, 0x0F, 0x80, 0x09, 0x75, 0x4F, 0xC0, 0x75, 0x50, 0x08, 0x75, 0x51, 0x07, 0x90, 0x04,
+0x7F, 0xE0, 0x55, 0x51, 0xF5, 0x12, 0x90, 0x04, 0x7E, 0xE0, 0x55, 0x51, 0xF5, 0x13, 0x65, 0x12,
+0x60, 0x60, 0xE4, 0xFF, 0xE5, 0x12, 0x75, 0xF0, 0x08, 0xA4, 0x25, 0x4F, 0x2F, 0x24, 0x00, 0xF5,
+0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x15, 0x2F, 0xF8, 0xA6, 0x06, 0x0F, 0xBF,
+0x08, 0xE2, 0x75, 0x20, 0x00, 0x75, 0x21, 0x00, 0x75, 0x22, 0x15, 0x75, 0x23, 0x08, 0x7B, 0x01,
+0x7A, 0x93, 0x79, 0x98, 0x12, 0x55, 0xDD, 0x90, 0x93, 0x98, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13,
+0x54, 0x01, 0x30, 0xE0, 0x02, 0xD1, 0xA9, 0xE5, 0x12, 0x24, 0x01, 0xFF, 0xE4, 0x33, 0xFE, 0xAD,
+0x50, 0x7C, 0x00, 0x12, 0x1F, 0x4E, 0xAF, 0x05, 0x8F, 0x12, 0x90, 0x04, 0x7F, 0xEF, 0xF0, 0xB5,
+0x13, 0xA0, 0xE5, 0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x34, 0x74, 0x08, 0xF0, 0xE5, 0x2C, 0x30,
+0xE4, 0x09, 0x90, 0x01, 0x34, 0x74, 0x10, 0xF0, 0x43, 0x14, 0x10, 0xE5, 0x2C, 0x30, 0xE5, 0x26,
+0x90, 0x01, 0xCF, 0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20,
+0xF0, 0x75, 0xA8, 0x00, 0x75, 0xE8, 0x00, 0x12, 0x54, 0x30, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB,
+0xF0, 0x12, 0x54, 0x63, 0x80, 0xFE, 0xE5, 0x2C, 0x30, 0xE6, 0x06, 0x90, 0x01, 0x34, 0x74, 0x40,
+0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0xA1, 0x30, 0x90, 0x93, 0xB4, 0x74, 0x01, 0xF0, 0x90, 0x01,
+0x36, 0xF0, 0x90, 0x93, 0xB1, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x02,
+0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x12, 0x45, 0x09, 0x90, 0x93, 0x2D, 0xE0, 0x20, 0xE0,
+0x02, 0xA1, 0x26, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x07,
+0x78, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70,
+0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0xFF, 0xE0, 0xFE,
+0xC3, 0x13, 0x54, 0x0F, 0xC3, 0x9F, 0x40, 0x35, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xE1, 0xF0,
+0x90, 0x93, 0x32, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x60, 0x7E, 0x08,
+0x12, 0x34, 0x30, 0x90, 0x93, 0x2E, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F,
+0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x80, 0x1C, 0x90, 0x93, 0x2D,
+0xE0, 0xFF, 0xC3, 0x13, 0x54, 0x0F, 0xFE, 0xEF, 0x54, 0xE1, 0xFF, 0xEE, 0x04, 0x54, 0x0F, 0xFE,
+0x25, 0xE0, 0x4F, 0xF0, 0x80, 0x03, 0x12, 0x5F, 0x3F, 0xD1, 0xCB, 0x90, 0x93, 0xB4, 0xE4, 0xF0,
+0xE5, 0x2E, 0x30, 0xE1, 0x45, 0x90, 0x01, 0x36, 0x74, 0x02, 0xF0, 0x43, 0x14, 0x40, 0x12, 0x9E,
+0x56, 0x31, 0x17, 0x90, 0x93, 0x5D, 0xE0, 0x60, 0x1D, 0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x16,
+0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93,
+0x58, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x05, 0x08, 0xE5, 0x08, 0xC3, 0x94, 0xFF, 0x40, 0x0B, 0x90,
+0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x43, 0x90,
+0x01, 0x36, 0x74, 0x04, 0xF0, 0x12, 0x4C, 0x73, 0x90, 0x93, 0x5D, 0xE0, 0x60, 0x34, 0x90, 0x93,
+0x58, 0xE0, 0xFF, 0x90, 0x93, 0x41, 0xE0, 0x6F, 0x70, 0x28, 0x90, 0x93, 0x58, 0xE0, 0x90, 0x05,
+0x73, 0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x7D, 0x01,
+0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93, 0x41, 0xE0,
+0x14, 0xF0, 0xE5, 0x2E, 0x30, 0xE3, 0x34, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0, 0xE5, 0x62, 0x64,
+0x01, 0x70, 0x28, 0xE5, 0x65, 0x60, 0x24, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
+0x02, 0xF0, 0x75, 0x48, 0x00, 0x90, 0x93, 0x4C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4, 0x2B,
+0x90, 0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x20, 0xE5, 0x65, 0x60, 0x1C, 0x90,
+0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x5B, 0xE4, 0xF0, 0x53,
+0x66, 0xFD, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x52, 0x17, 0xE5, 0x2E, 0x30, 0xE5, 0x25,
+0x90, 0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x1A, 0xE5, 0x65, 0x60, 0x16, 0x90,
+0x93, 0x5A, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64, 0x0C, 0x60, 0x08, 0x12, 0x51, 0x48,
+0x80, 0x03, 0x12, 0x50, 0x77, 0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40, 0xF0,
+0xE5, 0x62, 0xB4, 0x01, 0x10, 0xE5, 0x65, 0x60, 0x0C, 0x53, 0x66, 0xFE, 0xE5, 0x66, 0x54, 0x07,
+0x70, 0x03, 0x12, 0x52, 0x17, 0xE5, 0x2F, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0,
+0x12, 0x4F, 0xFA, 0x74, 0x86, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0xD0, 0x07,
+0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0,
+0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x93, 0x5E, 0xE0, 0x54, 0xF0, 0x44,
+0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x15, 0x90, 0x94, 0x13,
+0x12, 0x43, 0xC8, 0x0B, 0x7A, 0x93, 0x79, 0x5E, 0x02, 0x55, 0x2C, 0x90, 0x94, 0x38, 0xE0, 0x30,
+0xE0, 0x2F, 0xE5, 0x62, 0xB4, 0x01, 0x2A, 0x90, 0x94, 0x37, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A,
+0x0B, 0x90, 0x94, 0x3A, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x37, 0xF0, 0x90, 0x94, 0x3A, 0xE0,
+0xFF, 0x90, 0x94, 0x39, 0xE0, 0xD3, 0x9F, 0x50, 0x08, 0x12, 0x44, 0xFE, 0xE4, 0x90, 0x94, 0x3A,
+0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05, 0xC0,
+0x06, 0xC0, 0x07, 0x7D, 0x02, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x67, 0xFF, 0xA3, 0xF0, 0x53,
+0x91, 0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE, 0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90, 0x00,
+0x52, 0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0, 0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06, 0x90,
+0x00, 0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D, 0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20, 0xF0,
+0xE5, 0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00, 0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7, 0x06,
+0x90, 0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5, 0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74, 0x01,
+0xF0, 0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90, 0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30, 0xE2,
+0x06, 0x90, 0x00, 0x56, 0x74, 0x04, 0xF0, 0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56, 0x74,
+0x08, 0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05,
+0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0,
+0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04,
+0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x75, 0x56, 0x00, 0x90, 0x01, 0xC4, 0x74, 0xA9, 0xF0, 0x74,
+0x67, 0xA3, 0xF0, 0x53, 0x91, 0xDF, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0,
+0x55, 0x31, 0xF5, 0x35, 0xA3, 0xE0, 0x55, 0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37,
+0xE5, 0x34, 0x30, 0xE0, 0x06, 0x90, 0x01, 0x3C, 0x74, 0x01, 0xF0, 0xE5, 0x34, 0x30, 0xE1, 0x10,
+0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x03, 0x12, 0x46, 0x79,
+0xE5, 0x34, 0x30, 0xE2, 0x3A, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0xE5, 0x65, 0x60, 0x30, 0x90,
+0x06, 0x92, 0xE0, 0x30, 0xE0, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93, 0x46, 0xE0, 0xF5, 0x49, 0xE4,
+0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90,
+0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x56, 0xE4, 0xF0, 0x12, 0x52, 0x17, 0xE5,
+0x34, 0x30, 0xE3, 0x3A, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0xE5, 0x65, 0x60, 0x30, 0x90, 0x06,
+0x92, 0xE0, 0x30, 0xE1, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93, 0x46, 0xE0, 0xF5, 0x49, 0xE4, 0xFB,
+0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06,
+0x92, 0x74, 0x02, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x53, 0xE4, 0xF0, 0x12, 0x52, 0x17, 0xE5, 0x34,
+0x30, 0xE4, 0x3D, 0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x30, 0xE0, 0x24,
+0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x07, 0x78, 0x74, 0x01,
+0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12,
+0x34, 0x30, 0x80, 0x03, 0x12, 0x59, 0xA2, 0x90, 0x93, 0x36, 0xE0, 0x60, 0x03, 0x12, 0x5F, 0xCF,
+0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3C, 0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x18,
+0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90, 0x00, 0x83, 0xE0, 0xF5, 0x64, 0x90, 0x01, 0xBB, 0xE5,
+0x64, 0xF0, 0x12, 0x51, 0xEC, 0x12, 0x52, 0x17, 0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3D,
+0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90, 0x93,
+0xB0, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0xFD,
+0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0xE5, 0x36,
+0x30, 0xE1, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0, 0xE5, 0x36, 0x30, 0xE3, 0x08, 0x90, 0x01,
+0x3E, 0x74, 0x08, 0xF0, 0x51, 0x43, 0xE5, 0x36, 0x30, 0xE4, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x10,
+0xF0, 0xE5, 0x36, 0x30, 0xE2, 0x75, 0x90, 0x01, 0x3E, 0x74, 0x04, 0xF0, 0x90, 0x07, 0x8F, 0xE0,
+0x30, 0xE7, 0x13, 0x74, 0x80, 0xF0, 0x90, 0x07, 0x95, 0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x44, 0x04,
+0xF0, 0xE4, 0xFF, 0x12, 0x5E, 0x46, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE6, 0x11, 0x74, 0x40, 0xF0,
+0x90, 0x07, 0x7C, 0xE0, 0xB4, 0x06, 0x07, 0x90, 0x07, 0x80, 0xE0, 0xFF, 0x51, 0x61, 0x90, 0x07,
+0x8F, 0xE0, 0x30, 0xE5, 0x14, 0x74, 0x20, 0xF0, 0xE4, 0xFF, 0x12, 0x5E, 0x46, 0x90, 0x07, 0x95,
+0xE0, 0x44, 0x01, 0xF0, 0xA3, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE2, 0x0D,
+0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x54, 0xFB, 0xF0, 0x7F, 0x01, 0x12, 0x5E, 0x46, 0x90, 0x07, 0x95,
+0xE0, 0x30, 0xE0, 0x07, 0x74, 0x01, 0xF0, 0xFF, 0x12, 0x5E, 0x46, 0xE5, 0x36, 0x30, 0xE5, 0x06,
+0x90, 0x01, 0x3E, 0x74, 0x20, 0xF0, 0xE5, 0x36, 0x30, 0xE6, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x40,
+0xF0, 0xE5, 0x36, 0x30, 0xE7, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x80, 0xF0, 0xE5, 0x37, 0x30, 0xE1,
+0x09, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x43, 0x14, 0x80, 0xE5, 0x37, 0x30, 0xE4, 0x1E, 0x90,
+0x01, 0x3F, 0x74, 0x10, 0xF0, 0x12, 0x44, 0x24, 0x90, 0x93, 0x58, 0xE0, 0x90, 0x05, 0x73, 0xF0,
+0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x12, 0x5F, 0x3F, 0x12, 0x66, 0xCB, 0x74, 0xA9, 0x04,
+0x90, 0x01, 0xC4, 0xF0, 0x74, 0x67, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04,
+0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0,
+0xD0, 0xE0, 0x32, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x11, 0x90,
+0x93, 0x1C, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x08, 0xE0, 0x44, 0x04, 0xF0, 0xE0, 0x54, 0xFD, 0xF0,
+0x22, 0xAD, 0x07, 0x90, 0x93, 0x64, 0xE0, 0x54, 0xF0, 0x44, 0x05, 0xF0, 0x54, 0x0F, 0x44, 0x10,
+0xF0, 0x90, 0x93, 0x66, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x66, 0x90, 0x94, 0x13, 0x12,
+0x43, 0xC8, 0x7A, 0x93, 0x79, 0x64, 0x02, 0x55, 0x2C, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0,
+0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04,
+0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x53, 0x91, 0xBF, 0x90, 0xFD, 0x68, 0xE0, 0x20, 0xE0, 0x02,
+0xA1, 0x59, 0x90, 0x93, 0x95, 0xE0, 0x70, 0x16, 0x90, 0x00, 0x2E, 0xE0, 0x90, 0x93, 0x0F, 0xF0,
+0x90, 0x00, 0x2D, 0xE0, 0x90, 0x93, 0x10, 0xF0, 0x90, 0x93, 0x95, 0x74, 0x01, 0xF0, 0x90, 0xFD,
+0x60, 0xE0, 0x54, 0x3F, 0xD3, 0x94, 0x09, 0x50, 0x02, 0xF1, 0x32, 0x90, 0xFD, 0x60, 0xE0, 0x64,
+0x0E, 0x60, 0x02, 0x61, 0x89, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x20,
+0xE0, 0x02, 0x61, 0x89, 0x90, 0xFD, 0x62, 0xE0, 0x54, 0xC0, 0xFE, 0x90, 0x07, 0x90, 0xE0, 0x54,
+0x3F, 0x4E, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x07, 0x91, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90,
+0x07, 0x92, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x07, 0x93, 0xF0, 0x90, 0x07, 0x95, 0x74, 0x01,
+0xF0, 0xEF, 0x20, 0xE0, 0x44, 0x90, 0x93, 0x04, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x19,
+0x90, 0x07, 0x78, 0x12, 0x58, 0x8A, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x49,
+0x90, 0x07, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x80, 0x40, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13,
+0x30, 0xE0, 0x11, 0xE4, 0xFF, 0x12, 0x5E, 0x46, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3,
+0xE0, 0x44, 0x01, 0xF0, 0x90, 0x07, 0x78, 0x80, 0x14, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0x13, 0x13,
+0x54, 0x3F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x12, 0x58, 0x8A, 0x80, 0x0C, 0xE0, 0x44, 0x10,
+0xF0, 0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x0F, 0x0A,
+0x90, 0xFD, 0x62, 0xE0, 0xFF, 0xA3, 0xE0, 0xFD, 0xB1, 0xED, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x15,
+0x70, 0x76, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6B, 0xF0, 0xE0, 0x30, 0xE6, 0x1C, 0xF4, 0x54,
+0x3F, 0x04, 0xFF, 0x90, 0x93, 0x0F, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0xC3, 0x9F, 0x90, 0x93, 0x6A,
+0xF0, 0xD3, 0x94, 0x3F, 0x40, 0x20, 0xE4, 0xF0, 0x80, 0x1C, 0x90, 0x93, 0x0F, 0xE0, 0x13, 0x13,
+0x54, 0x3F, 0xFF, 0x90, 0x93, 0x6B, 0xE0, 0x54, 0x3F, 0x2F, 0x90, 0x93, 0x6A, 0xF0, 0xD3, 0x94,
+0x3F, 0x40, 0x03, 0x74, 0x3F, 0xF0, 0x90, 0x93, 0x6A, 0xE0, 0xFF, 0x90, 0x01, 0xE7, 0xF0, 0xEF,
+0x54, 0x30, 0xC4, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x6A, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x4F,
+0x90, 0x93, 0x6C, 0xF0, 0x90, 0x00, 0x2E, 0xF0, 0xEE, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x93, 0x10,
+0xE0, 0x54, 0x0F, 0x4F, 0x90, 0x00, 0x2D, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x21, 0x07, 0x90,
+0xFD, 0x62, 0xE0, 0xFF, 0xB1, 0x74, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x22, 0x02, 0xB1, 0x9C, 0x90,
+0xFD, 0x60, 0xE0, 0x64, 0x23, 0x60, 0x02, 0x81, 0xC0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x2C,
+0x30, 0xE0, 0x05, 0x74, 0x01, 0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13,
+0x13, 0x54, 0x03, 0x20, 0xE0, 0x62, 0x90, 0xFD, 0x65, 0xE0, 0x30, 0xE1, 0x5B, 0x90, 0x93, 0x2D,
+0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x7F, 0x60, 0x7E, 0x08, 0x12, 0x2C,
+0x6E, 0x90, 0x93, 0x32, 0x12, 0x1F, 0xC9, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x7F, 0x70, 0x7E, 0x08,
+0x12, 0x2C, 0x6E, 0x90, 0x93, 0x2E, 0x12, 0x1F, 0xC9, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x01, 0xBE, 0xE0, 0x04, 0xF0,
+0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0x2D, 0x30, 0xE2, 0x08, 0xE0, 0x54, 0x1F, 0x44, 0x20, 0xF0,
+0x80, 0x06, 0xE0, 0x54, 0x1F, 0x44, 0x60, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0xFF, 0x12, 0x9B, 0x06,
+0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x24, 0x02, 0xB1, 0xC4, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x25, 0x13,
+0x90, 0xFD, 0x62, 0xE0, 0x60, 0x0D, 0x90, 0x93, 0x1C, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x93, 0x24,
+0x74, 0x04, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x26, 0x05, 0x7F, 0x01, 0x12, 0x9B, 0xA2, 0x90,
+0xFD, 0x60, 0xE0, 0xB4, 0x30, 0x07, 0xE4, 0xFB, 0xFD, 0x7F, 0x01, 0xD1, 0x18, 0x90, 0x93, 0x36,
+0xE0, 0x60, 0x4F, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x31, 0x70, 0x47, 0x90, 0xFD, 0x62, 0xE0, 0x30,
+0xE0, 0x36, 0x90, 0x01, 0x63, 0xE4, 0xF0, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5,
+0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0xE4, 0xFF, 0x12, 0x5E, 0x46,
+0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x80, 0x0A, 0x90, 0xFD, 0x62, 0xE0, 0x30, 0xE1, 0x03, 0x12,
+0x5F, 0xCF, 0x90, 0xFD, 0x68, 0xE0, 0x44, 0x01, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0,
+0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0,
+0xF0, 0xD0, 0xE0, 0x32, 0xAD, 0x07, 0x90, 0x93, 0x6D, 0xE0, 0x54, 0xF0, 0x44, 0x09, 0xF0, 0x54,
+0x0F, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x6F, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6F, 0x90,
+0x94, 0x13, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6D, 0x02, 0x55, 0x2C, 0x90, 0x00, 0x75, 0xE0,
+0x44, 0x01, 0xF0, 0x7F, 0x01, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0x74, 0x03, 0xF0,
+0x7F, 0x02, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0xE4, 0xF0, 0x90, 0x00, 0x75, 0xE0,
+0x54, 0xFE, 0xF0, 0x22, 0x90, 0x93, 0x6D, 0xE0, 0x54, 0xF0, 0x44, 0x0D, 0xF0, 0x54, 0x0F, 0x44,
+0x10, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6F, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6F,
+0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6D, 0x02, 0x55, 0x2C, 0xAE, 0x07, 0x90,
+0x93, 0x6D, 0xE0, 0x54, 0xF0, 0x44, 0x04, 0xF0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x6F,
+0xEE, 0xF0, 0xA3, 0xED, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6F, 0x90, 0x94, 0x13, 0x12, 0x43,
+0xC8, 0x7A, 0x93, 0x79, 0x6D, 0x02, 0x55, 0x2C, 0xAC, 0x07, 0x90, 0x93, 0xDB, 0xE0, 0x44, 0x0F,
+0xF0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0x93, 0xDD, 0xEC, 0xF0, 0x60, 0x32, 0x90, 0xFD, 0x63,
+0xE0, 0x90, 0x93, 0xDE, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0x90, 0x93, 0xDF, 0xF0, 0x90, 0xFD, 0x64,
+0xE0, 0x90, 0x93, 0xE0, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0xE1, 0xF0, 0x90, 0xFD, 0x66,
+0xE0, 0x90, 0x93, 0xE2, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0xE3, 0xF0, 0x80, 0x11, 0x90,
+0x93, 0xDE, 0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
+0x7B, 0x01, 0x7A, 0x93, 0x79, 0xDD, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0xDB,
+0x02, 0x55, 0x2C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x84,
+0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x85, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F,
+0x0F, 0x90, 0x93, 0x86, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x87, 0xF0, 0x90,
+0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x88, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0xFD,
+0x58, 0xE0, 0x20, 0xE0, 0x14, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x84, 0x7F, 0x30, 0xD1, 0xE8, 0x90,
+0x93, 0x84, 0xE0, 0xFB, 0x7D, 0x01, 0xE4, 0x80, 0x07, 0x90, 0x93, 0x84, 0xE0, 0xFB, 0xE4, 0xFD,
+0xFF, 0xD1, 0x18, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x93, 0x8B, 0x12, 0x43, 0xC8, 0xE4, 0xFE, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x2F, 0x90, 0xFD,
+0x50, 0xEF, 0xF0, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x1E, 0x90, 0x93, 0x8B, 0x12, 0x43, 0xA8, 0x8E,
+0x82, 0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x51, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD,
+0xF5, 0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDC, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0x90, 0x93, 0x6D, 0xE0, 0x54, 0xF0, 0x44, 0x0A, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90,
+0x93, 0x6F, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x70, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90,
+0x93, 0x71, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0x72, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90,
+0x93, 0x73, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90, 0x93, 0x6D, 0x30, 0xE6, 0x08, 0xE0, 0x54, 0x0F,
+0x44, 0x50, 0xF0, 0x80, 0x16, 0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90,
+0x93, 0x74, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0x75, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79,
+0x6F, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6D, 0x02, 0x55, 0x2C, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x93, 0x79, 0xF0, 0x90,
+0x93, 0x79, 0xE0, 0xFD, 0x70, 0x03, 0x02, 0x70, 0xE9, 0x90, 0x94, 0x46, 0xE0, 0xFF, 0x74, 0x01,
+0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF,
+0x5D, 0x70, 0x03, 0x02, 0x70, 0xE2, 0x90, 0x94, 0x46, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0,
+0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7A, 0xF0, 0x75, 0x20, 0x01, 0x75, 0x21, 0x93, 0x75, 0x22,
+0x7A, 0x75, 0x23, 0x01, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x7B, 0x12, 0x55, 0xDD, 0x90, 0x93, 0x7B,
+0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x94, 0x46, 0x30, 0xE0, 0x59, 0xE0, 0x75,
+0xF0, 0x02, 0x90, 0x00, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90, 0x94, 0x46,
+0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D, 0xF0, 0x90,
+0x94, 0x46, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7E,
+0xF0, 0x90, 0x94, 0x46, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x9C, 0xE0, 0x90,
+0x93, 0x7F, 0xF0, 0x90, 0x94, 0x46, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x9C,
+0xE0, 0x90, 0x93, 0x80, 0xF0, 0x80, 0x33, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43,
+0x9C, 0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90, 0x94, 0x46, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2,
+0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D, 0xF0, 0x90, 0x94, 0x46, 0xE0, 0x75, 0xF0, 0x04, 0x90,
+0x01, 0xD3, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7E, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01,
+0x7A, 0x93, 0x79, 0x7C, 0x11, 0xEE, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x90, 0x94, 0x46, 0xE0, 0xFE,
+0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x93, 0x79,
+0xF0, 0x90, 0x94, 0x46, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8,
+0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x94, 0x46, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x02,
+0x6F, 0xAF, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93,
+0x81, 0x12, 0x43, 0xC8, 0xEF, 0x12, 0x43, 0xD1, 0x71, 0x98, 0x01, 0x71, 0x8F, 0x02, 0x71, 0xE0,
+0x03, 0x71, 0xE9, 0x05, 0x71, 0xF2, 0x06, 0x73, 0x46, 0x07, 0x71, 0xFA, 0x0B, 0x72, 0x03, 0x10,
+0x72, 0x0B, 0x11, 0x72, 0x13, 0x12, 0x72, 0x1B, 0x16, 0x72, 0x25, 0x17, 0x72, 0x2F, 0x18, 0x72,
+0x39, 0x19, 0x73, 0x09, 0x1B, 0x73, 0x12, 0x1C, 0x72, 0x42, 0x1D, 0x72, 0x4C, 0x1E, 0x72, 0x57,
+0x21, 0x72, 0x60, 0x22, 0x72, 0x69, 0x23, 0x72, 0x72, 0x24, 0x72, 0x7B, 0x25, 0x72, 0x84, 0x26,
+0x72, 0x8D, 0x27, 0x72, 0x96, 0x28, 0x72, 0x9F, 0x29, 0x71, 0xA1, 0x2D, 0x71, 0xAA, 0x2E, 0x72,
+0xA8, 0x2F, 0x73, 0x1B, 0x30, 0x72, 0xB9, 0x32, 0x72, 0xB0, 0x33, 0x71, 0xBC, 0x34, 0x72, 0xC2,
+0x36, 0x72, 0xCB, 0x37, 0x72, 0xD4, 0x38, 0x72, 0xDC, 0x3A, 0x71, 0xB3, 0x3B, 0x72, 0xE5, 0x3E,
+0x72, 0xEE, 0x3F, 0x72, 0xF7, 0x41, 0x73, 0x24, 0x46, 0x71, 0xC5, 0x47, 0x71, 0xD7, 0x48, 0x71,
+0xCE, 0x49, 0x73, 0x2D, 0x4B, 0x73, 0x36, 0x51, 0x73, 0x00, 0x53, 0x00, 0x00, 0x73, 0x3F, 0x90,
+0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8B, 0xA0, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8B,
+0xA6, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8C, 0x87, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8,
+0x02, 0x8C, 0xCF, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0x08, 0x90, 0x93, 0x81, 0x12,
+0x43, 0xA8, 0x02, 0x8D, 0x3A, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8D, 0x40, 0x90, 0x93,
+0x81, 0x12, 0x43, 0xA8, 0x02, 0x8E, 0x00, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x98, 0x29,
+0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8E, 0x11, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02,
+0x8A, 0x5A, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x81, 0x17, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8,
+0x02, 0x8A, 0xD0, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x61, 0x47, 0x90, 0x93, 0x81, 0x12, 0x43,
+0xA8, 0x61, 0x4D, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x61, 0x53, 0x90, 0x93, 0x81, 0x12, 0x43,
+0xA8, 0x7F, 0x01, 0x80, 0x2F, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x7F, 0x02, 0x80, 0x25, 0x90,
+0x93, 0x81, 0x12, 0x43, 0xA8, 0x7F, 0x03, 0x80, 0x1B, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02,
+0x8F, 0x43, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0xE4, 0xFF, 0x80, 0x08, 0x90, 0x93, 0x81, 0x12,
+0x43, 0xA8, 0x7F, 0x04, 0x02, 0x8E, 0x61, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x7B,
+0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x94, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02,
+0x8F, 0xAD, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0xC6, 0x90, 0x93, 0x81, 0x12, 0x43,
+0xA8, 0x02, 0x8F, 0xDF, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0xF8, 0x90, 0x93, 0x81,
+0x12, 0x43, 0xA8, 0x02, 0x90, 0x11, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x2A, 0x90,
+0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x43, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x81, 0x08,
+0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x6B, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02,
+0x90, 0x84, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x9D, 0x90, 0x93, 0x81, 0x12, 0x43,
+0xA8, 0x02, 0x92, 0x50, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x61, 0xE6, 0x90, 0x93, 0x81, 0x12,
+0x43, 0xA8, 0x02, 0x92, 0x62, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x97, 0xBC, 0x90, 0x93,
+0x81, 0x12, 0x43, 0xA8, 0x02, 0x97, 0xD5, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x98, 0x10,
+0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x5F, 0xE9, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02,
+0x8A, 0x9F, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0x86, 0x90, 0x93, 0x81, 0x12, 0x43,
+0xA8, 0x02, 0x9A, 0xAF, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x6E, 0x83, 0x90, 0x93, 0x81,
+0x12, 0x43, 0xA8, 0x02, 0x98, 0x31, 0x90, 0x93, 0x81, 0x12, 0x43, 0xA8, 0x02, 0x8E, 0x59, 0x90,
+0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x7D, 0x05, 0x7F, 0x0B, 0x80, 0x10, 0x7D, 0x01, 0x7F,
+0x0C, 0x80, 0x0A, 0x7D, 0x01, 0x7F, 0x0D, 0x80, 0x04, 0x7D, 0x03, 0x7F, 0x11, 0xD3, 0x10, 0xAF,
+0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x3B, 0x12, 0x43, 0xC8, 0xE4, 0xFE, 0x90, 0x00, 0xA3, 0xE0,
+0x54, 0xF8, 0x44, 0x05, 0xF0, 0x90, 0x00, 0xA0, 0xE0, 0x54, 0x0F, 0x64, 0x04, 0x70, 0x5A, 0x90,
+0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x49, 0x90, 0xFD, 0x50, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xEE, 0xC3,
+0x9D, 0x50, 0x1E, 0x90, 0x94, 0x3B, 0x12, 0x43, 0xA8, 0x8E, 0x82, 0x75, 0x83, 0x00, 0x12, 0x1F,
+0x0F, 0xFF, 0x74, 0x52, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5, 0x83, 0xEF, 0xF0, 0x0E, 0x80,
+0xDD, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x0F, 0x74, 0x52, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5,
+0x83, 0xE4, 0xF0, 0x0E, 0x80, 0xEB, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0xFF, 0x80, 0x12, 0x90,
+0x01, 0x43, 0xE0, 0x04, 0xF0, 0x7F, 0x02, 0x80, 0x08, 0x90, 0x01, 0x42, 0xE0, 0x04, 0xF0, 0x7F,
+0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12,
+0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x23, 0x71, 0x5D, 0xEF, 0xB4,
+0x03, 0x05, 0x7F, 0xFF, 0x12, 0x9B, 0x06, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0xE9, 0x24, 0x01, 0xF9,
+0xE4, 0x3A, 0xFA, 0x7D, 0x04, 0x61, 0x5D, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x1F,
+0xFE, 0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06, 0x90, 0x93, 0x84, 0xEF, 0xF0,
+0xA3, 0xED, 0xF0, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03,
+0x12, 0x1F, 0x0F, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x00, 0x04, 0x12,
+0x1F, 0x0F, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x93, 0x8A, 0xF0, 0x90, 0x93, 0x84,
+0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAD, 0x82, 0xAC, 0x83, 0x90,
+0x93, 0x8B, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74,
+0x8A, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xA8,
+0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x8D, 0x12, 0x43, 0xA8, 0xEF,
+0x12, 0x42, 0x53, 0x90, 0x93, 0x86, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF,
+0x90, 0x93, 0x8D, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x65, 0x90, 0x93, 0x86,
+0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x8B, 0xE0, 0xFC, 0xA3,
+0xE0, 0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0x8D, 0x82, 0x8C, 0x83, 0xA3,
+0xF0, 0x90, 0x93, 0x89, 0xE0, 0xFE, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0x24, 0xC2, 0xF5, 0x82, 0xE4,
+0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x85, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90,
+0x8A, 0x8A, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8B, 0x12, 0x43,
+0x9C, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8C,
+0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x8F, 0x57, 0xEF, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34,
+0x90, 0xAF, 0x82, 0xF5, 0x58, 0x8F, 0x59, 0xE5, 0x57, 0x75, 0xF0, 0x02, 0xA4, 0x24, 0x02, 0xF9,
+0x74, 0x89, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C, 0x75, 0xF0, 0x09, 0xE5, 0x57,
+0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAF, 0x82, 0x85, 0x83, 0x5D, 0x8F, 0x5E, 0xE5, 0x57, 0x75,
+0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35, 0xF0, 0x75, 0x5F, 0x01, 0xF5, 0x60, 0x89,
+0x61, 0x74, 0xC2, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x12, 0x43, 0xD1,
+0x75, 0xA5, 0x00, 0x75, 0xBA, 0x01, 0x75, 0xCF, 0x02, 0x75, 0xE4, 0x03, 0x76, 0x0D, 0x04, 0x76,
+0x22, 0x05, 0x76, 0x37, 0x06, 0x76, 0x5D, 0x0C, 0x76, 0x8A, 0x0D, 0x76, 0xB7, 0x0E, 0x76, 0xE4,
+0x0F, 0x00, 0x00, 0x77, 0x18, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
+0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80, 0x3C, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47,
+0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x10, 0x80, 0x27, 0xE5,
+0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3,
+0x74, 0x05, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
+0x83, 0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
+0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0x8F, 0xF0, 0xE1, 0x18, 0xE5, 0x57, 0x25,
+0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF5,
+0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74,
+0x0F, 0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
+0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02,
+0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xE1, 0x18, 0x90, 0x04, 0x47,
+0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x46, 0xE0, 0xAB, 0x5A,
+0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x45, 0xE0, 0x85, 0x59,
+0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x44, 0xE1, 0x0F, 0x90, 0x04, 0x4B, 0xE0, 0xAB, 0x5A,
+0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4A, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9,
+0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x49, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58,
+0x83, 0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04, 0x4F, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9,
+0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4E, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00,
+0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x4D, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90,
+0x04, 0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42,
+0x53, 0x90, 0x04, 0x52, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42,
+0x65, 0x90, 0x04, 0x51, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x50, 0xE0,
+0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0xC0, 0x03,
+0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x12, 0x1E,
+0xF6, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0xAB, 0x5A, 0xE5, 0x5C, 0x24,
+0x01, 0xF9, 0xE4, 0x35, 0x5B, 0xFA, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF,
+0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x5F, 0xD0, 0x01, 0xD0,
+0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xC0, 0x83, 0xC0, 0x82,
+0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83,
+0xF0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E,
+0x82, 0x85, 0x5D, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0xE5, 0x57,
+0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E,
+0x60, 0x4C, 0x90, 0x93, 0x90, 0x74, 0x0B, 0xF0, 0x90, 0x93, 0x90, 0xE0, 0xFF, 0xC3, 0x94, 0x00,
+0x50, 0x03, 0x02, 0x78, 0x5E, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33,
+0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34,
+0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x0A, 0x90, 0x93, 0x90, 0xE0,
+0x24, 0x10, 0xA3, 0xF0, 0x80, 0x68, 0x90, 0x93, 0x90, 0xE0, 0x14, 0xF0, 0x80, 0xBA, 0xE5, 0x57,
+0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E,
+0x60, 0x47, 0x90, 0x93, 0x90, 0x74, 0x0F, 0xF0, 0x90, 0x93, 0x90, 0xE0, 0xFF, 0xC3, 0x94, 0x00,
+0x40, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
+0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83,
+0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x93, 0x90, 0xE0, 0xA3, 0xF0, 0x80,
+0x0D, 0x90, 0x93, 0x90, 0xE0, 0x14, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x91, 0xF0, 0xE5, 0x57,
+0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E,
+0x60, 0x46, 0xE4, 0x90, 0x93, 0x90, 0xF0, 0x90, 0x93, 0x90, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x40,
+0x02, 0x21, 0x17, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
+0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
+0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x06, 0x90, 0x93, 0x90, 0xE0, 0x80, 0x63,
+0x90, 0x93, 0x90, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82,
+0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x90,
+0xF0, 0x90, 0x93, 0x90, 0xE0, 0xFF, 0xC3, 0x94, 0x0C, 0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8,
+0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0,
+0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E,
+0x60, 0x08, 0x90, 0x93, 0x90, 0xE0, 0x24, 0x10, 0x80, 0x09, 0x90, 0x93, 0x90, 0xE0, 0x04, 0xF0,
+0x80, 0xBF, 0xE4, 0x90, 0x93, 0x92, 0xF0, 0x90, 0x93, 0x91, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0xE5,
+0x57, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xEF, 0xF0, 0x90, 0x93, 0x92, 0xE0, 0xFE, 0x75, 0xF0,
+0x09, 0xE5, 0x57, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0xE5, 0x57, 0xC3, 0x94, 0x20,
+0x50, 0x2C, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3, 0x9F,
+0x40, 0x02, 0x80, 0x47, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
+0xC3, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x92, 0xE0, 0xA3, 0xF0, 0x80, 0x37, 0x80, 0x2D, 0x74, 0x27,
+0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x91, 0xE0, 0xFE,
+0xEF, 0xD3, 0x9E, 0x40, 0x07, 0x90, 0x93, 0x93, 0xEE, 0xF0, 0x80, 0x17, 0x90, 0x93, 0x92, 0xE0,
+0xFE, 0xEF, 0xC3, 0x9E, 0x50, 0x05, 0xA3, 0xEE, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x91, 0xE0, 0x90,
+0x93, 0x93, 0xF0, 0x90, 0x93, 0x93, 0xE0, 0xFD, 0xAF, 0x57, 0x31, 0xEF, 0x90, 0x93, 0x93, 0xE0,
+0xFF, 0x74, 0xA7, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93,
+0x91, 0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x03, 0xF0, 0x22, 0xEF,
+0xD3, 0x94, 0x0B, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x02, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x03,
+0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x8A, 0x83, 0xF0, 0x22, 0xD3,
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x0E, 0x74, 0x84, 0x2F, 0xF5,
+0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED, 0xF0, 0x80, 0x29, 0x74, 0x27, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0x91, 0xF5, 0x83, 0xED, 0xF0, 0x90, 0x93, 0xCE, 0xEF, 0xF0, 0x24, 0x27, 0xF5, 0x82, 0xE4,
+0x34, 0x91, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0xCF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xCE, 0x7D,
+0x02, 0x71, 0xB4, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F, 0x52, 0x8D, 0x53, 0xE5, 0x53, 0x54, 0x1F,
+0x90, 0x93, 0x60, 0xF0, 0x74, 0x01, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0x90,
+0x93, 0x5E, 0xF0, 0x90, 0x93, 0x61, 0x74, 0x01, 0xF0, 0xEB, 0xC3, 0x94, 0x01, 0x40, 0x02, 0x80,
+0x3B, 0x90, 0x93, 0x5E, 0xE0, 0x25, 0x55, 0xFF, 0xA3, 0xF0, 0xA3, 0xE0, 0x90, 0x41, 0xA4, 0x93,
+0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x13, 0x74, 0x01, 0x25, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5,
+0x83, 0xE4, 0xF0, 0xAD, 0x53, 0xAF, 0x52, 0x21, 0xEF, 0x90, 0x93, 0x5F, 0xE0, 0xFF, 0x74, 0x01,
+0x25, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0xAD, 0x07, 0x75, 0xF0,
+0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x63, 0xF0, 0x74, 0x28, 0x2D,
+0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x54, 0x1F, 0x90, 0x93, 0x62, 0xF0, 0x74, 0xE8,
+0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x74, 0xE8, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x5D, 0x74, 0xE8, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x85, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5,
+0x83, 0xE0, 0xFF, 0x74, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEF, 0xF0, 0x74,
+0x85, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x74,
+0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0xC6, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0xC8, 0x40, 0x0D, 0x74, 0xC6, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0x8E, 0xF5, 0x83, 0x74, 0xC8, 0xF0, 0x90, 0x93, 0x63, 0xE0, 0xFF, 0x90, 0x93, 0x62,
+0xE0, 0xD3, 0x9F, 0x40, 0x02, 0xEF, 0xF0, 0x90, 0x93, 0x62, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C,
+0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25,
+0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4,
+0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
+0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x05, 0x90, 0x93, 0x62, 0xE0, 0xFD,
+0x31, 0xEF, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x12, 0x90, 0x04, 0x30, 0xE0,
+0x70, 0x0C, 0x04, 0xF0, 0xA3, 0xF0, 0xA3, 0x04, 0xF0, 0x90, 0x04, 0xCF, 0x04, 0xF0, 0x90, 0x93,
+0x62, 0xE0, 0xFF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x1C, 0x12, 0x43,
+0xC8, 0x90, 0x94, 0x1F, 0xE0, 0x54, 0xF0, 0x44, 0x06, 0xFF, 0xF0, 0xED, 0x54, 0x0F, 0xC4, 0x54,
+0xF0, 0xFE, 0xEF, 0x54, 0x0F, 0x4E, 0xF0, 0x90, 0x94, 0x1C, 0x12, 0x43, 0xA8, 0x90, 0x94, 0x13,
+0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x1F, 0x12, 0x55, 0x2C, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0xAC, 0x07, 0xEC, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2C, 0xF5, 0x82, 0xE4, 0x34,
+0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x89, 0xF0, 0x80, 0x11, 0x74, 0x27, 0x2C, 0xF5,
+0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x89,
+0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x93, 0x8C, 0xF0, 0x75, 0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x89, 0x12,
+0x43, 0x9C, 0xE0, 0x90, 0x93, 0x8E, 0xF0, 0x75, 0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x88, 0x12, 0x43,
+0x9C, 0xE0, 0xFE, 0x90, 0x93, 0x8F, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34,
+0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x90, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEC,
+0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90,
+0x93, 0x92, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x74, 0xC6, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5,
+0x83, 0xE4, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C, 0x90, 0x93, 0x8F, 0xE0, 0x90, 0x93, 0x8C, 0xF0,
+0x90, 0x93, 0x89, 0xF0, 0xED, 0x70, 0x02, 0xA1, 0x6B, 0x90, 0x93, 0x8D, 0xED, 0xF0, 0x90, 0x93,
+0x89, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x93, 0x8C, 0xE0, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x8D,
+0xE0, 0x14, 0xF0, 0x90, 0x93, 0x8D, 0xE0, 0x70, 0x02, 0xA1, 0x6B, 0x90, 0x93, 0x8C, 0xE0, 0xFF,
+0xD3, 0x94, 0x00, 0x50, 0x02, 0xA1, 0x6B, 0xE4, 0x90, 0x93, 0x8B, 0xF0, 0xEF, 0x14, 0x90, 0x93,
+0x8A, 0xF0, 0x90, 0x93, 0x8E, 0xE0, 0xFD, 0x90, 0x93, 0x8A, 0xE0, 0xFF, 0xD3, 0x9D, 0x40, 0x6F,
+0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
+0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x92, 0xE0, 0x5E, 0xFE,
+0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93, 0x8A, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x37,
+0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
+0xFF, 0x90, 0x93, 0x90, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x1A, 0x90, 0x93, 0x8A,
+0xE0, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x8B, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x8D, 0xE0, 0xFF,
+0x90, 0x93, 0x8B, 0xE0, 0x6F, 0x60, 0x08, 0x90, 0x93, 0x8A, 0xE0, 0x14, 0xF0, 0x80, 0x83, 0x90,
+0x93, 0x8D, 0xE0, 0xFF, 0x90, 0x93, 0x8B, 0xE0, 0xC3, 0x9F, 0x50, 0x0F, 0x90, 0x93, 0x8A, 0xE0,
+0xB5, 0x05, 0x08, 0x90, 0x93, 0x8E, 0xE0, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x89, 0xE0, 0xFF,
+0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01,
+0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01,
+0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xEC, 0x25, 0xE0, 0x24,
+0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x90,
+0x93, 0x89, 0xE0, 0xFD, 0x31, 0xEF, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x22, 0xEF, 0xC3, 0x94, 0x20,
+0x50, 0x39, 0xEF, 0x30, 0xE0, 0x17, 0xED, 0xC4, 0x54, 0xF0, 0xFD, 0xEF, 0xC3, 0x13, 0xFE, 0x24,
+0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x0F, 0x80, 0x10, 0xEF, 0xC3, 0x13,
+0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0xA4,
+0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x4D, 0xF0, 0x22, 0xAD, 0x07, 0xED, 0xC3,
+0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54,
+0x7F, 0x90, 0x93, 0x89, 0xF0, 0x80, 0x11, 0x74, 0x27, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
+0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x89, 0xE0, 0xF9, 0x54, 0x1F, 0xA3,
+0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0xFF, 0x90, 0x93, 0x8C,
+0xF0, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3,
+0xE0, 0x90, 0x93, 0x8D, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82,
+0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x8F, 0xCB, 0xF0, 0xA3, 0xEB,
+0xF0, 0x90, 0x93, 0x8A, 0xE0, 0xFE, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5,
+0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
+0x34, 0x8A, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB, 0xF0, 0xEE, 0xC3, 0x9F, 0x40, 0x02, 0xE1, 0x59,
+0x90, 0x93, 0x8A, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF,
+0xF0, 0xEF, 0x04, 0x90, 0x93, 0x8B, 0xF0, 0x90, 0x93, 0x8C, 0xE0, 0xFF, 0x90, 0x93, 0x8B, 0xE0,
+0xFE, 0xD3, 0x9F, 0x40, 0x02, 0xE1, 0x93, 0xEE, 0xC3, 0x94, 0x10, 0x40, 0x21, 0xEE, 0x24, 0xF0,
+0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
+0xF9, 0xFF, 0x90, 0x93, 0x8D, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93,
+0x8B, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
+0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8F, 0xE0, 0x5E, 0xFE, 0xA3,
+0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x93, 0x8B, 0xE0, 0xB4, 0x11, 0x0D, 0x90, 0x93, 0x8E, 0xE0,
+0x30, 0xE7, 0x06, 0x90, 0x93, 0x8B, 0x74, 0x17, 0xF0, 0x90, 0x93, 0x8B, 0xE0, 0xFF, 0x64, 0x13,
+0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x93, 0x8D, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x93, 0x8B,
+0x74, 0x18, 0xF0, 0x90, 0x93, 0x8B, 0xE0, 0x90, 0x93, 0x8A, 0xF0, 0x90, 0x93, 0x89, 0xF0, 0x80,
+0x42, 0x90, 0x93, 0x8B, 0xE0, 0x04, 0xF0, 0xC1, 0xB7, 0x90, 0x93, 0x8C, 0xE0, 0xFC, 0x90, 0x93,
+0x8A, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83,
+0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01, 0x10,
+0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x93, 0x8A, 0xE0, 0x44, 0x40, 0x90, 0x93, 0x89, 0xF0, 0x80, 0x03,
+0xAF, 0x01, 0x22, 0x90, 0x93, 0x8A, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34,
+0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5,
+0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
+0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83,
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90, 0x93, 0x8A, 0xE0, 0xD3, 0x9C, 0x40, 0x5E, 0x90,
+0x93, 0x8C, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0,
+0x90, 0x93, 0x8A, 0xEF, 0xF0, 0x90, 0x93, 0x89, 0xF0, 0xFC, 0xA3, 0xE0, 0xFF, 0x25, 0xE0, 0x24,
+0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF,
+0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF,
+0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82,
+0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x22, 0x74, 0x01, 0x2D,
+0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0x05, 0x90, 0x93, 0x89, 0xE0, 0x44,
+0x80, 0xFD, 0x12, 0x79, 0xEF, 0x90, 0x93, 0x89, 0xE0, 0x44, 0x80, 0xFF, 0x22, 0xE4, 0x90, 0x93,
+0x79, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0xC3, 0x94, 0x40, 0x40, 0x03, 0x02, 0x88, 0x5F, 0xEF,
+0xB4, 0x20, 0x14, 0x90, 0x8F, 0x46, 0xE0, 0x04, 0xF0, 0x90, 0x89, 0x01, 0xE0, 0xFF, 0x90, 0x8F,
+0x46, 0xE0, 0xB5, 0x07, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90,
+0x8A, 0x8B, 0x12, 0x43, 0x9C, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, 0x88, 0x56, 0xEF, 0x25, 0xE0,
+0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x94, 0x00,
+0xEE, 0x94, 0x00, 0x50, 0x03, 0x02, 0x88, 0x56, 0x90, 0x93, 0x79, 0xE0, 0x94, 0x20, 0x40, 0x09,
+0x90, 0x8F, 0x46, 0xE0, 0x60, 0x03, 0x02, 0x88, 0x5F, 0x90, 0x93, 0x79, 0xE0, 0x75, 0xF0, 0x0A,
+0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C, 0xE0,
+0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xFD, 0xA3, 0xE0,
+0x90, 0x93, 0x7E, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4,
+0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93, 0x80, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0,
+0x90, 0x93, 0x79, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93, 0x7A, 0xF0, 0x80, 0x14, 0x90, 0x93, 0x79,
+0xE0, 0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93, 0x7A,
+0xF0, 0x90, 0x93, 0x7A, 0xE0, 0xFE, 0x54, 0x1F, 0xA3, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x75,
+0xF0, 0x09, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x83, 0xF0, 0x74, 0x67, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x02, 0x61, 0xF4, 0x90,
+0x93, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x7B, 0xE0, 0x9F, 0x40, 0x13, 0x90, 0x93, 0x83, 0xE0, 0x90,
+0x93, 0x7B, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0x90, 0x93, 0x7A, 0xF0, 0xEF, 0x4E, 0xF0, 0x90, 0x93,
+0x7B, 0xE0, 0xFF, 0x90, 0x41, 0x18, 0x93, 0xFE, 0x90, 0x93, 0x79, 0xE0, 0x24, 0x85, 0xF5, 0x82,
+0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x40, 0x06, 0xEF, 0x90, 0x40, 0xE0, 0x80, 0x07,
+0x90, 0x93, 0x7B, 0xE0, 0x90, 0x40, 0xFC, 0x93, 0x90, 0x93, 0x82, 0xF0, 0x90, 0x93, 0x82, 0xE0,
+0x75, 0xF0, 0x06, 0xA4, 0x24, 0x56, 0xF9, 0x74, 0x40, 0x35, 0xF0, 0xFA, 0x7B, 0xFF, 0x8B, 0x57,
+0xF5, 0x58, 0x89, 0x59, 0x90, 0x93, 0x79, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34,
+0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93, 0x7C, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x12,
+0x1E, 0xF6, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x9D, 0xFD, 0xAC,
+0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7C, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA,
+0x58, 0xA9, 0x59, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B,
+0xA9, 0x5C, 0x90, 0x00, 0x02, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93,
+0x7C, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x02,
+0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x04, 0x12,
+0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7C, 0xEE, 0x8F, 0xF0, 0x12, 0x42,
+0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00,
+0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x06, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12,
+0x1F, 0x3C, 0x90, 0x93, 0x7C, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9,
+0x59, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
+0x90, 0x00, 0x08, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7C, 0xEE,
+0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x05, 0x12, 0x1F,
+0x0F, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7E, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0xD3,
+0x90, 0x93, 0x7D, 0xE0, 0x9F, 0x90, 0x93, 0x7C, 0xE0, 0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F, 0xF0,
+0x90, 0x93, 0x7C, 0xE0, 0x9E, 0xF0, 0x80, 0x07, 0xE4, 0x90, 0x93, 0x7C, 0xF0, 0xA3, 0xF0, 0x90,
+0x93, 0x7C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0x79, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5,
+0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x7A, 0xE0, 0x25,
+0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFC, 0x74, 0x01, 0x93,
+0xFD, 0xD3, 0xEF, 0x9D, 0xEE, 0x9C, 0x50, 0x02, 0x61, 0xC3, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x24,
+0x82, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9E, 0x40, 0x03, 0xEF, 0x80, 0x1C, 0x90, 0x93, 0x79,
+0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x82, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x90, 0x93, 0x84, 0xF0, 0x90, 0x93,
+0x84, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x02, 0x80, 0x23, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x24, 0xC6,
+0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x01, 0x40, 0x0F, 0x74, 0xC6, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x14, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x79, 0xE0,
+0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF,
+0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x60, 0x02, 0xE1, 0x04, 0x12, 0x7D,
+0xFC, 0xE1, 0x04, 0x90, 0x93, 0x7A, 0xE0, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41,
+0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xC3, 0x90, 0x93, 0x7D, 0xE0, 0x9F, 0x90,
+0x93, 0x7C, 0xE0, 0x9E, 0x40, 0x02, 0xE1, 0x04, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x7D, 0x01, 0x12,
+0x7B, 0xF1, 0xE1, 0x04, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91,
+0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x02, 0xA1, 0xD2, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4,
+0x03, 0x0B, 0x90, 0x93, 0x7B, 0xE0, 0xC3, 0x94, 0x19, 0x40, 0x3D, 0x80, 0x2E, 0xEE, 0xB4, 0x02,
+0x0B, 0x90, 0x93, 0x7B, 0xE0, 0xC3, 0x94, 0x11, 0x40, 0x2E, 0x80, 0x1F, 0x90, 0x8A, 0x83, 0xE0,
+0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x93, 0x7B, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x1B, 0x80, 0x0C, 0xEE,
+0x70, 0x11, 0x90, 0x93, 0x7B, 0xE0, 0xC3, 0x94, 0x03, 0x40, 0x0D, 0x90, 0x8E, 0xC5, 0x74, 0x01,
+0xF0, 0x80, 0x05, 0xE4, 0x90, 0x8E, 0xC5, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFE, 0x24, 0xC4, 0xF5,
+0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x88, 0xF0, 0x74, 0x85, 0x2E, 0xF5, 0x82,
+0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0xC3, 0x94, 0x30, 0x50, 0x0A, 0xE4, 0x90, 0x93, 0x88,
+0xF0, 0x74, 0x67, 0x2F, 0xA1, 0x7D, 0x90, 0x8E, 0xC5, 0xE0, 0x64, 0x01, 0x60, 0x02, 0xA1, 0x72,
+0x90, 0x93, 0x79, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x64, 0x0A,
+0x60, 0x5B, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0xEE, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x41,
+0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8,
+0x74, 0x80, 0x98, 0x50, 0x38, 0x90, 0x93, 0x79, 0xE0, 0xFE, 0xEF, 0x24, 0x05, 0xFB, 0xE4, 0x33,
+0xFA, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x9B, 0xEA, 0x64,
+0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x16, 0x90, 0x93, 0x79, 0xE0, 0x24, 0xA7, 0xF5, 0x82, 0xE4,
+0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x7B, 0xE0, 0x6F, 0x60, 0x56, 0x90, 0x93, 0x79,
+0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x42, 0x40,
+0x08, 0x90, 0x93, 0x88, 0x74, 0x05, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0x39, 0x90, 0x93, 0x88,
+0x40, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x24,
+0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34,
+0x8F, 0x80, 0x2F, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
+0x83, 0xE4, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x04, 0xF0,
+0x80, 0x14, 0xE4, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4,
+0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x7B, 0xE0, 0xFE, 0x90, 0x93, 0x79, 0xE0, 0xFF,
+0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0xFE,
+0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF,
+0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01, 0x11, 0xE4, 0x90, 0x93, 0x88, 0xF0, 0x74,
+0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0xFD,
+0xE1, 0x01, 0xEC, 0x64, 0x06, 0x60, 0x02, 0xE1, 0x04, 0x90, 0x93, 0x7C, 0xF0, 0xA3, 0xF0, 0x90,
+0x41, 0xE1, 0x93, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7E, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F,
+0x3C, 0x90, 0x93, 0x86, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0x24, 0xC4, 0xF5,
+0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x88, 0xF0, 0xE4, 0x90, 0x93, 0x85, 0xF0,
+0x90, 0x93, 0x85, 0xE0, 0xFF, 0xD3, 0x94, 0x04, 0x50, 0x47, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
+0x75, 0xF0, 0x02, 0xEF, 0xA4, 0xF5, 0x82, 0x85, 0xF0, 0x83, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0,
+0xEF, 0x90, 0x41, 0xDC, 0x93, 0xFF, 0x7E, 0x00, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7C, 0xEE, 0x8F,
+0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0x86, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x93, 0x7D,
+0xE0, 0x9F, 0x90, 0x93, 0x7C, 0xE0, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x85, 0xE0, 0x04, 0xF0, 0x80,
+0xAF, 0x90, 0x93, 0x85, 0xE0, 0xC3, 0x13, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0xFF, 0xB4, 0x01, 0x0D,
+0x90, 0x93, 0x85, 0xE0, 0x70, 0x5D, 0x90, 0x93, 0x88, 0x04, 0xF0, 0x80, 0x5B, 0xEF, 0xB4, 0x03,
+0x1D, 0x90, 0x93, 0x85, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93, 0x88, 0x74, 0x03, 0xF0, 0x80, 0x48,
+0xEF, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x88, 0x74, 0x01, 0xF0, 0x80, 0x3C, 0x80, 0x35, 0x90, 0x93,
+0x88, 0xE0, 0x64, 0x05, 0x70, 0x32, 0x90, 0x93, 0x85, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93, 0x88,
+0x74, 0x05, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x93, 0x88, 0xB4, 0x01, 0x05, 0x74, 0x03, 0xF0, 0x80,
+0x03, 0x74, 0x01, 0xF0, 0xD3, 0x90, 0x93, 0x81, 0xE0, 0x94, 0x03, 0x90, 0x93, 0x80, 0xE0, 0x94,
+0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x88, 0xF0, 0xD3, 0x90, 0x93, 0x81, 0xE0, 0x94, 0x03, 0x90,
+0x93, 0x80, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x88, 0xE0,
+0xFD, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xED,
+0xF0, 0x12, 0x7D, 0xBC, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91,
+0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x05, 0x50, 0x0F, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91,
+0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x79, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4,
+0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x80, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x74,
+0xFF, 0x9F, 0xFF, 0x74, 0xFF, 0x9E, 0xFE, 0x90, 0x93, 0x79, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x47,
+0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0xD3, 0x9F, 0xEA, 0x9E, 0x50,
+0x1C, 0x90, 0x93, 0x80, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82,
+0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x80, 0x14, 0x90, 0x93, 0x79,
+0xE0, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xA3,
+0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5,
+0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0x74, 0xFF, 0x9D, 0xFB, 0x74, 0xFF, 0x9C, 0xFA, 0xEF,
+0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xD3,
+0x9B, 0xEE, 0x9A, 0x90, 0x93, 0x79, 0xE0, 0x50, 0x13, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xEC, 0x8D, 0xF0, 0x12, 0x42, 0x87, 0x80, 0x10, 0x25, 0xE0, 0x24, 0xC7,
+0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA, 0x5B,
+0xA9, 0x5C, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00,
+0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x04, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F,
+0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x08, 0xE4, 0xF5, 0xF0, 0x12,
+0x43, 0x1F, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87,
+0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D,
+0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D,
+0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0x04, 0xF0, 0x02, 0x80, 0x62, 0x22,
+0x90, 0x04, 0x44, 0x74, 0x11, 0xF0, 0xA3, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3, 0xE4,
+0xF0, 0x90, 0x93, 0x79, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x14, 0x74,
+0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0x04,
+0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8F, 0x46, 0xF0, 0x90, 0x89, 0x01, 0x04, 0xF0, 0xE4, 0x90, 0x93,
+0x79, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFF, 0xC3, 0x94, 0x40, 0x40, 0x02, 0x41, 0x59, 0x75, 0xF0,
+0x0A, 0xEF, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF,
+0x90, 0x84, 0x02, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84,
+0x04, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x06, 0x12,
+0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x08, 0x12, 0x43, 0x9C,
+0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0xA7, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13,
+0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC4, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82,
+0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82,
+0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x05, 0xF5, 0x82,
+0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82,
+0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82,
+0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82,
+0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0x07, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC7, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4,
+0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8E, 0x04,
+0xF0, 0x90, 0x41, 0x92, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0x90, 0x41, 0x5A, 0x74, 0x01, 0x93,
+0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0x90, 0x93, 0x79, 0xE0, 0xFD,
+0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
+0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x75, 0xF0, 0x09,
+0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x74, 0xC2, 0x2D, 0xF5, 0x82, 0xE4,
+0x34, 0x89, 0xF5, 0x83, 0x74, 0x0C, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x86, 0x12, 0x43,
+0x9C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x84, 0x12, 0x43, 0x9C,
+0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C,
+0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xED,
+0xC3, 0x94, 0x20, 0x50, 0x0F, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0x74,
+0x13, 0xF0, 0x80, 0x0D, 0x74, 0x27, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13,
+0xF0, 0x90, 0x93, 0x79, 0xE0, 0x04, 0xF0, 0x01, 0xA2, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0xC3, 0x94,
+0x40, 0x50, 0x14, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0x8E, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0xB4, 0x40, 0x0A, 0x90, 0x00, 0x02, 0x12, 0x1F,
+0x0F, 0x90, 0x8A, 0x82, 0xF0, 0x22, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x3F, 0xFE,
+0xEF, 0x54, 0x80, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0xFD, 0xAF, 0x06, 0x02, 0x74, 0x2B, 0x12,
+0x1E, 0xF6, 0x90, 0x89, 0x01, 0xF0, 0x22, 0x90, 0x93, 0x90, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x93,
+0xE0, 0x54, 0xF0, 0x44, 0x02, 0xF0, 0x54, 0x0F, 0x44, 0xC0, 0xF0, 0x90, 0x93, 0x90, 0x12, 0x43,
+0xA8, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x93, 0x02, 0x55, 0x2C,
+0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFC, 0xED, 0xC3,
+0x94, 0x40, 0x40, 0x02, 0xE4, 0xFD, 0xEC, 0xC3, 0x94, 0x40, 0x40, 0x02, 0xE4, 0xFC, 0xED, 0x25,
+0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93,
+0x84, 0xF0, 0xEE, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5,
+0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x86, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xED, 0xF0, 0xA3,
+0x74, 0xFF, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
+0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x8A, 0xF0, 0xEE, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5,
+0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x8C, 0xF0, 0xEE, 0xA3,
+0xF0, 0xA3, 0xEC, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x84, 0x41, 0xA7,
+0x12, 0x1E, 0xF6, 0xF5, 0x62, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x84,
+0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0x84,
+0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x5A, 0xF0, 0x90, 0x00, 0x03,
+0x12, 0x1F, 0x0F, 0x90, 0x93, 0x3D, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x01,
+0x90, 0x93, 0x3E, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x01, 0x90, 0x93, 0x48, 0xF0, 0x90, 0x00, 0x04,
+0x12, 0x1F, 0x0F, 0xFF, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x45, 0xF0, 0xEF, 0x13, 0x13, 0x13,
+0x54, 0x01, 0x90, 0x93, 0x4B, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x54, 0x01,
+0x90, 0x93, 0x47, 0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x01, 0x90, 0x93, 0x5C, 0xF0, 0x90, 0x00, 0x04,
+0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x4A, 0xF0, 0xE0, 0x70, 0x38,
+0x90, 0x93, 0x48, 0xE0, 0x70, 0x10, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x87, 0x12, 0x1F, 0xD5,
+0x00, 0x00, 0x03, 0x10, 0x80, 0x0F, 0x7F, 0x01, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x87, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x03, 0x00, 0x90, 0x93, 0x87, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F,
+0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x3E, 0xE0, 0x70, 0x03, 0x12, 0x4F,
+0xB8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x12, 0x4D, 0xC1, 0x90, 0x93, 0x5A, 0xE0, 0x90, 0x01,
+0xE6, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x30, 0xE0,
+0x25, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x49, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93,
+0x4C, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x46, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
+0x0F, 0x90, 0x93, 0x51, 0xF0, 0x22, 0x90, 0x93, 0x49, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4C, 0x74,
+0x05, 0xF0, 0x90, 0x93, 0x46, 0x74, 0x14, 0xF0, 0x90, 0x93, 0x51, 0x74, 0x05, 0xF0, 0x22, 0x12,
+0x1E, 0xF6, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x50, 0xF0, 0x90, 0x00, 0x01,
+0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x4E, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90, 0x93,
+0x50, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x4E, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4E,
+0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x4D, 0xF0, 0x60,
+0x20, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x19, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x69, 0x90,
+0x93, 0x3E, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x57, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xB8, 0x12, 0x51,
+0x69, 0x90, 0x93, 0x4D, 0xE0, 0x90, 0x01, 0xE7, 0xF0, 0x22, 0x90, 0x93, 0x84, 0x02, 0x43, 0xC8,
+0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x37, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF,
+0x54, 0x0F, 0xFF, 0xE0, 0x54, 0xF0, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54, 0x70, 0xFF, 0x90, 0x93,
+0x37, 0xE0, 0x54, 0x8F, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x39, 0xF0,
+0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x3A, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F,
+0x90, 0x93, 0x3B, 0xF0, 0x90, 0x00, 0x01, 0x74, 0x19, 0x12, 0x42, 0x20, 0x90, 0x00, 0x01, 0x12,
+0x1F, 0x0F, 0xFF, 0xD3, 0x94, 0x20, 0x50, 0x08, 0x90, 0x93, 0x38, 0x74, 0x01, 0xF0, 0x80, 0x57,
+0xEF, 0xD3, 0x94, 0x40, 0x50, 0x08, 0x90, 0x93, 0x38, 0x74, 0x02, 0xF0, 0x80, 0x49, 0xEF, 0xD3,
+0x94, 0x60, 0x50, 0x08, 0x90, 0x93, 0x38, 0x74, 0x03, 0xF0, 0x80, 0x3B, 0xEF, 0xD3, 0x94, 0x80,
+0x50, 0x08, 0x90, 0x93, 0x38, 0x74, 0x04, 0xF0, 0x80, 0x2D, 0xEF, 0xD3, 0x94, 0xA0, 0x50, 0x08,
+0x90, 0x93, 0x38, 0x74, 0x05, 0xF0, 0x80, 0x1F, 0xEF, 0xD3, 0x94, 0xC0, 0x50, 0x08, 0x90, 0x93,
+0x38, 0x74, 0x06, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0xE0, 0x90, 0x93, 0x38, 0x50, 0x05, 0x74,
+0x07, 0xF0, 0x80, 0x03, 0x74, 0x08, 0xF0, 0x90, 0x93, 0x38, 0xE0, 0x90, 0x93, 0x3C, 0xF0, 0x22,
+0x12, 0x1E, 0xF6, 0x60, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0,
+0x22, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x1E, 0xF6, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90, 0x93,
+0xAA, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xAB, 0xF0, 0x90,
+0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xAC, 0xF0, 0x90, 0x00, 0x03, 0x12,
+0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xAD, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF,
+0xAE, 0x05, 0xED, 0x2F, 0x90, 0x93, 0xAE, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0xA9, 0xF0,
+0x22, 0xEF, 0x70, 0x21, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x14, 0x90, 0x00, 0x40, 0xE0, 0x44, 0x20,
+0xF0, 0xE0, 0x54, 0x3F, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x44, 0x01, 0xF0, 0x80, 0x07, 0x90, 0x07,
+0x78, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x64, 0x01, 0x70, 0x6A, 0x12, 0x1E, 0xF6, 0x90, 0x00, 0x01,
+0x30, 0xE0, 0x2E, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC0, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
+0x90, 0x06, 0xC1, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC2, 0xF0, 0x90, 0x00,
+0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC3, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x54, 0xFE, 0xF0, 0x80,
+0x2C, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC4, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x06,
+0xC5, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC6, 0xF0, 0x90, 0x00, 0x04, 0x12,
+0x1F, 0x0F, 0x90, 0x06, 0xC7, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x06, 0xCC,
+0xE0, 0x44, 0x02, 0xF0, 0xEF, 0xB4, 0x02, 0x11, 0x12, 0x1E, 0xF6, 0x90, 0x06, 0xC8, 0xF0, 0x90,
+0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC9, 0xF0, 0xEF, 0xB4, 0x03, 0x11, 0x12, 0x1E, 0xF6,
+0x90, 0x06, 0xCA, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xCB, 0xF0, 0xEF, 0x64,
+0x04, 0x70, 0x1F, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x07, 0x83, 0x30, 0xE0, 0x06, 0xE0, 0x44, 0x10,
+0xF0, 0x80, 0x04, 0xE0, 0x54, 0x6F, 0xF0, 0xEF, 0x30, 0xE1, 0x07, 0x90, 0x07, 0x83, 0xE0, 0x44,
+0x80, 0xF0, 0x22, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x12,
+0x1E, 0xF6, 0x90, 0x92, 0x6B, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x92, 0x6C, 0xF0,
+0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x92, 0x6D, 0xF0, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8,
+0x12, 0x73, 0x59, 0xEF, 0xB4, 0x02, 0x03, 0x43, 0x14, 0x01, 0x22, 0x90, 0x93, 0x84, 0x12, 0x43,
+0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F,
+0x17, 0x02, 0x73, 0x5D, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8,
+0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x18, 0x02, 0x73, 0x5D, 0x90, 0x93, 0x84,
+0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D,
+0x01, 0x7F, 0x19, 0x02, 0x73, 0x5D, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12,
+0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1A, 0x02, 0x73, 0x5D, 0x90,
+0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43,
+0xA8, 0x7D, 0x01, 0x7F, 0x1B, 0x02, 0x73, 0x5D, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93,
+0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1C, 0x02, 0x73,
+0x5D, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84,
+0x12, 0x43, 0xA8, 0x7D, 0x03, 0x7F, 0x1D, 0x02, 0x73, 0x5D, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8,
+0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1E,
+0x02, 0x73, 0x5D, 0x12, 0x1E, 0xF6, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x18, 0x12, 0x1F, 0xB6,
+0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, 0x07, 0x90, 0x93, 0x0B, 0x12, 0x43, 0x84, 0xEC, 0x54,
+0x03, 0xFC, 0x12, 0x43, 0x59, 0x90, 0x93, 0x07, 0x02, 0x1F, 0xC9, 0x90, 0x93, 0x84, 0x12, 0x43,
+0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F,
+0x1F, 0x02, 0x73, 0x5D, 0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8,
+0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x20, 0x02, 0x73, 0x5D, 0x12, 0x1E, 0xF6,
+0xFF, 0x54, 0x01, 0x90, 0x01, 0xBC, 0xF0, 0xEF, 0x30, 0xE0, 0x5C, 0x90, 0xFD, 0x58, 0xE0, 0x20,
+0xE0, 0x4E, 0x90, 0xFD, 0x50, 0x74, 0x0A, 0xF0, 0xA3, 0x74, 0x06, 0xF0, 0x90, 0x00, 0x01, 0x12,
+0x1F, 0x0F, 0x90, 0xFD, 0x52, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0xFD, 0x53, 0xF0,
+0xA3, 0xE4, 0xF0, 0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x90, 0xFD, 0x55, 0x30, 0xE0, 0x05, 0x74, 0xA0,
+0xF0, 0x80, 0x03, 0x74, 0xC0, 0xF0, 0x90, 0xFD, 0x56, 0x74, 0x10, 0xF0, 0xA3, 0x74, 0x80, 0xF0,
+0x90, 0xFD, 0x50, 0x74, 0x0A, 0xF0, 0xA3, 0x74, 0x06, 0xF0, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0,
+0x90, 0x01, 0xBD, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFE, 0x90, 0x00,
+0x01, 0x12, 0x1F, 0x0F, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0xFE, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0xE4, 0xFC, 0x74, 0x20, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x93, 0x84, 0xEF,
+0xF0, 0xEE, 0xF9, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x02, 0x09, 0xE0, 0xC3, 0x13,
+0x90, 0xFD, 0x10, 0xF0, 0xEC, 0xC3, 0x99, 0x50, 0x43, 0xEC, 0x70, 0x04, 0x7D, 0x04, 0x80, 0x02,
+0xE4, 0xFD, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x07, 0xAF, 0x05, 0x31, 0xA4, 0x0D, 0x80, 0xF3, 0x0C,
+0x90, 0xFD, 0x10, 0xE0, 0x04, 0xF0, 0xEC, 0xB5, 0x01, 0xDA, 0xE4, 0xFD, 0xED, 0x75, 0xF0, 0x08,
+0xA4, 0xFF, 0x90, 0x93, 0x84, 0xE0, 0xFB, 0xC3, 0xEF, 0x9B, 0x74, 0x80, 0xF8, 0x65, 0xF0, 0x98,
+0x50, 0x07, 0xAF, 0x05, 0x31, 0xA4, 0x0D, 0x80, 0xE3, 0x0C, 0x80, 0xB8, 0x90, 0x00, 0x81, 0xE0,
+0x44, 0x80, 0xFD, 0x7F, 0x81, 0x12, 0x54, 0x1B, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x04, 0xF0, 0xD0,
+0xD0, 0x92, 0xAF, 0x22, 0x90, 0xFD, 0x58, 0xE0, 0x30, 0xE0, 0x08, 0x90, 0x01, 0xB8, 0xE0, 0x04,
+0xF0, 0x80, 0xF1, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0x90, 0xFD, 0x50, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE4,
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x51, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x02,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x52, 0xF0, 0xEF, 0x75, 0xF0, 0x08,
+0xA4, 0x24, 0x03, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x53, 0xF0, 0xEF,
+0x75, 0xF0, 0x08, 0xA4, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD,
+0x54, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0x90, 0xFD, 0x55, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x56, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x07, 0xF5,
+0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x57, 0xF0, 0xA3, 0x74, 0x01, 0xF0, 0x22,
+0x12, 0x1E, 0xF6, 0x90, 0xFE, 0x10, 0x60, 0x05, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xE0, 0x54, 0xFE,
+0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x88, 0x12, 0x43, 0xC8, 0x12,
+0x1E, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54,
+0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93,
+0x15, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x10, 0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x12,
+0x1E, 0xF6, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54,
+0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54, 0x80, 0xFF, 0x90, 0x93, 0x15,
+0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x01, 0xFE, 0x90,
+0x93, 0x18, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0,
+0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xFB,
+0x4E, 0xF0, 0xEF, 0x54, 0x10, 0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
+0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40,
+0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0x80, 0xFF, 0x90,
+0x93, 0x18, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20,
+0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF,
+0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x19, 0xE0,
+0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x10, 0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x04,
+0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF,
+0x54, 0x08, 0xFF, 0xE0, 0x54, 0xF7, 0x4F, 0xF0, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x20, 0xE0,
+0x07, 0xB1, 0xCC, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x88, 0x12, 0x43, 0xA8, 0x12, 0x1E,
+0xF6, 0x20, 0xE0, 0x02, 0x81, 0xE7, 0x90, 0x05, 0x54, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x25, 0xF0,
+0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x16, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F,
+0x90, 0x93, 0x16, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x17, 0xF0, 0x80, 0x48,
+0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03,
+0x90, 0x93, 0x16, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x93,
+0x16, 0x74, 0x2A, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12,
+0xEF, 0xC3, 0x94, 0x03, 0x90, 0x93, 0x17, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0,
+0x80, 0x06, 0x90, 0x93, 0x17, 0x74, 0x2A, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54,
+0x03, 0x30, 0xE0, 0x3D, 0x90, 0x93, 0x16, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x1E, 0xF0,
+0xE0, 0xC3, 0x13, 0xA3, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x20,
+0xF0, 0x90, 0x93, 0x16, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x21, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0xC3,
+0x13, 0x90, 0x93, 0x22, 0xF0, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A,
+0xAD, 0xE4, 0x90, 0x93, 0x11, 0xF0, 0x90, 0x93, 0x88, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12,
+0x1F, 0x0F, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x14, 0x12, 0x1E, 0xF6, 0x13, 0x13, 0x13,
+0x54, 0x1F, 0x30, 0xE0, 0x04, 0x7F, 0x01, 0x80, 0x02, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x93,
+0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x18, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07,
+0x30, 0xE0, 0x03, 0x75, 0x64, 0x04, 0x90, 0x05, 0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x11, 0xF0,
+0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x27,
+0x74, 0x01, 0xF0, 0x80, 0x2B, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x04, 0x08, 0x90, 0x93, 0x27, 0x74,
+0x04, 0xF0, 0x80, 0x1C, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x06, 0x08, 0x90, 0x93, 0x27, 0x74, 0x02,
+0xF0, 0x80, 0x0D, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x07, 0x06, 0x90, 0x93, 0x27, 0x74, 0x05, 0xF0,
+0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x80, 0x63, 0x90, 0x93, 0x88, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6,
+0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x90, 0x93, 0x84, 0x30, 0xE0, 0x09, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x03, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0xD1, 0xA1, 0x90, 0x00,
+0x40, 0x74, 0x20, 0xF0, 0x90, 0x93, 0x88, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F,
+0x13, 0x13, 0x13, 0x54, 0x1F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03,
+0x74, 0x01, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x84, 0xB1, 0x82, 0x90, 0x05, 0x22, 0xE4, 0xF0,
+0x90, 0x05, 0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x43, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF,
+0xF0, 0xE4, 0x90, 0x93, 0x26, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
+0x30, 0xE0, 0x09, 0x90, 0x93, 0x04, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x0C, 0x7F, 0x01, 0x12, 0x5E,
+0x46, 0x90, 0x93, 0x04, 0xE0, 0x54, 0xFD, 0xF0, 0x7F, 0x03, 0x12, 0x5E, 0x67, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0x7F, 0x70, 0x7E, 0x08, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0x54, 0xFC,
+0xFF, 0x90, 0x01, 0xE8, 0xF0, 0xEE, 0x44, 0xF0, 0xA3, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F,
+0x90, 0x01, 0xEC, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xED, 0xF0, 0x90, 0x00,
+0x01, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEE, 0xF0, 0x12, 0x1E, 0xF6, 0x90, 0x01, 0xEF, 0xF0, 0x90,
+0x01, 0xEB, 0x74, 0x40, 0xF0, 0xD1, 0x4C, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xEC, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xF0,
+0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01,
+0x00, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x4B, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0,
+0x90, 0x93, 0x3E, 0xE0, 0x60, 0x14, 0x12, 0x51, 0xBB, 0xBF, 0x01, 0x0B, 0x90, 0x93, 0x15, 0xE0,
+0xFF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x03, 0x12, 0x4F, 0xB8, 0x90, 0x93, 0x2D, 0xE0, 0x20, 0xE0,
+0x23, 0x90, 0x93, 0x48, 0xE0, 0x60, 0x1D, 0x7F, 0x01, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x5C, 0xE0,
+0x60, 0x12, 0x90, 0x93, 0xF0, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x7B, 0x01, 0x7A, 0x93,
+0x79, 0xF0, 0xB1, 0x82, 0x12, 0x54, 0x5C, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x94, 0x40,
+0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xEB, 0xE0, 0x54, 0xC0, 0x60, 0x43, 0xC3, 0x90, 0x94, 0x41, 0xE0,
+0x94, 0x88, 0x90, 0x94, 0x40, 0xE0, 0x94, 0x13, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x04,
+0xF0, 0x7F, 0x00, 0x22, 0x90, 0x94, 0x40, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14,
+0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x94, 0x41, 0xE0, 0x94, 0x64, 0x90, 0x94, 0x40, 0xE0,
+0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE2, 0xB8, 0x7F, 0x00, 0x22, 0x7F, 0x01,
+0x22, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFE, 0xF0, 0xA3, 0x74, 0x0B, 0xF0, 0xA3, 0x74, 0x08, 0xF0,
+0xE4, 0x90, 0x93, 0x26, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54,
+0xFB, 0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54,
+0x7F, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB,
+0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F,
+0xF0, 0xA3, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x93,
+0x28, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0,
+0x54, 0xDF, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x25, 0xF0, 0x90, 0x93, 0x1C, 0xE0, 0x54, 0xFE,
+0xF0, 0xE4, 0x90, 0x93, 0x23, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x29, 0xF0, 0xA3, 0xF0, 0x90, 0x93,
+0x1C, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xEF, 0xF0,
+0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54, 0xF7, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0xFE, 0xF0, 0xE0,
+0x54, 0xE1, 0xF0, 0xE4, 0x90, 0x93, 0x36, 0xF0, 0x22, 0x90, 0x93, 0x04, 0xE0, 0x54, 0xFE, 0xF0,
+0x54, 0xFB, 0xF0, 0x54, 0xFD, 0xF0, 0x54, 0xF7, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0x12,
+0x1F, 0xD5, 0x20, 0x08, 0x30, 0x70, 0x90, 0x93, 0x0B, 0x12, 0x1F, 0xD5, 0xC0, 0x08, 0x30, 0x70,
+0xE4, 0x90, 0x93, 0x11, 0xF0, 0xA3, 0xF0, 0x43, 0xE8, 0x04, 0x90, 0xFD, 0x68, 0x74, 0x02, 0xF0,
+0x90, 0x04, 0x26, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x07, 0x83, 0xE4, 0xF0, 0x90, 0x07, 0x78, 0x74,
+0x03, 0xF0, 0x90, 0x04, 0x64, 0xE4, 0xF0, 0x90, 0x00, 0x40, 0x74, 0x20, 0xF0, 0xD1, 0xA1, 0x90,
+0x93, 0x2C, 0x74, 0x01, 0xF0, 0x7D, 0x04, 0x7F, 0x02, 0x02, 0x3A, 0xAD, 0x90, 0x93, 0x84, 0x12,
+0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8, 0x7D, 0x01,
+0x7F, 0x24, 0x02, 0x73, 0x5D, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x1A, 0xE0,
+0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E, 0xF6,
+0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF,
+0xE0, 0x54, 0xF7, 0x4F, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x1B, 0xF0, 0x22,
+0x90, 0x93, 0x84, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x84, 0x12,
+0x43, 0xA8, 0x7D, 0x03, 0x7F, 0x26, 0x02, 0x73, 0x5D, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0xB2, 0xF0,
+0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0xB0, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93,
+0xB1, 0xF0, 0x22, 0x90, 0x93, 0xE4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xE8, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x00, 0x00, 0xE4, 0x7F, 0x1F, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0xE8, 0x12, 0x43, 0x90, 0xD3,
+0x12, 0x43, 0x73, 0x50, 0x41, 0x90, 0x93, 0xE8, 0x12, 0x43, 0x84, 0xA9, 0x07, 0x90, 0x93, 0xE4,
+0x12, 0x43, 0x84, 0xA8, 0x01, 0x12, 0x1F, 0xA3, 0xEF, 0x54, 0x01, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC,
+0x7B, 0x01, 0xFA, 0xF9, 0xF8, 0xC3, 0x12, 0x43, 0x73, 0x60, 0x1B, 0x90, 0x93, 0xE8, 0x12, 0x43,
+0x84, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, 0x93,
+0xE8, 0x12, 0x1F, 0xC9, 0x80, 0xAD, 0x90, 0x93, 0xE8, 0x02, 0x43, 0x84, 0x90, 0x93, 0xB6, 0x12,
+0x1F, 0xC9, 0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0xBA, 0x12, 0x43, 0x90, 0xC3, 0x12,
+0x43, 0x73, 0x90, 0x93, 0xB6, 0x60, 0x67, 0x12, 0x43, 0x84, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0xC2,
+0x12, 0x1F, 0xC9, 0x90, 0x93, 0xBA, 0x12, 0x43, 0x84, 0x11, 0x43, 0x90, 0x93, 0xC6, 0x12, 0x1F,
+0xC9, 0x90, 0x93, 0xBA, 0x12, 0x43, 0x84, 0x12, 0x43, 0x66, 0x90, 0x93, 0xC2, 0x12, 0x43, 0x90,
+0x12, 0x43, 0x4C, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0xC6, 0x12, 0x43,
+0x84, 0xA9, 0x07, 0x90, 0x93, 0xBE, 0x12, 0x43, 0x84, 0xA8, 0x01, 0x12, 0x1F, 0xB6, 0xD0, 0x03,
+0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0x59, 0x90, 0x93, 0xCA, 0x12, 0x1F, 0xC9, 0x90,
+0x93, 0xB6, 0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0xCA, 0x80, 0x0A, 0x12, 0x43,
+0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0xBE, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F,
+0xC9, 0xD0, 0x07, 0xD0, 0x06, 0x02, 0x34, 0x30, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x93, 0xF4, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xF8, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x00, 0x00, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x12, 0x54, 0x63, 0x12, 0x54, 0x5C,
+0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54,
+0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x4B, 0xE0, 0x60, 0x06, 0x90,
+0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x3E, 0xE0, 0x60, 0x34, 0xE4, 0x90, 0x93, 0x57, 0xF0,
+0xFF, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0xF4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF4, 0x12,
+0x43, 0x84, 0xEC, 0x54, 0xFD, 0xFC, 0x90, 0x93, 0xF4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF4, 0x12,
+0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90,
+0x93, 0x48, 0xE0, 0x60, 0x24, 0xE4, 0xFF, 0x12, 0x50, 0xEB, 0x90, 0x93, 0x5C, 0xE0, 0x60, 0x13,
+0x90, 0x93, 0xF8, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xF8,
+0x12, 0x95, 0x82, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x52, 0xE0, 0x60, 0x02, 0xE4,
+0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x48,
+0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x47, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02,
+0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46, 0xE0, 0x5F, 0xF0, 0x12, 0x54, 0x63, 0x90,
+0x94, 0x48, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
+0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05,
+0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4C, 0x90, 0x94,
+0x48, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33,
+0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x62, 0xE0, 0x5F, 0xF0, 0x12, 0x54, 0x63, 0x90, 0x94, 0x48,
+0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
+0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x60, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80,
+0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
+0x93, 0x84, 0x12, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x94, 0x38, 0xE0, 0x54,
+0xFE, 0x4F, 0xF0, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x44, 0xFE, 0x90, 0x93, 0x84, 0x12, 0x43, 0xA8,
+0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x94,
+0x39, 0xF0, 0x22, 0xE4, 0x7B, 0x01, 0x7A, 0x92, 0x79, 0x6B, 0x12, 0x73, 0x59, 0xEF, 0xB4, 0x02,
+0x14, 0x90, 0x94, 0x44, 0xE0, 0x64, 0x04, 0x60, 0x07, 0x43, 0x14, 0x01, 0xE0, 0x04, 0xF0, 0x22,
+0xE4, 0x90, 0x94, 0x44, 0xF0, 0x22, 0xAD, 0x07, 0x90, 0x93, 0xFC, 0xE0, 0x54, 0xF0, 0x44, 0x0C,
+0xF0, 0x54, 0x0F, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0xFE, 0xF0, 0x90, 0xFD, 0x63, 0xE0,
+0x90, 0x93, 0xFF, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x94, 0x00, 0xF0, 0x90, 0xFD, 0x65, 0xE0,
+0x90, 0x94, 0x01, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x94, 0x02, 0xF0, 0x90, 0xFD, 0x67, 0xE0,
+0x90, 0x94, 0x03, 0xF0, 0xED, 0xB4, 0x02, 0x0B, 0x90, 0x93, 0xFC, 0xE0, 0x54, 0x0F, 0x44, 0x20,
+0xF0, 0x80, 0x3C, 0xED, 0xB4, 0x04, 0x0B, 0x90, 0x93, 0xFC, 0xE0, 0x54, 0x0F, 0x44, 0x60, 0xF0,
+0x80, 0x2D, 0xED, 0xF4, 0x70, 0x29, 0x90, 0x93, 0xFC, 0xE0, 0x54, 0x0F, 0x44, 0x60, 0xF0, 0x90,
+0x93, 0x2C, 0xE0, 0x60, 0x08, 0x90, 0x93, 0xFE, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x93,
+0xFE, 0xF0, 0xE4, 0x90, 0x93, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7B,
+0x01, 0x7A, 0x93, 0x79, 0xFE, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0xFC, 0x02,
+0x55, 0x2C, 0xAD, 0x07, 0x90, 0x93, 0x6D, 0xE0, 0x54, 0xF0, 0x44, 0x0E, 0xF0, 0x54, 0x0F, 0xF0,
+0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x70, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93, 0x71, 0xF0,
+0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0x72, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0x73, 0xF0,
+0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93, 0x74, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0x75, 0xF0,
+0xED, 0xB4, 0x01, 0x11, 0x90, 0x93, 0x6D, 0xE0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x6F,
+0x74, 0x01, 0xF0, 0x80, 0x13, 0xED, 0xB4, 0x02, 0x0F, 0x90, 0x93, 0x6D, 0xE0, 0x54, 0x0F, 0x44,
+0x70, 0xF0, 0x90, 0x93, 0x6F, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x6D, 0xE0, 0xFF, 0xC4, 0x54, 0x0F,
+0x60, 0x13, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6F, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0x7A, 0x93,
+0x79, 0x6D, 0x12, 0x55, 0x2C, 0x22, 0x90, 0x93, 0x48, 0xE0, 0x60, 0x27, 0x90, 0x93, 0x4B, 0xE0,
+0x70, 0x21, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x07, 0x78, 0x74,
+0x03, 0xF0, 0x22, 0x90, 0x93, 0x45, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74, 0x0D, 0xF0, 0x22,
+0x74, 0x09, 0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x02,
+0xA1, 0xFC, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x01, 0x70, 0x39, 0x90, 0x06, 0x92, 0xE0, 0x20, 0xE2,
+0x06, 0x90, 0x94, 0x45, 0xE0, 0x60, 0x21, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x29,
+0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x45, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFF, 0x90, 0x93, 0x29,
+0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02, 0xA1, 0xE7, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x90, 0x93, 0x27,
+0x04, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x04, 0x70, 0x3A, 0x90, 0x06, 0x92, 0xE0, 0x20,
+0xE2, 0x06, 0x90, 0x94, 0x45, 0xE0, 0x60, 0x21, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x93,
+0x29, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x45, 0xF0, 0x90, 0x93, 0x20, 0xE0, 0xFF, 0x90, 0x93,
+0x29, 0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02, 0xA1, 0xE7, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x90, 0x93,
+0x27, 0x74, 0x04, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x06, 0x60, 0x02, 0xA1, 0xAB, 0x90,
+0x93, 0x2A, 0xE0, 0xB4, 0x04, 0x0F, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x27,
+0x30, 0xE0, 0x4E, 0xA1, 0xF9, 0x90, 0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x45,
+0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0,
+0x02, 0xA1, 0xBA, 0x90, 0x93, 0x2A, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0x2F, 0xFF, 0xE4, 0x33,
+0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x21, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E,
+0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x90, 0x93, 0x27, 0x40, 0x02, 0xA1,
+0xF9, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4E, 0x27,
+0x90, 0x93, 0x2A, 0xE0, 0x04, 0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x2A, 0xE0, 0xFF,
+0x90, 0x93, 0x29, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12, 0x1F, 0x3C,
+0x90, 0x93, 0x21, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE, 0x64, 0x80,
+0x94, 0x80, 0x40, 0x58, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64,
+0x07, 0x70, 0x49, 0x90, 0x93, 0x2A, 0xE0, 0xB4, 0x04, 0x05, 0x90, 0x93, 0x27, 0x80, 0x3A, 0x90,
+0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0C, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3,
+0xF0, 0x90, 0x93, 0x27, 0x80, 0x23, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4E,
+0x27, 0x90, 0x93, 0x2A, 0xE0, 0x04, 0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F,
+0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x64, 0x01,
+0x70, 0x3C, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x07, 0x90, 0x07,
+0x78, 0x74, 0x0D, 0xF0, 0x22, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xE0,
+0x13, 0x13, 0x54, 0x3F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x24, 0x80, 0x0E, 0x90, 0x93, 0x18, 0xE0,
+0xC3, 0x13, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x02, 0x80, 0x14, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93,
+0x19, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x04, 0x74, 0x03,
+0xF0, 0x22, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x5E, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x20,
+0xE0, 0x02, 0xC1, 0xF8, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x2A,
+0xE4, 0xF5, 0x48, 0x90, 0x93, 0x21, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01,
+0x12, 0x39, 0x77, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x01, 0xF0, 0xE4,
+0x90, 0x93, 0x29, 0xF0, 0x90, 0x93, 0x27, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x5E,
+0xE0, 0xFF, 0x90, 0x93, 0x16, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E,
+0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0x74, 0x01, 0xF0, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0,
+0x90, 0x93, 0x26, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0x60, 0x08, 0x90, 0x05, 0x22, 0x74,
+0x6F, 0xF0, 0x80, 0x1F, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54,
+0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03,
+0x12, 0x51, 0x48, 0xE4, 0x90, 0x94, 0x45, 0xF0, 0x22, 0x00, 0xAA, 0x13
+};
+
+
+u8 Rtl8723UFwUMCBCutImgArrayWithoutBT[Rtl8723UUMCBCutImgArrayWithoutBTLength] = {
+0x02, 0x23, 0x02, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x02, 0x01, 0x10, 0x06, 0xE0, 0x4A, 0x01, 0x00,
+0x03, 0x21, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x4A, 0x93, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x59, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x61, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x61, 0xDA, 0x00, 0x00,
+0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03, 0x00, 0x04, 0x06, 0x05, 0x04, 0x02,
+0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09, 0x08, 0x06, 0x00, 0x08, 0x0A, 0x09,
+0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x00, 0x00, 0x08,
+0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10, 0x00, 0x18, 0x22, 0x21, 0x20, 0x18,
+0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21, 0x20, 0x08, 0x00, 0x20, 0x22, 0x21,
+0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20, 0x22, 0x20, 0x18, 0x08, 0x00, 0x20,
+0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00, 0x00, 0x30, 0x31, 0x2F, 0x10, 0x10,
+0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28, 0x10, 0x00, 0x00, 0x30, 0x31, 0x20,
+0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04,
+0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04, 0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05,
+0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05, 0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E,
+0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13, 0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E,
+0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A,
+0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F, 0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04,
+0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60,
+0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78, 0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40,
+0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40, 0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8,
+0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x0C,
+0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x6C, 0x00, 0x28,
+0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8, 0x00, 0xF0, 0x01, 0x18, 0x00, 0x64,
+0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58, 0x03, 0x20, 0x03, 0xE8, 0x02, 0x02,
+0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07, 0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E,
+0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
+0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x05, 0x06,
+0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18, 0x10, 0x18, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xBB, 0x01, 0x0F, 0xF8, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x28,
+0xF0, 0x22, 0x50, 0x09, 0xC5, 0x82, 0x29, 0xF8, 0xE5, 0x82, 0x26, 0xF6, 0x22, 0xBB, 0xFE, 0x09,
+0xC5, 0x82, 0x29, 0xF8, 0xE2, 0x25, 0x82, 0xF2, 0x22, 0xF8, 0xEA, 0x25, 0x83, 0xF5, 0x83, 0xE9,
+0x93, 0x28, 0x22, 0xBB, 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22,
+0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8, 0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83,
+0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22, 0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE,
+0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0,
+0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A,
+0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7,
+0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3, 0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83,
+0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01, 0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82,
+0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82,
+0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22, 0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0,
+0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A, 0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22,
+0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7,
+0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB, 0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8,
+0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5,
+0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB,
+0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x5B, 0xFF, 0xEE,
+0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED,
+0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, 0xCF, 0xF4, 0xCF, 0xCE, 0xF4, 0xCE, 0xCD, 0xF4, 0xCD, 0xCC,
+0xF4, 0xCC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8,
+0x9C, 0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22,
+0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5,
+0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9,
+0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82, 0x15, 0x82, 0x70,
+0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0,
+0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3,
+0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68,
+0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12,
+0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83,
+0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60, 0xE9, 0xA3, 0xA3,
+0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0x90, 0x93, 0x07, 0xF0, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x44, 0xDD,
+0x90, 0x93, 0x51, 0xE0, 0x60, 0x11, 0xE4, 0xF0, 0x53, 0x66, 0xFD, 0xE5, 0x66, 0x54, 0x07, 0x60,
+0x03, 0x02, 0x44, 0xDD, 0x02, 0x44, 0xDA, 0x90, 0x93, 0x38, 0xE0, 0x04, 0xF0, 0x53, 0x66, 0xEF,
+0x90, 0x93, 0x4F, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
+0x30, 0xE0, 0x3A, 0x90, 0x93, 0x4F, 0xE0, 0xFF, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0x0F, 0xB5, 0x07,
+0x0A, 0x90, 0x93, 0x30, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x80, 0x22, 0x90, 0x93, 0x2D, 0xE0, 0xC4,
+0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93, 0x4F, 0xE0, 0xB5,
+0x07, 0x0B, 0xE4, 0xB5, 0x06, 0x07, 0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x2D,
+0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x06, 0x90, 0x93, 0x07, 0x74, 0x5A, 0xF0,
+0x90, 0x93, 0x07, 0xE0, 0xFF, 0x90, 0x93, 0x3F, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93,
+0x38, 0xE0, 0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x40, 0x0D, 0xE5, 0x62, 0xB4,
+0x01, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12, 0x51, 0x9C, 0x22, 0xEF, 0x60,
+0x0F, 0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x22,
+0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x22, 0x02,
+0x55, 0xE5, 0x22, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0xE4, 0x90, 0x93, 0x01, 0xF0, 0xA3, 0x12,
+0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x46, 0xAB, 0xE5, 0x62, 0x64,
+0x01, 0x60, 0x03, 0x02, 0x46, 0xAB, 0xE5, 0x65, 0x14, 0x60, 0x29, 0x24, 0xFD, 0x60, 0x25, 0x24,
+0x02, 0x24, 0xFB, 0x50, 0x02, 0x80, 0x23, 0x90, 0x93, 0x37, 0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04,
+0xA3, 0xE0, 0x60, 0x16, 0x90, 0x93, 0x37, 0xE0, 0x70, 0x0A, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x93,
+0x37, 0xF0, 0x80, 0x00, 0x90, 0x93, 0x01, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0,
+0x16, 0xA3, 0xE0, 0xB4, 0x06, 0x05, 0xE4, 0x90, 0x93, 0x01, 0xF0, 0xE4, 0xFF, 0x12, 0x5E, 0x91,
+0xEF, 0x70, 0x04, 0x90, 0x93, 0x01, 0xF0, 0x90, 0x93, 0x01, 0xE0, 0x70, 0x03, 0x02, 0x46, 0x9B,
+0x43, 0x66, 0x10, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x44,
+0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0xC3, 0x9F, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90,
+0x93, 0x2E, 0x80, 0x2D, 0x90, 0x93, 0x2D, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F,
+0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93, 0x4F, 0xE0, 0xC3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80,
+0x98, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x31, 0x80, 0x06, 0xE4, 0xF5, 0x48, 0x90, 0x93,
+0x2E, 0xE0, 0x80, 0x2D, 0x90, 0x93, 0x4F, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4,
+0xF5, 0x48, 0x90, 0x93, 0x4F, 0xE0, 0xFF, 0x90, 0x93, 0x46, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5,
+0x48, 0x90, 0x93, 0x4F, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x46, 0xE0, 0x04,
+0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57,
+0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04,
+0x12, 0x48, 0xF4, 0xE5, 0x63, 0x64, 0x0C, 0x60, 0x6F, 0x90, 0x93, 0x2B, 0xE0, 0xFF, 0x90, 0x93,
+0x4F, 0xE0, 0xD3, 0x9F, 0x40, 0x08, 0x90, 0x93, 0x2C, 0xE0, 0x04, 0xF0, 0x80, 0x05, 0xE4, 0x90,
+0x93, 0x2C, 0xF0, 0x90, 0x93, 0x4F, 0xE0, 0x90, 0x93, 0x2B, 0xF0, 0xA3, 0xE0, 0xC3, 0x94, 0x05,
+0x40, 0x46, 0xE4, 0xF0, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x4D, 0xE0, 0x70, 0x03,
+0x12, 0x4F, 0x63, 0x90, 0x93, 0x50, 0xE0, 0x64, 0x02, 0x70, 0x21, 0x12, 0x48, 0xF0, 0xE4, 0xF5,
+0x48, 0x90, 0x93, 0x3C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39,
+0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x4C, 0x80, 0x09, 0x43, 0x66, 0x01, 0x12,
+0x51, 0x2B, 0x90, 0x93, 0x48, 0x74, 0x01, 0xF0, 0x12, 0x51, 0x4C, 0x90, 0x93, 0x98, 0xE0, 0x30,
+0xE0, 0x09, 0x12, 0x67, 0x4A, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x07,
+0xF0, 0xA3, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x47, 0xA2,
+0xE5, 0x62, 0x64, 0x01, 0x60, 0x03, 0x02, 0x47, 0xA2, 0x90, 0x93, 0x07, 0x04, 0xF0, 0xE4, 0x90,
+0x93, 0x37, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x16, 0xA3, 0xE0, 0xB4, 0x06, 0x05, 0xE4,
+0x90, 0x93, 0x07, 0xF0, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x70, 0x04, 0x90, 0x93, 0x07, 0xF0,
+0x90, 0x93, 0x07, 0xE0, 0x70, 0x03, 0x02, 0x47, 0xA2, 0x43, 0x66, 0x10, 0x90, 0x93, 0x2D, 0xE0,
+0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x32, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x4F,
+0xE0, 0xD3, 0x9F, 0x50, 0x09, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x2E, 0xE0, 0x80, 0x4A, 0xE4, 0xF5,
+0x48, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0xC3, 0x9F, 0x75, 0xF0,
+0x03, 0xA4, 0xFF, 0x90, 0x93, 0x2E, 0xE0, 0x04, 0x2F, 0x80, 0x2D, 0x90, 0x93, 0x4F, 0xE0, 0x64,
+0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x4F, 0xE0, 0xFF, 0x90, 0x93,
+0x46, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x4F, 0xE0, 0x14, 0x75, 0xF0, 0x03,
+0xA4, 0xFF, 0x90, 0x93, 0x46, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E,
+0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94,
+0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x48, 0xF4, 0x12, 0x51, 0x4C, 0x90, 0x05, 0x22,
+0xE4, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x09, 0x12, 0x67, 0x4A, 0x90, 0x05, 0x22, 0x74,
+0xFF, 0xF0, 0x22, 0xE4, 0xF5, 0x66, 0xF5, 0x65, 0x75, 0x64, 0x0C, 0x75, 0x63, 0x0C, 0x90, 0x93,
+0x50, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x90, 0x93, 0x49, 0xF0, 0x90, 0x93, 0x4E, 0x04, 0xF0, 0x90,
+0x93, 0x37, 0xF0, 0xE4, 0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x39, 0xF0, 0x90, 0x93, 0x46, 0x74,
+0x05, 0xF0, 0xE4, 0x90, 0x93, 0x38, 0xF0, 0x90, 0x93, 0x44, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90,
+0x93, 0x3F, 0xF0, 0x90, 0x93, 0x42, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x3C, 0x74, 0x14, 0xF0, 0x90,
+0x93, 0x47, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x3A, 0xF0, 0x90, 0x93, 0x33, 0xF0, 0x90, 0x93,
+0x71, 0xF0, 0x90, 0x93, 0x43, 0xF0, 0x90, 0x93, 0x53, 0xF0, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x93,
+0x34, 0xF0, 0x90, 0x93, 0x4D, 0xF0, 0x90, 0x93, 0x3E, 0xF0, 0x90, 0x93, 0x3B, 0xF0, 0x90, 0x93,
+0x48, 0xF0, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x93, 0x3D, 0xF0, 0x90, 0x93, 0x52, 0xF0, 0x90, 0x93,
+0x40, 0xF0, 0x90, 0x93, 0x70, 0xE0, 0xB4, 0x02, 0x05, 0x90, 0x00, 0x93, 0xE4, 0xF0, 0x90, 0x93,
+0x2D, 0xE0, 0x54, 0x7F, 0xF0, 0xE0, 0x54, 0xF0, 0xF0, 0xE0, 0x54, 0x8F, 0xF0, 0xE4, 0xA3, 0xF0,
+0xA3, 0xF0, 0x90, 0x93, 0x31, 0xF0, 0x90, 0x93, 0x30, 0xF0, 0x22, 0x8E, 0x69, 0x8F, 0x6A, 0xAD,
+0x6A, 0xAC, 0x69, 0xAF, 0x68, 0x12, 0x44, 0xDE, 0xAF, 0x6A, 0xAE, 0x69, 0x90, 0x04, 0x80, 0xE0,
+0x54, 0x0F, 0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0,
+0x44, 0x01, 0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xFB,
+0xF0, 0xAC, 0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0xFA,
+0xF0, 0x74, 0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F, 0xF0, 0xAC,
+0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F, 0xF0, 0x90,
+0x04, 0x53, 0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0, 0x90, 0x04,
+0x50, 0x74, 0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54,
+0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED, 0xF0, 0x22,
+0x7D, 0x01, 0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x6C, 0x8D, 0x6D, 0xE5,
+0x6C, 0x54, 0x0F, 0xFF, 0xE5, 0x63, 0x54, 0x0F, 0x6F, 0x60, 0x72, 0xE5, 0x6C, 0x30, 0xE2, 0x30,
+0xE5, 0x63, 0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x51, 0x69, 0xE5, 0x63, 0x30, 0xE3, 0x10, 0xE5,
+0x6C, 0x20, 0xE3, 0x0B, 0x12, 0x4D, 0x9D, 0xEF, 0x60, 0x53, 0x12, 0x51, 0x05, 0x80, 0x4E, 0xE5,
+0x63, 0x20, 0xE3, 0x49, 0xE5, 0x6C, 0x30, 0xE3, 0x44, 0xAF, 0x6D, 0x12, 0x50, 0x8A, 0x80, 0x3D,
+0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x6C, 0x20, 0xE3, 0x09, 0x12, 0x4D, 0x9D,
+0xEF, 0x60, 0x2A, 0x12, 0x51, 0x05, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x04, 0x0E, 0xE5, 0x6C,
+0x20, 0xE2, 0x09, 0x12, 0x4B, 0x16, 0xEF, 0x60, 0x14, 0x12, 0x50, 0xB3, 0xE5, 0x63, 0x54, 0x0F,
+0xFF, 0xBF, 0x02, 0x09, 0x12, 0x4C, 0x72, 0xEF, 0x60, 0x03, 0x12, 0x51, 0xB0, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0xE4, 0x90, 0x93, 0x01, 0xF0, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x93, 0x01, 0xF0, 0xE0,
+0x54, 0xC0, 0x70, 0x11, 0x90, 0x93, 0x48, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0x53, 0x66, 0xFD,
+0x12, 0x51, 0x9C, 0x80, 0x0F, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x4D, 0xE0, 0x70,
+0x03, 0x12, 0x4F, 0x63, 0x90, 0x93, 0x01, 0xE0, 0x30, 0xE6, 0x15, 0x43, 0x66, 0x01, 0x90, 0x93,
+0x50, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x51, 0x2B, 0x80, 0x0E, 0x12, 0x4F, 0x1D, 0x80, 0x09,
+0x90, 0x93, 0x48, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0xE4, 0x90, 0x93, 0x48, 0xF0, 0x90, 0x93,
+0x01, 0xE0, 0x30, 0xE7, 0x23, 0x43, 0x66, 0x02, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x42, 0xE0, 0xF5,
+0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05,
+0xF0, 0x90, 0x93, 0x51, 0x74, 0x01, 0xF0, 0x22, 0x53, 0x66, 0xFD, 0x22, 0xEF, 0x64, 0x01, 0x70,
+0x48, 0x7D, 0x78, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x22, 0x90,
+0x01, 0x36, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12,
+0x3A, 0x3F, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x48, 0xF0,
+0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x67, 0x4A, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F,
+0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36, 0x74, 0x7B, 0xF0, 0xA3,
+0x74, 0x02, 0xF0, 0x7D, 0x7B, 0xFF, 0x12, 0x3A, 0x93, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93,
+0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x06,
+0x0A, 0xE0, 0x44, 0x07, 0xF0, 0x12, 0x4E, 0x3E, 0xE5, 0x62, 0x20, 0xE0, 0x05, 0xE4, 0x90, 0x93,
+0x39, 0xF0, 0x22, 0x02, 0x4A, 0xD1, 0x02, 0x52, 0xA5, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3,
+0x40, 0x03, 0xF6, 0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54,
+0x07, 0x24, 0x0C, 0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4,
+0x56, 0x80, 0x01, 0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40,
+0x80, 0x90, 0x4F, 0xE3, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5,
+0x09, 0x54, 0x1F, 0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60,
+0xA8, 0x40, 0xB8, 0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5,
+0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA,
+0xDF, 0xE9, 0xDE, 0xE7, 0x80, 0xBE, 0x12, 0x51, 0x83, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01,
+0xB9, 0x74, 0x01, 0xF0, 0x80, 0x61, 0xE5, 0x66, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74,
+0x02, 0xF0, 0x80, 0x53, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x08, 0x90, 0x01, 0xB9,
+0x74, 0x04, 0xF0, 0x80, 0x42, 0xE5, 0x66, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0,
+0x80, 0x35, 0xE5, 0x66, 0x30, 0xE4, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x28, 0x90,
+0x93, 0x39, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x1A, 0x90, 0x93, 0x43,
+0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x80, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0,
+0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F, 0x00, 0x22,
+0xE5, 0x62, 0x64, 0x01, 0x70, 0x6B, 0xE5, 0x65, 0x60, 0x67, 0xE5, 0x65, 0x64, 0x02, 0x60, 0x06,
+0xE5, 0x65, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x93, 0x37, 0xF0, 0x90, 0x06,
+0xAA, 0xE0, 0x90, 0x93, 0x4E, 0xF0, 0x90, 0x93, 0x37, 0xE0, 0x70, 0x07, 0x90, 0x93, 0x4E, 0xE0,
+0xFF, 0x80, 0x05, 0x90, 0x93, 0x37, 0xE0, 0xFF, 0x90, 0x93, 0x37, 0xEF, 0xF0, 0x90, 0x93, 0x39,
+0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x38, 0xF0, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x05,
+0x58, 0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x53,
+0x66, 0xFD, 0x53, 0x66, 0xEF, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x03, 0x12, 0x49,
+0x82, 0x22, 0x90, 0x93, 0x70, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x91, 0x80, 0x0C, 0x90, 0x93, 0x70,
+0xE0, 0x70, 0x04, 0x7D, 0xD4, 0x80, 0x02, 0x7D, 0x40, 0x7F, 0x93, 0x12, 0x53, 0xB6, 0x90, 0x00,
+0x29, 0xE0, 0x54, 0x3F, 0xFD, 0x7F, 0x29, 0x12, 0x53, 0xB6, 0x90, 0x00, 0x28, 0xE0, 0x54, 0xFC,
+0xFD, 0x7F, 0x28, 0x12, 0x53, 0xB6, 0x90, 0x00, 0x08, 0xE0, 0x44, 0x10, 0xFD, 0x7F, 0x08, 0x12,
+0x53, 0xB6, 0x7F, 0x01, 0x12, 0x4D, 0x45, 0x90, 0x00, 0x00, 0xE0, 0x44, 0x20, 0xFD, 0xE4, 0xFF,
+0x12, 0x53, 0xB6, 0x90, 0x00, 0x20, 0xE0, 0x54, 0xFE, 0xFD, 0x7F, 0x20, 0x12, 0x53, 0xB6, 0x90,
+0x00, 0x90, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x53, 0xB6, 0x7F, 0x14, 0x7E, 0x00, 0x02,
+0x3B, 0x09, 0x12, 0x51, 0x83, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0,
+0x80, 0x54, 0xE5, 0x18, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x48, 0xE5, 0x64,
+0x54, 0x0F, 0xD3, 0x94, 0x01, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x37, 0x90,
+0x02, 0x87, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x29, 0x90, 0x02, 0x86,
+0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x1A, 0x90, 0x93, 0x3A, 0xE0,
+0x70, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90,
+0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x02, 0xF0, 0x7F, 0x00, 0x22, 0x90,
+0x93, 0x21, 0x12, 0x43, 0xC8, 0x12, 0x51, 0xC3, 0x90, 0x93, 0x21, 0x12, 0x43, 0xA8, 0x12, 0x1E,
+0xF6, 0xF5, 0x65, 0x14, 0x60, 0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24, 0x03, 0x70, 0x44,
+0x7F, 0x01, 0x80, 0x3D, 0x90, 0x93, 0x21, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
+0xFD, 0xE4, 0xFF, 0x12, 0x4F, 0xA5, 0x80, 0x29, 0x90, 0x93, 0x21, 0x12, 0x43, 0xA8, 0x90, 0x00,
+0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x01, 0x12, 0x4F, 0xA5, 0x1F, 0x80, 0x14, 0x90, 0x93, 0x21,
+0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x02, 0x12, 0x4F, 0xA5, 0xE4,
+0xFF, 0x12, 0x4A, 0x0C, 0x22, 0x8F, 0x70, 0xE4, 0x90, 0x93, 0xE3, 0xF0, 0xA3, 0xF0, 0x90, 0x01,
+0x09, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0xEF, 0x65, 0x70, 0x60, 0x3E, 0xC3, 0x90,
+0x93, 0xE4, 0xE0, 0x94, 0x88, 0x90, 0x93, 0xE3, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6,
+0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0xE3, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F,
+0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0xE4, 0xE0, 0x94, 0x32, 0x90, 0x93, 0xE3,
+0xE0, 0x94, 0x00, 0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE0, 0xB2, 0x22, 0x12, 0x51, 0x83,
+0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x39, 0x90, 0x93, 0x4C,
+0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x2B, 0x90, 0x93, 0x49, 0xE0, 0x60,
+0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x1D, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x04,
+0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90,
+0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x7F, 0x00, 0x22, 0x90,
+0x00, 0x20, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x20, 0x12, 0x53, 0xB6, 0x7F, 0xF4, 0x7E, 0x01, 0x12,
+0x3B, 0x09, 0x90, 0x00, 0x00, 0xE0, 0x54, 0xDF, 0xFD, 0xE4, 0xFF, 0x12, 0x53, 0xB6, 0x90, 0x00,
+0x28, 0xE0, 0x44, 0x03, 0xFD, 0x7F, 0x28, 0x12, 0x53, 0xB6, 0x90, 0x00, 0x08, 0xE0, 0x54, 0xEF,
+0xFD, 0x7F, 0x08, 0x12, 0x53, 0xB6, 0xE4, 0xFF, 0x12, 0x4D, 0x45, 0x7F, 0x64, 0x7E, 0x00, 0x12,
+0x3B, 0x09, 0x90, 0x00, 0x29, 0xE0, 0x44, 0xC0, 0xFD, 0x7F, 0x29, 0x02, 0x53, 0xB6, 0xE4, 0xFF,
+0x90, 0x00, 0x6A, 0xE0, 0x30, 0xE2, 0x22, 0xE0, 0x30, 0xE0, 0x20, 0xE0, 0x30, 0xE1, 0x0D, 0x90,
+0x00, 0x60, 0xE0, 0x7F, 0x02, 0x30, 0xE3, 0x13, 0x7F, 0x03, 0x80, 0x0F, 0x90, 0x00, 0x60, 0xE0,
+0x7F, 0x03, 0x30, 0xE3, 0x06, 0x7F, 0x02, 0x80, 0x02, 0x7F, 0x03, 0xEF, 0xFD, 0xD3, 0x90, 0x93,
+0x45, 0xE0, 0x9D, 0x90, 0x93, 0x44, 0xE0, 0x94, 0x00, 0x50, 0x05, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0,
+0x90, 0x93, 0x44, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3,
+0xC0, 0xD0, 0x8F, 0x68, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x6B,
+0x74, 0xFF, 0xF0, 0x12, 0x8A, 0x65, 0xBF, 0x01, 0x0D, 0x90, 0x93, 0x69, 0xE0, 0xFF, 0x7D, 0x01,
+0x12, 0x58, 0x95, 0x12, 0x48, 0x5B, 0x90, 0x05, 0x22, 0xE5, 0x6B, 0xF0, 0x80, 0x0D, 0x90, 0x93,
+0x69, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x95, 0x12, 0x48, 0x5B, 0x90, 0x04, 0x1F, 0x74, 0x20,
+0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80, 0x3D, 0x90,
+0x93, 0x50, 0xE0, 0x60, 0x27, 0x12, 0x48, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3C, 0xE0, 0xF5,
+0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05,
+0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x22, 0xE5, 0x63, 0x54, 0x0F,
+0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x48, 0xF4, 0x22, 0x90, 0x01, 0x5F,
+0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3C, 0xE0, 0xF5,
+0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05,
+0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x49, 0x14, 0xF0, 0xE5, 0x63, 0x54, 0x0F,
+0xC3, 0x94, 0x0C, 0x50, 0x0D, 0x12, 0x48, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x03, 0x12,
+0x67, 0x4A, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x4D, 0x74, 0x01, 0xF0,
+0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0xD3, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xD3,
+0x12, 0x43, 0x84, 0xEC, 0x44, 0x02, 0xFC, 0x90, 0x93, 0xD3, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xD3,
+0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30,
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xEF, 0x14, 0x60, 0x09, 0x14, 0x60, 0x16, 0x24, 0x02, 0x70, 0x32,
+0x80, 0x0A, 0x90, 0x93, 0x4E, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x37, 0xF0, 0xE4, 0x90, 0x93, 0x53,
+0xF0, 0x22, 0xED, 0x70, 0x0A, 0x90, 0x93, 0x47, 0xE0, 0x90, 0x93, 0x4E, 0xF0, 0x80, 0x05, 0x90,
+0x93, 0x4E, 0xED, 0xF0, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x93, 0x37, 0xF0, 0x90, 0x93, 0x53, 0x74,
+0x01, 0xF0, 0x22, 0x48, 0x93, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x93,
+0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x93, 0x5E, 0x00, 0x41, 0x93, 0x6D,
+0x00, 0x41, 0x93, 0xE9, 0x00, 0x41, 0x93, 0x2B, 0x00, 0x41, 0x93, 0x2C, 0x00, 0x41, 0x92, 0x69,
+0x00, 0x41, 0x92, 0x6A, 0x00, 0x41, 0x92, 0x68, 0x00, 0x41, 0x93, 0xDF, 0x00, 0x00, 0x90, 0x01,
+0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0x90, 0x93,
+0x35, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x01, 0x04, 0xE0, 0x54, 0x0F, 0xFF, 0x74, 0x40, 0x7E, 0x00,
+0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0x90, 0x93, 0x4B, 0xF0,
+0xEE, 0x90, 0x93, 0x4A, 0xF0, 0x22, 0xEF, 0x70, 0x0B, 0x90, 0x93, 0x6F, 0xE0, 0x90, 0x93, 0xD7,
+0x60, 0x0B, 0x80, 0x12, 0x90, 0x93, 0x6F, 0xE0, 0x90, 0x93, 0xD7, 0x60, 0x09, 0x12, 0x1F, 0xD5,
+0x00, 0x00, 0x02, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x01, 0x10, 0x7B, 0x01, 0x7A,
+0x93, 0x79, 0xD7, 0x7F, 0x60, 0x7E, 0x08, 0x02, 0x56, 0x9D, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF,
+0xF0, 0xEF, 0x60, 0x0A, 0xE5, 0x62, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x4E, 0x8B, 0x53, 0x63,
+0xF0, 0x43, 0x63, 0x0C, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x07, 0x90, 0x05, 0x27, 0xE0, 0x54,
+0x7F, 0xF0, 0x22, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12,
+0x8A, 0x65, 0xEF, 0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12,
+0x3A, 0x93, 0x12, 0x54, 0x14, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0xE5, 0x64, 0x30, 0xE6,
+0x12, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0x90, 0x01, 0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80, 0xF0,
+0x53, 0x64, 0xBF, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x0A, 0x90, 0x00, 0x83, 0xE0, 0x30, 0xE0,
+0x03, 0x75, 0x64, 0x02, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01,
+0x05, 0x7F, 0x01, 0x12, 0x4E, 0x8B, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x90, 0x93, 0x98, 0xE0,
+0x30, 0xE0, 0x07, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0x3D, 0xE0, 0x70,
+0x1A, 0x90, 0x04, 0x1D, 0xE0, 0x70, 0x14, 0x90, 0x93, 0x68, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x58,
+0x95, 0x8E, 0x6E, 0x8F, 0x6F, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0x3E, 0xE0,
+0x60, 0x16, 0x90, 0x93, 0x41, 0xE0, 0x70, 0x10, 0x90, 0x93, 0x3B, 0xE0, 0x90, 0x07, 0x78, 0x60,
+0x04, 0x74, 0x0D, 0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93, 0xEA, 0xEF, 0xF0, 0x12, 0x56,
+0x14, 0x90, 0x93, 0xEA, 0xE0, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x53, 0x63, 0xF0, 0x43,
+0x63, 0x04, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B,
+0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, 0x90, 0x93, 0x98, 0xE0,
+0x30, 0xE0, 0x05, 0xAF, 0x64, 0x02, 0x5F, 0x72, 0x7D, 0x01, 0xAF, 0x64, 0x12, 0x48, 0xF4, 0x22,
+0x53, 0x63, 0xF0, 0x43, 0x63, 0x01, 0x12, 0x4C, 0x02, 0x12, 0x4D, 0xEF, 0x53, 0x63, 0xF0, 0x43,
+0x63, 0x02, 0x22, 0xE4, 0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x38, 0xF0, 0xF5, 0x66, 0x22, 0x90,
+0x02, 0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12,
+0x43, 0xF7, 0x51, 0xFA, 0x00, 0x40, 0x52, 0x22, 0x00, 0x80, 0x52, 0x4D, 0x01, 0x00, 0x52, 0x61,
+0x02, 0x00, 0x52, 0x79, 0x04, 0x00, 0x00, 0x00, 0x52, 0x96, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE,
+0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06,
+0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
+0x80, 0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF,
+0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78,
+0x07, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04,
+0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80,
+0x35, 0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF,
+0x2D, 0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE,
+0xFF, 0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D,
+0x00, 0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x1F,
+0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x0C, 0xF0, 0xA3, 0xF0, 0x12, 0x60, 0xFB, 0x75,
+0x8E, 0x02, 0x91, 0xE6, 0x12, 0x60, 0x52, 0x90, 0x93, 0x70, 0xEF, 0xF0, 0x12, 0x60, 0x65, 0x90,
+0x93, 0x72, 0xEF, 0xF0, 0x12, 0x60, 0x71, 0x90, 0x93, 0x54, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4,
+0xF5, 0x18, 0xF5, 0x0D, 0xF5, 0x62, 0x90, 0x93, 0x6F, 0xF0, 0x90, 0x00, 0xCC, 0xE0, 0x54, 0xF7,
+0xF0, 0x12, 0x7E, 0x58, 0x12, 0x47, 0xA3, 0x12, 0x37, 0x1C, 0x7F, 0x03, 0x12, 0x88, 0x1B, 0x71,
+0x8D, 0x12, 0x60, 0x16, 0x12, 0x60, 0x89, 0x12, 0x60, 0x9E, 0x12, 0x60, 0x34, 0x12, 0x45, 0x02,
+0x12, 0x61, 0x03, 0x91, 0xCE, 0x90, 0x93, 0x0E, 0xE5, 0xD9, 0xF0, 0xC2, 0xAF, 0x90, 0x00, 0x80,
+0xE0, 0x44, 0x40, 0xF0, 0x71, 0xFE, 0x75, 0xE8, 0x03, 0x43, 0xA8, 0x85, 0xD2, 0xAF, 0x12, 0x82,
+0xBB, 0x51, 0x9B, 0x12, 0x60, 0xA5, 0x90, 0x93, 0x0C, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0xA5, 0x90,
+0x01, 0xC4, 0xF0, 0x74, 0x52, 0xA3, 0xF0, 0xE5, 0x18, 0x30, 0xE4, 0x0A, 0xC2, 0xAF, 0x53, 0x18,
+0xEF, 0xD2, 0xAF, 0x12, 0x67, 0x8F, 0xE5, 0x18, 0x30, 0xE6, 0x0A, 0xC2, 0xAF, 0x53, 0x18, 0xBF,
+0xD2, 0xAF, 0x12, 0x76, 0x54, 0xE5, 0x18, 0x30, 0xE7, 0x0A, 0xC2, 0xAF, 0x53, 0x18, 0x7F, 0xD2,
+0xAF, 0x12, 0x82, 0x61, 0xC2, 0xAF, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0xBF, 0x01, 0x0D, 0x90, 0x93,
+0x3A, 0x74, 0x01, 0xF0, 0x31, 0x9C, 0xE4, 0x90, 0x93, 0x3A, 0xF0, 0xD2, 0xAF, 0x90, 0x01, 0xBD,
+0xE5, 0x63, 0xF0, 0x90, 0x93, 0x50, 0xE0, 0x90, 0x01, 0xBC, 0xF0, 0x80, 0x99, 0x90, 0x01, 0x3C,
+0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
+0xF0, 0xFD, 0x7F, 0x54, 0x71, 0xB6, 0x7D, 0xFF, 0x7F, 0x55, 0x71, 0xB6, 0x7D, 0xFF, 0x7F, 0x56,
+0x71, 0xB6, 0x7D, 0xFF, 0x7F, 0x57, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75,
+0x83, 0x00, 0xED, 0xF0, 0x71, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x30, 0xE4, 0xF0,
+0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
+0xFD, 0x7F, 0x50, 0x71, 0xB6, 0xE4, 0xFD, 0x7F, 0x51, 0x71, 0xB6, 0xE4, 0xFD, 0x7F, 0x52, 0x71,
+0xB6, 0xE4, 0xFD, 0x7F, 0x53, 0x80, 0xBF, 0x90, 0x00, 0x02, 0xE0, 0x44, 0x01, 0xF0, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F, 0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x05,
+0x22, 0x74, 0xFF, 0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xB4, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xB8, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90,
+0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x71, 0xFE, 0x71, 0xF7, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE,
+0xF0, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, 0x53, 0xE0,
+0x44, 0x20, 0xF0, 0x90, 0x93, 0x41, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90,
+0x93, 0x34, 0xE0, 0x60, 0x34, 0xE4, 0x90, 0x93, 0x4D, 0xF0, 0xFF, 0x7E, 0x08, 0x12, 0x2C, 0x6E,
+0x90, 0x93, 0xB4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB4, 0x12, 0x43, 0x84, 0xEC, 0x54, 0xFD, 0xFC,
+0x90, 0x93, 0xB4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB4, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12,
+0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x3E, 0xE0, 0x60, 0x22, 0xE4,
+0xFF, 0x11, 0x56, 0x90, 0x93, 0x52, 0xE0, 0x60, 0x12, 0x90, 0x93, 0xB8, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xB8, 0xD1, 0x99, 0x90, 0x07, 0x78, 0x74, 0x01,
+0xF0, 0x90, 0x93, 0x48, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93,
+0xE0, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x93, 0xE2, 0xF0, 0x90, 0x93, 0xE0, 0xE0, 0x54, 0x7F,
+0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x6C, 0xF0, 0x90, 0x00, 0x80, 0xE0, 0x44,
+0x80, 0xFD, 0x7F, 0x80, 0x61, 0xB6, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x8A, 0x65, 0xEF,
+0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x91, 0x14, 0x90, 0x93, 0x9F, 0x74, 0x02, 0xF0,
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x9F, 0xE0, 0x90, 0x93, 0xEB, 0xF0,
+0x6F, 0x70, 0x02, 0xA1, 0xDC, 0xEF, 0x14, 0x60, 0x3B, 0x14, 0x60, 0x5F, 0x14, 0x70, 0x02, 0xA1,
+0xB6, 0x24, 0x03, 0x60, 0x02, 0xA1, 0xDC, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x03, 0x04, 0xD1, 0xE4,
+0xA1, 0xDC, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x02, 0x04, 0xD1, 0xFC, 0xA1, 0xDC, 0x90, 0x93, 0xEB,
+0xE0, 0xB4, 0x04, 0x04, 0xF1, 0x00, 0xA1, 0xDC, 0x90, 0x93, 0xEB, 0xE0, 0x64, 0x01, 0x70, 0x7C,
+0xD1, 0xE6, 0x80, 0x78, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4, 0x03, 0x04, 0xF1, 0x35, 0x80, 0x6C,
+0xEF, 0xB4, 0x02, 0x04, 0xF1, 0x04, 0x80, 0x64, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4, 0x04, 0x04,
+0xF1, 0x1A, 0x80, 0x58, 0xEF, 0x70, 0x55, 0xD1, 0x01, 0x80, 0x51, 0x90, 0x93, 0xEB, 0xE0, 0xB4,
+0x03, 0x04, 0xF1, 0x25, 0x80, 0x46, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x01, 0x04, 0x91, 0xF6, 0x80,
+0x3B, 0x90, 0x93, 0xEB, 0xE0, 0xB4, 0x04, 0x04, 0xF1, 0x11, 0x80, 0x30, 0x90, 0x93, 0xEB, 0xE0,
+0x70, 0x2A, 0xB1, 0xE1, 0x80, 0x26, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4, 0x01, 0x04, 0xB1, 0xE5,
+0x80, 0x1A, 0xEF, 0xB4, 0x02, 0x04, 0xB1, 0xFD, 0x80, 0x12, 0x90, 0x93, 0xEB, 0xE0, 0xFF, 0xB4,
+0x04, 0x05, 0x12, 0x44, 0xFF, 0x80, 0x05, 0xEF, 0x70, 0x02, 0xB1, 0xF9, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0xD1, 0x01, 0x81, 0xF6, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x54,
+0xBF, 0xF0, 0x90, 0x93, 0x9F, 0x74, 0x03, 0xF0, 0x22, 0xD1, 0x01, 0x80, 0xE8, 0xD1, 0x14, 0x80,
+0xE4, 0x90, 0x01, 0x3E, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0xAD, 0x90, 0x93, 0x9F,
+0x74, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xAC, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xB0, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90,
+0x01, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x41, 0xE0,
+0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x0A, 0x31, 0x83,
+0xEF, 0x64, 0x01, 0x60, 0x03, 0x12, 0x4F, 0x63, 0x90, 0x93, 0x3E, 0xE0, 0x60, 0x1C, 0x7F, 0x01,
+0x11, 0x56, 0x90, 0x93, 0x52, 0xE0, 0x60, 0x12, 0x90, 0x93, 0xB0, 0x12, 0x1F, 0xD5, 0x00, 0x00,
+0x03, 0x10, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xB0, 0xD1, 0x99, 0x71, 0xF7, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0x90, 0x93, 0xEC, 0xEF, 0xF0, 0xD1, 0x14, 0x90, 0x93, 0xEC, 0xE0, 0x60, 0x05, 0x90, 0x05,
+0x22, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x99, 0xF0, 0x22, 0x7F, 0x70, 0x7E, 0x08, 0xD3, 0x10, 0xAF,
+0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0x54, 0xFC, 0xFF, 0x90, 0x01, 0xE8, 0xF0, 0xEE, 0x44, 0xF0, 0xA3,
+0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEC, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F,
+0x0F, 0x90, 0x01, 0xED, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEE, 0xF0, 0x12,
+0x1E, 0xF6, 0x90, 0x01, 0xEF, 0xF0, 0x90, 0x01, 0xEB, 0x74, 0x40, 0xF0, 0x12, 0x88, 0x6C, 0xD0,
+0xD0, 0x92, 0xAF, 0x22, 0xF1, 0x35, 0x7D, 0x03, 0x7F, 0x02, 0x12, 0x3A, 0x3F, 0x90, 0x05, 0x27,
+0xE4, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE4, 0x90, 0x93, 0x9F, 0xF0, 0x22, 0xF1, 0x04, 0x80, 0xE6,
+0xF1, 0x1A, 0x80, 0xE2, 0xD1, 0x14, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x9F, 0x04, 0xF0,
+0x22, 0x91, 0x14, 0x90, 0x93, 0x9F, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90,
+0x93, 0x9F, 0x04, 0xF0, 0x22, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x91, 0x0E, 0x90, 0x93,
+0x9F, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40,
+0xF0, 0x90, 0x93, 0x9F, 0x74, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x93, 0xED, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x46, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08,
+0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46, 0xE0, 0x5F, 0xF0, 0x71, 0xFE,
+0x90, 0x93, 0xED, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33,
+0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8,
+0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0x80, 0x4B, 0x90,
+0x93, 0xED, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3,
+0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x62, 0xE0, 0x5F, 0xF0, 0x71, 0xFE, 0x90, 0x93, 0xED,
+0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
+0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x60, 0xE0, 0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80,
+0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8, 0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F,
+0x82, 0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
+0x8B, 0x21, 0x8A, 0x22, 0x89, 0x23, 0x90, 0x93, 0xBC, 0x12, 0x43, 0xC8, 0xAB, 0x24, 0xAA, 0x25,
+0xA9, 0x26, 0x90, 0x93, 0xBF, 0x12, 0x43, 0xC8, 0xAF, 0x27, 0x15, 0x27, 0xEF, 0x60, 0x1E, 0x90,
+0x93, 0xBF, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x93, 0xBC,
+0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0xEF, 0x12, 0x42, 0x53, 0x80, 0xDB, 0xAB, 0x21, 0xAA,
+0x22, 0xA9, 0x23, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x01, 0xC4, 0x74, 0x48, 0xF0, 0x74, 0x58, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90,
+0x05, 0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01,
+0xC7, 0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
+0x11, 0x48, 0xBF, 0x01, 0x0F, 0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x95, 0x90, 0x04,
+0x1F, 0x74, 0x20, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF,
+0x30, 0xE0, 0x02, 0x7B, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF,
+0xF0, 0xED, 0x60, 0x0E, 0x74, 0x0F, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44,
+0x80, 0xF0, 0xAF, 0x03, 0x74, 0x08, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0,
+0x74, 0x09, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21,
+0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03,
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C, 0x13,
+0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x93, 0x01,
+0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01, 0x60, 0x07,
+0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3B, 0x90, 0x93, 0x01, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x3D,
+0xF0, 0x79, 0x40, 0x90, 0x93, 0x01, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83, 0xE0,
+0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x93, 0x5E, 0xF0, 0x22, 0x90, 0x93, 0x5E, 0xE0, 0x04,
+0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0B, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0, 0x02,
+0x11, 0x80, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00,
+0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07,
+0x90, 0x01, 0xC4, 0x74, 0x63, 0xF0, 0x74, 0x59, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0, 0x55, 0x28,
+0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E, 0xA3, 0xE0,
+0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x61, 0x57, 0x90, 0x01, 0x34, 0x74, 0x01,
+0xF0, 0x85, 0xD1, 0x0E, 0x85, 0xD3, 0x10, 0x85, 0xD4, 0x11, 0x85, 0xD5, 0x12, 0x85, 0xD6, 0x13,
+0x85, 0xD7, 0x14, 0x85, 0xD9, 0x15, 0x85, 0xD2, 0x0F, 0x75, 0x24, 0x00, 0x75, 0x25, 0x00, 0x75,
+0x26, 0x0E, 0x75, 0x27, 0x08, 0xFB, 0x7A, 0x93, 0x79, 0x5F, 0x12, 0x57, 0xF9, 0x90, 0x93, 0x60,
+0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x01, 0xFE, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x70, 0x02,
+0x61, 0x08, 0x90, 0x93, 0x60, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02,
+0x61, 0x08, 0xEF, 0x54, 0x1F, 0xF5, 0x4D, 0x90, 0x93, 0x61, 0xE0, 0x54, 0x3F, 0xF5, 0x4E, 0x90,
+0x93, 0x63, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34,
+0x87, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xE5, 0x4E, 0xD3, 0x94, 0x04, 0x40, 0x03,
+0x75, 0x4E, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0x75, 0xF0,
+0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0x63, 0xE0, 0x54,
+0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43,
+0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93,
+0x60, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x2F, 0x90, 0x93, 0x63, 0xE0, 0x54, 0x1F, 0xFF,
+0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8F, 0xF0,
+0x12, 0x42, 0x87, 0x90, 0x93, 0x62, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0,
+0x67, 0xAF, 0x4D, 0x12, 0x71, 0x11, 0x80, 0x60, 0x90, 0x93, 0x60, 0xE0, 0xFF, 0xC4, 0x13, 0x13,
+0x54, 0x03, 0x30, 0xE0, 0x53, 0x90, 0x93, 0x63, 0xE0, 0x54, 0x1F, 0xFF, 0xFD, 0xE5, 0x4D, 0x25,
+0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8D, 0xF0, 0x12, 0x42, 0x87,
+0x90, 0x93, 0x62, 0xE0, 0xFE, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x0F, 0xEE, 0x54,
+0x7F, 0xFD, 0x8F, 0x55, 0xAB, 0x4E, 0xAF, 0x4D, 0x12, 0x70, 0xAD, 0x80, 0x1B, 0x90, 0x01, 0x02,
+0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x11, 0x90, 0x04, 0x30, 0xE0, 0xB4, 0x01, 0x0A, 0xE4, 0xF0,
+0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x04, 0xCF, 0xF0, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02, 0x80,
+0x46, 0x90, 0x93, 0x50, 0xE0, 0x60, 0x37, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74,
+0x04, 0xF0, 0x12, 0x51, 0x83, 0xEF, 0x64, 0x01, 0x70, 0x2D, 0xF5, 0x48, 0x90, 0x93, 0x3C, 0xE0,
+0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74,
+0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x80, 0x09, 0x12, 0x51,
+0x83, 0xBF, 0x01, 0x03, 0x12, 0x51, 0x9C, 0xE5, 0x2C, 0x20, 0xE1, 0x02, 0x61, 0xF9, 0x90, 0x01,
+0x34, 0x74, 0x02, 0xF0, 0x90, 0xFD, 0x10, 0x74, 0x7F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x30, 0xE5,
+0x0B, 0x75, 0x4F, 0x88, 0x75, 0x50, 0x0F, 0x75, 0x51, 0x0F, 0x80, 0x09, 0x75, 0x4F, 0xC0, 0x75,
+0x50, 0x08, 0x75, 0x51, 0x07, 0x90, 0x04, 0x7F, 0xE0, 0x55, 0x51, 0xF5, 0x16, 0x90, 0x04, 0x7E,
+0xE0, 0x55, 0x51, 0xF5, 0x17, 0x65, 0x16, 0x60, 0x60, 0xE4, 0xFF, 0xE5, 0x16, 0x75, 0xF0, 0x08,
+0xA4, 0x25, 0x4F, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74,
+0x19, 0x2F, 0xF8, 0xA6, 0x06, 0x0F, 0xBF, 0x08, 0xE2, 0x75, 0x24, 0x00, 0x75, 0x25, 0x00, 0x75,
+0x26, 0x19, 0x75, 0x27, 0x08, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x56, 0x12, 0x57, 0xF9, 0x90, 0x93,
+0x56, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0xD1, 0x9F, 0xE5, 0x16,
+0x24, 0x01, 0xFF, 0xE4, 0x33, 0xFE, 0xAD, 0x50, 0x7C, 0x00, 0x12, 0x1F, 0x4E, 0xAF, 0x05, 0x8F,
+0x16, 0x90, 0x04, 0x7F, 0xEF, 0xF0, 0xB5, 0x17, 0xA0, 0xE5, 0x2C, 0x30, 0xE3, 0x06, 0x90, 0x01,
+0x34, 0x74, 0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90, 0x01, 0x34, 0x74, 0x10, 0xF0, 0x43,
+0x18, 0x10, 0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF, 0xE0, 0x30, 0xE5, 0x1F, 0xE0, 0x54,
+0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8, 0x00, 0x75, 0xE8, 0x00, 0x12, 0x53,
+0xCB, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x53, 0xFE, 0x80, 0xFE, 0xE5, 0x2C, 0x30,
+0xE6, 0x06, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xE5, 0x2E, 0x30, 0xE0, 0x52, 0x90, 0x93, 0x71,
+0x74, 0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x93, 0x6E, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90,
+0x05, 0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x9E, 0xE0,
+0x30, 0xE0, 0x0D, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x06, 0x90, 0x93, 0xA0, 0x74, 0x01, 0xF0,
+0x90, 0x93, 0x98, 0xE0, 0xFF, 0x30, 0xE0, 0x0D, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x06, 0x90,
+0x93, 0x9A, 0x74, 0x01, 0xF0, 0x12, 0x45, 0x09, 0xF1, 0xBF, 0x90, 0x93, 0x71, 0xE4, 0xF0, 0xE5,
+0x2E, 0x30, 0xE1, 0x7D, 0x90, 0x01, 0x36, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x62, 0xE0, 0xFE, 0x90,
+0x05, 0x61, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xF5, 0x0A, 0xEC, 0x3E, 0xF5, 0x09, 0x90, 0x05, 0x22,
+0xE0, 0xB4, 0xFF, 0x06, 0x90, 0x01, 0xE6, 0xE0, 0x04, 0xF0, 0x90, 0x05, 0x22, 0xE0, 0x90, 0x01,
+0xE4, 0xF0, 0x43, 0x18, 0x40, 0x11, 0xF5, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x0C, 0xE4, 0xFF,
+0xD1, 0x91, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x53, 0xE0, 0x60, 0x1D,
+0x90, 0x01, 0x3B, 0xE0, 0x30, 0xE4, 0x16, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x01,
+0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x05, 0x08, 0xE5,
+0x08, 0xC3, 0x94, 0xFF, 0x40, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01,
+0xF0, 0xE5, 0x2E, 0x30, 0xE2, 0x7B, 0x90, 0x01, 0x36, 0x74, 0x04, 0xF0, 0x90, 0x05, 0x62, 0xE0,
+0xFE, 0x90, 0x05, 0x61, 0xE0, 0x7C, 0x00, 0x24, 0x00, 0xF5, 0x0C, 0xEC, 0x3E, 0xF5, 0x0B, 0xD3,
+0xE5, 0x0C, 0x95, 0x0A, 0xE5, 0x0B, 0x95, 0x09, 0x40, 0x06, 0x90, 0x01, 0xE5, 0xE0, 0x04, 0xF0,
+0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x0D, 0x90, 0x93, 0x39, 0xE4, 0xF0, 0x90, 0x93, 0x99, 0xE0,
+0x64, 0x06, 0x60, 0x3D, 0x12, 0x4B, 0x90, 0x90, 0x93, 0x53, 0xE0, 0x60, 0x34, 0x90, 0x93, 0x4E,
+0xE0, 0xFF, 0x90, 0x93, 0x37, 0xE0, 0x6F, 0x70, 0x28, 0x90, 0x93, 0x4E, 0xE0, 0x90, 0x05, 0x73,
+0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x7D, 0x01, 0x7F,
+0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90, 0x93, 0x37, 0xE0, 0x14,
+0xF0, 0xE5, 0x2E, 0x30, 0xE3, 0x34, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0, 0xE5, 0x62, 0x64, 0x01,
+0x70, 0x28, 0xE5, 0x65, 0x60, 0x24, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02,
+0xF0, 0x75, 0x48, 0x00, 0x90, 0x93, 0x42, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E,
+0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x2E, 0x30, 0xE4, 0x2B, 0x90,
+0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x20, 0xE5, 0x65, 0x60, 0x1C, 0x90, 0x01,
+0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x51, 0xE4, 0xF0, 0x53, 0x66,
+0xFD, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x51, 0x9C, 0xE5, 0x2E, 0x30, 0xE5, 0x1F, 0x90,
+0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x14, 0xE5, 0x65, 0x60, 0x10, 0x90, 0x93,
+0x50, 0xE0, 0x64, 0x02, 0x60, 0x05, 0x12, 0x51, 0x2B, 0x80, 0x03, 0x12, 0x4F, 0x1D, 0xE5, 0x2E,
+0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36, 0x74, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x10, 0xE5, 0x65,
+0x60, 0x0C, 0x53, 0x66, 0xFE, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x51, 0x9C, 0xE5, 0x2F,
+0x30, 0xE1, 0x18, 0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x08,
+0x90, 0x93, 0x9D, 0x74, 0x01, 0xF0, 0x80, 0x03, 0x12, 0x4E, 0xD6, 0x74, 0x63, 0x04, 0x90, 0x01,
+0xC4, 0xF0, 0x74, 0x59, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03,
+0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0,
+0x32, 0x8F, 0x71, 0x90, 0x05, 0x43, 0xE0, 0x7F, 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x22, 0x90,
+0x93, 0x01, 0xE0, 0x54, 0xF0, 0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A,
+0x00, 0x79, 0x19, 0x90, 0x93, 0xCB, 0x12, 0x43, 0xC8, 0x0B, 0x7A, 0x93, 0x79, 0x01, 0xD3, 0x10,
+0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xC8, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x6A, 0xE0, 0xFF,
+0x90, 0x92, 0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x90, 0x92,
+0x69, 0xE0, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0B, 0x90, 0x92, 0x69, 0xE0, 0x14, 0xFF,
+0xA3, 0xE0, 0xB5, 0x07, 0x0F, 0x12, 0x81, 0x51, 0xEF, 0x60, 0x72, 0x12, 0x82, 0x61, 0x90, 0x01,
+0x3F, 0x74, 0x02, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6B, 0xF9, 0x74,
+0x92, 0x35, 0xF0, 0xA8, 0x01, 0xFC, 0x7D, 0x01, 0x90, 0x93, 0xC8, 0x12, 0x43, 0xA8, 0x7E, 0x00,
+0x7F, 0x02, 0x12, 0x1E, 0xD0, 0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6D, 0xF9,
+0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x93, 0xCB,
+0x12, 0x43, 0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x90, 0x93, 0xC8, 0x12, 0x43, 0xA8, 0x12,
+0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x27, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x57,
+0xF9, 0x90, 0x92, 0x6A, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0xAE, 0x07, 0xE4, 0xFF, 0xD1, 0x91, 0xEF, 0x60, 0x19, 0x90, 0x93, 0x98, 0xE0, 0xC4,
+0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x0D, 0xAF, 0x06, 0x7D, 0x01, 0x12, 0x48, 0xF4, 0x12, 0x67,
+0x4A, 0x7F, 0x01, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x93, 0x26, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x29,
+0xE0, 0x54, 0xF0, 0x44, 0x02, 0xF0, 0x54, 0x0F, 0x44, 0xC0, 0xF0, 0x90, 0x93, 0x26, 0x12, 0x43,
+0xA8, 0x90, 0x93, 0xCB, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x29, 0xC1, 0xBE, 0x90,
+0x93, 0xE0, 0xE0, 0x30, 0xE0, 0x2F, 0xE5, 0x62, 0xB4, 0x01, 0x2A, 0x90, 0x93, 0xDF, 0xE0, 0x04,
+0xF0, 0xE0, 0xB4, 0x0A, 0x0B, 0x90, 0x93, 0xE2, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0xDF, 0xF0,
+0x90, 0x93, 0xE2, 0xE0, 0xFF, 0x90, 0x93, 0xE1, 0xE0, 0xD3, 0x9F, 0x50, 0x08, 0x12, 0x8A, 0xA6,
+0xE4, 0x90, 0x93, 0xE2, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC,
+0xEF, 0x30, 0xE0, 0x02, 0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF,
+0x05, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5,
+0x2B, 0x90, 0x01, 0x30, 0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3,
+0xE5, 0x2B, 0xF0, 0x22, 0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32,
+0x43, 0x32, 0x20, 0x90, 0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32,
+0xF0, 0x22, 0x90, 0x00, 0xF4, 0xE0, 0x20, 0xE3, 0x09, 0xE0, 0x7F, 0x01, 0x20, 0xE2, 0x05, 0x7F,
+0x02, 0x22, 0x7F, 0x00, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30, 0xE3, 0x02, 0x7F, 0x01,
+0x22, 0x90, 0x93, 0x72, 0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7, 0x05, 0x7E,
+0xFD, 0x7F, 0x33, 0x22, 0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30, 0xE2, 0x0D,
+0x90, 0x05, 0x41, 0x74, 0x10, 0xF0, 0x90, 0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01,
+0x64, 0x74, 0x20, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x0F, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x98, 0xE0,
+0x7F, 0x00, 0x30, 0xE4, 0x02, 0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E, 0xC3, 0x90, 0x93, 0x10,
+0xE0, 0x94, 0x88, 0x90, 0x93, 0x0F, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44,
+0x80, 0xF0, 0x22, 0x90, 0x93, 0x0F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E,
+0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0x10, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x0F, 0xE0, 0x94,
+0x00, 0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0x90, 0x01, 0x94, 0xE0, 0x44,
+0x01, 0xF0, 0x22, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01, 0x9C, 0x74, 0x7E, 0xF0,
+0xA3, 0x74, 0x92, 0xF0, 0xA3, 0x74, 0xA0, 0xF0, 0xA3, 0x74, 0x24, 0xF0, 0x90, 0x01, 0x9B, 0x74,
+0x49, 0xF0, 0x90, 0x01, 0x9A, 0x74, 0xE0, 0xF0, 0x90, 0x01, 0x99, 0xE4, 0xF0, 0x90, 0x01, 0x98,
+0x04, 0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x05,
+0xC0, 0x06, 0xC0, 0x07, 0x7D, 0x33, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x61, 0xFF, 0xA3, 0xF0,
+0x53, 0x91, 0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE, 0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5, 0x3D, 0x90,
+0x00, 0x52, 0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0, 0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30, 0xE4, 0x06,
+0x90, 0x00, 0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D, 0x30, 0xE5, 0x06, 0x90, 0x00, 0x55, 0x74, 0x20,
+0xF0, 0xE5, 0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00, 0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D, 0x30, 0xE7,
+0x06, 0x90, 0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5, 0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00, 0x56, 0x74,
+0x01, 0xF0, 0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90, 0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5, 0x3E, 0x30,
+0xE2, 0x06, 0x90, 0x00, 0x56, 0x74, 0x04, 0xF0, 0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90, 0x00, 0x56,
+0x74, 0x08, 0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0,
+0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83,
+0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0,
+0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x75, 0x56, 0x00, 0x90, 0x01, 0xC4, 0x74, 0xDA, 0xF0,
+0x74, 0x61, 0xA3, 0xF0, 0x53, 0x91, 0xDF, 0x90, 0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3,
+0xE0, 0x55, 0x31, 0xF5, 0x35, 0xA3, 0xE0, 0x55, 0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5,
+0x37, 0xE5, 0x34, 0x30, 0xE0, 0x1A, 0x90, 0x01, 0x3C, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x98, 0xE0,
+0x30, 0xE0, 0x0D, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0,
+0xE5, 0x34, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x12, 0x44, 0x24, 0xE5, 0x34,
+0x30, 0xE2, 0x36, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE0, 0x21,
+0x75, 0x48, 0x00, 0x90, 0x93, 0x3C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01,
+0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x80,
+0x08, 0x90, 0x93, 0x4C, 0xE4, 0xF0, 0x12, 0x51, 0x9C, 0xE5, 0x34, 0x30, 0xE3, 0x36, 0x90, 0x01,
+0x3C, 0x74, 0x08, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE1, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93,
+0x3C, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
+0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x02, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x49, 0xE4,
+0xF0, 0x12, 0x51, 0x9C, 0xE5, 0x34, 0x30, 0xE4, 0x06, 0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0xE5,
+0x34, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3C, 0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x18, 0x90,
+0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90, 0x00, 0x83, 0xE0, 0xF5, 0x64, 0x90, 0x01, 0xBB, 0xE5, 0x64,
+0xF0, 0x12, 0x50, 0xDC, 0x12, 0x51, 0x9C, 0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3D, 0x74,
+0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90, 0x93, 0x6D,
+0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0xFD, 0xE0,
+0x04, 0xF0, 0xE5, 0x36, 0x20, 0xE0, 0x02, 0x61, 0xAF, 0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0x90,
+0x93, 0x9E, 0xE0, 0x30, 0xE0, 0x13, 0xA3, 0xE0, 0x64, 0x03, 0x60, 0x0D, 0x7F, 0x01, 0x12, 0x5E,
+0x91, 0xEF, 0x60, 0x05, 0x7F, 0x01, 0x12, 0x55, 0x11, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x5F,
+0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x60, 0x3B, 0x91, 0x86, 0x90, 0x93, 0x99, 0xE0, 0xFF, 0x64,
+0x06, 0x60, 0x30, 0xEF, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x04,
+0xE4, 0xFF, 0x80, 0x14, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09, 0x90,
+0x93, 0x99, 0xE0, 0xB4, 0x02, 0x04, 0x7F, 0x01, 0x91, 0xDA, 0x7D, 0x01, 0xAF, 0x64, 0x12, 0x48,
+0xF4, 0xF1, 0x4A, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x75, 0x48, 0x00, 0x75, 0x49, 0x03, 0xE4,
+0xFB, 0xFD, 0x7F, 0x50, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x53, 0x74, 0x05, 0xF0, 0xE5,
+0x36, 0x30, 0xE1, 0x3C, 0x90, 0x01, 0x3E, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x9E, 0xE0, 0x30, 0xE0,
+0x13, 0xA3, 0xE0, 0x64, 0x03, 0x60, 0x0D, 0x7F, 0x01, 0x12, 0x5E, 0x91, 0xEF, 0x70, 0x05, 0x7F,
+0x02, 0x12, 0x55, 0x11, 0x90, 0x93, 0x98, 0xE0, 0x30, 0xE0, 0x15, 0x12, 0x89, 0xF6, 0x90, 0x93,
+0x99, 0xE0, 0x64, 0x06, 0x60, 0x0A, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF, 0x70, 0x02, 0x91, 0xA8,
+0xE5, 0x36, 0x30, 0xE3, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xE5, 0x36, 0x30, 0xE4, 0x06,
+0x90, 0x01, 0x3E, 0x74, 0x10, 0xF0, 0xE5, 0x36, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x04,
+0xF0, 0xE5, 0x36, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x20, 0xF0, 0xE5, 0x36, 0x30, 0xE6,
+0x06, 0x90, 0x01, 0x3E, 0x74, 0x40, 0xF0, 0xE5, 0x36, 0x30, 0xE7, 0x06, 0x90, 0x01, 0x3E, 0x74,
+0x80, 0xF0, 0xE5, 0x37, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x43, 0x18, 0x80,
+0xE5, 0x37, 0x30, 0xE4, 0x1B, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0x12, 0x46, 0xAC, 0x90, 0x93,
+0x4E, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x12, 0x5F, 0xBF,
+0x74, 0xDA, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0,
+0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0,
+0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x93, 0x98, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03,
+0x30, 0xE0, 0x0A, 0xA3, 0xE0, 0x64, 0x06, 0x60, 0x04, 0x7F, 0x06, 0x91, 0xDA, 0x90, 0x93, 0x99,
+0xE0, 0x64, 0x06, 0x60, 0x02, 0xF1, 0x29, 0x22, 0x90, 0x93, 0x39, 0xE0, 0x60, 0x16, 0x90, 0x93,
+0x99, 0xE0, 0x70, 0x04, 0x7F, 0x05, 0x80, 0x1F, 0x90, 0x93, 0x99, 0xE0, 0x64, 0x01, 0x70, 0x19,
+0x7F, 0x02, 0x80, 0x13, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x01, 0x04, 0x7F, 0x03, 0x80, 0x08, 0x90,
+0x93, 0x99, 0xE0, 0x70, 0x04, 0x7F, 0x04, 0x91, 0xDA, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0,
+0xD0, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0x6F, 0x70, 0x02, 0xC1, 0xAC, 0xEF, 0x12, 0x43, 0xD1, 0x65,
+0x08, 0x00, 0x65, 0x43, 0x01, 0x65, 0x8A, 0x02, 0x65, 0xC5, 0x03, 0x65, 0xFE, 0x04, 0x66, 0x37,
+0x05, 0x66, 0x73, 0x06, 0x00, 0x00, 0x66, 0xAC, 0xEE, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56,
+0x81, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xFF, 0xB4, 0x05, 0x04, 0xD1, 0xBB, 0xC1, 0xAC, 0xEF,
+0xB4, 0x06, 0x06, 0x7F, 0x01, 0xD1, 0xD0, 0x80, 0x16, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x06,
+0x7F, 0x01, 0xD1, 0xB1, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0xD1,
+0xF0, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56, 0x81, 0x80,
+0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1, 0xBB, 0x90, 0x93, 0x99, 0xE0, 0x70, 0x04,
+0xD1, 0xE6, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0x7F, 0x01, 0xD1, 0xD0,
+0xC1, 0xAC, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xD1, 0xB1, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0,
+0x64, 0x02, 0x60, 0x02, 0xC1, 0xAC, 0xD1, 0xC5, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04,
+0x07, 0x7F, 0x01, 0x12, 0x56, 0x81, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1,
+0xBB, 0x90, 0x93, 0x99, 0xE0, 0x70, 0x04, 0xD1, 0xE6, 0x80, 0x16, 0x90, 0x93, 0x99, 0xE0, 0xFE,
+0xB4, 0x06, 0x06, 0x7F, 0x01, 0xD1, 0xD0, 0x80, 0x08, 0xEE, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0xD1,
+0xB1, 0xF1, 0x1C, 0xC1, 0xAC, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56,
+0x81, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1, 0xBB, 0x90, 0x93, 0x99, 0xE0,
+0x70, 0x04, 0xD1, 0xE6, 0x80, 0x14, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF,
+0xD1, 0xD0, 0x80, 0x06, 0xEE, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0xF1, 0x05, 0xC1, 0xAC, 0x90, 0x93,
+0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4, 0xFF, 0xD1, 0xD0, 0x80, 0x13, 0xEE, 0xB4, 0x03, 0x06,
+0x7F, 0x01, 0xD1, 0xB1, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0x90,
+0x93, 0x99, 0xE0, 0xB4, 0x01, 0x04, 0xD1, 0xF0, 0x80, 0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05,
+0x02, 0xD1, 0xBB, 0xD1, 0xFB, 0x80, 0x75, 0x90, 0x93, 0x99, 0xE0, 0xFE, 0xB4, 0x06, 0x06, 0xE4,
+0xFF, 0xD1, 0xD0, 0x80, 0x13, 0xEE, 0xB4, 0x03, 0x06, 0x7F, 0x01, 0xD1, 0xB1, 0x80, 0x09, 0x90,
+0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x01, 0x04, 0xD1,
+0xF0, 0x80, 0x0C, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x05, 0x7F, 0x01, 0x12, 0x56, 0x81, 0xF1,
+0x0F, 0x80, 0x39, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x07, 0x7F, 0x01, 0x12, 0x56, 0x81, 0x80,
+0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05, 0x02, 0xD1, 0xBB, 0x90, 0x93, 0x99, 0xE0, 0x70, 0x04,
+0xD1, 0xE6, 0x80, 0x16, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x06, 0xE4, 0xFF, 0xD1, 0xB1, 0x80,
+0x09, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x02, 0xD1, 0xC5, 0xF1, 0x36, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0x12, 0x51, 0x69, 0x90, 0x93, 0x99, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0,
+0x90, 0x93, 0x99, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x99, 0x04, 0xF0, 0x22,
+0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0xEF, 0x60, 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90,
+0x93, 0x99, 0x74, 0x01, 0xF0, 0x22, 0x12, 0x51, 0x05, 0x90, 0x93, 0x99, 0x74, 0x01, 0xF0, 0x22,
+0x7F, 0x01, 0x12, 0x50, 0x8A, 0xE4, 0x90, 0x93, 0x99, 0xF0, 0x22, 0x12, 0x54, 0x0E, 0x90, 0x93,
+0x99, 0x74, 0x04, 0xF0, 0x22, 0x12, 0x50, 0xB3, 0x90, 0x93, 0x99, 0x74, 0x03, 0xF0, 0x22, 0x90,
+0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x99, 0x74, 0x05, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74,
+0xFF, 0xF0, 0x90, 0x93, 0x99, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x93, 0x9D, 0xE0, 0xB4, 0x01, 0x05,
+0xE4, 0xF0, 0x12, 0x4E, 0xD6, 0x22, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, 0x90, 0x05, 0x22,
+0x74, 0x6F, 0xF0, 0x90, 0x93, 0x99, 0x74, 0x06, 0xF0, 0x22, 0x90, 0x93, 0x99, 0xE0, 0x64, 0x06,
+0x60, 0x3C, 0xE5, 0x63, 0x54, 0x0F, 0x14, 0x60, 0x2E, 0x14, 0x60, 0x1E, 0x24, 0xFE, 0x60, 0x0E,
+0x24, 0xF8, 0x70, 0x2A, 0xE4, 0x90, 0x93, 0x99, 0xF0, 0x90, 0x05, 0x22, 0xF0, 0x22, 0x90, 0x93,
+0x99, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x99, 0x74, 0x03, 0xF0,
+0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x22, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x08, 0xF0, 0x22, 0xD3,
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x93, 0x0F, 0xF0,
+0x90, 0x93, 0x0F, 0xE0, 0xFD, 0x70, 0x03, 0x02, 0x68, 0xDA, 0x90, 0x93, 0xE9, 0xE0, 0xFF, 0x74,
+0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF,
+0xEF, 0x5D, 0x70, 0x03, 0x02, 0x68, 0xD3, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01,
+0xD0, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x10, 0xF0, 0x75, 0x24, 0x01, 0x75, 0x25, 0x93, 0x75,
+0x26, 0x10, 0x75, 0x27, 0x01, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x11, 0x12, 0x57, 0xF9, 0x90, 0x93,
+0x11, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0xE9, 0x30, 0xE0, 0x59, 0xE0,
+0x75, 0xF0, 0x02, 0x90, 0x00, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x12, 0xF0, 0x90, 0x93,
+0xE9, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x13, 0xF0,
+0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
+0x14, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x9C, 0xE0,
+0x90, 0x93, 0x15, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43,
+0x9C, 0xE0, 0x90, 0x93, 0x16, 0xF0, 0x80, 0x33, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12,
+0x43, 0x9C, 0xE0, 0x90, 0x93, 0x12, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01,
+0xD2, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x13, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x75, 0xF0, 0x04,
+0x90, 0x01, 0xD3, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x14, 0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B,
+0x01, 0x7A, 0x93, 0x79, 0x12, 0x11, 0xDF, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x90, 0x93, 0xE9, 0xE0,
+0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x93,
+0x0F, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33,
+0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x93, 0xE9, 0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0,
+0x02, 0x67, 0xA0, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90,
+0x93, 0x17, 0x12, 0x43, 0xC8, 0xEF, 0x12, 0x43, 0xD1, 0x69, 0x2E, 0x01, 0x69, 0x26, 0x02, 0x69,
+0x73, 0x03, 0x69, 0x7C, 0x05, 0x69, 0x85, 0x06, 0x69, 0xC8, 0x07, 0x69, 0x8D, 0x08, 0x69, 0x96,
+0x0B, 0x69, 0x9F, 0x1B, 0x69, 0xA7, 0x1C, 0x69, 0x37, 0x2D, 0x69, 0x40, 0x2E, 0x69, 0xAF, 0x30,
+0x69, 0x52, 0x34, 0x69, 0x49, 0x3B, 0x69, 0x5A, 0x47, 0x69, 0x6B, 0x48, 0x69, 0x63, 0x49, 0x69,
+0xB8, 0x4B, 0x00, 0x00, 0x69, 0xC1, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xB9, 0x90, 0x93,
+0x17, 0x12, 0x43, 0xA8, 0x02, 0x82, 0xC7, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x83, 0xA8,
+0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x83, 0xF0, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02,
+0x84, 0x29, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xBF, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8,
+0x02, 0x84, 0x54, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xD5, 0x90, 0x93, 0x17, 0x12, 0x43,
+0xA8, 0xE1, 0xCD, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x85, 0x14, 0x90, 0x93, 0x17, 0x12,
+0x43, 0xA8, 0x02, 0x80, 0x54, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x80, 0x3C, 0x90, 0x93, 0x17,
+0x12, 0x43, 0xA8, 0x02, 0x85, 0x5C, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x80, 0x80, 0x90,
+0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xC5, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0xE1, 0xA1, 0x90,
+0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x8A, 0xAB, 0x90, 0x93, 0x17, 0x12, 0x43, 0xA8, 0x02, 0x88,
+0x5A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF,
+0x54, 0x1F, 0xFE, 0xEF, 0x54, 0x20, 0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06, 0x90, 0x93, 0x1A,
+0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x1C, 0x12, 0x43, 0xA8, 0x90,
+0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x00,
+0x04, 0x12, 0x1F, 0x0F, 0x54, 0x40, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x93, 0x20, 0xF0, 0x90,
+0x93, 0x1A, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAD, 0x82, 0xAC,
+0x83, 0x90, 0x93, 0x21, 0xEC, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84,
+0xF9, 0x74, 0x8A, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x1C, 0x12,
+0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x23, 0x12, 0x43,
+0xA8, 0xEF, 0x12, 0x42, 0x53, 0x90, 0x93, 0x1C, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F,
+0x0F, 0xFF, 0x90, 0x93, 0x23, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x65, 0x90,
+0x93, 0x1C, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x21, 0xE0,
+0xFC, 0xA3, 0xE0, 0xFD, 0xF5, 0x82, 0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0x8D, 0x82, 0x8C,
+0x83, 0xA3, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0xFF, 0x24, 0xC2, 0xF5,
+0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x1B, 0xE0, 0xFE, 0x75, 0xF0, 0x09,
+0xEF, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8B,
+0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x20, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90,
+0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0x8F, 0x57, 0xEF, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82,
+0xE4, 0x34, 0x90, 0xAF, 0x82, 0xF5, 0x58, 0x8F, 0x59, 0xE5, 0x57, 0x75, 0xF0, 0x02, 0xA4, 0x24,
+0x02, 0xF9, 0x74, 0x89, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C, 0x75, 0xF0, 0x09,
+0xE5, 0x57, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAF, 0x82, 0x85, 0x83, 0x5D, 0x8F, 0x5E, 0xE5,
+0x57, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35, 0xF0, 0x75, 0x5F, 0x01, 0xF5,
+0x60, 0x89, 0x61, 0x74, 0xC2, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x12,
+0x43, 0xD1, 0x6B, 0x57, 0x00, 0x6B, 0x6C, 0x01, 0x6B, 0x81, 0x02, 0x6B, 0x96, 0x03, 0x6B, 0xBF,
+0x04, 0x6B, 0xD4, 0x05, 0x6B, 0xE9, 0x06, 0x6C, 0x0F, 0x0C, 0x6C, 0x3C, 0x0D, 0x6C, 0x69, 0x0E,
+0x6C, 0x96, 0x0F, 0x00, 0x00, 0x6C, 0xCA, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
+0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15, 0x80, 0x3C, 0xE5, 0x57, 0x25, 0xE0,
+0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x10, 0x80,
+0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0,
+0xF0, 0xA3, 0x74, 0x05, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34,
+0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5,
+0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0x8F, 0xF0, 0x81, 0xCA, 0xE5,
+0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3,
+0x74, 0xF5, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
+0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5,
+0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74, 0x0D, 0xF0, 0xE5, 0x57, 0x25, 0xE0,
+0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x81, 0xCA, 0x90,
+0x04, 0x47, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x46, 0xE0,
+0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x45, 0xE0,
+0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x44, 0x81, 0xC1, 0x90, 0x04, 0x4B, 0xE0,
+0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4A, 0xE0, 0xAB, 0x5A, 0xAA,
+0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x49, 0xE0, 0x85, 0x59, 0x82,
+0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90, 0x04, 0x4F, 0xE0, 0xAB, 0x5A, 0xAA,
+0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4E, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
+0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x4D, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83,
+0xF0, 0x90, 0x04, 0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
+0x12, 0x42, 0x53, 0x90, 0x04, 0x52, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01,
+0x12, 0x42, 0x65, 0x90, 0x04, 0x51, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04,
+0x50, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C,
+0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61,
+0x12, 0x1E, 0xF6, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0xAB, 0x5A, 0xE5,
+0x5C, 0x24, 0x01, 0xF9, 0xE4, 0x35, 0x5B, 0xFA, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E,
+0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x5F, 0xD0,
+0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xC0, 0x83,
+0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82,
+0xD0, 0x83, 0xF0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF,
+0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xA3, 0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0,
+0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3,
+0xE0, 0x4E, 0x60, 0x4B, 0x90, 0x93, 0x26, 0x74, 0x0B, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3,
+0x94, 0x00, 0x50, 0x02, 0xC1, 0x0F, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3,
+0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
+0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x0A, 0x90, 0x93, 0x26,
+0xE0, 0x24, 0x10, 0xA3, 0xF0, 0x80, 0x68, 0x90, 0x93, 0x26, 0xE0, 0x14, 0xF0, 0x80, 0xBB, 0xE5,
+0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
+0x4E, 0x60, 0x47, 0x90, 0x93, 0x26, 0x74, 0x0F, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3, 0x94,
+0x00, 0x40, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
+0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
+0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x93, 0x26, 0xE0, 0xA3, 0xF0,
+0x80, 0x0D, 0x90, 0x93, 0x26, 0xE0, 0x14, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0xE5,
+0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
+0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x26, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3, 0x94, 0x10,
+0x40, 0x02, 0xC1, 0xC8, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE,
+0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
+0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x06, 0x90, 0x93, 0x26, 0xE0, 0x80,
+0x63, 0x90, 0x93, 0x26, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5,
+0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93,
+0x26, 0xF0, 0x90, 0x93, 0x26, 0xE0, 0xFF, 0xC3, 0x94, 0x0C, 0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00,
+0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25,
+0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F,
+0x4E, 0x60, 0x08, 0x90, 0x93, 0x26, 0xE0, 0x24, 0x10, 0x80, 0x09, 0x90, 0x93, 0x26, 0xE0, 0x04,
+0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x28, 0xF0, 0x90, 0x93, 0x27, 0xE0, 0xFF, 0x75, 0xF0, 0x09,
+0xE5, 0x57, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xEF, 0xF0, 0x90, 0x93, 0x28, 0xE0, 0xFE, 0x75,
+0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0xE5, 0x57, 0xC3, 0x94,
+0x20, 0x50, 0x2C, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3,
+0x9F, 0x40, 0x02, 0x80, 0x47, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83,
+0xE0, 0xC3, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x28, 0xE0, 0xA3, 0xF0, 0x80, 0x37, 0x80, 0x2D, 0x74,
+0x27, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x27, 0xE0,
+0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x07, 0x90, 0x93, 0x29, 0xEE, 0xF0, 0x80, 0x17, 0x90, 0x93, 0x28,
+0xE0, 0xFE, 0xEF, 0xC3, 0x9E, 0x50, 0x05, 0xA3, 0xEE, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x27, 0xE0,
+0x90, 0x93, 0x29, 0xF0, 0x90, 0x93, 0x29, 0xE0, 0xFD, 0xAF, 0x57, 0x12, 0x70, 0x63, 0x90, 0x93,
+0x29, 0xE0, 0xFF, 0x74, 0xA7, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xEF, 0xF0,
+0x90, 0x93, 0x27, 0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x03, 0xF0,
+0x22, 0xEF, 0xD3, 0x94, 0x0B, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x02, 0xF0, 0x22, 0xEF, 0xD3,
+0x94, 0x03, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x8A, 0x83, 0xF0,
+0x22, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x3F, 0xFE, 0xEF, 0x54, 0x80, 0xC4, 0x13,
+0x13, 0x13, 0x54, 0x01, 0xFD, 0xAF, 0x06, 0x21, 0xDD, 0x12, 0x1E, 0xF6, 0xF5, 0x62, 0x22, 0x90,
+0x93, 0x1A, 0x02, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0x90, 0x89, 0x01, 0xF0, 0x22, 0x12, 0x1E, 0xF6,
+0x90, 0x93, 0x6F, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x60, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE,
+0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xCE,
+0x12, 0x43, 0xC8, 0x90, 0x93, 0xD1, 0xE0, 0x54, 0xF0, 0x44, 0x06, 0xFF, 0xF0, 0xED, 0x54, 0x0F,
+0xC4, 0x54, 0xF0, 0xFE, 0xEF, 0x54, 0x0F, 0x4E, 0xF0, 0x90, 0x93, 0xCE, 0x12, 0x43, 0xA8, 0x90,
+0x93, 0xCB, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xD1, 0x12, 0x5E, 0xBE, 0xD0, 0xD0,
+0x92, 0xAF, 0x22, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x39, 0xEF, 0x30, 0xE0, 0x17, 0xED, 0xC4, 0x54,
+0xF0, 0xFD, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
+0x54, 0x0F, 0x80, 0x10, 0xEF, 0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5,
+0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0,
+0x4D, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x0E,
+0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED, 0xF0, 0x80, 0x2A, 0x74, 0x27,
+0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xED, 0xF0, 0x90, 0x93, 0x8B, 0xEF, 0xF0, 0x24,
+0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x8C, 0xF0, 0x7B, 0x01, 0x7A,
+0x93, 0x79, 0x8B, 0x7D, 0x02, 0x12, 0x6F, 0xE6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x8F, 0x52, 0x8D,
+0x53, 0xE5, 0x53, 0x54, 0x1F, 0x90, 0x93, 0x03, 0xF0, 0x74, 0x01, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0x88, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x01, 0xF0, 0x90, 0x93, 0x04, 0x74, 0x01, 0xF0, 0xEB, 0xC3,
+0x94, 0x01, 0x40, 0x02, 0x80, 0x3B, 0x90, 0x93, 0x01, 0xE0, 0x25, 0x55, 0xFF, 0xA3, 0xF0, 0xA3,
+0xE0, 0x90, 0x41, 0x9E, 0x93, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x13, 0x74, 0x01, 0x25, 0x52, 0xF5,
+0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAD, 0x53, 0xAF, 0x52, 0x01, 0x63, 0x90, 0x93,
+0x02, 0xE0, 0xFF, 0x74, 0x01, 0x25, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEF, 0xF0,
+0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93,
+0x06, 0xF0, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x54, 0x1F, 0x90,
+0x93, 0x05, 0xF0, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0,
+0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x5D,
+0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x85, 0x2D, 0xF5,
+0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0x74, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89,
+0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x85, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x25,
+0xE0, 0x25, 0xE0, 0xFF, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEF, 0xF0,
+0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0xC8, 0x40, 0x0D,
+0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0x74, 0xC8, 0xF0, 0x90, 0x93, 0x06,
+0xE0, 0xFF, 0x90, 0x93, 0x05, 0xE0, 0xD3, 0x9F, 0x40, 0x02, 0xEF, 0xF0, 0x90, 0x93, 0x05, 0xE0,
+0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74,
+0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74,
+0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0,
+0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x05,
+0x90, 0x93, 0x05, 0xE0, 0xFD, 0x11, 0x63, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60,
+0x12, 0x90, 0x04, 0x30, 0xE0, 0x70, 0x0C, 0x04, 0xF0, 0xA3, 0xF0, 0xA3, 0x04, 0xF0, 0x90, 0x04,
+0xCF, 0x04, 0xF0, 0x90, 0x93, 0x05, 0xE0, 0xFF, 0x22, 0xAC, 0x07, 0xEC, 0xC3, 0x94, 0x20, 0x50,
+0x13, 0x74, 0x84, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93,
+0x1F, 0xF0, 0x80, 0x11, 0x74, 0x27, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54,
+0x7F, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x93, 0x22, 0xF0,
+0x75, 0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x24, 0xF0, 0x75,
+0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0x90, 0x93, 0x25, 0xF0, 0xEC,
+0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90,
+0x93, 0x26, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34,
+0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x28, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x74,
+0xC6, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C,
+0x90, 0x93, 0x25, 0xE0, 0x90, 0x93, 0x22, 0xF0, 0x90, 0x93, 0x1F, 0xF0, 0xED, 0x70, 0x02, 0x61,
+0xA3, 0x90, 0x93, 0x23, 0xED, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x93, 0x22,
+0xE0, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x93, 0x23, 0xE0, 0x14, 0xF0, 0x90, 0x93, 0x23, 0xE0, 0x70,
+0x02, 0x61, 0xA3, 0x90, 0x93, 0x22, 0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02, 0x61, 0xA3, 0xE4,
+0x90, 0x93, 0x21, 0xF0, 0xEF, 0x14, 0x90, 0x93, 0x20, 0xF0, 0x90, 0x93, 0x24, 0xE0, 0xFD, 0x90,
+0x93, 0x20, 0xE0, 0xFF, 0xD3, 0x9D, 0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0,
+0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8,
+0xF9, 0xFF, 0x90, 0x93, 0x28, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93,
+0x20, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80,
+0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x26, 0xE0, 0x5E, 0xFE, 0xA3,
+0xE0, 0x5F, 0x4E, 0x60, 0x1A, 0x90, 0x93, 0x20, 0xE0, 0x90, 0x93, 0x1F, 0xF0, 0x90, 0x93, 0x21,
+0xE0, 0x04, 0xF0, 0x90, 0x93, 0x23, 0xE0, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0x6F, 0x60, 0x08, 0x90,
+0x93, 0x20, 0xE0, 0x14, 0xF0, 0x80, 0x83, 0x90, 0x93, 0x23, 0xE0, 0xFF, 0x90, 0x93, 0x21, 0xE0,
+0xC3, 0x9F, 0x50, 0x0F, 0x90, 0x93, 0x20, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x93, 0x24, 0xE0, 0x90,
+0x93, 0x1F, 0xF0, 0x90, 0x93, 0x1F, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34,
+0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5,
+0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13,
+0xFE, 0xEF, 0x13, 0xFF, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83,
+0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x90, 0x93, 0x1F, 0xE0, 0xFD, 0x11, 0x63, 0x90, 0x93,
+0x1F, 0xE0, 0xFF, 0x22, 0xAD, 0x07, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2D, 0xF5,
+0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x1F, 0xF0, 0x80, 0x11, 0x74,
+0x27, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x1F, 0xF0,
+0x90, 0x93, 0x1F, 0xE0, 0xF9, 0x54, 0x1F, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88,
+0x12, 0x43, 0x9C, 0xE0, 0xFF, 0x90, 0x93, 0x22, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82,
+0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x23, 0xCB, 0xF0, 0xA3, 0xEB,
+0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3,
+0xE0, 0x90, 0x93, 0x25, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x93, 0x20, 0xE0, 0xFE, 0x25, 0xE0,
+0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB,
+0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB,
+0xF0, 0xEE, 0xC3, 0x9F, 0x40, 0x02, 0xA1, 0x51, 0x90, 0x93, 0x20, 0xE0, 0xFF, 0x74, 0x28, 0x2D,
+0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0xEF, 0x04, 0x90, 0x93, 0x21, 0xF0, 0x90,
+0x93, 0x22, 0xE0, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0xFE, 0xD3, 0x9F, 0x40, 0x02, 0xA1, 0x8B, 0xEE,
+0xC3, 0x94, 0x10, 0x40, 0x21, 0xEE, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
+0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x23, 0xE0, 0x5E, 0xFE,
+0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93, 0x21, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59,
+0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
+0xFF, 0x90, 0x93, 0x25, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x93, 0x21,
+0xE0, 0xB4, 0x11, 0x0D, 0x90, 0x93, 0x24, 0xE0, 0x30, 0xE7, 0x06, 0x90, 0x93, 0x21, 0x74, 0x17,
+0xF0, 0x90, 0x93, 0x21, 0xE0, 0xFF, 0x64, 0x13, 0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x93,
+0x23, 0xE0, 0x30, 0xE0, 0x06, 0x90, 0x93, 0x21, 0x74, 0x18, 0xF0, 0x90, 0x93, 0x21, 0xE0, 0x90,
+0x93, 0x20, 0xF0, 0x90, 0x93, 0x1F, 0xF0, 0x80, 0x42, 0x90, 0x93, 0x21, 0xE0, 0x04, 0xF0, 0x81,
+0xAF, 0x90, 0x93, 0x22, 0xE0, 0xFC, 0x90, 0x93, 0x20, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0x28,
+0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A,
+0x8A, 0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01, 0x10, 0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x93, 0x20, 0xE0,
+0x44, 0x40, 0x90, 0x93, 0x1F, 0xF0, 0x80, 0x03, 0xAF, 0x01, 0x22, 0x90, 0x93, 0x20, 0xE0, 0xFF,
+0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01,
+0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01,
+0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24,
+0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90,
+0x93, 0x20, 0xE0, 0xD3, 0x9C, 0x40, 0x5E, 0x90, 0x93, 0x22, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5,
+0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x20, 0xEF, 0xF0, 0x90, 0x93, 0x1F,
+0xF0, 0xFC, 0xA3, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83,
+0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
+0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13,
+0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3,
+0xEF, 0xF0, 0xAF, 0x04, 0x22, 0x74, 0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4,
+0xF0, 0xAF, 0x05, 0x90, 0x93, 0x1F, 0xE0, 0x44, 0x80, 0xFD, 0x11, 0x63, 0x90, 0x93, 0x1F, 0xE0,
+0x44, 0x80, 0xFF, 0x22, 0xE4, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xC3, 0x94,
+0x40, 0x40, 0x03, 0x02, 0x7E, 0x57, 0xEF, 0xB4, 0x20, 0x14, 0x90, 0x8F, 0x46, 0xE0, 0x04, 0xF0,
+0x90, 0x89, 0x01, 0xE0, 0xFF, 0x90, 0x8F, 0x46, 0xE0, 0xB5, 0x07, 0x02, 0xE4, 0xF0, 0x90, 0x93,
+0x0F, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0xE0, 0x64, 0x01, 0x60,
+0x03, 0x02, 0x7E, 0x4E, 0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83,
+0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x94, 0x00, 0xEE, 0x94, 0x00, 0x50, 0x03, 0x02, 0x7E, 0x4E, 0x90,
+0x93, 0x0F, 0xE0, 0x94, 0x20, 0x40, 0x09, 0x90, 0x8F, 0x46, 0xE0, 0x60, 0x03, 0x02, 0x7E, 0x57,
+0x90, 0x93, 0x0F, 0xE0, 0x75, 0xF0, 0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75,
+0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34,
+0x87, 0xF5, 0x83, 0xE0, 0xFD, 0xA3, 0xE0, 0x90, 0x93, 0x14, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF,
+0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
+0x93, 0x16, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x50,
+0x13, 0x74, 0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93,
+0x10, 0xF0, 0x80, 0x14, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
+0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93, 0x10, 0xF0, 0x90, 0x93, 0x10, 0xE0, 0xFE, 0x54, 0x1F, 0xA3,
+0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0,
+0x90, 0x93, 0x19, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3,
+0x94, 0x05, 0x40, 0x03, 0x02, 0x79, 0xEC, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x90, 0x93, 0x11, 0xE0,
+0x9F, 0x40, 0x13, 0x90, 0x93, 0x19, 0xE0, 0x90, 0x93, 0x11, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0x90,
+0x93, 0x10, 0xF0, 0xEF, 0x4E, 0xF0, 0x90, 0x93, 0x11, 0xE0, 0xFF, 0x90, 0x41, 0x12, 0x93, 0xFE,
+0x90, 0x93, 0x0F, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xC3, 0x9E,
+0x40, 0x06, 0xEF, 0x90, 0x40, 0xDA, 0x80, 0x07, 0x90, 0x93, 0x11, 0xE0, 0x90, 0x40, 0xF6, 0x93,
+0x90, 0x93, 0x18, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x50, 0xF9, 0x74,
+0x40, 0x35, 0xF0, 0xFA, 0x7B, 0xFF, 0x8B, 0x57, 0xF5, 0x58, 0x89, 0x59, 0x90, 0x93, 0x0F, 0xE0,
+0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90,
+0x93, 0x12, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA,
+0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x9D, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE,
+0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x01, 0x12, 0x1F,
+0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0x12, 0x42, 0xC8,
+0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB,
+0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A,
+0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x04, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C,
+0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90,
+0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00,
+0x06, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0,
+0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF,
+0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x08, 0x12, 0x42, 0xC8, 0xFD, 0xAC,
+0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA,
+0x58, 0xA9, 0x59, 0x90, 0x00, 0x05, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x14, 0xE0,
+0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0xD3, 0x90, 0x93, 0x13, 0xE0, 0x9F, 0x90, 0x93, 0x12,
+0xE0, 0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F, 0xF0, 0x90, 0x93, 0x12, 0xE0, 0x9E, 0xF0, 0x80, 0x07,
+0xE4, 0x90, 0x93, 0x12, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x12, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90,
+0x93, 0x0F, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0,
+0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x10, 0xE0, 0x25, 0xE0, 0x24, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x41,
+0xF5, 0x83, 0xE4, 0x93, 0xFC, 0x74, 0x01, 0x93, 0xFD, 0xD3, 0xEF, 0x9D, 0xEE, 0x9C, 0x50, 0x02,
+0x21, 0xBB, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0x82, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
+0xE0, 0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9E,
+0x40, 0x03, 0xEF, 0x80, 0x1C, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34,
+0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x82, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0,
+0xC3, 0x9E, 0x90, 0x93, 0x1A, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x02, 0x80,
+0x23, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0,
+0xD3, 0x94, 0x01, 0x40, 0x0F, 0x74, 0xC6, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0,
+0x14, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5,
+0x83, 0xE4, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5,
+0x83, 0xE0, 0x60, 0x02, 0x81, 0xFC, 0x12, 0x73, 0xF4, 0x81, 0xFC, 0x90, 0x93, 0x10, 0xE0, 0x25,
+0xE0, 0x24, 0x66, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93,
+0xFF, 0xC3, 0x90, 0x93, 0x13, 0xE0, 0x9F, 0x90, 0x93, 0x12, 0xE0, 0x9E, 0x40, 0x02, 0x81, 0xFC,
+0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x72, 0x29, 0x81, 0xFC, 0x90, 0x93, 0x0F, 0xE0,
+0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x02,
+0x61, 0xCA, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x03, 0x0B, 0x90, 0x93, 0x11, 0xE0, 0xC3, 0x94,
+0x19, 0x40, 0x3D, 0x80, 0x2E, 0xEE, 0xB4, 0x02, 0x0B, 0x90, 0x93, 0x11, 0xE0, 0xC3, 0x94, 0x11,
+0x40, 0x2E, 0x80, 0x1F, 0x90, 0x8A, 0x83, 0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x93, 0x11, 0xE0,
+0xC3, 0x94, 0x0A, 0x40, 0x1B, 0x80, 0x0C, 0xEE, 0x70, 0x11, 0x90, 0x93, 0x11, 0xE0, 0xC3, 0x94,
+0x03, 0x40, 0x0D, 0x90, 0x8E, 0xC5, 0x74, 0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x8E, 0xC5, 0xF0,
+0x90, 0x93, 0x0F, 0xE0, 0xFE, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90,
+0x93, 0x1E, 0xF0, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0xC3,
+0x94, 0x30, 0x50, 0x0A, 0xE4, 0x90, 0x93, 0x1E, 0xF0, 0x74, 0x67, 0x2F, 0x61, 0x75, 0x90, 0x8E,
+0xC5, 0xE0, 0x64, 0x01, 0x60, 0x02, 0x61, 0x6A, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0x06, 0xF5, 0x82,
+0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x64, 0x0A, 0x60, 0x5B, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xEE,
+0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83,
+0xE0, 0xFF, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x38, 0x90, 0x93, 0x0F,
+0xE0, 0xFE, 0xEF, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34,
+0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x9B, 0xEA, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x16, 0x90,
+0x93, 0x0F, 0xE0, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93,
+0x11, 0xE0, 0x6F, 0x60, 0x56, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E,
+0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x42, 0x40, 0x08, 0x90, 0x93, 0x1E, 0x74, 0x05, 0xF0, 0x80,
+0x11, 0xEF, 0xD3, 0x94, 0x39, 0x90, 0x93, 0x1E, 0x40, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74,
+0x01, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
+0xE0, 0xFE, 0x74, 0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93,
+0x0F, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0x80, 0x2F, 0x90, 0x93, 0x0F, 0xE0, 0xFF,
+0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82,
+0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x14, 0xE4, 0x90, 0x93, 0x1E, 0xF0, 0x90,
+0x93, 0x0F, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93,
+0x11, 0xE0, 0xFE, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
+0x83, 0xEE, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFE, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C,
+0xF5, 0x83, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xE0, 0xB4,
+0x01, 0x11, 0xE4, 0x90, 0x93, 0x1E, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5,
+0x83, 0xE4, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFD, 0x81, 0xF9, 0xEC, 0x64, 0x06, 0x60, 0x02, 0x81,
+0xFC, 0x90, 0x93, 0x12, 0xF0, 0xA3, 0xF0, 0x90, 0x41, 0xDB, 0x93, 0xFF, 0x7E, 0x00, 0x90, 0x93,
+0x14, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x1C, 0xEE, 0xF0, 0xA3, 0xEF,
+0xF0, 0x90, 0x93, 0x0F, 0xE0, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90,
+0x93, 0x1E, 0xF0, 0xE4, 0x90, 0x93, 0x1B, 0xF0, 0x90, 0x93, 0x1B, 0xE0, 0xFF, 0xD3, 0x94, 0x04,
+0x50, 0x47, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x75, 0xF0, 0x02, 0xEF, 0xA4, 0xF5, 0x82, 0x85,
+0xF0, 0x83, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0xEF, 0x90, 0x41, 0xD6, 0x93, 0xFF, 0x7E, 0x00,
+0x12, 0x1F, 0x3C, 0x90, 0x93, 0x12, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0x1C, 0xE0,
+0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x93, 0x13, 0xE0, 0x9F, 0x90, 0x93, 0x12, 0xE0, 0x9E, 0x50,
+0x08, 0x90, 0x93, 0x1B, 0xE0, 0x04, 0xF0, 0x80, 0xAF, 0x90, 0x93, 0x1B, 0xE0, 0xC3, 0x13, 0xF0,
+0x90, 0x93, 0x1E, 0xE0, 0xFF, 0xB4, 0x01, 0x0D, 0x90, 0x93, 0x1B, 0xE0, 0x70, 0x5D, 0x90, 0x93,
+0x1E, 0x04, 0xF0, 0x80, 0x5B, 0xEF, 0xB4, 0x03, 0x1D, 0x90, 0x93, 0x1B, 0xE0, 0xFF, 0x70, 0x08,
+0x90, 0x93, 0x1E, 0x74, 0x03, 0xF0, 0x80, 0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x1E, 0x74,
+0x01, 0xF0, 0x80, 0x3C, 0x80, 0x35, 0x90, 0x93, 0x1E, 0xE0, 0x64, 0x05, 0x70, 0x32, 0x90, 0x93,
+0x1B, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93, 0x1E, 0x74, 0x05, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x93,
+0x1E, 0xB4, 0x01, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3, 0x90, 0x93, 0x17,
+0xE0, 0x94, 0x03, 0x90, 0x93, 0x16, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x1E, 0xF0,
+0xD3, 0x90, 0x93, 0x17, 0xE0, 0x94, 0x03, 0x90, 0x93, 0x16, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4,
+0x90, 0x93, 0x1E, 0xF0, 0x90, 0x93, 0x1E, 0xE0, 0xFD, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x24, 0xC4,
+0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xED, 0xF0, 0x12, 0x70, 0x23, 0x90, 0x93, 0x0F, 0xE0,
+0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x05, 0x50, 0x0F,
+0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x0F, 0x90,
+0x93, 0x0F, 0xE0, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93,
+0x16, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3, 0x74, 0xFF, 0x9F, 0xFF, 0x74, 0xFF, 0x9E, 0xFE, 0x90,
+0x93, 0x0F, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
+0xFA, 0xA3, 0xE0, 0xD3, 0x9F, 0xEA, 0x9E, 0x50, 0x1C, 0x90, 0x93, 0x16, 0xE0, 0xFE, 0xA3, 0xE0,
+0xFF, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEE, 0x8F, 0xF0,
+0x12, 0x42, 0x87, 0x80, 0x14, 0x90, 0x93, 0x0F, 0xE0, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x25, 0xE0,
+0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0x74,
+0xFF, 0x9D, 0xFB, 0x74, 0xFF, 0x9C, 0xFA, 0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34,
+0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x9B, 0xEE, 0x9A, 0x90, 0x93, 0x0F, 0xE0, 0x50,
+0x13, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEC, 0x8D, 0xF0, 0x12,
+0x42, 0x87, 0x80, 0x10, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74,
+0xFF, 0xF0, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x00,
+0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90,
+0x00, 0x04, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43,
+0x1F, 0x90, 0x00, 0x08, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0x25,
+0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
+0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25,
+0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x93,
+0x0F, 0xE0, 0x04, 0xF0, 0x02, 0x76, 0x59, 0x22, 0x90, 0x04, 0x44, 0x74, 0x11, 0xF0, 0xA3, 0x74,
+0xF0, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3, 0xE4, 0xF0, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x93, 0x0F,
+0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x14, 0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5,
+0x83, 0xE4, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8F, 0x46, 0xF0,
+0x90, 0x89, 0x01, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0xFF, 0xC3,
+0x94, 0x40, 0x40, 0x03, 0x02, 0x80, 0x53, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x00, 0x12, 0x43,
+0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12, 0x43, 0x9C, 0xE4,
+0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x04, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3,
+0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x06, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75,
+0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x08, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0xA7, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83,
+0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0,
+0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0,
+0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0,
+0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0,
+0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0,
+0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0,
+0xA3, 0xF0, 0x74, 0x07, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC7,
+0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4,
+0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x8E, 0x04, 0xF0, 0x90, 0x41, 0x8C, 0x93, 0xFE, 0x74,
+0x01, 0x93, 0xFF, 0x90, 0x41, 0x54, 0x74, 0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13,
+0xFE, 0xEF, 0x13, 0xFF, 0x90, 0x93, 0x0F, 0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
+0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8B,
+0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C,
+0x74, 0x01, 0xF0, 0x74, 0xC2, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0C, 0xF0,
+0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x75,
+0xF0, 0x09, 0xED, 0x90, 0x8A, 0x84, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0x75,
+0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09, 0xED,
+0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x0F, 0x74, 0x84,
+0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x80, 0x0D, 0x74, 0x27, 0x2D,
+0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0x74, 0x13, 0xF0, 0x90, 0x93, 0x0F, 0xE0, 0x04, 0xF0,
+0x02, 0x7E, 0x9A, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0xC3, 0x94, 0x40, 0x50, 0x14, 0x90, 0x00, 0x02,
+0x12, 0x1F, 0x0F, 0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEE, 0xF0,
+0x22, 0xEF, 0xB4, 0x40, 0x0A, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x8A, 0x82, 0xF0, 0x22,
+0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFC, 0xED, 0xC3,
+0x94, 0x40, 0x40, 0x02, 0xE4, 0xFD, 0xEC, 0xC3, 0x94, 0x40, 0x40, 0x02, 0xE4, 0xFC, 0xED, 0x25,
+0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93,
+0x1A, 0xF0, 0xEE, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5,
+0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x1C, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xED, 0xF0, 0xA3,
+0x74, 0xFF, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
+0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x20, 0xF0, 0xEE, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5,
+0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x22, 0xF0, 0xEE, 0xA3,
+0xF0, 0xA3, 0xEC, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x1A, 0x02, 0x5F,
+0x97, 0x7F, 0xAF, 0x7E, 0x01, 0x90, 0x93, 0xDB, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xA3, 0xF0,
+0xA3, 0xF0, 0x90, 0x93, 0xDB, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0xE0, 0x60, 0x2C,
+0xC3, 0x90, 0x93, 0xDE, 0xE0, 0x94, 0xE8, 0x90, 0x93, 0xDD, 0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90,
+0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x93, 0xDD, 0xE4, 0x75, 0xF0, 0x01,
+0x12, 0x42, 0x87, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x80, 0xC6, 0x7F, 0x01, 0x22, 0xD3,
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0xC2, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x68, 0xE0,
+0xFF, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x65, 0x31, 0x51, 0xEF, 0x70, 0x02, 0x41,
+0x5C, 0x90, 0x93, 0xC2, 0x12, 0x43, 0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x75, 0x27, 0x02,
+0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0x12, 0x57, 0xF9, 0x90, 0x93, 0xC5, 0x12, 0x43, 0xA8, 0x8B,
+0x24, 0x8A, 0x25, 0x89, 0x26, 0x90, 0x93, 0xC2, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4,
+0x54, 0x0F, 0xF5, 0x27, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2, 0x12, 0x57, 0xF9, 0x90, 0x01, 0xAF,
+0x74, 0xFF, 0xF0, 0x90, 0x93, 0x70, 0xE0, 0x64, 0x01, 0x70, 0x4A, 0x90, 0x93, 0xC2, 0x12, 0x43,
+0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x75, 0x27, 0x02, 0x7B, 0x01, 0x7A, 0xFD, 0x79, 0x20,
+0x12, 0x57, 0xF9, 0x90, 0x93, 0xC5, 0x12, 0x43, 0xA8, 0x8B, 0x24, 0x8A, 0x25, 0x89, 0x26, 0x90,
+0x93, 0xC2, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x27, 0x7B, 0x01,
+0x7A, 0xFD, 0x79, 0x22, 0x12, 0x57, 0xF9, 0x90, 0x93, 0x54, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82,
+0x8E, 0x83, 0x74, 0xFF, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x92, 0x69, 0xE0, 0x75, 0xF0, 0x0F, 0xA4,
+0x24, 0x6B, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x02, 0xC0, 0x01, 0xE0, 0x75,
+0xF0, 0x0F, 0xA4, 0x24, 0x6D, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x90, 0x93, 0xC5, 0x12, 0x43,
+0xC8, 0xD0, 0x01, 0xD0, 0x02, 0x31, 0x9F, 0x90, 0x92, 0x69, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A,
+0x02, 0xE4, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90, 0x92, 0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D,
+0x02, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE4, 0x90, 0x92, 0x69, 0xF0,
+0xA3, 0xF0, 0x90, 0x01, 0xAF, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93,
+0x1A, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x1D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93,
+0x1A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x50, 0xF0, 0x90, 0x00,
+0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x33, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54,
+0x01, 0x90, 0x93, 0x34, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x01, 0x90, 0x93, 0x3E, 0xF0, 0x90, 0x00,
+0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x3B, 0xF0, 0xEF, 0x13, 0x13,
+0x13, 0x54, 0x01, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x54,
+0x01, 0x90, 0x93, 0x3D, 0xF0, 0xEF, 0xC4, 0x13, 0x54, 0x01, 0x90, 0x93, 0x52, 0xF0, 0x90, 0x00,
+0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x40, 0xF0, 0xE0, 0x70,
+0x38, 0x90, 0x93, 0x3E, 0xE0, 0x70, 0x10, 0xFF, 0x12, 0x50, 0x56, 0x90, 0x93, 0x1D, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x03, 0x10, 0x80, 0x0F, 0x7F, 0x01, 0x12, 0x50, 0x56, 0x90, 0x93, 0x1D, 0x12,
+0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x90, 0x93, 0x1D, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12,
+0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x34, 0xE0, 0x70, 0x03, 0x12,
+0x4F, 0x63, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x4C, 0xDF, 0x90, 0x93, 0x50, 0xE0, 0x90,
+0x01, 0xE6, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x30,
+0xE0, 0x25, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x3F, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
+0x93, 0x42, 0xF0, 0xEF, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x3C, 0xF0, 0x90, 0x00, 0x03, 0x12,
+0x1F, 0x0F, 0x90, 0x93, 0x47, 0xF0, 0x22, 0x90, 0x93, 0x3F, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x42,
+0x74, 0x05, 0xF0, 0x90, 0x93, 0x3C, 0x74, 0x14, 0xF0, 0x90, 0x93, 0x47, 0x74, 0x05, 0xF0, 0x22,
+0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x19, 0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x46, 0xF0, 0x90, 0x00,
+0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x44, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90,
+0x93, 0x46, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x44, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x93,
+0x44, 0xE0, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x43, 0xF0,
+0x60, 0x19, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x48, 0xF4, 0x90, 0x93, 0x34, 0xE0, 0x60, 0x09, 0x90,
+0x93, 0x4D, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0x63, 0x12, 0x51, 0x4C, 0x90, 0x93, 0x43, 0xE0, 0x90,
+0x01, 0xE7, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x2D, 0xE0, 0x54,
+0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x0F, 0xFF, 0xE0, 0x54, 0xF0, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54,
+0x70, 0xFF, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0x8F, 0x4F, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
+0x90, 0x93, 0x2F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x30, 0xF0, 0x90, 0x00,
+0x04, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x31, 0xF0, 0x90, 0x00, 0x01, 0x74, 0x19, 0x12, 0x42, 0x20,
+0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xD3, 0x94, 0x20, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74,
+0x01, 0xF0, 0x80, 0x57, 0xEF, 0xD3, 0x94, 0x40, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x02, 0xF0,
+0x80, 0x49, 0xEF, 0xD3, 0x94, 0x60, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x03, 0xF0, 0x80, 0x3B,
+0xEF, 0xD3, 0x94, 0x80, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x04, 0xF0, 0x80, 0x2D, 0xEF, 0xD3,
+0x94, 0xA0, 0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x05, 0xF0, 0x80, 0x1F, 0xEF, 0xD3, 0x94, 0xC0,
+0x50, 0x08, 0x90, 0x93, 0x2E, 0x74, 0x06, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0xE0, 0x90, 0x93,
+0x2E, 0x50, 0x05, 0x74, 0x07, 0xF0, 0x80, 0x03, 0x74, 0x08, 0xF0, 0x90, 0x93, 0x2E, 0xE0, 0x90,
+0x93, 0x32, 0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x1E, 0xF6, 0xFE, 0xAF, 0x05, 0xED,
+0x2E, 0x90, 0x93, 0x67, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93,
+0x68, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x69, 0xF0, 0x90,
+0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0x6A, 0xF0, 0x90, 0x00, 0x04, 0x12,
+0x1F, 0x0F, 0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90, 0x93, 0x6B, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01,
+0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xC8, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x12, 0x1E,
+0xF6, 0xC3, 0x13, 0x20, 0xE0, 0x02, 0xC1, 0xB6, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E,
+0xF6, 0xFF, 0x54, 0x02, 0xFE, 0x90, 0x93, 0x9E, 0xE0, 0x54, 0xFD, 0x4E, 0xFE, 0xF0, 0xEF, 0x54,
+0x01, 0xFF, 0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x08, 0xFD, 0xEF,
+0x54, 0xF7, 0x4D, 0xFF, 0x90, 0x93, 0x9E, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E,
+0xFF, 0xF0, 0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x20, 0xFD, 0xEF, 0x54, 0xDF, 0x4D, 0xFF, 0x90, 0x93,
+0x9E, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0xEF, 0x54, 0xBF, 0x4E, 0xF0, 0x20, 0xE0, 0x02, 0xC1, 0xA2,
+0x90, 0x93, 0x1D, 0x74, 0x21, 0xF0, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF,
+0x13, 0x13, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x9E, 0xE0, 0xFD, 0x13, 0x13, 0x54, 0x01, 0x6E, 0x60,
+0x31, 0xEF, 0x54, 0x04, 0xFF, 0xED, 0x54, 0xFB, 0x4F, 0xF0, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30,
+0xE0, 0x15, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x3A, 0x93, 0x90, 0x93,
+0x1D, 0xE0, 0x44, 0x08, 0xF0, 0x80, 0x0B, 0xE4, 0x90, 0x93, 0xA0, 0xF0, 0x7D, 0x40, 0xFF, 0x12,
+0x3A, 0x22, 0x90, 0x93, 0x9E, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90,
+0x93, 0x1D, 0xE0, 0x44, 0x12, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x93, 0x1D,
+0xE0, 0x44, 0x14, 0xF0, 0x90, 0x93, 0x9E, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x07, 0x90,
+0x93, 0x1D, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x93, 0x9E, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20,
+0xE0, 0x07, 0x90, 0x93, 0x1D, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93, 0x1D, 0xE0, 0x90, 0x05, 0x27,
+0xF0, 0x90, 0x93, 0x9F, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x55, 0x11, 0x90, 0x93, 0x9E, 0xE0,
+0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x04, 0x7F, 0x03, 0x80, 0x0E, 0x7F, 0x01, 0x12, 0x5E,
+0x91, 0xEF, 0x60, 0x04, 0x7F, 0x01, 0x80, 0x02, 0x7F, 0x02, 0x12, 0x55, 0x11, 0x7F, 0x02, 0x02,
+0x88, 0x14, 0x90, 0x93, 0x1D, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27, 0xF0, 0xE4, 0xFF, 0x12, 0x55,
+0x11, 0x7F, 0x03, 0x02, 0x88, 0x14, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF,
+0x54, 0x02, 0xFE, 0x90, 0x93, 0x98, 0xE0, 0x54, 0xFD, 0x4E, 0xFE, 0xF0, 0xEF, 0x54, 0x01, 0xFF,
+0xEE, 0x54, 0xFE, 0x4F, 0xFF, 0xF0, 0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x08, 0xFD, 0xEF, 0x54, 0xF7,
+0x4D, 0xFF, 0x90, 0x93, 0x98, 0xF0, 0xEE, 0x54, 0x10, 0xFE, 0xEF, 0x54, 0xEF, 0x4E, 0xFF, 0xF0,
+0x12, 0x1E, 0xF6, 0xFE, 0x54, 0x40, 0xFD, 0xEF, 0x54, 0xBF, 0x4D, 0xFF, 0x90, 0x93, 0x98, 0xF0,
+0xEE, 0x54, 0x04, 0xFE, 0xEF, 0x54, 0xFB, 0x4E, 0xF0, 0x20, 0xE0, 0x02, 0xE1, 0xC7, 0x90, 0x93,
+0x1D, 0x74, 0x31, 0xF0, 0x90, 0x93, 0x98, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x15, 0x90,
+0x01, 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x12, 0x3A, 0x93, 0x90, 0x93, 0x1D, 0xE0, 0x44,
+0x08, 0xF0, 0x80, 0x0B, 0xE4, 0x90, 0x93, 0x9A, 0xF0, 0x7D, 0x40, 0xFF, 0x12, 0x3A, 0x22, 0x90,
+0x93, 0x98, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x93, 0x1D, 0xE0,
+0x44, 0x02, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, 0x93, 0x1D, 0xE0, 0x44, 0x04,
+0xF0, 0x90, 0x93, 0x1D, 0xE0, 0x54, 0x0E, 0x60, 0x0C, 0x90, 0x01, 0x3E, 0x74, 0x03, 0xF0, 0xFD,
+0x7F, 0x02, 0x12, 0x3A, 0xAD, 0x90, 0x93, 0x1D, 0xE0, 0x90, 0x05, 0x27, 0xF0, 0x90, 0x93, 0x98,
+0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x0D, 0xA3, 0xE0, 0x64, 0x06, 0x60, 0x33,
+0x7F, 0x06, 0x12, 0x64, 0xDA, 0x80, 0x2C, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93,
+0x99, 0xE0, 0xB4, 0x06, 0x1B, 0x7F, 0x01, 0x12, 0x64, 0xDA, 0xE4, 0xFF, 0x12, 0x5E, 0x91, 0xEF,
+0x60, 0x09, 0x7D, 0x01, 0xAF, 0x64, 0x12, 0x48, 0xF4, 0x80, 0x05, 0x12, 0x64, 0xA8, 0x80, 0x03,
+0x12, 0x67, 0x4A, 0x7F, 0x01, 0x80, 0x4D, 0x90, 0x93, 0x1D, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27,
+0xF0, 0x7D, 0x03, 0x7F, 0x02, 0x12, 0x3A, 0x3F, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x06, 0x02, 0x80,
+0x1B, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x04, 0x02, 0x80, 0x07, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x05,
+0x04, 0xE4, 0xFF, 0x80, 0x14, 0x90, 0x93, 0x99, 0xE0, 0xB4, 0x03, 0x04, 0x7F, 0x01, 0x80, 0x09,
+0x90, 0x93, 0x99, 0xE0, 0xB4, 0x02, 0x05, 0x7F, 0x01, 0x12, 0x64, 0xDA, 0x12, 0x67, 0x29, 0x12,
+0x51, 0x9C, 0x7F, 0x03, 0x11, 0x1B, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAD, 0x07, 0xEF, 0x64, 0x01,
+0x60, 0x04, 0xEF, 0xB4, 0x03, 0x15, 0x90, 0x93, 0x9E, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0,
+0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xED, 0x64, 0x02, 0x60, 0x04,
+0xED, 0xB4, 0x03, 0x15, 0x90, 0x93, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3,
+0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x6D,
+0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x6E, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0xE5,
+0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xEB, 0xE0, 0x54, 0xC0, 0x60, 0x43, 0xC3, 0x90, 0x93, 0xE6, 0xE0,
+0x94, 0x88, 0x90, 0x93, 0xE5, 0xE0, 0x94, 0x13, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x04,
+0xF0, 0x7F, 0x00, 0x22, 0x90, 0x93, 0xE5, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14,
+0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x93, 0xE6, 0xE0, 0x94, 0x64, 0x90, 0x93, 0xE5, 0xE0,
+0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE2, 0xB8, 0x7F, 0x00, 0x22, 0x7F, 0x01,
+0x22, 0x90, 0x93, 0xA4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xA8, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00,
+0x00, 0xE4, 0x7F, 0x1F, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0xA8, 0x12, 0x43, 0x90, 0xD3, 0x12, 0x43,
+0x73, 0x50, 0x41, 0x90, 0x93, 0xA8, 0x12, 0x43, 0x84, 0xA9, 0x07, 0x90, 0x93, 0xA4, 0x12, 0x43,
+0x84, 0xA8, 0x01, 0x12, 0x1F, 0xA3, 0xEF, 0x54, 0x01, 0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0x7B, 0x01,
+0xFA, 0xF9, 0xF8, 0xC3, 0x12, 0x43, 0x73, 0x60, 0x1B, 0x90, 0x93, 0xA8, 0x12, 0x43, 0x84, 0xEF,
+0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD, 0xE4, 0x3C, 0xFC, 0x90, 0x93, 0xA8, 0x12,
+0x1F, 0xC9, 0x80, 0xAD, 0x90, 0x93, 0xA8, 0x02, 0x43, 0x84, 0x90, 0x93, 0x73, 0x12, 0x1F, 0xC9,
+0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0x77, 0x12, 0x43, 0x90, 0xC3, 0x12, 0x43, 0x73,
+0x90, 0x93, 0x73, 0x60, 0x67, 0x12, 0x43, 0x84, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0x7F, 0x12, 0x1F,
+0xC9, 0x90, 0x93, 0x77, 0x12, 0x43, 0x84, 0x11, 0xC1, 0x90, 0x93, 0x83, 0x12, 0x1F, 0xC9, 0x90,
+0x93, 0x77, 0x12, 0x43, 0x84, 0x12, 0x43, 0x66, 0x90, 0x93, 0x7F, 0x12, 0x43, 0x90, 0x12, 0x43,
+0x4C, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0x83, 0x12, 0x43, 0x84, 0xA9,
+0x07, 0x90, 0x93, 0x7B, 0x12, 0x43, 0x84, 0xA8, 0x01, 0x12, 0x1F, 0xB6, 0xD0, 0x03, 0xD0, 0x02,
+0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0x59, 0x90, 0x93, 0x87, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0x73,
+0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0x87, 0x80, 0x0A, 0x12, 0x43, 0x84, 0xC0,
+0x06, 0xC0, 0x07, 0x90, 0x93, 0x7B, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0xD0,
+0x07, 0xD0, 0x06, 0x02, 0x34, 0x30, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x9F, 0x74,
+0x04, 0xF0, 0x22, 0x12, 0x56, 0x01, 0x80, 0xEE, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x05,
+0x27, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x93, 0x9F, 0x74, 0x04, 0xF0, 0x22, 0x12, 0x56, 0x14, 0x90,
+0x93, 0x9F, 0x74, 0x04, 0xF0, 0x22, 0x90, 0x01, 0x57, 0xE0, 0x60, 0x3C, 0x90, 0x01, 0x57, 0xE4,
+0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x51, 0xE0, 0x60, 0x07, 0xE4, 0xF0, 0x53,
+0x66, 0xFD, 0x80, 0x24, 0x90, 0x93, 0x38, 0xE0, 0x04, 0xF0, 0x53, 0x66, 0xEF, 0x90, 0x93, 0x3F,
+0xE0, 0xFF, 0x90, 0x93, 0x38, 0xE0, 0xD3, 0x9F, 0x40, 0x0E, 0xE5, 0x62, 0xB4, 0x01, 0x09, 0x90,
+0x93, 0x39, 0xE0, 0x70, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x5B, 0xE0, 0x60, 0x10, 0x90, 0x01,
+0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x4C, 0xF0, 0x90, 0x01,
+0x5F, 0xE0, 0x60, 0x10, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0xE4,
+0x90, 0x93, 0x49, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0xE7, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0,
+0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01,
+0x22, 0xD3, 0x90, 0x93, 0xE8, 0xE0, 0x94, 0xE8, 0x90, 0x93, 0xE7, 0xE0, 0x94, 0x03, 0x40, 0x03,
+0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x93, 0xE7, 0xE4, 0x75, 0xF0,
+0x01, 0x12, 0x42, 0x87, 0x80, 0xC6, 0xE4, 0xFF, 0x02, 0x4E, 0x8B, 0x90, 0x93, 0x1A, 0x12, 0x43,
+0xC8, 0x12, 0x1E, 0xF6, 0x54, 0x01, 0xFF, 0x90, 0x93, 0xE0, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xE0,
+0x30, 0xE0, 0x02, 0x51, 0xA6, 0x90, 0x93, 0x1A, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xC3, 0x13,
+0x30, 0xE0, 0x0A, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0xE1, 0xF0, 0x22, 0x7E, 0xBF,
+};
+
+#ifdef CONFIG_MP_INCLUDED//BT_MP 16980 const u1Byte Rtl8723EFwBTImgArray[Rtl8723EBTImgArrayLength] = {
+u8 Rtl8723EFwBTImgArray[Rtl8723EBTImgArrayLength] = {
+0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x55,0xB2,0xCD,0xF7,0x12,0x6B,0x6B,0xEB,0x51,0xB7,0x60,0xCA,0x53,0xB2,0x64,0xF3,0x13,0x6B,0x6B,0xEB,0xE8,0x4F,0x60,0xCA,0x51,0xB2,0x00,0x6B,0x40,0xF0,0x6C,0xC7,0x60,0xC2,0xC0,0xF0,0x58,0x9F,0x4F,0xB3,0x51,0xB0,0x00,0x69,0x6D,0xEA,0xC0,0xF0,0x58,0xDF,0x45,0xF1,0x09,0x6A,0x00,0xF1,0x50,0xCF,0x0E,0xF0,0x1D,0x6A,0x80,0xF1,0x62,0xA7,0x43,0xDF,0x48,0xB2,0x25,0xDF,0x26,0xDF,0x44,0xDF,0x68,0x32,0x69,0xE2,0x46,0xB3,0x44,0x32,0x27,0xDF,0x28,0xDF,0x29,0xDF,0x40,0xCB,0x90,0x67,0xB1,0x67,0x30,0x6E,0x00,0x18,0x64,0x2E,0x04,0xD7,0x01,0x6A,0x4B,0xEA,0x47,0xD8,0x41,0xB3,0x40,0x98,0x42,0xB4,0xB1,0x67,0x6D,0xEA,0x40,0xD8,0x0A,0x6A,0x4C,0xC0,0x08,0x6A,0x4D,0xC0,0x3D,0xB2,0x0C,0x6E,0x00,0x18,0x64,0x2E,0x20,0xC2,0x30,0xB3,0x03,0x6A,0x30,0xB5,0x80,0x9B,0x02,0x6B,0x6B,0xEB,0x6C,0xEC,0x4B,0xEA,0x4C,0xEC,0x05,0x6A,0x4B,0xEA,0x4C,0xEC,0x40,0x9D,0x6C,0xEA,0x40,0xDD,0x04,0x97,0x0E,0xF0,0x1D,0x6A,0x34,0xB3,0x43,0xDF,0x32,0xB2,0x60,0xDA,0x34,0xB3,0x33,0xB2,0x60,0xDA,0x35,0xB3,0x33,0xB2,0x60,0xDA,0x35,0xB3,0x34,0xB2,0x60,0xDA,0x36,0xB3,0x34,0xB2,0x60,0xDA,0x36,0xB3,0x35,0xB2,0x60,0xDA,0x37,0xB3,0x35,0xB2,0x60,0xDA,0x37,0xB3,0x36,0xB2,0x60,0xDA,0x38,0xB3,0x36,0xB2,0x60,0xDA,0x38,0xB3,0x37,0xB2,0x60,0xDA,0x39,0xB3,0x37,0xB2,0x60,0xDA,0x39,0xB3,0x38,0xB2,0x60,0xDA,0x3A,0xB3,0x38,0xB2,0x60,0xDA,0x3A,0xB3,0x39,0xB2,0x60,0xDA,0x3B,0xB3,0x39,0xB2,0x60,0xDA,0x3B,0xB3,0x3A,0xB2,0x60,0xDA,0x3B,0xB2,0x3C,0xB3,0x20,0xCA,0x3A,0xB2,0x60,0xDA,0x3B,0xB2,0x08,0xF1,0x11,0x6B,0x6B,0xEB,0x20,0xCA,0x3A,0xB2,0x60,0xCA,0x3A,0xB2,0x20,0xDA,0x3A,0xB2,0x20,0xDA,0x3A,0xB2,0x06,0xB3,0x4C,0xEC,0x39,0xB2,0x4D,0xEC,0x80,0x18,0x5A,0x37,0x80,0xDB,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0xF4,0x00,0x11,0x80,0xF0,0x00,0x11,0x80,0xD0,0x04,0x11,0x80,0xD2,0x04,0x11,0x80,0xCA,0xA0,0x11,0x80,0x00,0x00,0x00,0x18,0x58,0xC5,0xC8,0x19,0x08,0xA1,0x11,0x80,0xCC,0xA0,0x11,0x80,0x00,0x00,0x00,0x70,0x1C,0xA1,0x11,0x80,0xFC,0xA0,0x11,0x80,0xBC,0x00,0x11,0x80,0x51,0xA9,0x10,0x80,0x44,0x00,0x11,0x80,0x4D,0xA3,0x10,0x80,0x4C,0x05,0x11,
+0x80,0x55,0xAE,0x10,0x80,0x44,0x05,0x11,0x80,0x59,0xD1,0x10,0x80,0x58,0x09,0x11,0x80,0xF5,0xD4,0x10,0x80,0x3C,0x00,0x11,0x80,0x35,0xA6,0x10,0x80,0xA0,0x05,0x11,0x80,0x51,0xAB,0x10,0x80,0xC4,0x05,0x11,0x80,0xF1,0xA9,0x10,0x80,0x5C,0x05,0x11,0x80,0xBD,0xDB,0x10,0x80,0x90,0x06,0x11,0x80,0x7D,0xCA,0x10,0x80,0x98,0x07,0x11,0x80,0xB5,0xCD,0x10,0x80,0xA0,0x07,0x11,0x80,0x1D,0xCF,0x10,0x80,0x9C,0x07,0x11,0x80,0xC5,0xCF,0x10,0x80,0xEC,0x04,0x11,0x80,0xB5,0xAF,0x10,0x80,0x80,0x00,0x11,0x80,0xCD,0xD2,0x10,0x80,0x6C,0x06,0x11,0x80,0x29,0xD4,0x10,0x80,0x0A,0xA1,0x11,0x80,0xD4,0x04,0x11,0x80,0x25,0xD3,0x10,0x80,0xC8,0xA0,0x11,0x80,0x0C,0xA1,0x11,0x80,0x10,0xA1,0x11,0x80,0x14,0xA1,0x11,0x80,0xFF,0xFF,0x1F,0xFF,0x00,0x00,0x60,0x00,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x04,0x67,0x2F,0x24,0x80,0x98,0x00,0x6A,0x00,0xF4,0x24,0x98,0xBD,0x67,0x00,0xF4,0x44,0xD8,0xE1,0xF7,0x1F,0x6A,0x4C,0xEC,0x00,0x18,0x2A,0xDF,0x10,0x4D,0x12,0x2A,0x5D,0x67,0x68,0xAA,0xFF,0xF7,0x1F,0x6A,0x4C,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x0E,0xB3,0x48,0x32,0x69,0xE2,0xE0,0xF0,0x4B,0xA2,0x01,0x72,0x0A,0x60,0x0B,0xB2,0xB0,0x67,0x00,0x18,0xE0,0x1D,0x83,0x9A,0x07,0x2A,0x00,0x18,0x6A,0x1E,0x11,0x67,0x04,0x10,0x00,0x18,0x7B,0x57,0x90,0x67,0x11,0x67,0xD1,0x29,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0x9C,0x31,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0xFF,0x6B,0x6C,0xEE,0x04,0x76,0x0A,0xD4,0x04,0xD6,0x2B,0x61,0x40,0xA4,0x6C,0xEA,0x03,0x72,0x27,0x61,0x22,0xA4,0x6C,0xE9,0x24,0x29,0x44,0xA4,0x03,0xA4,0x6C,0xEA,0x6C,0xE8,0x40,0x32,0x00,0x1C,0xDD,0x31,0x4D,0xE8,0x13,0xB3,0x1A,0x65,0x40,0xAB,0x0E,0xEA,0x14,0x2A,0x11,0xB2,0x98,0x67,0x00,0x9A,0x20,0xDA,0x10,0xB2,0x20,0xDA,0x08,0xF1,0x11,0x6A,0x4B,0xEA,0x00,0x1C,0xE5,0x31,0x40,0xCB,0x00,0x18,0xA9,0x1D,0x01,0x6C,0x07,0x20,0x80,0x18,0x8A,0x28,0x90,0x67,0x03,0x10,0x00,0x1C,0xE5,0x31,0x98,0x67,0x0A,0x94,0x00,0x18,0xBD,0x89,0x04,0x95,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x0C,0xA1,0x11,0x80,0x10,0xA1,0x11,0x80,0x14,0xA1,0x11,0x80,0x03,0xB2,
+0x01,0x6B,0x40,0x9A,0x52,0x32,0x20,0xE8,0x6C,0xEA,0x50,0x60,0x00,0xB0,0x03,0xB2,0x01,0x6B,0x40,0x9A,0x4A,0x32,0x20,0xE8,0x6C,0xEA,0x50,0x60,0x00,0xB0,0xF3,0x63,0x18,0x62,0x17,0xD1,0x16,0xD0,0x7D,0x67,0x00,0x6A,0x20,0xF0,0x50,0xC3,0xA6,0xB3,0x9D,0x67,0x00,0x69,0x58,0xAB,0x40,0xF0,0x48,0xCC,0x20,0xF0,0x5A,0xA3,0x20,0xF0,0x79,0xA3,0x40,0x32,0x4D,0xEB,0xA1,0xB2,0x0D,0xD3,0x01,0x6B,0x40,0x9A,0x0F,0xD2,0xA0,0xB2,0x40,0x9A,0x0E,0xD2,0x9F,0xB2,0x00,0x9A,0x9F,0xB2,0x40,0x9A,0x10,0xD2,0x0E,0x92,0x6C,0xEA,0x3A,0x22,0xBD,0x67,0x83,0x67,0x30,0x4D,0x00,0x6E,0x00,0x18,0x71,0x23,0x23,0x67,0x02,0x2A,0x03,0x69,0x0B,0x11,0x9D,0x67,0x20,0xF0,0x70,0xA4,0x0F,0x94,0xFF,0x6A,0x4C,0xEB,0x80,0xF7,0x82,0x32,0x2C,0xEA,0x4E,0xEB,0x94,0xB4,0x1B,0x2B,0x92,0xB2,0x4D,0xE8,0x40,0x9C,0x56,0x32,0x2C,0xEA,0x02,0x2A,0x91,0xB2,0x4D,0xE8,0x7D,0x67,0x40,0xF0,0x68,0xAB,0x01,0xF0,0x00,0x6A,0x05,0x69,0x6C,0xEA,0xFF,0xF7,0x1F,0x6B,0x6C,0xEA,0x04,0x22,0x00,0x18,0xA4,0x1D,0x0D,0x94,0x0D,0x10,0x00,0x18,0xA9,0x1D,0x0D,0x94,0x09,0x10,0x88,0xB2,0x4C,0xE8,0x40,0x9C,0x56,0x32,0x2C,0xEA,0x02,0x2A,0x86,0xB2,0x4C,0xE8,0x09,0x69,0x0E,0x94,0x01,0x6F,0x86,0x32,0xEC,0xEA,0x41,0x22,0x7F,0xB3,0x40,0x9B,0x56,0x32,0xEC,0xEA,0x3C,0x22,0xBD,0x67,0x10,0x6A,0xC7,0x67,0x02,0x6C,0x30,0x4D,0x14,0xD7,0x00,0x18,0x71,0x23,0x4D,0xE9,0x14,0x97,0x06,0x2A,0x20,0x6A,0x4D,0xE9,0xFF,0xF7,0x1F,0x6C,0x8C,0xE9,0xC0,0x10,0x0F,0x94,0x5D,0x67,0x20,0xF0,0x70,0xA2,0x40,0xF7,0x82,0x32,0xEC,0xEA,0x4E,0xEB,0x70,0xB2,0x80,0x9A,0x19,0x2B,0x6F,0xB2,0x4D,0xE8,0x44,0x67,0xEC,0xEA,0x02,0x2A,0x6B,0xB2,0x4D,0xE8,0x7D,0x67,0x40,0xF0,0x68,0xAB,0x01,0xF0,0x00,0x6A,0xFF,0xF7,0x1F,0x6C,0x6C,0xEA,0x8C,0xEA,0x04,0x22,0x00,0x18,0xA4,0x1D,0x0D,0x94,0x0B,0x10,0x00,0x18,0xA9,0x1D,0x0D,0x94,0x07,0x10,0x65,0xB2,0x4C,0xE8,0x44,0x67,0xEC,0xEA,0x02,0x2A,0x61,0xB2,0x4C,0xE8,0x0E,0x93,0x01,0x6C,0x6A,0x32,0x8C,0xEA,0x3C,0x22,0x5C,0xB3,0x40,0x9B,0x0F,0x6B,0x46,0xEC,0x6C,0xEA,0x03,0x72,0x35,0x60,0xFF,0x6A,0xBD,0x67,0x01,0x4A,0x04,0x6C,0x30,0x4D,0x02,0x6E,0x00,0x18,0x71,0x23,0x4D,0xE9,0x03,0x2A,0x00,0xF2,0x00,0x6A,0x40,
+0x10,0x9D,0x67,0x20,0xF0,0x50,0xA4,0x50,0xB3,0x80,0x9B,0x11,0x22,0x53,0xB2,0x03,0x6B,0x4D,0xE8,0x82,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,0x04,0x60,0x96,0x32,0x01,0x6C,0x8C,0xEA,0x02,0x2A,0x4E,0xB2,0x4D,0xE8,0x00,0xF4,0x00,0x6A,0x10,0x10,0x4C,0xB2,0x03,0x6B,0x4C,0xE8,0x82,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,0x04,0x60,0x96,0x32,0x01,0x6B,0x6C,0xEA,0x02,0x2A,0x47,0xB2,0x4C,0xE8,0x01,0xF0,0x00,0x6A,0x4D,0xE9,0x0E,0x94,0x01,0x6B,0x8E,0x32,0x6C,0xEA,0x18,0x22,0x3B,0xB2,0x40,0x9A,0x46,0xEB,0x0F,0x6B,0x6C,0xEA,0x03,0x72,0x11,0x60,0xBD,0x67,0x02,0xF0,0x00,0x6A,0x08,0x6C,0x30,0x4D,0x03,0x6E,0x00,0x18,0x71,0x23,0x4D,0xE9,0x07,0x2A,0x04,0xF0,0x00,0x6A,0x4D,0xE9,0xFF,0xF7,0x1F,0x6A,0x4C,0xE9,0x37,0x10,0x04,0x6A,0x2C,0xEA,0x08,0x2A,0x34,0xB2,0x4C,0xE8,0x34,0xB2,0x4C,0xE8,0x2E,0xB2,0x4C,0xE8,0x2E,0xB2,0x4C,0xE8,0xC0,0xF5,0x02,0x32,0x01,0x6B,0x6C,0xEA,0x0C,0x22,0x27,0xB2,0x03,0x6B,0x40,0x9A,0x42,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,0x04,0x61,0x25,0xB2,0x4C,0xE8,0x25,0xB2,0x4C,0xE8,0x29,0xB3,0x50,0x67,0x6C,0xEA,0x6E,0xEA,0x0C,0x2A,0x1F,0xB2,0x03,0x6B,0x40,0x9A,0x42,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,0x04,0x61,0x1F,0xB2,0x4D,0xE8,0x1F,0xB2,0x4D,0xE8,0x22,0xB3,0x50,0x67,0x6C,0xEA,0x6E,0xEA,0x03,0x2A,0x00,0x18,0xBB,0x30,0x00,0x6C,0x12,0xB2,0x00,0xDA,0x05,0x6A,0x10,0x94,0x04,0xD2,0x0B,0x0A,0x05,0xD2,0x0E,0x93,0x0F,0x92,0x0A,0xD4,0xFA,0x6D,0x04,0x6C,0xE1,0xF3,0x09,0x6E,0xA1,0xF1,0x1A,0x6F,0x06,0xD1,0x09,0xD0,0x07,0xD2,0x20,0x18,0x1B,0x32,0x08,0xD3,0x18,0x97,0x17,0x91,0x16,0x90,0x00,0xEF,0x0D,0x63,0x41,0x00,0x00,0x00,0xDC,0x00,0x11,0x80,0x44,0xA0,0x00,0xB0,0x40,0x60,0x00,0xB0,0x40,0xA0,0x00,0xB0,0x50,0xA0,0x00,0xB0,0x00,0x00,0x80,0x00,0x6C,0x1D,0x11,0x80,0x00,0x00,0x40,0x00,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xBF,0xFF,0x00,0x00,0x20,0x00,0x00,0x00,0x10,0x00,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xEF,0xFF,0x00,0x00,0xC0,0x00,0x00,0x00,0x30,0x00,0xF8,0x63,0x0E,0x62,0x0D,0xD1,0x0C,0xD0,0x65,0xB2,0x01,0x6F,0x20,0x9A,0x2A,0x65,0x36,0x36,0xEC,0xEE,0x0B,0x2E,0x63,0xB4,0x03,0x6B,0x6B,0xEB,0x40,0x9C,0x6C,0xEA,0x40,0xDC,0x61,0xB4,0x02,0x6B,0x40,0x9C,
+0x6D,0xEA,0x40,0xDC,0x5F,0xB2,0x00,0x6B,0x0A,0xD3,0xA3,0x67,0x60,0x9A,0x5E,0xB2,0x40,0x9A,0x0A,0x65,0x5D,0xB2,0x00,0x9A,0x51,0x67,0xEC,0xEA,0x10,0x22,0x80,0xF7,0x62,0x32,0x88,0x67,0x8E,0xEA,0xEC,0xEA,0x01,0x5A,0xA7,0x67,0x08,0x60,0x58,0xB2,0x03,0x6D,0x4D,0xE8,0x03,0x2E,0x57,0xB2,0x07,0x6D,0x4D,0xE8,0x0A,0xD7,0x29,0x67,0xC0,0x99,0x01,0x6C,0xD6,0x32,0x8C,0xEA,0x1E,0x22,0x08,0x6A,0x4D,0xED,0x02,0x32,0x52,0x32,0x8C,0xEA,0xFF,0xF7,0x1F,0x6F,0x16,0x22,0x28,0x67,0x26,0x32,0x40,0xF7,0x62,0x33,0x4E,0xEB,0x8C,0xEB,0x83,0xEB,0x0E,0x60,0x10,0x6A,0x4D,0xED,0x49,0xB2,0xEC,0xED,0x4D,0xE8,0x46,0x67,0x8C,0xEA,0x05,0x2A,0x45,0xB2,0x4D,0xE8,0x20,0x6A,0x4D,0xED,0xEC,0xED,0x0A,0xD4,0x68,0x67,0x6A,0x32,0x01,0x6E,0xCC,0xEA,0x16,0x22,0x40,0x6A,0x29,0x67,0x4D,0xED,0x80,0x99,0x3F,0xB2,0x03,0x6B,0x4D,0xE8,0x82,0x32,0x4A,0x32,0x6C,0xEA,0xCA,0xEA,0x03,0x60,0x96,0x32,0xCC,0xEA,0x07,0x2A,0x80,0x6A,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x4C,0xED,0x38,0xB2,0x4D,0xE8,0x02,0x6A,0xAC,0xEA,0x08,0x2A,0x37,0xB2,0x4C,0xE8,0x37,0xB2,0x4C,0xE8,0x37,0xB2,0x4C,0xE8,0x37,0xB2,0x4C,0xE8,0x29,0xB3,0x03,0x69,0x40,0x9B,0x42,0x32,0x4A,0x32,0x2C,0xEA,0x01,0x72,0x04,0x61,0x31,0xB2,0x4C,0xE8,0x2E,0xB2,0x4C,0xE8,0x31,0xB2,0x88,0x67,0x06,0xD5,0x07,0xD4,0xFA,0x6D,0x04,0x6C,0xA1,0xF4,0x0C,0x6E,0xA1,0xF1,0x19,0x6F,0x04,0xD1,0x05,0xD2,0x20,0x18,0x1B,0x32,0x08,0xD0,0x0A,0x92,0x12,0x22,0x29,0xB3,0x50,0x67,0x6C,0xEA,0x6E,0xEA,0x0B,0x2A,0x18,0xB3,0x40,0x9B,0x42,0x32,0x4A,0x32,0x2C,0xEA,0x01,0x72,0x04,0x61,0x1C,0xB2,0x4D,0xE8,0x1C,0xB2,0x4D,0xE8,0x17,0xB2,0x00,0xDA,0x21,0xB2,0x01,0x6C,0xA0,0x9A,0xBE,0x32,0x8C,0xEA,0x17,0x22,0x40,0xF5,0x02,0x32,0x8C,0xEA,0x07,0x22,0x1D,0xB2,0x00,0x6B,0x80,0xC2,0x1D,0xB2,0x60,0xC2,0x1D,0xB2,0x60,0xC2,0xA2,0x32,0x8C,0xEA,0x05,0x22,0x00,0x18,0xA5,0x23,0x00,0x65,0x18,0xB3,0x40,0xC3,0x16,0xB2,0x00,0x18,0x04,0x24,0x80,0xA2,0x0E,0x97,0x0D,0x91,0x0C,0x90,0x00,0xEF,0x08,0x63,0x6C,0x1D,0x11,0x80,0x30,0x60,0x00,0xB0,0x34,0x60,0x00,0xB0,0x44,0xA0,0x00,0xB0,0x50,0x60,0x00,0xB0,0x40,0xA0,0x00,0xB0,0x00,0x00,0x80,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x20,
+0x00,0x00,0x00,0x10,0x00,0xFF,0xFF,0xDF,0xFF,0xFF,0xFF,0xEF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xBF,0xFF,0xF0,0xA5,0x10,0x80,0x00,0x00,0xC0,0x00,0x54,0x45,0x11,0x80,0x17,0x00,0x11,0x80,0x16,0x00,0x11,0x80,0x18,0x00,0x11,0x80,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x34,0xB2,0x00,0x6E,0x01,0x6B,0x20,0x6C,0xFF,0xF7,0x1F,0x6D,0x0A,0x65,0xE6,0x67,0x06,0x67,0x4B,0x65,0x2C,0x65,0x6D,0x65,0x2D,0xB1,0xC8,0x32,0x15,0xE1,0x10,0x27,0x68,0x67,0x69,0xE2,0x80,0x9A,0x6A,0x67,0x64,0xEF,0x86,0xEF,0x80,0xDD,0x41,0x9A,0xFF,0x4B,0x29,0x67,0x6C,0xEA,0xEF,0xE1,0x44,0xEB,0x4D,0xEC,0x80,0xDD,0x04,0x10,0x68,0x67,0x69,0xE2,0x40,0x9A,0x40,0xDD,0x01,0x4E,0xFF,0x69,0x2C,0xEE,0x10,0x76,0x11,0x61,0x88,0x67,0x1E,0xB5,0x01,0x4F,0x60,0x9C,0x2C,0xEF,0x4A,0x67,0x44,0xEF,0x11,0xE5,0xFF,0x4A,0xA9,0x67,0x4C,0xEB,0xEB,0xE5,0x64,0xEA,0x40,0x9C,0x00,0x6E,0x6D,0xEA,0x40,0xDC,0x04,0x48,0x4B,0x67,0x4C,0xE8,0x00,0xF4,0x01,0x58,0xCC,0x61,0x13,0xB4,0xFF,0x6E,0x55,0x6D,0x00,0xF4,0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x0F,0xB4,0xFF,0x6E,0x00,0x6D,0x00,0xF5,0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x0B,0xB4,0xFF,0x6E,0xB1,0x67,0x00,0xF6,0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x07,0xB4,0xFF,0x6E,0x0F,0x6D,0x00,0xF7,0x00,0x4C,0x00,0x18,0x64,0x2E,0x01,0x4E,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0xEF,0x04,0x63,0x00,0x00,0x00,0xF8,0x10,0x80,0xDC,0xF4,0x04,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x11,0xB2,0x00,0x68,0xEE,0x6C,0x00,0xDA,0x10,0xB2,0x07,0x6D,0x00,0xDA,0x00,0x18,0x9A,0x33,0x00,0x65,0x0E,0xB4,0x4A,0xF5,0x16,0x6B,0x6B,0xEB,0xFF,0xF7,0x1F,0x6A,0x01,0x48,0x4C,0xE8,0x00,0xF4,0x00,0x58,0x60,0xCC,0xFA,0x61,0x07,0xB2,0x03,0x6B,0x05,0x97,0x60,0xDA,0x04,0x90,0x03,0xB2,0x01,0x6B,0x60,0xDA,0x00,0xEF,0x03,0x63,0x00,0x00,0x10,0xA3,0x00,0xB0,0x20,0xA3,0x00,0xB0,0xF0,0x00,0x00,0xB6,0xFD,0x63,0x04,0x62,0x17,0xB3,0x16,0xB2,0x80,0x18,0x3F,0x2A,0x60,0xDA,0x16,0xB3,0x16,0xB2,0x21,0xB4,0x04,0x97,0x52,0xDB,0x15,0xB2,0x55,0xDB,0x15,0xB2,0x49,0xDB,0x15,0xB2,0x4C,0xDB,0x15,0xB2,0x4F,0xDB,0x15,0xB2,0x46,0xDB,0x15,0xB2,0x5B,0xDB,0x15,0xB2,0x40,0xDB,0x15,0xB2,0x58,0xDB,0x16,0xB3,
+0x15,0xB2,0x60,0xDA,0xC0,0xF0,0x50,0x9C,0x40,0x6B,0x6D,0xEA,0xC0,0xF0,0x50,0xDC,0x14,0xB3,0x49,0x9C,0x6D,0xEA,0x13,0xB3,0x6D,0xEA,0x49,0xDC,0x00,0xEF,0x03,0x63,0x00,0x00,0xCC,0x2C,0x11,0x80,0xE9,0xAE,0x10,0x80,0xB8,0x95,0x11,0x80,0x29,0xD8,0x10,0x80,0x99,0xB0,0x10,0x80,0x2D,0xB1,0x10,0x80,0xA1,0xB1,0x10,0x80,0x79,0xD4,0x10,0x80,0xE5,0xD4,0x10,0x80,0x19,0xC9,0x10,0x80,0xF1,0xD3,0x10,0x80,0x6D,0xCA,0x10,0x80,0x3C,0x1C,0x11,0x80,0xA5,0xA2,0x10,0x80,0xDC,0x00,0x11,0x80,0x00,0x00,0x00,0x01,0x00,0x00,0x80,0x00,0x44,0xA4,0x63,0xA4,0x00,0x6E,0x40,0x32,0x69,0xE2,0xFF,0xF7,0x1F,0x6B,0x6C,0xEA,0x7F,0xF4,0x0F,0x72,0x60,0xA5,0x46,0x67,0x08,0x61,0x69,0xE4,0xC2,0xC2,0x01,0x4B,0xFF,0x6A,0x4C,0xEB,0x61,0xC4,0x01,0x6A,0x60,0xC5,0x20,0xE8,0x00,0x65,0x00,0x00,0xF9,0x63,0x0C,0x62,0x0B,0xD1,0x0A,0xD0,0xFF,0x69,0x2C,0xEC,0x08,0xD4,0x61,0xF3,0x06,0x6D,0x00,0x18,0x9A,0x33,0x22,0x6C,0x40,0xB0,0xF3,0x6A,0x24,0x6C,0x20,0xF0,0xBF,0xA0,0x2C,0xED,0xA0,0x35,0x00,0x18,0x9A,0x33,0x4D,0xED,0x40,0xF0,0x41,0xA0,0x40,0xF0,0xA0,0xA0,0x26,0x6C,0x2C,0xEA,0x40,0x32,0x2C,0xED,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x9A,0x33,0x4C,0xED,0xEB,0xF0,0x12,0x6D,0x00,0x18,0x9A,0x33,0x28,0x6C,0x93,0xF7,0x1A,0x6D,0x00,0x18,0x9A,0x33,0x2A,0x6C,0x00,0x18,0xEE,0x33,0x01,0x6C,0x02,0x6C,0x00,0x18,0x9A,0x33,0x20,0x6D,0x2D,0xB2,0x03,0xF4,0x00,0x6D,0x20,0x68,0x81,0xA2,0x00,0x18,0x9A,0x33,0x2C,0xEC,0x2A,0xB2,0xFF,0xF7,0x1F,0x6B,0xFF,0xF7,0x1F,0x6D,0x40,0xAA,0x5E,0x6C,0x4C,0xEB,0x9F,0xF7,0x1F,0x6A,0x4C,0xEB,0x0D,0xEB,0x00,0x18,0x9A,0x33,0x6C,0xED,0xFF,0x6C,0x09,0x4C,0x00,0x18,0x9A,0x33,0x03,0x6D,0x21,0xB2,0xFF,0xF7,0x1F,0x6B,0xFF,0x6D,0x81,0xA2,0x1F,0xB2,0x21,0x4D,0x2C,0xEC,0x49,0xE4,0x40,0xAA,0x4C,0xEB,0xEE,0xF1,0x09,0x6A,0x4C,0xEB,0x6D,0xED,0xFF,0xF7,0x1F,0x6A,0x4C,0xED,0x1A,0xB2,0x07,0x6B,0x40,0xA2,0x2C,0xEA,0x6C,0xEA,0x40,0x32,0x44,0x32,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x9A,0x33,0x4C,0xED,0x02,0x6C,0x00,0x18,0x9A,0x33,0xB0,0x67,0x00,0x6C,0x00,0x18,0x9A,0x33,0x0D,0x6D,0x08,0x92,0x0C,0x22,0x9D,0x67,0x10,0x4C,0x55,0x6D,0x00,0x18,0x64,0x2E,0x0A,0x6E,0xDD,
+0x67,0x01,0x6C,0x00,0x6D,0x00,0x18,0xDC,0x34,0x10,0x4E,0x0C,0x97,0x0B,0x91,0x0A,0x90,0x00,0xEF,0x07,0x63,0x00,0x00,0xDC,0x00,0x11,0x80,0x38,0xF4,0x04,0x80,0x5E,0x00,0x00,0xB6,0x30,0xF4,0x04,0x80,0x00,0x00,0x00,0xB6,0x81,0x08,0x11,0x80,0xF6,0x63,0x12,0x62,0x11,0xD1,0x10,0xD0,0x14,0xD4,0x16,0xD6,0x60,0xAC,0x7F,0xF4,0x0A,0x73,0x80,0xF0,0x04,0x60,0x7F,0xF4,0x0A,0x6A,0x62,0xEA,0x13,0x61,0x7F,0xF4,0x07,0x6A,0x62,0xEA,0x08,0x61,0x7F,0xF4,0x06,0x6A,0x42,0xEB,0x23,0x60,0x3F,0xF4,0x00,0x73,0x38,0x60,0x33,0x11,0x7F,0xF4,0x08,0x73,0x47,0x60,0x7F,0xF4,0x09,0x73,0x4A,0x60,0x2C,0x11,0x5F,0xF5,0x00,0x73,0x73,0x60,0x5F,0xF5,0x00,0x6A,0x62,0xEA,0x06,0x61,0x7F,0xF4,0x0F,0x73,0x0B,0x60,0x7F,0xF4,0x10,0x73,0x06,0x10,0x5F,0xF5,0x03,0x73,0x00,0xF1,0x0D,0x60,0x5F,0xF5,0x05,0x73,0x27,0x60,0x17,0x11,0x16,0x92,0x00,0x6B,0x21,0x10,0x7F,0xF4,0x06,0x73,0x03,0x61,0x8C,0xB2,0x00,0x6B,0x60,0xDA,0x8B,0xB2,0x0F,0x6B,0x40,0x9A,0x46,0x32,0x6C,0xEA,0x03,0x72,0x04,0x61,0x89,0xB2,0x60,0x9A,0x89,0xB2,0x60,0xDA,0x8A,0xB3,0x88,0xB2,0x60,0xDA,0x8A,0xB3,0x89,0xB2,0x60,0xDA,0xFF,0x17,0x81,0xB2,0x89,0xB3,0x40,0x9A,0x6E,0xEA,0xE0,0xF0,0x16,0x2A,0x14,0x94,0x87,0xB2,0x63,0xA4,0x60,0xC2,0xE9,0x10,0x14,0x92,0x83,0xA2,0x01,0x24,0x01,0x6C,0x80,0x18,0x88,0x2A,0x00,0x65,0xE1,0x10,0x14,0x94,0x81,0xB2,0x63,0xA4,0x80,0xF1,0x61,0xC2,0xDB,0x10,0x14,0x93,0x7F,0xB1,0xFF,0xF7,0x1F,0x6C,0x43,0xA3,0x44,0x33,0x4D,0xE3,0x6C,0x33,0x4D,0xE3,0x40,0x99,0x68,0x30,0x8C,0xE8,0x4F,0xEA,0x03,0x22,0x00,0x18,0xFD,0x1D,0x91,0x67,0x0F,0x20,0x00,0x18,0x40,0xA4,0x00,0x65,0x76,0xB6,0x00,0x6A,0x01,0x6C,0xB1,0x67,0xE2,0x67,0x00,0x18,0xF3,0x1D,0x04,0xD2,0x80,0x99,0x00,0x18,0x0C,0x1E,0xB0,0x67,0x71,0xB2,0x00,0xCA,0xB7,0x10,0x14,0x93,0x00,0x6E,0x43,0xA3,0x01,0x22,0x01,0x6E,0x6A,0xB2,0x80,0xF1,0xD1,0xC2,0xAE,0x10,0x14,0x94,0x14,0x93,0x61,0xF3,0x06,0x6D,0x85,0xA4,0x0E,0xD4,0x48,0xA3,0x27,0xA3,0xFF,0xF7,0x1F,0x6C,0x40,0x32,0x4D,0xE9,0x00,0x6A,0x45,0xC3,0x4A,0xC3,0x8C,0xE9,0x00,0x18,0x9A,0x33,0x22,0x6C,0x5F,0xB0,0xF3,0x6A,0xFF,0xF7,0x1F,0x6B,0x20,0xF0,0xBF,0xA0,0x24,0x6C,0xA0,0x35,0x4D,0xED,
+0x00,0x18,0x9A,0x33,0x6C,0xED,0x40,0xF0,0x41,0xA0,0x40,0xF0,0xA0,0xA0,0x26,0x6C,0x40,0x32,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x9A,0x33,0x4C,0xED,0xEB,0xF0,0x12,0x6D,0x00,0x18,0x9A,0x33,0x28,0x6C,0x93,0xF7,0x1A,0x6D,0x00,0x18,0x9A,0x33,0x2A,0x6C,0x00,0x18,0xEE,0x33,0x01,0x6C,0x7D,0x21,0xFF,0xF7,0x1F,0x6B,0x51,0x67,0x6C,0xE9,0x00,0xF4,0x01,0x59,0x02,0x61,0x00,0xF4,0x00,0x6A,0xFF,0xF7,0x1F,0x69,0x4C,0xE9,0x0E,0x92,0xFF,0x6C,0xFF,0x4A,0x8C,0xEA,0x04,0x5A,0x28,0x61,0x47,0xB0,0x00,0x6A,0x7D,0x67,0x06,0xD2,0x0C,0xCB,0xE0,0xF7,0x1F,0x6A,0x4C,0xE9,0x44,0xB3,0x06,0x92,0x80,0xF4,0x20,0x34,0x01,0x6D,0x6C,0xEA,0x8D,0xEA,0x06,0xD2,0x00,0x6C,0x40,0xB2,0x04,0xD4,0x05,0xD4,0x9D,0x67,0x18,0x4C,0xC5,0x67,0x00,0x6F,0x07,0xD2,0x3F,0x10,0xE0,0xF7,0x1F,0x6A,0x8C,0xEA,0x88,0x67,0x80,0xF4,0x40,0x32,0x8C,0xEB,0x4D,0xEB,0x38,0xB2,0xFF,0x6D,0xEC,0xED,0x60,0xDE,0x41,0xDE,0x2B,0x10,0x0E,0x92,0x00,0x6D,0x91,0x67,0x40,0x33,0x34,0xB2,0x25,0x67,0x41,0xE3,0x7D,0x67,0x18,0x4B,0x2F,0xB2,0x8B,0x65,0x31,0xB3,0x0A,0x65,0xFF,0xF7,0x1F,0x6A,0x6B,0x65,0xFF,0x6B,0x4A,0x65,0x2B,0x65,0x6C,0x67,0xAC,0x32,0x79,0xE2,0x20,0xDE,0x00,0xF1,0x01,0x5C,0x00,0xCE,0x21,0xDE,0x60,0x9E,0xE1,0x45,0xD4,0x61,0x48,0x67,0x6C,0xEA,0xA9,0x67,0x6B,0x67,0x6D,0xEA,0x80,0x4C,0xEC,0xED,0x40,0xDE,0x80,0x4C,0x4A,0x67,0x04,0x5D,0x4C,0xEC,0xE8,0x61,0x00,0x6F,0x9D,0x67,0x04,0xD7,0x05,0xD7,0x18,0x4C,0x01,0x6E,0x00,0x18,0xF7,0x33,0x00,0x65,0x0E,0x10,0x02,0x6C,0x01,0x6D,0x00,0x18,0x1C,0x80,0x00,0x6E,0x08,0x10,0x14,0x93,0x16,0x92,0x80,0xAB,0x00,0x18,0xFA,0x8B,0xA0,0xA2,0x01,0x6A,0x01,0x10,0x00,0x6A,0x12,0x97,0x11,0x91,0x10,0x90,0x00,0xEF,0x0A,0x63,0x38,0x91,0x10,0x80,0x6C,0x1D,0x11,0x80,0x2C,0x00,0x00,0xB5,0x48,0x91,0x10,0x80,0x44,0x91,0x10,0x80,0x32,0x97,0x79,0x23,0x78,0xA0,0x00,0xB0,0x01,0x00,0xA5,0x01,0xAE,0x23,0x87,0x54,0xD0,0x00,0x11,0x80,0xDC,0x00,0x11,0x80,0x88,0x07,0x11,0x80,0x01,0x91,0x02,0x80,0x08,0xA1,0x11,0x80,0x00,0xF8,0x10,0x80,0xFF,0xFF,0x03,0xE0,0x00,0x00,0x00,0x80,0x00,0xFB,0x10,0x80,0x00,0x00,0x00,0x04,0x03,0xB2,0x00,0x6B,0x60,0xDA,0x20,0xE8,0x00,0x65,0x00,
+0x00,0x04,0x60,0x00,0xB0,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x40,0xAC,0x01,0xF4,0x03,0x72,0x2C,0x61,0x80,0x18,0x3F,0x2A,0x00,0x69,0x80,0x18,0x91,0x2B,0x00,0x65,0x16,0xB2,0x08,0xF1,0x11,0x6B,0x6B,0xEB,0x60,0xCA,0x15,0xB2,0x91,0x67,0x20,0xDA,0x14,0xB2,0x20,0x18,0x83,0x39,0x20,0xDA,0x14,0xB2,0x15,0xB0,0xB1,0x67,0x80,0xF1,0x62,0xA2,0x90,0x67,0x30,0x6E,0x68,0x32,0x69,0xE2,0x0F,0xB3,0x44,0x32,0x00,0x18,0x64,0x2E,0x40,0xCB,0x01,0x6A,0x4B,0xEA,0x47,0xD8,0x0E,0xB3,0x40,0x98,0x0E,0xB4,0xB1,0x67,0x6D,0xEA,0x40,0xD8,0x00,0x18,0x64,0x2E,0x0C,0x6E,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0x6A,0x00,0xEF,0x04,0x63,0x0C,0xA1,0x11,0x80,0x10,0xA1,0x11,0x80,0x14,0xA1,0x11,0x80,0x08,0xA1,0x11,0x80,0xDC,0x00,0x11,0x80,0xCC,0xA0,0x11,0x80,0x00,0x00,0x00,0x70,0xFC,0xA0,0x11,0x80,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0xFF,0xF7,0x1F,0x6A,0xCC,0xEA,0x02,0x74,0x0C,0x65,0x05,0x67,0x4F,0x65,0x2A,0x65,0x0D,0x61,0x2A,0xB2,0x03,0x6B,0x40,0x9A,0x42,0x32,0x4A,0x32,0x6C,0xEA,0x01,0x72,0x05,0x61,0x27,0xB3,0x40,0x9B,0xC0,0xF7,0x42,0x32,0xFC,0x2A,0x48,0x67,0x04,0x72,0x38,0x61,0x60,0xA0,0xFF,0x6E,0x46,0x67,0x6C,0xEA,0x10,0x72,0x0B,0x61,0x42,0xA0,0xCC,0xEA,0x02,0x72,0x07,0x61,0x1F,0xB2,0xB0,0x67,0x00,0x18,0xE0,0x1D,0x81,0x9A,0x00,0x6A,0x2D,0x10,0xFF,0x6A,0x6C,0xEA,0x02,0x72,0x01,0x6C,0x04,0x60,0x22,0x72,0x02,0x60,0x2F,0x72,0x1E,0x61,0xFF,0x6E,0x46,0x67,0x6C,0xEA,0x2F,0x72,0x01,0x6A,0x02,0x60,0x42,0xA0,0xCC,0xEA,0xFF,0x6D,0x6F,0x42,0xAC,0xEB,0xAA,0xEB,0x11,0x60,0xE5,0x67,0x01,0x69,0x06,0x4C,0xAC,0xEC,0x99,0xE0,0x42,0xA6,0xAC,0xEA,0x03,0x5A,0x01,0x61,0x22,0xC6,0xFF,0x4B,0xEC,0xEB,0xFF,0x6D,0x08,0x4C,0xAA,0xEB,0xEC,0xEC,0xF1,0x61,0x88,0x67,0xB0,0x67,0xC9,0x67,0x00,0x18,0xCA,0x1E,0xEA,0x67,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0xEF,0x04,0x63,0x6C,0x1D,0x11,0x80,0x1C,0xA3,0x00,0xB0,0x9C,0x31,0x11,0x80,0x20,0xE8,0x00,0x65,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0xFF,0xF7,0x1F,0x69,0x8C,0xE9,0x24,0x32,0x29,0xE2,0x4C,0x32,0x2B,0xE2,0x4C,0x32,0x18,0xB3,0x2B,0xE2,0x48,0x32,0x61,0xE2,0x5C,0x98,0x4F,0xEA,0x05,0x22,0x01,0x6A,0x00,0x6B,0x20,0xF2,0x5E,0xC0,
+0x1E,0x10,0x00,0x18,0x41,0x5E,0x91,0x67,0x04,0xD2,0x0C,0x6B,0x18,0x2A,0x5F,0x98,0x41,0xA2,0x44,0x72,0x14,0x60,0x00,0x18,0xA5,0x5E,0x91,0x67,0x06,0x22,0x00,0x18,0x69,0x5E,0x91,0x67,0x1F,0x6B,0x0B,0x22,0x05,0x10,0x00,0x18,0x80,0x49,0x91,0x67,0x62,0x67,0x05,0x10,0x91,0x67,0x20,0x18,0x13,0x26,0x0E,0x6D,0x04,0x93,0x08,0x97,0x07,0x91,0x06,0x90,0x43,0x67,0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x03,0x44,0x90,0x67,0x00,0x18,0xF2,0x5A,0x0B,0xD5,0x22,0x67,0x1A,0x65,0x1E,0x2A,0xBD,0x67,0x90,0x67,0x00,0x18,0x07,0xDF,0x10,0x4D,0x7D,0x67,0x48,0xAB,0x0B,0x93,0xFF,0xF7,0x1F,0x6D,0x40,0xCB,0x65,0x67,0x4C,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x09,0xB3,0x48,0x32,0x69,0xE2,0x20,0xF2,0x3E,0xC2,0x5D,0x67,0x88,0xAA,0x80,0x18,0xEE,0x2B,0xAC,0xEC,0x1A,0x65,0x08,0x97,0x07,0x91,0x06,0x90,0x58,0x67,0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,0x20,0xB0,0x00,0x6A,0x04,0xD2,0x40,0x98,0x01,0x69,0xC0,0xF6,0x42,0x32,0x2C,0xEA,0x09,0x22,0x00,0x18,0x4F,0x9A,0x06,0xD4,0x04,0xD1,0x40,0x98,0x1A,0xB3,0x6C,0xEA,0x40,0xD8,0x06,0x94,0x44,0xAC,0xFF,0xF7,0x1F,0x6B,0x06,0x72,0x19,0x61,0x40,0x9C,0x17,0x2A,0x45,0xAC,0x6C,0xEA,0x17,0x2A,0x41,0x9C,0x82,0x67,0x42,0x32,0x42,0x32,0x6C,0xEA,0x01,0xF0,0x0B,0x72,0x6C,0xEC,0x04,0x61,0x80,0x18,0xEE,0x2B,0x00,0x65,0x0A,0x10,0x01,0xF0,0x05,0x72,0x07,0x61,0x00,0x18,0x2C,0x48,0x00,0x65,0x03,0x10,0x00,0x18,0x74,0x56,0x00,0x65,0x04,0x92,0x05,0x22,0x06,0xB2,0x07,0xB4,0x60,0x9A,0x8D,0xEB,0x60,0xDA,0x0A,0x97,0x09,0x91,0x08,0x90,0x00,0xEF,0x06,0x63,0x00,0x00,0x54,0x45,0x11,0x80,0xFF,0xFF,0xFF,0xF7,0x00,0x00,0x00,0x08,0xF9,0x63,0x0C,0x62,0x44,0xAC,0x07,0x72,0x11,0x61,0x60,0x9C,0xFF,0x6D,0x40,0xA3,0x03,0x72,0x26,0x61,0x42,0xA3,0xAC,0xEA,0x23,0x2A,0x43,0xA3,0x64,0xA3,0xAC,0xEA,0xAC,0xEB,0x60,0x33,0x6D,0xEA,0x12,0xB3,0x40,0xCB,0x1A,0x10,0x08,0x72,0x18,0x61,0x40,0x9C,0x66,0x6B,0x9D,0x67,0x06,0xD2,0x0E,0xB2,0x70,0xCC,0xFD,0x67,0x80,0x9A,0x00,0x6D,0x04,0x06,0x24,0x4F,0xA9,0xE7,0x40,0xA2,0xAD,0xE6,0x01,0x4D,0x08,0x5D,0x40,
+0xC3,0xF9,0x61,0x06,0x95,0x07,0x96,0x00,0x18,0x40,0x1E,0x08,0x97,0x03,0x10,0x00,0x18,0x64,0x8B,0x00,0x65,0x0C,0x97,0x00,0xEF,0x07,0x63,0x0C,0xA1,0x11,0x80,0x84,0x21,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x44,0xAC,0x24,0x67,0x66,0x72,0x34,0x61,0x00,0x9C,0xE1,0xF7,0x1F,0x6A,0xBD,0x67,0x80,0x98,0x10,0x4D,0x4C,0xEC,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x2A,0xDF,0x4C,0xEC,0x82,0x67,0x29,0x2A,0x5D,0x67,0x68,0xAA,0xFF,0xF7,0x1F,0x6A,0x4C,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x12,0xB3,0x48,0x32,0x69,0xE2,0x20,0xF0,0x78,0xA2,0x03,0x73,0x14,0x60,0xE0,0xF7,0x08,0x6A,0x47,0xEB,0x01,0x6B,0x6C,0xEA,0x0E,0x22,0x0C,0xB3,0x00,0xF4,0x84,0xD8,0x40,0x9B,0x02,0x2A,0x00,0xDB,0x04,0x10,0x0A,0xB2,0x40,0x9A,0x00,0xF4,0x04,0xDA,0x08,0xB2,0x00,0xDA,0x03,0x10,0x00,0x18,0x18,0x58,0x91,0x67,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0x10,0xA1,0x11,0x80,0x14,0xA1,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x0B,0xB0,0xE3,0xF7,0x1F,0x6B,0x7C,0x6C,0x40,0x98,0x01,0x6D,0x56,0x32,0x6C,0xEA,0x69,0x98,0x58,0xEB,0x12,0xEA,0x00,0x18,0xEB,0x9F,0x4A,0xD8,0x6B,0x98,0x05,0x97,0x4D,0xE3,0x6B,0xD8,0x04,0x90,0x00,0xEF,0x03,0x63,0xCC,0xA0,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,0x3B,0xB0,0xBD,0x67,0x10,0x4D,0x90,0xA0,0x4F,0xA0,0x80,0x34,0x4D,0xEC,0x4E,0xA0,0x80,0x34,0x00,0x18,0x3A,0xBA,0x4D,0xEC,0x7D,0x67,0x48,0xAB,0x8F,0xA0,0xFD,0x67,0x4C,0xCB,0x49,0xAB,0x4D,0xCB,0x6A,0xAB,0x03,0x6A,0x4C,0xEB,0x4E,0xA0,0x48,0x32,0x4D,0xEB,0x80,0x32,0x48,0x32,0x4D,0xEB,0x50,0xA0,0x6E,0xCF,0x70,0x80,0x48,0x32,0x9A,0x34,0x4D,0xEC,0x00,0x53,0x8F,0xCF,0x05,0x60,0x09,0xF4,0x00,0x6A,0x8D,0xEA,0x4F,0xCF,0x06,0x10,0x0A,0xF0,0x00,0x6A,0x4B,0xEA,0x8D,0xEA,0x7D,0x67,0x4F,0xCB,0x9D,0x67,0x10,0x4C,0xFF,0xF7,0x1F,0x6F,0x0F,0x6A,0x00,0x6E,0x2C,0x65,0x0F,0x65,0x01,0x69,0x4A,0x65,0x89,0x67,0xC4,0x30,0x89,0xE0,0x84,0xAA,0x00,0x6D,0xE8,0x67,0x65,0x67,0xEC,0xEC,0x44,0x67,0x47,0xEB,0x2C,0xEA,0x07,0x22,0xEA,0x67,0x6B,0xE7,0xF1,0x67,0xE4,0xEA,0xED,0xED,0x48,0x67,0x4C,0xED,0x01,0x4B,0xFF,0x6F,0xEC,0xEB,0x10,0x5B,0xF0,0x61,
+0x01,0x4E,0x69,0x67,0xEC,0xEE,0x69,0xE0,0x04,0x5E,0xA4,0xCA,0xE1,0x61,0xFD,0x67,0xCC,0xAF,0x51,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x5D,0x67,0xCD,0xAA,0x50,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x7D,0x67,0xCE,0xAB,0x4F,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0xFD,0x67,0xCF,0xAF,0x4E,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x0A,0x97,0x09,0x91,0x08,0x90,0x00,0xEF,0x06,0x63,0xCC,0xA0,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6B,0x04,0xD3,0x6C,0xEA,0xFF,0x6B,0x02,0x4B,0x6B,0xEB,0x6C,0xEA,0xFF,0x6B,0x01,0x4B,0xC2,0x67,0x6D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x51,0xB1,0x52,0xB3,0x07,0x68,0x41,0x99,0x51,0xB4,0x01,0x6D,0x4E,0x32,0x0C,0xEA,0x69,0xE2,0x60,0xA2,0x40,0x99,0x0C,0xEB,0x40,0xF6,0x60,0x33,0x8C,0xEA,0x6D,0xEA,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x40,0xD9,0x04,0x93,0x57,0x6C,0x01,0x6D,0x4C,0xEB,0x71,0x6A,0x04,0xD3,0x4B,0xEA,0x4C,0xEB,0x40,0x99,0xC3,0x67,0x40,0xF6,0x42,0x32,0x0C,0xEA,0x50,0x32,0x00,0x18,0x01,0xA0,0x4D,0xEE,0x40,0x99,0x01,0x6B,0x03,0x67,0x6C,0xEA,0x06,0x22,0x41,0x99,0x80,0x6B,0x6C,0xEA,0x01,0x5A,0x18,0x67,0x02,0x48,0x56,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x00,0x36,0x37,0xB0,0xFF,0xF7,0x1F,0x69,0x1C,0xF0,0x00,0x6B,0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0x60,0x98,0xE3,0xF7,0x1F,0x6C,0xD8,0x36,0x76,0x33,0x8C,0xEB,0x6D,0xEE,0xFB,0xF7,0x1F,0x6B,0x6C,0xEE,0x4D,0xEE,0x56,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x47,0xA0,0xC6,0xA0,0x58,0x6C,0x40,0x32,0x4D,0xEE,0x00,0x18,0x01,0xA0,0x01,0x6D,0x59,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xC8,0xA0,0x04,0x6B,0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0x03,0x6B,0x6C,0xEE,0x4D,0xEE,0x59,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x80,0x18,0x9A,0x2C,0x00,0x65,0x40,0x98,0xC0,0xF7,0x42,0x32,0x24,0x22,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x81,0x6B,0x2C,0xEA,0x6B,0xEB,0x6C,0xEA,0xC2,0x67,0x80,0x6B,0x6D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x59,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x4C,0xE9,0xE0,0xF1,0x1D,0x6A,0x4B,0xEA,0x4C,0xE9,0x45,0xA0,0xFF,0x6B,0xD1,0x67,0x6C,0xEA,0x48,0x32,0xE0,0xF1,0x1C,0x6B,0x6C,0xEA,0x59,0x6C,0x01,0x6D,0x4D,
+0xEE,0x0B,0x10,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x4C,0xE9,0x81,0x6A,0x4B,0xEA,0xD1,0x67,0x57,0x6C,0x01,0x6D,0x4C,0xEE,0x00,0x18,0x01,0xA0,0x00,0x65,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0xCC,0xA0,0x11,0x80,0xD8,0xDF,0x10,0x80,0xFF,0xFF,0xFF,0xF1,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x0F,0xB1,0xFF,0x68,0x8C,0xE8,0x47,0x99,0x4F,0xEA,0x04,0x22,0x87,0x41,0x00,0x18,0xFD,0x1D,0x15,0x4C,0x0E,0x20,0x0B,0xB6,0x00,0x68,0xA7,0x41,0x01,0x6C,0x15,0x4D,0xF0,0x67,0x00,0x18,0xF3,0x1D,0x04,0xD0,0x87,0x99,0x00,0x18,0x0C,0x1E,0x14,0x6D,0x10,0xC9,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0xCC,0xA0,0x11,0x80,0xF9,0xB5,0x10,0x80,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x00,0x6C,0x02,0xF0,0x00,0x6E,0x00,0x18,0x01,0xA0,0xA4,0x67,0x2D,0xB2,0x3C,0x6C,0x00,0x6D,0xC0,0x9A,0x7F,0x6A,0xFF,0xF7,0x1F,0x68,0x80,0xF4,0xC2,0x36,0x4C,0xEE,0xC4,0x36,0xFF,0x6A,0x01,0x4E,0x4C,0xEE,0x00,0x18,0x01,0xA0,0xC0,0x36,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xEA,0x01,0xF6,0x01,0x69,0x2B,0xE9,0xC2,0x67,0x2C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xEA,0x2C,0xEA,0x01,0xF6,0x00,0x6B,0xC2,0x67,0x6D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xEA,0x03,0x69,0x2B,0xE9,0xC2,0x67,0x2C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xEA,0x2C,0xEA,0x02,0x6B,0xC2,0x67,0x6D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x4C,0xE8,0xD0,0x67,0x2C,0xEE,0x01,0x6D,0x00,0x18,0x01,0xA0,0x57,0x6C,0x80,0x18,0x38,0x2D,0x01,0x6C,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0xEF,0x04,0x63,0xCC,0xA0,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x1A,0xB2,0x06,0xD4,0x47,0x9A,0x8E,0xEA,0x05,0x22,0x8F,0xEA,0x03,0x22,0x00,0x18,0xFD,0x1D,0x06,0x04,0x15,0xB0,0x42,0x6B,0x41,0x98,0x6C,0xEA,0x6A,0xEA,0x08,0x60,0x47,0x98,0x4F,0xEA,0x1C,0x22,0x87,0x40,0x00,0x18,0xFD,0x1D,0x15,0x4C,0x17,0x10,0x7D,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x02,0x6E,0x4C,0xEE,0x04,0x26,0x50,0xA8,0x01,0x4A,0x50,0xC8,
+0x0C,0x10,0x86,0x67,0x00,0x18,0x01,0xA0,0xA6,0x67,0x49,0x98,0x01,0x4A,0x80,0x18,0x8D,0x2C,0x49,0xD8,0x80,0x18,0x4B,0x2D,0x00,0x65,0x05,0x97,0x04,0x90,0x00,0xEF,0x03,0x63,0xCC,0xA0,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x00,0x6C,0xC4,0x67,0x00,0x18,0x01,0xA0,0xA4,0x67,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0xFF,0x6A,0x04,0x4A,0x4B,0xEA,0x4C,0xEE,0x01,0x6D,0x00,0x18,0x01,0xA0,0x57,0x6C,0x0A,0xB0,0x41,0x6B,0x6B,0xEB,0x41,0x98,0x00,0x6C,0x6C,0xEA,0x80,0x18,0x38,0x2D,0x41,0xD8,0x80,0x18,0x8D,0x2C,0x00,0x65,0x00,0x6A,0x49,0xC0,0x05,0x97,0x04,0x90,0x00,0xEF,0x03,0x63,0x00,0x00,0xCC,0xA0,0x11,0x80,0xFD,0x63,0x04,0x62,0x80,0x18,0xD8,0x2C,0x00,0x65,0x0D,0xB3,0x00,0x6A,0x59,0x6C,0x4B,0xDB,0x49,0xDB,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x00,0xF2,0x01,0x6A,0x4B,0xEA,0x59,0x6C,0x01,0x6D,0x00,0x18,0x01,0xA0,0x4C,0xEE,0x80,0x18,0x4B,0x2D,0x00,0x65,0x04,0x97,0x00,0xEF,0x03,0x63,0xCC,0xA0,0x11,0x80,0xFD,0x63,0x04,0x62,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x02,0xF1,0x01,0x6A,0x4B,0xEA,0x4C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x00,0x6C,0xA4,0x67,0x00,0x18,0x01,0xA0,0xC4,0x67,0x06,0xB4,0x41,0x6B,0x6B,0xEB,0x41,0x9C,0x04,0x97,0x6C,0xEA,0x41,0xDC,0x00,0x6A,0x49,0xC4,0x00,0xEF,0x03,0x63,0x00,0x00,0xCC,0xA0,0x11,0x80,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x80,0x18,0xD8,0x2C,0x00,0x65,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x69,0x02,0xF0,0x01,0x6B,0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0x02,0xF0,0x00,0x68,0xC2,0x67,0x0D,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x59,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x2C,0xEA,0x00,0xF2,0x01,0x6B,0x6B,0xEB,0xC2,0x67,0x6C,0xEE,0x59,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x00,0x6C,0xD0,0x67,0x00,0x18,0x01,0xA0,0xA4,0x67,0x28,0xB2,0x03,0x6C,0x00,0x6D,0x00,0x9A,0x07,0x6A,0x00,0xF7,0x02,0x30,0x00,0x18,0xEB,0x9F,0x4C,0xE8,0x2C,0xEA,0x1F,0xF4,0x01,0x6B,0x6B,0xEB,0x6C,0xEA,0x21,0xB3,0x05,0x48,0x1F,0xF4,0x00,0x6C,0x61,0xE0,0x20,0xF1,0x7A,0xA0,0xC2,0x67,0x00,0x6D,0x60,0x33,0x68,0x33,0x8C,0xEB,0x6D,
+0xEE,0x00,0x18,0x01,0xA0,0x03,0x6C,0x18,0xB3,0x7F,0x6A,0x3C,0x6C,0xC0,0x9B,0x00,0x6D,0x01,0x68,0x80,0xF4,0xC2,0x36,0x4C,0xEE,0xC4,0x36,0xFF,0x6A,0x06,0x4E,0x4C,0xEE,0x00,0x18,0x01,0xA0,0xC0,0x36,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x02,0x6B,0x6B,0xEB,0x2C,0xEA,0x6C,0xEA,0xC2,0x67,0x0D,0xEE,0xB0,0x67,0x00,0x18,0x01,0xA0,0x57,0x6C,0xB0,0x67,0x00,0x18,0xEB,0x9F,0x57,0x6C,0x02,0x6E,0x4C,0xE9,0xCB,0xEE,0xB0,0x67,0x2C,0xEE,0x00,0x18,0x01,0xA0,0x57,0x6C,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0xEF,0x04,0x63,0x00,0x00,0xCC,0xA0,0x11,0x80,0xDC,0x00,0x11,0x80,0xFD,0x63,0x04,0x62,0x7F,0xF7,0x0F,0x6D,0x00,0x18,0x5D,0xBA,0x5E,0x6C,0x0E,0xB2,0xFF,0xF6,0x1F,0x6D,0x00,0x18,0x5D,0xBA,0x81,0xA2,0xFF,0x6D,0xD8,0x6C,0x00,0x18,0x9A,0x33,0x08,0x4D,0xFF,0x6C,0x09,0x4C,0x00,0x18,0x9A,0x33,0x00,0x6D,0x07,0xB4,0x41,0x6B,0x6B,0xEB,0x41,0x9C,0x04,0x97,0x6C,0xEA,0x41,0xDC,0x00,0x6A,0x49,0xC4,0x00,0xEF,0x03,0x63,0x30,0xF4,0x04,0x80,0xCC,0xA0,0x11,0x80,0xF7,0x63,0x10,0x62,0x0F,0xD1,0x0E,0xD0,0x72,0xB5,0x73,0xB3,0x07,0x6C,0xC0,0x9D,0xFF,0xF7,0x1F,0x6F,0xC0,0x32,0x58,0x32,0x80,0xF5,0x42,0x31,0x41,0x9D,0x4E,0x32,0x8C,0xEA,0x69,0xE2,0x60,0xA2,0x6D,0xB2,0x8C,0xEB,0x40,0xF6,0x60,0x33,0xCC,0xEA,0x6D,0xEA,0x40,0xF6,0x42,0x33,0x40,0xDD,0xFF,0x6E,0x8C,0xEB,0x61,0x21,0x51,0x67,0xEC,0xE9,0x00,0xF4,0x01,0x59,0x02,0x61,0x00,0xF4,0x00,0x6A,0x27,0x67,0x4C,0xE9,0x4F,0x43,0xCC,0xEA,0x04,0x5A,0x23,0x61,0x61,0xB0,0x00,0x6F,0x5D,0x67,0x06,0xD7,0x0C,0xCA,0x06,0x92,0x5F,0xB3,0x80,0xF4,0x20,0x34,0x01,0x6D,0x6C,0xEA,0x8D,0xEA,0x06,0xD2,0x5D,0xB2,0x9D,0x67,0x18,0x4C,0xC5,0x67,0x07,0xD2,0x04,0xD7,0x05,0xD7,0x3C,0x10,0xE0,0xF7,0x1F,0x6A,0x4C,0xEB,0x49,0x67,0x80,0xF4,0x60,0x33,0xCC,0xEA,0x6D,0xEA,0x40,0xDC,0x54,0xB2,0xFF,0x6D,0xEC,0xED,0x41,0xDC,0x28,0x10,0x53,0xB2,0x60,0x33,0x00,0x6D,0x41,0xE3,0x5D,0x67,0x18,0x4A,0xAA,0x65,0x4D,0xB2,0x71,0x67,0x0D,0x65,0x2A,0x65,0x4E,0xB2,0x6F,0x65,0x4E,0x65,0x8A,0x65,0xAC,0x32,0xCD,0x67,0xD1,0xE2,0x48,0x67,0x40,0xDC,0x00,0xF1,0x01,0x5B,0x00,0xCC,0x41,0xDC,0xC0,0x9C,0xE1,0x45,0xD7,0x61,0x49,0x67,0xCC,0xEA,0xAC,0x67,0xAD,0xEA,
+0xAA,0x67,0x80,0x4B,0xEC,0xED,0x80,0x4B,0xCB,0x67,0x04,0x5D,0x40,0xDC,0xCC,0xEB,0xE7,0x61,0x00,0x6F,0x9D,0x67,0x04,0xD7,0x05,0xD7,0x18,0x4C,0x01,0x6E,0x00,0x18,0xF7,0x33,0x00,0x65,0x34,0xB2,0xC4,0x6C,0xA0,0x9A,0x7F,0x6A,0x80,0xF4,0xA2,0x35,0x4C,0xED,0xA0,0x32,0x00,0x18,0x9A,0x33,0x4D,0xED,0x5E,0x6C,0x00,0x18,0x78,0xBA,0x60,0x6D,0x35,0xB2,0x35,0xB0,0x2C,0xB3,0x81,0xA2,0x01,0xF4,0x00,0x6D,0x09,0xE4,0x40,0xAA,0x4C,0xED,0x40,0x9B,0x0F,0x6B,0x46,0x32,0x6C,0xEA,0x40,0x32,0x50,0x32,0x4D,0xED,0x00,0x18,0x9A,0x33,0x2D,0xED,0x2D,0xB2,0x23,0xB6,0xEE,0xF1,0x1F,0x6D,0x21,0xA2,0x60,0x9E,0x01,0xE1,0x40,0xA8,0x07,0x68,0x91,0x67,0x4C,0xED,0x01,0x6A,0x6C,0xEA,0x00,0xF7,0x62,0x33,0x0C,0xEB,0x40,0x32,0x5C,0x32,0x60,0x33,0x64,0x33,0x4D,0xED,0x00,0x18,0x9A,0x33,0x6D,0xED,0x17,0xB2,0x01,0x6C,0xA0,0x9A,0x00,0xF7,0xA2,0x35,0x00,0x18,0x68,0x91,0x0C,0xED,0x13,0xB3,0x01,0x6C,0xA0,0x9B,0x00,0xF7,0xA2,0x35,0x00,0x18,0x82,0x91,0x0C,0xED,0x5E,0x6C,0x00,0x18,0x78,0xBA,0x90,0x6D,0xFF,0x6D,0x91,0x67,0x00,0x18,0x78,0xBA,0x01,0x4D,0xFF,0x6C,0x09,0x4C,0x00,0x18,0x9A,0x33,0x03,0x6D,0xFF,0x6D,0xD8,0x6C,0x00,0x18,0x9A,0x33,0x08,0x4D,0xFE,0xF7,0x1F,0x6D,0x00,0x18,0x5D,0xBA,0x5E,0x6C,0x10,0x97,0x0F,0x91,0x0E,0x90,0x00,0xEF,0x09,0x63,0x00,0x00,0xCC,0xA0,0x11,0x80,0xE0,0xDF,0x10,0x80,0xFF,0xFF,0xFF,0xF1,0x00,0xF8,0x10,0x80,0xFF,0xFF,0x03,0xE0,0x00,0x00,0x00,0x80,0x00,0xFB,0x10,0x80,0x00,0x00,0x00,0x04,0x38,0xF4,0x04,0x80,0x00,0x00,0x00,0xB6,0x30,0xF4,0x04,0x80,0xE0,0x63,0x3F,0x62,0x3E,0xD0,0x0F,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x00,0x68,0x7D,0x67,0x04,0xF0,0x1F,0x6A,0x9D,0x67,0x12,0xC3,0x48,0xCB,0x00,0x18,0xEC,0xC6,0x10,0x4C,0x08,0xB4,0x04,0x63,0x41,0x6B,0x41,0x9C,0x09,0xC4,0x3F,0x97,0x3E,0x90,0x6B,0xEB,0x6C,0xEA,0x41,0xDC,0x00,0xEF,0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,0xCC,0xA0,0x11,0x80,0xE0,0x63,0x3E,0x62,0x18,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x16,0xB5,0x17,0xB3,0x07,0x6E,0x41,0x9D,0x16,0xB4,0x4E,0x32,0xCC,0xEA,0x69,0xE2,0x40,0xA2,0x60,0x9D,0xCC,0xEA,0x40,0xF6,0x40,0x32,0x8C,0xEB,0x4D,0xEB,0x9D,
+0x67,0x04,0xF0,0x1E,0x6A,0x60,0xDD,0x48,0xCC,0x03,0x6A,0x52,0xC4,0x80,0xF4,0x62,0x32,0x7F,0x6C,0x8C,0xEA,0x9D,0x67,0x53,0xC4,0x62,0x32,0x40,0xF6,0x62,0x33,0xCC,0xEB,0x75,0xC4,0x54,0xC4,0x00,0x18,0xAA,0xC6,0x10,0x4C,0x04,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,0xCC,0xA0,0x11,0x80,0xD0,0xDF,0x10,0x80,0xFF,0xFF,0xFF,0xF1,0xE0,0x63,0x3E,0x62,0x3D,0xD1,0x3C,0xD0,0x11,0xB4,0xFB,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x7D,0x67,0x04,0xF0,0x1F,0x6A,0x48,0xCB,0x0D,0xB2,0x0E,0xB0,0x00,0x69,0xA1,0xF1,0x48,0xAA,0x9D,0x67,0x32,0xC3,0x49,0xD8,0x00,0x18,0xEC,0xC6,0x10,0x4C,0x41,0x98,0x41,0x6B,0x6B,0xEB,0x05,0x63,0x6C,0xEA,0x29,0xC0,0x41,0xD8,0x3E,0x97,0x3D,0x91,0x3C,0x90,0x00,0xEF,0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,0x58,0x46,0x11,0x80,0xCC,0xA0,0x11,0x80,0xE0,0x63,0x3E,0x62,0x0E,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x7D,0x67,0x04,0xF0,0x1D,0x6A,0x48,0xCB,0x01,0x6A,0x52,0xC3,0x09,0xB2,0x7F,0x6B,0x9D,0x67,0x40,0x9A,0x10,0x4C,0x80,0xF4,0x42,0x32,0x6C,0xEA,0x7D,0x67,0x00,0x18,0x7C,0xC6,0x53,0xC3,0x04,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0x76,0x5D,0x11,0x80,0xCC,0xA0,0x11,0x80,0xE0,0x63,0x3E,0x62,0x24,0xB4,0xFC,0x63,0x08,0x6E,0x00,0x18,0x64,0x2E,0x00,0x6D,0x7D,0x67,0x04,0xF0,0x0D,0x6A,0x48,0xCB,0x19,0x6A,0x00,0x6C,0x52,0xC3,0x60,0x6A,0x4B,0xEA,0x53,0xC3,0x94,0xC3,0x55,0xC3,0x96,0xC3,0x97,0xC3,0x98,0xC3,0x1B,0xB3,0xBD,0x67,0x9F,0xC5,0x54,0xA3,0x20,0xF0,0x80,0xC5,0x20,0xF0,0x82,0xC5,0x59,0xC5,0x55,0xA3,0x20,0xF0,0x84,0xC5,0x20,0xF0,0x85,0xC5,0x5A,0xC5,0x56,0xA3,0x20,0xF0,0x87,0xC5,0x20,0xF0,0x89,0xC5,0x5B,0xC5,0x57,0xA3,0x5C,0xC5,0x58,0xA3,0x5D,0xC5,0x59,0xA3,0x5E,0xC5,0x02,0x6A,0x20,0xF0,0x41,0xC5,0x20,0xF0,0x43,0xC5,0x1E,0x6A,0x20,0xF0,0x46,0xC5,0x12,0x6A,0x20,0xF0,0x48,0xC5,0x20,0xF0,0x4A,0xC5,0x20,0xF0,0x8B,0xC5,0x9D,0x67,0x00,0x18,0xFC,0xC2,0x10,0x4C,0x04,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0x00,0x00,0x76,0x5D,0x11,0x80,0xCC,0xA0,0x11,0x80,0xE0,0x63,0x3E,0x62,0x1A,0xB4,0xFC,0x63,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x7D,0x67,0x04,0xF0,0x06,0x6A,0x48,0xCB,0x0F,0x6A,
+0x9D,0x67,0x52,0xC3,0x00,0x6A,0x54,0xC4,0x56,0xC4,0x57,0xC4,0x58,0xC4,0x59,0xC4,0x5A,0xC4,0x5B,0xC4,0x5C,0xC4,0x5D,0xC4,0x5E,0xC4,0x5F,0xC4,0x07,0x6A,0x20,0x6B,0x20,0xF0,0x40,0xC4,0x03,0x6A,0x73,0xC4,0x75,0xC4,0x20,0xF0,0x41,0xC4,0x00,0x18,0xA8,0xC1,0x10,0x4C,0x7D,0x67,0x04,0xF0,0x0A,0x6A,0x48,0xCB,0x9D,0x67,0x01,0x6A,0x52,0xC3,0x53,0xC3,0x00,0x18,0x5E,0xC2,0x10,0x4C,0x04,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0x76,0x5D,0x11,0x80,0xE0,0x63,0x3E,0x62,0xFB,0x63,0x7D,0x67,0x00,0xF4,0x06,0x6A,0x48,0xCB,0x03,0x6A,0x52,0xC3,0x13,0x6A,0x55,0xC3,0x26,0xB2,0x6D,0xA2,0x08,0x73,0x22,0x60,0x70,0x32,0x69,0xE2,0x24,0xB6,0x48,0x32,0x6B,0xE2,0x48,0x32,0xD1,0xE2,0x20,0xF1,0x4F,0xA4,0x01,0x6D,0xAC,0xEA,0x16,0x22,0x00,0xF1,0x52,0xAE,0x47,0xEB,0xAC,0xEA,0x11,0x22,0x20,0xF1,0x6C,0xAC,0xFF,0xF7,0x1F,0x6A,0x9D,0x67,0x4C,0xEB,0x5D,0x67,0x73,0xC2,0xBD,0x67,0x62,0x32,0x7D,0x67,0x54,0xC3,0x00,0xF1,0x18,0x4D,0x00,0x18,0xD2,0x48,0x10,0x4C,0x13,0xB2,0x6C,0xA2,0x0A,0x73,0x1D,0x60,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x10,0xB3,0x48,0x32,0x71,0xE2,0xE0,0xF0,0x4B,0xA4,0xFF,0x6B,0x6C,0xEA,0x01,0x72,0x0E,0x61,0x60,0xF2,0x7C,0xAC,0x5D,0x67,0x9D,0x67,0x73,0xC2,0xBD,0x67,0x62,0x32,0x7D,0x67,0x54,0xC3,0x00,0xF1,0x18,0x4D,0x00,0x18,0xD2,0x48,0x10,0x4C,0x05,0x63,0x3E,0x97,0x00,0xEF,0x20,0x63,0xCC,0xA0,0x11,0x80,0x58,0x46,0x11,0x80,0x48,0x60,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x12,0xB0,0x00,0x6A,0xFF,0x6D,0xC0,0xF1,0x46,0xC0,0xC0,0xF1,0x5A,0xC0,0x03,0x6A,0xC0,0xF1,0x58,0xC0,0x0E,0xB2,0x02,0x6B,0xAC,0xEC,0xC0,0xF1,0x65,0xC0,0xC0,0xF1,0x64,0xC0,0xC0,0xF1,0x79,0xC0,0x40,0xF1,0x9E,0xC0,0x60,0xC2,0x00,0x18,0xEB,0xA4,0xAC,0xEC,0x20,0xF1,0x8E,0x40,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x05,0x97,0x04,0x90,0x00,0xEF,0x03,0x63,0x48,0x5C,0x11,0x80,0xBD,0x5B,0x11,0x80,0xE0,0x63,0x3E,0x62,0x3D,0xD1,0x3C,0xD0,0xF5,0x63,0x7D,0x67,0x00,0xF4,0x05,0x6A,0x7E,0xB5,0x54,0xCB,0x9D,0x67,0x0D,0x6A,0x20,0xF0,0x4A,0xC3,0x2B,0x4C,0x00,0x18,0x2E,0x2E,0x06,0x6E,0x7A,0xB0,0x00,0x6A,0x9D,0x67,0x01,0x6B,0x20,0xF0,0x51,0xC4,0x20,0xF0,0x52,0xC4,0x20,
+0xF0,0x73,0xC4,0x20,0xF0,0x54,0xC4,0x20,0xF0,0x55,0xC4,0x20,0xF0,0x56,0xC4,0x20,0xF0,0x77,0xC4,0xC0,0xF1,0x46,0xC0,0xC0,0xF1,0x5A,0xC0,0x03,0x6A,0xC0,0xF1,0x58,0xC0,0x6F,0xB2,0x02,0x6B,0xC0,0xF1,0x65,0xC0,0xC0,0xF1,0x64,0xC0,0xC0,0xF1,0x79,0xC0,0x20,0xF1,0x8E,0x40,0x60,0xC2,0x00,0x6D,0x00,0x18,0x64,0x2E,0x08,0x6E,0x60,0xF1,0x4E,0xA0,0x02,0x72,0x07,0x60,0x03,0x52,0x02,0x60,0x01,0x72,0x01,0x10,0x03,0x72,0x15,0x61,0xAF,0x10,0x63,0xB5,0x00,0x6B,0xFF,0x6C,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x48,0x32,0xA9,0xE2,0x20,0xF0,0x58,0xA2,0x8C,0xEA,0x80,0xF0,0x1F,0x2A,0x01,0x4B,0x8C,0xEB,0x0A,0x5B,0xEF,0x61,0x00,0x18,0xD4,0x5A,0x0A,0x04,0x62,0x67,0x80,0xF0,0x1D,0x2A,0x0A,0x02,0x06,0x4A,0x64,0xA2,0xFF,0xF7,0x1F,0x6C,0xBD,0x67,0x60,0x33,0x4C,0xD3,0x43,0xA2,0x22,0x4D,0x4D,0xEB,0x8C,0xEB,0x4C,0xD3,0x5D,0x67,0x20,0xF0,0x53,0xA2,0x7D,0x67,0x4D,0xD2,0x20,0xF0,0x74,0xA3,0x0A,0x02,0x0A,0x4A,0x4E,0xD3,0x24,0xA2,0x43,0xA2,0x20,0x31,0x8C,0xE9,0x4D,0xE9,0x8C,0xE9,0x9D,0x67,0x20,0xF0,0x97,0xA4,0x4F,0xD4,0x9D,0x67,0x00,0x18,0x8E,0xDF,0x20,0x4C,0x50,0xD2,0x62,0x67,0x75,0x2A,0x5D,0x67,0x71,0xAA,0xFF,0xF7,0x1F,0x6C,0x3D,0xB5,0x8C,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x3C,0xB3,0x48,0x32,0x61,0xE2,0xE0,0xF0,0x8D,0x40,0x00,0x18,0x2E,0x2E,0x06,0x6E,0x5D,0x67,0x20,0xF1,0x50,0xAA,0x7D,0x67,0x9D,0x67,0x60,0xF2,0x5E,0xC8,0x20,0xF1,0x74,0xA3,0x5D,0x67,0xE0,0xF0,0x7A,0xC0,0x20,0xF1,0x98,0xA4,0x7D,0x67,0xE0,0xF0,0x9C,0xC0,0x20,0xF1,0x5C,0xA2,0xE0,0xF0,0x5D,0xC0,0x20,0xF0,0x40,0xA3,0xE0,0xF0,0x53,0xC0,0x01,0x6A,0x80,0xF2,0x42,0xC0,0x91,0xAB,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x45,0x95,0x4C,0xEC,0x7D,0x67,0x40,0xF1,0x60,0xA3,0x22,0x32,0x5E,0x32,0x00,0xF1,0x71,0xC0,0x18,0x22,0xEF,0xF7,0x1F,0x6A,0x4C,0xE9,0x01,0x6A,0x80,0xF0,0x3E,0xC8,0x04,0xD2,0x20,0xB2,0xFF,0xF7,0x1F,0x6C,0xFA,0x6D,0x05,0xD2,0x80,0xF0,0x5E,0xA8,0xA4,0xF4,0x1A,0x6E,0x20,0xF5,0x17,0x6F,0x8C,0xEA,0x06,0x6C,0x20,0x18,0x1B,0x32,0x06,0xD2,0x05,0x10,0x5D,0x67,0x40,0xF1,0x40,0xAA,0x80,0xF0,0x5E,0xC8,0x00,0x18,0x4E,0x9B,0x0A,0x04,0x22,0x67,
+0x0F,0x22,0x7D,0x67,0x20,0xF0,0x80,0xA3,0xE0,0xF0,0xA8,0xA0,0x00,0x18,0xB6,0xDF,0x00,0x65,0x0B,0xB4,0x00,0x18,0xD3,0xDF,0x00,0x65,0x07,0x10,0x0C,0x6B,0x06,0x10,0x5D,0x67,0x91,0xAA,0x20,0x18,0x13,0x26,0x01,0x6D,0x71,0x67,0x0B,0x63,0x3E,0x97,0x3D,0x91,0x3C,0x90,0x43,0x67,0x00,0xEF,0x20,0x63,0x00,0x00,0xE0,0xA0,0x11,0x80,0x48,0x5C,0x11,0x80,0xBD,0x5B,0x11,0x80,0x48,0x60,0x11,0x80,0xF0,0xA5,0x10,0x80,0xF3,0x63,0x18,0x62,0x17,0xD1,0x16,0xD0,0x00,0x6A,0x0C,0xD2,0x0D,0xD2,0x0E,0xD2,0x7D,0x67,0x01,0xF4,0x03,0x6A,0x1A,0xD4,0x54,0xCB,0x62,0xA4,0x23,0xA4,0x26,0x5B,0x20,0xF4,0x05,0x60,0x00,0xF0,0x10,0x0A,0x64,0x33,0x4D,0xE3,0x60,0x8B,0x4D,0xE3,0x00,0xEB,0x00,0x65,0x4D,0x00,0x59,0x00,0xAD,0x00,0x77,0x02,0x23,0x03,0x63,0x03,0xEF,0x03,0x3F,0x08,0x11,0x04,0x25,0x04,0x43,0x04,0x57,0x04,0x25,0x07,0xC7,0x05,0x6B,0x04,0x97,0x05,0xAF,0x05,0x25,0x07,0xD7,0x05,0xE9,0x05,0xFB,0x05,0x29,0x06,0x35,0x06,0x4B,0x06,0x57,0x06,0x6B,0x06,0x7B,0x06,0x8B,0x06,0x97,0x06,0xA9,0x06,0x3B,0x08,0x3B,0x08,0x3B,0x08,0x3B,0x08,0xC7,0x06,0x07,0x07,0x13,0x07,0x31,0x08,0x21,0xF0,0x04,0xB2,0x03,0x6C,0x40,0xAA,0x0C,0xD2,0x17,0x13,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x02,0xF1,0x03,0x6A,0x4B,0xEA,0x4C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x00,0x6C,0xA4,0x67,0x00,0x18,0x01,0xA0,0xC4,0x67,0x80,0x18,0x38,0x2D,0x00,0x6C,0x00,0x18,0xFE,0x4F,0x00,0x65,0x00,0x6D,0x9D,0x67,0x28,0x4C,0x80,0x18,0x95,0x2B,0xC5,0x67,0xC0,0xF7,0x1C,0xB3,0x0A,0x6A,0x4C,0xC3,0x08,0x6A,0x4D,0xC3,0x00,0x6A,0x49,0xC3,0x4A,0xC3,0xC9,0x13,0x0B,0x59,0x18,0x67,0xA0,0xF3,0x0D,0x20,0xC0,0xF7,0x00,0xB4,0x05,0x21,0x41,0x9C,0x40,0x6B,0x6C,0xEA,0x07,0x22,0x8F,0x13,0x41,0x9C,0x40,0x6B,0x6C,0xEA,0x02,0x2A,0x29,0xC4,0xB7,0x13,0xA0,0xF7,0x04,0xB3,0x04,0x6A,0xFA,0x6D,0x89,0xA3,0x29,0xC3,0x04,0xD2,0x80,0xF7,0x1C,0xB2,0x06,0xD1,0x0B,0xD4,0x05,0xD2,0x4A,0xA3,0x01,0x6C,0xA4,0xF1,0x00,0x6E,0x07,0xD2,0x61,0x9B,0xE1,0xF4,0x11,0x6F,0x6A,0x32,0x66,0xEC,0x8C,0xEA,0x8C,0xEB,0x08,0xD2,0x20,0x18,0x1B,0x32,0x09,0xD3,0xA0,0xF0,0x08,0x20,0x00,0xF0,0x10,0x0A,0x24,0x33,0x4D,
+0xE3,0x60,0x8B,0x4D,0xE3,0x00,0xEB,0x00,0x65,0x17,0x00,0x95,0x00,0xC1,0x00,0xF7,0x00,0x17,0x01,0x1B,0x01,0x1F,0x01,0x41,0x01,0x29,0x01,0x31,0x01,0x39,0x01,0x40,0xF7,0x04,0xB2,0x61,0x9A,0x01,0x6A,0x6C,0xEA,0x0B,0x22,0x02,0x6A,0x6C,0xEA,0x04,0x22,0x80,0x18,0x9A,0x2D,0x00,0x65,0x15,0x10,0x80,0x18,0xC0,0x2D,0x00,0x65,0x11,0x10,0x02,0x6A,0x6C,0xEA,0x04,0x22,0x80,0x18,0xD3,0x2E,0x00,0x65,0x0A,0x10,0x04,0x6A,0x6C,0xEA,0x04,0x22,0x80,0x18,0xA4,0x2E,0x00,0x65,0x03,0x10,0x80,0x18,0x12,0x2E,0x00,0x65,0x00,0xF7,0x00,0xB0,0x6B,0x98,0x4A,0x98,0x29,0x98,0x10,0xD3,0x00,0x18,0xFE,0x4F,0x0F,0xD2,0x00,0x6D,0x9D,0x67,0x28,0x4C,0x80,0x18,0x95,0x2B,0xC5,0x67,0x0B,0x94,0x0A,0x6A,0x4C,0xC0,0x02,0x5C,0x08,0x6A,0x4D,0xC0,0x40,0xF3,0x0D,0x60,0x0F,0x92,0x10,0x93,0x29,0xD8,0x4A,0xD8,0x6B,0xD8,0x47,0x13,0xC0,0xF6,0x04,0xB4,0x02,0x6A,0x61,0x9C,0x4D,0xEB,0x04,0x6A,0x6C,0xEA,0x61,0xDC,0x07,0x22,0x02,0x6A,0x4B,0xEA,0x6C,0xEA,0x80,0x18,0xE9,0x2E,0x41,0xDC,0x1A,0x10,0x01,0x6A,0x6D,0xEA,0x80,0x18,0xB0,0x2D,0x41,0xDC,0x14,0x10,0x80,0xF6,0x18,0xB4,0x03,0x6A,0x4B,0xEA,0x61,0x9C,0x4C,0xEB,0x02,0x6A,0x4B,0xEA,0x4C,0xEB,0x04,0x6A,0x6C,0xEA,0x61,0xDC,0x04,0x22,0x80,0x18,0xB6,0x2E,0x00,0x65,0x03,0x10,0x80,0x18,0x25,0x2E,0x00,0x65,0x60,0xF6,0x10,0xB2,0x40,0x6C,0x61,0x9A,0x8D,0xEB,0x61,0xDA,0x16,0x13,0x60,0xF6,0x04,0xB0,0x03,0x6B,0x6B,0xEB,0x41,0x98,0x6C,0xEA,0x01,0x6B,0x6D,0xEA,0x80,0x18,0xD2,0x2D,0x41,0xD8,0x41,0x98,0x40,0x6B,0x6D,0xEA,0x41,0xD8,0x06,0x13,0x01,0x6C,0x03,0x10,0x02,0x6C,0x01,0x10,0x03,0x6C,0x80,0x18,0x6B,0x2F,0x00,0x65,0xFD,0x12,0x80,0x18,0xFA,0x2E,0x00,0x65,0xF9,0x12,0x80,0x18,0x21,0x2F,0x00,0x65,0xF5,0x12,0x80,0x18,0x3D,0x2F,0x00,0x65,0xF1,0x12,0x80,0x18,0x80,0x2F,0x00,0x65,0xE0,0xF2,0x0C,0x22,0x12,0x72,0x98,0x67,0x01,0x5C,0x78,0x67,0x01,0x5B,0x58,0x67,0x03,0x4A,0xE3,0x12,0x04,0x59,0xA0,0xF2,0x13,0x60,0x80,0x18,0x38,0x2D,0x00,0x6C,0x57,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x02,0xF1,0x03,0x6A,0x4B,0xEA,0x4C,0xEE,0x57,0x6C,0x00,0x18,0x01,0xA0,0x01,0x6D,0x00,0x6C,0xA4,0x67,0x00,0x18,0x01,0xA0,0xC4,0x67,
+0x00,0x18,0xFE,0x4F,0x00,0x65,0x00,0x6D,0x9D,0x67,0x28,0x4C,0x80,0x18,0x95,0x2B,0xC5,0x67,0xA0,0xF5,0x18,0xB0,0x0A,0x6A,0x4C,0xC0,0x08,0x6A,0x2A,0xC0,0x00,0x1C,0xDD,0x31,0x4D,0xC0,0x11,0xD2,0x41,0x98,0x05,0x6B,0x6B,0xEB,0x6C,0xEA,0x01,0x71,0x41,0xD8,0x06,0x61,0x80,0x18,0x6B,0x2F,0x03,0x6C,0x00,0x18,0xC4,0x53,0x00,0x6C,0x02,0x71,0x04,0x61,0x41,0x98,0x04,0x6B,0x6D,0xEA,0x41,0xD8,0x00,0x1C,0xE5,0x31,0x11,0x94,0x02,0x6A,0x04,0xD2,0x60,0xF5,0x18,0xB2,0x06,0xD1,0x01,0x6C,0x05,0xD2,0x41,0x98,0xFA,0x6D,0x44,0xF2,0x19,0x6E,0x4A,0x32,0x8C,0xEA,0xE1,0xF4,0x12,0x6F,0x20,0x18,0x1B,0x32,0x07,0xD2,0x8E,0x12,0x4F,0x59,0x25,0x60,0x1A,0x93,0x44,0xA3,0x08,0x5A,0x21,0x60,0x40,0xF5,0x08,0xB5,0x7F,0x6A,0x4C,0xE9,0x80,0x9D,0x40,0xF5,0x04,0xB2,0x80,0xF4,0x20,0x33,0x4C,0xEC,0x6D,0xEC,0x80,0xDD,0x1A,0x92,0x64,0xA2,0xFF,0x6A,0x4C,0xEB,0x07,0x6A,0x4C,0xEB,0x20,0xF5,0x10,0xB2,0x00,0xF7,0x60,0x33,0x8C,0xEA,0x6D,0xEA,0x40,0xDD,0x6E,0x12,0x1A,0x93,0x0A,0x59,0x45,0xA3,0x84,0xA3,0x40,0x32,0x4D,0xEC,0x03,0x61,0x03,0x6C,0x0D,0xD4,0x64,0x12,0x00,0xF5,0x00,0xB6,0x00,0xF5,0x0C,0xB3,0xE3,0xF7,0x1F,0x6A,0xA0,0x9E,0x8C,0xEA,0x54,0x32,0x6C,0xED,0x00,0xF5,0x00,0xB3,0x4D,0xED,0x24,0x32,0x69,0xE2,0x40,0xAA,0xFF,0xF7,0x1F,0x6B,0xA0,0xDE,0x6C,0xEA,0x4C,0x32,0x82,0xEA,0x20,0xF2,0x14,0x61,0x03,0x59,0x05,0x60,0x02,0x6A,0x4B,0xEA,0x4C,0xED,0xA0,0xDE,0x0F,0x10,0x06,0x59,0xFF,0x6B,0x58,0x67,0x01,0x6C,0x6C,0xEA,0x61,0x9E,0x8D,0xED,0x8C,0xEA,0x81,0x6C,0x8B,0xEC,0x5C,0x32,0x8C,0xEB,0x4D,0xEB,0xA0,0xDE,0x61,0xDE,0xA0,0xF4,0x1C,0xB2,0x1F,0x6B,0x6B,0xEB,0x49,0xE1,0x80,0xA2,0x0F,0x6A,0x4C,0xEC,0x40,0x9E,0x84,0x34,0x6C,0xEA,0x8D,0xEA,0x40,0xDE,0x28,0x12,0x1A,0x92,0x85,0xA2,0x05,0x5C,0xE0,0xF1,0x15,0x60,0x60,0xF4,0x1C,0xB5,0x07,0x6A,0x4C,0xEC,0x41,0x9D,0x39,0x6B,0x6B,0xEB,0x8C,0x34,0x6C,0xEA,0x8D,0xEA,0x41,0xDD,0x17,0x12,0x1A,0x94,0x60,0xF4,0x04,0xB3,0x43,0xA4,0x46,0xC3,0x44,0xA4,0x47,0xC3,0x45,0xA4,0x48,0xC3,0x0D,0x12,0x40,0xF4,0x10,0xB5,0x60,0xF4,0x08,0xB3,0x3E,0x34,0x40,0x9D,0xC0,0xF7,0x80,0x34,0x6C,0xEA,0x8D,0xEA,0x40,0xDD,0x7F,0x6A,0x4C,0xE9,0x25,0xC5,0xFE,
+0x11,0x1A,0x94,0x20,0xF4,0x10,0xB3,0x43,0xA4,0x4E,0xC3,0x44,0xA4,0x4F,0xC3,0x45,0xA4,0x50,0xC3,0xF4,0x11,0x1A,0x94,0x00,0xF4,0x1C,0xB3,0x43,0xA4,0x51,0xC3,0x44,0xA4,0x52,0xC3,0x45,0xA4,0x53,0xC3,0xEA,0x11,0x00,0xF4,0x0C,0xB6,0xFF,0x6C,0xA4,0x67,0x69,0xA6,0x6C,0xED,0x0A,0x75,0x40,0x61,0x4C,0xA6,0x00,0x6F,0x8C,0xEA,0x0A,0x72,0x14,0x60,0x22,0x67,0x44,0x32,0x29,0xE2,0x4C,0x32,0x2B,0xE2,0x4C,0x32,0x00,0xF4,0x04,0xB3,0x2B,0xE2,0x48,0x32,0x69,0xE2,0x20,0xF0,0x58,0xA2,0x05,0x6F,0x8C,0xEA,0x04,0x72,0x03,0x60,0x0A,0x6A,0x00,0x6F,0x4C,0xC6,0x4D,0xA6,0x08,0x72,0x6A,0x60,0x22,0x67,0x50,0x32,0x29,0xE2,0xF8,0xB4,0x48,0x32,0x2B,0xE2,0x48,0x32,0x89,0xE2,0x20,0xF1,0x4F,0xA2,0x01,0x6B,0x05,0x6F,0x6C,0xEA,0x05,0x22,0x00,0xF1,0x52,0xAC,0x47,0xE9,0x6C,0xEA,0x57,0x2A,0x08,0x6A,0x00,0x6F,0x4D,0xC6,0x53,0x10,0xEF,0xB0,0x7F,0x4D,0x6E,0x4D,0x05,0x6F,0x90,0x67,0xB5,0xE3,0x06,0x6E,0x00,0x18,0x2E,0x2E,0x15,0xD7,0xFF,0xF7,0x38,0xC0,0x25,0x10,0x4B,0x43,0x8C,0xEA,0x03,0x5A,0x23,0x60,0xE5,0xB5,0x04,0x6F,0x00,0x69,0x24,0x32,0x29,0xE2,0x4C,0x32,0x2B,0xE2,0x4C,0x32,0x2B,0xE2,0x48,0x33,0xA9,0xE3,0x20,0xF0,0x58,0xA2,0x8C,0xEA,0x04,0x72,0xDF,0x60,0x01,0x49,0x8C,0xE9,0x0A,0x59,0xEF,0x61,0x2D,0x10,0xDC,0xB0,0x60,0xF1,0x02,0x4D,0x05,0x6F,0x90,0x67,0xB5,0xE3,0x06,0x6E,0x00,0x18,0x2E,0x2E,0x15,0xD7,0xFF,0xF7,0x39,0xC0,0x15,0x97,0x1F,0x10,0x48,0x43,0x8C,0xEA,0x02,0x5A,0xE5,0x67,0x1A,0x60,0xD2,0xB5,0x04,0x6F,0x00,0x69,0x01,0x6E,0xFF,0xF7,0x1F,0x68,0x30,0x32,0x29,0xE2,0x48,0x32,0x2B,0xE2,0x48,0x33,0xA9,0xE3,0x20,0xF1,0x4F,0xA2,0xCC,0xEA,0x06,0x22,0x00,0xF1,0x52,0xAD,0x0C,0xEA,0x47,0xE9,0xCC,0xEA,0xD7,0x2A,0x01,0x49,0x8C,0xE9,0x08,0x59,0xEC,0x61,0xBC,0xB2,0x4A,0xA2,0x0C,0xD2,0x0C,0x93,0xE0,0x32,0x4D,0xEB,0x0C,0xD3,0x77,0x10,0xC3,0xB2,0x20,0xF0,0x7C,0xA2,0x0C,0xD3,0x20,0xF0,0x7D,0xA2,0x0C,0x94,0x20,0xF0,0x5E,0xA2,0x60,0x33,0x6D,0xEC,0x85,0x10,0xBD,0xB2,0x20,0xF0,0x7F,0xA2,0x0C,0xD3,0x40,0xF0,0x60,0xA2,0x0C,0x94,0x40,0xF0,0x41,0xA2,0x60,0x33,0x6D,0xEC,0x79,0x10,0x1A,0x93,0x43,0xA3,0x62,0xAB,0x60,0x33,0x6D,0xEA,0xB5,0xB3,0x41,0xDB,0x34,0x11,0x1A,0x94,
+0xA7,0xB3,0x43,0xA4,0x54,0xC3,0x44,0xA4,0x55,0xC3,0x45,0xA4,0x56,0xC3,0x2B,0x11,0x1A,0x94,0xA3,0xB3,0x43,0xA4,0x57,0xC3,0x44,0xA4,0x58,0xC3,0x45,0xA4,0x59,0xC3,0x22,0x11,0x4F,0x41,0xFF,0x6B,0x6C,0xEA,0x09,0x5A,0x00,0xF1,0x04,0x60,0x5C,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0xFF,0xF7,0x1F,0x6E,0x4C,0xEE,0x79,0x6A,0x4B,0xEA,0x4C,0xEE,0x2C,0x33,0x78,0x6A,0x4C,0xEB,0x5C,0x6C,0x01,0x6D,0x6D,0xEE,0xD6,0x10,0x93,0xB2,0x92,0xAA,0x69,0x9A,0x0C,0xD4,0x9E,0xB4,0x07,0x10,0x90,0xB2,0x69,0x9A,0x62,0x34,0x82,0x34,0x0C,0xD4,0xFF,0xF7,0x1F,0x6C,0x8C,0xEB,0x69,0xDA,0x02,0x6A,0x3C,0x10,0x8B,0xB2,0x96,0xAA,0x6B,0x9A,0x0C,0xD4,0x96,0xB4,0x07,0x10,0x88,0xB2,0x6B,0x9A,0x62,0x34,0x82,0x34,0x0C,0xD4,0xFF,0xF7,0x1F,0x6C,0x8C,0xEB,0x6B,0xDA,0xEE,0x17,0x78,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x02,0x6B,0x0C,0xD2,0x0E,0xD3,0xE2,0x10,0x76,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xD2,0x02,0x6C,0x0E,0xD4,0xDA,0x10,0x77,0x6C,0x00,0x18,0xEB,0x9F,0x01,0x6D,0x0C,0xD2,0xD8,0x17,0x78,0xB2,0x74,0xA2,0x0C,0xD3,0x75,0xA2,0x0C,0x94,0x56,0xA2,0x60,0x33,0x6D,0xEC,0x08,0x10,0x73,0xB2,0x77,0xA2,0x0C,0xD3,0x78,0xA2,0x0C,0x94,0x59,0xA2,0x60,0x33,0x6D,0xEC,0x40,0x32,0x40,0x32,0x4D,0xEC,0x0C,0xD4,0x03,0x6A,0x0E,0xD2,0xBC,0x10,0x1A,0x93,0x79,0xB1,0x43,0xA3,0x44,0x33,0x4D,0xE3,0x6C,0x33,0x4D,0xE3,0x40,0x99,0x68,0x30,0x4F,0xEA,0x03,0x22,0x00,0x18,0xFD,0x1D,0x91,0x67,0x0E,0x20,0x00,0x18,0x40,0xA4,0x00,0x65,0x72,0xB6,0x00,0x6F,0x01,0x6C,0xB1,0x67,0x00,0x18,0xF3,0x1D,0x04,0xD7,0x80,0x99,0x00,0x18,0x0C,0x1E,0xB0,0x67,0x6D,0xB2,0x00,0xCA,0x9C,0x10,0x1A,0x94,0x66,0xB2,0x63,0xA4,0x80,0xF1,0x61,0xC2,0x96,0x10,0x1A,0x94,0x00,0x6B,0x43,0xA4,0x01,0x22,0x01,0x6B,0x61,0xB2,0x80,0xF1,0x71,0xC2,0x8D,0x10,0x05,0x59,0x00,0x6A,0x78,0x67,0x12,0xD2,0x70,0x23,0x1A,0x94,0x42,0xA4,0x02,0xAC,0x0C,0x72,0x05,0x61,0x5B,0xB2,0x01,0x6F,0x41,0x9A,0x12,0xD2,0x03,0x10,0x12,0x97,0x03,0x6A,0x0E,0xD2,0x7A,0x23,0x00,0xF0,0x12,0x0A,0x24,0x33,0x4D,0xE3,0x60,0x8B,0x4D,0xE3,0x00,0xEB,0x00,0x65,0x0B,0x00,0x29,0x00,0x83,0x00,0xA5,0x00,0xAF,0x00,0x06,0x27,0x12,0x96,0x3F,0x6A,0x90,0x67,0x4C,0xEC,0x00,
+0x6D,0x31,0x10,0x3F,0x6A,0x90,0x67,0x4C,0xEC,0x00,0x18,0xEB,0x9F,0xA7,0x67,0x0C,0xD2,0x5E,0x10,0x02,0x31,0x01,0x6B,0x6C,0xE9,0x09,0x21,0xA3,0x67,0x40,0x6C,0xD1,0x67,0x14,0xD3,0x00,0x18,0x01,0xA0,0x15,0xD7,0x15,0x97,0x14,0x93,0x0C,0x27,0x7F,0x6A,0x4C,0xE8,0x07,0x34,0x40,0x6A,0x12,0x96,0x4D,0xEC,0xFF,0x6A,0x4C,0xEC,0x00,0x18,0x01,0xA0,0xA3,0x67,0x0B,0x10,0x7F,0x6A,0x4C,0xE8,0x07,0x34,0x40,0x6A,0x4D,0xEC,0xFF,0x6A,0x4C,0xEC,0x00,0x18,0xEB,0x9F,0xA3,0x67,0x0C,0xD2,0x38,0x21,0x40,0x6C,0x01,0x6D,0x00,0x6E,0x00,0x18,0x01,0xA0,0x00,0x65,0x31,0x10,0x01,0x6A,0x0C,0xEA,0x03,0x22,0x03,0x6B,0x0D,0xD3,0x2B,0x10,0x08,0x27,0x12,0x95,0xFF,0xF7,0x1F,0x6A,0x90,0x67,0x00,0x18,0x9A,0x33,0x4C,0xED,0x22,0x10,0x30,0xB2,0x12,0x10,0x01,0x6A,0x0C,0xEA,0x05,0x2A,0x2E,0xB2,0x06,0x10,0x01,0x6A,0x0C,0xEA,0x02,0x22,0x03,0x6A,0x15,0x10,0x2C,0xB2,0x06,0x27,0x7D,0x67,0x40,0xF0,0x68,0xAB,0x49,0xE0,0x60,0xCA,0x0E,0x10,0x49,0xE0,0x40,0xAA,0xFF,0xF7,0x1F,0x6C,0x4C,0xEC,0x0C,0xD4,0x07,0x10,0x01,0x6A,0x4C,0xE9,0x24,0xB2,0x20,0xC2,0x02,0x10,0x02,0x6A,0x0D,0xD2,0x0E,0x93,0x0D,0x94,0x70,0x32,0x4D,0xEC,0x1A,0x92,0x83,0xC2,0x1A,0x93,0x1A,0x94,0x41,0xA3,0x10,0x6B,0x6B,0xEB,0x6C,0xEA,0x41,0xC4,0x1A,0x92,0x0C,0x96,0x02,0x6C,0x00,0x18,0x2C,0x2B,0xA0,0x9A,0x18,0x97,0x17,0x91,0x16,0x90,0x00,0xEF,0x0D,0x63,0x00,0x00,0xD2,0x04,0x11,0x80,0xCC,0xA0,0x11,0x80,0xF0,0xA5,0x10,0x80,0xFF,0xFF,0x03,0xFE,0xFF,0xFF,0xFF,0x8F,0x1F,0x00,0xFC,0xFF,0xE8,0xDF,0x10,0x80,0xFC,0xDF,0x10,0x80,0xFF,0xFF,0xFF,0x7F,0x48,0x60,0x11,0x80,0x58,0x46,0x11,0x80,0xE0,0xA0,0x11,0x80,0xDC,0x00,0x11,0x80,0xFC,0xA0,0x11,0x80,0x00,0x00,0xFF,0xFF,0x88,0x07,0x11,0x80,0x01,0x91,0x02,0x80,0x08,0xA1,0x11,0x80,0x00,0x00,0x00,0xB6,0x00,0xA0,0x00,0xB0,0x00,0x10,0x00,0xB6,0x1C,0xA1,0x11,0x80,0xF8,0x63,0x0E,0x62,0x0D,0xD1,0x0C,0xD0,0x44,0xAC,0x24,0x67,0x01,0x72,0x55,0x61,0x00,0x9C,0x5D,0x67,0xFA,0x6D,0x20,0xF0,0x08,0xC2,0x02,0x6A,0x04,0xD2,0x45,0xB2,0x06,0xD0,0xE4,0xF4,0x03,0x6E,0x05,0xD2,0x41,0x9C,0xC1,0xF4,0x1C,0x6F,0x04,0x6C,0x20,0x18,0x1B,0x32,0x07,0xD2,0x3F,0x6A,0x4C,0xE8,0x20,0x70,0x0A,0x61,
+0x62,0xA1,0xFF,0x6A,0x4C,0xEB,0x06,0x2B,0x3C,0xB2,0x60,0xDA,0x3C,0xB2,0x60,0xDA,0x01,0x6A,0x42,0xC1,0x7D,0x67,0x20,0xF0,0x68,0xA3,0x3F,0x6A,0x6C,0xEA,0x24,0x72,0x03,0x67,0x24,0x61,0x7D,0x67,0x01,0xF4,0x03,0x6A,0x00,0x1C,0xDD,0x31,0x50,0xCB,0x00,0x18,0xFE,0x4F,0x02,0x67,0x00,0x6D,0x9D,0x67,0x20,0x4C,0x80,0x18,0x95,0x2B,0xC5,0x67,0x2F,0xB3,0x40,0x99,0x6C,0xEA,0x2F,0xB3,0x6E,0xEA,0x06,0x2A,0x80,0x18,0x6B,0x2F,0x03,0x6C,0x00,0x18,0xC4,0x53,0x00,0x6C,0xA0,0x99,0x02,0x6C,0x00,0x18,0x2C,0x2B,0x00,0x6E,0x00,0x1C,0xE5,0x31,0x90,0x67,0x3E,0x10,0xFF,0x6A,0x4C,0xE8,0x30,0x70,0x04,0x61,0x80,0x18,0x07,0x30,0x91,0x67,0x36,0x10,0x44,0xA9,0x02,0x72,0x30,0x61,0x21,0xB2,0x00,0xA2,0x2D,0x28,0x40,0x99,0x04,0xF0,0x0F,0x6B,0x6C,0xEA,0x6A,0xEA,0x0B,0x61,0x1E,0xB2,0xFF,0xF7,0x1F,0x6B,0x40,0xAA,0x6C,0xEA,0x40,0x32,0x40,0x32,0x00,0xF2,0x0F,0x6B,0x6D,0xEA,0x40,0xD9,0x02,0x6A,0x04,0xD2,0x11,0xB2,0x05,0x6C,0xFA,0x6D,0x05,0xD2,0x40,0x99,0x24,0xF5,0x13,0x6E,0xC1,0xF4,0x1D,0x6F,0x06,0xD2,0x41,0x99,0x20,0x18,0x1B,0x32,0x07,0xD2,0x11,0xB2,0xFF,0x6B,0x40,0xA2,0x6C,0xEA,0x07,0x22,0x40,0x99,0x6C,0xEA,0x30,0x72,0x03,0x60,0x0E,0xB2,0x00,0xDA,0x03,0x10,0x00,0x18,0xF4,0x2C,0x91,0x67,0x0E,0x97,0x0D,0x91,0x0C,0x90,0x00,0xEF,0x08,0x63,0xF0,0xA5,0x10,0x80,0x14,0xE0,0x10,0x80,0x38,0x91,0x10,0x80,0x00,0x00,0xFF,0x00,0x00,0x00,0x01,0x00,0x98,0x00,0x11,0x80,0x04,0x09,0x11,0x80,0x1C,0xA1,0x11,0x80,0x94,0x00,0x11,0x80,0xFD,0x63,0x04,0x62,0x00,0x18,0x23,0xEA,0x00,0x65,0x04,0x97,0x00,0xEF,0x03,0x63,0xEF,0x63,0x20,0x62,0x1F,0xD1,0x1E,0xD0,0x80,0xAC,0x00,0x6A,0xC0,0xB3,0x11,0xD4,0xA0,0xA5,0x1B,0xD2,0x84,0x32,0x89,0xE2,0x4C,0x32,0x8B,0xE2,0x4C,0x32,0x8B,0xE2,0x48,0x32,0x69,0xE2,0x19,0xD2,0x12,0xD5,0xE0,0xF0,0x6C,0xA2,0x18,0xD3,0xA0,0xF0,0x9A,0xAA,0x19,0x93,0x13,0xD4,0xA0,0xF0,0x58,0xAA,0x19,0x94,0x14,0xD2,0xA0,0xF0,0x7C,0xAB,0x19,0x92,0x15,0xD3,0x7D,0x67,0x60,0xF0,0x6C,0xA3,0xC0,0xF0,0x80,0xAC,0x16,0xD4,0xC0,0xF2,0x74,0xC2,0x9D,0x67,0xE0,0xF0,0x13,0xA2,0x60,0xF0,0x8C,0xA4,0xE0,0xF0,0x28,0xA2,0xC0,0xF2,0x95,0xC2,0xB1,0x67,0x00,0x18,0x7B,0xBB,0x90,0x67,0x17,
+0xD2,0x17,0x93,0x48,0x32,0x1C,0xD2,0x69,0xE2,0xA6,0xB3,0x44,0x32,0x69,0xE2,0x1A,0xD2,0x19,0x92,0xE0,0xF0,0xA8,0xA2,0x00,0x18,0xC3,0x34,0x90,0x67,0x12,0x93,0x0E,0x23,0x18,0x94,0x01,0x74,0x0B,0x61,0x1A,0x92,0x03,0xF4,0x00,0x6C,0x18,0xF0,0x00,0x6D,0xC3,0xAA,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x8D,0x93,0x4C,0xEE,0x14,0x93,0x05,0x23,0x19,0x94,0x00,0xF2,0x57,0xA4,0x01,0x72,0x15,0x60,0x03,0x6A,0x04,0xD2,0x95,0xB2,0x19,0x93,0x12,0x94,0x05,0xD2,0x14,0x92,0xFA,0x6D,0x64,0xF6,0x09,0x6E,0x06,0xD2,0x00,0xF2,0x57,0xA3,0x64,0xF4,0x18,0x6F,0x08,0xD4,0x04,0x6C,0x20,0x18,0x1B,0x32,0x07,0xD2,0x0C,0x11,0x00,0x1C,0xDD,0x31,0x00,0x65,0x9D,0x67,0x40,0x4C,0xB1,0x67,0x00,0x18,0x3B,0x94,0x1B,0xD2,0x10,0x92,0x88,0xB6,0x46,0x32,0x01,0x4A,0xCC,0xEA,0x10,0xD2,0x19,0x92,0xC0,0xF2,0xEE,0xAA,0x07,0x2F,0x12,0x93,0x01,0x73,0x04,0x61,0x00,0x1C,0xE5,0x31,0x1B,0x94,0xF2,0x10,0x10,0x95,0x08,0x25,0x14,0x94,0x06,0x24,0x9B,0xED,0x01,0x2C,0xE5,0xE8,0x10,0xEA,0x00,0x65,0x01,0x10,0x00,0x6A,0x14,0x93,0xFF,0xF7,0x1F,0x6C,0x4B,0xE3,0x13,0x93,0x8C,0xEA,0x65,0xE2,0x14,0x92,0x23,0xEA,0x01,0x60,0x47,0xE1,0x12,0x93,0x01,0x73,0x18,0x61,0x19,0x92,0xEC,0xEC,0xA0,0xF2,0x74,0x9A,0x14,0xD4,0xCC,0xEB,0x73,0xE5,0xA3,0xEB,0x44,0x67,0x02,0x61,0x6F,0xB2,0x49,0xE4,0x14,0x94,0x9A,0xEA,0x01,0x2C,0xE5,0xE8,0x12,0xE9,0x41,0x41,0x00,0x65,0x98,0xEA,0x12,0xEA,0x65,0xE2,0xA7,0xE1,0xCC,0xE9,0x19,0x94,0xFF,0x6B,0x14,0x35,0xE0,0xF0,0x48,0xA4,0x6C,0xED,0x02,0x6C,0x6C,0xEA,0x40,0x32,0x4C,0x32,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0x9A,0x33,0x4C,0xED,0x10,0x92,0x2D,0xE2,0x1D,0xD3,0x08,0x59,0x06,0x60,0x1D,0x94,0x14,0x93,0x71,0xE4,0x65,0xE1,0x1D,0xD4,0xF8,0x17,0x1D,0x94,0x43,0xE4,0x00,0x18,0xC4,0x36,0x04,0x30,0x41,0xE0,0x19,0x92,0x4E,0x6C,0x13,0xDA,0x00,0x18,0x9A,0x33,0x14,0x95,0x1D,0x95,0xFF,0xF7,0x1F,0x6B,0x48,0x6C,0x00,0x18,0x9A,0x33,0x6C,0xED,0x18,0x94,0x03,0x2C,0x16,0x95,0x15,0x90,0x07,0x10,0x15,0x92,0x16,0x93,0xFF,0xF7,0x1F,0x6C,0x00,0x6D,0x61,0xE2,0x8C,0xE8,0x00,0x18,0x9A,0x33,0x4C,0x6C,0x4A,0x6C,0x00,0x18,0x9A,0x33,0xB0,0x67,0x00,0x6C,0x00,0x18,0x9A,0x33,0x07,0x6D,0x12,0x92,
+0x0D,0x2A,0x18,0x93,0x01,0x73,0x0A,0x61,0x17,0x94,0x44,0xB2,0x7D,0x67,0x40,0xF0,0x68,0xA3,0x49,0xE4,0x60,0xC2,0x42,0xB2,0x49,0xE4,0x60,0xC2,0x1B,0x94,0x00,0x1C,0xE5,0x31,0x02,0x49,0x00,0x18,0x4E,0x05,0x00,0x65,0x01,0xF0,0x00,0x6D,0x00,0x18,0x78,0xBA,0x5E,0x6C,0x12,0x92,0x21,0x2A,0x18,0x93,0x01,0x73,0x0D,0x61,0x1A,0x92,0x18,0xF0,0x00,0x6C,0x03,0xF4,0x00,0x6D,0x00,0x18,0x8D,0x93,0xC3,0xAA,0x19,0x93,0x20,0x6A,0x00,0xF2,0x55,0xC3,0x11,0x10,0x51,0x59,0x07,0x61,0x11,0x95,0xFF,0xF7,0x1F,0x6A,0x91,0x67,0x00,0x18,0x3A,0x96,0x4C,0xEC,0x1A,0x92,0x18,0xF0,0x00,0x6C,0x01,0xF4,0x00,0x6D,0x00,0x18,0x8D,0x93,0xC3,0xAA,0x18,0x93,0x14,0x2B,0x12,0x94,0x12,0x24,0x51,0x59,0x10,0x61,0x11,0x95,0xFF,0xF7,0x1F,0x68,0x91,0x67,0x00,0x18,0x3A,0x96,0x0C,0xEC,0x1A,0x92,0x01,0xF4,0x00,0x6C,0x18,0xF0,0x00,0x6D,0xC3,0xAA,0x00,0x18,0x8D,0x93,0x0C,0xEE,0x2B,0x6A,0x7D,0x67,0x58,0xCB,0x14,0x94,0x1D,0xB2,0xFD,0x67,0x0A,0xD4,0x80,0x9A,0x00,0x6D,0x04,0x06,0x34,0x4F,0xA9,0xE7,0x40,0xA2,0xAD,0xE6,0x01,0x4D,0x08,0x5D,0x40,0xC3,0xF9,0x61,0x0A,0x95,0x0B,0x96,0x00,0x18,0x40,0x1E,0x0C,0x97,0x17,0x92,0x0F,0x22,0x1C,0x93,0x13,0xB2,0x49,0xE3,0x00,0x6B,0xFF,0xF7,0x7C,0xDA,0x1C,0x94,0x11,0xB2,0x49,0xE4,0xFF,0xF7,0x7C,0xDA,0x10,0xB2,0x49,0xE4,0xFF,0xF7,0x7C,0xDA,0x20,0x97,0x1F,0x91,0x1E,0x90,0x01,0x6A,0x00,0xEF,0x11,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x70,0x45,0x11,0x80,0xF0,0xA5,0x10,0x80,0xFF,0xFF,0xFF,0x03,0x00,0x00,0x00,0x08,0x48,0x06,0x11,0x80,0x3C,0x06,0x11,0x80,0x68,0x52,0x11,0x80,0x18,0x07,0x11,0x80,0xE8,0x06,0x11,0x80,0xB8,0x06,0x11,0x80,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0xC0,0xAC,0xFF,0xF7,0x1F,0x6A,0xFF,0x6F,0x4C,0xEE,0xEC,0xEE,0x4C,0xED,0x0A,0x65,0xCC,0x32,0xC9,0xE2,0x48,0x32,0x4D,0xB3,0xCB,0xE2,0x48,0x32,0x71,0xE2,0x29,0xA4,0xFF,0xF7,0x1F,0x75,0xEC,0xE9,0x4E,0x61,0x58,0xA4,0xEC,0xEA,0x01,0x72,0x42,0x61,0x47,0xB2,0x49,0xE1,0x40,0xA2,0xEC,0xEA,0x3D,0x2A,0x46,0xB2,0x01,0x6B,0x80,0x9A,0x40,0xF6,0x82,0x32,0x6C,0xEA,0x36,0x22,0xC4,0x30,0xC9,0xE0,0x42,0xB3,0x48,0x32,0xCB,0xE2,0x48,0x32,0x7D,0xE2,0xB3,0xAF,0x48,0x67,0x80,0xF6,0x82,0x34,0xAC,
+0xEA,0x0A,0x65,0x03,0x6A,0x4C,0xEC,0x2B,0x65,0x02,0x6A,0x88,0x33,0x44,0xEB,0x68,0x67,0x42,0xEB,0x04,0x60,0x03,0x24,0x41,0x45,0x53,0xCF,0x1C,0x10,0xC9,0xE0,0x48,0x32,0xCB,0xE2,0x48,0x32,0x69,0x67,0x61,0xE2,0x20,0xF0,0x48,0xA0,0x0E,0x2A,0x33,0xB2,0xFF,0xF7,0x1F,0x6B,0xA3,0x67,0x40,0xAA,0xE0,0xF1,0x0E,0x6C,0x4C,0xED,0x08,0xF0,0x00,0x6A,0x4D,0xED,0x00,0x18,0x9A,0x33,0x6C,0xED,0x00,0x6A,0x53,0xC8,0x01,0x6A,0x20,0xF0,0x48,0xC0,0x2A,0xB2,0x00,0x6B,0x49,0xE1,0x60,0xC2,0x24,0xB2,0x49,0xE1,0x60,0xC2,0x3B,0x10,0x1F,0xF7,0x00,0x6A,0xAC,0xEA,0xEC,0xED,0x0C,0x22,0x24,0xB2,0x01,0x6B,0x49,0xE1,0x60,0xC2,0x1E,0xB2,0x03,0x25,0x49,0xE1,0x60,0xC2,0x0B,0x10,0x49,0xE1,0xA0,0xC2,0x08,0x10,0x07,0x25,0x19,0xB2,0x4D,0xE1,0x40,0xA3,0xEC,0xEA,0x02,0x2A,0x01,0x6A,0x40,0xC3,0x58,0xA4,0xFF,0x6D,0x01,0x72,0x1E,0x61,0x14,0xB2,0x49,0xE1,0x40,0xA2,0xAC,0xEA,0x01,0x72,0x18,0x61,0xC4,0x32,0xC9,0xE2,0x48,0x32,0x11,0xB3,0xCB,0xE2,0x48,0x32,0x61,0xE2,0x20,0xF0,0x48,0xA0,0xAC,0xEA,0x09,0x22,0x0E,0xB2,0xF7,0xF7,0x1F,0x6D,0xE0,0xF1,0x0E,0x6C,0x40,0xAA,0x00,0x18,0x9A,0x33,0x4C,0xED,0x00,0x6A,0x53,0xC8,0x20,0xF0,0x48,0xC0,0x06,0x97,0x05,0x91,0x04,0x90,0x01,0x6A,0x00,0xEF,0x04,0x63,0x00,0x00,0x4C,0x7D,0x11,0x80,0xCC,0x05,0x11,0x80,0x00,0x46,0x11,0x80,0x98,0x5F,0x11,0x80,0xEE,0x01,0x00,0xB6,0xD4,0x05,0x11,0x80,0xF8,0x63,0x0E,0x62,0x0D,0xD1,0x0C,0xD0,0x00,0xA4,0x24,0xB3,0x04,0x31,0x09,0xE1,0x48,0x32,0x0B,0xE2,0x48,0x32,0x71,0xE2,0x20,0xF0,0x44,0xA4,0x02,0x72,0x20,0x61,0x1F,0xB2,0x01,0x6B,0x40,0x9A,0x40,0xF6,0x42,0x32,0x6C,0xEA,0x0E,0x22,0x20,0xF0,0x48,0xA4,0xFF,0x6B,0x6C,0xEA,0x09,0x22,0x1A,0xB2,0xF7,0xF7,0x1F,0x6D,0xE0,0xF1,0x0E,0x6C,0x40,0xAA,0x00,0x18,0x9A,0x33,0x4C,0xED,0x09,0xE1,0x13,0xB3,0x48,0x32,0x0B,0xE2,0x48,0x32,0x69,0xE2,0x00,0x6B,0x73,0xCA,0x20,0xF0,0x68,0xC2,0x16,0x10,0x39,0x6A,0x7D,0x67,0x50,0xCB,0x10,0xB2,0xFD,0x67,0x06,0xD0,0x80,0x9A,0x00,0x6D,0x04,0x06,0x24,0x4F,0xA9,0xE7,0x40,0xA2,0xAD,0xE6,0x01,0x4D,0x08,0x5D,0x40,0xC3,0xF9,0x61,0x06,0x95,0x07,0x96,0x00,0x18,0x40,0x1E,0x08,0x97,0x0E,0x97,0x0D,0x91,0x0C,0x90,0x01,0x6A,0x00,0xEF,
+0x08,0x63,0x98,0x5F,0x11,0x80,0x00,0x46,0x11,0x80,0xEE,0x01,0x00,0xB6,0x28,0x45,0x11,0x80,0xF8,0x63,0x0E,0x62,0x0D,0xD1,0x0C,0xD0,0xC0,0xA4,0xFF,0x6B,0x34,0xB2,0x6C,0xEE,0xC4,0x34,0x2A,0x65,0xC9,0xE4,0x48,0x32,0xCB,0xE2,0x48,0x32,0x0C,0x65,0x89,0x67,0x9D,0xE2,0x20,0xF0,0x44,0xA7,0x6C,0xED,0x6C,0xEA,0x02,0x72,0x04,0x60,0x20,0xF0,0x43,0xA7,0x6C,0xEA,0x35,0x2A,0x2B,0xB2,0x01,0x6B,0x00,0x9A,0x40,0xF6,0x02,0x32,0x6C,0xEA,0x45,0x22,0x02,0x75,0x43,0x61,0x03,0x6A,0x80,0xF6,0x02,0x35,0x4C,0xED,0x33,0xAF,0xA8,0x33,0x02,0x6A,0x44,0xEB,0x42,0xE9,0x04,0x60,0x03,0x25,0x41,0x41,0x53,0xCF,0x35,0x10,0x68,0x67,0xC9,0xE3,0x48,0x32,0xCB,0xE2,0x48,0x32,0x89,0x67,0x81,0xE2,0x20,0xF0,0x48,0xA0,0x0E,0x2A,0x1B,0xB2,0xFF,0xF7,0x1F,0x6B,0xA3,0x67,0x40,0xAA,0xE0,0xF1,0x0E,0x6C,0x4C,0xED,0x08,0xF0,0x00,0x6A,0x4D,0xED,0x00,0x18,0x9A,0x33,0x6C,0xED,0x00,0x6A,0x53,0xC8,0x01,0x6A,0x20,0xF0,0x48,0xC0,0x17,0x10,0x3A,0x6A,0x7D,0x67,0x50,0xCB,0x11,0xB2,0xFD,0x67,0x06,0xD6,0x80,0x9A,0x07,0xD5,0x04,0x06,0x00,0x6D,0x24,0x4F,0xA9,0xE7,0x40,0xA2,0xAD,0xE6,0x01,0x4D,0x08,0x5D,0x40,0xC3,0xF9,0x61,0x06,0x95,0x07,0x96,0x00,0x18,0x40,0x1E,0x08,0x97,0x0E,0x97,0x0D,0x91,0x0C,0x90,0x01,0x6A,0x00,0xEF,0x08,0x63,0x00,0x00,0x98,0x5F,0x11,0x80,0x00,0x46,0x11,0x80,0xEE,0x01,0x00,0xB6,0x28,0x45,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,0xFF,0xF7,0x1F,0x6A,0x8C,0xEA,0x04,0xD2,0x04,0x93,0x01,0x69,0x44,0xE9,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x20,0xB3,0x48,0x32,0x0D,0xD5,0x69,0xE2,0x05,0xD2,0x00,0x68,0x20,0x18,0xE4,0x06,0x90,0x67,0x01,0x48,0xFF,0x6B,0x6C,0xE8,0x45,0xE1,0x04,0x58,0x6C,0xE9,0xF6,0x61,0x05,0x94,0x44,0x41,0xA0,0xF0,0x88,0xAC,0x98,0xEA,0x17,0xB2,0x06,0xD4,0x60,0xF1,0x42,0xA2,0x6C,0xEA,0x02,0x5A,0x12,0xE9,0x00,0x65,0x06,0x61,0x40,0xF1,0x00,0x59,0x06,0x60,0xFF,0x69,0x41,0x49,0x03,0x10,0xEE,0x59,0x01,0x60,0xEE,0x69,0x00,0x1C,0xDD,0x31,0x00,0x65,0x05,0x93,0x02,0x67,0x26,0x32,0xA0,0xF0,0x48,0xCB,0x04,0x94,0x00,0x18,0x2A,0xFF,0x0D,0x95,0x9D,0x67,0x4C,0xAC,0x05,0x94,0xA0,0xF0,0x48,0xCC,0x00,0x1C,0xE5,0x31,0x90,0x67,0x0A,0x97,0x09,
+0x91,0x08,0x90,0x00,0xEF,0x06,0x63,0x48,0x60,0x11,0x80,0x48,0x5C,0x11,0x80,0xF8,0x63,0x0E,0x62,0x0D,0xD1,0x0C,0xD0,0x5D,0x67,0x03,0x46,0x10,0xD4,0x26,0x67,0x13,0xD7,0x06,0x04,0x40,0xF0,0xA4,0xCA,0x06,0x6E,0x00,0x18,0x2E,0x2E,0xB0,0x67,0x69,0xA1,0x9D,0x67,0x09,0xD3,0x40,0xF0,0x64,0xAC,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x4D,0xB3,0x48,0x32,0x69,0xE2,0x0A,0xD2,0x20,0xF0,0x58,0xA2,0x0D,0x72,0x3D,0x60,0x0E,0x52,0x03,0x60,0x06,0x72,0x04,0x60,0x7F,0x10,0x1B,0x72,0x36,0x60,0x7C,0x10,0x13,0x93,0x01,0x6A,0x00,0x6D,0x40,0xC3,0x80,0xA9,0xFF,0xF7,0x1F,0x6A,0x00,0x18,0xC5,0x4A,0x4C,0xEC,0x0A,0x94,0x00,0x18,0xFD,0x1D,0x28,0x4C,0x09,0x93,0x9D,0x67,0x40,0xF0,0x44,0xAC,0x01,0x73,0x14,0x60,0xFF,0xF7,0x1F,0x6C,0x20,0x18,0x7C,0x2F,0x4C,0xEC,0x62,0x67,0x0A,0x92,0xE0,0xF0,0x9F,0xA2,0xFF,0x6A,0x4C,0xEC,0x20,0x6A,0x4C,0xEC,0x01,0x2C,0x64,0x67,0x01,0x73,0x7D,0x67,0x40,0xF0,0x44,0xAB,0x06,0x60,0xFF,0xF7,0x1F,0x6C,0x00,0x18,0xAD,0xE1,0x4C,0xEC,0x52,0x10,0xFF,0xF7,0x1F,0x6C,0x4C,0xEC,0x80,0x18,0x2C,0x34,0x06,0x05,0x4B,0x10,0x00,0x6C,0x40,0x6B,0x1F,0x6A,0x66,0xC0,0x00,0xF0,0x47,0xC8,0x8C,0xC1,0x6A,0xC0,0x27,0xB3,0x00,0xF0,0x4B,0xC8,0x10,0x6A,0x90,0xC1,0x8F,0xC0,0x4E,0xC0,0x50,0xAB,0xBD,0x67,0xDD,0x67,0x50,0xC0,0x50,0xAB,0xE0,0x6B,0x44,0x4D,0x42,0x32,0x54,0xC1,0x20,0xB2,0x92,0xC0,0x20,0x4E,0x41,0xA2,0x91,0x67,0x01,0x6F,0x48,0x32,0x6C,0xEA,0x56,0x32,0xC0,0xF3,0x00,0x6B,0x6D,0xEA,0x00,0xF0,0x53,0xC8,0x13,0x93,0x01,0x6A,0x00,0x18,0x37,0x40,0x40,0xC3,0x02,0x67,0x16,0x22,0x5D,0x67,0x40,0xF0,0x84,0xAA,0xFF,0xF7,0x1F,0x6B,0x00,0x18,0xAE,0x5D,0x6C,0xEC,0x0A,0x94,0x0A,0x96,0x00,0x6F,0x60,0xF2,0xBC,0xAC,0x7F,0x4E,0x04,0xD2,0xFF,0xF7,0x1F,0x6A,0x90,0x67,0x4C,0xED,0x00,0x18,0x6F,0x4E,0x6E,0x4E,0x10,0x93,0x00,0x6C,0x80,0xC3,0x07,0x10,0x10,0x93,0x0C,0x6A,0x40,0xC3,0x03,0x10,0x10,0x94,0x00,0x6A,0x40,0xC4,0x0E,0x97,0x0D,0x91,0x0C,0x90,0x00,0xEF,0x08,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x48,0x5C,0x11,0x80,0xC0,0x5B,0x11,0x80,0xFD,0x63,0x05,0x62,0x04,0xD0,0x00,0x1C,0xDD,0x31,0x00,0x65,0x02,0x67,0x0F,0xB2,0x0F,0xB3,0x40,0x9A,
+0x6E,0xEA,0x00,0x6B,0x02,0x2A,0x0E,0xB2,0x60,0x9A,0x0E,0xB5,0x62,0x33,0x62,0x33,0x40,0x9D,0xFF,0xF7,0x1F,0x6C,0x60,0x33,0x60,0x33,0x8C,0xEA,0x6D,0xEA,0x40,0xDD,0x00,0x18,0xFE,0x25,0x00,0x6C,0x00,0x1C,0xE5,0x31,0x90,0x67,0x05,0x97,0x04,0x90,0x00,0xEF,0x03,0x63,0x44,0x91,0x10,0x80,0x32,0x97,0x79,0x23,0x48,0x91,0x10,0x80,0x30,0x00,0x00,0xB5,0xFC,0x63,0x06,0x62,0x05,0xD1,0x04,0xD0,0x2C,0xB5,0x01,0x68,0xFF,0x6E,0x40,0xF1,0x5E,0xA5,0x0C,0xEA,0x4A,0x22,0x2A,0xB2,0x00,0x6F,0xFF,0xF7,0x1F,0x6C,0x60,0xAA,0x02,0xF0,0x00,0x6A,0x6C,0xEA,0x25,0x2A,0x60,0xF1,0x42,0xA5,0xCC,0xEA,0x05,0x2A,0x01,0x10,0x00,0x6F,0x23,0xB2,0xE0,0xCA,0x2E,0x10,0x06,0x67,0x22,0xB1,0x23,0xB6,0x67,0x67,0xA4,0x67,0x64,0x34,0x69,0xE4,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x48,0x32,0x29,0xE2,0xE0,0xF0,0x4B,0xA2,0x0C,0xEA,0x01,0x72,0x05,0x61,0xC9,0xE4,0x40,0xAA,0xAC,0xEA,0x02,0x5A,0xE5,0x61,0x01,0x4B,0xAC,0xEB,0x0A,0x5B,0xEA,0x61,0x12,0x10,0x14,0xB2,0x60,0xAA,0x01,0x4B,0x60,0xCA,0x4F,0xAD,0x8C,0xEB,0x8C,0xEA,0x4A,0x32,0x8C,0xEA,0x43,0xEB,0x07,0x61,0x4D,0xAD,0x8C,0xEA,0x4A,0x32,0x8C,0xEA,0x43,0xEB,0x01,0x61,0xF0,0x67,0x09,0x27,0x00,0x18,0xB7,0xB5,0x00,0x65,0x00,0x18,0x31,0xBE,0x00,0x65,0x07,0xB2,0x00,0x6B,0x60,0xCA,0x06,0x97,0x05,0x91,0x04,0x90,0x00,0x6A,0x00,0xEF,0x04,0x63,0x00,0x00,0x48,0x5C,0x11,0x80,0xE0,0x00,0x00,0xB6,0xC8,0xA0,0x11,0x80,0x48,0x60,0x11,0x80,0x10,0x06,0x11,0x80,0xFD,0x63,0x04,0x62,0x44,0xAC,0x04,0x72,0x0F,0x61,0x0A,0xB2,0x00,0x6B,0x00,0x18,0x3B,0x2B,0x60,0xC2,0x08,0xB6,0x00,0x6B,0x0A,0x6D,0xFF,0x6C,0xC9,0xE3,0x01,0x4B,0x8C,0xEB,0x04,0x5B,0xA0,0xC2,0xFA,0x61,0x04,0x97,0x00,0xEF,0x03,0x63,0x00,0x00,0xFE,0x08,0x11,0x80,0xB4,0x5B,0x11,0x80,0xFD,0x63,0x04,0x62,0x80,0x18,0x91,0x2B,0x00,0x65,0x0E,0xB2,0x00,0x6B,0x0F,0xB4,0x60,0xCA,0x0D,0xB2,0x02,0xF0,0x00,0x6D,0x04,0x97,0x60,0xC2,0x0C,0xB2,0x01,0xF0,0x00,0x6B,0xA0,0xF0,0x72,0xCC,0x6C,0xCA,0xAE,0xCA,0x80,0xF0,0x43,0xA4,0x05,0x6B,0x6B,0xEB,0x6C,0xEA,0xA0,0xF0,0xB6,0xCC,0x80,0xF0,0x43,0xC4,0x00,0xEF,0x03,0x63,0xC8,0xA0,0x11,0x80,0xCA,0xA0,0x11,0x80,0xDC,0x00,0x11,0x80,0x48,0x5C,0x11,
+0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0x44,0xAC,0xC9,0x72,0x24,0x61,0x00,0x1C,0xDD,0x31,0x00,0x65,0x15,0xB1,0x04,0xD2,0x60,0xF1,0x54,0xA1,0x40,0xF1,0x9E,0xA1,0x04,0x99,0x05,0xD2,0x80,0x6A,0x44,0xD9,0x55,0x6A,0x60,0xF1,0x54,0xC1,0x00,0x18,0xEB,0xA4,0x00,0x65,0x60,0xF1,0x54,0xA1,0x04,0xD9,0x55,0x72,0x04,0x60,0x00,0x18,0x31,0xBE,0x00,0x65,0x04,0x10,0x5D,0x67,0x54,0xA2,0x60,0xF1,0x54,0xC1,0x00,0x1C,0xE5,0x31,0x04,0x94,0x03,0x10,0x00,0x18,0x2F,0xB9,0x00,0x65,0x08,0x97,0x07,0x91,0x06,0x90,0x00,0xEF,0x05,0x63,0x00,0x00,0x48,0x5C,0x11,0x80,0xFD,0x63,0x04,0x62,0x00,0x18,0x24,0xB4,0x00,0x65,0x04,0x97,0x00,0xEF,0x03,0x63,0x0D,0xB2,0xFF,0xF7,0x1F,0x6B,0xAC,0xEB,0x43,0xA2,0x01,0x6D,0xAC,0xEA,0x10,0x22,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x07,0xB3,0x48,0x32,0x69,0xE2,0x60,0xF2,0x4D,0xA2,0xAA,0xEA,0x03,0x61,0x45,0x67,0x20,0xE8,0xA0,0xC4,0x20,0xE8,0x00,0x6A,0x00,0x46,0x11,0x80,0x48,0x60,0x11,0x80,0xF8,0x63,0x0E,0x62,0x0D,0xD1,0x0C,0xD0,0xC4,0x67,0xFF,0xF7,0x1F,0x6D,0xAC,0xEE,0xFF,0x76,0x68,0x60,0xC4,0x32,0xC9,0xE2,0x4C,0x32,0xCB,0xE2,0x35,0xB3,0x4C,0x32,0xCB,0xE2,0x48,0x32,0x65,0xE2,0xC0,0xF0,0x74,0xA9,0x40,0x6F,0xAC,0xEB,0x6C,0xEF,0x25,0x27,0x04,0x6A,0x6C,0xEA,0x08,0x22,0xE0,0xF0,0x8D,0x41,0x00,0xF1,0xA7,0x41,0x00,0x18,0x47,0x43,0x0A,0xD6,0x0A,0x96,0x7D,0x67,0x01,0x6A,0x58,0xC3,0x86,0x67,0x00,0x6A,0x03,0x6E,0xBD,0x67,0x5A,0xC3,0x00,0x68,0x00,0xF2,0x4A,0xC1,0x18,0x4D,0x64,0x6A,0xE6,0x67,0x04,0xD2,0x00,0x18,0xA0,0xDD,0x05,0xD0,0x02,0x6C,0x00,0x18,0xE0,0xDC,0xB0,0x67,0x6F,0x99,0x4D,0xEB,0x6F,0xD9,0x2D,0x10,0xE0,0xF0,0x4C,0xA1,0xFF,0x6C,0x01,0x72,0x1C,0xB2,0x15,0x61,0x43,0xA2,0x01,0x6B,0x6C,0xEA,0x04,0x22,0xC0,0xF2,0x58,0xA1,0x8C,0xEA,0x1F,0x2A,0x33,0x6A,0x7D,0x67,0xBD,0x67,0x58,0xC3,0x86,0x67,0x64,0x6A,0x18,0x4D,0x02,0x6E,0x04,0xD2,0x00,0x18,0xA0,0xDD,0x05,0xD7,0x12,0x10,0x43,0xA2,0x01,0x6B,0x6C,0xEA,0x04,0x22,0xC0,0xF2,0x57,0xA1,0x8C,0xEA,0x0A,0x2A,0x60,0xF2,0x4D,0xA1,0x8C,0xEA,0x01,0x72,0x05,0x61,0x9D,0x67,0x20,0x4C,0x80,0x18,0x3D,0x35,0xA6,0x67,0xC0,0xF0,0x54,0xA9,0x07,0x6B,0x6B,0xEB,
+0x6C,0xEA,0xC0,0xF0,0x54,0xC9,0x0E,0x97,0x0D,0x91,0x0C,0x90,0x00,0xEF,0x08,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x00,0x46,0x11,0x80,0xFB,0x63,0x08,0x62,0x07,0xD1,0x06,0xD0,0xFF,0xF7,0x1F,0x6F,0xAC,0xEF,0xE4,0x32,0xE9,0xE2,0x4C,0x32,0xEB,0xE2,0x38,0xB3,0x4C,0x32,0xEB,0xE2,0x48,0x32,0x65,0xE2,0xC0,0xF0,0x54,0xA9,0xFF,0xF7,0x1F,0x6B,0xC4,0x67,0x6C,0xEA,0x02,0x6B,0x6C,0xEA,0x09,0x2A,0xC4,0xA4,0x01,0x6A,0x87,0x67,0x28,0x6D,0x4C,0xEE,0x20,0x18,0x9B,0x27,0x24,0x6F,0x52,0x10,0xF0,0xF0,0x0F,0x41,0xA5,0x46,0x90,0x67,0x08,0x6E,0x00,0x18,0x2E,0x2E,0x04,0xD7,0x29,0xB2,0x01,0x6D,0xFF,0x6E,0x60,0xA2,0x28,0xB2,0x04,0x97,0x83,0xA2,0xAC,0xEC,0x0E,0x24,0xC0,0xF2,0x56,0xA1,0xCC,0xEA,0x03,0x2A,0xC0,0xF2,0xB6,0xC1,0x0C,0x10,0x60,0xF2,0xBC,0xA9,0xFF,0xF7,0x1F,0x6A,0x00,0x6C,0x4C,0xED,0x29,0x10,0x20,0xF0,0x58,0xA1,0xCC,0xEA,0x03,0x72,0x1F,0x61,0x00,0xF1,0x46,0x81,0x00,0x52,0x17,0x60,0x7E,0x32,0x15,0x22,0xC0,0xF0,0x54,0xA9,0x04,0x68,0x03,0x6E,0x0D,0xEA,0x87,0x67,0xC0,0xF0,0x54,0xC9,0x00,0xF1,0xAF,0xC1,0x00,0x18,0x2D,0xE2,0xE6,0x67,0x7F,0x6C,0x00,0x18,0xE0,0xDC,0xB0,0x67,0x6F,0x99,0x4D,0xEB,0x6F,0xD9,0x13,0x10,0x80,0x18,0x4C,0x35,0x87,0x67,0x0F,0x10,0x60,0xF2,0xBC,0xA9,0xFF,0xF7,0x1F,0x6B,0x6C,0xED,0x00,0x18,0xF8,0x4E,0xD0,0x67,0xC0,0xF0,0x54,0xA9,0x03,0x6B,0x6B,0xEB,0x6C,0xEA,0xC0,0xF0,0x54,0xC9,0x08,0x97,0x07,0x91,0x06,0x90,0x01,0x6A,0x00,0xEF,0x05,0x63,0x48,0x60,0x11,0x80,0xC0,0x5B,0x11,0x80,0x00,0x46,0x11,0x80,0xFA,0x63,0x0A,0x62,0x09,0xD1,0x08,0xD0,0xFF,0xF7,0x1F,0x69,0xAC,0xE9,0x24,0x32,0x29,0xE2,0x4C,0x32,0x2B,0xE2,0x38,0xB3,0x4C,0x32,0x2B,0xE2,0x48,0x32,0x0C,0xD4,0x61,0xE2,0xC0,0xF0,0x54,0xA8,0x66,0xA4,0xFF,0xF7,0x1F,0x6C,0x8C,0xEA,0x04,0x6E,0xCC,0xEA,0x06,0x22,0x00,0xF1,0x4F,0xA0,0xFF,0x6D,0xAC,0xEA,0x6E,0xEA,0x0D,0x22,0x0C,0x92,0xFF,0x6C,0x7F,0x6D,0xE4,0xA2,0x24,0x6A,0x04,0xD2,0x8C,0xEF,0x01,0x6A,0x91,0x67,0x00,0x18,0xEF,0xE1,0x4C,0xEF,0x47,0x10,0x02,0x5B,0x0B,0x60,0x0C,0x95,0x6C,0x34,0x11,0xE4,0xE0,0xF0,0x1F,0x4C,0x08,0x4D,0x08,0x6E,0x00,0x18,0x2E,0x2E,0x06,0xD3,0x06,0x93,0x21,0xB2,0x01,0x6D,0x83,0xA2,0xAC,0xEC,0x15,
+0x24,0xC0,0xF2,0x57,0xA0,0xFF,0x6C,0x8C,0xEA,0x07,0x2A,0x80,0x18,0x4C,0x35,0x91,0x67,0x01,0x6D,0xC0,0xF2,0xB7,0xC0,0x29,0x10,0x1A,0xB2,0x60,0xF2,0xBC,0xA8,0x00,0x6C,0xF0,0xA2,0x0C,0x92,0x08,0x4A,0x04,0xD2,0x11,0x10,0x20,0xF0,0x58,0xA0,0xFF,0x6D,0xAC,0xEA,0x03,0x72,0x04,0x61,0x00,0x18,0xA5,0xFF,0x91,0x67,0x16,0x10,0x10,0xB2,0x60,0xF2,0xBC,0xA8,0xF0,0xA2,0x0C,0x92,0x08,0x4A,0x04,0xD2,0xFF,0xF7,0x1F,0x6A,0x4C,0xED,0xFF,0x6A,0xC3,0x67,0x00,0x18,0x8A,0x41,0x4C,0xEF,0xC0,0xF0,0x54,0xA8,0x05,0x6B,0x6B,0xEB,0x6C,0xEA,0xC0,0xF0,0x54,0xC8,0x0A,0x97,0x09,0x91,0x08,0x90,0x00,0xEF,0x06,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x00,0x46,0x11,0x80,0xC0,0x5B,0x11,0x80,0xEF,0x63,0x20,0x62,0x1F,0xD1,0x1E,0xD0,0x64,0xAC,0xC4,0x67,0x24,0x73,0x22,0x61,0xB2,0xB2,0x60,0xF1,0x50,0xA2,0x1E,0x22,0x7D,0x67,0x01,0xF4,0x03,0x6A,0x40,0xF0,0x58,0xCB,0x00,0x1C,0xDD,0x31,0x00,0x65,0x00,0x18,0xFE,0x4F,0x02,0x67,0x00,0x6D,0x9D,0x67,0xC5,0x67,0x80,0x18,0x95,0x2B,0x58,0x4C,0x80,0x18,0x6B,0x2F,0x03,0x6C,0x00,0x18,0xC4,0x53,0x00,0x6C,0x20,0x18,0x10,0x2F,0x00,0x65,0x00,0x1C,0xE5,0x31,0x90,0x67,0x3C,0x11,0xFF,0xF7,0x1F,0x69,0x51,0x67,0x6C,0xEA,0x9C,0x72,0x1D,0x61,0x00,0x9E,0xFF,0x6F,0x44,0xA0,0x46,0x32,0x2C,0xEA,0x18,0x72,0x16,0x61,0xBA,0xA0,0x99,0xA0,0xDD,0x67,0xEC,0xED,0xEC,0xEC,0x00,0x18,0x1A,0xDF,0x5A,0x4E,0x06,0x2A,0xBD,0x67,0x40,0xF0,0x9A,0xAD,0x20,0x18,0x62,0x23,0x2C,0xEC,0x20,0x18,0xCF,0x06,0x90,0x67,0x93,0xB2,0xB0,0x67,0x80,0x9A,0x12,0x11,0xFF,0xF7,0x1F,0x6C,0x44,0x67,0x6C,0xEA,0x93,0x72,0x29,0x61,0x00,0x9E,0x44,0xA0,0x46,0x32,0x11,0x72,0x07,0x60,0x7F,0x72,0x22,0x61,0x45,0xA0,0xFF,0x6B,0x6C,0xEA,0x17,0x72,0x1D,0x61,0x6B,0xA8,0x8C,0xEB,0xFF,0x73,0x19,0x60,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x84,0xB3,0x48,0x32,0x69,0xE2,0xBF,0x9A,0x82,0x67,0x00,0x18,0xB2,0x69,0x1C,0xD6,0x01,0x72,0x64,0xA0,0x1C,0x96,0x03,0x61,0x01,0x6A,0x6D,0xEA,0x03,0x10,0x02,0x6A,0x4B,0xEA,0x6C,0xEA,0x44,0xC0,0x44,0xAE,0xFF,0xF7,0x1F,0x6C,0x93,0x72,0xE0,0xF0,0x01,0x61,0x40,0x9E,0x18,0xD2,0x18,0x95,0x64,0xA2,0xFF,0x6A,0xA5,0xA5,0x22,0x67,0x6C,0xE9,
+0x4C,0xED,0x18,0x92,0x19,0xD5,0x26,0x31,0x4B,0xAA,0x8C,0xE9,0x7F,0x71,0x8C,0xEA,0x1A,0xD2,0x02,0x61,0x04,0x75,0x07,0x60,0x28,0x71,0x05,0x60,0x2D,0x71,0x03,0x60,0x2E,0x71,0xC0,0xF0,0x06,0x61,0xFF,0x68,0xC1,0x9E,0x50,0x67,0x6C,0xEA,0x18,0x93,0x46,0x31,0xA6,0x67,0x9D,0x67,0xDA,0xC3,0x0C,0xE9,0x5C,0x4C,0x0C,0xED,0x00,0x18,0x3B,0x94,0x1C,0xD6,0x7F,0x71,0x58,0x67,0x1B,0xD2,0x1C,0x96,0x04,0x22,0xE1,0xF4,0x03,0x6F,0x00,0x6B,0x05,0x10,0x18,0x94,0x01,0xF4,0x16,0x6F,0x65,0xA4,0x0C,0xEB,0x10,0x6A,0x04,0xD2,0x5B,0xB2,0x18,0x95,0x08,0xD3,0x05,0xD2,0x17,0x92,0x07,0xD1,0x01,0x6B,0x06,0xD2,0x59,0xA5,0x0A,0xD6,0x04,0x6C,0x09,0xD2,0x44,0xA5,0x6C,0xEA,0x0B,0xD2,0x4B,0xAD,0x0C,0xD2,0x54,0xB2,0x49,0xE6,0x44,0xA2,0x82,0xF6,0x17,0x6E,0x6C,0xEA,0x0D,0xD2,0x44,0xA5,0x0E,0xD2,0x45,0xA5,0x0F,0xD2,0x46,0xA5,0x10,0xD2,0x47,0xA5,0x11,0xD2,0x48,0xA5,0x12,0xD2,0x49,0xA5,0x13,0xD2,0x4A,0xA5,0x14,0xD2,0x4B,0xA5,0xFA,0x6D,0x20,0x18,0x1B,0x32,0x15,0xD2,0x1A,0x92,0xFF,0x72,0x72,0x60,0x1A,0x93,0x44,0x32,0xFF,0x6C,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x3F,0xB3,0x48,0x32,0x61,0xE2,0xE0,0xF0,0x4B,0xA0,0x8C,0xEA,0x01,0x72,0x62,0x61,0x20,0xF0,0x58,0xA0,0xFF,0x6D,0xAC,0xEA,0x0B,0x72,0x13,0x61,0x37,0xB2,0x18,0x95,0x00,0x18,0xE0,0x1D,0x80,0x9A,0x00,0xF2,0x54,0xA0,0xFF,0x6B,0x6C,0xEA,0x01,0x72,0x5B,0x61,0x8D,0x98,0x00,0x18,0x1A,0x1E,0x00,0x6D,0x00,0x6A,0x00,0xF2,0x54,0xC0,0x53,0x10,0x1A,0x94,0x00,0x18,0x5E,0xDE,0x18,0x95,0x1B,0x94,0x08,0x2C,0x19,0x95,0x04,0x75,0x05,0x61,0x18,0x94,0x80,0x18,0xCA,0x35,0x1A,0x95,0x3B,0x10,0x28,0x71,0x05,0x61,0x18,0x94,0x80,0x18,0x8A,0x35,0x1A,0x95,0x34,0x10,0x2D,0x71,0x15,0x61,0x20,0xF0,0x58,0xA0,0x03,0x72,0x2E,0x60,0x05,0x72,0x2C,0x60,0x06,0x72,0x2A,0x60,0x07,0x72,0x28,0x60,0x08,0x72,0x26,0x60,0x09,0x72,0x24,0x60,0x0A,0x72,0x22,0x60,0x18,0x94,0x00,0x18,0x35,0xFC,0x1A,0x95,0x1D,0x10,0x2E,0x71,0x1B,0x61,0x20,0xF0,0x58,0xA0,0x03,0x72,0x0C,0x60,0x05,0x72,0x0A,0x60,0x06,0x72,0x08,0x60,0x07,0x72,0x06,0x60,0x08,0x72,0x04,0x60,0x09,0x72,0x02,0x60,0x0A,0x72,0x07,0x61,0x1A,0x94,0x2E,0x6D,0x02,0x6E,0x20,0x18,0x9B,
+0x27,0x24,0x6F,0x04,0x10,0x18,0x94,0x00,0x18,0x0B,0xFC,0x1A,0x95,0x09,0xB2,0x18,0x95,0x80,0x9A,0x00,0x18,0xE0,0x1D,0x00,0x65,0x03,0x10,0x20,0x18,0xFA,0x24,0x86,0x67,0x20,0x97,0x1F,0x91,0x1E,0x90,0x00,0xEF,0x11,0x63,0x00,0x00,0x48,0x5C,0x11,0x80,0x64,0x52,0x11,0x80,0x48,0x60,0x11,0x80,0xF0,0xA5,0x10,0x80,0x04,0x46,0x11,0x80,0xFF,0x63,0x00,0xD0,0x0F,0xB0,0xFF,0xF7,0x1F,0x6A,0x4C,0xEC,0x00,0x6B,0xE2,0x67,0xFF,0x6E,0x64,0x32,0x69,0xE2,0x48,0x32,0x6B,0xE2,0x48,0x32,0x15,0xE2,0x43,0xAD,0xEC,0xEA,0x8E,0xEA,0x05,0x2A,0x42,0x9D,0x08,0x72,0x02,0x61,0x00,0x6A,0x05,0x10,0x01,0x4B,0xCC,0xEB,0x03,0x5B,0xED,0x61,0x01,0x6A,0x00,0x90,0x20,0xE8,0x01,0x63,0x98,0x5F,0x11,0x80,0xFD,0x63,0x04,0x62,0x16,0xB2,0x00,0x6B,0x60,0xF1,0x43,0xA2,0x01,0x72,0x14,0x61,0x14,0xB6,0x83,0x67,0xFF,0x6D,0x84,0x32,0x89,0xE2,0x4C,0x32,0x8B,0xE2,0x4C,0x32,0x8B,0xE2,0x48,0x32,0xC9,0xE2,0xE0,0xF0,0x4B,0xA2,0xAC,0xEA,0x01,0x72,0x0D,0x60,0x01,0x4C,0xAC,0xEC,0x0A,0x5C,0xEF,0x61,0x09,0xB2,0x60,0xF1,0x43,0xA2,0x02,0x5A,0x02,0x60,0x43,0x67,0x07,0x23,0x0C,0x6A,0x05,0x10,0x80,0x18,0xC5,0x36,0x00,0x65,0x62,0x67,0xF2,0x17,0x04,0x97,0x00,0xEF,0x03,0x63,0x00,0x00,0x48,0x5C,0x11,0x80,0x48,0x60,0x11,0x80,0xF9,0x63,0x0C,0x62,0x0B,0xD1,0x0A,0xD0,0x00,0x6A,0x0F,0xD5,0x06,0xD2,0x40,0xAC,0x24,0x67,0x01,0xF0,0x0B,0x72,0x0C,0x61,0xBD,0x67,0x80,0x18,0x0D,0x2C,0x10,0x4D,0x80,0xA9,0xFF,0xF7,0x1F,0x6B,0xA2,0x67,0x00,0x18,0xC5,0x4A,0x6C,0xEC,0xAC,0x10,0x00,0xF4,0x19,0x72,0x2C,0x61,0x49,0xA4,0x03,0x5A,0x02,0x61,0x01,0x6A,0x49,0xC4,0x7D,0x67,0x58,0xA3,0x00,0x1C,0xDD,0x31,0x52,0xC3,0xBD,0x67,0x91,0x67,0x12,0x4D,0x00,0x18,0xB7,0x45,0x07,0xD2,0x02,0x67,0x0C,0x2A,0xA9,0xA1,0xFF,0x6B,0x20,0x6A,0x6C,0xED,0xB8,0x35,0x4D,0xED,0xFF,0xF7,0x1F,0x6A,0xAA,0x6C,0x00,0x18,0xB6,0x33,0x4C,0xED,0x00,0x1C,0xE5,0x31,0x07,0x94,0x7D,0x67,0x52,0xA3,0xFF,0x6B,0x6C,0xEA,0x61,0x2A,0x80,0xA9,0xFF,0xF7,0x1F,0x6A,0xB0,0x67,0x4C,0xEC,0x58,0x10,0x00,0xF4,0x05,0x72,0x06,0x61,0x4B,0xA4,0x03,0x5A,0x79,0x61,0x01,0x6A,0x4B,0xC4,0x76,0x10,0x41,0xF4,0x12,0x72,0x10,0x61,0x00,0x18,0xE5,0x41,0x00,0x65,0x06,0x94,
+0x00,0x18,0x78,0x36,0x02,0x67,0x80,0xA9,0x06,0x96,0xFF,0xF7,0x1F,0x6A,0x4C,0xEC,0x00,0x18,0x33,0x4B,0xB0,0x67,0x3F,0x10,0x01,0xF0,0x04,0x72,0x3F,0x61,0x04,0xA4,0xFF,0xF7,0x1F,0x6A,0xFF,0xF7,0x1F,0x6B,0x00,0x30,0x4C,0xE8,0x43,0xA4,0xBD,0x67,0x14,0x4D,0x4D,0xE8,0x6C,0xE8,0x00,0x18,0x2A,0xDF,0x90,0x67,0x04,0x22,0x5D,0x67,0x0A,0xCA,0x02,0x6A,0x23,0x10,0x7D,0x67,0xAA,0xAB,0xFF,0xF7,0x1F,0x6B,0xAC,0xEB,0x64,0x32,0x69,0xE2,0x4C,0x32,0x6B,0xE2,0x4C,0x32,0x6B,0xE2,0x27,0xB3,0x48,0x32,0x69,0xE2,0x20,0xF0,0x78,0xA2,0xFF,0x6A,0x4C,0xEB,0x12,0x73,0x0A,0x60,0x19,0x73,0x08,0x60,0x80,0xA9,0xFF,0xF7,0x1F,0x6A,0x0C,0x6D,0x00,0x18,0xC5,0x4A,0x4C,0xEC,0x2E,0x10,0xFF,0xF7,0x1F,0x6C,0x00,0x18,0x0C,0x48,0xAC,0xEC,0x80,0xA9,0xA2,0x67,0x00,0x18,0xC5,0x4A,0x00,0x65,0x01,0x6B,0x06,0xD3,0x21,0x10,0x21,0xF4,0x06,0x72,0x1E,0x61,0x80,0x18,0xD6,0x36,0x00,0x65,0x10,0x2A,0x14,0xB0,0x7D,0x67,0x78,0xA3,0x60,0xF1,0x43,0xA0,0x91,0x67,0x60,0xF1,0x63,0xC0,0x00,0x18,0xFC,0x52,0x08,0xD2,0x7D,0x67,0x20,0xF0,0x60,0xA3,0x60,0xF1,0x63,0xC0,0x80,0xA9,0x06,0x96,0xFF,0xF7,0x1F,0x6B,0x6C,0xEC,0x00,0x18,0x33,0x4B,0xA2,0x67,0x01,0x6A,0x06,0xD2,0x06,0x92,0x03,0x22,0x0F,0x93,0x66,0x6A,0x40,0xC3,0x0C,0x97,0x0B,0x91,0x0A,0x90,0x01,0x6A,0x00,0xEF,0x07,0x63,0x00,0x00,0x48,0x60,0x11,0x80,0x48,0x5C,0x11,0x80,0xF5,0x63,0x14,0x62,0x13,0xD1,0x12,0xD0,0x00,0x6D,0x17,0xF7,0x0C,0x6E,0x00,0x18,0x01,0xA0,0x33,0x6C,0x61,0xB4,0x20,0x18,0xD6,0x32,0x00,0x69,0x20,0x18,0x5B,0x30,0x00,0x65,0x00,0x18,0xA6,0x5C,0x00,0x65,0x00,0x18,0xC8,0x8A,0x00,0x65,0x00,0x18,0xA3,0x9B,0x00,0x65,0x5A,0xB4,0x00,0x18,0x44,0x81,0x00,0x65,0x59,0xB0,0x00,0x18,0x4C,0x81,0x90,0x67,0x87,0x40,0x00,0x18,0x4C,0x81,0x01,0x4C,0x56,0xB4,0x57,0xB5,0x20,0xC0,0x00,0x18,0x2E,0x2E,0x30,0x6E,0x55,0xB5,0x88,0x40,0xD8,0x4C,0x00,0x18,0x2E,0x2E,0x30,0x6E,0x53,0xB5,0x87,0x40,0x11,0x4C,0x00,0x18,0x2E,0x2E,0x18,0x6E,0x51,0xB0,0x03,0x6B,0x40,0x98,0x42,0x32,0x4A,0x32,0x6C,0xEA,0x6A,0xEA,0x05,0x60,0x4E,0xB2,0x20,0xF1,0x2C,0xC2,0x20,0xF1,0x36,0xC2,0x00,0x18,0x04,0xF6,0x00,0x65,0x00,0x18,0x48,0x3C,0x00,0x65,0x00,0x18,0x71,
+0x32,0x00,0x65,0x00,0x18,0xE2,0x24,0x00,0x65,0x00,0x18,0x9A,0x7E,0x00,0x65,0x00,0x18,0xB5,0xC8,0x00,0x65,0x45,0xB3,0x43,0xB2,0x60,0xDA,0x00,0x18,0x0B,0x2B,0x00,0x65,0x40,0x98,0x0F,0x6B,0x46,0x32,0x6C,0xEA,0x03,0x72,0x05,0x61,0x9D,0x67,0x40,0x4C,0x00,0x18,0x1B,0x28,0x00,0x6D,0x00,0x18,0xE9,0x2F,0x00,0x65,0x80,0x18,0x54,0x2A,0x00,0x65,0x20,0x18,0xA2,0x39,0x00,0x65,0x80,0x18,0x08,0x2A,0x00,0x65,0x00,0x1C,0xAD,0x31,0x00,0x65,0x29,0xF6,0x00,0x6D,0x00,0x18,0x17,0x2D,0x01,0x6C,0x09,0x6A,0x04,0xD2,0x32,0xB2,0x2F,0xB3,0x01,0x6C,0x05,0xD2,0x9B,0xF4,0x0D,0x6A,0x06,0xD2,0x32,0xF0,0x0E,0x6A,0x07,0xD2,0x2E,0xB2,0xFA,0x6D,0x8A,0xF2,0x01,0x6E,0x40,0x9A,0xA1,0xF3,0x16,0x6F,0x08,0xD2,0x40,0xF0,0x41,0xA3,0x09,0xD2,0x40,0xF0,0x40,0xA3,0x0A,0xD2,0x20,0xF0,0x5F,0xA3,0x0B,0xD2,0x20,0xF0,0x5E,0xA3,0x0C,0xD2,0x20,0xF0,0x5D,0xA3,0x0D,0xD2,0x20,0xF0,0x5C,0xA3,0x20,0x18,0x1B,0x32,0x0E,0xD2,0x21,0xB2,0x22,0xB3,0x40,0x9A,0x6E,0xEA,0x19,0x2A,0x21,0xB1,0x21,0xB3,0x40,0x99,0x6E,0xEA,0x14,0x2A,0x20,0xB0,0x21,0xB2,0x21,0xB3,0x80,0x98,0x8C,0xEA,0x6E,0xEA,0x0B,0x2A,0x20,0xB3,0x00,0xF6,0x82,0x32,0x00,0x6D,0x3F,0xF4,0x00,0x6C,0x00,0x18,0xFA,0x8B,0x40,0xC3,0x00,0x6A,0x40,0xD8,0x00,0x6A,0x40,0xD9,0x13,0xB3,0x12,0xB2,0x20,0x18,0x3D,0x36,0x60,0xDA,0x14,0x97,0x13,0x91,0x12,0x90,0x00,0xEF,0x0B,0x63,0x84,0xC8,0x00,0x80,0x03,0x00,0x00,0xC4,0x98,0x24,0x11,0x80,0x38,0x24,0x11,0x80,0x58,0xDF,0x10,0x80,0xA0,0xDF,0x10,0x80,0x88,0xDF,0x10,0x80,0x6C,0x1D,0x11,0x80,0xDC,0x00,0x11,0x80,0x5C,0xA1,0x00,0xB0,0x00,0x00,0x01,0x00,0xF0,0xA5,0x10,0x80,0x90,0x1E,0x11,0x80,0x3C,0x91,0x10,0x80,0xEF,0xBE,0x23,0x87,0x44,0x91,0x10,0x80,0x32,0x97,0x79,0x23,0x40,0x91,0x10,0x80,0xFF,0xFF,0xFF,0x00,0xEE,0xFF,0xC0,0x00,0xD0,0x00,0x11,0x80,0x00,0x00,0x00,0x00,0x2E,0x5A,0x2C,0x4B,0xCF,0x9D,0xF2,0xCB,0x74,0x9C,0x13,0xCE,0x57,0xF4,0x4C,0x54,0x48,0xA9,0xD3,0x53,0xC5,0x19,0x73,0x6F,0xF7,0xEB,0x68,0x53,0xCC,0xAE,0x50,0xF1,0x57,0x02,0xE2,0x66,0xA3,0x5C,0xBC,0xD3,0xB7,0xA6,0x2F,0xC9,0xAE,0xDC,0x77,0x9E,0x07,0x91,0x5F,0x86,0x91,0x8D,0xDC,0x27,0x00,0x5D,0xF1,0xD6,0xCF,0x0C,0x14,0x2B,
+0x62,0x5E,0xD2,0xEF,0xF4,0xA5,0x18,0xFF,0x15,0x20,0x70,0x09,0x98,0x44,0x21,0xA6,0x58,0x6F,0x9F,0xC3,0xFE,0x7E,0x43,0x29,0xD2,0x80,0x9E,0xA5,0x11,0x25,0xF8,0xED,0xB0,0x9D,0x42,0xB8,0x1B,0xC5,0xBD,0x00,0x9F,0x79,0xE4,0xB5,0x9D,0xBB,0xAA,0x85,0x7F,0xCA,0x85,0x6F,0xB9,0xF7,0xEA,0x25,0x07,0x04,0x05,0x01,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x02,0x04,0x00,0x00,0x00,0x01,0x03,0x02,0x04,0x00,0x00,0x00,0x00,0x1B,0x00,0xB7,0x00,0x53,0x01,0x36,0x00,0x6F,0x01,0xA7,0x02,0x53,0x00,0x28,0x02,0xFD,0x03,0x25,0x00,0x04,0x0B,0x0F,0x04,0x0A,0x0E,0x08,0x0B,0x0F,0x00,0x00,0x00,0x05,0x41,0x32,0x12,0x00,0x00,0x00,0x00,0x8D,0xDC,0x2E,0x90,
+};
+
+#endif //CONFIG_MP_INCLUDED
+
+#ifndef CONFIG_PHY_SETTING_WITH_ODM
+u32 Rtl8723UPHY_REG_2TArray[Rtl8723UPHY_REG_2TArrayLength] = {
+0x0, };
+
+u32 Rtl8723UPHY_REG_1TArray[Rtl8723UPHY_REG_1TArrayLength] = {
+0x800,0x80040000,
+0x804,0x00000003,
+0x808,0x0000fc00,
+0x80c,0x0000000a,
+0x810,0x10005388,
+0x814,0x020c3d10,
+0x818,0x02200385,
+0x81c,0x00000000,
+0x820,0x01000100,
+0x824,0x00390004,
+0x828,0x00000000,
+0x82c,0x00000000,
+0x830,0x00000000,
+0x834,0x00000000,
+0x838,0x00000000,
+0x83c,0x00000000,
+0x840,0x00010000,
+0x844,0x00000000,
+0x848,0x00000000,
+0x84c,0x00000000,
+0x850,0x00000000,
+0x854,0x00000000,
+0x858,0x569a569a,
+0x85c,0x001b25a4,
+0x860,0x66f60110,
+0x864,0x061f0130,
+0x868,0x00000000,
+0x86c,0x32323200,
+0x870,0x07000760,
+0x874,0x22004000,
+0x878,0x00000808,
+0x87c,0x00000000,
+0x880,0xc0083070,
+0x884,0x000004d5,
+0x888,0x00000000,
+0x88c,0xccc000c0,
+0x890,0x00000800,
+0x894,0xfffffffe,
+0x898,0x40302010,
+0x89c,0x00706050,
+0x900,0x00000000,
+0x904,0x00000023,
+0x908,0x00000000,
+0x90c,0x81121111,
+0xa00,0x00d047c8,
+0xa04,0x80ff000c,
+0xa08,0x8c838300,
+0xa0c,0x2e68120f,
+0xa10,0x9500bb78,
+0xa14,0x11144028,
+0xa18,0x00881117,
+0xa1c,0x89140f00,
+0xa20,0x1a1b0000,
+0xa24,0x090e1317,
+0xa28,0x00000204,
+0xa2c,0x00d30000,
+0xa70,0x101fbf00,
+0xa74,0x00000007,
+0xa78,0x00000900,
+0xc00,0x48071d40,
+0xc04,0x03a05611,
+0xc08,0x000000e4,
+0xc0c,0x6c6c6c6c,
+0xc10,0x08800000,
+0xc14,0x40000100,
+0xc18,0x08800000,
+0xc1c,0x40000100,
+0xc20,0x00000000,
+0xc24,0x00000000,
+0xc28,0x00000000,
+0xc2c,0x00000000,
+0xc30,0x69e9ac44,
+0xc34,0x469652cf,
+0xc38,0x49795994,
+0xc3c,0x0a97971c,
+0xc40,0x1f7c403f,
+0xc44,0x000100b7,
+0xc48,0xec020107,
+0xc4c,0x007f037f,
+0xc50,0x69543420,
+0xc54,0x43bc0094,
+0xc58,0x69543420,
+0xc5c,0x433c0094,
+0xc60,0x00000000,
+0xc64,0x7116848b,
+0xc68,0x47c00bff,
+0xc6c,0x00000036,
+0xc70,0x2c7f000d,
+0xc74,0x018610db,
+0xc78,0x0000001f,
+0xc7c,0x00b91612,
+0xc80,0x40000100,
+0xc84,0x20f60000,
+0xc88,0x40000100,
+0xc8c,0x20200000,
+0xc90,0x00121820,
+0xc94,0x00000000,
+0xc98,0x00121820,
+0xc9c,0x00007f7f,
+0xca0,0x00000000,
+0xca4,0x00000080,
+0xca8,0x00000000,
+0xcac,0x00000000,
+0xcb0,0x00000000,
+0xcb4,0x00000000,
+0xcb8,0x00000000,
+0xcbc,0x28000000,
+0xcc0,0x00000000,
+0xcc4,0x00000000,
+0xcc8,0x00000000,
+0xccc,0x00000000,
+0xcd0,0x00000000,
+0xcd4,0x00000000,
+0xcd8,0x64b22427,
+0xcdc,0x00766932,
+0xce0,0x00222222,
+0xce4,0x00000000,
+0xce8,0x37644302,
+0xcec,0x2f97d40c,
+0xd00,0x00080740,
+0xd04,0x00020401,
+0xd08,0x0000907f,
+0xd0c,0x20010201,
+0xd10,0xa0633333,
+0xd14,0x3333bc43,
+0xd18,0x7a8f5b6b,
+0xd2c,0xcc979975,
+0xd30,0x00000000,
+0xd34,0x80608000,
+0xd38,0x00000000,
+0xd3c,0x00027293,
+0xd40,0x00000000,
+0xd44,0x00000000,
+0xd48,0x00000000,
+0xd4c,0x00000000,
+0xd50,0x6437140a,
+0xd54,0x00000000,
+0xd58,0x00000000,
+0xd5c,0x30032064,
+0xd60,0x4653de68,
+0xd64,0x04518a3c,
+0xd68,0x00002101,
+0xd6c,0x2a201c16,
+0xd70,0x1812362e,
+0xd74,0x322c2220,
+0xd78,0x000e3c24,
+0xe00,0x2a2a2a2a,
+0xe04,0x2a2a2a2a,
+0xe08,0x03902a2a,
+0xe10,0x2a2a2a2a,
+0xe14,0x2a2a2a2a,
+0xe18,0x2a2a2a2a,
+0xe1c,0x2a2a2a2a,
+0xe28,0x00000000,
+0xe30,0x1000dc1f,
+0xe34,0x10008c1f,
+0xe38,0x02140102,
+0xe3c,0x681604c2,
+0xe40,0x01007c00,
+0xe44,0x01004800,
+0xe48,0xfb000000,
+0xe4c,0x000028d1,
+0xe50,0x1000dc1f,
+0xe54,0x10008c1f,
+0xe58,0x02140102,
+0xe5c,0x28160d05,
+0xe60,0x00000008,
+0xe68,0x001b25a4,
+0xe6c,0x631b25a0,
+0xe70,0x631b25a0,
+0xe74,0x081b25a0,
+0xe78,0x081b25a0,
+0xe7c,0x081b25a0,
+0xe80,0x081b25a0,
+0xe84,0x631b25a0,
+0xe88,0x081b25a0,
+0xe8c,0x631b25a0,
+0xed0,0x631b25a0,
+0xed4,0x631b25a0,
+0xed8,0x631b25a0,
+0xedc,0x001b25a0,
+0xee0,0x001b25a0,
+0xeec,0x6b1b25a0,
+0xf14,0x00000003,
+0xf4c,0x00000000,
+0xf00,0x00000300,
+};
+
+u32 Rtl8723UPHY_ChangeTo_1T1RArray[Rtl8723UPHY_ChangeTo_1T1RArrayLength] = {
+0x0, };
+
+u32 Rtl8723UPHY_ChangeTo_1T2RArray[Rtl8723UPHY_ChangeTo_1T2RArrayLength] = {
+0x0, };
+
+u32 Rtl8723UPHY_ChangeTo_2T2RArray[Rtl8723UPHY_ChangeTo_2T2RArrayLength] = {
+0x0, };
+
+
+u32 Rtl8723UPHY_REG_1T_mCardArray[Rtl8723UPHY_REG_1T_mCardArrayLength] = {
+0x800,0x80040000,
+0x804,0x00000003,
+0x808,0x0000fc00,
+0x80c,0x0000000a,
+0x810,0x10005388,
+0x814,0x020c3d10,
+0x818,0x02200385,
+0x81c,0x00000000,
+0x820,0x01000100,
+0x824,0x00390004,
+0x828,0x00000000,
+0x82c,0x00000000,
+0x830,0x00000000,
+0x834,0x00000000,
+0x838,0x00000000,
+0x83c,0x00000000,
+0x840,0x00010000,
+0x844,0x00000000,
+0x848,0x00000000,
+0x84c,0x00000000,
+0x850,0x00000000,
+0x854,0x00000000,
+0x858,0x569a569a,
+0x85c,0x001b25a4,
+0x860,0x66f60110,
+0x864,0x061f0130,
+0x868,0x00000000,
+0x86c,0x32323200,
+0x870,0x07000760,
+0x874,0x22004000,
+0x878,0x00000808,
+0x87c,0x00000000,
+0x880,0xc0083070,
+0x884,0x000004d5,
+0x888,0x00000000,
+0x88c,0xccc000c0,
+0x890,0x00000800,
+0x894,0xfffffffe,
+0x898,0x40302010,
+0x89c,0x00706050,
+0x900,0x00000000,
+0x904,0x00000023,
+0x908,0x00000000,
+0x90c,0x81121111,
+0xa00,0x00d047c8,
+0xa04,0x80ff000c,
+0xa08,0x8c838300,
+0xa0c,0x2e68120f,
+0xa10,0x9500bb78,
+0xa14,0x11144028,
+0xa18,0x00881117,
+0xa1c,0x89140f00,
+0xa20,0x1a1b0000,
+0xa24,0x090e1317,
+0xa28,0x00000204,
+0xa2c,0x00d30000,
+0xa70,0x101fbf00,
+0xa74,0x00000007,
+0xa78,0x00000900,
+0xc00,0x48071d40,
+0xc04,0x03a05611,
+0xc08,0x000000e4,
+0xc0c,0x6c6c6c6c,
+0xc10,0x08800000,
+0xc14,0x40000100,
+0xc18,0x08800000,
+0xc1c,0x40000100,
+0xc20,0x00000000,
+0xc24,0x00000000,
+0xc28,0x00000000,
+0xc2c,0x00000000,
+0xc30,0x69e9ac44,
+0xc34,0x469652cf,
+0xc38,0x49795994,
+0xc3c,0x0a97971c,
+0xc40,0x1f7c403f,
+0xc44,0x000100b7,
+0xc48,0xec020107,
+0xc4c,0x007f037f,
+0xc50,0x69543420,
+0xc54,0x43bc0094,
+0xc58,0x69543420,
+0xc5c,0x433c0094,
+0xc60,0x00000000,
+0xc64,0x7116848b,
+0xc68,0x47c00bff,
+0xc6c,0x00000036,
+0xc70,0x2c7f000d,
+0xc74,0x018610db,
+0xc78,0x0000001f,
+0xc7c,0x00b91612,
+0xc80,0x40000100,
+0xc84,0x20f60000,
+0xc88,0x40000100,
+0xc8c,0x20200000,
+0xc90,0x00121820,
+0xc94,0x00000000,
+0xc98,0x00121820,
+0xc9c,0x00007f7f,
+0xca0,0x00000000,
+0xca4,0x00000080,
+0xca8,0x00000000,
+0xcac,0x00000000,
+0xcb0,0x00000000,
+0xcb4,0x00000000,
+0xcb8,0x00000000,
+0xcbc,0x28000000,
+0xcc0,0x00000000,
+0xcc4,0x00000000,
+0xcc8,0x00000000,
+0xccc,0x00000000,
+0xcd0,0x00000000,
+0xcd4,0x00000000,
+0xcd8,0x64b22427,
+0xcdc,0x00766932,
+0xce0,0x00222222,
+0xce4,0x00000000,
+0xce8,0x37644302,
+0xcec,0x2f97d40c,
+0xd00,0x00080740,
+0xd04,0x00020401,
+0xd08,0x0000907f,
+0xd0c,0x20010201,
+0xd10,0xa0633333,
+0xd14,0x3333bc43,
+0xd18,0x7a8f5b6b,
+0xd2c,0xcc979975,
+0xd30,0x00000000,
+0xd34,0x80608000,
+0xd38,0x00000000,
+0xd3c,0x00027293,
+0xd40,0x00000000,
+0xd44,0x00000000,
+0xd48,0x00000000,
+0xd4c,0x00000000,
+0xd50,0x6437140a,
+0xd54,0x00000000,
+0xd58,0x00000000,
+0xd5c,0x30032064,
+0xd60,0x4653de68,
+0xd64,0x04518a3c,
+0xd68,0x00002101,
+0xd6c,0x2a201c16,
+0xd70,0x1812362e,
+0xd74,0x322c2220,
+0xd78,0x000e3c24,
+0xe00,0x2a2a2a2a,
+0xe04,0x2a2a2a2a,
+0xe08,0x03902a2a,
+0xe10,0x2a2a2a2a,
+0xe14,0x2a2a2a2a,
+0xe18,0x2a2a2a2a,
+0xe1c,0x2a2a2a2a,
+0xe28,0x00000000,
+0xe30,0x1000dc1f,
+0xe34,0x10008c1f,
+0xe38,0x02140102,
+0xe3c,0x681604c2,
+0xe40,0x01007c00,
+0xe44,0x01004800,
+0xe48,0xfb000000,
+0xe4c,0x000028d1,
+0xe50,0x1000dc1f,
+0xe54,0x10008c1f,
+0xe58,0x02140102,
+0xe5c,0x28160d05,
+0xe60,0x00000008,
+0xe68,0x001b25a4,
+0xe6c,0x631b25a0,
+0xe70,0x631b25a0,
+0xe74,0x081b25a0,
+0xe78,0x081b25a0,
+0xe7c,0x081b25a0,
+0xe80,0x081b25a0,
+0xe84,0x631b25a0,
+0xe88,0x081b25a0,
+0xe8c,0x631b25a0,
+0xed0,0x631b25a0,
+0xed4,0x631b25a0,
+0xed8,0x631b25a0,
+0xedc,0x001b25a0,
+0xee0,0x001b25a0,
+0xeec,0x6b1b25a0,
+0xf14,0x00000003,
+0xf4c,0x00000000,
+0xf00,0x00000300,
+};
+
+u32 Rtl8723UPHY_REG_1T_SDIOArray[Rtl8723UPHY_REG_1T_SDIOArrayLength] = {
+0x800,0x80040000,
+0x804,0x00000003,
+0x808,0x0000fc00,
+0x80c,0x0000000a,
+0x810,0x10005388,
+0x814,0x020c3d10,
+0x818,0x02200385,
+0x81c,0x00000000,
+0x820,0x01000100,
+0x824,0x00390004,
+0x828,0x00000000,
+0x82c,0x00000000,
+0x830,0x00000000,
+0x834,0x00000000,
+0x838,0x00000000,
+0x83c,0x00000000,
+0x840,0x00010000,
+0x844,0x00000000,
+0x848,0x00000000,
+0x84c,0x00000000,
+0x850,0x00000000,
+0x854,0x00000000,
+0x858,0x569a569a,
+0x85c,0x001b25a4,
+0x860,0x66f60110,
+0x864,0x061f0130,
+0x868,0x00000000,
+0x86c,0x32323200,
+0x870,0x07000760,
+0x874,0x22004000,
+0x878,0x00000808,
+0x87c,0x00000000,
+0x880,0xc0083070,
+0x884,0x000004d5,
+0x888,0x00000000,
+0x88c,0xccc000c0,
+0x890,0x00000800,
+0x894,0xfffffffe,
+0x898,0x40302010,
+0x89c,0x00706050,
+0x900,0x00000000,
+0x904,0x00000023,
+0x908,0x00000000,
+0x90c,0x81121111,
+0xa00,0x00d047c8,
+0xa04,0x80ff000c,
+0xa08,0x8c838300,
+0xa0c,0x2e68120f,
+0xa10,0x9500bb78,
+0xa14,0x11144028,
+0xa18,0x00881117,
+0xa1c,0x89140f00,
+0xa20,0x1a1b0000,
+0xa24,0x090e1317,
+0xa28,0x00000204,
+0xa2c,0x00d30000,
+0xa70,0x101fbf00,
+0xa74,0x00000007,
+0xa78,0x00000900,
+0xc00,0x48071d40,
+0xc04,0x03a05611,
+0xc08,0x000000e4,
+0xc0c,0x6c6c6c6c,
+0xc10,0x08800000,
+0xc14,0x40000100,
+0xc18,0x08800000,
+0xc1c,0x40000100,
+0xc20,0x00000000,
+0xc24,0x00000000,
+0xc28,0x00000000,
+0xc2c,0x00000000,
+0xc30,0x69e9ac44,
+0xc34,0x469652cf,
+0xc38,0x49795994,
+0xc3c,0x0a97971c,
+0xc40,0x1f7c403f,
+0xc44,0x000100b7,
+0xc48,0xec020107,
+0xc4c,0x007f037f,
+0xc50,0x69543420,
+0xc54,0x43bc0094,
+0xc58,0x69543420,
+0xc5c,0x433c0094,
+0xc60,0x00000000,
+0xc64,0x7116848b,
+0xc68,0x47c00bff,
+0xc6c,0x00000036,
+0xc70,0x2c7f000d,
+0xc74,0x018610db,
+0xc78,0x0000001f,
+0xc7c,0x00b91612,
+0xc80,0x40000100,
+0xc84,0x20f60000,
+0xc88,0x40000100,
+0xc8c,0x20200000,
+0xc90,0x00121820,
+0xc94,0x00000000,
+0xc98,0x00121820,
+0xc9c,0x00007f7f,
+0xca0,0x00000000,
+0xca4,0x00000080,
+0xca8,0x00000000,
+0xcac,0x00000000,
+0xcb0,0x00000000,
+0xcb4,0x00000000,
+0xcb8,0x00000000,
+0xcbc,0x28000000,
+0xcc0,0x00000000,
+0xcc4,0x00000000,
+0xcc8,0x00000000,
+0xccc,0x00000000,
+0xcd0,0x00000000,
+0xcd4,0x00000000,
+0xcd8,0x64b22427,
+0xcdc,0x00766932,
+0xce0,0x00222222,
+0xce4,0x00000000,
+0xce8,0x37644302,
+0xcec,0x2f97d40c,
+0xd00,0x00080740,
+0xd04,0x00020401,
+0xd08,0x0000907f,
+0xd0c,0x20010201,
+0xd10,0xa0633333,
+0xd14,0x3333bc43,
+0xd18,0x7a8f5b6b,
+0xd2c,0xcc979975,
+0xd30,0x00000000,
+0xd34,0x80608000,
+0xd38,0x00000000,
+0xd3c,0x00027293,
+0xd40,0x00000000,
+0xd44,0x00000000,
+0xd48,0x00000000,
+0xd4c,0x00000000,
+0xd50,0x6437140a,
+0xd54,0x00000000,
+0xd58,0x00000000,
+0xd5c,0x30032064,
+0xd60,0x4653de68,
+0xd64,0x04518a3c,
+0xd68,0x00002101,
+0xd6c,0x2a201c16,
+0xd70,0x1812362e,
+0xd74,0x322c2220,
+0xd78,0x000e3c24,
+0xe00,0x2a2a2a2a,
+0xe04,0x2a2a2a2a,
+0xe08,0x03902a2a,
+0xe10,0x2a2a2a2a,
+0xe14,0x2a2a2a2a,
+0xe18,0x2a2a2a2a,
+0xe1c,0x2a2a2a2a,
+0xe28,0x00000000,
+0xe30,0x1000dc1f,
+0xe34,0x10008c1f,
+0xe38,0x02140102,
+0xe3c,0x681604c2,
+0xe40,0x01007c00,
+0xe44,0x01004800,
+0xe48,0xfb000000,
+0xe4c,0x000028d1,
+0xe50,0x1000dc1f,
+0xe54,0x10008c1f,
+0xe58,0x02140102,
+0xe5c,0x28160d05,
+0xe60,0x00000008,
+0xe68,0x001b25a4,
+0xe6c,0x631b25a0,
+0xe70,0x631b25a0,
+0xe74,0x081b25a0,
+0xe78,0x081b25a0,
+0xe7c,0x081b25a0,
+0xe80,0x081b25a0,
+0xe84,0x631b25a0,
+0xe88,0x081b25a0,
+0xe8c,0x631b25a0,
+0xed0,0x631b25a0,
+0xed4,0x631b25a0,
+0xed8,0x631b25a0,
+0xedc,0x001b25a0,
+0xee0,0x001b25a0,
+0xeec,0x6b1b25a0,
+0xf14,0x00000003,
+0xf4c,0x00000000,
+0xf00,0x00000300,
+};
+
+u32 Rtl8723URadioA_2TArray[Rtl8723URadioA_2TArrayLength] = {
+0x0, };
+
+u32 Rtl8723URadioB_2TArray[Rtl8723URadioB_2TArrayLength] = {
+0x0, };
+
+u32 Rtl8723URadioA_1TArray[Rtl8723URadioA_1TArrayLength] = {
+0x000,0x00030159,
+0x001,0x00031284,
+0x002,0x00098000,
+0x003,0x00039c63,
+0x004,0x000210e7,
+0x009,0x0002044f,
+0x00a,0x0001a3f1,
+0x00b,0x00014787,
+0x00c,0x000896fe,
+0x00d,0x0000e02c,
+0x00e,0x00039ce7,
+0x00f,0x00000451,
+0x019,0x00000000,
+0x01a,0x00030355,
+0x01b,0x00060a00,
+0x01c,0x000fc378,
+0x01d,0x000a1250,
+0x01e,0x0000024f,
+0x01f,0x00000000,
+0x020,0x0000b614,
+0x021,0x0006c000,
+0x022,0x00000000,
+0x023,0x00001558,
+0x024,0x00000060,
+0x025,0x00000483,
+0x026,0x0004f000,
+0x027,0x000ec7d9,
+0x028,0x00057730,
+0x029,0x00004783,
+0x02a,0x00000001,
+0x02b,0x00021334,
+0x02a,0x00000000,
+0x02b,0x00000054,
+0x02a,0x00000001,
+0x02b,0x00000808,
+0x02b,0x00053333,
+0x02c,0x0000000c,
+0x02a,0x00000002,
+0x02b,0x00000808,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000003,
+0x02b,0x00000808,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000004,
+0x02b,0x00000808,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x00000005,
+0x02b,0x00000808,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x00000006,
+0x02b,0x00000709,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000007,
+0x02b,0x00000709,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000008,
+0x02b,0x0000060a,
+0x02b,0x0004b333,
+0x02c,0x0000000d,
+0x02a,0x00000009,
+0x02b,0x0000060a,
+0x02b,0x00053333,
+0x02c,0x0000000d,
+0x02a,0x0000000a,
+0x02b,0x0000060a,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x0000000b,
+0x02b,0x0000060a,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x0000000c,
+0x02b,0x0000060a,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x0000000d,
+0x02b,0x0000060a,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x0000000e,
+0x02b,0x0000050b,
+0x02b,0x00066666,
+0x02c,0x0000001a,
+0x02a,0x000e0000,
+0x010,0x0004000f,
+0x011,0x000e31fc,
+0x010,0x0006000f,
+0x011,0x000ff9f8,
+0x010,0x0002000f,
+0x011,0x000203f9,
+0x010,0x0003000f,
+0x011,0x000ff500,
+0x010,0x00000000,
+0x011,0x00000000,
+0x010,0x0008000f,
+0x011,0x0003f100,
+0x010,0x0009000f,
+0x011,0x00023100,
+0x012,0x00032000,
+0x012,0x00071000,
+0x012,0x000b0000,
+0x012,0x000fc000,
+0x013,0x000287b3,
+0x013,0x000244b7,
+0x013,0x000204ab,
+0x013,0x0001c49f,
+0x013,0x00018493,
+0x013,0x0001429b,
+0x013,0x00010299,
+0x013,0x0000c29c,
+0x013,0x000081a0,
+0x013,0x000040ac,
+0x013,0x00000020,
+0x014,0x0001944c,
+0x014,0x00059444,
+0x014,0x0009944c,
+0x014,0x000d9444,
+0x015,0x0000f474,
+0x015,0x0004f477,
+0x015,0x0008f474,
+0x015,0x000cf474,
+0x016,0x00000339,
+0x016,0x00040339,
+0x016,0x00080339,
+0x016,0x000c0366,
+0x000,0x00010159,
+0x018,0x0000f401,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01f,0x00000003,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01e,0x00000247,
+0x01f,0x00000000,
+0x000,0x00030159,
+};
+
+u32 Rtl8723URadioB_1TArray[Rtl8723URadioB_1TArrayLength] = {
+0x0, };
+
+u32 Rtl8723URadioA_1T_mCardArray[Rtl8723URadioA_1T_mCardArrayLength] = {
+0x000,0x00030159,
+0x001,0x00031284,
+0x002,0x00098000,
+0x003,0x00018c63,
+0x004,0x000210e7,
+0x009,0x0002044f,
+0x00a,0x0001a3f1,
+0x00b,0x00014787,
+0x00c,0x000896fe,
+0x00d,0x0000e02c,
+0x00e,0x00039ce7,
+0x00f,0x00000451,
+0x019,0x00000000,
+0x01a,0x00030355,
+0x01b,0x00060a00,
+0x01c,0x000fc378,
+0x01d,0x000a1250,
+0x01e,0x0004445f,
+0x01f,0x00080001,
+0x020,0x0000b614,
+0x021,0x0006c000,
+0x022,0x00000000,
+0x023,0x00001558,
+0x024,0x00000060,
+0x025,0x00000483,
+0x026,0x0004f000,
+0x027,0x000ec7d9,
+0x028,0x00057730,
+0x029,0x00004783,
+0x02a,0x00000001,
+0x02b,0x00021334,
+0x02a,0x00000000,
+0x02b,0x00000054,
+0x02a,0x00000001,
+0x02b,0x00000808,
+0x02b,0x00053333,
+0x02c,0x0000000c,
+0x02a,0x00000002,
+0x02b,0x00000808,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000003,
+0x02b,0x00000808,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000004,
+0x02b,0x00000808,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x00000005,
+0x02b,0x00000808,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x00000006,
+0x02b,0x00000709,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000007,
+0x02b,0x00000709,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000008,
+0x02b,0x0000060a,
+0x02b,0x0004b333,
+0x02c,0x0000000d,
+0x02a,0x00000009,
+0x02b,0x0000060a,
+0x02b,0x00053333,
+0x02c,0x0000000d,
+0x02a,0x0000000a,
+0x02b,0x0000060a,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x0000000b,
+0x02b,0x0000060a,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x0000000c,
+0x02b,0x0000060a,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x0000000d,
+0x02b,0x0000060a,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x0000000e,
+0x02b,0x0000050b,
+0x02b,0x00066666,
+0x02c,0x0000001a,
+0x02a,0x000e0000,
+0x010,0x0004000f,
+0x011,0x000e31fc,
+0x010,0x0006000f,
+0x011,0x000ff9f8,
+0x010,0x0002000f,
+0x011,0x000203f9,
+0x010,0x0003000f,
+0x011,0x000ff500,
+0x010,0x00000000,
+0x011,0x00000000,
+0x010,0x0008000f,
+0x011,0x0003f100,
+0x010,0x0009000f,
+0x011,0x00023100,
+0x012,0x00032000,
+0x012,0x00071000,
+0x012,0x000b0000,
+0x012,0x000fc000,
+0x013,0x000287b3,
+0x013,0x000244b7,
+0x013,0x000204ab,
+0x013,0x0001c49f,
+0x013,0x00018493,
+0x013,0x0001429b,
+0x013,0x00010299,
+0x013,0x0000c29c,
+0x013,0x000081a0,
+0x013,0x000040ac,
+0x013,0x00000020,
+0x014,0x0001944c,
+0x014,0x00059444,
+0x014,0x0009944c,
+0x014,0x000d9444,
+0x015,0x0000f424,
+0x015,0x0004f424,
+0x015,0x0008f424,
+0x015,0x000cf424,
+0x016,0x00000339,
+0x016,0x00040339,
+0x016,0x00080339,
+0x016,0x000c0356,
+0x000,0x00010159,
+0x018,0x0000f401,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01f,0x00080003,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01e,0x00044457,
+0x01f,0x00080000,
+0x000,0x00030159,
+};
+
+u32 Rtl8723URadioA_1T_SDIOArray[Rtl8723URadioA_1T_SDIOArrayLength] = {
+0x000,0x00030159,
+0x001,0x00031284,
+0x002,0x00098000,
+0x003,0x00039c63,
+0x004,0x000210e7,
+0x009,0x0002044f,
+0x00a,0x0001a3f1,
+0x00b,0x00014787,
+0x00c,0x000896fe,
+0x00d,0x0000e02c,
+0x00e,0x00039ce7,
+0x00f,0x00000451,
+0x019,0x00000000,
+0x01a,0x00030355,
+0x01b,0x00060a00,
+0x01c,0x000fc378,
+0x01d,0x000a1250,
+0x01e,0x0000024f,
+0x01f,0x00000000,
+0x020,0x0000b614,
+0x021,0x0006c000,
+0x022,0x00000000,
+0x023,0x00001558,
+0x024,0x00000060,
+0x025,0x00000483,
+0x026,0x0004f000,
+0x027,0x000ec7d9,
+0x028,0x00057730,
+0x029,0x00004783,
+0x02a,0x00000001,
+0x02b,0x00021334,
+0x02a,0x00000000,
+0x02b,0x00000054,
+0x02a,0x00000001,
+0x02b,0x00000808,
+0x02b,0x00053333,
+0x02c,0x0000000c,
+0x02a,0x00000002,
+0x02b,0x00000808,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000003,
+0x02b,0x00000808,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000004,
+0x02b,0x00000808,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x00000005,
+0x02b,0x00000808,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x00000006,
+0x02b,0x00000709,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x00000007,
+0x02b,0x00000709,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x00000008,
+0x02b,0x0000060a,
+0x02b,0x0004b333,
+0x02c,0x0000000d,
+0x02a,0x00000009,
+0x02b,0x0000060a,
+0x02b,0x00053333,
+0x02c,0x0000000d,
+0x02a,0x0000000a,
+0x02b,0x0000060a,
+0x02b,0x0005b333,
+0x02c,0x0000000d,
+0x02a,0x0000000b,
+0x02b,0x0000060a,
+0x02b,0x00063333,
+0x02c,0x0000000d,
+0x02a,0x0000000c,
+0x02b,0x0000060a,
+0x02b,0x0006b333,
+0x02c,0x0000000d,
+0x02a,0x0000000d,
+0x02b,0x0000060a,
+0x02b,0x00073333,
+0x02c,0x0000000d,
+0x02a,0x0000000e,
+0x02b,0x0000050b,
+0x02b,0x00066666,
+0x02c,0x0000001a,
+0x02a,0x000e0000,
+0x010,0x0004000f,
+0x011,0x000e31fc,
+0x010,0x0006000f,
+0x011,0x000ff9f8,
+0x010,0x0002000f,
+0x011,0x000203f9,
+0x010,0x0003000f,
+0x011,0x000ff500,
+0x010,0x00000000,
+0x011,0x00000000,
+0x010,0x0008000f,
+0x011,0x0003f100,
+0x010,0x0009000f,
+0x011,0x00023100,
+0x012,0x00032000,
+0x012,0x00071000,
+0x012,0x000b0000,
+0x012,0x000fc000,
+0x013,0x000287b3,
+0x013,0x000244b7,
+0x013,0x000204ab,
+0x013,0x0001c49f,
+0x013,0x00018493,
+0x013,0x0001429b,
+0x013,0x00010299,
+0x013,0x0000c29c,
+0x013,0x000081a0,
+0x013,0x000040ac,
+0x013,0x00000020,
+0x014,0x0001944c,
+0x014,0x00059444,
+0x014,0x0009944c,
+0x014,0x000d9444,
+0x015,0x0000f474,
+0x015,0x0004f477,
+0x015,0x0008f474,
+0x015,0x000cf474,
+0x016,0x00000339,
+0x016,0x00040339,
+0x016,0x00080339,
+0x016,0x000c0366,
+0x000,0x00010159,
+0x018,0x0000f401,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01f,0x00000003,
+0x0fe,0x00000000,
+0x0fe,0x00000000,
+0x01e,0x00000247,
+0x01f,0x00000000,
+0x000,0x00030159,
+};
+
+u32 Rtl8723URadioB_GM_Array[Rtl8723URadioB_GM_ArrayLength] = {
+0x0, };
+
+u32 Rtl8723UMAC_2T_Array[Rtl8723UMAC_2T_ArrayLength] = {
+0x420,0x00000080,
+0x423,0x00000000,
+0x430,0x00000000,
+0x431,0x00000000,
+0x432,0x00000000,
+0x433,0x00000001,
+0x434,0x00000004,
+0x435,0x00000005,
+0x436,0x00000006,
+0x437,0x00000007,
+0x438,0x00000000,
+0x439,0x00000000,
+0x43a,0x00000000,
+0x43b,0x00000001,
+0x43c,0x00000004,
+0x43d,0x00000005,
+0x43e,0x00000006,
+0x43f,0x00000007,
+0x440,0x0000005d,
+0x441,0x00000001,
+0x442,0x00000000,
+0x444,0x00000015,
+0x445,0x000000f0,
+0x446,0x0000000f,
+0x447,0x00000000,
+0x458,0x00000041,
+0x459,0x000000a8,
+0x45a,0x00000072,
+0x45b,0x000000b9,
+0x460,0x00000066,
+0x461,0x00000066,
+0x462,0x00000008,
+0x463,0x00000003,
+0x4c8,0x000000ff,
+0x4c9,0x00000008,
+0x4cc,0x000000ff,
+0x4cd,0x000000ff,
+0x4ce,0x00000001,
+0x500,0x00000026,
+0x501,0x000000a2,
+0x502,0x0000002f,
+0x503,0x00000000,
+0x504,0x00000028,
+0x505,0x000000a3,
+0x506,0x0000005e,
+0x507,0x00000000,
+0x508,0x0000002b,
+0x509,0x000000a4,
+0x50a,0x0000005e,
+0x50b,0x00000000,
+0x50c,0x0000004f,
+0x50d,0x000000a4,
+0x50e,0x00000000,
+0x50f,0x00000000,
+0x512,0x0000001c,
+0x514,0x0000000a,
+0x515,0x00000010,
+0x516,0x0000000a,
+0x517,0x00000010,
+0x51a,0x00000016,
+0x524,0x0000000f,
+0x525,0x0000004f,
+0x546,0x00000040,
+0x547,0x00000000,
+0x550,0x00000010,
+0x551,0x00000010,
+0x559,0x00000002,
+0x55a,0x00000002,
+0x55d,0x000000ff,
+0x605,0x00000030,
+0x608,0x0000000e,
+0x609,0x0000002a,
+0x652,0x00000020,
+0x63c,0x0000000a,
+0x63d,0x0000000e,
+0x63e,0x0000000a,
+0x63f,0x0000000e,
+0x66e,0x00000005,
+0x700,0x00000021,
+0x701,0x00000043,
+0x702,0x00000065,
+0x703,0x00000087,
+0x708,0x00000021,
+0x709,0x00000043,
+0x70a,0x00000065,
+0x70b,0x00000087,
+};
+
+
+u32 Rtl8723UAGCTAB_2TArray[Rtl8723UAGCTAB_2TArrayLength] = {
+0x0, };
+
+u32 Rtl8723UAGCTAB_1TArray[Rtl8723UAGCTAB_1TArrayLength] = {
+0xc78,0x7b000001,
+0xc78,0x7b010001,
+0xc78,0x7b020001,
+0xc78,0x7b030001,
+0xc78,0x7b040001,
+0xc78,0x7b050001,
+0xc78,0x7a060001,
+0xc78,0x79070001,
+0xc78,0x78080001,
+0xc78,0x77090001,
+0xc78,0x760a0001,
+0xc78,0x750b0001,
+0xc78,0x740c0001,
+0xc78,0x730d0001,
+0xc78,0x720e0001,
+0xc78,0x710f0001,
+0xc78,0x70100001,
+0xc78,0x6f110001,
+0xc78,0x6e120001,
+0xc78,0x6d130001,
+0xc78,0x6c140001,
+0xc78,0x6b150001,
+0xc78,0x6a160001,
+0xc78,0x69170001,
+0xc78,0x68180001,
+0xc78,0x67190001,
+0xc78,0x661a0001,
+0xc78,0x651b0001,
+0xc78,0x641c0001,
+0xc78,0x631d0001,
+0xc78,0x621e0001,
+0xc78,0x611f0001,
+0xc78,0x60200001,
+0xc78,0x49210001,
+0xc78,0x48220001,
+0xc78,0x47230001,
+0xc78,0x46240001,
+0xc78,0x45250001,
+0xc78,0x44260001,
+0xc78,0x43270001,
+0xc78,0x42280001,
+0xc78,0x41290001,
+0xc78,0x402a0001,
+0xc78,0x262b0001,
+0xc78,0x252c0001,
+0xc78,0x242d0001,
+0xc78,0x232e0001,
+0xc78,0x222f0001,
+0xc78,0x21300001,
+0xc78,0x20310001,
+0xc78,0x06320001,
+0xc78,0x05330001,
+0xc78,0x04340001,
+0xc78,0x03350001,
+0xc78,0x02360001,
+0xc78,0x01370001,
+0xc78,0x00380001,
+0xc78,0x00390001,
+0xc78,0x003a0001,
+0xc78,0x003b0001,
+0xc78,0x003c0001,
+0xc78,0x003d0001,
+0xc78,0x003e0001,
+0xc78,0x003f0001,
+0xc78,0x7b400001,
+0xc78,0x7b410001,
+0xc78,0x7b420001,
+0xc78,0x7b430001,
+0xc78,0x7b440001,
+0xc78,0x7b450001,
+0xc78,0x7a460001,
+0xc78,0x79470001,
+0xc78,0x78480001,
+0xc78,0x77490001,
+0xc78,0x764a0001,
+0xc78,0x754b0001,
+0xc78,0x744c0001,
+0xc78,0x734d0001,
+0xc78,0x724e0001,
+0xc78,0x714f0001,
+0xc78,0x70500001,
+0xc78,0x6f510001,
+0xc78,0x6e520001,
+0xc78,0x6d530001,
+0xc78,0x6c540001,
+0xc78,0x6b550001,
+0xc78,0x6a560001,
+0xc78,0x69570001,
+0xc78,0x68580001,
+0xc78,0x67590001,
+0xc78,0x665a0001,
+0xc78,0x655b0001,
+0xc78,0x645c0001,
+0xc78,0x635d0001,
+0xc78,0x625e0001,
+0xc78,0x615f0001,
+0xc78,0x60600001,
+0xc78,0x49610001,
+0xc78,0x48620001,
+0xc78,0x47630001,
+0xc78,0x46640001,
+0xc78,0x45650001,
+0xc78,0x44660001,
+0xc78,0x43670001,
+0xc78,0x42680001,
+0xc78,0x41690001,
+0xc78,0x406a0001,
+0xc78,0x266b0001,
+0xc78,0x256c0001,
+0xc78,0x246d0001,
+0xc78,0x236e0001,
+0xc78,0x226f0001,
+0xc78,0x21700001,
+0xc78,0x20710001,
+0xc78,0x06720001,
+0xc78,0x05730001,
+0xc78,0x04740001,
+0xc78,0x03750001,
+0xc78,0x02760001,
+0xc78,0x01770001,
+0xc78,0x00780001,
+0xc78,0x00790001,
+0xc78,0x007a0001,
+0xc78,0x007b0001,
+0xc78,0x007c0001,
+0xc78,0x007d0001,
+0xc78,0x007e0001,
+0xc78,0x007f0001,
+0xc78,0x3800001e,
+0xc78,0x3801001e,
+0xc78,0x3802001e,
+0xc78,0x3803001e,
+0xc78,0x3804001e,
+0xc78,0x3805001e,
+0xc78,0x3806001e,
+0xc78,0x3807001e,
+0xc78,0x3808001e,
+0xc78,0x3c09001e,
+0xc78,0x3e0a001e,
+0xc78,0x400b001e,
+0xc78,0x440c001e,
+0xc78,0x480d001e,
+0xc78,0x4c0e001e,
+0xc78,0x500f001e,
+0xc78,0x5210001e,
+0xc78,0x5611001e,
+0xc78,0x5a12001e,
+0xc78,0x5e13001e,
+0xc78,0x6014001e,
+0xc78,0x6015001e,
+0xc78,0x6016001e,
+0xc78,0x6217001e,
+0xc78,0x6218001e,
+0xc78,0x6219001e,
+0xc78,0x621a001e,
+0xc78,0x621b001e,
+0xc78,0x621c001e,
+0xc78,0x621d001e,
+0xc78,0x621e001e,
+0xc78,0x621f001e,
+};
+
+
+#endif//ENDIF CONFIG_PHY_SETTING_WITH_ODM
+
+u32 Rtl8723UPHY_REG_Array_PG[Rtl8723UPHY_REG_Array_PGLength] = {
+0xe00,0xffffffff,0x0a0c0c0c,
+0xe04,0xffffffff,0x02040608,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x0a0c0d0e,
+0xe14,0xffffffff,0x02040608,
+0xe18,0xffffffff,0x0a0c0d0e,
+0xe1c,0xffffffff,0x02040608,
+0x830,0xffffffff,0x0a0c0c0c,
+0x834,0xffffffff,0x02040608,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x0a0c0d0e,
+0x848,0xffffffff,0x02040608,
+0x84c,0xffffffff,0x0a0c0d0e,
+0x868,0xffffffff,0x02040608,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x04040404,
+0xe04,0xffffffff,0x00020204,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x06060606,
+0xe14,0xffffffff,0x00020406,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x04040404,
+0x834,0xffffffff,0x00020204,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x06060606,
+0x848,0xffffffff,0x00020406,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x04040404,
+0xe04,0xffffffff,0x00020204,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x04040404,
+0x834,0xffffffff,0x00020204,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+0xe00,0xffffffff,0x00000000,
+0xe04,0xffffffff,0x00000000,
+0xe08,0x0000ff00,0x00000000,
+0x86c,0xffffff00,0x00000000,
+0xe10,0xffffffff,0x00000000,
+0xe14,0xffffffff,0x00000000,
+0xe18,0xffffffff,0x00000000,
+0xe1c,0xffffffff,0x00000000,
+0x830,0xffffffff,0x00000000,
+0x834,0xffffffff,0x00000000,
+0x838,0xffffff00,0x00000000,
+0x86c,0x000000ff,0x00000000,
+0x83c,0xffffffff,0x00000000,
+0x848,0xffffffff,0x00000000,
+0x84c,0xffffffff,0x00000000,
+0x868,0xffffffff,0x00000000,
+};
+
+u32 Rtl8723UMACPHY_Array_PG[Rtl8723UMACPHY_Array_PGLength] = {
+0x0, };
+
+#if MP_DRIVER == 1
+
+u32 Rtl8723UPHY_REG_Array_MP[Rtl8723UPHY_REG_Array_MPLength] = {
+0xc30,0x69e9ac4a,
+0xc3c,0x0a979718,
+};
+
+#endif//#if MP_DRIVER == 1
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723UHWImg_CE.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723UHWImg_CE.h
index 732e05c8d94a..2512b91bf7a2 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723UHWImg_CE.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/Hal8723UHWImg_CE.h
@@ -1,75 +1,75 @@
-#ifndef __INC_HAL8723U_FW_IMG_H
-#define __INC_HAL8723U_FW_IMG_H
-
-/*Created on 2013/01/14, 15:51*/
-
-//FW v16 enable usb interrupt
-#define Rtl8723UImgArrayLength 22172
-extern u8 Rtl8723UFwImgArray[Rtl8723UImgArrayLength];
-#define Rtl8723UBTImgArrayLength 1
-extern u8 Rtl8723UFwBTImgArray[Rtl8723UBTImgArrayLength];
-
-#define Rtl8723UUMCBCutImgArrayWithBTLength 24118
-#define Rtl8723UUMCBCutImgArrayWithoutBTLength 19200
-
-extern u8 Rtl8723UFwUMCBCutImgArrayWithBT[Rtl8723UUMCBCutImgArrayWithBTLength];
-extern u8 Rtl8723UFwUMCBCutImgArrayWithoutBT[Rtl8723UUMCBCutImgArrayWithoutBTLength];
-
-#define Rtl8723SUMCBCutMPImgArrayLength 24174
-extern const u8 Rtl8723SFwUMCBCutMPImgArray[Rtl8723SUMCBCutMPImgArrayLength];
-
-#define Rtl8723EBTImgArrayLength 15275
-extern u8 Rtl8723EFwBTImgArray[Rtl8723EBTImgArrayLength] ;
-
-
-#ifndef CONFIG_PHY_SETTING_WITH_ODM
-#define Rtl8723UPHY_REG_2TArrayLength 1
-extern u32 Rtl8723UPHY_REG_2TArray[Rtl8723UPHY_REG_2TArrayLength];
-#define Rtl8723UPHY_REG_1TArrayLength 372
-extern u32 Rtl8723UPHY_REG_1TArray[Rtl8723UPHY_REG_1TArrayLength];
-#define Rtl8723UPHY_ChangeTo_1T1RArrayLength 1
-extern u32 Rtl8723UPHY_ChangeTo_1T1RArray[Rtl8723UPHY_ChangeTo_1T1RArrayLength];
-#define Rtl8723UPHY_ChangeTo_1T2RArrayLength 1
-extern u32 Rtl8723UPHY_ChangeTo_1T2RArray[Rtl8723UPHY_ChangeTo_1T2RArrayLength];
-#define Rtl8723UPHY_ChangeTo_2T2RArrayLength 1
-extern u32 Rtl8723UPHY_ChangeTo_2T2RArray[Rtl8723UPHY_ChangeTo_2T2RArrayLength];
-
-#define Rtl8723UPHY_REG_1T_mCardArrayLength 372
-extern u32 Rtl8723UPHY_REG_1T_mCardArray[Rtl8723UPHY_REG_1T_mCardArrayLength];
-#define Rtl8723UPHY_REG_1T_SDIOArrayLength 372
-extern u32 Rtl8723UPHY_REG_1T_SDIOArray[Rtl8723UPHY_REG_1T_SDIOArrayLength];
-#define Rtl8723URadioA_2TArrayLength 1
-extern u32 Rtl8723URadioA_2TArray[Rtl8723URadioA_2TArrayLength];
-#define Rtl8723URadioB_2TArrayLength 1
-extern u32 Rtl8723URadioB_2TArray[Rtl8723URadioB_2TArrayLength];
-#define Rtl8723URadioA_1TArrayLength 282
-extern u32 Rtl8723URadioA_1TArray[Rtl8723URadioA_1TArrayLength];
-#define Rtl8723URadioB_1TArrayLength 1
-extern u32 Rtl8723URadioB_1TArray[Rtl8723URadioB_1TArrayLength];
-#define Rtl8723URadioA_1T_mCardArrayLength 282
-extern u32 Rtl8723URadioA_1T_mCardArray[Rtl8723URadioA_1T_mCardArrayLength];
-#define Rtl8723URadioA_1T_SDIOArrayLength 282
-extern u32 Rtl8723URadioA_1T_SDIOArray[Rtl8723URadioA_1T_SDIOArrayLength];
-#define Rtl8723URadioB_GM_ArrayLength 1
-extern u32 Rtl8723URadioB_GM_Array[Rtl8723URadioB_GM_ArrayLength];
-#define Rtl8723UMAC_2T_ArrayLength 172
-extern u32 Rtl8723UMAC_2T_Array[Rtl8723UMAC_2T_ArrayLength];
-
-#define Rtl8723UAGCTAB_2TArrayLength 1
-extern u32 Rtl8723UAGCTAB_2TArray[Rtl8723UAGCTAB_2TArrayLength];
-#define Rtl8723UAGCTAB_1TArrayLength 320
-extern u32 Rtl8723UAGCTAB_1TArray[Rtl8723UAGCTAB_1TArrayLength];
-#endif//#ifndef CONFIG_PHY_SETTING_WITH_ODM
-
-#define Rtl8723UPHY_REG_Array_PGLength 336
-extern u32 Rtl8723UPHY_REG_Array_PG[Rtl8723UPHY_REG_Array_PGLength];
-#define Rtl8723UMACPHY_Array_PGLength 1
-extern u32 Rtl8723UMACPHY_Array_PG[Rtl8723UMACPHY_Array_PGLength];
-
-#if MP_DRIVER == 1
-#define Rtl8723UPHY_REG_Array_MPLength 4
-extern u32 Rtl8723UPHY_REG_Array_MP[Rtl8723UPHY_REG_Array_MPLength];
-#endif //#if MP_DRIVER == 1
-
-#endif //#ifndef __INC_HAL8723U_FW_IMG_H
-
+#ifndef __INC_HAL8723U_FW_IMG_H
+#define __INC_HAL8723U_FW_IMG_H
+
+/*Created on 2013/01/14, 15:51*/
+
+//FW v16 enable usb interrupt
+#define Rtl8723UImgArrayLength 22172
+extern u8 Rtl8723UFwImgArray[Rtl8723UImgArrayLength];
+#define Rtl8723UBTImgArrayLength 1
+extern u8 Rtl8723UFwBTImgArray[Rtl8723UBTImgArrayLength];
+
+#define Rtl8723UUMCBCutImgArrayWithBTLength 24348
+#define Rtl8723UUMCBCutImgArrayWithoutBTLength 19200
+
+extern u8 Rtl8723UFwUMCBCutImgArrayWithBT[Rtl8723UUMCBCutImgArrayWithBTLength];
+extern u8 Rtl8723UFwUMCBCutImgArrayWithoutBT[Rtl8723UUMCBCutImgArrayWithoutBTLength];
+
+#define Rtl8723SUMCBCutMPImgArrayLength 24174
+extern const u8 Rtl8723SFwUMCBCutMPImgArray[Rtl8723SUMCBCutMPImgArrayLength];
+
+#define Rtl8723EBTImgArrayLength 16404
+extern u8 Rtl8723EFwBTImgArray[Rtl8723EBTImgArrayLength] ;
+
+
+#ifndef CONFIG_PHY_SETTING_WITH_ODM
+#define Rtl8723UPHY_REG_2TArrayLength 1
+extern u32 Rtl8723UPHY_REG_2TArray[Rtl8723UPHY_REG_2TArrayLength];
+#define Rtl8723UPHY_REG_1TArrayLength 372
+extern u32 Rtl8723UPHY_REG_1TArray[Rtl8723UPHY_REG_1TArrayLength];
+#define Rtl8723UPHY_ChangeTo_1T1RArrayLength 1
+extern u32 Rtl8723UPHY_ChangeTo_1T1RArray[Rtl8723UPHY_ChangeTo_1T1RArrayLength];
+#define Rtl8723UPHY_ChangeTo_1T2RArrayLength 1
+extern u32 Rtl8723UPHY_ChangeTo_1T2RArray[Rtl8723UPHY_ChangeTo_1T2RArrayLength];
+#define Rtl8723UPHY_ChangeTo_2T2RArrayLength 1
+extern u32 Rtl8723UPHY_ChangeTo_2T2RArray[Rtl8723UPHY_ChangeTo_2T2RArrayLength];
+
+#define Rtl8723UPHY_REG_1T_mCardArrayLength 372
+extern u32 Rtl8723UPHY_REG_1T_mCardArray[Rtl8723UPHY_REG_1T_mCardArrayLength];
+#define Rtl8723UPHY_REG_1T_SDIOArrayLength 372
+extern u32 Rtl8723UPHY_REG_1T_SDIOArray[Rtl8723UPHY_REG_1T_SDIOArrayLength];
+#define Rtl8723URadioA_2TArrayLength 1
+extern u32 Rtl8723URadioA_2TArray[Rtl8723URadioA_2TArrayLength];
+#define Rtl8723URadioB_2TArrayLength 1
+extern u32 Rtl8723URadioB_2TArray[Rtl8723URadioB_2TArrayLength];
+#define Rtl8723URadioA_1TArrayLength 282
+extern u32 Rtl8723URadioA_1TArray[Rtl8723URadioA_1TArrayLength];
+#define Rtl8723URadioB_1TArrayLength 1
+extern u32 Rtl8723URadioB_1TArray[Rtl8723URadioB_1TArrayLength];
+#define Rtl8723URadioA_1T_mCardArrayLength 282
+extern u32 Rtl8723URadioA_1T_mCardArray[Rtl8723URadioA_1T_mCardArrayLength];
+#define Rtl8723URadioA_1T_SDIOArrayLength 282
+extern u32 Rtl8723URadioA_1T_SDIOArray[Rtl8723URadioA_1T_SDIOArrayLength];
+#define Rtl8723URadioB_GM_ArrayLength 1
+extern u32 Rtl8723URadioB_GM_Array[Rtl8723URadioB_GM_ArrayLength];
+#define Rtl8723UMAC_2T_ArrayLength 172
+extern u32 Rtl8723UMAC_2T_Array[Rtl8723UMAC_2T_ArrayLength];
+
+#define Rtl8723UAGCTAB_2TArrayLength 1
+extern u32 Rtl8723UAGCTAB_2TArray[Rtl8723UAGCTAB_2TArrayLength];
+#define Rtl8723UAGCTAB_1TArrayLength 320
+extern u32 Rtl8723UAGCTAB_1TArray[Rtl8723UAGCTAB_1TArrayLength];
+#endif//#ifndef CONFIG_PHY_SETTING_WITH_ODM
+
+#define Rtl8723UPHY_REG_Array_PGLength 336
+extern u32 Rtl8723UPHY_REG_Array_PG[Rtl8723UPHY_REG_Array_PGLength];
+#define Rtl8723UMACPHY_Array_PGLength 1
+extern u32 Rtl8723UMACPHY_Array_PG[Rtl8723UMACPHY_Array_PGLength];
+
+#if MP_DRIVER == 1
+#define Rtl8723UPHY_REG_Array_MPLength 4
+extern u32 Rtl8723UPHY_REG_Array_MP[Rtl8723UPHY_REG_Array_MPLength];
+#endif //#if MP_DRIVER == 1
+
+#endif //#ifndef __INC_HAL8723U_FW_IMG_H
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_BB.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_BB.c
index 912752ff06b5..a737344c3b88 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_BB.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_BB.c
@@ -1,815 +1,815 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-* You should have received a copy of the GNU General Public License along with
-* this program; if not, write to the Free Software Foundation, Inc.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-*
-*
-******************************************************************************/
-
-#include "../odm_precomp.h"
-
-#if (RTL8723A_SUPPORT == 1)
-static BOOLEAN
-CheckCondition(
- const u4Byte Condition,
- const u4Byte Hex
- )
-{
- u4Byte _board = (Hex & 0x000000FF);
- u4Byte _interface = (Hex & 0x0000FF00) >> 8;
- u4Byte _platform = (Hex & 0x00FF0000) >> 16;
- u4Byte cond = Condition;
-
- if ( Condition == 0xCDCDCDCD )
- return TRUE;
-
- cond = Condition & 0x000000FF;
- if ( (_board == cond) && cond != 0x00)
- return FALSE;
-
- cond = Condition & 0x0000FF00;
- cond = cond >> 8;
- if ( (_interface & cond) == 0 && cond != 0x07)
- return FALSE;
-
- cond = Condition & 0x00FF0000;
- cond = cond >> 16;
- if ( (_platform & cond) == 0 && cond != 0x0F)
- return FALSE;
- return TRUE;
-}
-
-
-/******************************************************************************
-* AGC_TAB_1T.TXT
-******************************************************************************/
-
-u4Byte Array_AGC_TAB_1T_8723A[] = {
- 0xC78, 0x7B000001,
- 0xC78, 0x7B010001,
- 0xC78, 0x7B020001,
- 0xC78, 0x7B030001,
- 0xC78, 0x7B040001,
- 0xC78, 0x7B050001,
- 0xC78, 0x7A060001,
- 0xC78, 0x79070001,
- 0xC78, 0x78080001,
- 0xC78, 0x77090001,
- 0xC78, 0x760A0001,
- 0xC78, 0x750B0001,
- 0xC78, 0x740C0001,
- 0xC78, 0x730D0001,
- 0xC78, 0x720E0001,
- 0xC78, 0x710F0001,
- 0xC78, 0x70100001,
- 0xC78, 0x6F110001,
- 0xC78, 0x6E120001,
- 0xC78, 0x6D130001,
- 0xC78, 0x6C140001,
- 0xC78, 0x6B150001,
- 0xC78, 0x6A160001,
- 0xC78, 0x69170001,
- 0xC78, 0x68180001,
- 0xC78, 0x67190001,
- 0xC78, 0x661A0001,
- 0xC78, 0x651B0001,
- 0xC78, 0x641C0001,
- 0xC78, 0x631D0001,
- 0xC78, 0x621E0001,
- 0xC78, 0x611F0001,
- 0xC78, 0x60200001,
- 0xC78, 0x49210001,
- 0xC78, 0x48220001,
- 0xC78, 0x47230001,
- 0xC78, 0x46240001,
- 0xC78, 0x45250001,
- 0xC78, 0x44260001,
- 0xC78, 0x43270001,
- 0xC78, 0x42280001,
- 0xC78, 0x41290001,
- 0xC78, 0x402A0001,
- 0xC78, 0x262B0001,
- 0xC78, 0x252C0001,
- 0xC78, 0x242D0001,
- 0xC78, 0x232E0001,
- 0xC78, 0x222F0001,
- 0xC78, 0x21300001,
- 0xC78, 0x20310001,
- 0xC78, 0x06320001,
- 0xC78, 0x05330001,
- 0xC78, 0x04340001,
- 0xC78, 0x03350001,
- 0xC78, 0x02360001,
- 0xC78, 0x01370001,
- 0xC78, 0x00380001,
- 0xC78, 0x00390001,
- 0xC78, 0x003A0001,
- 0xC78, 0x003B0001,
- 0xC78, 0x003C0001,
- 0xC78, 0x003D0001,
- 0xC78, 0x003E0001,
- 0xC78, 0x003F0001,
- 0xC78, 0x7B400001,
- 0xC78, 0x7B410001,
- 0xC78, 0x7B420001,
- 0xC78, 0x7B430001,
- 0xC78, 0x7B440001,
- 0xC78, 0x7B450001,
- 0xC78, 0x7A460001,
- 0xC78, 0x79470001,
- 0xC78, 0x78480001,
- 0xC78, 0x77490001,
- 0xC78, 0x764A0001,
- 0xC78, 0x754B0001,
- 0xC78, 0x744C0001,
- 0xC78, 0x734D0001,
- 0xC78, 0x724E0001,
- 0xC78, 0x714F0001,
- 0xC78, 0x70500001,
- 0xC78, 0x6F510001,
- 0xC78, 0x6E520001,
- 0xC78, 0x6D530001,
- 0xC78, 0x6C540001,
- 0xC78, 0x6B550001,
- 0xC78, 0x6A560001,
- 0xC78, 0x69570001,
- 0xC78, 0x68580001,
- 0xC78, 0x67590001,
- 0xC78, 0x665A0001,
- 0xC78, 0x655B0001,
- 0xC78, 0x645C0001,
- 0xC78, 0x635D0001,
- 0xC78, 0x625E0001,
- 0xC78, 0x615F0001,
- 0xC78, 0x60600001,
- 0xC78, 0x49610001,
- 0xC78, 0x48620001,
- 0xC78, 0x47630001,
- 0xC78, 0x46640001,
- 0xC78, 0x45650001,
- 0xC78, 0x44660001,
- 0xC78, 0x43670001,
- 0xC78, 0x42680001,
- 0xC78, 0x41690001,
- 0xC78, 0x406A0001,
- 0xC78, 0x266B0001,
- 0xC78, 0x256C0001,
- 0xC78, 0x246D0001,
- 0xC78, 0x236E0001,
- 0xC78, 0x226F0001,
- 0xC78, 0x21700001,
- 0xC78, 0x20710001,
- 0xC78, 0x06720001,
- 0xC78, 0x05730001,
- 0xC78, 0x04740001,
- 0xC78, 0x03750001,
- 0xC78, 0x02760001,
- 0xC78, 0x01770001,
- 0xC78, 0x00780001,
- 0xC78, 0x00790001,
- 0xC78, 0x007A0001,
- 0xC78, 0x007B0001,
- 0xC78, 0x007C0001,
- 0xC78, 0x007D0001,
- 0xC78, 0x007E0001,
- 0xC78, 0x007F0001,
- 0xC78, 0x3800001E,
- 0xC78, 0x3801001E,
- 0xC78, 0x3802001E,
- 0xC78, 0x3803001E,
- 0xC78, 0x3804001E,
- 0xC78, 0x3805001E,
- 0xC78, 0x3806001E,
- 0xC78, 0x3807001E,
- 0xC78, 0x3808001E,
- 0xC78, 0x3C09001E,
- 0xC78, 0x3E0A001E,
- 0xC78, 0x400B001E,
- 0xC78, 0x440C001E,
- 0xC78, 0x480D001E,
- 0xC78, 0x4C0E001E,
- 0xC78, 0x500F001E,
- 0xC78, 0x5210001E,
- 0xC78, 0x5611001E,
- 0xC78, 0x5A12001E,
- 0xC78, 0x5E13001E,
- 0xC78, 0x6014001E,
- 0xC78, 0x6015001E,
- 0xC78, 0x6016001E,
- 0xC78, 0x6217001E,
- 0xC78, 0x6218001E,
- 0xC78, 0x6219001E,
- 0xC78, 0x621A001E,
- 0xC78, 0x621B001E,
- 0xC78, 0x621C001E,
- 0xC78, 0x621D001E,
- 0xC78, 0x621E001E,
- 0xC78, 0x621F001E,
-
-};
-
-void
-ODM_ReadAndConfig_AGC_TAB_1T_8723A(
- IN PDM_ODM_T pDM_Odm
- )
-{
- #define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
-
- u4Byte hex = 0;
- u4Byte i = 0;
- u2Byte count = 0;
- pu4Byte ptr_array = NULL;
- u1Byte platform = pDM_Odm->SupportPlatform;
- u1Byte interfaceValue = pDM_Odm->SupportInterface;
- u1Byte board = pDM_Odm->BoardType;
- u4Byte ArrayLen = sizeof(Array_AGC_TAB_1T_8723A)/sizeof(u4Byte);
- pu4Byte Array = Array_AGC_TAB_1T_8723A;
-
-
- hex += board;
- hex += interfaceValue << 8;
- hex += platform << 16;
- hex += 0xFF000000;
- for (i = 0; i < ArrayLen; i += 2 )
- {
- u4Byte v1 = Array[i];
- u4Byte v2 = Array[i+1];
-
- // This (offset, data) pair meets the condition.
- if ( v1 < 0xCDCDCDCD )
- {
- odm_ConfigBB_AGC_8723A(pDM_Odm, v1, bMaskDWord, v2);
- continue;
- }
- else
- { // This line is the start line of branch.
- if ( !CheckCondition(Array[i], hex) )
- { // Discard the following (offset, data) pairs.
- READ_NEXT_PAIR(v1, v2, i);
- while (v2 != 0xDEAD &&
- v2 != 0xCDEF &&
- v2 != 0xCDCD && i < ArrayLen -2)
- {
- READ_NEXT_PAIR(v1, v2, i);
- }
- i -= 2; // prevent from for-loop += 2
- }
- else // Configure matched pairs and skip to end of if-else.
- {
- READ_NEXT_PAIR(v1, v2, i);
- while (v2 != 0xDEAD &&
- v2 != 0xCDEF &&
- v2 != 0xCDCD && i < ArrayLen -2)
- {
- odm_ConfigBB_AGC_8723A(pDM_Odm, v1, bMaskDWord, v2);
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- while (v2 != 0xDEAD && i < ArrayLen -2)
- {
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- }
- }
- }
-
-}
-
-
-/******************************************************************************
-* PHY_REG_1T.TXT
-******************************************************************************/
-
-u4Byte Array_PHY_REG_1T_8723A[] = {
- 0x800, 0x80040000,
- 0x804, 0x00000003,
- 0x808, 0x0000FC00,
- 0x80C, 0x0000000A,
- 0x810, 0x10001331,
- 0x814, 0x020C3D10,
- 0x818, 0x02200385,
- 0x81C, 0x00000000,
- 0x820, 0x01000100,
- 0x824, 0x00390004,
- 0x828, 0x00000000,
- 0x82C, 0x00000000,
- 0x830, 0x00000000,
- 0x834, 0x00000000,
- 0x838, 0x00000000,
- 0x83C, 0x00000000,
- 0x840, 0x00010000,
- 0x844, 0x00000000,
- 0x848, 0x00000000,
- 0x84C, 0x00000000,
- 0x850, 0x00000000,
- 0x854, 0x00000000,
- 0x858, 0x569A569A,
- 0x85C, 0x001B25A4,
- 0x860, 0x66F60110,
- 0x864, 0x061F0130,
- 0x868, 0x00000000,
- 0x86C, 0x32323200,
- 0x870, 0x07000760,
- 0x874, 0x22004000,
- 0x878, 0x00000808,
- 0x87C, 0x00000000,
- 0x880, 0xC0083070,
- 0x884, 0x000004D5,
- 0x888, 0x00000000,
- 0x88C, 0xCCC000C0,
- 0x890, 0x00000800,
- 0x894, 0xFFFFFFFE,
- 0x898, 0x40302010,
- 0x89C, 0x00706050,
- 0x900, 0x00000000,
- 0x904, 0x00000023,
- 0x908, 0x00000000,
- 0x90C, 0x81121111,
- 0xA00, 0x00D047C8,
- 0xA04, 0x80FF000C,
- 0xA08, 0x8C838300,
- 0xA0C, 0x2E68120F,
- 0xA10, 0x9500BB78,
- 0xA14, 0x11144028,
- 0xA18, 0x00881117,
- 0xA1C, 0x89140F00,
- 0xA20, 0x1A1B0000,
- 0xA24, 0x090E1317,
- 0xA28, 0x00000204,
- 0xA2C, 0x00D30000,
- 0xA70, 0x101FBF00,
- 0xA74, 0x00000007,
- 0xA78, 0x00000900,
- 0xC00, 0x48071D40,
- 0xC04, 0x03A05611,
- 0xC08, 0x000000E4,
- 0xC0C, 0x6C6C6C6C,
- 0xC10, 0x08800000,
- 0xC14, 0x40000100,
- 0xC18, 0x08800000,
- 0xC1C, 0x40000100,
- 0xC20, 0x00000000,
- 0xC24, 0x00000000,
- 0xC28, 0x00000000,
- 0xC2C, 0x00000000,
- 0xC30, 0x69E9AC44,
- 0xFF0F011F, 0xABCD,
- 0xC34, 0x469652CF,
- 0xCDCDCDCD, 0xCDCD,
- 0xC34, 0x469652AF,
- 0xFF0F011F, 0xDEAD,
- 0xC38, 0x49795994,
- 0xC3C, 0x0A97971C,
- 0xC40, 0x1F7C403F,
- 0xC44, 0x000100B7,
- 0xC48, 0xEC020107,
- 0xC4C, 0x007F037F,
- 0xC50, 0x69543420,
- 0xC54, 0x43BC0094,
- 0xC58, 0x69543420,
- 0xC5C, 0x433C0094,
- 0xC60, 0x00000000,
- 0xFF0F011F, 0xABCD,
- 0xC64, 0x7116848B,
- 0xCDCDCDCD, 0xCDCD,
- 0xC64, 0x7112848B,
- 0xFF0F011F, 0xDEAD,
- 0xC68, 0x47C00BFF,
- 0xC6C, 0x00000036,
- 0xC70, 0x2C7F000D,
- 0xC74, 0x018610DB,
- 0xC78, 0x0000001F,
- 0xC7C, 0x00B91612,
- 0xC80, 0x40000100,
- 0xC84, 0x20F60000,
- 0xC88, 0x40000100,
- 0xC8C, 0x20200000,
- 0xC90, 0x00121820,
- 0xC94, 0x00000000,
- 0xC98, 0x00121820,
- 0xC9C, 0x00007F7F,
- 0xCA0, 0x00000000,
- 0xCA4, 0x00000080,
- 0xCA8, 0x00000000,
- 0xCAC, 0x00000000,
- 0xCB0, 0x00000000,
- 0xCB4, 0x00000000,
- 0xCB8, 0x00000000,
- 0xCBC, 0x28000000,
- 0xCC0, 0x00000000,
- 0xCC4, 0x00000000,
- 0xCC8, 0x00000000,
- 0xCCC, 0x00000000,
- 0xCD0, 0x00000000,
- 0xCD4, 0x00000000,
- 0xCD8, 0x64B22427,
- 0xCDC, 0x00766932,
- 0xCE0, 0x00222222,
- 0xCE4, 0x00000000,
- 0xCE8, 0x37644302,
- 0xCEC, 0x2F97D40C,
- 0xD00, 0x00080740,
- 0xD04, 0x00020401,
- 0xD08, 0x0000907F,
- 0xD0C, 0x20010201,
- 0xD10, 0xA0633333,
- 0xD14, 0x3333BC43,
- 0xD18, 0x7A8F5B6B,
- 0xD2C, 0xCC979975,
- 0xD30, 0x00000000,
- 0xD34, 0x80608000,
- 0xD38, 0x00000000,
- 0xD3C, 0x00027293,
- 0xD40, 0x00000000,
- 0xD44, 0x00000000,
- 0xD48, 0x00000000,
- 0xD4C, 0x00000000,
- 0xD50, 0x6437140A,
- 0xD54, 0x00000000,
- 0xD58, 0x00000000,
- 0xD5C, 0x30032064,
- 0xD60, 0x4653DE68,
- 0xD64, 0x04518A3C,
- 0xD68, 0x00002101,
- 0xD6C, 0x2A201C16,
- 0xD70, 0x1812362E,
- 0xD74, 0x322C2220,
- 0xD78, 0x000E3C24,
- 0xE00, 0x2A2A2A2A,
- 0xE04, 0x2A2A2A2A,
- 0xE08, 0x03902A2A,
- 0xE10, 0x2A2A2A2A,
- 0xE14, 0x2A2A2A2A,
- 0xE18, 0x2A2A2A2A,
- 0xE1C, 0x2A2A2A2A,
- 0xE28, 0x00000000,
- 0xE30, 0x1000DC1F,
- 0xE34, 0x10008C1F,
- 0xE38, 0x02140102,
- 0xE3C, 0x681604C2,
- 0xE40, 0x01007C00,
- 0xE44, 0x01004800,
- 0xE48, 0xFB000000,
- 0xE4C, 0x000028D1,
- 0xE50, 0x1000DC1F,
- 0xE54, 0x10008C1F,
- 0xE58, 0x02140102,
- 0xE5C, 0x28160D05,
- 0xE60, 0x00000008,
- 0xE68, 0x001B25A4,
- 0xE6C, 0x631B25A0,
- 0xE70, 0x631B25A0,
- 0xE74, 0x081B25A0,
- 0xE78, 0x081B25A0,
- 0xE7C, 0x081B25A0,
- 0xE80, 0x081B25A0,
- 0xE84, 0x631B25A0,
- 0xE88, 0x081B25A0,
- 0xE8C, 0x631B25A0,
- 0xED0, 0x631B25A0,
- 0xED4, 0x631B25A0,
- 0xED8, 0x631B25A0,
- 0xEDC, 0x001B25A0,
- 0xEE0, 0x001B25A0,
- 0xEEC, 0x6B1B25A0,
- 0xF14, 0x00000003,
- 0xF4C, 0x00000000,
- 0xF00, 0x00000300,
-
-};
-
-void
-ODM_ReadAndConfig_PHY_REG_1T_8723A(
- IN PDM_ODM_T pDM_Odm
- )
-{
- #define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
-
- u4Byte hex = 0;
- u4Byte i = 0;
- u2Byte count = 0;
- pu4Byte ptr_array = NULL;
- u1Byte platform = pDM_Odm->SupportPlatform;
- u1Byte interfaceValue = pDM_Odm->SupportInterface;
- u1Byte board = pDM_Odm->BoardType;
- u4Byte ArrayLen = sizeof(Array_PHY_REG_1T_8723A)/sizeof(u4Byte);
- pu4Byte Array = Array_PHY_REG_1T_8723A;
-
-
- hex += board;
- hex += interfaceValue << 8;
- hex += platform << 16;
- hex += 0xFF000000;
- for (i = 0; i < ArrayLen; i += 2 )
- {
- u4Byte v1 = Array[i];
- u4Byte v2 = Array[i+1];
-
- // This (offset, data) pair meets the condition.
- if ( v1 < 0xCDCDCDCD )
- {
- odm_ConfigBB_PHY_8723A(pDM_Odm, v1, bMaskDWord, v2);
- continue;
- }
- else
- { // This line is the start line of branch.
- if ( !CheckCondition(Array[i], hex) )
- { // Discard the following (offset, data) pairs.
- READ_NEXT_PAIR(v1, v2, i);
- while (v2 != 0xDEAD &&
- v2 != 0xCDEF &&
- v2 != 0xCDCD && i < ArrayLen -2)
- {
- READ_NEXT_PAIR(v1, v2, i);
- }
- i -= 2; // prevent from for-loop += 2
- }
- else // Configure matched pairs and skip to end of if-else.
- {
- READ_NEXT_PAIR(v1, v2, i);
- while (v2 != 0xDEAD &&
- v2 != 0xCDEF &&
- v2 != 0xCDCD && i < ArrayLen -2)
- {
- odm_ConfigBB_PHY_8723A(pDM_Odm, v1, bMaskDWord, v2);
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- while (v2 != 0xDEAD && i < ArrayLen -2)
- {
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- }
- }
- }
-
-}
-
-
-/******************************************************************************
-* PHY_REG_MP.TXT
-******************************************************************************/
-
-u4Byte Array_PHY_REG_MP_8723A[] = {
- 0xC30, 0x69E9AC4A,
- 0xC3C, 0x0A979718,
-
-};
-
-void
-ODM_ReadAndConfig_PHY_REG_MP_8723A(
- IN PDM_ODM_T pDM_Odm
- )
-{
- #define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
-
- u4Byte hex = 0;
- u4Byte i = 0;
- u2Byte count = 0;
- pu4Byte ptr_array = NULL;
- u1Byte platform = pDM_Odm->SupportPlatform;
- u1Byte interfaceValue = pDM_Odm->SupportInterface;
- u1Byte board = pDM_Odm->BoardType;
- u4Byte ArrayLen = sizeof(Array_PHY_REG_MP_8723A)/sizeof(u4Byte);
- pu4Byte Array = Array_PHY_REG_MP_8723A;
-
-
- hex += board;
- hex += interfaceValue << 8;
- hex += platform << 16;
- hex += 0xFF000000;
- for (i = 0; i < ArrayLen; i += 2 )
- {
- u4Byte v1 = Array[i];
- u4Byte v2 = Array[i+1];
-
- // This (offset, data) pair meets the condition.
- if ( v1 < 0xCDCDCDCD )
- {
- odm_ConfigBB_PHY_8723A(pDM_Odm, v1, bMaskDWord, v2);
- continue;
- }
- else
- { // This line is the start line of branch.
- if ( !CheckCondition(Array[i], hex) )
- { // Discard the following (offset, data) pairs.
- READ_NEXT_PAIR(v1, v2, i);
- while (v2 != 0xDEAD &&
- v2 != 0xCDEF &&
- v2 != 0xCDCD && i < ArrayLen -2)
- {
- READ_NEXT_PAIR(v1, v2, i);
- }
- i -= 2; // prevent from for-loop += 2
- }
- else // Configure matched pairs and skip to end of if-else.
- {
- READ_NEXT_PAIR(v1, v2, i);
- while (v2 != 0xDEAD &&
- v2 != 0xCDEF &&
- v2 != 0xCDCD && i < ArrayLen -2)
- {
- odm_ConfigBB_PHY_8723A(pDM_Odm, v1, bMaskDWord, v2);
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- while (v2 != 0xDEAD && i < ArrayLen -2)
- {
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- }
- }
- }
-
-}
-
-
-/******************************************************************************
-* PHY_REG_PG.TXT
-******************************************************************************/
-
-u4Byte Array_PHY_REG_PG_8723A[] = {
- 0xE00, 0xFFFFFFFF, 0x0A0C0C0C,
- 0xE04, 0xFFFFFFFF, 0x02040608,
- 0xE08, 0x0000FF00, 0x00000000,
- 0x86C, 0xFFFFFF00, 0x00000000,
- 0xE10, 0xFFFFFFFF, 0x0A0C0D0E,
- 0xE14, 0xFFFFFFFF, 0x02040608,
- 0xE18, 0xFFFFFFFF, 0x0A0C0D0E,
- 0xE1C, 0xFFFFFFFF, 0x02040608,
- 0x830, 0xFFFFFFFF, 0x0A0C0C0C,
- 0x834, 0xFFFFFFFF, 0x02040608,
- 0x838, 0xFFFFFF00, 0x00000000,
- 0x86C, 0x000000FF, 0x00000000,
- 0x83C, 0xFFFFFFFF, 0x0A0C0D0E,
- 0x848, 0xFFFFFFFF, 0x02040608,
- 0x84C, 0xFFFFFFFF, 0x0A0C0D0E,
- 0x868, 0xFFFFFFFF, 0x02040608,
- 0xE00, 0xFFFFFFFF, 0x00000000,
- 0xE04, 0xFFFFFFFF, 0x00000000,
- 0xE08, 0x0000FF00, 0x00000000,
- 0x86C, 0xFFFFFF00, 0x00000000,
- 0xE10, 0xFFFFFFFF, 0x00000000,
- 0xE14, 0xFFFFFFFF, 0x00000000,
- 0xE18, 0xFFFFFFFF, 0x00000000,
- 0xE1C, 0xFFFFFFFF, 0x00000000,
- 0x830, 0xFFFFFFFF, 0x00000000,
- 0x834, 0xFFFFFFFF, 0x00000000,
- 0x838, 0xFFFFFF00, 0x00000000,
- 0x86C, 0x000000FF, 0x00000000,
- 0x83C, 0xFFFFFFFF, 0x00000000,
- 0x848, 0xFFFFFFFF, 0x00000000,
- 0x84C, 0xFFFFFFFF, 0x00000000,
- 0x868, 0xFFFFFFFF, 0x00000000,
- 0xE00, 0xFFFFFFFF, 0x04040404,
- 0xE04, 0xFFFFFFFF, 0x00020204,
- 0xE08, 0x0000FF00, 0x00000000,
- 0x86C, 0xFFFFFF00, 0x00000000,
- 0xE10, 0xFFFFFFFF, 0x06060606,
- 0xE14, 0xFFFFFFFF, 0x00020406,
- 0xE18, 0xFFFFFFFF, 0x00000000,
- 0xE1C, 0xFFFFFFFF, 0x00000000,
- 0x830, 0xFFFFFFFF, 0x04040404,
- 0x834, 0xFFFFFFFF, 0x00020204,
- 0x838, 0xFFFFFF00, 0x00000000,
- 0x86C, 0x000000FF, 0x00000000,
- 0x83C, 0xFFFFFFFF, 0x06060606,
- 0x848, 0xFFFFFFFF, 0x00020406,
- 0x84C, 0xFFFFFFFF, 0x00000000,
- 0x868, 0xFFFFFFFF, 0x00000000,
- 0xE00, 0xFFFFFFFF, 0x00000000,
- 0xE04, 0xFFFFFFFF, 0x00000000,
- 0xE08, 0x0000FF00, 0x00000000,
- 0x86C, 0xFFFFFF00, 0x00000000,
- 0xE10, 0xFFFFFFFF, 0x00000000,
- 0xE14, 0xFFFFFFFF, 0x00000000,
- 0xE18, 0xFFFFFFFF, 0x00000000,
- 0xE1C, 0xFFFFFFFF, 0x00000000,
- 0x830, 0xFFFFFFFF, 0x00000000,
- 0x834, 0xFFFFFFFF, 0x00000000,
- 0x838, 0xFFFFFF00, 0x00000000,
- 0x86C, 0x000000FF, 0x00000000,
- 0x83C, 0xFFFFFFFF, 0x00000000,
- 0x848, 0xFFFFFFFF, 0x00000000,
- 0x84C, 0xFFFFFFFF, 0x00000000,
- 0x868, 0xFFFFFFFF, 0x00000000,
- 0xE00, 0xFFFFFFFF, 0x00000000,
- 0xE04, 0xFFFFFFFF, 0x00000000,
- 0xE08, 0x0000FF00, 0x00000000,
- 0x86C, 0xFFFFFF00, 0x00000000,
- 0xE10, 0xFFFFFFFF, 0x00000000,
- 0xE14, 0xFFFFFFFF, 0x00000000,
- 0xE18, 0xFFFFFFFF, 0x00000000,
- 0xE1C, 0xFFFFFFFF, 0x00000000,
- 0x830, 0xFFFFFFFF, 0x00000000,
- 0x834, 0xFFFFFFFF, 0x00000000,
- 0x838, 0xFFFFFF00, 0x00000000,
- 0x86C, 0x000000FF, 0x00000000,
- 0x83C, 0xFFFFFFFF, 0x00000000,
- 0x848, 0xFFFFFFFF, 0x00000000,
- 0x84C, 0xFFFFFFFF, 0x00000000,
- 0x868, 0xFFFFFFFF, 0x00000000,
- 0xE00, 0xFFFFFFFF, 0x04040404,
- 0xE04, 0xFFFFFFFF, 0x00020204,
- 0xE08, 0x0000FF00, 0x00000000,
- 0x86C, 0xFFFFFF00, 0x00000000,
- 0xE10, 0xFFFFFFFF, 0x00000000,
- 0xE14, 0xFFFFFFFF, 0x00000000,
- 0xE18, 0xFFFFFFFF, 0x00000000,
- 0xE1C, 0xFFFFFFFF, 0x00000000,
- 0x830, 0xFFFFFFFF, 0x04040404,
- 0x834, 0xFFFFFFFF, 0x00020204,
- 0x838, 0xFFFFFF00, 0x00000000,
- 0x86C, 0x000000FF, 0x00000000,
- 0x83C, 0xFFFFFFFF, 0x00000000,
- 0x848, 0xFFFFFFFF, 0x00000000,
- 0x84C, 0xFFFFFFFF, 0x00000000,
- 0x868, 0xFFFFFFFF, 0x00000000,
- 0xE00, 0xFFFFFFFF, 0x00000000,
- 0xE04, 0xFFFFFFFF, 0x00000000,
- 0xE08, 0x0000FF00, 0x00000000,
- 0x86C, 0xFFFFFF00, 0x00000000,
- 0xE10, 0xFFFFFFFF, 0x00000000,
- 0xE14, 0xFFFFFFFF, 0x00000000,
- 0xE18, 0xFFFFFFFF, 0x00000000,
- 0xE1C, 0xFFFFFFFF, 0x00000000,
- 0x830, 0xFFFFFFFF, 0x00000000,
- 0x834, 0xFFFFFFFF, 0x00000000,
- 0x838, 0xFFFFFF00, 0x00000000,
- 0x86C, 0x000000FF, 0x00000000,
- 0x83C, 0xFFFFFFFF, 0x00000000,
- 0x848, 0xFFFFFFFF, 0x00000000,
- 0x84C, 0xFFFFFFFF, 0x00000000,
- 0x868, 0xFFFFFFFF, 0x00000000,
-
-};
-
-void
-ODM_ReadAndConfig_PHY_REG_PG_8723A(
- IN PDM_ODM_T pDM_Odm
- )
-{
- u4Byte hex = 0;
- u4Byte i = 0;
- u2Byte count = 0;
- pu4Byte ptr_array = NULL;
- u1Byte platform = pDM_Odm->SupportPlatform;
- u1Byte interfaceValue = pDM_Odm->SupportInterface;
- u1Byte board = pDM_Odm->BoardType;
- u4Byte ArrayLen = sizeof(Array_PHY_REG_PG_8723A)/sizeof(u4Byte);
- pu4Byte Array = Array_PHY_REG_PG_8723A;
-
- hex += board;
- hex += interfaceValue << 8;
- hex += platform << 16;
- hex += 0xFF000000;
- for (i = 0; i < ArrayLen; i += 3 )
- {
- u4Byte v1 = Array[i];
- u4Byte v2 = Array[i+1];
- u4Byte v3 = Array[i+2];
-
- // this line is a line of pure_body
- if ( v1 < 0xCDCDCDCD )
- {
- odm_ConfigBB_PHY_REG_PG_8723A(pDM_Odm, v1, v2, v3);
- continue;
- }
- else
- { // this line is the start of branch
- if ( !CheckCondition(Array[i], hex) )
- { // don't need the hw_body
- i += 2; // skip the pair of expression
- v1 = Array[i];
- v2 = Array[i+1];
- v3 = Array[i+2];
- while (v2 != 0xDEAD)
- {
- i += 3;
- v1 = Array[i];
- v2 = Array[i+1];
- v3 = Array[i+1];
- }
- }
- }
- }
-}
-
-
-#endif // end of HWIMG_SUPPORT
-
+/******************************************************************************
+*
+* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of version 2 of the GNU General Public License as
+* published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program; if not, write to the Free Software Foundation, Inc.,
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+*
+*
+******************************************************************************/
+
+#include "../odm_precomp.h"
+
+#if (RTL8723A_SUPPORT == 1)
+static BOOLEAN
+CheckCondition(
+ const u4Byte Condition,
+ const u4Byte Hex
+ )
+{
+ u4Byte _board = (Hex & 0x000000FF);
+ u4Byte _interface = (Hex & 0x0000FF00) >> 8;
+ u4Byte _platform = (Hex & 0x00FF0000) >> 16;
+ u4Byte cond = Condition;
+
+ if ( Condition == 0xCDCDCDCD )
+ return TRUE;
+
+ cond = Condition & 0x000000FF;
+ if ( (_board == cond) && cond != 0x00)
+ return FALSE;
+
+ cond = Condition & 0x0000FF00;
+ cond = cond >> 8;
+ if ( (_interface & cond) == 0 && cond != 0x07)
+ return FALSE;
+
+ cond = Condition & 0x00FF0000;
+ cond = cond >> 16;
+ if ( (_platform & cond) == 0 && cond != 0x0F)
+ return FALSE;
+ return TRUE;
+}
+
+
+/******************************************************************************
+* AGC_TAB_1T.TXT
+******************************************************************************/
+
+u4Byte Array_AGC_TAB_1T_8723A[] = {
+ 0xC78, 0x7B000001,
+ 0xC78, 0x7B010001,
+ 0xC78, 0x7B020001,
+ 0xC78, 0x7B030001,
+ 0xC78, 0x7B040001,
+ 0xC78, 0x7B050001,
+ 0xC78, 0x7A060001,
+ 0xC78, 0x79070001,
+ 0xC78, 0x78080001,
+ 0xC78, 0x77090001,
+ 0xC78, 0x760A0001,
+ 0xC78, 0x750B0001,
+ 0xC78, 0x740C0001,
+ 0xC78, 0x730D0001,
+ 0xC78, 0x720E0001,
+ 0xC78, 0x710F0001,
+ 0xC78, 0x70100001,
+ 0xC78, 0x6F110001,
+ 0xC78, 0x6E120001,
+ 0xC78, 0x6D130001,
+ 0xC78, 0x6C140001,
+ 0xC78, 0x6B150001,
+ 0xC78, 0x6A160001,
+ 0xC78, 0x69170001,
+ 0xC78, 0x68180001,
+ 0xC78, 0x67190001,
+ 0xC78, 0x661A0001,
+ 0xC78, 0x651B0001,
+ 0xC78, 0x641C0001,
+ 0xC78, 0x631D0001,
+ 0xC78, 0x621E0001,
+ 0xC78, 0x611F0001,
+ 0xC78, 0x60200001,
+ 0xC78, 0x49210001,
+ 0xC78, 0x48220001,
+ 0xC78, 0x47230001,
+ 0xC78, 0x46240001,
+ 0xC78, 0x45250001,
+ 0xC78, 0x44260001,
+ 0xC78, 0x43270001,
+ 0xC78, 0x42280001,
+ 0xC78, 0x41290001,
+ 0xC78, 0x402A0001,
+ 0xC78, 0x262B0001,
+ 0xC78, 0x252C0001,
+ 0xC78, 0x242D0001,
+ 0xC78, 0x232E0001,
+ 0xC78, 0x222F0001,
+ 0xC78, 0x21300001,
+ 0xC78, 0x20310001,
+ 0xC78, 0x06320001,
+ 0xC78, 0x05330001,
+ 0xC78, 0x04340001,
+ 0xC78, 0x03350001,
+ 0xC78, 0x02360001,
+ 0xC78, 0x01370001,
+ 0xC78, 0x00380001,
+ 0xC78, 0x00390001,
+ 0xC78, 0x003A0001,
+ 0xC78, 0x003B0001,
+ 0xC78, 0x003C0001,
+ 0xC78, 0x003D0001,
+ 0xC78, 0x003E0001,
+ 0xC78, 0x003F0001,
+ 0xC78, 0x7B400001,
+ 0xC78, 0x7B410001,
+ 0xC78, 0x7B420001,
+ 0xC78, 0x7B430001,
+ 0xC78, 0x7B440001,
+ 0xC78, 0x7B450001,
+ 0xC78, 0x7A460001,
+ 0xC78, 0x79470001,
+ 0xC78, 0x78480001,
+ 0xC78, 0x77490001,
+ 0xC78, 0x764A0001,
+ 0xC78, 0x754B0001,
+ 0xC78, 0x744C0001,
+ 0xC78, 0x734D0001,
+ 0xC78, 0x724E0001,
+ 0xC78, 0x714F0001,
+ 0xC78, 0x70500001,
+ 0xC78, 0x6F510001,
+ 0xC78, 0x6E520001,
+ 0xC78, 0x6D530001,
+ 0xC78, 0x6C540001,
+ 0xC78, 0x6B550001,
+ 0xC78, 0x6A560001,
+ 0xC78, 0x69570001,
+ 0xC78, 0x68580001,
+ 0xC78, 0x67590001,
+ 0xC78, 0x665A0001,
+ 0xC78, 0x655B0001,
+ 0xC78, 0x645C0001,
+ 0xC78, 0x635D0001,
+ 0xC78, 0x625E0001,
+ 0xC78, 0x615F0001,
+ 0xC78, 0x60600001,
+ 0xC78, 0x49610001,
+ 0xC78, 0x48620001,
+ 0xC78, 0x47630001,
+ 0xC78, 0x46640001,
+ 0xC78, 0x45650001,
+ 0xC78, 0x44660001,
+ 0xC78, 0x43670001,
+ 0xC78, 0x42680001,
+ 0xC78, 0x41690001,
+ 0xC78, 0x406A0001,
+ 0xC78, 0x266B0001,
+ 0xC78, 0x256C0001,
+ 0xC78, 0x246D0001,
+ 0xC78, 0x236E0001,
+ 0xC78, 0x226F0001,
+ 0xC78, 0x21700001,
+ 0xC78, 0x20710001,
+ 0xC78, 0x06720001,
+ 0xC78, 0x05730001,
+ 0xC78, 0x04740001,
+ 0xC78, 0x03750001,
+ 0xC78, 0x02760001,
+ 0xC78, 0x01770001,
+ 0xC78, 0x00780001,
+ 0xC78, 0x00790001,
+ 0xC78, 0x007A0001,
+ 0xC78, 0x007B0001,
+ 0xC78, 0x007C0001,
+ 0xC78, 0x007D0001,
+ 0xC78, 0x007E0001,
+ 0xC78, 0x007F0001,
+ 0xC78, 0x3800001E,
+ 0xC78, 0x3801001E,
+ 0xC78, 0x3802001E,
+ 0xC78, 0x3803001E,
+ 0xC78, 0x3804001E,
+ 0xC78, 0x3805001E,
+ 0xC78, 0x3806001E,
+ 0xC78, 0x3807001E,
+ 0xC78, 0x3808001E,
+ 0xC78, 0x3C09001E,
+ 0xC78, 0x3E0A001E,
+ 0xC78, 0x400B001E,
+ 0xC78, 0x440C001E,
+ 0xC78, 0x480D001E,
+ 0xC78, 0x4C0E001E,
+ 0xC78, 0x500F001E,
+ 0xC78, 0x5210001E,
+ 0xC78, 0x5611001E,
+ 0xC78, 0x5A12001E,
+ 0xC78, 0x5E13001E,
+ 0xC78, 0x6014001E,
+ 0xC78, 0x6015001E,
+ 0xC78, 0x6016001E,
+ 0xC78, 0x6217001E,
+ 0xC78, 0x6218001E,
+ 0xC78, 0x6219001E,
+ 0xC78, 0x621A001E,
+ 0xC78, 0x621B001E,
+ 0xC78, 0x621C001E,
+ 0xC78, 0x621D001E,
+ 0xC78, 0x621E001E,
+ 0xC78, 0x621F001E,
+
+};
+
+void
+ODM_ReadAndConfig_AGC_TAB_1T_8723A(
+ IN PDM_ODM_T pDM_Odm
+ )
+{
+ #define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
+
+ u4Byte hex = 0;
+ u4Byte i = 0;
+ u2Byte count = 0;
+ pu4Byte ptr_array = NULL;
+ u1Byte platform = pDM_Odm->SupportPlatform;
+ u1Byte interfaceValue = pDM_Odm->SupportInterface;
+ u1Byte board = pDM_Odm->BoardType;
+ u4Byte ArrayLen = sizeof(Array_AGC_TAB_1T_8723A)/sizeof(u4Byte);
+ pu4Byte Array = Array_AGC_TAB_1T_8723A;
+
+
+ hex += board;
+ hex += interfaceValue << 8;
+ hex += platform << 16;
+ hex += 0xFF000000;
+ for (i = 0; i < ArrayLen; i += 2 )
+ {
+ u4Byte v1 = Array[i];
+ u4Byte v2 = Array[i+1];
+
+ // This (offset, data) pair meets the condition.
+ if ( v1 < 0xCDCDCDCD )
+ {
+ odm_ConfigBB_AGC_8723A(pDM_Odm, v1, bMaskDWord, v2);
+ continue;
+ }
+ else
+ { // This line is the start line of branch.
+ if ( !CheckCondition(Array[i], hex) )
+ { // Discard the following (offset, data) pairs.
+ READ_NEXT_PAIR(v1, v2, i);
+ while (v2 != 0xDEAD &&
+ v2 != 0xCDEF &&
+ v2 != 0xCDCD && i < ArrayLen -2)
+ {
+ READ_NEXT_PAIR(v1, v2, i);
+ }
+ i -= 2; // prevent from for-loop += 2
+ }
+ else // Configure matched pairs and skip to end of if-else.
+ {
+ READ_NEXT_PAIR(v1, v2, i);
+ while (v2 != 0xDEAD &&
+ v2 != 0xCDEF &&
+ v2 != 0xCDCD && i < ArrayLen -2)
+ {
+ odm_ConfigBB_AGC_8723A(pDM_Odm, v1, bMaskDWord, v2);
+ READ_NEXT_PAIR(v1, v2, i);
+ }
+
+ while (v2 != 0xDEAD && i < ArrayLen -2)
+ {
+ READ_NEXT_PAIR(v1, v2, i);
+ }
+
+ }
+ }
+ }
+
+}
+
+
+/******************************************************************************
+* PHY_REG_1T.TXT
+******************************************************************************/
+
+u4Byte Array_PHY_REG_1T_8723A[] = {
+ 0x800, 0x80040000,
+ 0x804, 0x00000003,
+ 0x808, 0x0000FC00,
+ 0x80C, 0x0000000A,
+ 0x810, 0x10001331,
+ 0x814, 0x020C3D10,
+ 0x818, 0x02200385,
+ 0x81C, 0x00000000,
+ 0x820, 0x01000100,
+ 0x824, 0x00390004,
+ 0x828, 0x00000000,
+ 0x82C, 0x00000000,
+ 0x830, 0x00000000,
+ 0x834, 0x00000000,
+ 0x838, 0x00000000,
+ 0x83C, 0x00000000,
+ 0x840, 0x00010000,
+ 0x844, 0x00000000,
+ 0x848, 0x00000000,
+ 0x84C, 0x00000000,
+ 0x850, 0x00000000,
+ 0x854, 0x00000000,
+ 0x858, 0x569A569A,
+ 0x85C, 0x001B25A4,
+ 0x860, 0x66F60110,
+ 0x864, 0x061F0130,
+ 0x868, 0x00000000,
+ 0x86C, 0x32323200,
+ 0x870, 0x07000760,
+ 0x874, 0x22004000,
+ 0x878, 0x00000808,
+ 0x87C, 0x00000000,
+ 0x880, 0xC0083070,
+ 0x884, 0x000004D5,
+ 0x888, 0x00000000,
+ 0x88C, 0xCCC000C0,
+ 0x890, 0x00000800,
+ 0x894, 0xFFFFFFFE,
+ 0x898, 0x40302010,
+ 0x89C, 0x00706050,
+ 0x900, 0x00000000,
+ 0x904, 0x00000023,
+ 0x908, 0x00000000,
+ 0x90C, 0x81121111,
+ 0xA00, 0x00D047C8,
+ 0xA04, 0x80FF000C,
+ 0xA08, 0x8C838300,
+ 0xA0C, 0x2E68120F,
+ 0xA10, 0x9500BB78,
+ 0xA14, 0x11144028,
+ 0xA18, 0x00881117,
+ 0xA1C, 0x89140F00,
+ 0xA20, 0x1A1B0000,
+ 0xA24, 0x090E1317,
+ 0xA28, 0x00000204,
+ 0xA2C, 0x00D30000,
+ 0xA70, 0x101FBF00,
+ 0xA74, 0x00000007,
+ 0xA78, 0x00000900,
+ 0xC00, 0x48071D40,
+ 0xC04, 0x03A05611,
+ 0xC08, 0x000000E4,
+ 0xC0C, 0x6C6C6C6C,
+ 0xC10, 0x08800000,
+ 0xC14, 0x40000100,
+ 0xC18, 0x08800000,
+ 0xC1C, 0x40000100,
+ 0xC20, 0x00000000,
+ 0xC24, 0x00000000,
+ 0xC28, 0x00000000,
+ 0xC2C, 0x00000000,
+ 0xC30, 0x69E9AC44,
+ 0xFF0F011F, 0xABCD,
+ 0xC34, 0x469652CF,
+ 0xCDCDCDCD, 0xCDCD,
+ 0xC34, 0x469652AF,
+ 0xFF0F011F, 0xDEAD,
+ 0xC38, 0x49795994,
+ 0xC3C, 0x0A97971C,
+ 0xC40, 0x1F7C403F,
+ 0xC44, 0x000100B7,
+ 0xC48, 0xEC020107,
+ 0xC4C, 0x007F037F,
+ 0xC50, 0x69543420,
+ 0xC54, 0x43BC0094,
+ 0xC58, 0x69543420,
+ 0xC5C, 0x433C0094,
+ 0xC60, 0x00000000,
+ 0xFF0F011F, 0xABCD,
+ 0xC64, 0x7116848B,
+ 0xCDCDCDCD, 0xCDCD,
+ 0xC64, 0x7112848B,
+ 0xFF0F011F, 0xDEAD,
+ 0xC68, 0x47C00BFF,
+ 0xC6C, 0x00000036,
+ 0xC70, 0x2C7F000D,
+ 0xC74, 0x018610DB,
+ 0xC78, 0x0000001F,
+ 0xC7C, 0x00B91612,
+ 0xC80, 0x40000100,
+ 0xC84, 0x20F60000,
+ 0xC88, 0x40000100,
+ 0xC8C, 0x20200000,
+ 0xC90, 0x00121820,
+ 0xC94, 0x00000000,
+ 0xC98, 0x00121820,
+ 0xC9C, 0x00007F7F,
+ 0xCA0, 0x00000000,
+ 0xCA4, 0x00000080,
+ 0xCA8, 0x00000000,
+ 0xCAC, 0x00000000,
+ 0xCB0, 0x00000000,
+ 0xCB4, 0x00000000,
+ 0xCB8, 0x00000000,
+ 0xCBC, 0x28000000,
+ 0xCC0, 0x00000000,
+ 0xCC4, 0x00000000,
+ 0xCC8, 0x00000000,
+ 0xCCC, 0x00000000,
+ 0xCD0, 0x00000000,
+ 0xCD4, 0x00000000,
+ 0xCD8, 0x64B22427,
+ 0xCDC, 0x00766932,
+ 0xCE0, 0x00222222,
+ 0xCE4, 0x00000000,
+ 0xCE8, 0x37644302,
+ 0xCEC, 0x2F97D40C,
+ 0xD00, 0x00080740,
+ 0xD04, 0x00020401,
+ 0xD08, 0x0000907F,
+ 0xD0C, 0x20010201,
+ 0xD10, 0xA0633333,
+ 0xD14, 0x3333BC43,
+ 0xD18, 0x7A8F5B6B,
+ 0xD2C, 0xCC979975,
+ 0xD30, 0x00000000,
+ 0xD34, 0x80608000,
+ 0xD38, 0x00000000,
+ 0xD3C, 0x00027293,
+ 0xD40, 0x00000000,
+ 0xD44, 0x00000000,
+ 0xD48, 0x00000000,
+ 0xD4C, 0x00000000,
+ 0xD50, 0x6437140A,
+ 0xD54, 0x00000000,
+ 0xD58, 0x00000000,
+ 0xD5C, 0x30032064,
+ 0xD60, 0x4653DE68,
+ 0xD64, 0x04518A3C,
+ 0xD68, 0x00002101,
+ 0xD6C, 0x2A201C16,
+ 0xD70, 0x1812362E,
+ 0xD74, 0x322C2220,
+ 0xD78, 0x000E3C24,
+ 0xE00, 0x2A2A2A2A,
+ 0xE04, 0x2A2A2A2A,
+ 0xE08, 0x03902A2A,
+ 0xE10, 0x2A2A2A2A,
+ 0xE14, 0x2A2A2A2A,
+ 0xE18, 0x2A2A2A2A,
+ 0xE1C, 0x2A2A2A2A,
+ 0xE28, 0x00000000,
+ 0xE30, 0x1000DC1F,
+ 0xE34, 0x10008C1F,
+ 0xE38, 0x02140102,
+ 0xE3C, 0x681604C2,
+ 0xE40, 0x01007C00,
+ 0xE44, 0x01004800,
+ 0xE48, 0xFB000000,
+ 0xE4C, 0x000028D1,
+ 0xE50, 0x1000DC1F,
+ 0xE54, 0x10008C1F,
+ 0xE58, 0x02140102,
+ 0xE5C, 0x28160D05,
+ 0xE60, 0x00000008,
+ 0xE68, 0x001B25A4,
+ 0xE6C, 0x631B25A0,
+ 0xE70, 0x631B25A0,
+ 0xE74, 0x081B25A0,
+ 0xE78, 0x081B25A0,
+ 0xE7C, 0x081B25A0,
+ 0xE80, 0x081B25A0,
+ 0xE84, 0x631B25A0,
+ 0xE88, 0x081B25A0,
+ 0xE8C, 0x631B25A0,
+ 0xED0, 0x631B25A0,
+ 0xED4, 0x631B25A0,
+ 0xED8, 0x631B25A0,
+ 0xEDC, 0x001B25A0,
+ 0xEE0, 0x001B25A0,
+ 0xEEC, 0x6B1B25A0,
+ 0xF14, 0x00000003,
+ 0xF4C, 0x00000000,
+ 0xF00, 0x00000300,
+
+};
+
+void
+ODM_ReadAndConfig_PHY_REG_1T_8723A(
+ IN PDM_ODM_T pDM_Odm
+ )
+{
+ #define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
+
+ u4Byte hex = 0;
+ u4Byte i = 0;
+ u2Byte count = 0;
+ pu4Byte ptr_array = NULL;
+ u1Byte platform = pDM_Odm->SupportPlatform;
+ u1Byte interfaceValue = pDM_Odm->SupportInterface;
+ u1Byte board = pDM_Odm->BoardType;
+ u4Byte ArrayLen = sizeof(Array_PHY_REG_1T_8723A)/sizeof(u4Byte);
+ pu4Byte Array = Array_PHY_REG_1T_8723A;
+
+
+ hex += board;
+ hex += interfaceValue << 8;
+ hex += platform << 16;
+ hex += 0xFF000000;
+ for (i = 0; i < ArrayLen; i += 2 )
+ {
+ u4Byte v1 = Array[i];
+ u4Byte v2 = Array[i+1];
+
+ // This (offset, data) pair meets the condition.
+ if ( v1 < 0xCDCDCDCD )
+ {
+ odm_ConfigBB_PHY_8723A(pDM_Odm, v1, bMaskDWord, v2);
+ continue;
+ }
+ else
+ { // This line is the start line of branch.
+ if ( !CheckCondition(Array[i], hex) )
+ { // Discard the following (offset, data) pairs.
+ READ_NEXT_PAIR(v1, v2, i);
+ while (v2 != 0xDEAD &&
+ v2 != 0xCDEF &&
+ v2 != 0xCDCD && i < ArrayLen -2)
+ {
+ READ_NEXT_PAIR(v1, v2, i);
+ }
+ i -= 2; // prevent from for-loop += 2
+ }
+ else // Configure matched pairs and skip to end of if-else.
+ {
+ READ_NEXT_PAIR(v1, v2, i);
+ while (v2 != 0xDEAD &&
+ v2 != 0xCDEF &&
+ v2 != 0xCDCD && i < ArrayLen -2)
+ {
+ odm_ConfigBB_PHY_8723A(pDM_Odm, v1, bMaskDWord, v2);
+ READ_NEXT_PAIR(v1, v2, i);
+ }
+
+ while (v2 != 0xDEAD && i < ArrayLen -2)
+ {
+ READ_NEXT_PAIR(v1, v2, i);
+ }
+
+ }
+ }
+ }
+
+}
+
+
+/******************************************************************************
+* PHY_REG_MP.TXT
+******************************************************************************/
+
+u4Byte Array_PHY_REG_MP_8723A[] = {
+ 0xC30, 0x69E9AC4A,
+ 0xC3C, 0x0A979718,
+
+};
+
+void
+ODM_ReadAndConfig_PHY_REG_MP_8723A(
+ IN PDM_ODM_T pDM_Odm
+ )
+{
+ #define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
+
+ u4Byte hex = 0;
+ u4Byte i = 0;
+ u2Byte count = 0;
+ pu4Byte ptr_array = NULL;
+ u1Byte platform = pDM_Odm->SupportPlatform;
+ u1Byte interfaceValue = pDM_Odm->SupportInterface;
+ u1Byte board = pDM_Odm->BoardType;
+ u4Byte ArrayLen = sizeof(Array_PHY_REG_MP_8723A)/sizeof(u4Byte);
+ pu4Byte Array = Array_PHY_REG_MP_8723A;
+
+
+ hex += board;
+ hex += interfaceValue << 8;
+ hex += platform << 16;
+ hex += 0xFF000000;
+ for (i = 0; i < ArrayLen; i += 2 )
+ {
+ u4Byte v1 = Array[i];
+ u4Byte v2 = Array[i+1];
+
+ // This (offset, data) pair meets the condition.
+ if ( v1 < 0xCDCDCDCD )
+ {
+ odm_ConfigBB_PHY_8723A(pDM_Odm, v1, bMaskDWord, v2);
+ continue;
+ }
+ else
+ { // This line is the start line of branch.
+ if ( !CheckCondition(Array[i], hex) )
+ { // Discard the following (offset, data) pairs.
+ READ_NEXT_PAIR(v1, v2, i);
+ while (v2 != 0xDEAD &&
+ v2 != 0xCDEF &&
+ v2 != 0xCDCD && i < ArrayLen -2)
+ {
+ READ_NEXT_PAIR(v1, v2, i);
+ }
+ i -= 2; // prevent from for-loop += 2
+ }
+ else // Configure matched pairs and skip to end of if-else.
+ {
+ READ_NEXT_PAIR(v1, v2, i);
+ while (v2 != 0xDEAD &&
+ v2 != 0xCDEF &&
+ v2 != 0xCDCD && i < ArrayLen -2)
+ {
+ odm_ConfigBB_PHY_8723A(pDM_Odm, v1, bMaskDWord, v2);
+ READ_NEXT_PAIR(v1, v2, i);
+ }
+
+ while (v2 != 0xDEAD && i < ArrayLen -2)
+ {
+ READ_NEXT_PAIR(v1, v2, i);
+ }
+
+ }
+ }
+ }
+
+}
+
+
+/******************************************************************************
+* PHY_REG_PG.TXT
+******************************************************************************/
+
+u4Byte Array_PHY_REG_PG_8723A[] = {
+ 0xE00, 0xFFFFFFFF, 0x0A0C0C0C,
+ 0xE04, 0xFFFFFFFF, 0x02040608,
+ 0xE08, 0x0000FF00, 0x00000000,
+ 0x86C, 0xFFFFFF00, 0x00000000,
+ 0xE10, 0xFFFFFFFF, 0x0A0C0D0E,
+ 0xE14, 0xFFFFFFFF, 0x02040608,
+ 0xE18, 0xFFFFFFFF, 0x0A0C0D0E,
+ 0xE1C, 0xFFFFFFFF, 0x02040608,
+ 0x830, 0xFFFFFFFF, 0x0A0C0C0C,
+ 0x834, 0xFFFFFFFF, 0x02040608,
+ 0x838, 0xFFFFFF00, 0x00000000,
+ 0x86C, 0x000000FF, 0x00000000,
+ 0x83C, 0xFFFFFFFF, 0x0A0C0D0E,
+ 0x848, 0xFFFFFFFF, 0x02040608,
+ 0x84C, 0xFFFFFFFF, 0x0A0C0D0E,
+ 0x868, 0xFFFFFFFF, 0x02040608,
+ 0xE00, 0xFFFFFFFF, 0x00000000,
+ 0xE04, 0xFFFFFFFF, 0x00000000,
+ 0xE08, 0x0000FF00, 0x00000000,
+ 0x86C, 0xFFFFFF00, 0x00000000,
+ 0xE10, 0xFFFFFFFF, 0x00000000,
+ 0xE14, 0xFFFFFFFF, 0x00000000,
+ 0xE18, 0xFFFFFFFF, 0x00000000,
+ 0xE1C, 0xFFFFFFFF, 0x00000000,
+ 0x830, 0xFFFFFFFF, 0x00000000,
+ 0x834, 0xFFFFFFFF, 0x00000000,
+ 0x838, 0xFFFFFF00, 0x00000000,
+ 0x86C, 0x000000FF, 0x00000000,
+ 0x83C, 0xFFFFFFFF, 0x00000000,
+ 0x848, 0xFFFFFFFF, 0x00000000,
+ 0x84C, 0xFFFFFFFF, 0x00000000,
+ 0x868, 0xFFFFFFFF, 0x00000000,
+ 0xE00, 0xFFFFFFFF, 0x04040404,
+ 0xE04, 0xFFFFFFFF, 0x00020204,
+ 0xE08, 0x0000FF00, 0x00000000,
+ 0x86C, 0xFFFFFF00, 0x00000000,
+ 0xE10, 0xFFFFFFFF, 0x06060606,
+ 0xE14, 0xFFFFFFFF, 0x00020406,
+ 0xE18, 0xFFFFFFFF, 0x00000000,
+ 0xE1C, 0xFFFFFFFF, 0x00000000,
+ 0x830, 0xFFFFFFFF, 0x04040404,
+ 0x834, 0xFFFFFFFF, 0x00020204,
+ 0x838, 0xFFFFFF00, 0x00000000,
+ 0x86C, 0x000000FF, 0x00000000,
+ 0x83C, 0xFFFFFFFF, 0x06060606,
+ 0x848, 0xFFFFFFFF, 0x00020406,
+ 0x84C, 0xFFFFFFFF, 0x00000000,
+ 0x868, 0xFFFFFFFF, 0x00000000,
+ 0xE00, 0xFFFFFFFF, 0x00000000,
+ 0xE04, 0xFFFFFFFF, 0x00000000,
+ 0xE08, 0x0000FF00, 0x00000000,
+ 0x86C, 0xFFFFFF00, 0x00000000,
+ 0xE10, 0xFFFFFFFF, 0x00000000,
+ 0xE14, 0xFFFFFFFF, 0x00000000,
+ 0xE18, 0xFFFFFFFF, 0x00000000,
+ 0xE1C, 0xFFFFFFFF, 0x00000000,
+ 0x830, 0xFFFFFFFF, 0x00000000,
+ 0x834, 0xFFFFFFFF, 0x00000000,
+ 0x838, 0xFFFFFF00, 0x00000000,
+ 0x86C, 0x000000FF, 0x00000000,
+ 0x83C, 0xFFFFFFFF, 0x00000000,
+ 0x848, 0xFFFFFFFF, 0x00000000,
+ 0x84C, 0xFFFFFFFF, 0x00000000,
+ 0x868, 0xFFFFFFFF, 0x00000000,
+ 0xE00, 0xFFFFFFFF, 0x00000000,
+ 0xE04, 0xFFFFFFFF, 0x00000000,
+ 0xE08, 0x0000FF00, 0x00000000,
+ 0x86C, 0xFFFFFF00, 0x00000000,
+ 0xE10, 0xFFFFFFFF, 0x00000000,
+ 0xE14, 0xFFFFFFFF, 0x00000000,
+ 0xE18, 0xFFFFFFFF, 0x00000000,
+ 0xE1C, 0xFFFFFFFF, 0x00000000,
+ 0x830, 0xFFFFFFFF, 0x00000000,
+ 0x834, 0xFFFFFFFF, 0x00000000,
+ 0x838, 0xFFFFFF00, 0x00000000,
+ 0x86C, 0x000000FF, 0x00000000,
+ 0x83C, 0xFFFFFFFF, 0x00000000,
+ 0x848, 0xFFFFFFFF, 0x00000000,
+ 0x84C, 0xFFFFFFFF, 0x00000000,
+ 0x868, 0xFFFFFFFF, 0x00000000,
+ 0xE00, 0xFFFFFFFF, 0x04040404,
+ 0xE04, 0xFFFFFFFF, 0x00020204,
+ 0xE08, 0x0000FF00, 0x00000000,
+ 0x86C, 0xFFFFFF00, 0x00000000,
+ 0xE10, 0xFFFFFFFF, 0x00000000,
+ 0xE14, 0xFFFFFFFF, 0x00000000,
+ 0xE18, 0xFFFFFFFF, 0x00000000,
+ 0xE1C, 0xFFFFFFFF, 0x00000000,
+ 0x830, 0xFFFFFFFF, 0x04040404,
+ 0x834, 0xFFFFFFFF, 0x00020204,
+ 0x838, 0xFFFFFF00, 0x00000000,
+ 0x86C, 0x000000FF, 0x00000000,
+ 0x83C, 0xFFFFFFFF, 0x00000000,
+ 0x848, 0xFFFFFFFF, 0x00000000,
+ 0x84C, 0xFFFFFFFF, 0x00000000,
+ 0x868, 0xFFFFFFFF, 0x00000000,
+ 0xE00, 0xFFFFFFFF, 0x00000000,
+ 0xE04, 0xFFFFFFFF, 0x00000000,
+ 0xE08, 0x0000FF00, 0x00000000,
+ 0x86C, 0xFFFFFF00, 0x00000000,
+ 0xE10, 0xFFFFFFFF, 0x00000000,
+ 0xE14, 0xFFFFFFFF, 0x00000000,
+ 0xE18, 0xFFFFFFFF, 0x00000000,
+ 0xE1C, 0xFFFFFFFF, 0x00000000,
+ 0x830, 0xFFFFFFFF, 0x00000000,
+ 0x834, 0xFFFFFFFF, 0x00000000,
+ 0x838, 0xFFFFFF00, 0x00000000,
+ 0x86C, 0x000000FF, 0x00000000,
+ 0x83C, 0xFFFFFFFF, 0x00000000,
+ 0x848, 0xFFFFFFFF, 0x00000000,
+ 0x84C, 0xFFFFFFFF, 0x00000000,
+ 0x868, 0xFFFFFFFF, 0x00000000,
+
+};
+
+void
+ODM_ReadAndConfig_PHY_REG_PG_8723A(
+ IN PDM_ODM_T pDM_Odm
+ )
+{
+ u4Byte hex = 0;
+ u4Byte i = 0;
+ u2Byte count = 0;
+ pu4Byte ptr_array = NULL;
+ u1Byte platform = pDM_Odm->SupportPlatform;
+ u1Byte interfaceValue = pDM_Odm->SupportInterface;
+ u1Byte board = pDM_Odm->BoardType;
+ u4Byte ArrayLen = sizeof(Array_PHY_REG_PG_8723A)/sizeof(u4Byte);
+ pu4Byte Array = Array_PHY_REG_PG_8723A;
+
+ hex += board;
+ hex += interfaceValue << 8;
+ hex += platform << 16;
+ hex += 0xFF000000;
+ for (i = 0; i < ArrayLen; i += 3 )
+ {
+ u4Byte v1 = Array[i];
+ u4Byte v2 = Array[i+1];
+ u4Byte v3 = Array[i+2];
+
+ // this line is a line of pure_body
+ if ( v1 < 0xCDCDCDCD )
+ {
+ odm_ConfigBB_PHY_REG_PG_8723A(pDM_Odm, v1, v2, v3);
+ continue;
+ }
+ else
+ { // this line is the start of branch
+ if ( !CheckCondition(Array[i], hex) )
+ { // don't need the hw_body
+ i += 2; // skip the pair of expression
+ v1 = Array[i];
+ v2 = Array[i+1];
+ v3 = Array[i+2];
+ while (v2 != 0xDEAD)
+ {
+ i += 3;
+ v1 = Array[i];
+ v2 = Array[i+1];
+ v3 = Array[i+1];
+ }
+ }
+ }
+ }
+}
+
+
+#endif // end of HWIMG_SUPPORT
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_BB.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_BB.h
index fa20df9ea19a..d97e5ee60f70 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_BB.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_BB.h
@@ -1,63 +1,63 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-* You should have received a copy of the GNU General Public License along with
-* this program; if not, write to the Free Software Foundation, Inc.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-*
-*
-******************************************************************************/
-
-#if (RTL8723A_SUPPORT == 1)
-#ifndef __INC_BB_8723A_HW_IMG_H
-#define __INC_BB_8723A_HW_IMG_H
-
-/******************************************************************************
-* AGC_TAB_1T.TXT
-******************************************************************************/
-
-void
-ODM_ReadAndConfig_AGC_TAB_1T_8723A(
- IN PDM_ODM_T pDM_Odm
-);
-
-/******************************************************************************
-* PHY_REG_1T.TXT
-******************************************************************************/
-
-void
-ODM_ReadAndConfig_PHY_REG_1T_8723A(
- IN PDM_ODM_T pDM_Odm
-);
-
-/******************************************************************************
-* PHY_REG_MP.TXT
-******************************************************************************/
-
-void
-ODM_ReadAndConfig_PHY_REG_MP_8723A(
- IN PDM_ODM_T pDM_Odm
-);
-
-/******************************************************************************
-* PHY_REG_PG.TXT
-******************************************************************************/
-
-void
-ODM_ReadAndConfig_PHY_REG_PG_8723A(
- IN PDM_ODM_T pDM_Odm
-);
-
-#endif
-#endif // end of HWIMG_SUPPORT
-
+/******************************************************************************
+*
+* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of version 2 of the GNU General Public License as
+* published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program; if not, write to the Free Software Foundation, Inc.,
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+*
+*
+******************************************************************************/
+
+#if (RTL8723A_SUPPORT == 1)
+#ifndef __INC_BB_8723A_HW_IMG_H
+#define __INC_BB_8723A_HW_IMG_H
+
+/******************************************************************************
+* AGC_TAB_1T.TXT
+******************************************************************************/
+
+void
+ODM_ReadAndConfig_AGC_TAB_1T_8723A(
+ IN PDM_ODM_T pDM_Odm
+);
+
+/******************************************************************************
+* PHY_REG_1T.TXT
+******************************************************************************/
+
+void
+ODM_ReadAndConfig_PHY_REG_1T_8723A(
+ IN PDM_ODM_T pDM_Odm
+);
+
+/******************************************************************************
+* PHY_REG_MP.TXT
+******************************************************************************/
+
+void
+ODM_ReadAndConfig_PHY_REG_MP_8723A(
+ IN PDM_ODM_T pDM_Odm
+);
+
+/******************************************************************************
+* PHY_REG_PG.TXT
+******************************************************************************/
+
+void
+ODM_ReadAndConfig_PHY_REG_PG_8723A(
+ IN PDM_ODM_T pDM_Odm
+);
+
+#endif
+#endif // end of HWIMG_SUPPORT
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_FW.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_FW.c
index 2b95f5b3c534..736411b1af4b 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_FW.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_FW.c
@@ -1,1597 +1,1597 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-* You should have received a copy of the GNU General Public License along with
-* this program; if not, write to the Free Software Foundation, Inc.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-*
-*
-******************************************************************************/
-
-#include "Mp_Precomp.h"
-#include "../odm_precomp.h"
-
-#if (RTL8723A_SUPPORT == 1)
-u1Byte Array_8723A_rtl8723fw[] = {
-
-};
-u4Byte ArrayLength_8723A_rtl8723fw = 0;
-
-
-void
-ODM_ReadFirmware_8723A_rtl8723fw(
- IN PDM_ODM_T pDM_Odm,
- OUT u1Byte *pFirmware,
- OUT u4Byte *pFirmwareSize
-)
-{
- ODM_MoveMemory(pDM_Odm, pFirmware, Array_8723A_rtl8723fw, ArrayLength_8723A_rtl8723fw);
- *pFirmwareSize = ArrayLength_8723A_rtl8723fw;
-}
-
-
-u1Byte Array_8723A_rtl8723fw_B[] = {
-0x02, 0x23, 0x02, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x01, 0x14, 0x15, 0x51, 0xC6, 0x5F, 0x01, 0x00,
-0x03, 0x21, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x02, 0x4A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x61, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x66, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x67, 0xC2, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x02, 0x6F, 0x8F, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03,
-0x00, 0x04, 0x06, 0x05, 0x04, 0x02, 0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09,
-0x08, 0x06, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08,
-0x0A, 0x09, 0x08, 0x00, 0x00, 0x08, 0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10,
-0x00, 0x18, 0x22, 0x21, 0x20, 0x18, 0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21,
-0x20, 0x08, 0x00, 0x20, 0x22, 0x21, 0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20,
-0x22, 0x20, 0x18, 0x08, 0x00, 0x20, 0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00,
-0x00, 0x30, 0x31, 0x2F, 0x10, 0x10, 0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28,
-0x10, 0x00, 0x00, 0x30, 0x31, 0x20, 0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30,
-0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04,
-0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05,
-0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13,
-0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A, 0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F,
-0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24,
-0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78,
-0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40, 0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40,
-0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8, 0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02,
-0x00, 0x04, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48,
-0x00, 0x60, 0x00, 0x6C, 0x00, 0x28, 0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8,
-0x00, 0xF0, 0x01, 0x18, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58,
-0x03, 0x20, 0x03, 0xE8, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07,
-0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C,
-0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04,
-0x05, 0x06, 0x07, 0x08, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18,
-0x10, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0xBB, 0x01, 0x0F, 0xF8, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x28,
-0xF0, 0x22, 0x50, 0x09, 0xC5, 0x82, 0x29, 0xF8, 0xE5, 0x82, 0x26, 0xF6, 0x22, 0xBB, 0xFE, 0x09,
-0xC5, 0x82, 0x29, 0xF8, 0xE2, 0x25, 0x82, 0xF2, 0x22, 0xF8, 0xEA, 0x25, 0x83, 0xF5, 0x83, 0xE9,
-0x93, 0x28, 0x22, 0xBB, 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22,
-0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8, 0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83,
-0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22, 0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE,
-0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0,
-0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A,
-0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7,
-0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3, 0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83,
-0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01, 0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82,
-0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82,
-0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22, 0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0,
-0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A, 0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22,
-0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7,
-0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB, 0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8,
-0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5,
-0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB,
-0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x5B, 0xFF, 0xEE,
-0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED,
-0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, 0xCF, 0xF4, 0xCF, 0xCE, 0xF4, 0xCE, 0xCD, 0xF4, 0xCD, 0xCC,
-0xF4, 0xCC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8,
-0x9C, 0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22,
-0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5,
-0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9,
-0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82, 0x15, 0x82, 0x70,
-0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0,
-0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3,
-0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68,
-0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12,
-0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83,
-0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60, 0xE9, 0xA3, 0xA3,
-0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0xFB, 0x90, 0x93, 0x63, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00,
-0xE5, 0x65, 0x70, 0x03, 0x02, 0x44, 0xF0, 0xE5, 0x62, 0x64, 0x01, 0x60, 0x03, 0x02, 0x44, 0xF0,
-0x0B, 0x90, 0x93, 0x40, 0xF0, 0x04, 0x70, 0x03, 0x02, 0x44, 0xF0, 0x43, 0x66, 0x10, 0x90, 0x93,
-0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A, 0xE0, 0x54, 0x0F, 0xFF, 0x90,
-0x93, 0x58, 0xE0, 0xD3, 0x9F, 0x50, 0x0D, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0xE0, 0xF5, 0x49,
-0xE4, 0x1B, 0x80, 0x56, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93,
-0x58, 0xE0, 0xC3, 0x9F, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x37, 0xE0, 0x04, 0x2F, 0xF5,
-0x49, 0xE4, 0xFB, 0x80, 0x35, 0x90, 0x93, 0x58, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x13,
-0xE4, 0xF5, 0x48, 0x90, 0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x2F, 0xF5, 0x49, 0xE4,
-0xFB, 0x80, 0x17, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x58, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF,
-0x90, 0x93, 0x4F, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12,
-0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
-0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x62, 0x12, 0x9D, 0x6C, 0x90, 0x05, 0x22, 0xE4, 0xF0,
-0x22, 0xE4, 0x90, 0x93, 0x5A, 0xF0, 0x90, 0x93, 0x41, 0xF0, 0xF5, 0x66, 0x22, 0x22, 0xE4, 0xFF,
-0x02, 0x4E, 0x18, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0xE4, 0xFB, 0x90, 0x93, 0x5D, 0x12, 0x1F,
-0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x46, 0x71, 0xE5, 0x62, 0x64, 0x01,
-0x60, 0x03, 0x02, 0x46, 0x71, 0xE5, 0x65, 0x14, 0x60, 0x2B, 0x24, 0xFD, 0x60, 0x27, 0x24, 0x02,
-0x24, 0xFB, 0x50, 0x02, 0x80, 0x21, 0x90, 0x93, 0x40, 0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3,
-0xE0, 0x60, 0x14, 0x90, 0x93, 0x40, 0xE0, 0x70, 0x08, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x93, 0x40,
-0xF0, 0x7B, 0x01, 0x80, 0x02, 0x7B, 0x01, 0xEB, 0x70, 0x03, 0x02, 0x46, 0x71, 0x43, 0x66, 0x10,
-0x90, 0x93, 0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x44, 0xE0, 0x54, 0x0F,
-0xFF, 0x90, 0x93, 0x58, 0xE0, 0xC3, 0x9F, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0x80,
-0x2D, 0x90, 0x93, 0x36, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33,
-0xFE, 0x90, 0x93, 0x58, 0xE0, 0xC3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x08,
-0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3A, 0x80, 0x06, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0xE0, 0x80,
-0x2D, 0x90, 0x93, 0x58, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4, 0xF5, 0x48, 0x90,
-0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x93,
-0x58, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x04, 0x2F, 0xF5, 0x49,
-0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0,
-0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x62,
-0xE5, 0x63, 0x64, 0x0C, 0x60, 0x68, 0x90, 0x93, 0x13, 0xE0, 0xFF, 0x90, 0x93, 0x58, 0xE0, 0xD3,
-0x9F, 0x40, 0x06, 0x90, 0x93, 0x14, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x58, 0xE0, 0x90, 0x93, 0x13,
-0xF0, 0xA3, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x46, 0xE4, 0xF0, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09,
-0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xA9, 0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x70,
-0x21, 0x12, 0x4A, 0x5E, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD,
-0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x55,
-0x80, 0x09, 0x43, 0x66, 0x01, 0x12, 0x51, 0x39, 0x90, 0x93, 0x51, 0x74, 0x01, 0xF0, 0x12, 0x9D,
-0x6C, 0x22, 0xE4, 0x90, 0x93, 0x63, 0xF0, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x47, 0x2B, 0x90, 0x93,
-0x5A, 0xE0, 0x60, 0x11, 0xE4, 0xF0, 0x53, 0x66, 0xFD, 0xE5, 0x66, 0x54, 0x07, 0x60, 0x03, 0x02,
-0x47, 0x2B, 0x02, 0x47, 0x28, 0x90, 0x93, 0x41, 0xE0, 0x04, 0xF0, 0x53, 0x66, 0xEF, 0x90, 0x93,
-0x58, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0,
-0x3A, 0x90, 0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x0F, 0xB5, 0x07, 0x0A, 0x90,
-0x93, 0x39, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x80, 0x22, 0x90, 0x93, 0x36, 0xE0, 0xC4, 0x54, 0x07,
-0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93, 0x58, 0xE0, 0xB5, 0x07, 0x0B,
-0xE4, 0xB5, 0x06, 0x07, 0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x36, 0xE0, 0xC4,
-0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x06, 0x90, 0x93, 0x63, 0x74, 0x5A, 0xF0, 0x90, 0x93,
-0x63, 0xE0, 0xFF, 0x90, 0x93, 0x48, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93, 0x41, 0xE0,
-0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x40, 0x0D, 0xE5, 0x62, 0xB4, 0x01, 0x0B,
-0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12, 0x52, 0x08, 0x22, 0xE4, 0xF5, 0x66, 0xF5,
-0x65, 0x75, 0x64, 0x0C, 0x75, 0x63, 0x0C, 0x90, 0x93, 0x59, 0xF0, 0x90, 0x93, 0x55, 0xF0, 0x90,
-0x93, 0x52, 0xF0, 0x90, 0x93, 0x57, 0x04, 0xF0, 0x90, 0x93, 0x40, 0xF0, 0xE4, 0x90, 0x93, 0x5A,
-0xF0, 0x90, 0x93, 0x42, 0xF0, 0x90, 0x93, 0x4F, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x41, 0xF0,
-0x90, 0x93, 0x4D, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x48, 0xF0, 0x90, 0x93, 0x4B, 0x74,
-0x05, 0xF0, 0x90, 0x93, 0x45, 0x74, 0x14, 0xF0, 0x90, 0x93, 0x50, 0x74, 0x05, 0xF0, 0xE4, 0x90,
-0x93, 0x43, 0xF0, 0x90, 0x93, 0x3C, 0xF0, 0x90, 0x93, 0xB2, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x90,
-0x93, 0x5C, 0xF0, 0x90, 0x93, 0x58, 0xF0, 0x90, 0x93, 0x3D, 0xF0, 0x90, 0x93, 0x56, 0xF0, 0x90,
-0x93, 0x47, 0xF0, 0x90, 0x93, 0x44, 0xF0, 0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x4A, 0xF0, 0x90,
-0x93, 0x46, 0xF0, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x93, 0x49, 0xF0, 0x90, 0x93, 0xB1, 0xE0, 0xB4,
-0x02, 0x05, 0x90, 0x00, 0x93, 0xE4, 0xF0, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x7F, 0xF0, 0xE0, 0x54,
-0xF0, 0xF0, 0xE0, 0x54, 0x8F, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x3A, 0xF0, 0x90,
-0x93, 0x39, 0xF0, 0x22, 0xEF, 0x60, 0x5F, 0xAF, 0x05, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03,
-0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x40,
-0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x6B, 0x90, 0x93, 0x2B, 0xE0,
-0xC3, 0x94, 0x20, 0x50, 0x13, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x74, 0x23, 0x2D, 0xF5, 0x82,
-0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0x74, 0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0x74, 0x7F, 0xF0, 0x22, 0xAF, 0x05, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
-0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30,
-0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xBF, 0xF0,
-0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0C, 0x74, 0x23, 0x2D, 0xF5, 0x82,
-0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0, 0x22, 0x90,
-0x93, 0x26, 0xE0, 0x60, 0x09, 0x90, 0x01, 0xB9, 0x74, 0x40, 0xF0, 0x02, 0x49, 0x22, 0xE5, 0x64,
-0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x02, 0x80, 0x2F, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x67, 0x80,
-0x5D, 0x12, 0x51, 0xAC, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80,
-0x61, 0xE5, 0x66, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x53, 0xE5,
-0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x42,
-0xE5, 0x66, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x35, 0xE5, 0x66, 0x30,
-0xE4, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x28, 0x90, 0x93, 0x42, 0xE0, 0x60, 0x08,
-0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x1A, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x08, 0x90, 0x01,
-0xB9, 0x74, 0x80, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F,
-0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F, 0x00, 0x22, 0xE4, 0x90, 0x93, 0x5D, 0xF0,
-0x90, 0x06, 0xA9, 0xE0, 0x90, 0x93, 0x5D, 0xF0, 0xE0, 0x54, 0xC0, 0x70, 0x18, 0x90, 0x93, 0x51,
-0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0x53, 0x66, 0xFD, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x14,
-0x12, 0x52, 0x08, 0x80, 0x0F, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70,
-0x03, 0x12, 0x4F, 0xA9, 0x90, 0x93, 0x5D, 0xE0, 0x30, 0xE6, 0x1B, 0x43, 0x66, 0x01, 0x90, 0x93,
-0x59, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64, 0x0C, 0x60, 0x13, 0x12, 0x51, 0x39, 0x80,
-0x0E, 0x12, 0x50, 0x68, 0x80, 0x09, 0x90, 0x93, 0x51, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0xE4,
-0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x5D, 0xE0, 0x30, 0xE7, 0x2A, 0x43, 0x66, 0x02, 0xE4, 0xF5,
-0x48, 0x90, 0x93, 0x4B, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39,
-0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x5A, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x1A,
-0xE0, 0x44, 0x10, 0xF0, 0x22, 0x53, 0x66, 0xFD, 0x22, 0x8E, 0x25, 0x8F, 0x26, 0xAD, 0x26, 0xAC,
-0x25, 0xAF, 0x24, 0x12, 0x47, 0xE4, 0xAF, 0x26, 0xAE, 0x25, 0x90, 0x04, 0x80, 0xE0, 0x54, 0x0F,
-0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x01,
-0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, 0xAC,
-0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0xFA, 0xF0, 0x74,
-0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74,
-0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F, 0xF0, 0x90, 0x04, 0x53,
-0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0, 0x90, 0x04, 0x50, 0x74,
-0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x4D,
-0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED, 0xF0, 0x22, 0x7D, 0x01,
-0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x68, 0x8D, 0x69, 0xE5, 0x68, 0x54,
-0x0F, 0xFF, 0xE5, 0x63, 0x54, 0x0F, 0x6F, 0x60, 0x72, 0xE5, 0x68, 0x30, 0xE2, 0x30, 0xE5, 0x63,
-0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x51, 0x92, 0xE5, 0x63, 0x30, 0xE3, 0x10, 0xE5, 0x68, 0x20,
-0xE3, 0x0B, 0x12, 0x4D, 0x46, 0xEF, 0x60, 0x53, 0x12, 0x51, 0xC5, 0x80, 0x4E, 0xE5, 0x63, 0x20,
-0xE3, 0x49, 0xE5, 0x68, 0x30, 0xE3, 0x44, 0xAF, 0x69, 0x12, 0x51, 0x77, 0x80, 0x3D, 0xE5, 0x63,
-0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x68, 0x20, 0xE3, 0x09, 0x12, 0x4D, 0x46, 0xEF, 0x60,
-0x2A, 0x12, 0x51, 0xC5, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x04, 0x0E, 0xE5, 0x68, 0x20, 0xE2,
-0x09, 0x12, 0x48, 0x88, 0xEF, 0x60, 0x14, 0x12, 0x51, 0x10, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF,
-0x02, 0x09, 0x12, 0x4B, 0xF0, 0xEF, 0x60, 0x03, 0x12, 0x51, 0xF5, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0x02, 0x4B, 0x2E, 0x02, 0x52, 0xE5, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6,
-0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C,
-0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01,
-0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x4F,
-0x66, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F,
-0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8,
-0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA,
-0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE,
-0xE7, 0x80, 0xBE, 0xEF, 0x64, 0x01, 0x70, 0x3E, 0x7D, 0x78, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D,
-0x02, 0x7F, 0x03, 0x12, 0x3A, 0x22, 0x90, 0x01, 0x36, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12,
-0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01,
-0x3C, 0x74, 0x02, 0xF0, 0x12, 0x4A, 0x5E, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x06,
-0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36, 0x74, 0x7B, 0xF0, 0xA3, 0x74, 0x02, 0xF0,
-0x7D, 0x7B, 0xFF, 0x12, 0x3A, 0x93, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F,
-0x03, 0x12, 0x3A, 0x3F, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x44,
-0x07, 0xF0, 0x12, 0x4F, 0x19, 0xE5, 0x62, 0x20, 0xE0, 0x05, 0xE4, 0x90, 0x93, 0x42, 0xF0, 0x22,
-0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x10, 0x12, 0x51, 0xAC, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90,
-0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x54, 0xE5, 0x14, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01,
-0xF0, 0x80, 0x48, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x01, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74,
-0x02, 0xF0, 0x80, 0x37, 0x90, 0x02, 0x87, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0,
-0x80, 0x29, 0x90, 0x02, 0x86, 0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80,
-0x1A, 0x90, 0x93, 0x43, 0xE0, 0x70, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x0C, 0x90,
-0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x02,
-0xF0, 0x7F, 0x00, 0x22, 0xE5, 0x62, 0x64, 0x01, 0x70, 0x6B, 0xE5, 0x65, 0x60, 0x67, 0xE5, 0x65,
-0x64, 0x02, 0x60, 0x06, 0xE5, 0x65, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x93,
-0x40, 0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x93, 0x57, 0xF0, 0x90, 0x93, 0x40, 0xE0, 0x70, 0x07,
-0x90, 0x93, 0x57, 0xE0, 0xFF, 0x80, 0x05, 0x90, 0x93, 0x40, 0xE0, 0xFF, 0x90, 0x93, 0x40, 0xEF,
-0xF0, 0x90, 0x93, 0x42, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x93,
-0x58, 0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C,
-0x74, 0x02, 0xF0, 0x53, 0x66, 0xFD, 0x53, 0x66, 0xEF, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02,
-0x80, 0x03, 0x12, 0x49, 0x2B, 0x22, 0x90, 0x93, 0xB1, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x91, 0x80,
-0x0C, 0x90, 0x93, 0xB1, 0xE0, 0x70, 0x04, 0x7D, 0xD4, 0x80, 0x02, 0x7D, 0x40, 0x7F, 0x93, 0x12,
-0x53, 0xF0, 0x90, 0x00, 0x29, 0xE0, 0x54, 0x3F, 0xFD, 0x7F, 0x29, 0x12, 0x53, 0xF0, 0x90, 0x00,
-0x28, 0xE0, 0x54, 0xFC, 0xFD, 0x7F, 0x28, 0x12, 0x53, 0xF0, 0x90, 0x00, 0x08, 0xE0, 0x44, 0x10,
-0xFD, 0x7F, 0x08, 0x12, 0x53, 0xF0, 0x7F, 0x01, 0x12, 0x4E, 0x72, 0x90, 0x00, 0x00, 0xE0, 0x44,
-0x20, 0xFD, 0xE4, 0xFF, 0x12, 0x53, 0xF0, 0x90, 0x00, 0x20, 0xE0, 0x54, 0xFE, 0xFD, 0x7F, 0x20,
-0x12, 0x53, 0xF0, 0x90, 0x00, 0x90, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x53, 0xF0, 0x7F,
-0x14, 0x7E, 0x00, 0x02, 0x3B, 0x09, 0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0, 0x13, 0x90, 0x93, 0x1A,
-0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x18, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x49,
-0x12, 0x51, 0xAC, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x39,
-0x90, 0x93, 0x55, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x2B, 0x90, 0x93,
-0x52, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x1D, 0xE5, 0x64, 0x54, 0x0F,
-0xD3, 0x94, 0x04, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9,
-0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x7F,
-0x00, 0x22, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xC8, 0x12, 0x44, 0xF1, 0x90, 0x93, 0x8A, 0x12, 0x43,
-0xA8, 0x12, 0x1E, 0xF6, 0xF5, 0x65, 0x14, 0x60, 0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24,
-0x03, 0x70, 0x44, 0x7F, 0x01, 0x80, 0x3D, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02,
-0x12, 0x1F, 0x0F, 0xFD, 0xE4, 0xFF, 0x12, 0x50, 0x2A, 0x80, 0x29, 0x90, 0x93, 0x8A, 0x12, 0x43,
-0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x01, 0x12, 0x50, 0x2A, 0x1F, 0x80, 0x14,
-0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x02, 0x12,
-0x50, 0x2A, 0xE4, 0xFF, 0x12, 0x4B, 0x73, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F,
-0x24, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xA9,
-0x90, 0x04, 0x1D, 0xE0, 0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x27, 0x74, 0xFF, 0xF0, 0x12,
-0x5A, 0x0E, 0xBF, 0x01, 0x0D, 0x90, 0x93, 0xAA, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x90, 0x12,
-0x49, 0xC9, 0x90, 0x05, 0x22, 0xE5, 0x27, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0xAA, 0xE0, 0xFF, 0x7D,
-0x01, 0x12, 0x58, 0x90, 0x12, 0x49, 0xC9, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0x8F, 0x6C, 0xE4, 0x90, 0x94, 0x44, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x09, 0xE0, 0x7F,
-0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0xEF, 0x65, 0x6C, 0x60, 0x3E, 0xC3, 0x90, 0x94, 0x45, 0xE0,
-0x94, 0x88, 0x90, 0x94, 0x44, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x80,
-0xF0, 0x22, 0x90, 0x94, 0x44, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00,
-0x12, 0x3B, 0x09, 0xD3, 0x90, 0x94, 0x45, 0xE0, 0x94, 0x32, 0x90, 0x94, 0x44, 0xE0, 0x94, 0x00,
-0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE0, 0xB2, 0x22, 0x90, 0x00, 0x20, 0xE0, 0x44, 0x01,
-0xFD, 0x7F, 0x20, 0x12, 0x53, 0xF0, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x00,
-0xE0, 0x54, 0xDF, 0xFD, 0xE4, 0xFF, 0x12, 0x53, 0xF0, 0x90, 0x00, 0x28, 0xE0, 0x44, 0x03, 0xFD,
-0x7F, 0x28, 0x12, 0x53, 0xF0, 0x90, 0x00, 0x08, 0xE0, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x53,
-0xF0, 0xE4, 0xFF, 0x12, 0x4E, 0x72, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x29,
-0xE0, 0x44, 0xC0, 0xFD, 0x7F, 0x29, 0x02, 0x53, 0xF0, 0xE4, 0xFF, 0x90, 0x00, 0x6A, 0xE0, 0x30,
-0xE2, 0x22, 0xE0, 0x30, 0xE0, 0x20, 0xE0, 0x30, 0xE1, 0x0D, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x02,
-0x30, 0xE3, 0x13, 0x7F, 0x03, 0x80, 0x0F, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x03, 0x30, 0xE3, 0x06,
-0x7F, 0x02, 0x80, 0x02, 0x7F, 0x03, 0xEF, 0xFD, 0xD3, 0x90, 0x93, 0x4E, 0xE0, 0x9D, 0x90, 0x93,
-0x4D, 0xE0, 0x94, 0x00, 0x50, 0x05, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0xA3,
-0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x48, 0x93, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x48, 0x93, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x93, 0x9F, 0x00,
-0x41, 0x93, 0xAE, 0x00, 0x41, 0x93, 0x94, 0x00, 0x41, 0x94, 0x4A, 0x00, 0x41, 0x93, 0x13, 0x00,
-0x41, 0x93, 0x14, 0x00, 0x41, 0x92, 0x69, 0x00, 0x41, 0x92, 0x6A, 0x00, 0x41, 0x92, 0x68, 0x00,
-0x41, 0x94, 0x3D, 0x00, 0x41, 0x94, 0x4D, 0x00, 0x00, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x90, 0x93, 0x56, 0x74, 0x01, 0xF0, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x94, 0x31,
-0x12, 0x1F, 0xC9, 0x90, 0x94, 0x31, 0x12, 0x43, 0x84, 0xEC, 0x44, 0x02, 0xFC, 0x90, 0x94, 0x31,
-0x12, 0x1F, 0xC9, 0x90, 0x94, 0x31, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F,
-0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x65, 0x14, 0x24, 0xFD,
-0x50, 0x02, 0x80, 0x35, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x2E, 0x90, 0x93, 0x3D, 0xE0, 0x60,
-0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xA9, 0x12, 0x9D, 0x6C, 0x90, 0x93, 0x59,
-0xE0, 0x60, 0x06, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x0D, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04,
-0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x62, 0x22, 0xEF, 0x14, 0x60, 0x09, 0x14, 0x60,
-0x16, 0x24, 0x02, 0x70, 0x32, 0x80, 0x0A, 0x90, 0x93, 0x57, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x40,
-0xF0, 0xE4, 0x90, 0x93, 0x5C, 0xF0, 0x22, 0xED, 0x70, 0x0A, 0x90, 0x93, 0x50, 0xE0, 0x90, 0x93,
-0x57, 0xF0, 0x80, 0x05, 0x90, 0x93, 0x57, 0xED, 0xF0, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x93, 0x40,
-0xF0, 0x90, 0x93, 0x5C, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C,
-0x74, 0x08, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F,
-0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74,
-0x02, 0xF0, 0x90, 0x93, 0x52, 0x14, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x0C, 0x50, 0x03,
-0x12, 0x4A, 0x5E, 0x22, 0x90, 0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24,
-0x00, 0xFF, 0xEC, 0x3E, 0x90, 0x93, 0x3E, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x01, 0x04, 0xE0, 0x54,
-0x0F, 0xFF, 0x74, 0x40, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
-0xD8, 0xF9, 0x90, 0x93, 0x54, 0xF0, 0xEE, 0x90, 0x93, 0x53, 0xF0, 0x22, 0xEF, 0x70, 0x0B, 0x90,
-0x93, 0xB0, 0xE0, 0x90, 0x94, 0x35, 0x60, 0x0B, 0x80, 0x12, 0x90, 0x93, 0xB0, 0xE0, 0x90, 0x94,
-0x35, 0x60, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x02, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00,
-0x00, 0x01, 0x10, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x35, 0x7F, 0x60, 0x7E, 0x08, 0x02, 0x55, 0x51,
-0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x5A, 0x0E, 0xEF,
-0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93, 0x12,
-0x54, 0x48, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x90, 0x93, 0x46, 0xE0, 0x70, 0x1A, 0x90,
-0x04, 0x1D, 0xE0, 0x70, 0x14, 0x90, 0x93, 0xA9, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x58, 0x90, 0x8E,
-0x6A, 0x8F, 0x6B, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0x47, 0xE0, 0x60, 0x16,
-0x90, 0x93, 0x4A, 0xE0, 0x70, 0x10, 0x90, 0x93, 0x44, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74,
-0x0D, 0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF, 0xF0, 0xEF, 0x60,
-0x0A, 0xE5, 0x62, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x4E, 0x18, 0x53, 0x63, 0xF0, 0x43, 0x63,
-0x0C, 0x22, 0x90, 0x94, 0x4B, 0xEF, 0xF0, 0x12, 0x6B, 0xF8, 0x90, 0x94, 0x4B, 0xE0, 0x60, 0x05,
-0x90, 0x05, 0x22, 0xE4, 0xF0, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0x90, 0x04, 0x1A, 0xE0,
-0xF4, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01,
-0x60, 0x02, 0x7F, 0x00, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01,
-0x05, 0x7F, 0x01, 0x12, 0x4E, 0x18, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0xE5, 0x64, 0x30,
-0xE6, 0x12, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0x90, 0x01, 0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80,
-0xF0, 0x53, 0x64, 0xBF, 0x22, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x01, 0x12, 0x4C, 0xD6, 0x12, 0x4E,
-0xCA, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x7D, 0x01, 0xAF, 0x64, 0x02, 0x4A, 0x62, 0x90,
-0x02, 0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12,
-0x43, 0xF7, 0x52, 0x3A, 0x00, 0x40, 0x52, 0x62, 0x00, 0x80, 0x52, 0x8D, 0x01, 0x00, 0x52, 0xA1,
-0x02, 0x00, 0x52, 0xB9, 0x04, 0x00, 0x00, 0x00, 0x52, 0xD6, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE,
-0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06,
-0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
-0x80, 0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF,
-0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78,
-0x07, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04,
-0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80,
-0x35, 0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF,
-0x2D, 0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE,
-0xFF, 0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D,
-0x00, 0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x1F,
-0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x75, 0xF0, 0xA3, 0xF0, 0xF1, 0xE1, 0x75, 0x8E,
-0x02, 0xB1, 0x1A, 0x12, 0x60, 0x10, 0x90, 0x93, 0xB1, 0xEF, 0xF0, 0xF1, 0xE9, 0x90, 0x93, 0xB3,
-0xEF, 0xF0, 0x12, 0x60, 0x23, 0x90, 0x93, 0x95, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x14,
-0xF5, 0x09, 0xF5, 0x62, 0x90, 0x93, 0xB0, 0xF0, 0x90, 0x00, 0xCC, 0xE0, 0x54, 0xF7, 0xF0, 0x12,
-0x87, 0x51, 0x12, 0x47, 0x2C, 0x12, 0x37, 0x1C, 0x71, 0xC7, 0x12, 0x5F, 0xD4, 0x12, 0x60, 0x3B,
-0xF1, 0xDA, 0x12, 0x5F, 0xF2, 0x12, 0x44, 0xFD, 0x12, 0x60, 0xA6, 0xB1, 0x02, 0x90, 0x93, 0x77,
-0xE5, 0xD9, 0xF0, 0xC2, 0xAF, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40, 0xF0, 0x91, 0x38, 0x75, 0xE8,
-0x03, 0x43, 0xA8, 0x85, 0x12, 0x9A, 0xCA, 0xD2, 0xAF, 0x12, 0x90, 0x6F, 0x51, 0xDB, 0x12, 0x60,
-0x50, 0x90, 0x93, 0x75, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0xE5, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x52,
-0xA3, 0xF0, 0xE5, 0x14, 0x30, 0xE0, 0x09, 0xC2, 0xAF, 0x53, 0x14, 0xFE, 0xB1, 0x2A, 0xD2, 0xAF,
-0xE5, 0x14, 0x30, 0xE4, 0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xEF, 0xD2, 0xAF, 0x12, 0x77, 0xF7, 0xE5,
-0x14, 0x30, 0xE6, 0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xBF, 0xD2, 0xAF, 0x12, 0x7F, 0x4E, 0xE5, 0x14,
-0x30, 0xE7, 0x09, 0xC2, 0xAF, 0x53, 0x14, 0x7F, 0xD2, 0xAF, 0xB1, 0xB8, 0xC2, 0xAF, 0xE5, 0x64,
-0x54, 0x0F, 0xFF, 0xBF, 0x01, 0x0D, 0x90, 0x93, 0x43, 0x74, 0x01, 0xF0, 0x51, 0x08, 0xE4, 0x90,
-0x93, 0x43, 0xF0, 0xD2, 0xAF, 0x80, 0x9A, 0x90, 0x01, 0x3C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3,
-0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x54, 0x71, 0xF0,
-0x7D, 0xFF, 0x7F, 0x55, 0x71, 0xF0, 0x7D, 0xFF, 0x7F, 0x56, 0x71, 0xF0, 0x7D, 0xFF, 0x7F, 0x57,
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xED, 0xF0, 0x91, 0x38,
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x30, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x71, 0xF0, 0xE4,
-0xFD, 0x7F, 0x51, 0x71, 0xF0, 0xE4, 0xFD, 0x7F, 0x52, 0x71, 0xF0, 0xE4, 0xFD, 0x7F, 0x53, 0x80,
-0xBF, 0x90, 0x00, 0x02, 0xE0, 0x44, 0x01, 0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F,
-0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
-0x93, 0xF2, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xF6, 0x12, 0x1F, 0xD5, 0x00,
-0x00, 0x00, 0x00, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x91, 0x38, 0x91, 0x31, 0x90, 0x00,
-0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0,
-0x90, 0x05, 0x53, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x4A, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78,
-0x74, 0x01, 0xF0, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x34, 0xE4, 0x90, 0x93, 0x56, 0xF0, 0xFF, 0x7E,
-0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0xF2, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF2, 0x12, 0x43, 0x84,
-0xEC, 0x54, 0xFD, 0xFC, 0x90, 0x93, 0xF2, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF2, 0x12, 0x43, 0x84,
-0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x47,
-0xE0, 0x60, 0x22, 0xE4, 0xFF, 0x11, 0xDC, 0x90, 0x93, 0x5B, 0xE0, 0x60, 0x12, 0x90, 0x93, 0xF6,
-0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xF6, 0xB1, 0x4D, 0x90,
-0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x51, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0x90, 0x94, 0x3E, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x94, 0x40, 0xF0, 0x90, 0x94,
-0x3E, 0xE0, 0x54, 0x7F, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0xAD, 0xF0, 0x90,
-0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80, 0x61, 0xF0, 0xE4, 0x7B, 0x01, 0x7A, 0x92, 0x79,
-0x6B, 0x12, 0x76, 0x31, 0xEF, 0xB4, 0x02, 0x14, 0x90, 0x94, 0x4D, 0xE0, 0x64, 0x04, 0x60, 0x07,
-0x43, 0x14, 0x01, 0xE0, 0x04, 0xF0, 0x22, 0xE4, 0x90, 0x94, 0x4D, 0xF0, 0x22, 0x7F, 0x70, 0x7E,
-0x08, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0x54, 0xFC, 0xFF, 0x90, 0x01, 0xE8, 0xF0,
-0xEE, 0x44, 0xF0, 0xA3, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEC, 0xF0, 0x90,
-0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xED, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
-0x01, 0xEE, 0xF0, 0x12, 0x1E, 0xF6, 0x90, 0x01, 0xEF, 0xF0, 0x90, 0x01, 0xEB, 0x74, 0x40, 0xF0,
-0x12, 0x98, 0x93, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x04, 0xE0, 0xC3, 0x13, 0x30, 0xE0,
-0x16, 0xEF, 0x7B, 0x01, 0xB4, 0x01, 0x06, 0x7A, 0x93, 0x79, 0x0B, 0x80, 0x04, 0x7A, 0x93, 0x79,
-0x07, 0x7F, 0x80, 0x7E, 0x08, 0xB1, 0x51, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
-0x92, 0x69, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6E, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B,
-0x01, 0xC0, 0x02, 0xC0, 0x01, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74, 0x92, 0x35,
-0xF0, 0xFA, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0xD0, 0x01, 0xD0, 0x02, 0xD1, 0x12, 0x90, 0x92,
-0x69, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90,
-0x92, 0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x10, 0x12, 0x43, 0xC8, 0x90,
-0x92, 0x68, 0xE0, 0xFF, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x65, 0xF1, 0xF5, 0xEF,
-0x70, 0x02, 0xC1, 0xCB, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22,
-0x75, 0x23, 0x02, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0xD1, 0xD0, 0x90, 0x94, 0x13, 0x12, 0x43,
-0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6,
-0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2, 0xD1, 0xD0, 0x90, 0x01,
-0xAF, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0xB1, 0xE0, 0x64, 0x01, 0x70, 0x48, 0x90, 0x94, 0x10, 0x12,
-0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x75, 0x23, 0x02, 0x7B, 0x01, 0x7A, 0xFD, 0x79,
-0x20, 0xD1, 0xD0, 0x90, 0x94, 0x13, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90,
-0x94, 0x10, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0x7B, 0x01,
-0x7A, 0xFD, 0x79, 0x22, 0xD1, 0xD0, 0x90, 0x93, 0x95, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E,
-0x83, 0x74, 0xFF, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x94, 0x0A,
-0x12, 0x43, 0xC8, 0xAB, 0x20, 0xAA, 0x21, 0xA9, 0x22, 0x90, 0x94, 0x0D, 0x12, 0x43, 0xC8, 0xAF,
-0x23, 0x15, 0x23, 0xEF, 0x60, 0x1E, 0x90, 0x94, 0x0D, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1,
-0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x94, 0x0A, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0xEF, 0x12,
-0x42, 0x53, 0x80, 0xDB, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9, 0x1F, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3,
-0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x16, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x6A, 0xE0,
-0xFF, 0x90, 0x92, 0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x90,
-0x92, 0x69, 0xE0, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0B, 0x90, 0x92, 0x69, 0xE0, 0x14,
-0xFF, 0xA3, 0xE0, 0xB5, 0x07, 0x0D, 0xF1, 0xF5, 0xEF, 0x60, 0x70, 0xB1, 0xB8, 0x90, 0x01, 0x3F,
-0x74, 0x02, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6E, 0xF9, 0x74, 0x92,
-0x35, 0xF0, 0xA8, 0x01, 0xFC, 0x7D, 0x01, 0x90, 0x94, 0x16, 0x12, 0x43, 0xA8, 0x7E, 0x00, 0x7F,
-0x02, 0x12, 0x1E, 0xD0, 0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74,
-0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x94, 0x19, 0x12,
-0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x16, 0x12, 0x43, 0xA8, 0x12, 0x1E,
-0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0xD1, 0xD0, 0x90,
-0x92, 0x6A, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0x8F, 0x82, 0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x64, 0x74, 0x20, 0xF0,
-0x22, 0x90, 0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30,
-0xE3, 0x02, 0x7F, 0x01, 0x22, 0x7F, 0xAF, 0x7E, 0x01, 0x90, 0x94, 0x39, 0xEE, 0xF0, 0xA3, 0xEF,
-0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x94, 0x39, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E,
-0x83, 0xE0, 0x60, 0x2C, 0xC3, 0x90, 0x94, 0x3C, 0xE0, 0x94, 0xE8, 0x90, 0x94, 0x3B, 0xE0, 0x94,
-0x03, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x94, 0x3B,
-0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x80, 0xC6,
-0x7F, 0x01, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xC4, 0x74, 0x43, 0xF0,
-0x74, 0x58, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22, 0xE0, 0x54, 0x90,
-0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE1, 0xE4,
-0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x11, 0x43, 0xBF, 0x01, 0x0F,
-0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x90, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22,
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80,
-0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x0E, 0x74,
-0x0F, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74,
-0x08, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82,
-0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
-0xE0, 0x54, 0xEF, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x3F, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x90,
-0xFD, 0x62, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x93, 0x67, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x54, 0x3F,
-0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x93, 0x68, 0xF0,
-0x90, 0x93, 0x67, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xE4, 0xFF, 0x90, 0x94, 0x1C, 0xEF, 0xF0, 0xA3,
-0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x19, 0x90, 0x05, 0x22, 0xE0, 0x90,
-0x94, 0x21, 0xF0, 0x51, 0x08, 0xBF, 0x01, 0x02, 0x31, 0x5D, 0x90, 0x94, 0x21, 0xE0, 0x90, 0x05,
-0x22, 0xF0, 0x80, 0x02, 0x31, 0x5D, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0xAC,
-0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x90, 0x90, 0x94, 0x1F, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD,
-0x90, 0x94, 0x1C, 0xE0, 0xFF, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x94, 0x2B, 0xF0, 0xEF, 0x60,
-0x10, 0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x80,
-0x0E, 0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF,
-0x05, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x74,
-0x11, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05, 0x74,
-0x16, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x02, 0xF0, 0x74, 0x16, 0x2F,
-0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0x03, 0xF0, 0xAE, 0x05, 0x74, 0x22, 0x2E,
-0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEB, 0xF0, 0x90, 0x94, 0x2B, 0xE0, 0xFF, 0x74, 0x23,
-0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x24, 0x2E, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0x90,
-0x94, 0x48, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3,
-0xE0, 0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x94, 0x49, 0xE0, 0x94,
-0xE8, 0x90, 0x94, 0x48, 0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00,
-0x12, 0x3B, 0x09, 0x90, 0x94, 0x48, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x80, 0xC6, 0xE4,
-0x90, 0x93, 0x63, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x02, 0xC1,
-0xF8, 0x12, 0x9D, 0x9A, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x01, 0x60, 0x02, 0x61, 0x66, 0x90, 0x93,
-0x1A, 0xE0, 0x30, 0xE0, 0x18, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90, 0x93, 0x1A,
-0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x06, 0xA3, 0xE0, 0x90, 0x93, 0x63, 0xF0, 0xE4, 0xF5, 0x48,
-0x90, 0x93, 0x63, 0xE0, 0x24, 0x03, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12,
-0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x90,
-0x93, 0x27, 0x30, 0xE0, 0x05, 0x74, 0x05, 0xF0, 0x80, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x19,
-0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F, 0x90, 0x93, 0x16, 0xE0, 0xFF, 0x90, 0x93, 0x25,
-0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30,
-0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x6E, 0x90, 0x93, 0x2B,
-0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05,
-0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x31, 0x2A, 0x80, 0x51, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54,
-0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0xFD, 0x7F, 0x04, 0x12,
-0x4A, 0x62, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x27, 0x90, 0x93,
-0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0x90, 0x93, 0x2A, 0xF0, 0x90, 0x93,
-0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x06, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x07, 0x90, 0x93,
-0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x20,
-0xE0, 0x02, 0xC1, 0xF8, 0xC1, 0x66, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x02, 0x60, 0x02, 0x81, 0x46,
-0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x08, 0x51, 0x08, 0xBF, 0x01,
-0x03, 0x12, 0x54, 0x48, 0xE4, 0xFF, 0x12, 0x6A, 0xBF, 0x90, 0x93, 0x1A, 0xE0, 0x30, 0xE0, 0x1F,
-0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90, 0x93, 0x1A, 0xE0, 0xC4, 0x54, 0x0F, 0x30,
-0xE0, 0x0D, 0xA3, 0xE0, 0x90, 0x93, 0x63, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xEF, 0xF0, 0xE4,
-0xF5, 0x48, 0x90, 0x93, 0x16, 0xE0, 0x24, 0x03, 0xFF, 0x90, 0x93, 0x63, 0xE0, 0x2F, 0xFF, 0x90,
-0x93, 0x25, 0xE0, 0xC3, 0x9F, 0xFF, 0x90, 0x93, 0x64, 0xE0, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD,
-0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0xE4, 0xFF, 0xD1,
-0xF9, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30,
-0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54,
-0x0F, 0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x14, 0xE4,
-0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x62, 0x80, 0x0B, 0xE5, 0x65, 0x60, 0x0D, 0xE4, 0xFD, 0xAF, 0x64,
-0x12, 0x4A, 0x62, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x30, 0xE0, 0x05,
-0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x20,
-0xE0, 0x02, 0xC1, 0xF8, 0xC1, 0xF3, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x03, 0x60, 0x02, 0xA1, 0x9B,
-0x7F, 0x01, 0x12, 0x6A, 0xBF, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0,
-0x03, 0x12, 0x6B, 0xF8, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x02,
-0x81, 0xF7, 0x90, 0x93, 0x1F, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0xD3, 0x9F, 0x40, 0x4D, 0xE0,
-0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0xFE, 0xC3, 0xEF, 0x9E, 0xFF, 0x24, 0x03,
-0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x93, 0x17, 0xE0, 0xD3, 0x9D, 0xEC, 0x64, 0x80, 0xF8, 0x74, 0x80,
-0x98, 0x40, 0x08, 0xE0, 0x9F, 0x90, 0x93, 0x66, 0xF0, 0x80, 0x06, 0x90, 0x93, 0x66, 0x74, 0x03,
-0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x66, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E,
-0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x80, 0x24, 0xE4, 0xF5, 0x48, 0x90,
-0x93, 0x22, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90,
-0x93, 0x1D, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0,
-0xE4, 0x90, 0x93, 0x29, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x65, 0xE0, 0xFF, 0x90,
-0x93, 0x17, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39,
-0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x7F, 0x01, 0xD1,
-0xF9, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x2F, 0x90, 0x93, 0x15, 0xE0,
-0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1A, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x4C,
-0xE0, 0x60, 0x02, 0x80, 0x0F, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x08,
-0xE5, 0x65, 0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x62, 0x90, 0x93, 0x4C, 0xE0, 0x60,
-0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54,
-0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03,
-0x12, 0x51, 0x39, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13,
-0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0xF8, 0x7F, 0x01, 0xC1, 0xF5, 0x90, 0x93, 0x27, 0xE0, 0x64,
-0x04, 0x60, 0x02, 0xC1, 0x6C, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01,
-0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90,
-0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F, 0x90, 0x93, 0x17, 0xE0, 0xFF, 0x90,
-0x93, 0x25, 0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54,
-0x07, 0x30, 0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x6E, 0x90,
-0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFB, 0xE4, 0xFD,
-0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x31, 0x2A, 0x80, 0x51, 0x90, 0x93, 0x15, 0xE0,
-0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0xFD, 0x7F,
-0x04, 0x12, 0x4A, 0x62, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x27,
-0x90, 0x93, 0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0x90, 0x93, 0x2A, 0xF0,
-0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x07, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x07,
-0x90, 0x93, 0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x90, 0x93, 0x18,
-0xE0, 0x20, 0xE0, 0x02, 0xC1, 0xF8, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x27, 0xE0,
-0x64, 0x05, 0x60, 0x02, 0xC1, 0xF8, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30,
-0xE0, 0x08, 0x51, 0x08, 0xBF, 0x01, 0x03, 0x12, 0x54, 0x48, 0xE4, 0xFF, 0x12, 0x6A, 0xBF, 0xE4,
-0xFF, 0xD1, 0xF9, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07,
-0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F, 0x90, 0x93, 0x15, 0xE0, 0xC4,
-0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x14,
-0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x62, 0x80, 0x0B, 0xE5, 0x65, 0x60, 0x0D, 0xE4, 0xFD, 0xAF,
-0x64, 0x12, 0x4A, 0x62, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x30, 0xE0,
-0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
-0x30, 0xE0, 0x05, 0xE4, 0xFF, 0x12, 0x55, 0x98, 0x22, 0x90, 0x94, 0x2C, 0xEF, 0xF0, 0xF1, 0x5B,
-0x90, 0x93, 0x18, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x08, 0x90, 0x94, 0x2C, 0xE0,
-0xFF, 0x12, 0x50, 0xDC, 0x90, 0x94, 0x2D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x90, 0x94,
-0x2C, 0xE0, 0xB4, 0x01, 0x10, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
-0x30, 0xE0, 0x16, 0x80, 0x0A, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90,
-0x94, 0x2D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x2D, 0x12,
-0x55, 0x4D, 0x90, 0x94, 0x2C, 0xE0, 0x90, 0x93, 0x26, 0xF0, 0x22, 0xEF, 0x64, 0x01, 0x70, 0x3C,
-0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x07, 0x90, 0x07, 0x78, 0x74,
-0x0D, 0xF0, 0x22, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xE0, 0x13, 0x13,
-0x54, 0x3F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x24, 0x80, 0x0E, 0x90, 0x93, 0x18, 0xE0, 0xC3, 0x13,
-0x90, 0x07, 0x78, 0x30, 0xE0, 0x02, 0x80, 0x14, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0,
-0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x04, 0x74, 0x03, 0xF0, 0x22,
-0x74, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC, 0xEF, 0x30,
-0xE0, 0x02, 0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0,
-0xD0, 0x92, 0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5, 0x2B, 0x90,
-0x01, 0x30, 0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3, 0xE5, 0x2B,
-0xF0, 0x22, 0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32, 0x43, 0x32,
-0x20, 0x90, 0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32, 0xF0, 0x22,
-0x90, 0x00, 0xF4, 0xE0, 0x20, 0xE3, 0x09, 0xE0, 0x7F, 0x01, 0x20, 0xE2, 0x05, 0x7F, 0x02, 0x22,
-0x7F, 0x00, 0x22, 0x90, 0x93, 0xB3, 0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7,
-0x05, 0x7E, 0xFD, 0x7F, 0x33, 0x22, 0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30,
-0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74, 0x10, 0xF0, 0x90, 0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22,
-0xE4, 0x90, 0x93, 0x78, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x98, 0xE0, 0x7F, 0x00, 0x30, 0xE4, 0x02,
-0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E, 0xC3, 0x90, 0x93, 0x79, 0xE0, 0x94, 0x88, 0x90, 0x93,
-0x78, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93,
-0x78, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3,
-0x90, 0x93, 0x79, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x78, 0xE0, 0x94, 0x00, 0x40, 0xB9, 0x90, 0x01,
-0xC7, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01, 0x9C,
-0x74, 0x7E, 0xF0, 0xA3, 0x74, 0x92, 0xF0, 0xA3, 0x74, 0xA0, 0xF0, 0xA3, 0x74, 0x24, 0xF0, 0x90,
-0x01, 0x9B, 0x74, 0x49, 0xF0, 0x90, 0x01, 0x9A, 0x74, 0xE0, 0xF0, 0x90, 0x01, 0x99, 0xE4, 0xF0,
-0x90, 0x01, 0x98, 0x04, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C,
-0x13, 0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x93,
-0x5D, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01, 0x60,
-0x07, 0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3C, 0x90, 0x93, 0x5D, 0x74, 0x01, 0xF0, 0xA3, 0x74,
-0x3D, 0xF0, 0x79, 0x40, 0x90, 0x93, 0x5D, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83,
-0xE0, 0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x93, 0x9F, 0xF0, 0x22, 0x90, 0x93, 0x9F, 0xE0,
-0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0C, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0,
-0x03, 0x12, 0x58, 0x7B, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75,
-0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06,
-0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x45, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0,
-0x55, 0x28, 0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E,
-0xA3, 0xE0, 0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x61, 0x38, 0x90, 0x01, 0x34,
-0x74, 0x01, 0xF0, 0x85, 0xD1, 0x0A, 0x85, 0xD3, 0x0C, 0x85, 0xD4, 0x0D, 0x85, 0xD5, 0x0E, 0x85,
-0xD6, 0x0F, 0x85, 0xD7, 0x10, 0x85, 0xD9, 0x11, 0x85, 0xD2, 0x0B, 0x75, 0x20, 0x00, 0x75, 0x21,
-0x00, 0x75, 0x22, 0x0A, 0x75, 0x23, 0x08, 0xFB, 0x7A, 0x93, 0x79, 0xA0, 0x12, 0x56, 0xD0, 0x90,
-0x93, 0xA1, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x01, 0xFE, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x6E,
-0x70, 0x02, 0x41, 0xE9, 0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30,
-0xE0, 0x02, 0x41, 0xE9, 0xEF, 0x54, 0x1F, 0xF5, 0x4D, 0x90, 0x93, 0xA2, 0xE0, 0x54, 0x3F, 0xF5,
-0x4E, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82,
-0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xE5, 0x4E, 0xD3, 0x94, 0x04,
-0x40, 0x03, 0x75, 0x4E, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C,
-0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0xA4,
-0xE0, 0x54, 0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00,
-0x12, 0x43, 0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
-0x90, 0x93, 0xA1, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x2F, 0x90, 0x93, 0xA4, 0xE0, 0x54,
-0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4,
-0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0xA3, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
-0x30, 0xE0, 0x66, 0xAF, 0x4D, 0x12, 0x79, 0xCB, 0x80, 0x5F, 0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4,
-0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x52, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0xFF, 0xFD, 0xE5,
-0x4D, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8D, 0xF0, 0x12,
-0x42, 0x87, 0x90, 0x93, 0xA3, 0xE0, 0xFE, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x0E,
-0xEE, 0x54, 0x7F, 0xFD, 0x8F, 0x55, 0xAB, 0x4E, 0xAF, 0x4D, 0xF1, 0x5C, 0x80, 0x1B, 0x90, 0x01,
-0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x11, 0x90, 0x04, 0x30, 0xE0, 0xB4, 0x01, 0x0A, 0xE4,
-0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x04, 0xCF, 0xF0, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02,
-0x80, 0x46, 0x90, 0x93, 0x59, 0xE0, 0x60, 0x37, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C,
-0x74, 0x04, 0xF0, 0x12, 0x51, 0xAC, 0xEF, 0x64, 0x01, 0x70, 0x2D, 0xF5, 0x48, 0x90, 0x93, 0x45,
-0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B,
-0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x55, 0xF0, 0x80, 0x09, 0x12,
-0x51, 0xAC, 0xBF, 0x01, 0x03, 0x12, 0x52, 0x08, 0xE5, 0x2C, 0x20, 0xE1, 0x02, 0x61, 0xDA, 0x90,
-0x01, 0x34, 0x74, 0x02, 0xF0, 0x90, 0xFD, 0x10, 0x74, 0x7F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x30,
-0xE5, 0x0B, 0x75, 0x4F, 0x88, 0x75, 0x50, 0x0F, 0x75, 0x51, 0x0F, 0x80, 0x09, 0x75, 0x4F, 0xC0,
-0x75, 0x50, 0x08, 0x75, 0x51, 0x07, 0x90, 0x04, 0x7F, 0xE0, 0x55, 0x51, 0xF5, 0x12, 0x90, 0x04,
-0x7E, 0xE0, 0x55, 0x51, 0xF5, 0x13, 0x65, 0x12, 0x60, 0x60, 0xE4, 0xFF, 0xE5, 0x12, 0x75, 0xF0,
-0x08, 0xA4, 0x25, 0x4F, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE,
-0x74, 0x15, 0x2F, 0xF8, 0xA6, 0x06, 0x0F, 0xBF, 0x08, 0xE2, 0x75, 0x20, 0x00, 0x75, 0x21, 0x00,
-0x75, 0x22, 0x15, 0x75, 0x23, 0x08, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x97, 0x12, 0x56, 0xD0, 0x90,
-0x93, 0x97, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0xD1, 0x5C, 0xE5,
-0x12, 0x24, 0x01, 0xFF, 0xE4, 0x33, 0xFE, 0xAD, 0x50, 0x7C, 0x00, 0x12, 0x1F, 0x4E, 0xAF, 0x05,
-0x8F, 0x12, 0x90, 0x04, 0x7F, 0xEF, 0xF0, 0xB5, 0x13, 0xA0, 0xE5, 0x2C, 0x30, 0xE3, 0x06, 0x90,
-0x01, 0x34, 0x74, 0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90, 0x01, 0x34, 0x74, 0x10, 0xF0,
-0x43, 0x14, 0x10, 0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF, 0xE0, 0x30, 0xE5, 0x1F, 0xE0,
-0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8, 0x00, 0x75, 0xE8, 0x00, 0x12,
-0x54, 0x05, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x54, 0x38, 0x80, 0xFE, 0xE5, 0x2C,
-0x30, 0xE6, 0x06, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0x81, 0xE3,
-0x90, 0x93, 0xB2, 0x74, 0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x93, 0xAF, 0xE0, 0x60, 0x0F,
-0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x12,
-0x45, 0x09, 0x90, 0x93, 0x2D, 0xE0, 0x20, 0xE0, 0x02, 0x81, 0xD9, 0x90, 0x05, 0x22, 0x74, 0xFF,
-0xF0, 0xE4, 0xFF, 0x12, 0x50, 0xDC, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x57, 0x12,
-0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x2D,
-0xE0, 0xC4, 0x13, 0x54, 0x07, 0xFF, 0xE0, 0xFE, 0xC3, 0x13, 0x54, 0x0F, 0xC3, 0x9F, 0x40, 0x30,
-0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xE1, 0xF0, 0x90, 0x93, 0x32, 0x12, 0x43, 0x84, 0x90, 0x81,
-0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x60, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x2E, 0x12, 0x43,
-0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x80, 0x1C,
-0x90, 0x93, 0x2D, 0xE0, 0xFF, 0xC3, 0x13, 0x54, 0x0F, 0xFE, 0xEF, 0x54, 0xE1, 0xFF, 0xEE, 0x04,
-0x54, 0x0F, 0xFE, 0x25, 0xE0, 0x4F, 0xF0, 0x80, 0x03, 0x12, 0x6A, 0x4A, 0xD1, 0x7E, 0x90, 0x93,
-0xB2, 0xE4, 0xF0, 0xE5, 0x2E, 0x30, 0xE1, 0x45, 0x90, 0x01, 0x36, 0x74, 0x02, 0xF0, 0x43, 0x14,
-0x40, 0x12, 0x9F, 0x27, 0x11, 0xD6, 0x90, 0x93, 0x5C, 0xE0, 0x60, 0x1D, 0x90, 0x01, 0x3B, 0xE0,
-0x30, 0xE4, 0x16, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x3A,
-0x22, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x05, 0x08, 0xE5, 0x08, 0xC3, 0x94, 0xFF,
-0x40, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0xE5, 0x2E, 0x30,
-0xE2, 0x43, 0x90, 0x01, 0x36, 0x74, 0x04, 0xF0, 0x12, 0x4C, 0x64, 0x90, 0x93, 0x5C, 0xE0, 0x60,
-0x34, 0x90, 0x93, 0x57, 0xE0, 0xFF, 0x90, 0x93, 0x40, 0xE0, 0x6F, 0x70, 0x28, 0x90, 0x93, 0x57,
-0xE0, 0x90, 0x05, 0x73, 0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x3A,
-0xAD, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90,
-0x93, 0x40, 0xE0, 0x14, 0xF0, 0xE5, 0x2E, 0x30, 0xE3, 0x34, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0,
-0xE5, 0x62, 0x64, 0x01, 0x70, 0x28, 0xE5, 0x65, 0x60, 0x24, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90,
-0x01, 0x3C, 0x74, 0x02, 0xF0, 0x75, 0x48, 0x00, 0x90, 0x93, 0x4B, 0xE0, 0xF5, 0x49, 0xE4, 0xFB,
-0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x2E,
-0x30, 0xE4, 0x2B, 0x90, 0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x20, 0xE5, 0x65,
-0x60, 0x1C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x5A,
-0xE4, 0xF0, 0x53, 0x66, 0xFD, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x52, 0x08, 0xE5, 0x2E,
-0x30, 0xE5, 0x25, 0x90, 0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x1A, 0xE5, 0x65,
-0x60, 0x16, 0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64, 0x0C, 0x60, 0x08,
-0x12, 0x51, 0x39, 0x80, 0x03, 0x12, 0x50, 0x68, 0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36,
-0x74, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x10, 0xE5, 0x65, 0x60, 0x0C, 0x53, 0x66, 0xFE, 0xE5,
-0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x52, 0x08, 0xE5, 0x2F, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x37,
-0x74, 0x02, 0xF0, 0x12, 0x4F, 0xEB, 0x74, 0x45, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x61, 0xA3,
-0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0,
-0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x93, 0x5D, 0xE0,
-0x54, 0xF0, 0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x15,
-0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x0B, 0x7A, 0x93, 0x79, 0x5D, 0x02, 0x57, 0x1F, 0x90, 0x94,
-0x3E, 0xE0, 0x30, 0xE0, 0x2F, 0xE5, 0x62, 0xB4, 0x01, 0x2A, 0x90, 0x94, 0x3D, 0xE0, 0x04, 0xF0,
-0xE0, 0xB4, 0x0A, 0x0B, 0x90, 0x94, 0x40, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x3D, 0xF0, 0x90,
-0x94, 0x40, 0xE0, 0xFF, 0x90, 0x94, 0x3F, 0xE0, 0xD3, 0x9F, 0x50, 0x08, 0x12, 0x44, 0xFE, 0xE4,
-0x90, 0x94, 0x40, 0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00,
-0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x7D, 0xB5, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x66, 0xFF,
-0xA3, 0xF0, 0x53, 0x91, 0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE, 0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5,
-0x3D, 0x90, 0x00, 0x52, 0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0, 0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30,
-0xE4, 0x06, 0x90, 0x00, 0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D, 0x30, 0xE5, 0x06, 0x90, 0x00, 0x55,
-0x74, 0x20, 0xF0, 0xE5, 0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00, 0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D,
-0x30, 0xE7, 0x06, 0x90, 0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5, 0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00,
-0x56, 0x74, 0x01, 0xF0, 0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90, 0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5,
-0x3E, 0x30, 0xE2, 0x06, 0x90, 0x00, 0x56, 0x74, 0x04, 0xF0, 0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90,
-0x00, 0x56, 0x74, 0x08, 0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0,
-0x06, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0x8F, 0x52, 0x8D, 0x53,
-0xE5, 0x53, 0x54, 0x1F, 0x90, 0x93, 0x5F, 0xF0, 0x74, 0x01, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88,
-0xF5, 0x83, 0xE0, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x93, 0x60, 0x74, 0x01, 0xF0, 0xEB, 0xC3, 0x94,
-0x01, 0x40, 0x03, 0x02, 0x79, 0xCB, 0x90, 0x93, 0x5D, 0xE0, 0x25, 0x55, 0xFF, 0xA3, 0xF0, 0xA3,
-0xE0, 0x90, 0x41, 0xA4, 0x93, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x14, 0x74, 0x01, 0x25, 0x52, 0xF5,
-0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAD, 0x53, 0xAF, 0x52, 0x02, 0x79, 0x82, 0x90,
-0x93, 0x5E, 0xE0, 0xFF, 0x74, 0x01, 0x25, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEF,
-0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0,
-0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x75,
-0x56, 0x00, 0x90, 0x01, 0xC4, 0x74, 0xC2, 0xF0, 0x74, 0x67, 0xA3, 0xF0, 0x53, 0x91, 0xDF, 0x90,
-0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0, 0x55, 0x31, 0xF5, 0x35, 0xA3, 0xE0, 0x55,
-0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37, 0xE5, 0x34, 0x30, 0xE0, 0x06, 0x90, 0x01,
-0x3C, 0x74, 0x01, 0xF0, 0xE5, 0x34, 0x30, 0xE1, 0x10, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90,
-0x93, 0x15, 0xE0, 0x20, 0xE0, 0x03, 0x12, 0x46, 0x72, 0xE5, 0x34, 0x30, 0xE2, 0x36, 0x90, 0x01,
-0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE0, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93,
-0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
-0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x55, 0xE4,
-0xF0, 0x12, 0x52, 0x08, 0xE5, 0x34, 0x30, 0xE3, 0x36, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0x90,
-0x06, 0x92, 0xE0, 0x30, 0xE1, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4,
-0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90,
-0x06, 0x92, 0x74, 0x02, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x52, 0xE4, 0xF0, 0x12, 0x52, 0x08, 0xE5,
-0x34, 0x30, 0xE4, 0x34, 0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x30, 0xE0,
-0x24, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF, 0x12, 0x50, 0xDC, 0x90, 0x07, 0x78, 0x74,
-0x01, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08,
-0x12, 0x34, 0x30, 0x80, 0x03, 0x12, 0x5A, 0x4F, 0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3C,
-0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x18, 0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90, 0x00,
-0x83, 0xE0, 0xF5, 0x64, 0x90, 0x01, 0xBB, 0xE5, 0x64, 0xF0, 0x12, 0x51, 0xDD, 0x12, 0x52, 0x08,
-0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3D, 0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B,
-0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90, 0x93, 0xAE, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05,
-0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0xFD, 0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x06,
-0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0xE5, 0x36, 0x30, 0xE1, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x02,
-0xF0, 0xE5, 0x36, 0x30, 0xE3, 0x08, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0x71, 0xB2, 0xE5, 0x36,
-0x30, 0xE4, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x10, 0xF0, 0xE5, 0x36, 0x30, 0xE2, 0x75, 0x90, 0x01,
-0x3E, 0x74, 0x04, 0xF0, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE7, 0x13, 0x74, 0x80, 0xF0, 0x90, 0x07,
-0x95, 0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x44, 0x04, 0xF0, 0xE4, 0xFF, 0x12, 0x55, 0x98, 0x90, 0x07,
-0x8F, 0xE0, 0x30, 0xE6, 0x11, 0x74, 0x40, 0xF0, 0x90, 0x07, 0x7C, 0xE0, 0xB4, 0x06, 0x07, 0x90,
-0x07, 0x80, 0xE0, 0xFF, 0x71, 0xD0, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE5, 0x14, 0x74, 0x20, 0xF0,
-0xE4, 0xFF, 0x12, 0x55, 0x98, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3, 0xE0, 0x44, 0x01,
-0xF0, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE2, 0x0D, 0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x54, 0xFB, 0xF0,
-0x7F, 0x01, 0x12, 0x55, 0x98, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE0, 0x07, 0x74, 0x01, 0xF0, 0xFF,
-0x12, 0x55, 0x98, 0xE5, 0x36, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x20, 0xF0, 0xE5, 0x36,
-0x30, 0xE6, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x40, 0xF0, 0xE5, 0x36, 0x30, 0xE7, 0x06, 0x90, 0x01,
-0x3E, 0x74, 0x80, 0xF0, 0xE5, 0x37, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x43,
-0x14, 0x80, 0xE5, 0x37, 0x30, 0xE4, 0x1D, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0x12, 0x44, 0x24,
-0x90, 0x93, 0x57, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x51,
-0x4A, 0x12, 0x66, 0x7E, 0x74, 0xC2, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x67, 0xA3, 0xF0, 0xD0,
-0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0,
-0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0,
-0x6D, 0x7F, 0x01, 0x51, 0xBF, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0,
-0x02, 0x71, 0xF8, 0x7F, 0x01, 0x12, 0x5E, 0xF9, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07,
-0x20, 0xE0, 0x29, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1F, 0x90, 0x93, 0x1A,
-0xE0, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x06, 0x7D, 0x01, 0x7F, 0x04, 0x80, 0x09,
-0x90, 0x05, 0x22, 0xE4, 0xF0, 0x7D, 0x01, 0x7F, 0x0C, 0x12, 0x4A, 0x62, 0x90, 0x93, 0x4C, 0xE0,
-0x90, 0x05, 0x22, 0x60, 0x05, 0x74, 0x6F, 0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0,
-0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x05, 0x7F, 0x01, 0x12, 0x55, 0x98, 0x22, 0xEF,
-0x64, 0x03, 0x60, 0x02, 0x61, 0x8D, 0x90, 0x94, 0x02, 0x74, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
-0xA3, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x30, 0x90, 0x94,
-0x06, 0x74, 0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0, 0xA3, 0x74, 0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0,
-0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x94, 0x02, 0x74, 0xFF, 0xF0,
-0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0x80, 0x2D, 0x90, 0x93,
-0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x17, 0x90, 0x94, 0x02, 0x74, 0xFF, 0xF0, 0xA3, 0x74,
-0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0x5A, 0x80, 0x05, 0x90,
-0x94, 0x06, 0x74, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x94, 0x02, 0xE0, 0x90,
-0x06, 0xC0, 0xF0, 0x90, 0x94, 0x03, 0xE0, 0x90, 0x06, 0xC1, 0xF0, 0x90, 0x94, 0x04, 0xE0, 0x90,
-0x06, 0xC2, 0xF0, 0x90, 0x94, 0x05, 0xE0, 0x90, 0x06, 0xC3, 0xF0, 0x90, 0x94, 0x06, 0xE0, 0x90,
-0x06, 0xC4, 0xF0, 0x90, 0x94, 0x07, 0xE0, 0x90, 0x06, 0xC5, 0xF0, 0x90, 0x94, 0x08, 0xE0, 0x90,
-0x06, 0xC6, 0xF0, 0x90, 0x94, 0x09, 0xE0, 0x90, 0x06, 0xC7, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4,
-0x13, 0x13, 0x54, 0x03, 0x90, 0x06, 0xCC, 0x30, 0xE0, 0x24, 0xE4, 0xF0, 0x22, 0xEF, 0xB4, 0x01,
-0x10, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x16, 0x90, 0x06, 0xCC, 0xE4, 0xF0,
-0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x06, 0x90, 0x06, 0xCC, 0x74, 0x03,
-0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x11, 0x90, 0x93,
-0x1C, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x08, 0xE0, 0x44, 0x04, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0x22,
-0xAD, 0x07, 0x90, 0x93, 0x63, 0xE0, 0x54, 0xF0, 0x44, 0x05, 0xF0, 0x54, 0x0F, 0x44, 0x10, 0xF0,
-0x90, 0x93, 0x65, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x65, 0x90, 0x94, 0x19, 0x12, 0x43,
-0xC8, 0x7A, 0x93, 0x79, 0x63, 0x02, 0x57, 0x1F, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
-0x93, 0xEA, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xEE, 0x12, 0x1F, 0xD5, 0x00,
-0x00, 0x00, 0x00, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0,
-0x90, 0x93, 0x4A, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x3D, 0xE0,
-0x60, 0x14, 0x12, 0x51, 0xAC, 0xBF, 0x01, 0x0B, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC4, 0x54, 0x0F,
-0x30, 0xE0, 0x03, 0x12, 0x4F, 0xA9, 0x90, 0x93, 0x2D, 0xE0, 0x20, 0xE0, 0x24, 0x90, 0x93, 0x47,
-0xE0, 0x60, 0x1E, 0x7F, 0x01, 0x12, 0x50, 0xDC, 0x90, 0x93, 0x5B, 0xE0, 0x60, 0x13, 0x90, 0x93,
-0xEE, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xEE, 0x12, 0x55,
-0x4D, 0x12, 0x54, 0x31, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x15,
-0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E,
-0xF6, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x10,
-0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x15,
-0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x12, 0x1E,
-0xF6, 0xFC, 0x54, 0x80, 0xFF, 0x90, 0x93, 0x15, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x00, 0x03,
-0x12, 0x1F, 0x0F, 0xFD, 0x54, 0x01, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xED,
-0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFD, 0x54,
-0x04, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xFB, 0x4F, 0xF0, 0xED, 0x54, 0x10, 0xFF, 0xE0, 0x54,
-0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x18,
-0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00,
-0x03, 0x12, 0x1F, 0x0F, 0x54, 0x80, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90,
-0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xDF, 0x4E,
-0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F,
-0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x10, 0xFF,
-0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x04, 0xFE, 0x90,
-0x93, 0x19, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54, 0xF7, 0x4F, 0xF0,
-0xEC, 0x20, 0xE0, 0x02, 0xC1, 0xF3, 0x90, 0x05, 0x54, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x25, 0xF0,
-0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1C, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8,
-0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x16, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
-0x90, 0x93, 0x17, 0xF0, 0x80, 0x4E, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12,
-0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03, 0x90, 0x93, 0x16, 0x50,
-0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x93, 0x16, 0x74, 0x2A, 0xF0,
-0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03,
-0x90, 0x93, 0x17, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x93,
-0x17, 0x74, 0x2A, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x3D,
-0x90, 0x93, 0x16, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x1E, 0xF0, 0xE0, 0xC3, 0x13, 0xA3,
-0xF0, 0x90, 0x93, 0x17, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x20, 0xF0, 0x90, 0x93, 0x16,
-0xE0, 0xC3, 0x13, 0x90, 0x93, 0x21, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x22,
-0xF0, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0xAD, 0xE4, 0x90, 0x93,
-0x11, 0xF0, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x20, 0xE0, 0x14, 0x12, 0x1E, 0xF6, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0,
-0x04, 0x7F, 0x01, 0x80, 0x02, 0xE4, 0xFF, 0x12, 0x50, 0xDC, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54,
-0x0F, 0x30, 0xE0, 0x18, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x03, 0x75,
-0x64, 0x04, 0x90, 0x05, 0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x11, 0xF0, 0x90, 0x05, 0x58, 0x74,
-0x03, 0xF0, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x27, 0x74, 0x01, 0xF0, 0x80,
-0x2B, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x04, 0x08, 0x90, 0x93, 0x27, 0x74, 0x04, 0xF0, 0x80, 0x1C,
-0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x06, 0x08, 0x90, 0x93, 0x27, 0x74, 0x02, 0xF0, 0x80, 0x0D, 0x90,
-0x93, 0x1D, 0xE0, 0xB4, 0x07, 0x06, 0x90, 0x93, 0x27, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x1D,
-0xF0, 0x80, 0x65, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0x13, 0x13, 0x13,
-0x54, 0x1F, 0x90, 0x93, 0x83, 0x30, 0xE0, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x80,
-0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x12, 0x9B, 0x2D, 0x90, 0x00, 0x40, 0x74, 0x20,
-0xF0, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x13, 0x13, 0x13,
-0x54, 0x1F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0,
-0x7B, 0x01, 0x7A, 0x93, 0x79, 0x83, 0x12, 0x55, 0x4D, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x05,
-0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x43, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF, 0xF0, 0xE4,
-0x90, 0x93, 0x26, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0,
-0x09, 0x90, 0x93, 0x04, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x0C, 0x7F, 0x01, 0x12, 0x55, 0x98, 0x90,
-0x93, 0x04, 0xE0, 0x54, 0xFD, 0xF0, 0x7F, 0x03, 0x51, 0xBF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xC0,
-0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01,
-0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x53, 0x91, 0xBF, 0x90,
-0xFD, 0x68, 0xE0, 0x20, 0xE0, 0x03, 0x02, 0x72, 0x0E, 0x90, 0x93, 0x94, 0xE0, 0x70, 0x16, 0x90,
-0x00, 0x2E, 0xE0, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x00, 0x2D, 0xE0, 0x90, 0x93, 0x10, 0xF0, 0x90,
-0x93, 0x94, 0x74, 0x01, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x54, 0x3F, 0xD3, 0x94, 0x09, 0x50, 0x03,
-0x12, 0x9B, 0xE0, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x0E, 0x60, 0x03, 0x02, 0x70, 0x93, 0x90, 0x93,
-0x04, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x20, 0xE0, 0x03, 0x02, 0x70, 0x93, 0x90, 0xFD,
-0x62, 0xE0, 0x54, 0xC0, 0xFE, 0x90, 0x07, 0x90, 0xE0, 0x54, 0x3F, 0x4E, 0xF0, 0x90, 0xFD, 0x63,
-0xE0, 0x90, 0x07, 0x91, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x07, 0x92, 0xF0, 0x90, 0xFD, 0x65,
-0xE0, 0x90, 0x07, 0x93, 0xF0, 0x90, 0x07, 0x95, 0x74, 0x01, 0xF0, 0xEF, 0x20, 0xE0, 0x44, 0x90,
-0x93, 0x04, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x19, 0x90, 0x07, 0x78, 0x12, 0x58, 0xF0,
-0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x49, 0x90, 0x07, 0x83, 0xE0, 0x44, 0x40,
-0xF0, 0x80, 0x40, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x11, 0xE4, 0xFF, 0x12,
-0x55, 0x98, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x07,
-0x78, 0x80, 0x14, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x90, 0x07, 0x78, 0x30,
-0xE0, 0x05, 0x12, 0x58, 0xF0, 0x80, 0x0C, 0xE0, 0x44, 0x10, 0xF0, 0xE0, 0x44, 0x20, 0xF0, 0xE0,
-0x54, 0xDF, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x0F, 0x0A, 0x90, 0xFD, 0x62, 0xE0, 0xFF, 0xA3,
-0xE0, 0xFD, 0x51, 0xCA, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x15, 0x70, 0x76, 0x90, 0xFD, 0x62, 0xE0,
-0x90, 0x93, 0x6A, 0xF0, 0xE0, 0x30, 0xE6, 0x1C, 0xF4, 0x54, 0x3F, 0x04, 0xFF, 0x90, 0x93, 0x0F,
-0xE0, 0x13, 0x13, 0x54, 0x3F, 0xC3, 0x9F, 0x90, 0x93, 0x69, 0xF0, 0xD3, 0x94, 0x3F, 0x40, 0x20,
-0xE4, 0xF0, 0x80, 0x1C, 0x90, 0x93, 0x0F, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0xFF, 0x90, 0x93, 0x6A,
-0xE0, 0x54, 0x3F, 0x2F, 0x90, 0x93, 0x69, 0xF0, 0xD3, 0x94, 0x3F, 0x40, 0x03, 0x74, 0x3F, 0xF0,
-0x90, 0x93, 0x69, 0xE0, 0xFF, 0x90, 0x01, 0xE7, 0xF0, 0xEF, 0x54, 0x30, 0xC4, 0x54, 0x0F, 0xFF,
-0x90, 0x93, 0x69, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x4F, 0x90, 0x93, 0x6B, 0xF0, 0x90, 0x00,
-0x2E, 0xF0, 0xEE, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x93, 0x10, 0xE0, 0x54, 0x0F, 0x4F, 0x90, 0x00,
-0x2D, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x16, 0x07, 0x90, 0xFD, 0x62, 0xE0, 0xFF, 0x51, 0x29,
-0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x21, 0x07, 0x90, 0xFD, 0x62, 0xE0, 0xFF, 0x51, 0x51, 0x90, 0xFD,
-0x60, 0xE0, 0xB4, 0x22, 0x02, 0x51, 0x79, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x23, 0x70, 0x7B, 0x90,
-0xFD, 0x62, 0xE0, 0x90, 0x93, 0x2C, 0x30, 0xE0, 0x05, 0x74, 0x01, 0xF0, 0x80, 0x02, 0xE4, 0xF0,
-0x90, 0xFD, 0x65, 0xE0, 0x30, 0xE1, 0x5B, 0x90, 0x93, 0x2D, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05,
-0x22, 0x74, 0xFF, 0xF0, 0x7F, 0x60, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0x32, 0x12, 0x1F,
-0xC9, 0xE4, 0xFF, 0x12, 0x50, 0xDC, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0x2E,
-0x12, 0x1F, 0xC9, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E,
-0x08, 0x12, 0x34, 0x30, 0x90, 0x01, 0xBE, 0xE0, 0x04, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93,
-0x2D, 0x30, 0xE2, 0x08, 0xE0, 0x54, 0x1F, 0x44, 0x20, 0xF0, 0x80, 0x06, 0xE0, 0x54, 0x1F, 0x44,
-0x60, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0xFF, 0x12, 0x9C, 0x4C, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x24,
-0x02, 0x51, 0xA1, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x25, 0x13, 0x90, 0xFD, 0x62, 0xE0, 0x60, 0x0D,
-0x90, 0x93, 0x1C, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x93, 0x24, 0x74, 0x04, 0xF0, 0x90, 0xFD, 0x60,
-0xE0, 0xB4, 0x26, 0x05, 0x7F, 0x01, 0x12, 0x9C, 0xE8, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x30, 0x07,
-0xE4, 0xFB, 0xFD, 0x7F, 0x01, 0x51, 0xF5, 0x90, 0xFD, 0x68, 0xE0, 0x44, 0x01, 0xF0, 0xD0, 0x07,
-0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0,
-0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xAD, 0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54,
-0xF0, 0x44, 0x07, 0xF0, 0x54, 0x0F, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x6E, 0xEF, 0xF0, 0x7B, 0x01,
-0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x57,
-0x1F, 0xAD, 0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x09, 0xF0, 0x54, 0x0F, 0x44, 0x10,
-0xF0, 0x90, 0x93, 0x6E, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12,
-0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x57, 0x1F, 0x90, 0x00, 0x75, 0xE0, 0x44, 0x01, 0xF0,
-0x7F, 0x01, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0x74, 0x03, 0xF0, 0x7F, 0x02, 0x7E,
-0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0xE4, 0xF0, 0x90, 0x00, 0x75, 0xE0, 0x54, 0xFE, 0xF0,
-0x22, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x0D, 0xF0, 0x54, 0x0F, 0x44, 0x10, 0xF0, 0x90,
-0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6E, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19,
-0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x57, 0x1F, 0xAE, 0x07, 0x90, 0x93, 0x6C, 0xE0,
-0x54, 0xF0, 0x44, 0x04, 0xF0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x6E, 0xEE, 0xF0, 0xA3,
-0xED, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93,
-0x79, 0x6C, 0x02, 0x57, 0x1F, 0xAC, 0x07, 0x90, 0x93, 0xD9, 0xE0, 0x44, 0x0F, 0xF0, 0x54, 0x0F,
-0x44, 0x70, 0xF0, 0x90, 0x93, 0xDB, 0xEC, 0xF0, 0x60, 0x32, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93,
-0xDC, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0x90, 0x93, 0xDD, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93,
-0xDE, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0xDF, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93,
-0xE0, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0xE1, 0xF0, 0x80, 0x11, 0x90, 0x93, 0xDC, 0xED,
-0xF0, 0xA3, 0xEB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A,
-0x93, 0x79, 0xDB, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0xD9, 0x02, 0x57, 0x1F,
-0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x83, 0xF0, 0x90, 0x00,
-0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x84, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93,
-0x85, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x86, 0xF0, 0x90, 0x00, 0x04, 0x12,
-0x1F, 0x0F, 0x90, 0x93, 0x87, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0xFD, 0x58, 0xE0, 0x20,
-0xE0, 0x15, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x83, 0x7F, 0x30, 0x12, 0x98, 0x37, 0x90, 0x93, 0x83,
-0xE0, 0xFB, 0x7D, 0x01, 0xE4, 0x80, 0x07, 0x90, 0x93, 0x83, 0xE0, 0xFB, 0xE4, 0xFD, 0xFF, 0x51,
-0xF5, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x80, 0x12, 0x43, 0xC8, 0xEF, 0x12, 0x43, 0xD1,
-0x74, 0x73, 0x01, 0x74, 0x6A, 0x02, 0x74, 0xBB, 0x03, 0x74, 0xC4, 0x05, 0x74, 0xCD, 0x06, 0x76,
-0x24, 0x07, 0x74, 0xD6, 0x0B, 0x74, 0xDF, 0x10, 0x74, 0xE7, 0x11, 0x74, 0xEF, 0x12, 0x74, 0xF7,
-0x13, 0x75, 0x00, 0x14, 0x75, 0x09, 0x15, 0x75, 0x11, 0x16, 0x75, 0x1B, 0x17, 0x75, 0x25, 0x18,
-0x75, 0x2F, 0x19, 0x75, 0xF1, 0x1B, 0x75, 0xFA, 0x1C, 0x75, 0x38, 0x1D, 0x75, 0x42, 0x1E, 0x75,
-0x4D, 0x21, 0x75, 0x55, 0x22, 0x75, 0x5D, 0x23, 0x75, 0x65, 0x24, 0x75, 0x6D, 0x25, 0x75, 0x75,
-0x26, 0x75, 0x7D, 0x27, 0x75, 0x86, 0x28, 0x75, 0x8F, 0x29, 0x74, 0x7C, 0x2D, 0x74, 0x85, 0x2E,
-0x75, 0x98, 0x2F, 0x76, 0x03, 0x30, 0x75, 0xA9, 0x32, 0x75, 0xA0, 0x33, 0x74, 0x97, 0x34, 0x75,
-0xB2, 0x36, 0x75, 0xBB, 0x37, 0x75, 0xC4, 0x38, 0x75, 0xCD, 0x3A, 0x74, 0x8E, 0x3B, 0x75, 0xD6,
-0x3E, 0x75, 0xDF, 0x3F, 0x75, 0xE8, 0x41, 0x76, 0x0C, 0x46, 0x74, 0xA0, 0x47, 0x74, 0xB2, 0x48,
-0x74, 0xA9, 0x49, 0x76, 0x14, 0x4B, 0x00, 0x00, 0x76, 0x1D, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8,
-0x02, 0x90, 0x7B, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x81, 0x90, 0x93, 0x80, 0x12,
-0x43, 0xA8, 0x02, 0x91, 0x62, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x91, 0xAA, 0x90, 0x93,
-0x80, 0x12, 0x43, 0xA8, 0x02, 0x91, 0xE3, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x92, 0x15,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x92, 0x1B, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x92, 0xDB, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x98, 0x2F, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x02, 0x92, 0xEC, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x41, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xA8, 0x02, 0x8F, 0x13, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x9E, 0x90,
-0x93, 0x80, 0x12, 0x43, 0xA8, 0xC1, 0x25, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xC1, 0x2B, 0x90,
-0x93, 0x80, 0x12, 0x43, 0xA8, 0xE1, 0x52, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x93, 0x34,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x93, 0x4E, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xC1,
-0xBE, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x01, 0x80, 0x2F, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x7F, 0x02, 0x80, 0x25, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x03, 0x80, 0x1B, 0x90,
-0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x95, 0x16, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xE4, 0xFF,
-0x80, 0x08, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x04, 0x02, 0x94, 0x34, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xA8, 0xE1, 0x67, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xE1, 0x7F, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xA8, 0xE1, 0x97, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xE1, 0xAF, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xA8, 0xE1, 0xC7, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xE1, 0xDF, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xA8, 0x02, 0x95, 0x4E, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x95, 0x67, 0x90,
-0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x95, 0x80, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xE1, 0x58,
-0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x95, 0xA8, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
-0x95, 0xC1, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x95, 0xDA, 0x90, 0x93, 0x80, 0x12, 0x43,
-0xA8, 0x02, 0x97, 0x8D, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x97, 0x9F, 0x90, 0x93, 0x80,
-0x12, 0x43, 0xA8, 0x02, 0x6C, 0x79, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x97, 0xC2, 0x90,
-0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x97, 0xDB, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x98,
-0x16, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x6D, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8,
-0x02, 0x8F, 0x29, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x9A, 0x96, 0x90, 0x93, 0x80, 0x12,
-0x43, 0xA8, 0x61, 0x60, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x98, 0x81, 0x90, 0x01, 0xC6,
-0xE0, 0x44, 0x01, 0xF0, 0x22, 0x7D, 0x05, 0x7F, 0x0B, 0x80, 0x0A, 0x7D, 0x01, 0x7F, 0x0C, 0x80,
-0x04, 0x7D, 0x03, 0x7F, 0x11, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x41, 0x12,
-0x43, 0xC8, 0xE4, 0xFE, 0x90, 0x00, 0xA3, 0xE0, 0x54, 0xF8, 0x44, 0x05, 0xF0, 0x90, 0x00, 0xA0,
-0xE0, 0x54, 0x0F, 0x64, 0x04, 0x70, 0x5A, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x49, 0x90, 0xFD,
-0x50, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xEE, 0xC3, 0x9D, 0x50, 0x1E, 0x90, 0x94, 0x41, 0x12, 0x43,
-0xA8, 0x8E, 0x82, 0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x52, 0x2E, 0xF5, 0x82, 0xE4,
-0x34, 0xFD, 0xF5, 0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDD, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x0F, 0x74,
-0x52, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5, 0x83, 0xE4, 0xF0, 0x0E, 0x80, 0xEB, 0x90, 0xFD,
-0x58, 0x74, 0x01, 0xF0, 0xFF, 0x80, 0x12, 0x90, 0x01, 0x43, 0xE0, 0x04, 0xF0, 0x7F, 0x02, 0x80,
-0x08, 0x90, 0x01, 0x42, 0xE0, 0x04, 0xF0, 0x7F, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93,
-0x83, 0x12, 0x43, 0xC8, 0xE4, 0x90, 0x93, 0x86, 0xF0, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x42, 0x90,
-0x07, 0x78, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x07, 0x83, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x07, 0x78,
-0xE0, 0x44, 0x80, 0x54, 0xBF, 0xF0, 0x90, 0x93, 0x86, 0x74, 0x01, 0xF0, 0xFB, 0x7A, 0x93, 0x79,
-0x86, 0xFD, 0x7F, 0x1A, 0xD1, 0x35, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0x30,
-0xE1, 0x4F, 0x90, 0x93, 0x04, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x06, 0xF0,
-0x22, 0x90, 0x93, 0x04, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x54, 0x3F, 0xF0, 0x90,
-0x07, 0x83, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x07, 0x95, 0xE0, 0x54, 0xF9, 0xF0, 0x90, 0x93, 0x0B,
-0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x80, 0x7E, 0x08, 0x12, 0x34, 0x30,
-0xE4, 0x90, 0x93, 0x86, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x86, 0x7D, 0x01, 0x7F, 0x1A, 0xD1,
-0x35, 0x22, 0x7D, 0x01, 0x7F, 0x0D, 0xC1, 0x35, 0x12, 0x1E, 0xF6, 0xFF, 0xE9, 0x24, 0x01, 0xF9,
-0xE4, 0x3A, 0xFA, 0x7D, 0x04, 0xC1, 0x35, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86,
-0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x17, 0xC1, 0x35, 0x90,
-0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xA8, 0x7D, 0x01, 0x7F, 0x18, 0xC1, 0x35, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86,
-0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x19, 0xC1, 0x35, 0x90,
-0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xA8, 0x7D, 0x01, 0x7F, 0x1A, 0xC1, 0x35, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86,
-0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1B, 0xC1, 0x35, 0x90,
-0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xA8, 0x7D, 0x01, 0x7F, 0x1C, 0xC1, 0x35, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01,
-0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFD, 0x70, 0x02, 0x21,
-0x40, 0x90, 0x94, 0x4A, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3,
-0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0x21, 0x39, 0x90, 0x94, 0x4A,
-0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x79, 0xF0, 0x75,
-0x20, 0x01, 0x75, 0x21, 0x93, 0x75, 0x22, 0x79, 0x75, 0x23, 0x01, 0x7B, 0x01, 0x7A, 0x93, 0x79,
-0x7A, 0x12, 0x56, 0xD0, 0x90, 0x93, 0x7A, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90,
-0x94, 0x4A, 0x30, 0xE0, 0x59, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x88, 0x12, 0x43, 0x9C, 0xE0,
-0x90, 0x93, 0x7B, 0xF0, 0x90, 0x94, 0x4A, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x89, 0x12, 0x43,
-0x9C, 0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90, 0x94, 0x4A, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1,
-0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D, 0xF0, 0x90, 0x94, 0x4A, 0xE0, 0x75, 0xF0, 0x04, 0x90,
-0x01, 0xD2, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7E, 0xF0, 0x90, 0x94, 0x4A, 0xE0, 0x75, 0xF0,
-0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7F, 0xF0, 0x80, 0x33, 0xE0, 0x75,
-0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7B, 0xF0, 0x90, 0x94, 0x4A,
-0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90,
-0x94, 0x4A, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D,
-0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x7B, 0x12, 0x73, 0xC6, 0x90, 0x93,
-0x78, 0xE0, 0xFF, 0x90, 0x94, 0x4A, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3,
-0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x94, 0x4A, 0xE0, 0xFF, 0x74, 0x01,
-0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x94, 0x4A,
-0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x01, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02, 0xF0,
-0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x22, 0x12,
-0x43, 0xC8, 0x90, 0x94, 0x25, 0xE0, 0x54, 0xF0, 0x44, 0x06, 0xFF, 0xF0, 0xED, 0x54, 0x0F, 0xC4,
-0x54, 0xF0, 0xFE, 0xEF, 0x54, 0x0F, 0x4E, 0xF0, 0x90, 0x94, 0x22, 0x12, 0x43, 0xA8, 0x90, 0x94,
-0x19, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x25, 0x12, 0x57, 0x1F, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x0E, 0x74,
-0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED, 0xF0, 0x80, 0x29, 0x74, 0x27, 0x2F,
-0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xED, 0xF0, 0x90, 0x93, 0xCC, 0xEF, 0xF0, 0x24, 0x27,
-0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0xCD, 0xF0, 0x7B, 0x01, 0x7A, 0x93,
-0x79, 0xCC, 0x7D, 0x02, 0x31, 0x45, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09,
-0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x62, 0xF0, 0x74, 0x28, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x54, 0x1F, 0x90, 0x93, 0x61, 0xF0, 0x74, 0xE8, 0x2D,
-0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4,
-0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x5D, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4,
-0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x85, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
-0xE0, 0xFF, 0x74, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x85,
-0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x74, 0xC6,
-0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4,
-0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0xC8, 0x40, 0x0D, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4,
-0x34, 0x8E, 0xF5, 0x83, 0x74, 0xC8, 0xF0, 0x90, 0x93, 0x62, 0xE0, 0xFF, 0x90, 0x93, 0x61, 0xE0,
-0xD3, 0x9F, 0x40, 0x02, 0xEF, 0xF0, 0x90, 0x93, 0x61, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5,
-0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0,
-0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93,
-0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34,
-0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x05, 0x90, 0x93, 0x61, 0xE0, 0xFD, 0x31,
-0x82, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x12, 0x90, 0x04, 0x30, 0xE0, 0x70,
-0x0C, 0x04, 0xF0, 0xA3, 0xF0, 0xA3, 0x04, 0xF0, 0x90, 0x04, 0xCF, 0x04, 0xF0, 0x90, 0x93, 0x61,
-0xE0, 0xFF, 0x22, 0xAC, 0x07, 0xEC, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2C, 0xF5, 0x82,
-0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x80, 0x11, 0x74, 0x27,
-0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x90,
-0x93, 0x88, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x93, 0x8B, 0xF0, 0x75, 0xF0, 0x09, 0xEC, 0x90, 0x8A,
-0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x8D, 0xF0, 0x75, 0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x88,
-0x12, 0x43, 0x9C, 0xE0, 0xFE, 0x90, 0x93, 0x8E, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82,
-0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x8F, 0xCB, 0xF0, 0xA3, 0xEB,
-0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3,
-0xE0, 0x90, 0x93, 0x91, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x74, 0xC6, 0x2C, 0xF5, 0x82, 0xE4, 0x34,
-0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C, 0x90, 0x93, 0x8E, 0xE0, 0x90, 0x93,
-0x8B, 0xF0, 0x90, 0x93, 0x88, 0xF0, 0xED, 0x70, 0x02, 0x81, 0x5D, 0x90, 0x93, 0x8C, 0xED, 0xF0,
-0x90, 0x93, 0x88, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x93, 0x8B, 0xE0, 0x90, 0x93, 0x88, 0xF0, 0x90,
-0x93, 0x8C, 0xE0, 0x14, 0xF0, 0x90, 0x93, 0x8C, 0xE0, 0x70, 0x02, 0x81, 0x5D, 0x90, 0x93, 0x8B,
-0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02, 0x81, 0x5D, 0xE4, 0x90, 0x93, 0x8A, 0xF0, 0xEF, 0x14,
-0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x8D, 0xE0, 0xFD, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0xD3, 0x9D,
-0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8,
-0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x91, 0xE0,
-0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0xC3, 0x94, 0x10,
-0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
-0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8F, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x1A, 0x90,
-0x93, 0x89, 0xE0, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x8C,
-0xE0, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0x6F, 0x60, 0x08, 0x90, 0x93, 0x89, 0xE0, 0x14, 0xF0, 0x80,
-0x83, 0x90, 0x93, 0x8C, 0xE0, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0xC3, 0x9F, 0x50, 0x0F, 0x90, 0x93,
-0x89, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x93, 0x8D, 0xE0, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x88,
-0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA,
-0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83,
-0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xEC, 0x25,
-0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF,
-0x04, 0x90, 0x93, 0x88, 0xE0, 0xFD, 0x31, 0x82, 0x90, 0x93, 0x88, 0xE0, 0xFF, 0x22, 0xAD, 0x07,
-0xED, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83,
-0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x80, 0x11, 0x74, 0x27, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
-0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0xF9, 0x54,
-0x1F, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0xFF, 0x90,
-0x93, 0x8B, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0,
-0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x8C, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47,
-0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x8E, 0xCB, 0xF0,
-0xA3, 0xEB, 0xF0, 0x90, 0x93, 0x89, 0xE0, 0xFE, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34,
-0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5,
-0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB, 0xF0, 0xEE, 0xC3, 0x9F, 0x40, 0x02,
-0xC1, 0x0B, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5,
-0x83, 0xEF, 0xF0, 0xEF, 0x04, 0x90, 0x93, 0x8A, 0xF0, 0x90, 0x93, 0x8B, 0xE0, 0xFF, 0x90, 0x93,
-0x8A, 0xE0, 0xFE, 0xD3, 0x9F, 0x40, 0x02, 0xC1, 0x45, 0xEE, 0xC3, 0x94, 0x10, 0x40, 0x21, 0xEE,
-0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
-0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8C, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27,
-0x90, 0x93, 0x8A, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07,
-0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8E, 0xE0, 0x5E,
-0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x93, 0x8A, 0xE0, 0xB4, 0x11, 0x0D, 0x90, 0x93,
-0x8D, 0xE0, 0x30, 0xE7, 0x06, 0x90, 0x93, 0x8A, 0x74, 0x17, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0xFF,
-0x64, 0x13, 0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x93, 0x8C, 0xE0, 0x30, 0xE0, 0x06, 0x90,
-0x93, 0x8A, 0x74, 0x18, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x88,
-0xF0, 0x80, 0x42, 0x90, 0x93, 0x8A, 0xE0, 0x04, 0xF0, 0xA1, 0x69, 0x90, 0x93, 0x8B, 0xE0, 0xFC,
-0x90, 0x93, 0x89, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92,
-0xF5, 0x83, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0xE0, 0xB4,
-0x01, 0x10, 0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x93, 0x89, 0xE0, 0x44, 0x40, 0x90, 0x93, 0x88, 0xF0,
-0x80, 0x03, 0xAF, 0x01, 0x22, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82,
-0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24,
-0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A,
-0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A,
-0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90, 0x93, 0x89, 0xE0, 0xD3, 0x9C, 0x40,
-0x5E, 0x90, 0x93, 0x8B, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83,
-0xEF, 0xF0, 0x90, 0x93, 0x89, 0xEF, 0xF0, 0x90, 0x93, 0x88, 0xF0, 0xFC, 0xA3, 0xE0, 0xFF, 0x25,
-0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93,
-0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93,
-0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02,
-0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x22, 0x74,
-0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0x05, 0x90, 0x93, 0x88,
-0xE0, 0x44, 0x80, 0xFD, 0x31, 0x82, 0x90, 0x93, 0x88, 0xE0, 0x44, 0x80, 0xFF, 0x22, 0xEF, 0xC3,
-0x94, 0x20, 0x50, 0x39, 0xEF, 0x30, 0xE0, 0x17, 0xED, 0xC4, 0x54, 0xF0, 0xFD, 0xEF, 0xC3, 0x13,
-0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x0F, 0x80, 0x10, 0xEF,
-0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0,
-0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x4D, 0xF0, 0x22, 0xE4, 0x90,
-0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x40, 0x40, 0x03, 0x02, 0x87, 0x50,
-0xEF, 0xB4, 0x20, 0x14, 0x90, 0x8F, 0x46, 0xE0, 0x04, 0xF0, 0x90, 0x89, 0x01, 0xE0, 0xFF, 0x90,
-0x8F, 0x46, 0xE0, 0xB5, 0x07, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x75, 0xF0, 0x09,
-0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, 0x87, 0x47, 0xEF, 0x25,
-0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x94,
-0x00, 0xEE, 0x94, 0x00, 0x50, 0x03, 0x02, 0x87, 0x47, 0x90, 0x93, 0x78, 0xE0, 0x94, 0x20, 0x40,
-0x09, 0x90, 0x8F, 0x46, 0xE0, 0x60, 0x03, 0x02, 0x87, 0x50, 0x90, 0x93, 0x78, 0xE0, 0x75, 0xF0,
-0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C,
-0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xFD, 0xA3,
-0xE0, 0x90, 0x93, 0x7D, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82,
-0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93, 0x7F, 0xCF, 0xF0, 0xA3, 0xEF,
-0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2F, 0xF5, 0x82,
-0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93, 0x79, 0xF0, 0x80, 0x14, 0x90, 0x93,
-0x78, 0xE0, 0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93,
-0x79, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFE, 0x54, 0x1F, 0xA3, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF,
-0x75, 0xF0, 0x09, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x82, 0xF0, 0x74, 0x67,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x02, 0x41, 0xE5,
-0x90, 0x93, 0x82, 0xE0, 0xFF, 0x90, 0x93, 0x7A, 0xE0, 0x9F, 0x40, 0x13, 0x90, 0x93, 0x82, 0xE0,
-0x90, 0x93, 0x7A, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0x90, 0x93, 0x79, 0xF0, 0xEF, 0x4E, 0xF0, 0x90,
-0x93, 0x7A, 0xE0, 0xFF, 0x90, 0x41, 0x18, 0x93, 0xFE, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x85, 0xF5,
-0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x40, 0x06, 0xEF, 0x90, 0x40, 0xE0, 0x80,
-0x07, 0x90, 0x93, 0x7A, 0xE0, 0x90, 0x40, 0xFC, 0x93, 0x90, 0x93, 0x81, 0xF0, 0x90, 0x93, 0x81,
-0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x56, 0xF9, 0x74, 0x40, 0x35, 0xF0, 0xFA, 0x7B, 0xFF, 0x8B,
-0x57, 0xF5, 0x58, 0x89, 0x59, 0x90, 0x93, 0x78, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
-0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93, 0x7B, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0,
-0x12, 0x1E, 0xF6, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x9D, 0xFD,
-0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57,
-0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90,
-0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00,
-0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x04,
-0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12,
-0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x7E,
-0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x06, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0,
-0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58,
-0xA9, 0x59, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9,
-0x5C, 0x90, 0x00, 0x08, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B,
-0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x05, 0x12,
-0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7D, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C,
-0xD3, 0x90, 0x93, 0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F,
-0xF0, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0xF0, 0x80, 0x07, 0xE4, 0x90, 0x93, 0x7B, 0xF0, 0xA3, 0xF0,
-0x90, 0x93, 0x7B, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0x78, 0xE0, 0x25, 0xE0, 0x24, 0x02,
-0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x79, 0xE0,
-0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFC, 0x74, 0x01,
-0x93, 0xFD, 0xD3, 0xEF, 0x9D, 0xEE, 0x9C, 0x50, 0x02, 0x41, 0xB4, 0x90, 0x93, 0x78, 0xE0, 0xFF,
-0x24, 0x82, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82,
-0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9E, 0x40, 0x03, 0xEF, 0x80, 0x1C, 0x90, 0x93,
-0x78, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x82,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x90, 0x93, 0x83, 0xF0, 0x90,
-0x93, 0x83, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x02, 0x80, 0x23, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24,
-0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x01, 0x40, 0x0F, 0x74, 0xC6,
-0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x14, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x78,
-0xE0, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x78, 0xE0,
-0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x60, 0x02, 0xA1, 0xF5, 0x12,
-0x7C, 0xAE, 0xA1, 0xF5, 0x90, 0x93, 0x79, 0xE0, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34,
-0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xC3, 0x90, 0x93, 0x7C, 0xE0, 0x9F,
-0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x40, 0x02, 0xA1, 0xF5, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x7D, 0x01,
-0x12, 0x7A, 0xE3, 0xA1, 0xF5, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34,
-0x91, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x02, 0x81, 0xC3, 0x90, 0x8A, 0x83, 0xE0, 0xFE,
-0xB4, 0x03, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x19, 0x40, 0x3D, 0x80, 0x2E, 0xEE, 0xB4,
-0x02, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x11, 0x40, 0x2E, 0x80, 0x1F, 0x90, 0x8A, 0x83,
-0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x1B, 0x80, 0x0C,
-0xEE, 0x70, 0x11, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x03, 0x40, 0x0D, 0x90, 0x8E, 0xC5, 0x74,
-0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x8E, 0xC5, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFE, 0x24, 0xC4,
-0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x87, 0xF0, 0x74, 0x85, 0x2E, 0xF5,
-0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0xC3, 0x94, 0x30, 0x50, 0x0A, 0xE4, 0x90, 0x93,
-0x87, 0xF0, 0x74, 0x67, 0x2F, 0x81, 0x6E, 0x90, 0x8E, 0xC5, 0xE0, 0x64, 0x01, 0x60, 0x02, 0x81,
-0x63, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x64,
-0x0A, 0x60, 0x5B, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xEE, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74,
-0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9B, 0xEA, 0x64, 0x80,
-0xF8, 0x74, 0x80, 0x98, 0x50, 0x38, 0x90, 0x93, 0x78, 0xE0, 0xFE, 0xEF, 0x24, 0x05, 0xFB, 0xE4,
-0x33, 0xFA, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x9B, 0xEA,
-0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x16, 0x90, 0x93, 0x78, 0xE0, 0x24, 0xA7, 0xF5, 0x82,
-0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x7A, 0xE0, 0x6F, 0x60, 0x56, 0x90, 0x93,
-0x78, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x42,
-0x40, 0x08, 0x90, 0x93, 0x87, 0x74, 0x05, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0x39, 0x90, 0x93,
-0x87, 0x40, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF,
-0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x41, 0x2F, 0xF5, 0x82,
-0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0x80, 0x2F, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91,
-0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x04,
-0xF0, 0x80, 0x14, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x67, 0xF5, 0x82,
-0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x7A, 0xE0, 0xFE, 0x90, 0x93, 0x78, 0xE0,
-0xFF, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x87, 0xE0,
-0xFE, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xEE, 0xF0, 0x75, 0xF0, 0x09,
-0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01, 0x11, 0xE4, 0x90, 0x93, 0x87, 0xF0,
-0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x87, 0xE0,
-0xFD, 0xA1, 0xF2, 0xEC, 0x64, 0x06, 0x60, 0x02, 0xA1, 0xF5, 0x90, 0x93, 0x7B, 0xF0, 0xA3, 0xF0,
-0x90, 0x41, 0xE1, 0x93, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7D, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12,
-0x1F, 0x3C, 0x90, 0x93, 0x85, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x24, 0xC4,
-0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x87, 0xF0, 0xE4, 0x90, 0x93, 0x84,
-0xF0, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0xD3, 0x94, 0x04, 0x50, 0x47, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9,
-0x5C, 0x75, 0xF0, 0x02, 0xEF, 0xA4, 0xF5, 0x82, 0x85, 0xF0, 0x83, 0x12, 0x42, 0xC8, 0xFD, 0xAC,
-0xF0, 0xEF, 0x90, 0x41, 0xDC, 0x93, 0xFF, 0x7E, 0x00, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE,
-0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0x85, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x93,
-0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x84, 0xE0, 0x04, 0xF0,
-0x80, 0xAF, 0x90, 0x93, 0x84, 0xE0, 0xC3, 0x13, 0xF0, 0x90, 0x93, 0x87, 0xE0, 0xFF, 0xB4, 0x01,
-0x0D, 0x90, 0x93, 0x84, 0xE0, 0x70, 0x5D, 0x90, 0x93, 0x87, 0x04, 0xF0, 0x80, 0x5B, 0xEF, 0xB4,
-0x03, 0x1D, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93, 0x87, 0x74, 0x03, 0xF0, 0x80,
-0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x87, 0x74, 0x01, 0xF0, 0x80, 0x3C, 0x80, 0x35, 0x90,
-0x93, 0x87, 0xE0, 0x64, 0x05, 0x70, 0x32, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93,
-0x87, 0x74, 0x05, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x93, 0x87, 0xB4, 0x01, 0x05, 0x74, 0x03, 0xF0,
-0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3, 0x90, 0x93, 0x80, 0xE0, 0x94, 0x03, 0x90, 0x93, 0x7F, 0xE0,
-0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0xD3, 0x90, 0x93, 0x80, 0xE0, 0x94, 0x03,
-0x90, 0x93, 0x7F, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0x90, 0x93, 0x87,
-0xE0, 0xFD, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83,
-0xED, 0xF0, 0x12, 0x7F, 0x0E, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34,
-0x91, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x05, 0x50, 0x0F, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
-0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x67, 0xF5, 0x82,
-0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x7F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3,
-0x74, 0xFF, 0x9F, 0xFF, 0x74, 0xFF, 0x9E, 0xFE, 0x90, 0x93, 0x78, 0xE0, 0xFD, 0x25, 0xE0, 0x24,
-0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0xD3, 0x9F, 0xEA, 0x9E,
-0x50, 0x1C, 0x90, 0x93, 0x7F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5,
-0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x80, 0x14, 0x90, 0x93,
-0x78, 0xE0, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0,
-0xA3, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D,
-0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0x74, 0xFF, 0x9D, 0xFB, 0x74, 0xFF, 0x9C, 0xFA,
-0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
-0xD3, 0x9B, 0xEE, 0x9A, 0x90, 0x93, 0x78, 0xE0, 0x50, 0x13, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82,
-0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEC, 0x8D, 0xF0, 0x12, 0x42, 0x87, 0x80, 0x10, 0x25, 0xE0, 0x24,
-0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90,
-0x00, 0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x04, 0xE4, 0xF5, 0xF0, 0x12, 0x43,
-0x1F, 0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x08, 0xE4, 0xF5, 0xF0,
-0x12, 0x43, 0x1F, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34,
-0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34,
-0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34,
-0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x04, 0xF0, 0x02, 0x7F, 0x53,
-0x22, 0x90, 0x04, 0x44, 0x74, 0x11, 0xF0, 0xA3, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3,
-0xE4, 0xF0, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x14,
-0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x78, 0xE0,
-0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8F, 0x46, 0xF0, 0x90, 0x89, 0x01, 0x04, 0xF0, 0xE4, 0x90,
-0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x40, 0x40, 0x03, 0x02, 0x89, 0x4C,
-0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0,
-0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF,
-0x90, 0x84, 0x04, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84,
-0x06, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x08, 0x12,
-0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0xA7, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83,
-0x74, 0x13, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x74,
-0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x80,
-0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04,
-0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x05,
-0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x84,
-0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x47,
-0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xC7,
-0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0x07, 0x2F, 0xF5, 0x82,
-0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC7, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
-0x83, 0xE4, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90,
-0x8E, 0x04, 0xF0, 0x90, 0x41, 0x92, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0x90, 0x41, 0x5A, 0x74,
-0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0x90, 0x93, 0x78,
-0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3,
-0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x75,
-0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x74, 0xC2, 0x2D, 0xF5,
-0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0C, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x86,
-0x12, 0x43, 0x9C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x84, 0x12,
-0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12,
-0x43, 0x9C, 0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE4,
-0xF0, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x0F, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5,
-0x83, 0x74, 0x13, 0xF0, 0x80, 0x0D, 0x74, 0x27, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83,
-0x74, 0x13, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x04, 0xF0, 0x02, 0x87, 0x93, 0x22, 0x8F, 0x57, 0xEF,
-0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xAF, 0x82, 0xF5, 0x58, 0x8F, 0x59, 0xE5,
-0x57, 0x75, 0xF0, 0x02, 0xA4, 0x24, 0x02, 0xF9, 0x74, 0x89, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5,
-0x5B, 0x89, 0x5C, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAF, 0x82,
-0x85, 0x83, 0x5D, 0x8F, 0x5E, 0xE5, 0x57, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A,
-0x35, 0xF0, 0x75, 0x5F, 0x01, 0xF5, 0x60, 0x89, 0x61, 0x74, 0xC2, 0x25, 0x57, 0xF5, 0x82, 0xE4,
-0x34, 0x89, 0xF5, 0x83, 0xE0, 0x12, 0x43, 0xD1, 0x89, 0xCD, 0x00, 0x89, 0xE2, 0x01, 0x89, 0xF7,
-0x02, 0x8A, 0x0C, 0x03, 0x8A, 0x35, 0x04, 0x8A, 0x4A, 0x05, 0x8A, 0x5F, 0x06, 0x8A, 0x85, 0x0C,
-0x8A, 0xB2, 0x0D, 0x8A, 0xDF, 0x0E, 0x8B, 0x0C, 0x0F, 0x00, 0x00, 0x8B, 0x40, 0xE5, 0x57, 0x25,
-0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15,
-0x80, 0x3C, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74,
-0xF0, 0xF0, 0xA3, 0x74, 0x10, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
-0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x05, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0,
-0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5,
-0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3,
-0x74, 0x8F, 0xF0, 0x61, 0x40, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
-0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF5, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47,
-0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5,
-0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74,
-0x0D, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4,
-0xF0, 0xA3, 0xF0, 0x61, 0x40, 0x90, 0x04, 0x47, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12,
-0x42, 0x53, 0x90, 0x04, 0x46, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12,
-0x42, 0x65, 0x90, 0x04, 0x45, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x44,
-0x61, 0x37, 0x90, 0x04, 0x4B, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90,
-0x04, 0x4A, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90,
-0x04, 0x49, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90,
-0x04, 0x4F, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4E, 0xE0,
-0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x4D, 0xE0,
-0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0,
-0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x52, 0xE0, 0xAB, 0x5A, 0xAA,
-0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x51, 0xE0, 0x85, 0x59, 0x82,
-0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x50, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xF0,
-0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF,
-0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x12, 0x1E, 0xF6, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03,
-0x12, 0x42, 0x53, 0xAB, 0x5A, 0xE5, 0x5C, 0x24, 0x01, 0xF9, 0xE4, 0x35, 0x5B, 0xFA, 0xC0, 0x03,
-0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x90, 0x00,
-0x01, 0x12, 0x1F, 0x0F, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0x85, 0x59,
-0x82, 0x85, 0x58, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83,
-0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3,
-0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xA3, 0xE0, 0xFE, 0xEF,
-0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34,
-0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x4B, 0x90, 0x93, 0x8F, 0x74, 0x0B, 0xF0,
-0x90, 0x93, 0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x50, 0x02, 0x81, 0x85, 0x74, 0x01, 0x7E, 0x00,
-0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25,
-0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F,
-0x4E, 0x60, 0x0A, 0x90, 0x93, 0x8F, 0xE0, 0x24, 0x10, 0xA3, 0xF0, 0x80, 0x68, 0x90, 0x93, 0x8F,
-0xE0, 0x14, 0xF0, 0x80, 0xBB, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
-0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x47, 0x90, 0x93, 0x8F, 0x74, 0x0F, 0xF0, 0x90,
-0x93, 0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x40, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
-0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47,
-0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08,
-0x90, 0x93, 0x8F, 0xE0, 0xA3, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0x8F, 0xE0, 0x14, 0xF0, 0x80, 0xBF,
-0xE4, 0x90, 0x93, 0x90, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
-0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x8F, 0xF0, 0x90, 0x93,
-0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x40, 0x02, 0xA1, 0x3E, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07,
-0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24,
-0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60,
-0x06, 0x90, 0x93, 0x8F, 0xE0, 0x80, 0x63, 0x90, 0x93, 0x8F, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5,
-0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
-0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x8F, 0xF0, 0x90, 0x93, 0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x0C,
-0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
-0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
-0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x93, 0x8F, 0xE0, 0x24, 0x10, 0x80,
-0x09, 0x90, 0x93, 0x8F, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x91, 0xF0, 0x90, 0x93,
-0x90, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xEF, 0xF0,
-0x90, 0x93, 0x91, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C,
-0xEE, 0xF0, 0xE5, 0x57, 0xC3, 0x94, 0x20, 0x50, 0x2C, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4,
-0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3, 0x9F, 0x40, 0x02, 0x80, 0x47, 0x74, 0x84, 0x25, 0x57, 0xF5,
-0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x91, 0xE0, 0xA3,
-0xF0, 0x80, 0x37, 0x80, 0x2D, 0x74, 0x27, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83,
-0xE0, 0xFF, 0x90, 0x93, 0x90, 0xE0, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x07, 0x90, 0x93, 0x92, 0xEE,
-0xF0, 0x80, 0x17, 0x90, 0x93, 0x91, 0xE0, 0xFE, 0xEF, 0xC3, 0x9E, 0x50, 0x05, 0xA3, 0xEE, 0xF0,
-0x80, 0x08, 0x90, 0x93, 0x90, 0xE0, 0x90, 0x93, 0x92, 0xF0, 0x90, 0x93, 0x92, 0xE0, 0xFD, 0xAF,
-0x57, 0x12, 0x79, 0x82, 0x90, 0x93, 0x92, 0xE0, 0xFF, 0x74, 0xA7, 0x25, 0x57, 0xF5, 0x82, 0xE4,
-0x34, 0x91, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x90, 0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07,
-0x90, 0x8A, 0x83, 0x74, 0x03, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x0B, 0x40, 0x07, 0x90, 0x8A, 0x83,
-0x74, 0x02, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x03, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x01, 0xF0,
-0x22, 0xE4, 0x90, 0x8A, 0x83, 0xF0, 0x22, 0x90, 0x93, 0x83, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3,
-0x12, 0x43, 0xC8, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54,
-0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x54, 0x40,
-0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x83, 0xE0, 0xFF, 0x75, 0xF0,
-0x09, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAD, 0x82, 0xAC, 0x83, 0x90, 0x93, 0x8A, 0xEC, 0xF0,
-0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35, 0xF0, 0xFA,
-0x7B, 0x01, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12,
-0x1F, 0x0F, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x8C, 0x12, 0x43, 0xA8, 0xEF, 0x12, 0x42, 0x53, 0x90,
-0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x8C, 0x12,
-0x43, 0xA8, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x65, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8, 0x90,
-0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xF5, 0x82,
-0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0x8D, 0x82, 0x8C, 0x83, 0xA3, 0xF0, 0x90, 0x93, 0x88,
-0xE0, 0xFE, 0x90, 0x93, 0x83, 0xE0, 0xFF, 0x24, 0xC2, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
-0xEE, 0xF0, 0x90, 0x93, 0x84, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8A, 0x12, 0x43,
-0x9C, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0,
-0x90, 0x93, 0x89, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xEE,
-0xF0, 0x21, 0x4D, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x1F, 0xFE, 0xEF, 0x54, 0x20,
-0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06, 0xC1, 0x17, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF,
-0x54, 0x3F, 0xFE, 0xEF, 0x54, 0x80, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0xFD, 0xAF, 0x06, 0xC1,
-0x17, 0x12, 0x1E, 0xF6, 0xFF, 0xC3, 0x94, 0x40, 0x50, 0x14, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
-0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0xB4,
-0x40, 0x0A, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x8A, 0x82, 0xF0, 0x22, 0x12, 0x1E, 0xF6,
-0x90, 0x89, 0x01, 0xF0, 0x22, 0x90, 0x93, 0x8F, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x92, 0xE0, 0x54,
-0xF0, 0x44, 0x02, 0xF0, 0x54, 0x0F, 0x44, 0xC0, 0xF0, 0x90, 0x93, 0x8F, 0x12, 0x43, 0xA8, 0x90,
-0x94, 0x19, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x92, 0x02, 0x57, 0x1F, 0x90, 0x00,
-0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFC, 0xED, 0xC3, 0x94, 0x40,
-0x40, 0x02, 0xE4, 0xFD, 0xEC, 0xC3, 0x94, 0x40, 0x40, 0x02, 0xE4, 0xFC, 0xED, 0x25, 0xE0, 0x24,
-0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x83, 0xF0,
-0xEE, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
-0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x85, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x74, 0xFF,
-0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3,
-0xE0, 0x90, 0x93, 0x89, 0xF0, 0xEE, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
-0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x8B, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3,
-0xEC, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
-0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x83, 0x02, 0x8F, 0x75, 0xE4,
-0x90, 0x92, 0x69, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xAF, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0xF5, 0x62,
-0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93,
-0x86, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x90, 0x00,
-0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x59, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93,
-0x3C, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x01, 0x90, 0x93, 0x3D, 0xF0, 0xEF,
-0xC3, 0x13, 0x54, 0x01, 0x90, 0x93, 0x47, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x13,
-0x13, 0x54, 0x01, 0x90, 0x93, 0x44, 0xF0, 0xEF, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x4A,
-0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x54, 0x01, 0x90, 0x93, 0x46, 0xF0, 0xEF,
-0xC4, 0x13, 0x54, 0x01, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4,
-0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x49, 0xF0, 0xE0, 0x70, 0x38, 0x90, 0x93, 0x47, 0xE0, 0x70,
-0x10, 0xFF, 0x12, 0x50, 0xDC, 0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x80,
-0x0F, 0x7F, 0x01, 0x12, 0x50, 0xDC, 0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00,
-0x90, 0x93, 0x86, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08,
-0x12, 0x34, 0x30, 0x90, 0x93, 0x3D, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xA9, 0x90, 0x93, 0x83, 0x12,
-0x43, 0xA8, 0x12, 0x4D, 0xB2, 0x90, 0x93, 0x59, 0xE0, 0x90, 0x01, 0xE6, 0xF0, 0xD0, 0xD0, 0x92,
-0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x30, 0xE0, 0x25, 0x12, 0x1E, 0xF6, 0x90,
-0x93, 0x48, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x4B, 0xF0, 0xEF, 0xC3, 0x13,
-0x54, 0x7F, 0x90, 0x93, 0x45, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x50, 0xF0,
-0x22, 0x90, 0x93, 0x48, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x45,
-0x74, 0x14, 0xF0, 0x90, 0x93, 0x50, 0x74, 0x05, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x19,
-0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90,
-0x93, 0x4D, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x4F, 0x74, 0x05, 0xF0, 0x90,
-0x93, 0x4D, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0xA3, 0xE0, 0x90, 0x05,
-0x58, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x4C, 0xF0, 0x60, 0x20, 0x90, 0x93, 0x15, 0xE0,
-0x20, 0xE0, 0x19, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x62, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09,
-0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xA9, 0x12, 0x51, 0x5A, 0x90, 0x93, 0x4C, 0xE0,
-0x90, 0x01, 0xE7, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x02, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0xFF, 0x54,
-0x80, 0xFE, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x0F, 0xFF, 0xE0, 0x54,
-0xF0, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54, 0x70, 0xFF, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x8F, 0x4F,
-0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x38, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
-0x0F, 0x90, 0x93, 0x39, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x3A, 0xF0, 0x90,
-0x00, 0x01, 0x74, 0x19, 0x12, 0x42, 0x20, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xD3, 0x94,
-0x20, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x01, 0xF0, 0x80, 0x57, 0xEF, 0xD3, 0x94, 0x40, 0x50,
-0x08, 0x90, 0x93, 0x37, 0x74, 0x02, 0xF0, 0x80, 0x49, 0xEF, 0xD3, 0x94, 0x60, 0x50, 0x08, 0x90,
-0x93, 0x37, 0x74, 0x03, 0xF0, 0x80, 0x3B, 0xEF, 0xD3, 0x94, 0x80, 0x50, 0x08, 0x90, 0x93, 0x37,
-0x74, 0x04, 0xF0, 0x80, 0x2D, 0xEF, 0xD3, 0x94, 0xA0, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x05,
-0xF0, 0x80, 0x1F, 0xEF, 0xD3, 0x94, 0xC0, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x06, 0xF0, 0x80,
-0x11, 0xEF, 0xD3, 0x94, 0xE0, 0x90, 0x93, 0x37, 0x50, 0x05, 0x74, 0x07, 0xF0, 0x80, 0x03, 0x74,
-0x08, 0xF0, 0x90, 0x93, 0x37, 0xE0, 0x90, 0x93, 0x3B, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x60, 0x0B,
-0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0,
-0xFD, 0x12, 0x1E, 0xF6, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90, 0x93, 0xA8, 0xF0, 0x90, 0x00, 0x01,
-0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xA9, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
-0xFF, 0xED, 0x2F, 0x90, 0x93, 0xAA, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F,
-0x90, 0x93, 0xAB, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90,
-0x93, 0xAC, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x0E, 0x90, 0x07, 0x78, 0xE0, 0x54, 0xFD,
-0xF0, 0x90, 0x93, 0x11, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x11, 0xF0, 0x22, 0x90, 0x93,
-0x83, 0x12, 0x43, 0xC8, 0xE4, 0x90, 0x93, 0x86, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x44, 0x0C, 0xF0,
-0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x7A, 0x90, 0x93, 0x86, 0x74,
-0x01, 0xF0, 0xFB, 0x7A, 0x93, 0x79, 0x86, 0xFD, 0x7F, 0x14, 0x12, 0x76, 0x35, 0x90, 0x93, 0x04,
-0xE0, 0x44, 0x08, 0xF0, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0x30, 0xE1,
-0x10, 0x90, 0x93, 0x04, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x54, 0xFD, 0xF0, 0x80,
-0x07, 0x90, 0x07, 0x78, 0xE0, 0x44, 0x02, 0xF0, 0xEF, 0x30, 0xE2, 0x1E, 0x90, 0x93, 0x04, 0xE0,
-0x44, 0x04, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x54, 0xEF,
-0xF0, 0x90, 0x07, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x80, 0x07, 0x90, 0x07, 0x78, 0xE0, 0x44, 0x10,
-0xF0, 0x12, 0x1E, 0xF6, 0x30, 0xE4, 0x5C, 0x90, 0x93, 0x04, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x04,
-0x26, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x86, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79,
-0x86, 0x7D, 0x01, 0x7F, 0x14, 0x12, 0x76, 0x35, 0x90, 0x93, 0x04, 0xE0, 0x54, 0xFE, 0xF0, 0xE0,
-0x54, 0xFB, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xF7, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x54,
-0xE3, 0xF0, 0x90, 0x07, 0x83, 0xE0, 0x54, 0x3F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x54, 0x3F, 0xF0,
-0x90, 0x93, 0x0B, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x80, 0x7E, 0x08,
-0x12, 0x34, 0x30, 0x22, 0xEF, 0x70, 0x21, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x14, 0x90, 0x00, 0x40,
-0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0x3F, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x44, 0x01, 0xF0, 0x80,
-0x07, 0x90, 0x07, 0x78, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x64, 0x01, 0x70, 0x6A, 0x12, 0x1E, 0xF6,
-0x90, 0x00, 0x01, 0x30, 0xE0, 0x2E, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC0, 0xF0, 0x90, 0x00, 0x02,
-0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC1, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC2,
-0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC3, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x54,
-0xFE, 0xF0, 0x80, 0x2C, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC4, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F,
-0x0F, 0x90, 0x06, 0xC5, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC6, 0xF0, 0x90,
-0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC7, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x44, 0x01, 0xF0,
-0x90, 0x06, 0xCC, 0xE0, 0x44, 0x02, 0xF0, 0xEF, 0xB4, 0x02, 0x11, 0x12, 0x1E, 0xF6, 0x90, 0x06,
-0xC8, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC9, 0xF0, 0xEF, 0xB4, 0x03, 0x11,
-0x12, 0x1E, 0xF6, 0x90, 0x06, 0xCA, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xCB,
-0xF0, 0xEF, 0x64, 0x04, 0x70, 0x1F, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x07, 0x83, 0x30, 0xE0, 0x06,
-0xE0, 0x44, 0x10, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0x6F, 0xF0, 0xEF, 0x30, 0xE1, 0x07, 0x90, 0x07,
-0x83, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12,
-0x43, 0xA8, 0x12, 0x1E, 0xF6, 0x90, 0x92, 0x6B, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
-0x92, 0x6C, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x92, 0x6D, 0xF0, 0x90, 0x93, 0x83,
-0x12, 0x43, 0xA8, 0x12, 0x76, 0x31, 0xEF, 0xB4, 0x02, 0x03, 0x43, 0x14, 0x01, 0x22, 0x90, 0x93,
-0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8,
-0x7D, 0x03, 0x7F, 0x1D, 0x02, 0x76, 0x35, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86,
-0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1E, 0x02, 0x76, 0x35,
-0x12, 0x1E, 0xF6, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x18, 0x12, 0x1F, 0xB6, 0xA8, 0x04, 0xA9,
-0x05, 0xAA, 0x06, 0xAB, 0x07, 0x90, 0x93, 0x0B, 0x12, 0x43, 0x84, 0xEC, 0x54, 0x03, 0xFC, 0x12,
-0x43, 0x59, 0x90, 0x93, 0x07, 0x02, 0x1F, 0xC9, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93,
-0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1F, 0x02, 0x76,
-0x35, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83,
-0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x20, 0x02, 0x76, 0x35, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01,
-0x90, 0x01, 0xBC, 0xF0, 0xEF, 0x30, 0xE0, 0x5C, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x4E, 0x90,
-0xFD, 0x50, 0x74, 0x0A, 0xF0, 0xA3, 0x74, 0x06, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
-0xFD, 0x52, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0xFD, 0x53, 0xF0, 0xA3, 0xE4, 0xF0,
-0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x90, 0xFD, 0x55, 0x30, 0xE0, 0x05, 0x74, 0xA0, 0xF0, 0x80, 0x03,
-0x74, 0xC0, 0xF0, 0x90, 0xFD, 0x56, 0x74, 0x10, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x90, 0xFD, 0x50,
-0x74, 0x0A, 0xF0, 0xA3, 0x74, 0x06, 0xF0, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0x90, 0x01, 0xBD,
-0xE0, 0x44, 0x01, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFE, 0x90, 0x00, 0x01, 0x12, 0x1F,
-0x0F, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0xFE, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
-0xE4, 0xFC, 0x74, 0x20, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x93, 0x83, 0xEF, 0xF0, 0xEE, 0xF9,
-0x90, 0x01, 0xBD, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x02, 0x09, 0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10,
-0xF0, 0xEC, 0xC3, 0x99, 0x50, 0x43, 0xEC, 0x70, 0x04, 0x7D, 0x04, 0x80, 0x02, 0xE4, 0xFD, 0xED,
-0xC3, 0x94, 0x20, 0x50, 0x07, 0xAF, 0x05, 0xD1, 0xE1, 0x0D, 0x80, 0xF3, 0x0C, 0x90, 0xFD, 0x10,
-0xE0, 0x04, 0xF0, 0xEC, 0xB5, 0x01, 0xDA, 0xE4, 0xFD, 0xED, 0x75, 0xF0, 0x08, 0xA4, 0xFF, 0x90,
-0x93, 0x83, 0xE0, 0xFB, 0xC3, 0xEF, 0x9B, 0x74, 0x80, 0xF8, 0x65, 0xF0, 0x98, 0x50, 0x07, 0xAF,
-0x05, 0xD1, 0xE1, 0x0D, 0x80, 0xE3, 0x0C, 0x80, 0xB8, 0x90, 0x00, 0x81, 0xE0, 0x44, 0x80, 0xFD,
-0x7F, 0x81, 0x12, 0x53, 0xF0, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x04, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0x90, 0xFD, 0x58, 0xE0, 0x30, 0xE0, 0x08, 0x90, 0x01, 0xB8, 0xE0, 0x04, 0xF0, 0x80, 0xF1,
-0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90,
-0xFD, 0x50, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
-0x83, 0xE0, 0x90, 0xFD, 0x51, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4,
-0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x52, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x03,
-0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x53, 0xF0, 0xEF, 0x75, 0xF0, 0x08,
-0xA4, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x54, 0xF0, 0xEF,
-0x75, 0xF0, 0x08, 0xA4, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD,
-0x55, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
-0xE0, 0x90, 0xFD, 0x56, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x07, 0xF5, 0x82, 0xE4, 0x34,
-0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x57, 0xF0, 0xA3, 0x74, 0x01, 0xF0, 0x22, 0x12, 0x1E, 0xF6,
-0x90, 0xFE, 0x10, 0x60, 0x05, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0x90,
-0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43,
-0xA8, 0x7D, 0x01, 0x7F, 0x23, 0x12, 0x76, 0x35, 0xEF, 0xB4, 0x03, 0x05, 0x7F, 0xFF, 0x12, 0x9C,
-0x4C, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93,
-0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x24, 0x02, 0x76, 0x35, 0x12, 0x1E, 0xF6, 0xFF, 0x54,
-0x01, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54,
-0xFD, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFB,
-0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54, 0xF7, 0x4F, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F,
-0x0F, 0x90, 0x93, 0x1B, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12,
-0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x03, 0x7F, 0x26, 0x02, 0x76, 0x35, 0x12,
-0x1E, 0xF6, 0x90, 0x93, 0xB0, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93,
-0x8A, 0x12, 0x43, 0xC8, 0xE4, 0xFE, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x2F, 0x90, 0xFD, 0x50,
-0xEF, 0xF0, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x1E, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8, 0x8E, 0x82,
-0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x51, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5,
-0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDC, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
-0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0xAE, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93,
-0xAF, 0xF0, 0x22, 0xE4, 0x90, 0x94, 0x46, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xEB, 0xE0, 0x54, 0xC0,
-0x60, 0x43, 0xC3, 0x90, 0x94, 0x47, 0xE0, 0x94, 0x88, 0x90, 0x94, 0x46, 0xE0, 0x94, 0x13, 0x40,
-0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x04, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x94, 0x46, 0xE4, 0x75,
-0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x94, 0x47,
-0xE0, 0x94, 0x64, 0x90, 0x94, 0x46, 0xE0, 0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC7, 0xE0, 0x30,
-0xE2, 0xB8, 0x7F, 0x00, 0x22, 0x7F, 0x01, 0x22, 0x90, 0x93, 0xE2, 0x12, 0x1F, 0xC9, 0x90, 0x93,
-0xE6, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x7F, 0x1F, 0xFE, 0xFD, 0xFC, 0x90, 0x93,
-0xE6, 0x12, 0x43, 0x90, 0xD3, 0x12, 0x43, 0x73, 0x50, 0x41, 0x90, 0x93, 0xE6, 0x12, 0x43, 0x84,
-0xA9, 0x07, 0x90, 0x93, 0xE2, 0x12, 0x43, 0x84, 0xA8, 0x01, 0x12, 0x1F, 0xA3, 0xEF, 0x54, 0x01,
-0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0x7B, 0x01, 0xFA, 0xF9, 0xF8, 0xC3, 0x12, 0x43, 0x73, 0x60, 0x1B,
-0x90, 0x93, 0xE6, 0x12, 0x43, 0x84, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD,
-0xE4, 0x3C, 0xFC, 0x90, 0x93, 0xE6, 0x12, 0x1F, 0xC9, 0x80, 0xAD, 0x90, 0x93, 0xE6, 0x02, 0x43,
-0x84, 0x90, 0x93, 0xB4, 0x12, 0x1F, 0xC9, 0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0xB8,
-0x12, 0x43, 0x90, 0xC3, 0x12, 0x43, 0x73, 0x90, 0x93, 0xB4, 0x60, 0x67, 0x12, 0x43, 0x84, 0x12,
-0x2C, 0x6E, 0x90, 0x93, 0xC0, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB8, 0x12, 0x43, 0x84, 0x11, 0xE8,
-0x90, 0x93, 0xC4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB8, 0x12, 0x43, 0x84, 0x12, 0x43, 0x66, 0x90,
-0x93, 0xC0, 0x12, 0x43, 0x90, 0x12, 0x43, 0x4C, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07,
-0x90, 0x93, 0xC4, 0x12, 0x43, 0x84, 0xA9, 0x07, 0x90, 0x93, 0xBC, 0x12, 0x43, 0x84, 0xA8, 0x01,
-0x12, 0x1F, 0xB6, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0x59, 0x90, 0x93,
-0xC8, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB4, 0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93,
-0xC8, 0x80, 0x0A, 0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0xBC, 0x12, 0x43, 0x84,
-0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0xD0, 0x07, 0xD0, 0x06, 0x02, 0x34, 0x30, 0xD3, 0x10, 0xAF,
-0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x4C, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x47, 0xE0, 0xFF,
-0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46,
-0xE0, 0x5F, 0xF0, 0x12, 0x54, 0x38, 0x90, 0x94, 0x4C, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8,
-0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0,
-0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13,
-0xD8, 0xF8, 0xFF, 0x80, 0x4C, 0x90, 0x94, 0x4C, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01,
-0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x62, 0xE0, 0x5F,
-0xF0, 0x12, 0x54, 0x38, 0x90, 0x94, 0x4C, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08,
-0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x60, 0xE0, 0xFB, 0xE4,
-0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8,
-0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0x54,
-0x01, 0xFF, 0x90, 0x94, 0x3E, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x44,
-0xFE, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90,
-0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x94, 0x3F, 0xF0, 0x22, 0x90, 0x93, 0x04, 0xE0, 0x54, 0xFE,
-0xF0, 0x54, 0xFB, 0xF0, 0x54, 0xFD, 0xF0, 0x54, 0xF7, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
-0x12, 0x1F, 0xD5, 0x20, 0x08, 0x30, 0x70, 0x90, 0x93, 0x0B, 0x12, 0x1F, 0xD5, 0xC0, 0x08, 0x30,
-0x70, 0xE4, 0x90, 0x93, 0x11, 0xF0, 0xA3, 0xF0, 0x43, 0xE8, 0x04, 0x90, 0xFD, 0x68, 0x74, 0x02,
-0xF0, 0x90, 0x04, 0x26, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x07, 0x83, 0xE4, 0xF0, 0x90, 0x07, 0x78,
-0x74, 0x03, 0xF0, 0x90, 0x04, 0x64, 0xE4, 0xF0, 0x90, 0x00, 0x40, 0x74, 0x20, 0xF0, 0x71, 0x2D,
-0x90, 0x93, 0x2C, 0x74, 0x01, 0xF0, 0x7D, 0x04, 0x7F, 0x02, 0x02, 0x3A, 0xAD, 0x90, 0x93, 0x15,
-0xE0, 0x54, 0xFE, 0xF0, 0xA3, 0x74, 0x0B, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x93, 0x26,
-0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54,
-0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x93,
-0x18, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54, 0xEF,
-0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0xA3, 0xE0, 0x54,
-0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x93, 0x28, 0x74, 0x02, 0xF0,
-0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE4,
-0xA3, 0xF0, 0x90, 0x93, 0x25, 0xF0, 0x90, 0x93, 0x1C, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x93,
-0x23, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x29, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x1C, 0xE0, 0x54, 0xFD,
-0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xFB, 0xF0,
-0xE0, 0x54, 0xF7, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xE1, 0xF0, 0x22,
-0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x0A, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90, 0x93, 0x6E,
-0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6F, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93, 0x70,
-0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0x71, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0x72,
-0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90, 0x93, 0x6C, 0x30, 0xE6, 0x08, 0xE0, 0x54, 0x0F, 0x44, 0x50,
-0xF0, 0x80, 0x16, 0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93, 0x73,
-0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0x74, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90,
-0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x57, 0x1F, 0xAD, 0x07, 0x90, 0x93,
-0xFA, 0xE0, 0x54, 0xF0, 0x44, 0x0C, 0xF0, 0x54, 0x0F, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93,
-0xFC, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93, 0xFD, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93,
-0xFE, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0xFF, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x94,
-0x00, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x94, 0x01, 0xF0, 0xED, 0xB4, 0x02, 0x0B, 0x90, 0x93,
-0xFA, 0xE0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x80, 0x3C, 0xED, 0xB4, 0x04, 0x0B, 0x90, 0x93, 0xFA,
-0xE0, 0x54, 0x0F, 0x44, 0x60, 0xF0, 0x80, 0x2D, 0xED, 0xF4, 0x70, 0x29, 0x90, 0x93, 0xFA, 0xE0,
-0x54, 0x0F, 0x44, 0x60, 0xF0, 0x90, 0x93, 0x2C, 0xE0, 0x60, 0x08, 0x90, 0x93, 0xFC, 0x74, 0x01,
-0xF0, 0x80, 0x05, 0xE4, 0x90, 0x93, 0xFC, 0xF0, 0xE4, 0x90, 0x93, 0xFD, 0xF0, 0xA3, 0xF0, 0xA3,
-0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xFC, 0x90, 0x94, 0x19, 0x12, 0x43,
-0xC8, 0x7A, 0x93, 0x79, 0xFA, 0x02, 0x57, 0x1F, 0xAD, 0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0,
-0x44, 0x0E, 0xF0, 0x54, 0x0F, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6F, 0xF0, 0x90, 0xFD,
-0x63, 0xE0, 0x90, 0x93, 0x70, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0x71, 0xF0, 0x90, 0xFD,
-0x65, 0xE0, 0x90, 0x93, 0x72, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93, 0x73, 0xF0, 0x90, 0xFD,
-0x67, 0xE0, 0x90, 0x93, 0x74, 0xF0, 0xED, 0xB4, 0x01, 0x11, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0x0F,
-0x44, 0x20, 0xF0, 0x90, 0x93, 0x6E, 0x74, 0x01, 0xF0, 0x80, 0x13, 0xED, 0xB4, 0x02, 0x0F, 0x90,
-0x93, 0x6C, 0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0x93, 0x6E, 0x74, 0x02, 0xF0, 0x90, 0x93,
-0x6C, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x60, 0x13, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94,
-0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x12, 0x57, 0x1F, 0x22, 0x90, 0x93, 0x47, 0xE0,
-0x60, 0x27, 0x90, 0x93, 0x4A, 0xE0, 0x70, 0x21, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30,
-0xE0, 0x07, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x93, 0x44, 0xE0, 0x90, 0x07, 0x78,
-0x60, 0x04, 0x74, 0x0D, 0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
-0x13, 0x54, 0x03, 0x20, 0xE0, 0x02, 0xE1, 0x26, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x01, 0x70, 0x2B,
-0x90, 0x06, 0x92, 0xE0, 0x30, 0xE2, 0x19, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x29, 0xE0, 0x04, 0xF0,
-0x90, 0x93, 0x1E, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02, 0xE1, 0x11,
-0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x90, 0x93, 0x27, 0x04, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64,
-0x04, 0x70, 0x2C, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE2, 0x19, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x29,
-0xE0, 0x04, 0xF0, 0x90, 0x93, 0x20, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0xB5, 0x07, 0x02, 0x80,
-0x02, 0xE1, 0x11, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x90, 0x93, 0x27, 0x74, 0x04, 0xF0, 0x22, 0x90,
-0x93, 0x1D, 0xE0, 0x64, 0x06, 0x60, 0x02, 0xC1, 0xD5, 0x90, 0x93, 0x2A, 0xE0, 0xB4, 0x04, 0x0F,
-0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x27, 0x30, 0xE0, 0x4E, 0xE1, 0x23, 0x90,
-0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x45, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3,
-0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x02, 0xC1, 0xE4, 0x90, 0x93, 0x2A,
-0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12,
-0x1F, 0x3C, 0x90, 0x93, 0x21, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE,
-0x64, 0x80, 0x94, 0x80, 0x90, 0x93, 0x27, 0x40, 0x02, 0xE1, 0x23, 0x74, 0x02, 0xF0, 0x22, 0x90,
-0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4E, 0x18, 0x90, 0x93, 0x2A, 0xE0, 0x04, 0xF0,
-0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90,
-0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x2A, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0x2F, 0xFF,
-0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x21, 0xE0, 0x2F, 0xFF,
-0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x40, 0x58, 0x90, 0x07,
-0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x07, 0x70, 0x49, 0x90, 0x93, 0x2A,
-0xE0, 0xB4, 0x04, 0x05, 0x90, 0x93, 0x27, 0x80, 0x3A, 0x90, 0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54,
-0x3F, 0x30, 0xE0, 0x0C, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x27, 0x80, 0x23,
-0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4E, 0x18, 0x90, 0x93, 0x2A, 0xE0, 0x04,
-0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77,
-0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x93, 0x15, 0xE0,
-0x20, 0xE0, 0x02, 0xE1, 0xC3, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0,
-0x2A, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x21, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E,
-0x01, 0x12, 0x39, 0x77, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x01, 0xF0,
-0xE4, 0x90, 0x93, 0x29, 0xF0, 0x90, 0x93, 0x27, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48, 0x90, 0x93,
-0x5D, 0xE0, 0xFF, 0x90, 0x93, 0x16, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60,
-0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0x74, 0x01, 0xF0, 0x90, 0x01, 0x63, 0x74, 0x05,
-0xF0, 0x90, 0x93, 0x26, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x07, 0x90, 0x05, 0x22,
-0x74, 0x6F, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54,
-0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03,
-0x12, 0x51, 0x39, 0x22, 0x01, 0xF5,
-};
-u4Byte ArrayLength_8723A_rtl8723fw_B = 24550;
-
-
-void
-ODM_ReadFirmware_8723A_rtl8723fw_B(
- IN PDM_ODM_T pDM_Odm,
- OUT u1Byte *pFirmware,
- OUT u4Byte *pFirmwareSize
-)
-{
- ODM_MoveMemory(pDM_Odm, pFirmware, Array_8723A_rtl8723fw_B, ArrayLength_8723A_rtl8723fw_B);
- *pFirmwareSize = ArrayLength_8723A_rtl8723fw_B;
-}
-
-
-
-#endif // end of HWIMG_SUPPORT
-
+/******************************************************************************
+*
+* Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of version 2 of the GNU General Public License as
+* published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program; if not, write to the Free Software Foundation, Inc.,
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+*
+*
+******************************************************************************/
+
+#include "Mp_Precomp.h"
+#include "../odm_precomp.h"
+
+#if (RTL8723A_SUPPORT == 1)
+u1Byte Array_8723A_rtl8723fw[] = {
+
+};
+u4Byte ArrayLength_8723A_rtl8723fw = 0;
+
+
+void
+ODM_ReadFirmware_8723A_rtl8723fw(
+ IN PDM_ODM_T pDM_Odm,
+ OUT u1Byte *pFirmware,
+ OUT u4Byte *pFirmwareSize
+)
+{
+ ODM_MoveMemory(pDM_Odm, pFirmware, Array_8723A_rtl8723fw, ArrayLength_8723A_rtl8723fw);
+ *pFirmwareSize = ArrayLength_8723A_rtl8723fw;
+}
+
+
+u1Byte Array_8723A_rtl8723fw_B[] = {
+0x02, 0x23, 0x02, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x01, 0x14, 0x15, 0x51, 0xC6, 0x5F, 0x01, 0x00,
+0x03, 0x21, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x02, 0x4A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x61, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x66, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x67, 0xC2, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x02, 0x6F, 0x8F, 0x05, 0x04, 0x03, 0x02, 0x00, 0x03, 0x06, 0x05, 0x04, 0x03,
+0x00, 0x04, 0x06, 0x05, 0x04, 0x02, 0x00, 0x04, 0x08, 0x07, 0x06, 0x04, 0x00, 0x06, 0x0A, 0x09,
+0x08, 0x06, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x04, 0x00, 0x08, 0x0A, 0x09, 0x08, 0x02, 0x00, 0x08,
+0x0A, 0x09, 0x08, 0x00, 0x00, 0x08, 0x12, 0x11, 0x10, 0x08, 0x00, 0x10, 0x1A, 0x19, 0x18, 0x10,
+0x00, 0x18, 0x22, 0x21, 0x20, 0x18, 0x00, 0x20, 0x22, 0x21, 0x20, 0x10, 0x00, 0x20, 0x22, 0x21,
+0x20, 0x08, 0x00, 0x20, 0x22, 0x21, 0x1C, 0x08, 0x00, 0x20, 0x22, 0x21, 0x14, 0x08, 0x00, 0x20,
+0x22, 0x20, 0x18, 0x08, 0x00, 0x20, 0x31, 0x30, 0x20, 0x10, 0x00, 0x30, 0x31, 0x30, 0x18, 0x00,
+0x00, 0x30, 0x31, 0x2F, 0x10, 0x10, 0x00, 0x30, 0x31, 0x2C, 0x10, 0x10, 0x00, 0x30, 0x31, 0x28,
+0x10, 0x00, 0x00, 0x30, 0x31, 0x20, 0x10, 0x00, 0x00, 0x30, 0x31, 0x10, 0x10, 0x00, 0x00, 0x30,
+0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x05, 0x07, 0x07, 0x07, 0x08, 0x0A, 0x04, 0x04, 0x04, 0x04,
+0x06, 0x0A, 0x0B, 0x0D, 0x05, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x0D, 0x0F, 0x04, 0x04, 0x04, 0x05,
+0x07, 0x07, 0x09, 0x09, 0x0C, 0x0E, 0x10, 0x12, 0x06, 0x07, 0x09, 0x0A, 0x0C, 0x0E, 0x11, 0x13,
+0x09, 0x09, 0x09, 0x09, 0x0C, 0x0E, 0x11, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x24, 0x26, 0x2A, 0x18, 0x1A, 0x1D, 0x1F, 0x21, 0x27, 0x29, 0x2A, 0x00, 0x00, 0x00, 0x1F,
+0x23, 0x28, 0x2A, 0x2C, 0x00, 0x04, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x18, 0x00, 0x24,
+0x00, 0x30, 0x00, 0x48, 0x00, 0x60, 0x00, 0x90, 0x00, 0xC0, 0x00, 0xD8, 0x00, 0x50, 0x00, 0x78,
+0x00, 0xA0, 0x00, 0xC8, 0x01, 0x40, 0x01, 0x90, 0x01, 0xE0, 0x02, 0x30, 0x01, 0x2C, 0x01, 0x40,
+0x01, 0xE0, 0x02, 0xD0, 0x03, 0xE8, 0x04, 0xB0, 0x06, 0x40, 0x07, 0xD0, 0x00, 0x02, 0x00, 0x02,
+0x00, 0x04, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x12, 0x00, 0x18, 0x00, 0x24, 0x00, 0x30, 0x00, 0x48,
+0x00, 0x60, 0x00, 0x6C, 0x00, 0x28, 0x00, 0x3C, 0x00, 0x50, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xC8,
+0x00, 0xF0, 0x01, 0x18, 0x00, 0x64, 0x00, 0xA0, 0x00, 0xF0, 0x01, 0x68, 0x01, 0xF4, 0x02, 0x58,
+0x03, 0x20, 0x03, 0xE8, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x07,
+0x02, 0x03, 0x04, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x05, 0x07, 0x07, 0x08, 0x0B, 0x12, 0x24, 0x3C,
+0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x01, 0x02, 0x03, 0x04,
+0x05, 0x06, 0x07, 0x08, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x20, 0x1E, 0x1C, 0x18,
+0x10, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xBB, 0x01, 0x0F, 0xF8, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0x28,
+0xF0, 0x22, 0x50, 0x09, 0xC5, 0x82, 0x29, 0xF8, 0xE5, 0x82, 0x26, 0xF6, 0x22, 0xBB, 0xFE, 0x09,
+0xC5, 0x82, 0x29, 0xF8, 0xE2, 0x25, 0x82, 0xF2, 0x22, 0xF8, 0xEA, 0x25, 0x83, 0xF5, 0x83, 0xE9,
+0x93, 0x28, 0x22, 0xBB, 0x01, 0x06, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0x22, 0x50, 0x02, 0xF7, 0x22,
+0xBB, 0xFE, 0x01, 0xF3, 0x22, 0xF8, 0xBB, 0x01, 0x0D, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83,
+0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0x22, 0x50, 0x06, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x22, 0xBB, 0xFE,
+0x05, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, 0xC5, 0xF0,
+0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xBB, 0x01, 0x0A,
+0x89, 0x82, 0x8A, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x06, 0x87, 0xF0, 0x09, 0xE7,
+0x19, 0x22, 0xBB, 0xFE, 0x07, 0xE3, 0xF5, 0xF0, 0x09, 0xE3, 0x19, 0x22, 0x89, 0x82, 0x8A, 0x83,
+0xE4, 0x93, 0xF5, 0xF0, 0x74, 0x01, 0x93, 0x22, 0xBB, 0x01, 0x10, 0xE5, 0x82, 0x29, 0xF5, 0x82,
+0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE0, 0xF5, 0xF0, 0xA3, 0xE0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82,
+0xF8, 0x86, 0xF0, 0x08, 0xE6, 0x22, 0xBB, 0xFE, 0x0A, 0xE9, 0x25, 0x82, 0xF8, 0xE2, 0xF5, 0xF0,
+0x08, 0xE2, 0x22, 0xE5, 0x83, 0x2A, 0xF5, 0x83, 0xE9, 0x93, 0xF5, 0xF0, 0xA3, 0xE9, 0x93, 0x22,
+0xBB, 0x01, 0x0A, 0x89, 0x82, 0x8A, 0x83, 0xF0, 0xE5, 0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x06, 0xF7,
+0x09, 0xA7, 0xF0, 0x19, 0x22, 0xBB, 0xFE, 0x06, 0xF3, 0xE5, 0xF0, 0x09, 0xF3, 0x19, 0x22, 0xF8,
+0xBB, 0x01, 0x11, 0xE5, 0x82, 0x29, 0xF5, 0x82, 0xE5, 0x83, 0x3A, 0xF5, 0x83, 0xE8, 0xF0, 0xE5,
+0xF0, 0xA3, 0xF0, 0x22, 0x50, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF6, 0x08, 0xA6, 0xF0, 0x22, 0xBB,
+0xFE, 0x09, 0xE9, 0x25, 0x82, 0xC8, 0xF2, 0xE5, 0xF0, 0x08, 0xF2, 0x22, 0xEF, 0x5B, 0xFF, 0xEE,
+0x5A, 0xFE, 0xED, 0x59, 0xFD, 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, 0x4A, 0xFE, 0xED,
+0x49, 0xFD, 0xEC, 0x48, 0xFC, 0x22, 0xCF, 0xF4, 0xCF, 0xCE, 0xF4, 0xCE, 0xCD, 0xF4, 0xCD, 0xCC,
+0xF4, 0xCC, 0x22, 0xEB, 0x9F, 0xF5, 0xF0, 0xEA, 0x9E, 0x42, 0xF0, 0xE9, 0x9D, 0x42, 0xF0, 0xE8,
+0x9C, 0x45, 0xF0, 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x22,
+0xE0, 0xF8, 0xA3, 0xE0, 0xF9, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xFB, 0x22, 0xA4, 0x25, 0x82, 0xF5,
+0x82, 0xE5, 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9,
+0x22, 0xF8, 0xE0, 0xFB, 0xA3, 0xA3, 0xE0, 0xF9, 0x25, 0xF0, 0xF0, 0xE5, 0x82, 0x15, 0x82, 0x70,
+0x02, 0x15, 0x83, 0xE0, 0xFA, 0x38, 0xF0, 0x22, 0xEB, 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0,
+0x22, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3,
+0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68,
+0x60, 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, 0x12,
+0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, 0x83,
+0xE4, 0x73, 0x74, 0x02, 0x93, 0xB5, 0xF0, 0x06, 0x74, 0x03, 0x93, 0x68, 0x60, 0xE9, 0xA3, 0xA3,
+0xA3, 0xA3, 0x80, 0xD8, 0xE4, 0xFB, 0x90, 0x93, 0x63, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00,
+0xE5, 0x65, 0x70, 0x03, 0x02, 0x44, 0xF0, 0xE5, 0x62, 0x64, 0x01, 0x60, 0x03, 0x02, 0x44, 0xF0,
+0x0B, 0x90, 0x93, 0x40, 0xF0, 0x04, 0x70, 0x03, 0x02, 0x44, 0xF0, 0x43, 0x66, 0x10, 0x90, 0x93,
+0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x3A, 0xE0, 0x54, 0x0F, 0xFF, 0x90,
+0x93, 0x58, 0xE0, 0xD3, 0x9F, 0x50, 0x0D, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0xE0, 0xF5, 0x49,
+0xE4, 0x1B, 0x80, 0x56, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x0F, 0xFF, 0x90, 0x93,
+0x58, 0xE0, 0xC3, 0x9F, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x37, 0xE0, 0x04, 0x2F, 0xF5,
+0x49, 0xE4, 0xFB, 0x80, 0x35, 0x90, 0x93, 0x58, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x13,
+0xE4, 0xF5, 0x48, 0x90, 0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x2F, 0xF5, 0x49, 0xE4,
+0xFB, 0x80, 0x17, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x58, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF,
+0x90, 0x93, 0x4F, 0xE0, 0x04, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12,
+0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50,
+0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x62, 0x12, 0x9D, 0x6C, 0x90, 0x05, 0x22, 0xE4, 0xF0,
+0x22, 0xE4, 0x90, 0x93, 0x5A, 0xF0, 0x90, 0x93, 0x41, 0xF0, 0xF5, 0x66, 0x22, 0x22, 0xE4, 0xFF,
+0x02, 0x4E, 0x18, 0x02, 0x45, 0x03, 0x02, 0x45, 0x06, 0xE4, 0xFB, 0x90, 0x93, 0x5D, 0x12, 0x1F,
+0xD5, 0x00, 0x00, 0x00, 0x00, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x46, 0x71, 0xE5, 0x62, 0x64, 0x01,
+0x60, 0x03, 0x02, 0x46, 0x71, 0xE5, 0x65, 0x14, 0x60, 0x2B, 0x24, 0xFD, 0x60, 0x27, 0x24, 0x02,
+0x24, 0xFB, 0x50, 0x02, 0x80, 0x21, 0x90, 0x93, 0x40, 0xE0, 0x14, 0xF0, 0xE0, 0x60, 0x04, 0xA3,
+0xE0, 0x60, 0x14, 0x90, 0x93, 0x40, 0xE0, 0x70, 0x08, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x93, 0x40,
+0xF0, 0x7B, 0x01, 0x80, 0x02, 0x7B, 0x01, 0xEB, 0x70, 0x03, 0x02, 0x46, 0x71, 0x43, 0x66, 0x10,
+0x90, 0x93, 0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x44, 0xE0, 0x54, 0x0F,
+0xFF, 0x90, 0x93, 0x58, 0xE0, 0xC3, 0x9F, 0x50, 0x08, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0x80,
+0x2D, 0x90, 0x93, 0x36, 0xE0, 0xC4, 0x54, 0x07, 0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33,
+0xFE, 0x90, 0x93, 0x58, 0xE0, 0xC3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x08,
+0xE4, 0xF5, 0x48, 0x90, 0x93, 0x3A, 0x80, 0x06, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x37, 0xE0, 0x80,
+0x2D, 0x90, 0x93, 0x58, 0xE0, 0x64, 0x01, 0x60, 0x03, 0xE0, 0x70, 0x0F, 0xE4, 0xF5, 0x48, 0x90,
+0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x2F, 0x80, 0x13, 0xE4, 0xF5, 0x48, 0x90, 0x93,
+0x58, 0xE0, 0x14, 0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x4F, 0xE0, 0x04, 0x2F, 0xF5, 0x49,
+0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0,
+0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04, 0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x62,
+0xE5, 0x63, 0x64, 0x0C, 0x60, 0x68, 0x90, 0x93, 0x13, 0xE0, 0xFF, 0x90, 0x93, 0x58, 0xE0, 0xD3,
+0x9F, 0x40, 0x06, 0x90, 0x93, 0x14, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x58, 0xE0, 0x90, 0x93, 0x13,
+0xF0, 0xA3, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x46, 0xE4, 0xF0, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09,
+0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xA9, 0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x70,
+0x21, 0x12, 0x4A, 0x5E, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD,
+0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x55,
+0x80, 0x09, 0x43, 0x66, 0x01, 0x12, 0x51, 0x39, 0x90, 0x93, 0x51, 0x74, 0x01, 0xF0, 0x12, 0x9D,
+0x6C, 0x22, 0xE4, 0x90, 0x93, 0x63, 0xF0, 0xE5, 0x65, 0x70, 0x03, 0x02, 0x47, 0x2B, 0x90, 0x93,
+0x5A, 0xE0, 0x60, 0x11, 0xE4, 0xF0, 0x53, 0x66, 0xFD, 0xE5, 0x66, 0x54, 0x07, 0x60, 0x03, 0x02,
+0x47, 0x2B, 0x02, 0x47, 0x28, 0x90, 0x93, 0x41, 0xE0, 0x04, 0xF0, 0x53, 0x66, 0xEF, 0x90, 0x93,
+0x58, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x36, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0,
+0x3A, 0x90, 0x93, 0x58, 0xE0, 0xFF, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x0F, 0xB5, 0x07, 0x0A, 0x90,
+0x93, 0x39, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x80, 0x22, 0x90, 0x93, 0x36, 0xE0, 0xC4, 0x54, 0x07,
+0xFF, 0xE0, 0x54, 0x0F, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93, 0x58, 0xE0, 0xB5, 0x07, 0x0B,
+0xE4, 0xB5, 0x06, 0x07, 0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x36, 0xE0, 0xC4,
+0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x06, 0x90, 0x93, 0x63, 0x74, 0x5A, 0xF0, 0x90, 0x93,
+0x63, 0xE0, 0xFF, 0x90, 0x93, 0x48, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x90, 0x93, 0x41, 0xE0,
+0xD3, 0x9F, 0xEE, 0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x40, 0x0D, 0xE5, 0x62, 0xB4, 0x01, 0x0B,
+0xA3, 0xE0, 0x70, 0x07, 0xE0, 0x04, 0xF0, 0x22, 0x12, 0x52, 0x08, 0x22, 0xE4, 0xF5, 0x66, 0xF5,
+0x65, 0x75, 0x64, 0x0C, 0x75, 0x63, 0x0C, 0x90, 0x93, 0x59, 0xF0, 0x90, 0x93, 0x55, 0xF0, 0x90,
+0x93, 0x52, 0xF0, 0x90, 0x93, 0x57, 0x04, 0xF0, 0x90, 0x93, 0x40, 0xF0, 0xE4, 0x90, 0x93, 0x5A,
+0xF0, 0x90, 0x93, 0x42, 0xF0, 0x90, 0x93, 0x4F, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x41, 0xF0,
+0x90, 0x93, 0x4D, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x48, 0xF0, 0x90, 0x93, 0x4B, 0x74,
+0x05, 0xF0, 0x90, 0x93, 0x45, 0x74, 0x14, 0xF0, 0x90, 0x93, 0x50, 0x74, 0x05, 0xF0, 0xE4, 0x90,
+0x93, 0x43, 0xF0, 0x90, 0x93, 0x3C, 0xF0, 0x90, 0x93, 0xB2, 0xF0, 0x90, 0x93, 0x4C, 0xF0, 0x90,
+0x93, 0x5C, 0xF0, 0x90, 0x93, 0x58, 0xF0, 0x90, 0x93, 0x3D, 0xF0, 0x90, 0x93, 0x56, 0xF0, 0x90,
+0x93, 0x47, 0xF0, 0x90, 0x93, 0x44, 0xF0, 0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x4A, 0xF0, 0x90,
+0x93, 0x46, 0xF0, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x93, 0x49, 0xF0, 0x90, 0x93, 0xB1, 0xE0, 0xB4,
+0x02, 0x05, 0x90, 0x00, 0x93, 0xE4, 0xF0, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x7F, 0xF0, 0xE0, 0x54,
+0xF0, 0xF0, 0xE0, 0x54, 0x8F, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x3A, 0xF0, 0x90,
+0x93, 0x39, 0xF0, 0x22, 0xEF, 0x60, 0x5F, 0xAF, 0x05, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03,
+0x30, 0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x40,
+0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x6B, 0x90, 0x93, 0x2B, 0xE0,
+0xC3, 0x94, 0x20, 0x50, 0x13, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x74, 0x23, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x22, 0x74, 0x23, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
+0xF5, 0x83, 0x74, 0x7F, 0xF0, 0x22, 0xAF, 0x05, 0x74, 0x21, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC,
+0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30,
+0xE0, 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xBF, 0xF0,
+0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0C, 0x74, 0x23, 0x2D, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0, 0x22, 0x90,
+0x93, 0x26, 0xE0, 0x60, 0x09, 0x90, 0x01, 0xB9, 0x74, 0x40, 0xF0, 0x02, 0x49, 0x22, 0xE5, 0x64,
+0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x02, 0x80, 0x2F, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x67, 0x80,
+0x5D, 0x12, 0x51, 0xAC, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80,
+0x61, 0xE5, 0x66, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x53, 0xE5,
+0x64, 0x54, 0x0F, 0xD3, 0x94, 0x02, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x42,
+0xE5, 0x66, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x35, 0xE5, 0x66, 0x30,
+0xE4, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x28, 0x90, 0x93, 0x42, 0xE0, 0x60, 0x08,
+0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x1A, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x08, 0x90, 0x01,
+0xB9, 0x74, 0x80, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F,
+0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x7F, 0x00, 0x22, 0xE4, 0x90, 0x93, 0x5D, 0xF0,
+0x90, 0x06, 0xA9, 0xE0, 0x90, 0x93, 0x5D, 0xF0, 0xE0, 0x54, 0xC0, 0x70, 0x18, 0x90, 0x93, 0x51,
+0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0x53, 0x66, 0xFD, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x14,
+0x12, 0x52, 0x08, 0x80, 0x0F, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70,
+0x03, 0x12, 0x4F, 0xA9, 0x90, 0x93, 0x5D, 0xE0, 0x30, 0xE6, 0x1B, 0x43, 0x66, 0x01, 0x90, 0x93,
+0x59, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64, 0x0C, 0x60, 0x13, 0x12, 0x51, 0x39, 0x80,
+0x0E, 0x12, 0x50, 0x68, 0x80, 0x09, 0x90, 0x93, 0x51, 0xE0, 0x70, 0x03, 0x53, 0x66, 0xFE, 0xE4,
+0x90, 0x93, 0x51, 0xF0, 0x90, 0x93, 0x5D, 0xE0, 0x30, 0xE7, 0x2A, 0x43, 0x66, 0x02, 0xE4, 0xF5,
+0x48, 0x90, 0x93, 0x4B, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39,
+0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x5A, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x1A,
+0xE0, 0x44, 0x10, 0xF0, 0x22, 0x53, 0x66, 0xFD, 0x22, 0x8E, 0x25, 0x8F, 0x26, 0xAD, 0x26, 0xAC,
+0x25, 0xAF, 0x24, 0x12, 0x47, 0xE4, 0xAF, 0x26, 0xAE, 0x25, 0x90, 0x04, 0x80, 0xE0, 0x54, 0x0F,
+0xFD, 0xAC, 0x07, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x01,
+0xF0, 0x74, 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xFB, 0xF0, 0xAC,
+0x07, 0x74, 0x16, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0xFA, 0xF0, 0x74,
+0x15, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F, 0xF0, 0xAC, 0x07, 0x74,
+0x06, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F, 0xF0, 0x90, 0x04, 0x53,
+0xE4, 0xF0, 0x90, 0x04, 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0, 0x90, 0x04, 0x50, 0x74,
+0xFD, 0xF0, 0x74, 0x14, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xC0, 0x4D,
+0xFD, 0x74, 0x14, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED, 0xF0, 0x22, 0x7D, 0x01,
+0x7F, 0x0C, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x68, 0x8D, 0x69, 0xE5, 0x68, 0x54,
+0x0F, 0xFF, 0xE5, 0x63, 0x54, 0x0F, 0x6F, 0x60, 0x72, 0xE5, 0x68, 0x30, 0xE2, 0x30, 0xE5, 0x63,
+0x20, 0xE2, 0x05, 0x7F, 0x01, 0x12, 0x51, 0x92, 0xE5, 0x63, 0x30, 0xE3, 0x10, 0xE5, 0x68, 0x20,
+0xE3, 0x0B, 0x12, 0x4D, 0x46, 0xEF, 0x60, 0x53, 0x12, 0x51, 0xC5, 0x80, 0x4E, 0xE5, 0x63, 0x20,
+0xE3, 0x49, 0xE5, 0x68, 0x30, 0xE3, 0x44, 0xAF, 0x69, 0x12, 0x51, 0x77, 0x80, 0x3D, 0xE5, 0x63,
+0x54, 0x0F, 0xFF, 0xBF, 0x0C, 0x0E, 0xE5, 0x68, 0x20, 0xE3, 0x09, 0x12, 0x4D, 0x46, 0xEF, 0x60,
+0x2A, 0x12, 0x51, 0xC5, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF, 0x04, 0x0E, 0xE5, 0x68, 0x20, 0xE2,
+0x09, 0x12, 0x48, 0x88, 0xEF, 0x60, 0x14, 0x12, 0x51, 0x10, 0xE5, 0x63, 0x54, 0x0F, 0xFF, 0xBF,
+0x02, 0x09, 0x12, 0x4B, 0xF0, 0xEF, 0x60, 0x03, 0x12, 0x51, 0xF5, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
+0x02, 0x4B, 0x2E, 0x02, 0x52, 0xE5, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6,
+0x80, 0x01, 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C,
+0xC8, 0xC3, 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01,
+0x46, 0xF6, 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x90, 0x4F,
+0x66, 0xE4, 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F,
+0xFE, 0xE4, 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8,
+0xE4, 0x93, 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA,
+0xC5, 0x83, 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE,
+0xE7, 0x80, 0xBE, 0xEF, 0x64, 0x01, 0x70, 0x3E, 0x7D, 0x78, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D,
+0x02, 0x7F, 0x03, 0x12, 0x3A, 0x22, 0x90, 0x01, 0x36, 0x74, 0x03, 0xF0, 0xFD, 0x7F, 0x02, 0x12,
+0x3A, 0x93, 0x7D, 0x10, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01,
+0x3C, 0x74, 0x02, 0xF0, 0x12, 0x4A, 0x5E, 0x90, 0x06, 0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x06,
+0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, 0x90, 0x01, 0x36, 0x74, 0x7B, 0xF0, 0xA3, 0x74, 0x02, 0xF0,
+0x7D, 0x7B, 0xFF, 0x12, 0x3A, 0x93, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93, 0x7D, 0x10, 0x7F,
+0x03, 0x12, 0x3A, 0x3F, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x06, 0x0A, 0xE0, 0x44,
+0x07, 0xF0, 0x12, 0x4F, 0x19, 0xE5, 0x62, 0x20, 0xE0, 0x05, 0xE4, 0x90, 0x93, 0x42, 0xF0, 0x22,
+0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x10, 0x12, 0x51, 0xAC, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90,
+0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x54, 0xE5, 0x14, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01,
+0xF0, 0x80, 0x48, 0xE5, 0x64, 0x54, 0x0F, 0xD3, 0x94, 0x01, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74,
+0x02, 0xF0, 0x80, 0x37, 0x90, 0x02, 0x87, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0,
+0x80, 0x29, 0x90, 0x02, 0x86, 0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80,
+0x1A, 0x90, 0x93, 0x43, 0xE0, 0x70, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x10, 0xF0, 0x80, 0x0C, 0x90,
+0x01, 0xB9, 0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x02,
+0xF0, 0x7F, 0x00, 0x22, 0xE5, 0x62, 0x64, 0x01, 0x70, 0x6B, 0xE5, 0x65, 0x60, 0x67, 0xE5, 0x65,
+0x64, 0x02, 0x60, 0x06, 0xE5, 0x65, 0x64, 0x05, 0x70, 0x27, 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x93,
+0x40, 0xF0, 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x93, 0x57, 0xF0, 0x90, 0x93, 0x40, 0xE0, 0x70, 0x07,
+0x90, 0x93, 0x57, 0xE0, 0xFF, 0x80, 0x05, 0x90, 0x93, 0x40, 0xE0, 0xFF, 0x90, 0x93, 0x40, 0xEF,
+0xF0, 0x90, 0x93, 0x42, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xE4, 0x90, 0x93, 0x41, 0xF0, 0x90, 0x93,
+0x58, 0xF0, 0x90, 0x05, 0x58, 0x74, 0x03, 0xF0, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C,
+0x74, 0x02, 0xF0, 0x53, 0x66, 0xFD, 0x53, 0x66, 0xEF, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02,
+0x80, 0x03, 0x12, 0x49, 0x2B, 0x22, 0x90, 0x93, 0xB1, 0xE0, 0xB4, 0x01, 0x04, 0x7D, 0x91, 0x80,
+0x0C, 0x90, 0x93, 0xB1, 0xE0, 0x70, 0x04, 0x7D, 0xD4, 0x80, 0x02, 0x7D, 0x40, 0x7F, 0x93, 0x12,
+0x53, 0xF0, 0x90, 0x00, 0x29, 0xE0, 0x54, 0x3F, 0xFD, 0x7F, 0x29, 0x12, 0x53, 0xF0, 0x90, 0x00,
+0x28, 0xE0, 0x54, 0xFC, 0xFD, 0x7F, 0x28, 0x12, 0x53, 0xF0, 0x90, 0x00, 0x08, 0xE0, 0x44, 0x10,
+0xFD, 0x7F, 0x08, 0x12, 0x53, 0xF0, 0x7F, 0x01, 0x12, 0x4E, 0x72, 0x90, 0x00, 0x00, 0xE0, 0x44,
+0x20, 0xFD, 0xE4, 0xFF, 0x12, 0x53, 0xF0, 0x90, 0x00, 0x20, 0xE0, 0x54, 0xFE, 0xFD, 0x7F, 0x20,
+0x12, 0x53, 0xF0, 0x90, 0x00, 0x90, 0xE0, 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x53, 0xF0, 0x7F,
+0x14, 0x7E, 0x00, 0x02, 0x3B, 0x09, 0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0, 0x13, 0x90, 0x93, 0x1A,
+0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x18, 0x90, 0x01, 0xB9, 0x74, 0x20, 0xF0, 0x80, 0x49,
+0x12, 0x51, 0xAC, 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x80, 0x39,
+0x90, 0x93, 0x55, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x80, 0x2B, 0x90, 0x93,
+0x52, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x04, 0xF0, 0x80, 0x1D, 0xE5, 0x64, 0x54, 0x0F,
+0xD3, 0x94, 0x04, 0x40, 0x08, 0x90, 0x01, 0xB9, 0x74, 0x08, 0xF0, 0x80, 0x0C, 0x90, 0x01, 0xB9,
+0xE4, 0xF0, 0x90, 0x01, 0xB8, 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x7F,
+0x00, 0x22, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xC8, 0x12, 0x44, 0xF1, 0x90, 0x93, 0x8A, 0x12, 0x43,
+0xA8, 0x12, 0x1E, 0xF6, 0xF5, 0x65, 0x14, 0x60, 0x0E, 0x14, 0x60, 0x1F, 0x14, 0x60, 0x31, 0x24,
+0x03, 0x70, 0x44, 0x7F, 0x01, 0x80, 0x3D, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02,
+0x12, 0x1F, 0x0F, 0xFD, 0xE4, 0xFF, 0x12, 0x50, 0x2A, 0x80, 0x29, 0x90, 0x93, 0x8A, 0x12, 0x43,
+0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x01, 0x12, 0x50, 0x2A, 0x1F, 0x80, 0x14,
+0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x7F, 0x02, 0x12,
+0x50, 0x2A, 0xE4, 0xFF, 0x12, 0x4B, 0x73, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F,
+0x24, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xA9,
+0x90, 0x04, 0x1D, 0xE0, 0x60, 0x24, 0x90, 0x05, 0x22, 0xE0, 0xF5, 0x27, 0x74, 0xFF, 0xF0, 0x12,
+0x5A, 0x0E, 0xBF, 0x01, 0x0D, 0x90, 0x93, 0xAA, 0xE0, 0xFF, 0x7D, 0x01, 0x12, 0x58, 0x90, 0x12,
+0x49, 0xC9, 0x90, 0x05, 0x22, 0xE5, 0x27, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0xAA, 0xE0, 0xFF, 0x7D,
+0x01, 0x12, 0x58, 0x90, 0x12, 0x49, 0xC9, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0x8F, 0x6C, 0xE4, 0x90, 0x94, 0x44, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x09, 0xE0, 0x7F,
+0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0xEF, 0x65, 0x6C, 0x60, 0x3E, 0xC3, 0x90, 0x94, 0x45, 0xE0,
+0x94, 0x88, 0x90, 0x94, 0x44, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x80,
+0xF0, 0x22, 0x90, 0x94, 0x44, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00,
+0x12, 0x3B, 0x09, 0xD3, 0x90, 0x94, 0x45, 0xE0, 0x94, 0x32, 0x90, 0x94, 0x44, 0xE0, 0x94, 0x00,
+0x40, 0xB9, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE0, 0xB2, 0x22, 0x90, 0x00, 0x20, 0xE0, 0x44, 0x01,
+0xFD, 0x7F, 0x20, 0x12, 0x53, 0xF0, 0x7F, 0xF4, 0x7E, 0x01, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x00,
+0xE0, 0x54, 0xDF, 0xFD, 0xE4, 0xFF, 0x12, 0x53, 0xF0, 0x90, 0x00, 0x28, 0xE0, 0x44, 0x03, 0xFD,
+0x7F, 0x28, 0x12, 0x53, 0xF0, 0x90, 0x00, 0x08, 0xE0, 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x53,
+0xF0, 0xE4, 0xFF, 0x12, 0x4E, 0x72, 0x7F, 0x64, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x90, 0x00, 0x29,
+0xE0, 0x44, 0xC0, 0xFD, 0x7F, 0x29, 0x02, 0x53, 0xF0, 0xE4, 0xFF, 0x90, 0x00, 0x6A, 0xE0, 0x30,
+0xE2, 0x22, 0xE0, 0x30, 0xE0, 0x20, 0xE0, 0x30, 0xE1, 0x0D, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x02,
+0x30, 0xE3, 0x13, 0x7F, 0x03, 0x80, 0x0F, 0x90, 0x00, 0x60, 0xE0, 0x7F, 0x03, 0x30, 0xE3, 0x06,
+0x7F, 0x02, 0x80, 0x02, 0x7F, 0x03, 0xEF, 0xFD, 0xD3, 0x90, 0x93, 0x4E, 0xE0, 0x9D, 0x90, 0x93,
+0x4D, 0xE0, 0x94, 0x00, 0x50, 0x05, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0xA3,
+0xE0, 0x90, 0x05, 0x58, 0xF0, 0x22, 0x48, 0x93, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x48, 0x93, 0x97, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x93, 0x9F, 0x00,
+0x41, 0x93, 0xAE, 0x00, 0x41, 0x93, 0x94, 0x00, 0x41, 0x94, 0x4A, 0x00, 0x41, 0x93, 0x13, 0x00,
+0x41, 0x93, 0x14, 0x00, 0x41, 0x92, 0x69, 0x00, 0x41, 0x92, 0x6A, 0x00, 0x41, 0x92, 0x68, 0x00,
+0x41, 0x94, 0x3D, 0x00, 0x41, 0x94, 0x4D, 0x00, 0x00, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
+0x90, 0x93, 0x56, 0x74, 0x01, 0xF0, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x94, 0x31,
+0x12, 0x1F, 0xC9, 0x90, 0x94, 0x31, 0x12, 0x43, 0x84, 0xEC, 0x44, 0x02, 0xFC, 0x90, 0x94, 0x31,
+0x12, 0x1F, 0xC9, 0x90, 0x94, 0x31, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F,
+0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xE5, 0x65, 0x14, 0x24, 0xFD,
+0x50, 0x02, 0x80, 0x35, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x2E, 0x90, 0x93, 0x3D, 0xE0, 0x60,
+0x09, 0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xA9, 0x12, 0x9D, 0x6C, 0x90, 0x93, 0x59,
+0xE0, 0x60, 0x06, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x0D, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x04,
+0x50, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, 0x4A, 0x62, 0x22, 0xEF, 0x14, 0x60, 0x09, 0x14, 0x60,
+0x16, 0x24, 0x02, 0x70, 0x32, 0x80, 0x0A, 0x90, 0x93, 0x57, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x40,
+0xF0, 0xE4, 0x90, 0x93, 0x5C, 0xF0, 0x22, 0xED, 0x70, 0x0A, 0x90, 0x93, 0x50, 0xE0, 0x90, 0x93,
+0x57, 0xF0, 0x80, 0x05, 0x90, 0x93, 0x57, 0xED, 0xF0, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x93, 0x40,
+0xF0, 0x90, 0x93, 0x5C, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C,
+0x74, 0x08, 0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F,
+0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74,
+0x02, 0xF0, 0x90, 0x93, 0x52, 0x14, 0xF0, 0xE5, 0x63, 0x54, 0x0F, 0xC3, 0x94, 0x0C, 0x50, 0x03,
+0x12, 0x4A, 0x5E, 0x22, 0x90, 0x01, 0x17, 0xE0, 0xFE, 0x90, 0x01, 0x16, 0xE0, 0x7C, 0x00, 0x24,
+0x00, 0xFF, 0xEC, 0x3E, 0x90, 0x93, 0x3E, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x01, 0x04, 0xE0, 0x54,
+0x0F, 0xFF, 0x74, 0x40, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
+0xD8, 0xF9, 0x90, 0x93, 0x54, 0xF0, 0xEE, 0x90, 0x93, 0x53, 0xF0, 0x22, 0xEF, 0x70, 0x0B, 0x90,
+0x93, 0xB0, 0xE0, 0x90, 0x94, 0x35, 0x60, 0x0B, 0x80, 0x12, 0x90, 0x93, 0xB0, 0xE0, 0x90, 0x94,
+0x35, 0x60, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x02, 0x10, 0x80, 0x07, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x01, 0x10, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x35, 0x7F, 0x60, 0x7E, 0x08, 0x02, 0x55, 0x51,
+0x90, 0x01, 0x37, 0x74, 0x02, 0xF0, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x12, 0x5A, 0x0E, 0xEF,
+0x70, 0x06, 0x90, 0x01, 0xC8, 0x74, 0xFD, 0xF0, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x93, 0x12,
+0x54, 0x48, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x90, 0x93, 0x46, 0xE0, 0x70, 0x1A, 0x90,
+0x04, 0x1D, 0xE0, 0x70, 0x14, 0x90, 0x93, 0xA9, 0xE0, 0xFF, 0xE4, 0xFD, 0x12, 0x58, 0x90, 0x8E,
+0x6A, 0x8F, 0x6B, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0x47, 0xE0, 0x60, 0x16,
+0x90, 0x93, 0x4A, 0xE0, 0x70, 0x10, 0x90, 0x93, 0x44, 0xE0, 0x90, 0x07, 0x78, 0x60, 0x04, 0x74,
+0x0D, 0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x54, 0xBF, 0xF0, 0xEF, 0x60,
+0x0A, 0xE5, 0x62, 0xB4, 0x01, 0x05, 0xE4, 0xFF, 0x12, 0x4E, 0x18, 0x53, 0x63, 0xF0, 0x43, 0x63,
+0x0C, 0x22, 0x90, 0x94, 0x4B, 0xEF, 0xF0, 0x12, 0x6B, 0xF8, 0x90, 0x94, 0x4B, 0xE0, 0x60, 0x05,
+0x90, 0x05, 0x22, 0xE4, 0xF0, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0x90, 0x04, 0x1A, 0xE0,
+0xF4, 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B, 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01,
+0x60, 0x02, 0x7F, 0x00, 0x22, 0x90, 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01,
+0x05, 0x7F, 0x01, 0x12, 0x4E, 0x18, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x04, 0x22, 0xE5, 0x64, 0x30,
+0xE6, 0x12, 0xE5, 0x64, 0x54, 0x0F, 0xFF, 0x90, 0x01, 0x2F, 0xE0, 0x54, 0x80, 0x4F, 0x64, 0x80,
+0xF0, 0x53, 0x64, 0xBF, 0x22, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x01, 0x12, 0x4C, 0xD6, 0x12, 0x4E,
+0xCA, 0x53, 0x63, 0xF0, 0x43, 0x63, 0x02, 0x22, 0x7D, 0x01, 0xAF, 0x64, 0x02, 0x4A, 0x62, 0x90,
+0x02, 0x84, 0xEF, 0xF0, 0xA3, 0xEE, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0xEF, 0x8E, 0xF0, 0x12,
+0x43, 0xF7, 0x52, 0x3A, 0x00, 0x40, 0x52, 0x62, 0x00, 0x80, 0x52, 0x8D, 0x01, 0x00, 0x52, 0xA1,
+0x02, 0x00, 0x52, 0xB9, 0x04, 0x00, 0x00, 0x00, 0x52, 0xD6, 0xED, 0x54, 0x3F, 0x70, 0x04, 0xFE,
+0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x40, 0xEF, 0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x06,
+0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78, 0x06, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9,
+0x80, 0x26, 0xED, 0x54, 0x7F, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x00, 0x7F, 0x80, 0xEF,
+0x2D, 0xFF, 0xEE, 0x3C, 0xFE, 0xEF, 0x78, 0x07, 0xCE, 0xC3, 0x13, 0xCE, 0x13, 0xD8, 0xF9, 0x78,
+0x07, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFD, 0xAC, 0x06, 0x80, 0x49, 0xED, 0x70, 0x04,
+0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x01, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x7D, 0x00, 0xFC, 0x80,
+0x35, 0xEC, 0x54, 0x01, 0x4D, 0x70, 0x04, 0xFE, 0xFF, 0x80, 0x04, 0x7E, 0x02, 0x7F, 0x00, 0xEF,
+0x2D, 0xEE, 0x3C, 0xC3, 0x13, 0x7D, 0x00, 0x80, 0x1A, 0xEC, 0x54, 0x03, 0x4D, 0x70, 0x04, 0xFE,
+0xFF, 0x80, 0x04, 0x7E, 0x04, 0x7F, 0x00, 0xEF, 0x2D, 0xEE, 0x3C, 0x13, 0x13, 0x54, 0x3F, 0x7D,
+0x00, 0x25, 0xE0, 0x25, 0xE0, 0xFC, 0xAE, 0x04, 0xAF, 0x05, 0x22, 0x90, 0x01, 0xE4, 0x74, 0x1F,
+0xF0, 0xA3, 0xE4, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x75, 0xF0, 0xA3, 0xF0, 0xF1, 0xE1, 0x75, 0x8E,
+0x02, 0xB1, 0x1A, 0x12, 0x60, 0x10, 0x90, 0x93, 0xB1, 0xEF, 0xF0, 0xF1, 0xE9, 0x90, 0x93, 0xB3,
+0xEF, 0xF0, 0x12, 0x60, 0x23, 0x90, 0x93, 0x95, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, 0xF5, 0x14,
+0xF5, 0x09, 0xF5, 0x62, 0x90, 0x93, 0xB0, 0xF0, 0x90, 0x00, 0xCC, 0xE0, 0x54, 0xF7, 0xF0, 0x12,
+0x87, 0x51, 0x12, 0x47, 0x2C, 0x12, 0x37, 0x1C, 0x71, 0xC7, 0x12, 0x5F, 0xD4, 0x12, 0x60, 0x3B,
+0xF1, 0xDA, 0x12, 0x5F, 0xF2, 0x12, 0x44, 0xFD, 0x12, 0x60, 0xA6, 0xB1, 0x02, 0x90, 0x93, 0x77,
+0xE5, 0xD9, 0xF0, 0xC2, 0xAF, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x40, 0xF0, 0x91, 0x38, 0x75, 0xE8,
+0x03, 0x43, 0xA8, 0x85, 0x12, 0x9A, 0xCA, 0xD2, 0xAF, 0x12, 0x90, 0x6F, 0x51, 0xDB, 0x12, 0x60,
+0x50, 0x90, 0x93, 0x75, 0xE0, 0x64, 0x01, 0xF0, 0x24, 0xE5, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x52,
+0xA3, 0xF0, 0xE5, 0x14, 0x30, 0xE0, 0x09, 0xC2, 0xAF, 0x53, 0x14, 0xFE, 0xB1, 0x2A, 0xD2, 0xAF,
+0xE5, 0x14, 0x30, 0xE4, 0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xEF, 0xD2, 0xAF, 0x12, 0x77, 0xF7, 0xE5,
+0x14, 0x30, 0xE6, 0x0A, 0xC2, 0xAF, 0x53, 0x14, 0xBF, 0xD2, 0xAF, 0x12, 0x7F, 0x4E, 0xE5, 0x14,
+0x30, 0xE7, 0x09, 0xC2, 0xAF, 0x53, 0x14, 0x7F, 0xD2, 0xAF, 0xB1, 0xB8, 0xC2, 0xAF, 0xE5, 0x64,
+0x54, 0x0F, 0xFF, 0xBF, 0x01, 0x0D, 0x90, 0x93, 0x43, 0x74, 0x01, 0xF0, 0x51, 0x08, 0xE4, 0x90,
+0x93, 0x43, 0xF0, 0xD2, 0xAF, 0x80, 0x9A, 0x90, 0x01, 0x3C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xA3,
+0xF0, 0x90, 0x01, 0x34, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x54, 0x71, 0xF0,
+0x7D, 0xFF, 0x7F, 0x55, 0x71, 0xF0, 0x7D, 0xFF, 0x7F, 0x56, 0x71, 0xF0, 0x7D, 0xFF, 0x7F, 0x57,
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8F, 0x82, 0x75, 0x83, 0x00, 0xED, 0xF0, 0x91, 0x38,
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x01, 0x30, 0xE4, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
+0x90, 0x01, 0x38, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, 0x50, 0x71, 0xF0, 0xE4,
+0xFD, 0x7F, 0x51, 0x71, 0xF0, 0xE4, 0xFD, 0x7F, 0x52, 0x71, 0xF0, 0xE4, 0xFD, 0x7F, 0x53, 0x80,
+0xBF, 0x90, 0x00, 0x02, 0xE0, 0x44, 0x01, 0xF0, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x7F,
+0x10, 0xDF, 0xFE, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x93, 0xF2, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xF6, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x00, 0x00, 0x90, 0x00, 0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x91, 0x38, 0x91, 0x31, 0x90, 0x00,
+0x02, 0xE0, 0x54, 0xFE, 0xF0, 0x90, 0x01, 0x00, 0x74, 0x3F, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0,
+0x90, 0x05, 0x53, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x4A, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78,
+0x74, 0x01, 0xF0, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x34, 0xE4, 0x90, 0x93, 0x56, 0xF0, 0xFF, 0x7E,
+0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0xF2, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF2, 0x12, 0x43, 0x84,
+0xEC, 0x54, 0xFD, 0xFC, 0x90, 0x93, 0xF2, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xF2, 0x12, 0x43, 0x84,
+0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x00, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x47,
+0xE0, 0x60, 0x22, 0xE4, 0xFF, 0x11, 0xDC, 0x90, 0x93, 0x5B, 0xE0, 0x60, 0x12, 0x90, 0x93, 0xF6,
+0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xF6, 0xB1, 0x4D, 0x90,
+0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x51, 0xE0, 0x60, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0x90, 0x94, 0x3E, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x94, 0x40, 0xF0, 0x90, 0x94,
+0x3E, 0xE0, 0x54, 0x7F, 0xF0, 0xA3, 0x74, 0x0A, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0xAD, 0xF0, 0x90,
+0x00, 0x80, 0xE0, 0x44, 0x80, 0xFD, 0x7F, 0x80, 0x61, 0xF0, 0xE4, 0x7B, 0x01, 0x7A, 0x92, 0x79,
+0x6B, 0x12, 0x76, 0x31, 0xEF, 0xB4, 0x02, 0x14, 0x90, 0x94, 0x4D, 0xE0, 0x64, 0x04, 0x60, 0x07,
+0x43, 0x14, 0x01, 0xE0, 0x04, 0xF0, 0x22, 0xE4, 0x90, 0x94, 0x4D, 0xF0, 0x22, 0x7F, 0x70, 0x7E,
+0x08, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0x54, 0xFC, 0xFF, 0x90, 0x01, 0xE8, 0xF0,
+0xEE, 0x44, 0xF0, 0xA3, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xEC, 0xF0, 0x90,
+0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x01, 0xED, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
+0x01, 0xEE, 0xF0, 0x12, 0x1E, 0xF6, 0x90, 0x01, 0xEF, 0xF0, 0x90, 0x01, 0xEB, 0x74, 0x40, 0xF0,
+0x12, 0x98, 0x93, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x04, 0xE0, 0xC3, 0x13, 0x30, 0xE0,
+0x16, 0xEF, 0x7B, 0x01, 0xB4, 0x01, 0x06, 0x7A, 0x93, 0x79, 0x0B, 0x80, 0x04, 0x7A, 0x93, 0x79,
+0x07, 0x7F, 0x80, 0x7E, 0x08, 0xB1, 0x51, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x92, 0x69, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6E, 0xF9, 0x74, 0x92, 0x35, 0xF0, 0xFA, 0x7B,
+0x01, 0xC0, 0x02, 0xC0, 0x01, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74, 0x92, 0x35,
+0xF0, 0xFA, 0x90, 0x94, 0x13, 0x12, 0x43, 0xC8, 0xD0, 0x01, 0xD0, 0x02, 0xD1, 0x12, 0x90, 0x92,
+0x69, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0xFF, 0x90,
+0x92, 0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0x3F, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x10, 0x12, 0x43, 0xC8, 0x90,
+0x92, 0x68, 0xE0, 0xFF, 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x65, 0xF1, 0xF5, 0xEF,
+0x70, 0x02, 0xC1, 0xCB, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22,
+0x75, 0x23, 0x02, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0xD1, 0xD0, 0x90, 0x94, 0x13, 0x12, 0x43,
+0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x10, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6,
+0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA2, 0xD1, 0xD0, 0x90, 0x01,
+0xAF, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0xB1, 0xE0, 0x64, 0x01, 0x70, 0x48, 0x90, 0x94, 0x10, 0x12,
+0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x75, 0x23, 0x02, 0x7B, 0x01, 0x7A, 0xFD, 0x79,
+0x20, 0xD1, 0xD0, 0x90, 0x94, 0x13, 0x12, 0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90,
+0x94, 0x10, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0x7B, 0x01,
+0x7A, 0xFD, 0x79, 0x22, 0xD1, 0xD0, 0x90, 0x93, 0x95, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E,
+0x83, 0x74, 0xFF, 0xF0, 0x90, 0x01, 0xCB, 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x8B, 0x1D, 0x8A, 0x1E, 0x89, 0x1F, 0x90, 0x94, 0x0A,
+0x12, 0x43, 0xC8, 0xAB, 0x20, 0xAA, 0x21, 0xA9, 0x22, 0x90, 0x94, 0x0D, 0x12, 0x43, 0xC8, 0xAF,
+0x23, 0x15, 0x23, 0xEF, 0x60, 0x1E, 0x90, 0x94, 0x0D, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1,
+0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x94, 0x0A, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x43, 0xB1, 0xEF, 0x12,
+0x42, 0x53, 0x80, 0xDB, 0xAB, 0x1D, 0xAA, 0x1E, 0xA9, 0x1F, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3,
+0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x16, 0x12, 0x43, 0xC8, 0x90, 0x92, 0x6A, 0xE0,
+0xFF, 0x90, 0x92, 0x69, 0xE0, 0xB5, 0x07, 0x07, 0x7D, 0x02, 0x7F, 0x03, 0x12, 0x3A, 0xAD, 0x90,
+0x92, 0x69, 0xE0, 0x70, 0x06, 0xA3, 0xE0, 0x64, 0x09, 0x60, 0x0B, 0x90, 0x92, 0x69, 0xE0, 0x14,
+0xFF, 0xA3, 0xE0, 0xB5, 0x07, 0x0D, 0xF1, 0xF5, 0xEF, 0x60, 0x70, 0xB1, 0xB8, 0x90, 0x01, 0x3F,
+0x74, 0x02, 0xF0, 0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x6E, 0xF9, 0x74, 0x92,
+0x35, 0xF0, 0xA8, 0x01, 0xFC, 0x7D, 0x01, 0x90, 0x94, 0x16, 0x12, 0x43, 0xA8, 0x7E, 0x00, 0x7F,
+0x02, 0x12, 0x1E, 0xD0, 0x90, 0x92, 0x6A, 0xE0, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x70, 0xF9, 0x74,
+0x92, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x90, 0x94, 0x19, 0x12,
+0x43, 0xA8, 0x8B, 0x20, 0x8A, 0x21, 0x89, 0x22, 0x90, 0x94, 0x16, 0x12, 0x43, 0xA8, 0x12, 0x1E,
+0xF6, 0xFF, 0xC4, 0x54, 0x0F, 0xF5, 0x23, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0xD1, 0xD0, 0x90,
+0x92, 0x6A, 0xE0, 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x02, 0xE4, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
+0x8F, 0x82, 0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0xE4, 0xF0, 0x22, 0x90, 0x01, 0x64, 0x74, 0x20, 0xF0,
+0x22, 0x90, 0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x7F, 0x00, 0x30,
+0xE3, 0x02, 0x7F, 0x01, 0x22, 0x7F, 0xAF, 0x7E, 0x01, 0x90, 0x94, 0x39, 0xEE, 0xF0, 0xA3, 0xEF,
+0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x94, 0x39, 0xE0, 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E,
+0x83, 0xE0, 0x60, 0x2C, 0xC3, 0x90, 0x94, 0x3C, 0xE0, 0x94, 0xE8, 0x90, 0x94, 0x3B, 0xE0, 0x94,
+0x03, 0x40, 0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x10, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x94, 0x3B,
+0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x0A, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0x80, 0xC6,
+0x7F, 0x01, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0xC4, 0x74, 0x43, 0xF0,
+0x74, 0x58, 0xA3, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, 0x90, 0x05, 0x22, 0xE0, 0x54, 0x90,
+0x60, 0x07, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x01, 0xC7, 0xE0, 0x30, 0xE1, 0xE4,
+0x7F, 0x00, 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x11, 0x43, 0xBF, 0x01, 0x0F,
+0x90, 0x02, 0x09, 0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x90, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22,
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFB, 0xFA, 0xEF, 0x30, 0xE0, 0x02, 0x7B, 0x80,
+0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0x90, 0x04, 0x25, 0xEF, 0xF0, 0xED, 0x60, 0x0E, 0x74,
+0x0F, 0x2B, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, 0x03, 0x74,
+0x08, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, 0xF5, 0x82,
+0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2B, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF7, 0xF0, 0xAE, 0x02, 0xAF, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22,
+0xE0, 0x54, 0xEF, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x3F, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x90,
+0xFD, 0x62, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x93, 0x67, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x54, 0x3F,
+0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0xFD, 0x63, 0xE0, 0x54, 0x03, 0x4F, 0x90, 0x93, 0x68, 0xF0,
+0x90, 0x93, 0x67, 0xE0, 0xFD, 0xA3, 0xE0, 0xFB, 0xE4, 0xFF, 0x90, 0x94, 0x1C, 0xEF, 0xF0, 0xA3,
+0xED, 0xF0, 0xA3, 0xEB, 0xF0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x19, 0x90, 0x05, 0x22, 0xE0, 0x90,
+0x94, 0x21, 0xF0, 0x51, 0x08, 0xBF, 0x01, 0x02, 0x31, 0x5D, 0x90, 0x94, 0x21, 0xE0, 0x90, 0x05,
+0x22, 0xF0, 0x80, 0x02, 0x31, 0x5D, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x22, 0x90, 0x93, 0xAC,
+0xE0, 0xFF, 0x7D, 0x01, 0x11, 0x90, 0x90, 0x94, 0x1F, 0xEE, 0xF0, 0xFC, 0xA3, 0xEF, 0xF0, 0xFD,
+0x90, 0x94, 0x1C, 0xE0, 0xFF, 0xA3, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x94, 0x2B, 0xF0, 0xEF, 0x60,
+0x10, 0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x80,
+0x0E, 0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF,
+0x05, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, 0xF0, 0x74,
+0x11, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0xAF, 0x05, 0x74,
+0x16, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x02, 0xF0, 0x74, 0x16, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0x03, 0xF0, 0xAE, 0x05, 0x74, 0x22, 0x2E,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEB, 0xF0, 0x90, 0x94, 0x2B, 0xE0, 0xFF, 0x74, 0x23,
+0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x24, 0x2E, 0xF5, 0x82, 0xE4,
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0x90,
+0x94, 0x48, 0xF0, 0xA3, 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, 0xE0, 0x70, 0x0B, 0xA3,
+0xE0, 0x70, 0x07, 0xA3, 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, 0x94, 0x49, 0xE0, 0x94,
+0xE8, 0x90, 0x94, 0x48, 0xE0, 0x94, 0x03, 0x40, 0x03, 0x7F, 0x00, 0x22, 0x7F, 0x32, 0x7E, 0x00,
+0x12, 0x3B, 0x09, 0x90, 0x94, 0x48, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x80, 0xC6, 0xE4,
+0x90, 0x93, 0x63, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x20, 0xE0, 0x02, 0xC1,
+0xF8, 0x12, 0x9D, 0x9A, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x01, 0x60, 0x02, 0x61, 0x66, 0x90, 0x93,
+0x1A, 0xE0, 0x30, 0xE0, 0x18, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90, 0x93, 0x1A,
+0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x06, 0xA3, 0xE0, 0x90, 0x93, 0x63, 0xF0, 0xE4, 0xF5, 0x48,
+0x90, 0x93, 0x63, 0xE0, 0x24, 0x03, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12,
+0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x90,
+0x93, 0x27, 0x30, 0xE0, 0x05, 0x74, 0x05, 0xF0, 0x80, 0x03, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x19,
+0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F, 0x90, 0x93, 0x16, 0xE0, 0xFF, 0x90, 0x93, 0x25,
+0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30,
+0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x6E, 0x90, 0x93, 0x2B,
+0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFB, 0xE4, 0xFD, 0x80, 0x05,
+0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x31, 0x2A, 0x80, 0x51, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54,
+0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0xFD, 0x7F, 0x04, 0x12,
+0x4A, 0x62, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x27, 0x90, 0x93,
+0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0x90, 0x93, 0x2A, 0xF0, 0x90, 0x93,
+0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x06, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x07, 0x90, 0x93,
+0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x20,
+0xE0, 0x02, 0xC1, 0xF8, 0xC1, 0x66, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x02, 0x60, 0x02, 0x81, 0x46,
+0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x08, 0x51, 0x08, 0xBF, 0x01,
+0x03, 0x12, 0x54, 0x48, 0xE4, 0xFF, 0x12, 0x6A, 0xBF, 0x90, 0x93, 0x1A, 0xE0, 0x30, 0xE0, 0x1F,
+0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x80, 0x0A, 0x90, 0x93, 0x1A, 0xE0, 0xC4, 0x54, 0x0F, 0x30,
+0xE0, 0x0D, 0xA3, 0xE0, 0x90, 0x93, 0x63, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xEF, 0xF0, 0xE4,
+0xF5, 0x48, 0x90, 0x93, 0x16, 0xE0, 0x24, 0x03, 0xFF, 0x90, 0x93, 0x63, 0xE0, 0x2F, 0xFF, 0x90,
+0x93, 0x25, 0xE0, 0xC3, 0x9F, 0xFF, 0x90, 0x93, 0x64, 0xE0, 0x2F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD,
+0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0xE4, 0xFF, 0xD1,
+0xF9, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30,
+0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54,
+0x0F, 0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x14, 0xE4,
+0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x62, 0x80, 0x0B, 0xE5, 0x65, 0x60, 0x0D, 0xE4, 0xFD, 0xAF, 0x64,
+0x12, 0x4A, 0x62, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x30, 0xE0, 0x05,
+0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x20,
+0xE0, 0x02, 0xC1, 0xF8, 0xC1, 0xF3, 0x90, 0x93, 0x27, 0xE0, 0x64, 0x03, 0x60, 0x02, 0xA1, 0x9B,
+0x7F, 0x01, 0x12, 0x6A, 0xBF, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0,
+0x03, 0x12, 0x6B, 0xF8, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x20, 0xE0, 0x02,
+0x81, 0xF7, 0x90, 0x93, 0x1F, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0xD3, 0x9F, 0x40, 0x4D, 0xE0,
+0x75, 0xF0, 0x03, 0xA4, 0xFF, 0x90, 0x93, 0x21, 0xE0, 0xFE, 0xC3, 0xEF, 0x9E, 0xFF, 0x24, 0x03,
+0xFD, 0xE4, 0x33, 0xFC, 0x90, 0x93, 0x17, 0xE0, 0xD3, 0x9D, 0xEC, 0x64, 0x80, 0xF8, 0x74, 0x80,
+0x98, 0x40, 0x08, 0xE0, 0x9F, 0x90, 0x93, 0x66, 0xF0, 0x80, 0x06, 0x90, 0x93, 0x66, 0x74, 0x03,
+0xF0, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x66, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E,
+0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x80, 0x24, 0xE4, 0xF5, 0x48, 0x90,
+0x93, 0x22, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90,
+0x93, 0x1D, 0x74, 0x04, 0xF0, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0,
+0xE4, 0x90, 0x93, 0x29, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x65, 0xE0, 0xFF, 0x90,
+0x93, 0x17, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39,
+0x77, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x7F, 0x01, 0xD1,
+0xF9, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x2F, 0x90, 0x93, 0x15, 0xE0,
+0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1A, 0x90, 0x93, 0x1A, 0xE0, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x4C,
+0xE0, 0x60, 0x02, 0x80, 0x0F, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x7D, 0x01, 0x7F, 0x0C, 0x80, 0x08,
+0xE5, 0x65, 0x60, 0x07, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x62, 0x90, 0x93, 0x4C, 0xE0, 0x60,
+0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x1F, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54,
+0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03,
+0x12, 0x51, 0x39, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13,
+0x54, 0x01, 0x20, 0xE0, 0x02, 0xC1, 0xF8, 0x7F, 0x01, 0xC1, 0xF5, 0x90, 0x93, 0x27, 0xE0, 0x64,
+0x04, 0x60, 0x02, 0xC1, 0x6C, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01,
+0x12, 0x39, 0x77, 0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x27, 0xE0, 0x04, 0xF0, 0x90,
+0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x0F, 0x90, 0x93, 0x17, 0xE0, 0xFF, 0x90,
+0x93, 0x25, 0xE0, 0xC3, 0x9F, 0x90, 0x93, 0x2B, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54,
+0x07, 0x30, 0xE0, 0x28, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x6E, 0x90,
+0x93, 0x2B, 0xE0, 0xC3, 0x94, 0x20, 0x50, 0x0A, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFB, 0xE4, 0xFD,
+0x80, 0x05, 0x7B, 0x7F, 0x7D, 0xFF, 0xE4, 0xFF, 0x31, 0x2A, 0x80, 0x51, 0x90, 0x93, 0x15, 0xE0,
+0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF, 0xF0, 0xE4, 0xFD, 0x7F,
+0x04, 0x12, 0x4A, 0x62, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x27,
+0x90, 0x93, 0x1C, 0xE0, 0x44, 0x02, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0x90, 0x93, 0x2A, 0xF0,
+0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x07, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x07,
+0x90, 0x93, 0x1C, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x90, 0x93, 0x18,
+0xE0, 0x20, 0xE0, 0x02, 0xC1, 0xF8, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22, 0x90, 0x93, 0x27, 0xE0,
+0x64, 0x05, 0x60, 0x02, 0xC1, 0xF8, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30,
+0xE0, 0x08, 0x51, 0x08, 0xBF, 0x01, 0x03, 0x12, 0x54, 0x48, 0xE4, 0xFF, 0x12, 0x6A, 0xBF, 0xE4,
+0xFF, 0xD1, 0xF9, 0xE4, 0x90, 0x93, 0x27, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07,
+0x30, 0xE0, 0x08, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x80, 0x2F, 0x90, 0x93, 0x15, 0xE0, 0xC4,
+0x54, 0x0F, 0x30, 0xE0, 0x14, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x14,
+0xE4, 0xFD, 0xAF, 0x64, 0x12, 0x4A, 0x62, 0x80, 0x0B, 0xE5, 0x65, 0x60, 0x0D, 0xE4, 0xFD, 0xAF,
+0x64, 0x12, 0x4A, 0x62, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0x30, 0xE0,
+0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
+0x30, 0xE0, 0x05, 0xE4, 0xFF, 0x12, 0x55, 0x98, 0x22, 0x90, 0x94, 0x2C, 0xEF, 0xF0, 0xF1, 0x5B,
+0x90, 0x93, 0x18, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x07, 0x20, 0xE0, 0x08, 0x90, 0x94, 0x2C, 0xE0,
+0xFF, 0x12, 0x50, 0xDC, 0x90, 0x94, 0x2D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x90, 0x94,
+0x2C, 0xE0, 0xB4, 0x01, 0x10, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
+0x30, 0xE0, 0x16, 0x80, 0x0A, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90,
+0x94, 0x2D, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x2D, 0x12,
+0x55, 0x4D, 0x90, 0x94, 0x2C, 0xE0, 0x90, 0x93, 0x26, 0xF0, 0x22, 0xEF, 0x64, 0x01, 0x70, 0x3C,
+0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x07, 0x90, 0x07, 0x78, 0x74,
+0x0D, 0xF0, 0x22, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x0D, 0xE0, 0x13, 0x13,
+0x54, 0x3F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x24, 0x80, 0x0E, 0x90, 0x93, 0x18, 0xE0, 0xC3, 0x13,
+0x90, 0x07, 0x78, 0x30, 0xE0, 0x02, 0x80, 0x14, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0,
+0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x04, 0x74, 0x03, 0xF0, 0x22,
+0x74, 0x01, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xE4, 0xFD, 0xFC, 0xEF, 0x30,
+0xE0, 0x02, 0x7D, 0x80, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0,
+0xD0, 0x92, 0xAF, 0x22, 0x75, 0x28, 0x33, 0xE4, 0xF5, 0x29, 0x75, 0x2A, 0x07, 0xF5, 0x2B, 0x90,
+0x01, 0x30, 0xE5, 0x28, 0xF0, 0xA3, 0xE5, 0x29, 0xF0, 0xA3, 0xE5, 0x2A, 0xF0, 0xA3, 0xE5, 0x2B,
+0xF0, 0x22, 0x75, 0x30, 0x1F, 0x75, 0x31, 0x01, 0x43, 0x31, 0x10, 0xE4, 0xF5, 0x32, 0x43, 0x32,
+0x20, 0x90, 0x01, 0x38, 0xE5, 0x30, 0xF0, 0xA3, 0xE5, 0x31, 0xF0, 0xA3, 0xE5, 0x32, 0xF0, 0x22,
+0x90, 0x00, 0xF4, 0xE0, 0x20, 0xE3, 0x09, 0xE0, 0x7F, 0x01, 0x20, 0xE2, 0x05, 0x7F, 0x02, 0x22,
+0x7F, 0x00, 0x22, 0x90, 0x93, 0xB3, 0xE0, 0xB4, 0x01, 0x0C, 0x90, 0x00, 0xF2, 0xE0, 0x30, 0xE7,
+0x05, 0x7E, 0xFD, 0x7F, 0x33, 0x22, 0x7E, 0xFD, 0x7F, 0x2F, 0x22, 0x90, 0x00, 0xF3, 0xE0, 0x30,
+0xE2, 0x0D, 0x90, 0x05, 0x41, 0x74, 0x10, 0xF0, 0x90, 0x05, 0x5A, 0xF0, 0xA3, 0xE4, 0xF0, 0x22,
+0xE4, 0x90, 0x93, 0x78, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x98, 0xE0, 0x7F, 0x00, 0x30, 0xE4, 0x02,
+0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E, 0xC3, 0x90, 0x93, 0x79, 0xE0, 0x94, 0x88, 0x90, 0x93,
+0x78, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93,
+0x78, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3,
+0x90, 0x93, 0x79, 0xE0, 0x94, 0x32, 0x90, 0x93, 0x78, 0xE0, 0x94, 0x00, 0x40, 0xB9, 0x90, 0x01,
+0xC7, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, 0x90, 0x01, 0x9C,
+0x74, 0x7E, 0xF0, 0xA3, 0x74, 0x92, 0xF0, 0xA3, 0x74, 0xA0, 0xF0, 0xA3, 0x74, 0x24, 0xF0, 0x90,
+0x01, 0x9B, 0x74, 0x49, 0xF0, 0x90, 0x01, 0x9A, 0x74, 0xE0, 0xF0, 0x90, 0x01, 0x99, 0xE4, 0xF0,
+0x90, 0x01, 0x98, 0x04, 0xF0, 0x22, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0xFF, 0xE0, 0x54, 0x0C,
+0x13, 0x13, 0x54, 0x3F, 0xFE, 0xEF, 0x64, 0x01, 0x60, 0x04, 0xEF, 0xB4, 0x03, 0x0E, 0x90, 0x93,
+0x5D, 0x74, 0x01, 0xF0, 0xA3, 0x74, 0x37, 0xF0, 0x79, 0x01, 0x80, 0x18, 0xEE, 0x64, 0x01, 0x60,
+0x07, 0xAF, 0x06, 0xEE, 0x64, 0x03, 0x70, 0x3C, 0x90, 0x93, 0x5D, 0x74, 0x01, 0xF0, 0xA3, 0x74,
+0x3D, 0xF0, 0x79, 0x40, 0x90, 0x93, 0x5D, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xF5, 0x82, 0x8E, 0x83,
+0xE0, 0x59, 0x60, 0x08, 0xE9, 0xF0, 0xE4, 0x90, 0x93, 0x9F, 0xF0, 0x22, 0x90, 0x93, 0x9F, 0xE0,
+0x04, 0xF0, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x0C, 0xE4, 0xF0, 0x90, 0x04, 0x19, 0xE0, 0x30, 0xE0,
+0x03, 0x12, 0x58, 0x7B, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75,
+0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06,
+0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0x45, 0xF0, 0x74, 0x61, 0xA3, 0xF0, 0x90, 0x01, 0x34, 0xE0,
+0x55, 0x28, 0xF5, 0x2C, 0xA3, 0xE0, 0x55, 0x29, 0xF5, 0x2D, 0xA3, 0xE0, 0x55, 0x2A, 0xF5, 0x2E,
+0xA3, 0xE0, 0x55, 0x2B, 0xF5, 0x2F, 0xE5, 0x2C, 0x20, 0xE0, 0x02, 0x61, 0x38, 0x90, 0x01, 0x34,
+0x74, 0x01, 0xF0, 0x85, 0xD1, 0x0A, 0x85, 0xD3, 0x0C, 0x85, 0xD4, 0x0D, 0x85, 0xD5, 0x0E, 0x85,
+0xD6, 0x0F, 0x85, 0xD7, 0x10, 0x85, 0xD9, 0x11, 0x85, 0xD2, 0x0B, 0x75, 0x20, 0x00, 0x75, 0x21,
+0x00, 0x75, 0x22, 0x0A, 0x75, 0x23, 0x08, 0xFB, 0x7A, 0x93, 0x79, 0xA0, 0x12, 0x56, 0xD0, 0x90,
+0x93, 0xA1, 0xE0, 0xFF, 0xC4, 0x13, 0x54, 0x01, 0xFE, 0xEF, 0xC4, 0x13, 0x13, 0x54, 0x01, 0x6E,
+0x70, 0x02, 0x41, 0xE9, 0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30,
+0xE0, 0x02, 0x41, 0xE9, 0xEF, 0x54, 0x1F, 0xF5, 0x4D, 0x90, 0x93, 0xA2, 0xE0, 0x54, 0x3F, 0xF5,
+0x4E, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82,
+0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xE5, 0x4E, 0xD3, 0x94, 0x04,
+0x40, 0x03, 0x75, 0x4E, 0x04, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C,
+0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0xA4,
+0xE0, 0x54, 0x1F, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x75, 0xF0, 0x0A, 0xE5, 0x4D, 0x90, 0x84, 0x00,
+0x12, 0x43, 0x9C, 0x75, 0xF0, 0x02, 0xE5, 0x4E, 0x12, 0x43, 0x9C, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0,
+0x90, 0x93, 0xA1, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x2F, 0x90, 0x93, 0xA4, 0xE0, 0x54,
+0x1F, 0xFF, 0xE5, 0x4D, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4,
+0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0xA3, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01,
+0x30, 0xE0, 0x66, 0xAF, 0x4D, 0x12, 0x79, 0xCB, 0x80, 0x5F, 0x90, 0x93, 0xA1, 0xE0, 0xFF, 0xC4,
+0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x52, 0x90, 0x93, 0xA4, 0xE0, 0x54, 0x1F, 0xFF, 0xFD, 0xE5,
+0x4D, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0x8D, 0xF0, 0x12,
+0x42, 0x87, 0x90, 0x93, 0xA3, 0xE0, 0xFE, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x0E,
+0xEE, 0x54, 0x7F, 0xFD, 0x8F, 0x55, 0xAB, 0x4E, 0xAF, 0x4D, 0xF1, 0x5C, 0x80, 0x1B, 0x90, 0x01,
+0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x11, 0x90, 0x04, 0x30, 0xE0, 0xB4, 0x01, 0x0A, 0xE4,
+0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x04, 0xCF, 0xF0, 0xE5, 0x65, 0x14, 0x24, 0xFD, 0x50, 0x02,
+0x80, 0x46, 0x90, 0x93, 0x59, 0xE0, 0x60, 0x37, 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C,
+0x74, 0x04, 0xF0, 0x12, 0x51, 0xAC, 0xEF, 0x64, 0x01, 0x70, 0x2D, 0xF5, 0x48, 0x90, 0x93, 0x45,
+0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5B,
+0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x55, 0xF0, 0x80, 0x09, 0x12,
+0x51, 0xAC, 0xBF, 0x01, 0x03, 0x12, 0x52, 0x08, 0xE5, 0x2C, 0x20, 0xE1, 0x02, 0x61, 0xDA, 0x90,
+0x01, 0x34, 0x74, 0x02, 0xF0, 0x90, 0xFD, 0x10, 0x74, 0x7F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x30,
+0xE5, 0x0B, 0x75, 0x4F, 0x88, 0x75, 0x50, 0x0F, 0x75, 0x51, 0x0F, 0x80, 0x09, 0x75, 0x4F, 0xC0,
+0x75, 0x50, 0x08, 0x75, 0x51, 0x07, 0x90, 0x04, 0x7F, 0xE0, 0x55, 0x51, 0xF5, 0x12, 0x90, 0x04,
+0x7E, 0xE0, 0x55, 0x51, 0xF5, 0x13, 0x65, 0x12, 0x60, 0x60, 0xE4, 0xFF, 0xE5, 0x12, 0x75, 0xF0,
+0x08, 0xA4, 0x25, 0x4F, 0x2F, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0xFE,
+0x74, 0x15, 0x2F, 0xF8, 0xA6, 0x06, 0x0F, 0xBF, 0x08, 0xE2, 0x75, 0x20, 0x00, 0x75, 0x21, 0x00,
+0x75, 0x22, 0x15, 0x75, 0x23, 0x08, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x97, 0x12, 0x56, 0xD0, 0x90,
+0x93, 0x97, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x02, 0xD1, 0x5C, 0xE5,
+0x12, 0x24, 0x01, 0xFF, 0xE4, 0x33, 0xFE, 0xAD, 0x50, 0x7C, 0x00, 0x12, 0x1F, 0x4E, 0xAF, 0x05,
+0x8F, 0x12, 0x90, 0x04, 0x7F, 0xEF, 0xF0, 0xB5, 0x13, 0xA0, 0xE5, 0x2C, 0x30, 0xE3, 0x06, 0x90,
+0x01, 0x34, 0x74, 0x08, 0xF0, 0xE5, 0x2C, 0x30, 0xE4, 0x09, 0x90, 0x01, 0x34, 0x74, 0x10, 0xF0,
+0x43, 0x14, 0x10, 0xE5, 0x2C, 0x30, 0xE5, 0x26, 0x90, 0x01, 0xCF, 0xE0, 0x30, 0xE5, 0x1F, 0xE0,
+0x54, 0xDF, 0xF0, 0x90, 0x01, 0x34, 0x74, 0x20, 0xF0, 0x75, 0xA8, 0x00, 0x75, 0xE8, 0x00, 0x12,
+0x54, 0x05, 0x90, 0x00, 0x03, 0xE0, 0x54, 0xFB, 0xF0, 0x12, 0x54, 0x38, 0x80, 0xFE, 0xE5, 0x2C,
+0x30, 0xE6, 0x06, 0x90, 0x01, 0x34, 0x74, 0x40, 0xF0, 0xE5, 0x2E, 0x20, 0xE0, 0x02, 0x81, 0xE3,
+0x90, 0x93, 0xB2, 0x74, 0x01, 0xF0, 0x90, 0x01, 0x36, 0xF0, 0x90, 0x93, 0xAF, 0xE0, 0x60, 0x0F,
+0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x12,
+0x45, 0x09, 0x90, 0x93, 0x2D, 0xE0, 0x20, 0xE0, 0x02, 0x81, 0xD9, 0x90, 0x05, 0x22, 0x74, 0xFF,
+0xF0, 0xE4, 0xFF, 0x12, 0x50, 0xDC, 0x90, 0x07, 0x78, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x57, 0x12,
+0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x2D,
+0xE0, 0xC4, 0x13, 0x54, 0x07, 0xFF, 0xE0, 0xFE, 0xC3, 0x13, 0x54, 0x0F, 0xC3, 0x9F, 0x40, 0x30,
+0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xE1, 0xF0, 0x90, 0x93, 0x32, 0x12, 0x43, 0x84, 0x90, 0x81,
+0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x60, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x90, 0x93, 0x2E, 0x12, 0x43,
+0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x34, 0x30, 0x80, 0x1C,
+0x90, 0x93, 0x2D, 0xE0, 0xFF, 0xC3, 0x13, 0x54, 0x0F, 0xFE, 0xEF, 0x54, 0xE1, 0xFF, 0xEE, 0x04,
+0x54, 0x0F, 0xFE, 0x25, 0xE0, 0x4F, 0xF0, 0x80, 0x03, 0x12, 0x6A, 0x4A, 0xD1, 0x7E, 0x90, 0x93,
+0xB2, 0xE4, 0xF0, 0xE5, 0x2E, 0x30, 0xE1, 0x45, 0x90, 0x01, 0x36, 0x74, 0x02, 0xF0, 0x43, 0x14,
+0x40, 0x12, 0x9F, 0x27, 0x11, 0xD6, 0x90, 0x93, 0x5C, 0xE0, 0x60, 0x1D, 0x90, 0x01, 0x3B, 0xE0,
+0x30, 0xE4, 0x16, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x3A,
+0x22, 0x90, 0x93, 0x57, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x05, 0x08, 0xE5, 0x08, 0xC3, 0x94, 0xFF,
+0x40, 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0xE5, 0x2E, 0x30,
+0xE2, 0x43, 0x90, 0x01, 0x36, 0x74, 0x04, 0xF0, 0x12, 0x4C, 0x64, 0x90, 0x93, 0x5C, 0xE0, 0x60,
+0x34, 0x90, 0x93, 0x57, 0xE0, 0xFF, 0x90, 0x93, 0x40, 0xE0, 0x6F, 0x70, 0x28, 0x90, 0x93, 0x57,
+0xE0, 0x90, 0x05, 0x73, 0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0xFD, 0x7F, 0x03, 0x12, 0x3A,
+0xAD, 0x7D, 0x01, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x22, 0x90,
+0x93, 0x40, 0xE0, 0x14, 0xF0, 0xE5, 0x2E, 0x30, 0xE3, 0x34, 0x90, 0x01, 0x36, 0x74, 0x08, 0xF0,
+0xE5, 0x62, 0x64, 0x01, 0x70, 0x28, 0xE5, 0x65, 0x60, 0x24, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90,
+0x01, 0x3C, 0x74, 0x02, 0xF0, 0x75, 0x48, 0x00, 0x90, 0x93, 0x4B, 0xE0, 0xF5, 0x49, 0xE4, 0xFB,
+0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x57, 0x74, 0x05, 0xF0, 0xE5, 0x2E,
+0x30, 0xE4, 0x2B, 0x90, 0x01, 0x36, 0x74, 0x10, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x20, 0xE5, 0x65,
+0x60, 0x1C, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x93, 0x5A,
+0xE4, 0xF0, 0x53, 0x66, 0xFD, 0xE5, 0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x52, 0x08, 0xE5, 0x2E,
+0x30, 0xE5, 0x25, 0x90, 0x01, 0x36, 0x74, 0x20, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x1A, 0xE5, 0x65,
+0x60, 0x16, 0x90, 0x93, 0x59, 0xE0, 0x64, 0x02, 0x60, 0x0B, 0xE5, 0x63, 0x64, 0x0C, 0x60, 0x08,
+0x12, 0x51, 0x39, 0x80, 0x03, 0x12, 0x50, 0x68, 0xE5, 0x2E, 0x30, 0xE6, 0x1B, 0x90, 0x01, 0x36,
+0x74, 0x40, 0xF0, 0xE5, 0x62, 0xB4, 0x01, 0x10, 0xE5, 0x65, 0x60, 0x0C, 0x53, 0x66, 0xFE, 0xE5,
+0x66, 0x54, 0x07, 0x70, 0x03, 0x12, 0x52, 0x08, 0xE5, 0x2F, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x37,
+0x74, 0x02, 0xF0, 0x12, 0x4F, 0xEB, 0x74, 0x45, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x61, 0xA3,
+0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0,
+0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x93, 0x5D, 0xE0,
+0x54, 0xF0, 0x44, 0x03, 0xF0, 0x54, 0x0F, 0x44, 0x80, 0xF0, 0x7B, 0x00, 0x7A, 0x00, 0x79, 0x15,
+0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x0B, 0x7A, 0x93, 0x79, 0x5D, 0x02, 0x57, 0x1F, 0x90, 0x94,
+0x3E, 0xE0, 0x30, 0xE0, 0x2F, 0xE5, 0x62, 0xB4, 0x01, 0x2A, 0x90, 0x94, 0x3D, 0xE0, 0x04, 0xF0,
+0xE0, 0xB4, 0x0A, 0x0B, 0x90, 0x94, 0x40, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x94, 0x3D, 0xF0, 0x90,
+0x94, 0x40, 0xE0, 0xFF, 0x90, 0x94, 0x3F, 0xE0, 0xD3, 0x9F, 0x50, 0x08, 0x12, 0x44, 0xFE, 0xE4,
+0x90, 0x94, 0x40, 0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00,
+0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x7D, 0xB5, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0x74, 0x66, 0xFF,
+0xA3, 0xF0, 0x53, 0x91, 0xEF, 0x90, 0x00, 0x51, 0xE0, 0xFE, 0x90, 0x00, 0x55, 0xE0, 0x5E, 0xF5,
+0x3D, 0x90, 0x00, 0x52, 0xE0, 0xFE, 0x90, 0x00, 0x56, 0xE0, 0x5E, 0xF5, 0x3E, 0xE5, 0x3D, 0x30,
+0xE4, 0x06, 0x90, 0x00, 0x55, 0x74, 0x10, 0xF0, 0xE5, 0x3D, 0x30, 0xE5, 0x06, 0x90, 0x00, 0x55,
+0x74, 0x20, 0xF0, 0xE5, 0x3D, 0x30, 0xE6, 0x06, 0x90, 0x00, 0x55, 0x74, 0x40, 0xF0, 0xE5, 0x3D,
+0x30, 0xE7, 0x06, 0x90, 0x00, 0x55, 0x74, 0x80, 0xF0, 0xE5, 0x3E, 0x30, 0xE0, 0x06, 0x90, 0x00,
+0x56, 0x74, 0x01, 0xF0, 0xE5, 0x3E, 0x30, 0xE1, 0x06, 0x90, 0x00, 0x56, 0x74, 0x02, 0xF0, 0xE5,
+0x3E, 0x30, 0xE2, 0x06, 0x90, 0x00, 0x56, 0x74, 0x04, 0xF0, 0xE5, 0x3E, 0x30, 0xE3, 0x06, 0x90,
+0x00, 0x56, 0x74, 0x08, 0xF0, 0x90, 0x01, 0xC4, 0xED, 0xF0, 0xA3, 0xEF, 0xF0, 0xD0, 0x07, 0xD0,
+0x06, 0xD0, 0x05, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xE0, 0x32, 0x8F, 0x52, 0x8D, 0x53,
+0xE5, 0x53, 0x54, 0x1F, 0x90, 0x93, 0x5F, 0xF0, 0x74, 0x01, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88,
+0xF5, 0x83, 0xE0, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x93, 0x60, 0x74, 0x01, 0xF0, 0xEB, 0xC3, 0x94,
+0x01, 0x40, 0x03, 0x02, 0x79, 0xCB, 0x90, 0x93, 0x5D, 0xE0, 0x25, 0x55, 0xFF, 0xA3, 0xF0, 0xA3,
+0xE0, 0x90, 0x41, 0xA4, 0x93, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x14, 0x74, 0x01, 0x25, 0x52, 0xF5,
+0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAD, 0x53, 0xAF, 0x52, 0x02, 0x79, 0x82, 0x90,
+0x93, 0x5E, 0xE0, 0xFF, 0x74, 0x01, 0x25, 0x52, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEF,
+0xF0, 0x22, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0,
+0x00, 0xC0, 0x01, 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x75,
+0x56, 0x00, 0x90, 0x01, 0xC4, 0x74, 0xC2, 0xF0, 0x74, 0x67, 0xA3, 0xF0, 0x53, 0x91, 0xDF, 0x90,
+0x01, 0x3C, 0xE0, 0x55, 0x30, 0xF5, 0x34, 0xA3, 0xE0, 0x55, 0x31, 0xF5, 0x35, 0xA3, 0xE0, 0x55,
+0x32, 0xF5, 0x36, 0xA3, 0xE0, 0x55, 0x33, 0xF5, 0x37, 0xE5, 0x34, 0x30, 0xE0, 0x06, 0x90, 0x01,
+0x3C, 0x74, 0x01, 0xF0, 0xE5, 0x34, 0x30, 0xE1, 0x10, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90,
+0x93, 0x15, 0xE0, 0x20, 0xE0, 0x03, 0x12, 0x46, 0x72, 0xE5, 0x34, 0x30, 0xE2, 0x36, 0x90, 0x01,
+0x3C, 0x74, 0x04, 0xF0, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE0, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93,
+0x45, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01,
+0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, 0x92, 0x74, 0x01, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x55, 0xE4,
+0xF0, 0x12, 0x52, 0x08, 0xE5, 0x34, 0x30, 0xE3, 0x36, 0x90, 0x01, 0x3C, 0x74, 0x08, 0xF0, 0x90,
+0x06, 0x92, 0xE0, 0x30, 0xE1, 0x21, 0x75, 0x48, 0x00, 0x90, 0x93, 0x45, 0xE0, 0xF5, 0x49, 0xE4,
+0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90,
+0x06, 0x92, 0x74, 0x02, 0xF0, 0x80, 0x08, 0x90, 0x93, 0x52, 0xE4, 0xF0, 0x12, 0x52, 0x08, 0xE5,
+0x34, 0x30, 0xE4, 0x34, 0x90, 0x01, 0x3C, 0x74, 0x10, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x30, 0xE0,
+0x24, 0x90, 0x05, 0x22, 0x74, 0xFF, 0xF0, 0xE4, 0xFF, 0x12, 0x50, 0xDC, 0x90, 0x07, 0x78, 0x74,
+0x01, 0xF0, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E, 0x08,
+0x12, 0x34, 0x30, 0x80, 0x03, 0x12, 0x5A, 0x4F, 0xE5, 0x34, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3C,
+0x74, 0x20, 0xF0, 0xE5, 0x35, 0x30, 0xE0, 0x18, 0x90, 0x01, 0x3D, 0x74, 0x01, 0xF0, 0x90, 0x00,
+0x83, 0xE0, 0xF5, 0x64, 0x90, 0x01, 0xBB, 0xE5, 0x64, 0xF0, 0x12, 0x51, 0xDD, 0x12, 0x52, 0x08,
+0xE5, 0x35, 0x30, 0xE2, 0x06, 0x90, 0x01, 0x3D, 0x74, 0x04, 0xF0, 0xE5, 0x35, 0x30, 0xE4, 0x1B,
+0x90, 0x01, 0x3D, 0x74, 0x10, 0xF0, 0x90, 0x93, 0xAE, 0xE0, 0x60, 0x0F, 0xE4, 0xF0, 0x90, 0x05,
+0x53, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05, 0xFD, 0xE0, 0x04, 0xF0, 0xE5, 0x36, 0x30, 0xE0, 0x06,
+0x90, 0x01, 0x3E, 0x74, 0x01, 0xF0, 0xE5, 0x36, 0x30, 0xE1, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x02,
+0xF0, 0xE5, 0x36, 0x30, 0xE3, 0x08, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0x71, 0xB2, 0xE5, 0x36,
+0x30, 0xE4, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x10, 0xF0, 0xE5, 0x36, 0x30, 0xE2, 0x75, 0x90, 0x01,
+0x3E, 0x74, 0x04, 0xF0, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE7, 0x13, 0x74, 0x80, 0xF0, 0x90, 0x07,
+0x95, 0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x44, 0x04, 0xF0, 0xE4, 0xFF, 0x12, 0x55, 0x98, 0x90, 0x07,
+0x8F, 0xE0, 0x30, 0xE6, 0x11, 0x74, 0x40, 0xF0, 0x90, 0x07, 0x7C, 0xE0, 0xB4, 0x06, 0x07, 0x90,
+0x07, 0x80, 0xE0, 0xFF, 0x71, 0xD0, 0x90, 0x07, 0x8F, 0xE0, 0x30, 0xE5, 0x14, 0x74, 0x20, 0xF0,
+0xE4, 0xFF, 0x12, 0x55, 0x98, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3, 0xE0, 0x44, 0x01,
+0xF0, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE2, 0x0D, 0x74, 0x04, 0xF0, 0xA3, 0xE0, 0x54, 0xFB, 0xF0,
+0x7F, 0x01, 0x12, 0x55, 0x98, 0x90, 0x07, 0x95, 0xE0, 0x30, 0xE0, 0x07, 0x74, 0x01, 0xF0, 0xFF,
+0x12, 0x55, 0x98, 0xE5, 0x36, 0x30, 0xE5, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x20, 0xF0, 0xE5, 0x36,
+0x30, 0xE6, 0x06, 0x90, 0x01, 0x3E, 0x74, 0x40, 0xF0, 0xE5, 0x36, 0x30, 0xE7, 0x06, 0x90, 0x01,
+0x3E, 0x74, 0x80, 0xF0, 0xE5, 0x37, 0x30, 0xE1, 0x09, 0x90, 0x01, 0x3F, 0x74, 0x02, 0xF0, 0x43,
+0x14, 0x80, 0xE5, 0x37, 0x30, 0xE4, 0x1D, 0x90, 0x01, 0x3F, 0x74, 0x10, 0xF0, 0x12, 0x44, 0x24,
+0x90, 0x93, 0x57, 0xE0, 0x90, 0x05, 0x73, 0xF0, 0x7D, 0x02, 0x7F, 0x02, 0x12, 0x3A, 0x93, 0x51,
+0x4A, 0x12, 0x66, 0x7E, 0x74, 0xC2, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x67, 0xA3, 0xF0, 0xD0,
+0x07, 0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0,
+0xD0, 0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x93, 0x15, 0xE0, 0x30, 0xE0,
+0x6D, 0x7F, 0x01, 0x51, 0xBF, 0x90, 0x93, 0x19, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0,
+0x02, 0x71, 0xF8, 0x7F, 0x01, 0x12, 0x5E, 0xF9, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54, 0x07,
+0x20, 0xE0, 0x29, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1F, 0x90, 0x93, 0x1A,
+0xE0, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x06, 0x7D, 0x01, 0x7F, 0x04, 0x80, 0x09,
+0x90, 0x05, 0x22, 0xE4, 0xF0, 0x7D, 0x01, 0x7F, 0x0C, 0x12, 0x4A, 0x62, 0x90, 0x93, 0x4C, 0xE0,
+0x90, 0x05, 0x22, 0x60, 0x05, 0x74, 0x6F, 0xF0, 0x80, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x18, 0xE0,
+0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0, 0x05, 0x7F, 0x01, 0x12, 0x55, 0x98, 0x22, 0xEF,
+0x64, 0x03, 0x60, 0x02, 0x61, 0x8D, 0x90, 0x94, 0x02, 0x74, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0,
+0xA3, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, 0x30, 0x90, 0x94,
+0x06, 0x74, 0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0, 0xA3, 0x74, 0xFA, 0xF0, 0xA3, 0x74, 0x5A, 0xF0,
+0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x41, 0x90, 0x94, 0x02, 0x74, 0xFF, 0xF0,
+0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0x80, 0x2D, 0x90, 0x93,
+0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x17, 0x90, 0x94, 0x02, 0x74, 0xFF, 0xF0, 0xA3, 0x74,
+0x55, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xA3, 0x74, 0x55, 0xF0, 0xA3, 0x74, 0x5A, 0x80, 0x05, 0x90,
+0x94, 0x06, 0x74, 0x55, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x94, 0x02, 0xE0, 0x90,
+0x06, 0xC0, 0xF0, 0x90, 0x94, 0x03, 0xE0, 0x90, 0x06, 0xC1, 0xF0, 0x90, 0x94, 0x04, 0xE0, 0x90,
+0x06, 0xC2, 0xF0, 0x90, 0x94, 0x05, 0xE0, 0x90, 0x06, 0xC3, 0xF0, 0x90, 0x94, 0x06, 0xE0, 0x90,
+0x06, 0xC4, 0xF0, 0x90, 0x94, 0x07, 0xE0, 0x90, 0x06, 0xC5, 0xF0, 0x90, 0x94, 0x08, 0xE0, 0x90,
+0x06, 0xC6, 0xF0, 0x90, 0x94, 0x09, 0xE0, 0x90, 0x06, 0xC7, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4,
+0x13, 0x13, 0x54, 0x03, 0x90, 0x06, 0xCC, 0x30, 0xE0, 0x24, 0xE4, 0xF0, 0x22, 0xEF, 0xB4, 0x01,
+0x10, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x16, 0x90, 0x06, 0xCC, 0xE4, 0xF0,
+0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x06, 0x90, 0x06, 0xCC, 0x74, 0x03,
+0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x11, 0x90, 0x93,
+0x1C, 0xE0, 0xC3, 0x13, 0x30, 0xE0, 0x08, 0xE0, 0x44, 0x04, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0x22,
+0xAD, 0x07, 0x90, 0x93, 0x63, 0xE0, 0x54, 0xF0, 0x44, 0x05, 0xF0, 0x54, 0x0F, 0x44, 0x10, 0xF0,
+0x90, 0x93, 0x65, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x65, 0x90, 0x94, 0x19, 0x12, 0x43,
+0xC8, 0x7A, 0x93, 0x79, 0x63, 0x02, 0x57, 0x1F, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90,
+0x93, 0xEA, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0xEE, 0x12, 0x1F, 0xD5, 0x00,
+0x00, 0x00, 0x00, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, 0xF0,
+0x90, 0x93, 0x4A, 0xE0, 0x60, 0x06, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x3D, 0xE0,
+0x60, 0x14, 0x12, 0x51, 0xAC, 0xBF, 0x01, 0x0B, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0xC4, 0x54, 0x0F,
+0x30, 0xE0, 0x03, 0x12, 0x4F, 0xA9, 0x90, 0x93, 0x2D, 0xE0, 0x20, 0xE0, 0x24, 0x90, 0x93, 0x47,
+0xE0, 0x60, 0x1E, 0x7F, 0x01, 0x12, 0x50, 0xDC, 0x90, 0x93, 0x5B, 0xE0, 0x60, 0x13, 0x90, 0x93,
+0xEE, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xEE, 0x12, 0x55,
+0x4D, 0x12, 0x54, 0x31, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
+0x90, 0x93, 0x87, 0x12, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x93, 0x15,
+0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x12, 0x1E,
+0xF6, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x10,
+0xFF, 0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x15,
+0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x12, 0x1E,
+0xF6, 0xFC, 0x54, 0x80, 0xFF, 0x90, 0x93, 0x15, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90, 0x00, 0x03,
+0x12, 0x1F, 0x0F, 0xFD, 0x54, 0x01, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xED,
+0x54, 0x02, 0xFF, 0xE0, 0x54, 0xFD, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFD, 0x54,
+0x04, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0xFB, 0x4F, 0xF0, 0xED, 0x54, 0x10, 0xFF, 0xE0, 0x54,
+0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x18,
+0xE0, 0x54, 0xDF, 0x4E, 0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00,
+0x03, 0x12, 0x1F, 0x0F, 0x54, 0x80, 0xFF, 0x90, 0x93, 0x18, 0xE0, 0x54, 0x7F, 0x4F, 0xF0, 0x90,
+0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x20, 0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xDF, 0x4E,
+0xF0, 0xEF, 0x54, 0x40, 0xFF, 0xE0, 0x54, 0xBF, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F,
+0xFF, 0x54, 0x80, 0xFE, 0x90, 0x93, 0x19, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x10, 0xFF,
+0xE0, 0x54, 0xEF, 0x4F, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x04, 0xFE, 0x90,
+0x93, 0x19, 0xE0, 0x54, 0xFB, 0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54, 0xF7, 0x4F, 0xF0,
+0xEC, 0x20, 0xE0, 0x02, 0xC1, 0xF3, 0x90, 0x05, 0x54, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x25, 0xF0,
+0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x1C, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8,
+0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x16, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
+0x90, 0x93, 0x17, 0xF0, 0x80, 0x4E, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x01, 0x12,
+0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03, 0x90, 0x93, 0x16, 0x50,
+0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x93, 0x16, 0x74, 0x2A, 0xF0,
+0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0xC3, 0x94, 0x2A, 0x50, 0x12, 0xEF, 0xC3, 0x94, 0x03,
+0x90, 0x93, 0x17, 0x50, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x0A, 0xEF, 0xF0, 0x80, 0x06, 0x90, 0x93,
+0x17, 0x74, 0x2A, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0, 0x3D,
+0x90, 0x93, 0x16, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x1E, 0xF0, 0xE0, 0xC3, 0x13, 0xA3,
+0xF0, 0x90, 0x93, 0x17, 0xE0, 0x75, 0xF0, 0x03, 0x84, 0x90, 0x93, 0x20, 0xF0, 0x90, 0x93, 0x16,
+0xE0, 0xC3, 0x13, 0x90, 0x93, 0x21, 0xF0, 0x90, 0x93, 0x17, 0xE0, 0xC3, 0x13, 0x90, 0x93, 0x22,
+0xF0, 0x90, 0x01, 0x3E, 0x74, 0x08, 0xF0, 0xFD, 0x7F, 0x02, 0x12, 0x3A, 0xAD, 0xE4, 0x90, 0x93,
+0x11, 0xF0, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xC4, 0x13,
+0x13, 0x54, 0x03, 0x20, 0xE0, 0x14, 0x12, 0x1E, 0xF6, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0,
+0x04, 0x7F, 0x01, 0x80, 0x02, 0xE4, 0xFF, 0x12, 0x50, 0xDC, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x54,
+0x0F, 0x30, 0xE0, 0x18, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, 0x03, 0x75,
+0x64, 0x04, 0x90, 0x05, 0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x11, 0xF0, 0x90, 0x05, 0x58, 0x74,
+0x03, 0xF0, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x27, 0x74, 0x01, 0xF0, 0x80,
+0x2B, 0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x04, 0x08, 0x90, 0x93, 0x27, 0x74, 0x04, 0xF0, 0x80, 0x1C,
+0x90, 0x93, 0x1D, 0xE0, 0xB4, 0x06, 0x08, 0x90, 0x93, 0x27, 0x74, 0x02, 0xF0, 0x80, 0x0D, 0x90,
+0x93, 0x1D, 0xE0, 0xB4, 0x07, 0x06, 0x90, 0x93, 0x27, 0x74, 0x05, 0xF0, 0xE4, 0x90, 0x93, 0x1D,
+0xF0, 0x80, 0x65, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0x13, 0x13, 0x13,
+0x54, 0x1F, 0x90, 0x93, 0x83, 0x30, 0xE0, 0x09, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x80,
+0x07, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x12, 0x9B, 0x2D, 0x90, 0x00, 0x40, 0x74, 0x20,
+0xF0, 0x90, 0x93, 0x87, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x13, 0x13, 0x13,
+0x54, 0x1F, 0x90, 0x07, 0x78, 0x30, 0xE0, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0,
+0x7B, 0x01, 0x7A, 0x93, 0x79, 0x83, 0x12, 0x55, 0x4D, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x05,
+0x00, 0x74, 0x1C, 0xF0, 0xA3, 0x74, 0x43, 0xF0, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xDF, 0xF0, 0xE4,
+0x90, 0x93, 0x26, 0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x30, 0xE0,
+0x09, 0x90, 0x93, 0x04, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x0C, 0x7F, 0x01, 0x12, 0x55, 0x98, 0x90,
+0x93, 0x04, 0xE0, 0x54, 0xFD, 0xF0, 0x7F, 0x03, 0x51, 0xBF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xC0,
+0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01,
+0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x53, 0x91, 0xBF, 0x90,
+0xFD, 0x68, 0xE0, 0x20, 0xE0, 0x03, 0x02, 0x72, 0x0E, 0x90, 0x93, 0x94, 0xE0, 0x70, 0x16, 0x90,
+0x00, 0x2E, 0xE0, 0x90, 0x93, 0x0F, 0xF0, 0x90, 0x00, 0x2D, 0xE0, 0x90, 0x93, 0x10, 0xF0, 0x90,
+0x93, 0x94, 0x74, 0x01, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x54, 0x3F, 0xD3, 0x94, 0x09, 0x50, 0x03,
+0x12, 0x9B, 0xE0, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x0E, 0x60, 0x03, 0x02, 0x70, 0x93, 0x90, 0x93,
+0x04, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x20, 0xE0, 0x03, 0x02, 0x70, 0x93, 0x90, 0xFD,
+0x62, 0xE0, 0x54, 0xC0, 0xFE, 0x90, 0x07, 0x90, 0xE0, 0x54, 0x3F, 0x4E, 0xF0, 0x90, 0xFD, 0x63,
+0xE0, 0x90, 0x07, 0x91, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x07, 0x92, 0xF0, 0x90, 0xFD, 0x65,
+0xE0, 0x90, 0x07, 0x93, 0xF0, 0x90, 0x07, 0x95, 0x74, 0x01, 0xF0, 0xEF, 0x20, 0xE0, 0x44, 0x90,
+0x93, 0x04, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x19, 0x90, 0x07, 0x78, 0x12, 0x58, 0xF0,
+0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x49, 0x90, 0x07, 0x83, 0xE0, 0x44, 0x40,
+0xF0, 0x80, 0x40, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0xC3, 0x13, 0x30, 0xE0, 0x11, 0xE4, 0xFF, 0x12,
+0x55, 0x98, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x01, 0xF0, 0xA3, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x07,
+0x78, 0x80, 0x14, 0x90, 0x93, 0x04, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x90, 0x07, 0x78, 0x30,
+0xE0, 0x05, 0x12, 0x58, 0xF0, 0x80, 0x0C, 0xE0, 0x44, 0x10, 0xF0, 0xE0, 0x44, 0x20, 0xF0, 0xE0,
+0x54, 0xDF, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x0F, 0x0A, 0x90, 0xFD, 0x62, 0xE0, 0xFF, 0xA3,
+0xE0, 0xFD, 0x51, 0xCA, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x15, 0x70, 0x76, 0x90, 0xFD, 0x62, 0xE0,
+0x90, 0x93, 0x6A, 0xF0, 0xE0, 0x30, 0xE6, 0x1C, 0xF4, 0x54, 0x3F, 0x04, 0xFF, 0x90, 0x93, 0x0F,
+0xE0, 0x13, 0x13, 0x54, 0x3F, 0xC3, 0x9F, 0x90, 0x93, 0x69, 0xF0, 0xD3, 0x94, 0x3F, 0x40, 0x20,
+0xE4, 0xF0, 0x80, 0x1C, 0x90, 0x93, 0x0F, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0xFF, 0x90, 0x93, 0x6A,
+0xE0, 0x54, 0x3F, 0x2F, 0x90, 0x93, 0x69, 0xF0, 0xD3, 0x94, 0x3F, 0x40, 0x03, 0x74, 0x3F, 0xF0,
+0x90, 0x93, 0x69, 0xE0, 0xFF, 0x90, 0x01, 0xE7, 0xF0, 0xEF, 0x54, 0x30, 0xC4, 0x54, 0x0F, 0xFF,
+0x90, 0x93, 0x69, 0xE0, 0xFE, 0x25, 0xE0, 0x25, 0xE0, 0x4F, 0x90, 0x93, 0x6B, 0xF0, 0x90, 0x00,
+0x2E, 0xF0, 0xEE, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x93, 0x10, 0xE0, 0x54, 0x0F, 0x4F, 0x90, 0x00,
+0x2D, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x16, 0x07, 0x90, 0xFD, 0x62, 0xE0, 0xFF, 0x51, 0x29,
+0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x21, 0x07, 0x90, 0xFD, 0x62, 0xE0, 0xFF, 0x51, 0x51, 0x90, 0xFD,
+0x60, 0xE0, 0xB4, 0x22, 0x02, 0x51, 0x79, 0x90, 0xFD, 0x60, 0xE0, 0x64, 0x23, 0x70, 0x7B, 0x90,
+0xFD, 0x62, 0xE0, 0x90, 0x93, 0x2C, 0x30, 0xE0, 0x05, 0x74, 0x01, 0xF0, 0x80, 0x02, 0xE4, 0xF0,
+0x90, 0xFD, 0x65, 0xE0, 0x30, 0xE1, 0x5B, 0x90, 0x93, 0x2D, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x05,
+0x22, 0x74, 0xFF, 0xF0, 0x7F, 0x60, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0x32, 0x12, 0x1F,
+0xC9, 0xE4, 0xFF, 0x12, 0x50, 0xDC, 0x7F, 0x70, 0x7E, 0x08, 0x12, 0x2C, 0x6E, 0x90, 0x93, 0x2E,
+0x12, 0x1F, 0xC9, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00, 0x7F, 0x70, 0x7E,
+0x08, 0x12, 0x34, 0x30, 0x90, 0x01, 0xBE, 0xE0, 0x04, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93,
+0x2D, 0x30, 0xE2, 0x08, 0xE0, 0x54, 0x1F, 0x44, 0x20, 0xF0, 0x80, 0x06, 0xE0, 0x54, 0x1F, 0x44,
+0x60, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0xFF, 0x12, 0x9C, 0x4C, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x24,
+0x02, 0x51, 0xA1, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x25, 0x13, 0x90, 0xFD, 0x62, 0xE0, 0x60, 0x0D,
+0x90, 0x93, 0x1C, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x93, 0x24, 0x74, 0x04, 0xF0, 0x90, 0xFD, 0x60,
+0xE0, 0xB4, 0x26, 0x05, 0x7F, 0x01, 0x12, 0x9C, 0xE8, 0x90, 0xFD, 0x60, 0xE0, 0xB4, 0x30, 0x07,
+0xE4, 0xFB, 0xFD, 0x7F, 0x01, 0x51, 0xF5, 0x90, 0xFD, 0x68, 0xE0, 0x44, 0x01, 0xF0, 0xD0, 0x07,
+0xD0, 0x06, 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0,
+0xD0, 0x82, 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0xAD, 0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54,
+0xF0, 0x44, 0x07, 0xF0, 0x54, 0x0F, 0x44, 0x10, 0xF0, 0x90, 0x93, 0x6E, 0xEF, 0xF0, 0x7B, 0x01,
+0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x57,
+0x1F, 0xAD, 0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x09, 0xF0, 0x54, 0x0F, 0x44, 0x10,
+0xF0, 0x90, 0x93, 0x6E, 0xEF, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12,
+0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x57, 0x1F, 0x90, 0x00, 0x75, 0xE0, 0x44, 0x01, 0xF0,
+0x7F, 0x01, 0x7E, 0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0x74, 0x03, 0xF0, 0x7F, 0x02, 0x7E,
+0x00, 0x12, 0x3A, 0x78, 0x90, 0xFE, 0x13, 0xE4, 0xF0, 0x90, 0x00, 0x75, 0xE0, 0x54, 0xFE, 0xF0,
+0x22, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x0D, 0xF0, 0x54, 0x0F, 0x44, 0x10, 0xF0, 0x90,
+0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6E, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19,
+0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x57, 0x1F, 0xAE, 0x07, 0x90, 0x93, 0x6C, 0xE0,
+0x54, 0xF0, 0x44, 0x04, 0xF0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x90, 0x93, 0x6E, 0xEE, 0xF0, 0xA3,
+0xED, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93,
+0x79, 0x6C, 0x02, 0x57, 0x1F, 0xAC, 0x07, 0x90, 0x93, 0xD9, 0xE0, 0x44, 0x0F, 0xF0, 0x54, 0x0F,
+0x44, 0x70, 0xF0, 0x90, 0x93, 0xDB, 0xEC, 0xF0, 0x60, 0x32, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93,
+0xDC, 0xF0, 0x90, 0xFD, 0x61, 0xE0, 0x90, 0x93, 0xDD, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93,
+0xDE, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0xDF, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93,
+0xE0, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0xE1, 0xF0, 0x80, 0x11, 0x90, 0x93, 0xDC, 0xED,
+0xF0, 0xA3, 0xEB, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A,
+0x93, 0x79, 0xDB, 0x90, 0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0xD9, 0x02, 0x57, 0x1F,
+0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x83, 0xF0, 0x90, 0x00,
+0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x84, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93,
+0x85, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x86, 0xF0, 0x90, 0x00, 0x04, 0x12,
+0x1F, 0x0F, 0x90, 0x93, 0x87, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0xFD, 0x58, 0xE0, 0x20,
+0xE0, 0x15, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x83, 0x7F, 0x30, 0x12, 0x98, 0x37, 0x90, 0x93, 0x83,
+0xE0, 0xFB, 0x7D, 0x01, 0xE4, 0x80, 0x07, 0x90, 0x93, 0x83, 0xE0, 0xFB, 0xE4, 0xFD, 0xFF, 0x51,
+0xF5, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x80, 0x12, 0x43, 0xC8, 0xEF, 0x12, 0x43, 0xD1,
+0x74, 0x73, 0x01, 0x74, 0x6A, 0x02, 0x74, 0xBB, 0x03, 0x74, 0xC4, 0x05, 0x74, 0xCD, 0x06, 0x76,
+0x24, 0x07, 0x74, 0xD6, 0x0B, 0x74, 0xDF, 0x10, 0x74, 0xE7, 0x11, 0x74, 0xEF, 0x12, 0x74, 0xF7,
+0x13, 0x75, 0x00, 0x14, 0x75, 0x09, 0x15, 0x75, 0x11, 0x16, 0x75, 0x1B, 0x17, 0x75, 0x25, 0x18,
+0x75, 0x2F, 0x19, 0x75, 0xF1, 0x1B, 0x75, 0xFA, 0x1C, 0x75, 0x38, 0x1D, 0x75, 0x42, 0x1E, 0x75,
+0x4D, 0x21, 0x75, 0x55, 0x22, 0x75, 0x5D, 0x23, 0x75, 0x65, 0x24, 0x75, 0x6D, 0x25, 0x75, 0x75,
+0x26, 0x75, 0x7D, 0x27, 0x75, 0x86, 0x28, 0x75, 0x8F, 0x29, 0x74, 0x7C, 0x2D, 0x74, 0x85, 0x2E,
+0x75, 0x98, 0x2F, 0x76, 0x03, 0x30, 0x75, 0xA9, 0x32, 0x75, 0xA0, 0x33, 0x74, 0x97, 0x34, 0x75,
+0xB2, 0x36, 0x75, 0xBB, 0x37, 0x75, 0xC4, 0x38, 0x75, 0xCD, 0x3A, 0x74, 0x8E, 0x3B, 0x75, 0xD6,
+0x3E, 0x75, 0xDF, 0x3F, 0x75, 0xE8, 0x41, 0x76, 0x0C, 0x46, 0x74, 0xA0, 0x47, 0x74, 0xB2, 0x48,
+0x74, 0xA9, 0x49, 0x76, 0x14, 0x4B, 0x00, 0x00, 0x76, 0x1D, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8,
+0x02, 0x90, 0x7B, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x90, 0x81, 0x90, 0x93, 0x80, 0x12,
+0x43, 0xA8, 0x02, 0x91, 0x62, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x91, 0xAA, 0x90, 0x93,
+0x80, 0x12, 0x43, 0xA8, 0x02, 0x91, 0xE3, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x92, 0x15,
+0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x92, 0x1B, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
+0x92, 0xDB, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x98, 0x2F, 0x90, 0x93, 0x80, 0x12, 0x43,
+0xA8, 0x02, 0x92, 0xEC, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x41, 0x90, 0x93, 0x80,
+0x12, 0x43, 0xA8, 0x02, 0x8F, 0x13, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x9E, 0x90,
+0x93, 0x80, 0x12, 0x43, 0xA8, 0xC1, 0x25, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xC1, 0x2B, 0x90,
+0x93, 0x80, 0x12, 0x43, 0xA8, 0xE1, 0x52, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x93, 0x34,
+0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x93, 0x4E, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xC1,
+0xBE, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x01, 0x80, 0x2F, 0x90, 0x93, 0x80, 0x12, 0x43,
+0xA8, 0x7F, 0x02, 0x80, 0x25, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x03, 0x80, 0x1B, 0x90,
+0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x95, 0x16, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xE4, 0xFF,
+0x80, 0x08, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x7F, 0x04, 0x02, 0x94, 0x34, 0x90, 0x93, 0x80,
+0x12, 0x43, 0xA8, 0xE1, 0x67, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xE1, 0x7F, 0x90, 0x93, 0x80,
+0x12, 0x43, 0xA8, 0xE1, 0x97, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xE1, 0xAF, 0x90, 0x93, 0x80,
+0x12, 0x43, 0xA8, 0xE1, 0xC7, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xE1, 0xDF, 0x90, 0x93, 0x80,
+0x12, 0x43, 0xA8, 0x02, 0x95, 0x4E, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x95, 0x67, 0x90,
+0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x95, 0x80, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0xE1, 0x58,
+0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x95, 0xA8, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02,
+0x95, 0xC1, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x95, 0xDA, 0x90, 0x93, 0x80, 0x12, 0x43,
+0xA8, 0x02, 0x97, 0x8D, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x97, 0x9F, 0x90, 0x93, 0x80,
+0x12, 0x43, 0xA8, 0x02, 0x6C, 0x79, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x97, 0xC2, 0x90,
+0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x97, 0xDB, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x98,
+0x16, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x8F, 0x6D, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8,
+0x02, 0x8F, 0x29, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x9A, 0x96, 0x90, 0x93, 0x80, 0x12,
+0x43, 0xA8, 0x61, 0x60, 0x90, 0x93, 0x80, 0x12, 0x43, 0xA8, 0x02, 0x98, 0x81, 0x90, 0x01, 0xC6,
+0xE0, 0x44, 0x01, 0xF0, 0x22, 0x7D, 0x05, 0x7F, 0x0B, 0x80, 0x0A, 0x7D, 0x01, 0x7F, 0x0C, 0x80,
+0x04, 0x7D, 0x03, 0x7F, 0x11, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x41, 0x12,
+0x43, 0xC8, 0xE4, 0xFE, 0x90, 0x00, 0xA3, 0xE0, 0x54, 0xF8, 0x44, 0x05, 0xF0, 0x90, 0x00, 0xA0,
+0xE0, 0x54, 0x0F, 0x64, 0x04, 0x70, 0x5A, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x49, 0x90, 0xFD,
+0x50, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xEE, 0xC3, 0x9D, 0x50, 0x1E, 0x90, 0x94, 0x41, 0x12, 0x43,
+0xA8, 0x8E, 0x82, 0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x52, 0x2E, 0xF5, 0x82, 0xE4,
+0x34, 0xFD, 0xF5, 0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDD, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x0F, 0x74,
+0x52, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5, 0x83, 0xE4, 0xF0, 0x0E, 0x80, 0xEB, 0x90, 0xFD,
+0x58, 0x74, 0x01, 0xF0, 0xFF, 0x80, 0x12, 0x90, 0x01, 0x43, 0xE0, 0x04, 0xF0, 0x7F, 0x02, 0x80,
+0x08, 0x90, 0x01, 0x42, 0xE0, 0x04, 0xF0, 0x7F, 0x03, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93,
+0x83, 0x12, 0x43, 0xC8, 0xE4, 0x90, 0x93, 0x86, 0xF0, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x42, 0x90,
+0x07, 0x78, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x07, 0x83, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x07, 0x78,
+0xE0, 0x44, 0x80, 0x54, 0xBF, 0xF0, 0x90, 0x93, 0x86, 0x74, 0x01, 0xF0, 0xFB, 0x7A, 0x93, 0x79,
+0x86, 0xFD, 0x7F, 0x1A, 0xD1, 0x35, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0x30,
+0xE1, 0x4F, 0x90, 0x93, 0x04, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x07, 0x95, 0xE0, 0x44, 0x06, 0xF0,
+0x22, 0x90, 0x93, 0x04, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x54, 0x3F, 0xF0, 0x90,
+0x07, 0x83, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x07, 0x95, 0xE0, 0x54, 0xF9, 0xF0, 0x90, 0x93, 0x0B,
+0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x80, 0x7E, 0x08, 0x12, 0x34, 0x30,
+0xE4, 0x90, 0x93, 0x86, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x86, 0x7D, 0x01, 0x7F, 0x1A, 0xD1,
+0x35, 0x22, 0x7D, 0x01, 0x7F, 0x0D, 0xC1, 0x35, 0x12, 0x1E, 0xF6, 0xFF, 0xE9, 0x24, 0x01, 0xF9,
+0xE4, 0x3A, 0xFA, 0x7D, 0x04, 0xC1, 0x35, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86,
+0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x17, 0xC1, 0x35, 0x90,
+0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43,
+0xA8, 0x7D, 0x01, 0x7F, 0x18, 0xC1, 0x35, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86,
+0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x19, 0xC1, 0x35, 0x90,
+0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43,
+0xA8, 0x7D, 0x01, 0x7F, 0x1A, 0xC1, 0x35, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86,
+0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1B, 0xC1, 0x35, 0x90,
+0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43,
+0xA8, 0x7D, 0x01, 0x7F, 0x1C, 0xC1, 0x35, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01,
+0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFD, 0x70, 0x02, 0x21,
+0x40, 0x90, 0x94, 0x4A, 0xE0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3,
+0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0x21, 0x39, 0x90, 0x94, 0x4A,
+0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD0, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x79, 0xF0, 0x75,
+0x20, 0x01, 0x75, 0x21, 0x93, 0x75, 0x22, 0x79, 0x75, 0x23, 0x01, 0x7B, 0x01, 0x7A, 0x93, 0x79,
+0x7A, 0x12, 0x56, 0xD0, 0x90, 0x93, 0x7A, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90,
+0x94, 0x4A, 0x30, 0xE0, 0x59, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x88, 0x12, 0x43, 0x9C, 0xE0,
+0x90, 0x93, 0x7B, 0xF0, 0x90, 0x94, 0x4A, 0xE0, 0x75, 0xF0, 0x02, 0x90, 0x00, 0x89, 0x12, 0x43,
+0x9C, 0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90, 0x94, 0x4A, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1,
+0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D, 0xF0, 0x90, 0x94, 0x4A, 0xE0, 0x75, 0xF0, 0x04, 0x90,
+0x01, 0xD2, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7E, 0xF0, 0x90, 0x94, 0x4A, 0xE0, 0x75, 0xF0,
+0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7F, 0xF0, 0x80, 0x33, 0xE0, 0x75,
+0xF0, 0x04, 0x90, 0x01, 0xD1, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7B, 0xF0, 0x90, 0x94, 0x4A,
+0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD2, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7C, 0xF0, 0x90,
+0x94, 0x4A, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD3, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x7D,
+0xF0, 0xEF, 0x54, 0x7F, 0xFF, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x7B, 0x12, 0x73, 0xC6, 0x90, 0x93,
+0x78, 0xE0, 0xFF, 0x90, 0x94, 0x4A, 0xE0, 0xFE, 0x74, 0x01, 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3,
+0x33, 0xD8, 0xFC, 0xF4, 0x5F, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x94, 0x4A, 0xE0, 0xFF, 0x74, 0x01,
+0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, 0x01, 0xCC, 0xF0, 0x90, 0x94, 0x4A,
+0xE0, 0x04, 0xF0, 0xE0, 0x54, 0x03, 0xF0, 0x01, 0x08, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x02, 0xF0,
+0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x22, 0x12,
+0x43, 0xC8, 0x90, 0x94, 0x25, 0xE0, 0x54, 0xF0, 0x44, 0x06, 0xFF, 0xF0, 0xED, 0x54, 0x0F, 0xC4,
+0x54, 0xF0, 0xFE, 0xEF, 0x54, 0x0F, 0x4E, 0xF0, 0x90, 0x94, 0x22, 0x12, 0x43, 0xA8, 0x90, 0x94,
+0x19, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x94, 0x79, 0x25, 0x12, 0x57, 0x1F, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xEF, 0xC3, 0x94, 0x20, 0x50, 0x0E, 0x74,
+0x84, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xED, 0xF0, 0x80, 0x29, 0x74, 0x27, 0x2F,
+0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xED, 0xF0, 0x90, 0x93, 0xCC, 0xEF, 0xF0, 0x24, 0x27,
+0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0xCD, 0xF0, 0x7B, 0x01, 0x7A, 0x93,
+0x79, 0xCC, 0x7D, 0x02, 0x31, 0x45, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xAD, 0x07, 0x75, 0xF0, 0x09,
+0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x62, 0xF0, 0x74, 0x28, 0x2D, 0xF5,
+0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83, 0xE0, 0x54, 0x1F, 0x90, 0x93, 0x61, 0xF0, 0x74, 0xE8, 0x2D,
+0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4,
+0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x5D, 0x74, 0xE8, 0x2D, 0xF5, 0x82, 0xE4,
+0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x85, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83,
+0xE0, 0xFF, 0x74, 0x82, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0x85,
+0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x25, 0xE0, 0x25, 0xE0, 0xFF, 0x74, 0xC6,
+0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEF, 0xF0, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4,
+0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0xC8, 0x40, 0x0D, 0x74, 0xC6, 0x2D, 0xF5, 0x82, 0xE4,
+0x34, 0x8E, 0xF5, 0x83, 0x74, 0xC8, 0xF0, 0x90, 0x93, 0x62, 0xE0, 0xFF, 0x90, 0x93, 0x61, 0xE0,
+0xD3, 0x9F, 0x40, 0x02, 0xEF, 0xF0, 0x90, 0x93, 0x61, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5,
+0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0,
+0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93,
+0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34,
+0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x05, 0x90, 0x93, 0x61, 0xE0, 0xFD, 0x31,
+0x82, 0x90, 0x01, 0x02, 0xE0, 0x54, 0x03, 0x64, 0x03, 0x60, 0x12, 0x90, 0x04, 0x30, 0xE0, 0x70,
+0x0C, 0x04, 0xF0, 0xA3, 0xF0, 0xA3, 0x04, 0xF0, 0x90, 0x04, 0xCF, 0x04, 0xF0, 0x90, 0x93, 0x61,
+0xE0, 0xFF, 0x22, 0xAC, 0x07, 0xEC, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2C, 0xF5, 0x82,
+0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x80, 0x11, 0x74, 0x27,
+0x2C, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x90,
+0x93, 0x88, 0xE0, 0x54, 0x1F, 0xFF, 0x90, 0x93, 0x8B, 0xF0, 0x75, 0xF0, 0x09, 0xEC, 0x90, 0x8A,
+0x89, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x8D, 0xF0, 0x75, 0xF0, 0x09, 0xEC, 0x90, 0x8A, 0x88,
+0x12, 0x43, 0x9C, 0xE0, 0xFE, 0x90, 0x93, 0x8E, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82,
+0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x8F, 0xCB, 0xF0, 0xA3, 0xEB,
+0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFB, 0xA3,
+0xE0, 0x90, 0x93, 0x91, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0x74, 0xC6, 0x2C, 0xF5, 0x82, 0xE4, 0x34,
+0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0xD3, 0x9E, 0x40, 0x0C, 0x90, 0x93, 0x8E, 0xE0, 0x90, 0x93,
+0x8B, 0xF0, 0x90, 0x93, 0x88, 0xF0, 0xED, 0x70, 0x02, 0x81, 0x5D, 0x90, 0x93, 0x8C, 0xED, 0xF0,
+0x90, 0x93, 0x88, 0xE0, 0x30, 0xE6, 0x0E, 0x90, 0x93, 0x8B, 0xE0, 0x90, 0x93, 0x88, 0xF0, 0x90,
+0x93, 0x8C, 0xE0, 0x14, 0xF0, 0x90, 0x93, 0x8C, 0xE0, 0x70, 0x02, 0x81, 0x5D, 0x90, 0x93, 0x8B,
+0xE0, 0xFF, 0xD3, 0x94, 0x00, 0x50, 0x02, 0x81, 0x5D, 0xE4, 0x90, 0x93, 0x8A, 0xF0, 0xEF, 0x14,
+0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x8D, 0xE0, 0xFD, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0xD3, 0x9D,
+0x40, 0x6F, 0xEF, 0x94, 0x10, 0x40, 0x21, 0xEF, 0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8,
+0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x91, 0xE0,
+0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0xC3, 0x94, 0x10,
+0x50, 0x37, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
+0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8F, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x1A, 0x90,
+0x93, 0x89, 0xE0, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0x04, 0xF0, 0x90, 0x93, 0x8C,
+0xE0, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0x6F, 0x60, 0x08, 0x90, 0x93, 0x89, 0xE0, 0x14, 0xF0, 0x80,
+0x83, 0x90, 0x93, 0x8C, 0xE0, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0xC3, 0x9F, 0x50, 0x0F, 0x90, 0x93,
+0x89, 0xE0, 0xB5, 0x05, 0x08, 0x90, 0x93, 0x8D, 0xE0, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x88,
+0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA,
+0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83,
+0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xEC, 0x25,
+0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF,
+0x04, 0x90, 0x93, 0x88, 0xE0, 0xFD, 0x31, 0x82, 0x90, 0x93, 0x88, 0xE0, 0xFF, 0x22, 0xAD, 0x07,
+0xED, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83,
+0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x80, 0x11, 0x74, 0x27, 0x2D, 0xF5, 0x82, 0xE4, 0x34,
+0x91, 0xF5, 0x83, 0xE0, 0x54, 0x7F, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x93, 0x88, 0xE0, 0xF9, 0x54,
+0x1F, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0xFF, 0x90,
+0x93, 0x8B, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0,
+0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x8C, 0xCB, 0xF0, 0xA3, 0xEB, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47,
+0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0xFB, 0xA3, 0xE0, 0x90, 0x93, 0x8E, 0xCB, 0xF0,
+0xA3, 0xEB, 0xF0, 0x90, 0x93, 0x89, 0xE0, 0xFE, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34,
+0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5,
+0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEA, 0xF0, 0xA3, 0xEB, 0xF0, 0xEE, 0xC3, 0x9F, 0x40, 0x02,
+0xC1, 0x0B, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5,
+0x83, 0xEF, 0xF0, 0xEF, 0x04, 0x90, 0x93, 0x8A, 0xF0, 0x90, 0x93, 0x8B, 0xE0, 0xFF, 0x90, 0x93,
+0x8A, 0xE0, 0xFE, 0xD3, 0x9F, 0x40, 0x02, 0xC1, 0x45, 0xEE, 0xC3, 0x94, 0x10, 0x40, 0x21, 0xEE,
+0x24, 0xF0, 0xFF, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33,
+0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8C, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x70, 0x27,
+0x90, 0x93, 0x8A, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x59, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07,
+0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x93, 0x8E, 0xE0, 0x5E,
+0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x3C, 0x90, 0x93, 0x8A, 0xE0, 0xB4, 0x11, 0x0D, 0x90, 0x93,
+0x8D, 0xE0, 0x30, 0xE7, 0x06, 0x90, 0x93, 0x8A, 0x74, 0x17, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0xFF,
+0x64, 0x13, 0x60, 0x04, 0xEF, 0xB4, 0x12, 0x0D, 0x90, 0x93, 0x8C, 0xE0, 0x30, 0xE0, 0x06, 0x90,
+0x93, 0x8A, 0x74, 0x18, 0xF0, 0x90, 0x93, 0x8A, 0xE0, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x88,
+0xF0, 0x80, 0x42, 0x90, 0x93, 0x8A, 0xE0, 0x04, 0xF0, 0xA1, 0x69, 0x90, 0x93, 0x8B, 0xE0, 0xFC,
+0x90, 0x93, 0x89, 0xE0, 0xFF, 0x6C, 0x70, 0x71, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92,
+0xF5, 0x83, 0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0xE0, 0xB4,
+0x01, 0x10, 0xE9, 0x20, 0xE6, 0x0C, 0x90, 0x93, 0x89, 0xE0, 0x44, 0x40, 0x90, 0x93, 0x88, 0xF0,
+0x80, 0x03, 0xAF, 0x01, 0x22, 0x90, 0x93, 0x89, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82,
+0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93, 0xFB, 0xEF, 0x25, 0xE0, 0x24,
+0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93, 0x2B, 0xFF, 0xE4, 0x93, 0x3A,
+0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A,
+0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x66, 0x90, 0x93, 0x89, 0xE0, 0xD3, 0x9C, 0x40,
+0x5E, 0x90, 0x93, 0x8B, 0xE0, 0xFF, 0x74, 0x28, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x92, 0xF5, 0x83,
+0xEF, 0xF0, 0x90, 0x93, 0x89, 0xEF, 0xF0, 0x90, 0x93, 0x88, 0xF0, 0xFC, 0xA3, 0xE0, 0xFF, 0x25,
+0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFA, 0x74, 0x01, 0x93,
+0xFB, 0xEF, 0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0x74, 0x01, 0x93,
+0x2B, 0xFF, 0xE4, 0x93, 0x3A, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x02,
+0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xAF, 0x04, 0x22, 0x74,
+0x01, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE4, 0xF0, 0xAF, 0x05, 0x90, 0x93, 0x88,
+0xE0, 0x44, 0x80, 0xFD, 0x31, 0x82, 0x90, 0x93, 0x88, 0xE0, 0x44, 0x80, 0xFF, 0x22, 0xEF, 0xC3,
+0x94, 0x20, 0x50, 0x39, 0xEF, 0x30, 0xE0, 0x17, 0xED, 0xC4, 0x54, 0xF0, 0xFD, 0xEF, 0xC3, 0x13,
+0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x0F, 0x80, 0x10, 0xEF,
+0xC3, 0x13, 0xFE, 0x24, 0xA4, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0xF0, 0xF0,
+0x74, 0xA4, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x4D, 0xF0, 0x22, 0xE4, 0x90,
+0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x40, 0x40, 0x03, 0x02, 0x87, 0x50,
+0xEF, 0xB4, 0x20, 0x14, 0x90, 0x8F, 0x46, 0xE0, 0x04, 0xF0, 0x90, 0x89, 0x01, 0xE0, 0xFF, 0x90,
+0x8F, 0x46, 0xE0, 0xB5, 0x07, 0x02, 0xE4, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x75, 0xF0, 0x09,
+0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0xE0, 0x64, 0x01, 0x60, 0x03, 0x02, 0x87, 0x47, 0xEF, 0x25,
+0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xD3, 0x94,
+0x00, 0xEE, 0x94, 0x00, 0x50, 0x03, 0x02, 0x87, 0x47, 0x90, 0x93, 0x78, 0xE0, 0x94, 0x20, 0x40,
+0x09, 0x90, 0x8F, 0x46, 0xE0, 0x60, 0x03, 0x02, 0x87, 0x50, 0x90, 0x93, 0x78, 0xE0, 0x75, 0xF0,
+0x0A, 0xA4, 0x24, 0x00, 0xF9, 0x74, 0x84, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5, 0x5B, 0x89, 0x5C,
+0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xFD, 0xA3,
+0xE0, 0x90, 0x93, 0x7D, 0xCD, 0xF0, 0xA3, 0xED, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82,
+0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93, 0x7F, 0xCF, 0xF0, 0xA3, 0xEF,
+0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x20, 0x50, 0x13, 0x74, 0x84, 0x2F, 0xF5, 0x82,
+0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93, 0x79, 0xF0, 0x80, 0x14, 0x90, 0x93,
+0x78, 0xE0, 0x24, 0x27, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0x90, 0x93,
+0x79, 0xF0, 0x90, 0x93, 0x79, 0xE0, 0xFE, 0x54, 0x1F, 0xA3, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF,
+0x75, 0xF0, 0x09, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xE0, 0x90, 0x93, 0x82, 0xF0, 0x74, 0x67,
+0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xC3, 0x94, 0x05, 0x40, 0x02, 0x41, 0xE5,
+0x90, 0x93, 0x82, 0xE0, 0xFF, 0x90, 0x93, 0x7A, 0xE0, 0x9F, 0x40, 0x13, 0x90, 0x93, 0x82, 0xE0,
+0x90, 0x93, 0x7A, 0xF0, 0xEE, 0x54, 0x40, 0xFE, 0x90, 0x93, 0x79, 0xF0, 0xEF, 0x4E, 0xF0, 0x90,
+0x93, 0x7A, 0xE0, 0xFF, 0x90, 0x41, 0x18, 0x93, 0xFE, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x85, 0xF5,
+0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x40, 0x06, 0xEF, 0x90, 0x40, 0xE0, 0x80,
+0x07, 0x90, 0x93, 0x7A, 0xE0, 0x90, 0x40, 0xFC, 0x93, 0x90, 0x93, 0x81, 0xF0, 0x90, 0x93, 0x81,
+0xE0, 0x75, 0xF0, 0x06, 0xA4, 0x24, 0x56, 0xF9, 0x74, 0x40, 0x35, 0xF0, 0xFA, 0x7B, 0xFF, 0x8B,
+0x57, 0xF5, 0x58, 0x89, 0x59, 0x90, 0x93, 0x78, 0xE0, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4,
+0x34, 0x8A, 0xF5, 0x83, 0xE0, 0xFF, 0xA3, 0xE0, 0x90, 0x93, 0x7B, 0xCF, 0xF0, 0xA3, 0xEF, 0xF0,
+0x12, 0x1E, 0xF6, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x9D, 0xFD,
+0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57,
+0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA,
+0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x02, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90,
+0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00,
+0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x04,
+0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12,
+0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0x7E,
+0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x06, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0,
+0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58,
+0xA9, 0x59, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9,
+0x5C, 0x90, 0x00, 0x08, 0x12, 0x42, 0xC8, 0xFD, 0xAC, 0xF0, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B,
+0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0xAB, 0x57, 0xAA, 0x58, 0xA9, 0x59, 0x90, 0x00, 0x05, 0x12,
+0x1F, 0x0F, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7D, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12, 0x1F, 0x3C,
+0xD3, 0x90, 0x93, 0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x40, 0x0C, 0xA3, 0xE0, 0x9F,
+0xF0, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0xF0, 0x80, 0x07, 0xE4, 0x90, 0x93, 0x7B, 0xF0, 0xA3, 0xF0,
+0x90, 0x93, 0x7B, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0x90, 0x93, 0x78, 0xE0, 0x25, 0xE0, 0x24, 0x02,
+0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x79, 0xE0,
+0x25, 0xE0, 0x24, 0x34, 0xF5, 0x82, 0xE4, 0x34, 0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFC, 0x74, 0x01,
+0x93, 0xFD, 0xD3, 0xEF, 0x9D, 0xEE, 0x9C, 0x50, 0x02, 0x41, 0xB4, 0x90, 0x93, 0x78, 0xE0, 0xFF,
+0x24, 0x82, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82,
+0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9E, 0x40, 0x03, 0xEF, 0x80, 0x1C, 0x90, 0x93,
+0x78, 0xE0, 0xFF, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x82,
+0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x90, 0x93, 0x83, 0xF0, 0x90,
+0x93, 0x83, 0xE0, 0xD3, 0x94, 0x04, 0x40, 0x02, 0x80, 0x23, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24,
+0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x01, 0x40, 0x0F, 0x74, 0xC6,
+0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x14, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x78,
+0xE0, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x78, 0xE0,
+0xFF, 0x24, 0xC6, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0x60, 0x02, 0xA1, 0xF5, 0x12,
+0x7C, 0xAE, 0xA1, 0xF5, 0x90, 0x93, 0x79, 0xE0, 0x25, 0xE0, 0x24, 0x6C, 0xF5, 0x82, 0xE4, 0x34,
+0x41, 0xF5, 0x83, 0xE4, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0xC3, 0x90, 0x93, 0x7C, 0xE0, 0x9F,
+0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x40, 0x02, 0xA1, 0xF5, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x7D, 0x01,
+0x12, 0x7A, 0xE3, 0xA1, 0xF5, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34,
+0x91, 0xF5, 0x83, 0xE0, 0xFC, 0x64, 0x05, 0x60, 0x02, 0x81, 0xC3, 0x90, 0x8A, 0x83, 0xE0, 0xFE,
+0xB4, 0x03, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x19, 0x40, 0x3D, 0x80, 0x2E, 0xEE, 0xB4,
+0x02, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x11, 0x40, 0x2E, 0x80, 0x1F, 0x90, 0x8A, 0x83,
+0xE0, 0xFE, 0xB4, 0x01, 0x0B, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x0A, 0x40, 0x1B, 0x80, 0x0C,
+0xEE, 0x70, 0x11, 0x90, 0x93, 0x7A, 0xE0, 0xC3, 0x94, 0x03, 0x40, 0x0D, 0x90, 0x8E, 0xC5, 0x74,
+0x01, 0xF0, 0x80, 0x05, 0xE4, 0x90, 0x8E, 0xC5, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFE, 0x24, 0xC4,
+0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x87, 0xF0, 0x74, 0x85, 0x2E, 0xF5,
+0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0xC3, 0x94, 0x30, 0x50, 0x0A, 0xE4, 0x90, 0x93,
+0x87, 0xF0, 0x74, 0x67, 0x2F, 0x81, 0x6E, 0x90, 0x8E, 0xC5, 0xE0, 0x64, 0x01, 0x60, 0x02, 0x81,
+0x63, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x64,
+0x0A, 0x60, 0x5B, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xEE, 0x24, 0x05, 0xFB, 0xE4, 0x33, 0xFA, 0x74,
+0x41, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x88, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x9B, 0xEA, 0x64, 0x80,
+0xF8, 0x74, 0x80, 0x98, 0x50, 0x38, 0x90, 0x93, 0x78, 0xE0, 0xFE, 0xEF, 0x24, 0x05, 0xFB, 0xE4,
+0x33, 0xFA, 0x74, 0x85, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xD3, 0x9B, 0xEA,
+0x64, 0x80, 0xF8, 0x74, 0x80, 0x98, 0x50, 0x16, 0x90, 0x93, 0x78, 0xE0, 0x24, 0xA7, 0xF5, 0x82,
+0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE0, 0xFF, 0x90, 0x93, 0x7A, 0xE0, 0x6F, 0x60, 0x56, 0x90, 0x93,
+0x78, 0xE0, 0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFF, 0xD3, 0x94, 0x42,
+0x40, 0x08, 0x90, 0x93, 0x87, 0x74, 0x05, 0xF0, 0x80, 0x11, 0xEF, 0xD3, 0x94, 0x39, 0x90, 0x93,
+0x87, 0x40, 0x05, 0x74, 0x03, 0xF0, 0x80, 0x03, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF,
+0x24, 0x85, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x41, 0x2F, 0xF5, 0x82,
+0xE4, 0x34, 0x88, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x06, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0x80, 0x2F, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34, 0x91,
+0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0x04,
+0xF0, 0x80, 0x14, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x67, 0xF5, 0x82,
+0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x7A, 0xE0, 0xFE, 0x90, 0x93, 0x78, 0xE0,
+0xFF, 0x24, 0xA7, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xEE, 0xF0, 0x90, 0x93, 0x87, 0xE0,
+0xFE, 0x74, 0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xEE, 0xF0, 0x75, 0xF0, 0x09,
+0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xE0, 0xB4, 0x01, 0x11, 0xE4, 0x90, 0x93, 0x87, 0xF0,
+0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x87, 0xE0,
+0xFD, 0xA1, 0xF2, 0xEC, 0x64, 0x06, 0x60, 0x02, 0xA1, 0xF5, 0x90, 0x93, 0x7B, 0xF0, 0xA3, 0xF0,
+0x90, 0x41, 0xE1, 0x93, 0xFF, 0x7E, 0x00, 0x90, 0x93, 0x7D, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0x12,
+0x1F, 0x3C, 0x90, 0x93, 0x85, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x24, 0xC4,
+0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE0, 0x90, 0x93, 0x87, 0xF0, 0xE4, 0x90, 0x93, 0x84,
+0xF0, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0xD3, 0x94, 0x04, 0x50, 0x47, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9,
+0x5C, 0x75, 0xF0, 0x02, 0xEF, 0xA4, 0xF5, 0x82, 0x85, 0xF0, 0x83, 0x12, 0x42, 0xC8, 0xFD, 0xAC,
+0xF0, 0xEF, 0x90, 0x41, 0xDC, 0x93, 0xFF, 0x7E, 0x00, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x7B, 0xEE,
+0x8F, 0xF0, 0x12, 0x42, 0x87, 0x90, 0x93, 0x85, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xD3, 0x90, 0x93,
+0x7C, 0xE0, 0x9F, 0x90, 0x93, 0x7B, 0xE0, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x84, 0xE0, 0x04, 0xF0,
+0x80, 0xAF, 0x90, 0x93, 0x84, 0xE0, 0xC3, 0x13, 0xF0, 0x90, 0x93, 0x87, 0xE0, 0xFF, 0xB4, 0x01,
+0x0D, 0x90, 0x93, 0x84, 0xE0, 0x70, 0x5D, 0x90, 0x93, 0x87, 0x04, 0xF0, 0x80, 0x5B, 0xEF, 0xB4,
+0x03, 0x1D, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93, 0x87, 0x74, 0x03, 0xF0, 0x80,
+0x48, 0xEF, 0xB4, 0x01, 0x08, 0x90, 0x93, 0x87, 0x74, 0x01, 0xF0, 0x80, 0x3C, 0x80, 0x35, 0x90,
+0x93, 0x87, 0xE0, 0x64, 0x05, 0x70, 0x32, 0x90, 0x93, 0x84, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x93,
+0x87, 0x74, 0x05, 0xF0, 0x80, 0x0F, 0xEF, 0x90, 0x93, 0x87, 0xB4, 0x01, 0x05, 0x74, 0x03, 0xF0,
+0x80, 0x03, 0x74, 0x01, 0xF0, 0xD3, 0x90, 0x93, 0x80, 0xE0, 0x94, 0x03, 0x90, 0x93, 0x7F, 0xE0,
+0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0xD3, 0x90, 0x93, 0x80, 0xE0, 0x94, 0x03,
+0x90, 0x93, 0x7F, 0xE0, 0x94, 0x00, 0x40, 0x05, 0xE4, 0x90, 0x93, 0x87, 0xF0, 0x90, 0x93, 0x87,
+0xE0, 0xFD, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0xC4, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83,
+0xED, 0xF0, 0x12, 0x7F, 0x0E, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x24, 0x67, 0xF5, 0x82, 0xE4, 0x34,
+0x91, 0xF5, 0x83, 0xE0, 0xD3, 0x94, 0x05, 0x50, 0x0F, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34,
+0x91, 0xF5, 0x83, 0xE0, 0x04, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x78, 0xE0, 0x24, 0x67, 0xF5, 0x82,
+0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x7F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xC3,
+0x74, 0xFF, 0x9F, 0xFF, 0x74, 0xFF, 0x9E, 0xFE, 0x90, 0x93, 0x78, 0xE0, 0xFD, 0x25, 0xE0, 0x24,
+0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFA, 0xA3, 0xE0, 0xD3, 0x9F, 0xEA, 0x9E,
+0x50, 0x1C, 0x90, 0x93, 0x7F, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5,
+0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEE, 0x8F, 0xF0, 0x12, 0x42, 0x87, 0x80, 0x14, 0x90, 0x93,
+0x78, 0xE0, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0,
+0xA3, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34, 0x8D,
+0xF5, 0x83, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xC3, 0x74, 0xFF, 0x9D, 0xFB, 0x74, 0xFF, 0x9C, 0xFA,
+0xEF, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
+0xD3, 0x9B, 0xEE, 0x9A, 0x90, 0x93, 0x78, 0xE0, 0x50, 0x13, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82,
+0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xEC, 0x8D, 0xF0, 0x12, 0x42, 0x87, 0x80, 0x10, 0x25, 0xE0, 0x24,
+0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0xAB, 0x5A, 0xAA,
+0x5B, 0xA9, 0x5C, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x00, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90,
+0x00, 0x02, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x04, 0xE4, 0xF5, 0xF0, 0x12, 0x43,
+0x1F, 0x90, 0x00, 0x06, 0xE4, 0xF5, 0xF0, 0x12, 0x43, 0x1F, 0x90, 0x00, 0x08, 0xE4, 0xF5, 0xF0,
+0x12, 0x43, 0x1F, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0x25, 0xE0, 0x24, 0x80, 0xF5, 0x82, 0xE4, 0x34,
+0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34,
+0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x84, 0xF5, 0x82, 0xE4, 0x34,
+0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x04, 0xF0, 0x02, 0x7F, 0x53,
+0x22, 0x90, 0x04, 0x44, 0x74, 0x11, 0xF0, 0xA3, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0xA3,
+0xE4, 0xF0, 0x90, 0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x50, 0x14,
+0x74, 0xA4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE4, 0xF0, 0x90, 0x93, 0x78, 0xE0,
+0x04, 0xF0, 0x80, 0xE2, 0xE4, 0x90, 0x8F, 0x46, 0xF0, 0x90, 0x89, 0x01, 0x04, 0xF0, 0xE4, 0x90,
+0x93, 0x78, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0xFF, 0xC3, 0x94, 0x40, 0x40, 0x03, 0x02, 0x89, 0x4C,
+0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x00, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0,
+0x0A, 0xEF, 0x90, 0x84, 0x02, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF,
+0x90, 0x84, 0x04, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84,
+0x06, 0x12, 0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x0A, 0xEF, 0x90, 0x84, 0x08, 0x12,
+0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0xA7, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83,
+0x74, 0x13, 0xF0, 0x74, 0x06, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0x74,
+0xC4, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8C, 0xF5, 0x83, 0xE4, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x80,
+0xF5, 0x82, 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x04,
+0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x05,
+0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x84,
+0xF5, 0x82, 0xE4, 0x34, 0x8D, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0x47,
+0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEF, 0x25, 0xE0, 0x24, 0xC7,
+0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x74, 0x07, 0x2F, 0xF5, 0x82,
+0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0xC7, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5,
+0x83, 0xE4, 0xF0, 0x74, 0x67, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83, 0xE4, 0xF0, 0x90,
+0x8E, 0x04, 0xF0, 0x90, 0x41, 0x92, 0x93, 0xFE, 0x74, 0x01, 0x93, 0xFF, 0x90, 0x41, 0x5A, 0x74,
+0x01, 0x93, 0x2F, 0xFF, 0xE4, 0x93, 0x3E, 0xC3, 0x13, 0xFE, 0xEF, 0x13, 0xFF, 0x90, 0x93, 0x78,
+0xE0, 0xFD, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x8A, 0xF5, 0x83, 0xEE, 0xF0, 0xA3,
+0xEF, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x75,
+0xF0, 0x09, 0xED, 0x90, 0x8A, 0x8A, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0, 0x74, 0xC2, 0x2D, 0xF5,
+0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0C, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x86,
+0x12, 0x43, 0x9C, 0x74, 0xFF, 0xF0, 0xA3, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x84, 0x12,
+0x43, 0x9C, 0xE4, 0xF0, 0xA3, 0x74, 0x0F, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x88, 0x12,
+0x43, 0x9C, 0x74, 0x13, 0xF0, 0x75, 0xF0, 0x09, 0xED, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C, 0xE4,
+0xF0, 0xED, 0xC3, 0x94, 0x20, 0x50, 0x0F, 0x74, 0x84, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x04, 0xF5,
+0x83, 0x74, 0x13, 0xF0, 0x80, 0x0D, 0x74, 0x27, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83,
+0x74, 0x13, 0xF0, 0x90, 0x93, 0x78, 0xE0, 0x04, 0xF0, 0x02, 0x87, 0x93, 0x22, 0x8F, 0x57, 0xEF,
+0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xAF, 0x82, 0xF5, 0x58, 0x8F, 0x59, 0xE5,
+0x57, 0x75, 0xF0, 0x02, 0xA4, 0x24, 0x02, 0xF9, 0x74, 0x89, 0x35, 0xF0, 0x75, 0x5A, 0x01, 0xF5,
+0x5B, 0x89, 0x5C, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAF, 0x82,
+0x85, 0x83, 0x5D, 0x8F, 0x5E, 0xE5, 0x57, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A,
+0x35, 0xF0, 0x75, 0x5F, 0x01, 0xF5, 0x60, 0x89, 0x61, 0x74, 0xC2, 0x25, 0x57, 0xF5, 0x82, 0xE4,
+0x34, 0x89, 0xF5, 0x83, 0xE0, 0x12, 0x43, 0xD1, 0x89, 0xCD, 0x00, 0x89, 0xE2, 0x01, 0x89, 0xF7,
+0x02, 0x8A, 0x0C, 0x03, 0x8A, 0x35, 0x04, 0x8A, 0x4A, 0x05, 0x8A, 0x5F, 0x06, 0x8A, 0x85, 0x0C,
+0x8A, 0xB2, 0x0D, 0x8A, 0xDF, 0x0E, 0x8B, 0x0C, 0x0F, 0x00, 0x00, 0x8B, 0x40, 0xE5, 0x57, 0x25,
+0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x15,
+0x80, 0x3C, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74,
+0xF0, 0xF0, 0xA3, 0x74, 0x10, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4,
+0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0x74, 0x05, 0x80, 0x12, 0xE5, 0x57, 0x25, 0xE0,
+0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0xF0, 0xF0, 0xA3, 0xE4, 0xF0, 0xE5,
+0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3,
+0x74, 0x8F, 0xF0, 0x61, 0x40, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
+0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF5, 0x80, 0x27, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47,
+0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0x74, 0x0F, 0xF0, 0xA3, 0x74, 0xF0, 0x80, 0x12, 0xE5,
+0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0x74,
+0x0D, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE4,
+0xF0, 0xA3, 0xF0, 0x61, 0x40, 0x90, 0x04, 0x47, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12,
+0x42, 0x53, 0x90, 0x04, 0x46, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12,
+0x42, 0x65, 0x90, 0x04, 0x45, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x44,
+0x61, 0x37, 0x90, 0x04, 0x4B, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90,
+0x04, 0x4A, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90,
+0x04, 0x49, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x48, 0x80, 0x58, 0x90,
+0x04, 0x4F, 0xE0, 0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x4E, 0xE0,
+0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x4D, 0xE0,
+0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x4C, 0x80, 0x2B, 0x90, 0x04, 0x53, 0xE0,
+0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0x12, 0x42, 0x53, 0x90, 0x04, 0x52, 0xE0, 0xAB, 0x5A, 0xAA,
+0x5B, 0xA9, 0x5C, 0x90, 0x00, 0x01, 0x12, 0x42, 0x65, 0x90, 0x04, 0x51, 0xE0, 0x85, 0x59, 0x82,
+0x85, 0x58, 0x83, 0xF0, 0x90, 0x04, 0x50, 0xE0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3, 0xF0,
+0xAB, 0x5A, 0xAA, 0x5B, 0xA9, 0x5C, 0xC0, 0x03, 0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF,
+0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x12, 0x1E, 0xF6, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03,
+0x12, 0x42, 0x53, 0xAB, 0x5A, 0xE5, 0x5C, 0x24, 0x01, 0xF9, 0xE4, 0x35, 0x5B, 0xFA, 0xC0, 0x03,
+0xC0, 0x02, 0xC0, 0x01, 0x12, 0x1E, 0xF6, 0xFF, 0xAB, 0x5F, 0xAA, 0x60, 0xA9, 0x61, 0x90, 0x00,
+0x01, 0x12, 0x1F, 0x0F, 0x5F, 0xD0, 0x01, 0xD0, 0x02, 0xD0, 0x03, 0x12, 0x42, 0x53, 0x85, 0x59,
+0x82, 0x85, 0x58, 0x83, 0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83,
+0xE0, 0xFE, 0xEF, 0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0x85, 0x59, 0x82, 0x85, 0x58, 0x83, 0xA3,
+0xC0, 0x83, 0xC0, 0x82, 0xE0, 0xFF, 0x85, 0x5E, 0x82, 0x85, 0x5D, 0x83, 0xA3, 0xE0, 0xFE, 0xEF,
+0x5E, 0xD0, 0x82, 0xD0, 0x83, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34,
+0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x4B, 0x90, 0x93, 0x8F, 0x74, 0x0B, 0xF0,
+0x90, 0x93, 0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x50, 0x02, 0x81, 0x85, 0x74, 0x01, 0x7E, 0x00,
+0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25,
+0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F,
+0x4E, 0x60, 0x0A, 0x90, 0x93, 0x8F, 0xE0, 0x24, 0x10, 0xA3, 0xF0, 0x80, 0x68, 0x90, 0x93, 0x8F,
+0xE0, 0x14, 0xF0, 0x80, 0xBB, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
+0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x47, 0x90, 0x93, 0x8F, 0x74, 0x0F, 0xF0, 0x90,
+0x93, 0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x00, 0x40, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08,
+0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47,
+0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08,
+0x90, 0x93, 0x8F, 0xE0, 0xA3, 0xF0, 0x80, 0x0D, 0x90, 0x93, 0x8F, 0xE0, 0x14, 0xF0, 0x80, 0xBF,
+0xE4, 0x90, 0x93, 0x90, 0xF0, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90,
+0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x8F, 0xF0, 0x90, 0x93,
+0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x10, 0x40, 0x02, 0xA1, 0x3E, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07,
+0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24,
+0x47, 0xF5, 0x82, 0xE4, 0x34, 0x90, 0xF5, 0x83, 0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60,
+0x06, 0x90, 0x93, 0x8F, 0xE0, 0x80, 0x63, 0x90, 0x93, 0x8F, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE5,
+0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0,
+0x4E, 0x60, 0x46, 0xE4, 0x90, 0x93, 0x8F, 0xF0, 0x90, 0x93, 0x8F, 0xE0, 0xFF, 0xC3, 0x94, 0x0C,
+0x50, 0x3C, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE,
+0xD8, 0xF9, 0xFF, 0xE5, 0x57, 0x25, 0xE0, 0x24, 0x02, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
+0xE0, 0x5E, 0xFE, 0xA3, 0xE0, 0x5F, 0x4E, 0x60, 0x08, 0x90, 0x93, 0x8F, 0xE0, 0x24, 0x10, 0x80,
+0x09, 0x90, 0x93, 0x8F, 0xE0, 0x04, 0xF0, 0x80, 0xBF, 0xE4, 0x90, 0x93, 0x91, 0xF0, 0x90, 0x93,
+0x90, 0xE0, 0xFF, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x88, 0x12, 0x43, 0x9C, 0xEF, 0xF0,
+0x90, 0x93, 0x91, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xE5, 0x57, 0x90, 0x8A, 0x89, 0x12, 0x43, 0x9C,
+0xEE, 0xF0, 0xE5, 0x57, 0xC3, 0x94, 0x20, 0x50, 0x2C, 0x74, 0x84, 0x25, 0x57, 0xF5, 0x82, 0xE4,
+0x34, 0x04, 0xF5, 0x83, 0xE0, 0xD3, 0x9F, 0x40, 0x02, 0x80, 0x47, 0x74, 0x84, 0x25, 0x57, 0xF5,
+0x82, 0xE4, 0x34, 0x04, 0xF5, 0x83, 0xE0, 0xC3, 0x9E, 0x50, 0x08, 0x90, 0x93, 0x91, 0xE0, 0xA3,
+0xF0, 0x80, 0x37, 0x80, 0x2D, 0x74, 0x27, 0x25, 0x57, 0xF5, 0x82, 0xE4, 0x34, 0x91, 0xF5, 0x83,
+0xE0, 0xFF, 0x90, 0x93, 0x90, 0xE0, 0xFE, 0xEF, 0xD3, 0x9E, 0x40, 0x07, 0x90, 0x93, 0x92, 0xEE,
+0xF0, 0x80, 0x17, 0x90, 0x93, 0x91, 0xE0, 0xFE, 0xEF, 0xC3, 0x9E, 0x50, 0x05, 0xA3, 0xEE, 0xF0,
+0x80, 0x08, 0x90, 0x93, 0x90, 0xE0, 0x90, 0x93, 0x92, 0xF0, 0x90, 0x93, 0x92, 0xE0, 0xFD, 0xAF,
+0x57, 0x12, 0x79, 0x82, 0x90, 0x93, 0x92, 0xE0, 0xFF, 0x74, 0xA7, 0x25, 0x57, 0xF5, 0x82, 0xE4,
+0x34, 0x91, 0xF5, 0x83, 0xEF, 0xF0, 0x90, 0x93, 0x90, 0xE0, 0xFF, 0xD3, 0x94, 0x13, 0x40, 0x07,
+0x90, 0x8A, 0x83, 0x74, 0x03, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x0B, 0x40, 0x07, 0x90, 0x8A, 0x83,
+0x74, 0x02, 0xF0, 0x22, 0xEF, 0xD3, 0x94, 0x03, 0x40, 0x07, 0x90, 0x8A, 0x83, 0x74, 0x01, 0xF0,
+0x22, 0xE4, 0x90, 0x8A, 0x83, 0xF0, 0x22, 0x90, 0x93, 0x83, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3,
+0x12, 0x43, 0xC8, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x54,
+0xF0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x88, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x54, 0x40,
+0xC4, 0x13, 0x13, 0x54, 0x03, 0x90, 0x93, 0x89, 0xF0, 0x90, 0x93, 0x83, 0xE0, 0xFF, 0x75, 0xF0,
+0x09, 0x90, 0x8A, 0x86, 0x12, 0x43, 0x9C, 0xAD, 0x82, 0xAC, 0x83, 0x90, 0x93, 0x8A, 0xEC, 0xF0,
+0xA3, 0xED, 0xF0, 0xEF, 0x75, 0xF0, 0x09, 0xA4, 0x24, 0x84, 0xF9, 0x74, 0x8A, 0x35, 0xF0, 0xFA,
+0x7B, 0x01, 0xA3, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x03, 0x12,
+0x1F, 0x0F, 0x54, 0x0F, 0xFF, 0x90, 0x93, 0x8C, 0x12, 0x43, 0xA8, 0xEF, 0x12, 0x42, 0x53, 0x90,
+0x93, 0x85, 0x12, 0x43, 0xA8, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x8C, 0x12,
+0x43, 0xA8, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x42, 0x65, 0x90, 0x93, 0x85, 0x12, 0x43, 0xA8, 0x90,
+0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90, 0x93, 0x8A, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xF5, 0x82,
+0x8C, 0x83, 0xEF, 0xF0, 0x12, 0x1E, 0xF6, 0x8D, 0x82, 0x8C, 0x83, 0xA3, 0xF0, 0x90, 0x93, 0x88,
+0xE0, 0xFE, 0x90, 0x93, 0x83, 0xE0, 0xFF, 0x24, 0xC2, 0xF5, 0x82, 0xE4, 0x34, 0x89, 0xF5, 0x83,
+0xEE, 0xF0, 0x90, 0x93, 0x84, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8A, 0x12, 0x43,
+0x9C, 0xEE, 0xF0, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8B, 0x12, 0x43, 0x9C, 0x74, 0x01, 0xF0,
+0x90, 0x93, 0x89, 0xE0, 0xFE, 0x75, 0xF0, 0x09, 0xEF, 0x90, 0x8A, 0x8C, 0x12, 0x43, 0x9C, 0xEE,
+0xF0, 0x21, 0x4D, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x1F, 0xFE, 0xEF, 0x54, 0x20,
+0xC4, 0x13, 0x54, 0x07, 0xFD, 0xAF, 0x06, 0xC1, 0x17, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF,
+0x54, 0x3F, 0xFE, 0xEF, 0x54, 0x80, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, 0xFD, 0xAF, 0x06, 0xC1,
+0x17, 0x12, 0x1E, 0xF6, 0xFF, 0xC3, 0x94, 0x40, 0x50, 0x14, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
+0xFE, 0x74, 0x85, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x8E, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0xB4,
+0x40, 0x0A, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x8A, 0x82, 0xF0, 0x22, 0x12, 0x1E, 0xF6,
+0x90, 0x89, 0x01, 0xF0, 0x22, 0x90, 0x93, 0x8F, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x92, 0xE0, 0x54,
+0xF0, 0x44, 0x02, 0xF0, 0x54, 0x0F, 0x44, 0xC0, 0xF0, 0x90, 0x93, 0x8F, 0x12, 0x43, 0xA8, 0x90,
+0x94, 0x19, 0x12, 0x43, 0xC8, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x92, 0x02, 0x57, 0x1F, 0x90, 0x00,
+0x02, 0x12, 0x1F, 0x0F, 0xFD, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFC, 0xED, 0xC3, 0x94, 0x40,
+0x40, 0x02, 0xE4, 0xFD, 0xEC, 0xC3, 0x94, 0x40, 0x40, 0x02, 0xE4, 0xFC, 0xED, 0x25, 0xE0, 0x24,
+0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x83, 0xF0,
+0xEE, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0,
+0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x85, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x74, 0xFF,
+0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3,
+0xE0, 0x90, 0x93, 0x89, 0xF0, 0xEE, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4,
+0x34, 0x8F, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0x90, 0x93, 0x8B, 0xF0, 0xEE, 0xA3, 0xF0, 0xA3,
+0xEC, 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
+0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xED, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
+0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0x47, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
+0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0xEC, 0x25, 0xE0, 0x24, 0xC7, 0xF5, 0x82, 0xE4, 0x34, 0x8F,
+0xF5, 0x83, 0xE4, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x83, 0x02, 0x8F, 0x75, 0xE4,
+0x90, 0x92, 0x69, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xAF, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0xF5, 0x62,
+0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93,
+0x86, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x90, 0x00,
+0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x59, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93,
+0x3C, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x54, 0x01, 0x90, 0x93, 0x3D, 0xF0, 0xEF,
+0xC3, 0x13, 0x54, 0x01, 0x90, 0x93, 0x47, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0x13,
+0x13, 0x54, 0x01, 0x90, 0x93, 0x44, 0xF0, 0xEF, 0x13, 0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x4A,
+0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4, 0x54, 0x01, 0x90, 0x93, 0x46, 0xF0, 0xEF,
+0xC4, 0x13, 0x54, 0x01, 0x90, 0x93, 0x5B, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xC4,
+0x13, 0x13, 0x54, 0x01, 0x90, 0x93, 0x49, 0xF0, 0xE0, 0x70, 0x38, 0x90, 0x93, 0x47, 0xE0, 0x70,
+0x10, 0xFF, 0x12, 0x50, 0xDC, 0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x10, 0x80,
+0x0F, 0x7F, 0x01, 0x12, 0x50, 0xDC, 0x90, 0x93, 0x86, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x03, 0x00,
+0x90, 0x93, 0x86, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x70, 0x7E, 0x08,
+0x12, 0x34, 0x30, 0x90, 0x93, 0x3D, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xA9, 0x90, 0x93, 0x83, 0x12,
+0x43, 0xA8, 0x12, 0x4D, 0xB2, 0x90, 0x93, 0x59, 0xE0, 0x90, 0x01, 0xE6, 0xF0, 0xD0, 0xD0, 0x92,
+0xAF, 0x22, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFF, 0x30, 0xE0, 0x25, 0x12, 0x1E, 0xF6, 0x90,
+0x93, 0x48, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x4B, 0xF0, 0xEF, 0xC3, 0x13,
+0x54, 0x7F, 0x90, 0x93, 0x45, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x50, 0xF0,
+0x22, 0x90, 0x93, 0x48, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4B, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x45,
+0x74, 0x14, 0xF0, 0x90, 0x93, 0x50, 0x74, 0x05, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x19,
+0xC3, 0x13, 0x54, 0x7F, 0x90, 0x93, 0x4F, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0x90,
+0x93, 0x4D, 0xE4, 0xF0, 0xA3, 0xEF, 0xF0, 0x80, 0x0F, 0x90, 0x93, 0x4F, 0x74, 0x05, 0xF0, 0x90,
+0x93, 0x4D, 0xE4, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0x90, 0x93, 0x4D, 0xE0, 0xA3, 0xE0, 0x90, 0x05,
+0x58, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0x4C, 0xF0, 0x60, 0x20, 0x90, 0x93, 0x15, 0xE0,
+0x20, 0xE0, 0x19, 0xE4, 0xFD, 0x7F, 0x04, 0x12, 0x4A, 0x62, 0x90, 0x93, 0x3D, 0xE0, 0x60, 0x09,
+0x90, 0x93, 0x56, 0xE0, 0x70, 0x03, 0x12, 0x4F, 0xA9, 0x12, 0x51, 0x5A, 0x90, 0x93, 0x4C, 0xE0,
+0x90, 0x01, 0xE7, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x02, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0xFF, 0x54,
+0x80, 0xFE, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x7F, 0x4E, 0xF0, 0xEF, 0x54, 0x0F, 0xFF, 0xE0, 0x54,
+0xF0, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0x54, 0x70, 0xFF, 0x90, 0x93, 0x36, 0xE0, 0x54, 0x8F, 0x4F,
+0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x38, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F,
+0x0F, 0x90, 0x93, 0x39, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x93, 0x3A, 0xF0, 0x90,
+0x00, 0x01, 0x74, 0x19, 0x12, 0x42, 0x20, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0xFF, 0xD3, 0x94,
+0x20, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x01, 0xF0, 0x80, 0x57, 0xEF, 0xD3, 0x94, 0x40, 0x50,
+0x08, 0x90, 0x93, 0x37, 0x74, 0x02, 0xF0, 0x80, 0x49, 0xEF, 0xD3, 0x94, 0x60, 0x50, 0x08, 0x90,
+0x93, 0x37, 0x74, 0x03, 0xF0, 0x80, 0x3B, 0xEF, 0xD3, 0x94, 0x80, 0x50, 0x08, 0x90, 0x93, 0x37,
+0x74, 0x04, 0xF0, 0x80, 0x2D, 0xEF, 0xD3, 0x94, 0xA0, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x05,
+0xF0, 0x80, 0x1F, 0xEF, 0xD3, 0x94, 0xC0, 0x50, 0x08, 0x90, 0x93, 0x37, 0x74, 0x06, 0xF0, 0x80,
+0x11, 0xEF, 0xD3, 0x94, 0xE0, 0x90, 0x93, 0x37, 0x50, 0x05, 0x74, 0x07, 0xF0, 0x80, 0x03, 0x74,
+0x08, 0xF0, 0x90, 0x93, 0x37, 0xE0, 0x90, 0x93, 0x3B, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x60, 0x0B,
+0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x02, 0x09, 0xE0,
+0xFD, 0x12, 0x1E, 0xF6, 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90, 0x93, 0xA8, 0xF0, 0x90, 0x00, 0x01,
+0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F, 0x90, 0x93, 0xA9, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F,
+0xFF, 0xED, 0x2F, 0x90, 0x93, 0xAA, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0xFF, 0xED, 0x2F,
+0x90, 0x93, 0xAB, 0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0xFF, 0xAE, 0x05, 0xED, 0x2F, 0x90,
+0x93, 0xAC, 0xF0, 0x22, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x0E, 0x90, 0x07, 0x78, 0xE0, 0x54, 0xFD,
+0xF0, 0x90, 0x93, 0x11, 0x74, 0x01, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x11, 0xF0, 0x22, 0x90, 0x93,
+0x83, 0x12, 0x43, 0xC8, 0xE4, 0x90, 0x93, 0x86, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x44, 0x0C, 0xF0,
+0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x7A, 0x90, 0x93, 0x86, 0x74,
+0x01, 0xF0, 0xFB, 0x7A, 0x93, 0x79, 0x86, 0xFD, 0x7F, 0x14, 0x12, 0x76, 0x35, 0x90, 0x93, 0x04,
+0xE0, 0x44, 0x08, 0xF0, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xFF, 0x30, 0xE1,
+0x10, 0x90, 0x93, 0x04, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x54, 0xFD, 0xF0, 0x80,
+0x07, 0x90, 0x07, 0x78, 0xE0, 0x44, 0x02, 0xF0, 0xEF, 0x30, 0xE2, 0x1E, 0x90, 0x93, 0x04, 0xE0,
+0x44, 0x04, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x54, 0xEF,
+0xF0, 0x90, 0x07, 0x83, 0xE0, 0x44, 0x40, 0xF0, 0x80, 0x07, 0x90, 0x07, 0x78, 0xE0, 0x44, 0x10,
+0xF0, 0x12, 0x1E, 0xF6, 0x30, 0xE4, 0x5C, 0x90, 0x93, 0x04, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x04,
+0x26, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x86, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79,
+0x86, 0x7D, 0x01, 0x7F, 0x14, 0x12, 0x76, 0x35, 0x90, 0x93, 0x04, 0xE0, 0x54, 0xFE, 0xF0, 0xE0,
+0x54, 0xFB, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xF7, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x54,
+0xE3, 0xF0, 0x90, 0x07, 0x83, 0xE0, 0x54, 0x3F, 0xF0, 0x90, 0x04, 0x26, 0xE0, 0x54, 0x3F, 0xF0,
+0x90, 0x93, 0x0B, 0x12, 0x43, 0x84, 0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0x7F, 0x80, 0x7E, 0x08,
+0x12, 0x34, 0x30, 0x22, 0xEF, 0x70, 0x21, 0x12, 0x1E, 0xF6, 0x30, 0xE0, 0x14, 0x90, 0x00, 0x40,
+0xE0, 0x44, 0x20, 0xF0, 0xE0, 0x54, 0x3F, 0xF0, 0x90, 0x07, 0x78, 0xE0, 0x44, 0x01, 0xF0, 0x80,
+0x07, 0x90, 0x07, 0x78, 0xE0, 0x54, 0xFE, 0xF0, 0xEF, 0x64, 0x01, 0x70, 0x6A, 0x12, 0x1E, 0xF6,
+0x90, 0x00, 0x01, 0x30, 0xE0, 0x2E, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC0, 0xF0, 0x90, 0x00, 0x02,
+0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC1, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC2,
+0xF0, 0x90, 0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC3, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x54,
+0xFE, 0xF0, 0x80, 0x2C, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC4, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F,
+0x0F, 0x90, 0x06, 0xC5, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC6, 0xF0, 0x90,
+0x00, 0x04, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC7, 0xF0, 0x90, 0x06, 0xCC, 0xE0, 0x44, 0x01, 0xF0,
+0x90, 0x06, 0xCC, 0xE0, 0x44, 0x02, 0xF0, 0xEF, 0xB4, 0x02, 0x11, 0x12, 0x1E, 0xF6, 0x90, 0x06,
+0xC8, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xC9, 0xF0, 0xEF, 0xB4, 0x03, 0x11,
+0x12, 0x1E, 0xF6, 0x90, 0x06, 0xCA, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x06, 0xCB,
+0xF0, 0xEF, 0x64, 0x04, 0x70, 0x1F, 0x12, 0x1E, 0xF6, 0xFF, 0x90, 0x07, 0x83, 0x30, 0xE0, 0x06,
+0xE0, 0x44, 0x10, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0x6F, 0xF0, 0xEF, 0x30, 0xE1, 0x07, 0x90, 0x07,
+0x83, 0xE0, 0x44, 0x80, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12,
+0x43, 0xA8, 0x12, 0x1E, 0xF6, 0x90, 0x92, 0x6B, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
+0x92, 0x6C, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0x92, 0x6D, 0xF0, 0x90, 0x93, 0x83,
+0x12, 0x43, 0xA8, 0x12, 0x76, 0x31, 0xEF, 0xB4, 0x02, 0x03, 0x43, 0x14, 0x01, 0x22, 0x90, 0x93,
+0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8,
+0x7D, 0x03, 0x7F, 0x1D, 0x02, 0x76, 0x35, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86,
+0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1E, 0x02, 0x76, 0x35,
+0x12, 0x1E, 0xF6, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x18, 0x12, 0x1F, 0xB6, 0xA8, 0x04, 0xA9,
+0x05, 0xAA, 0x06, 0xAB, 0x07, 0x90, 0x93, 0x0B, 0x12, 0x43, 0x84, 0xEC, 0x54, 0x03, 0xFC, 0x12,
+0x43, 0x59, 0x90, 0x93, 0x07, 0x02, 0x1F, 0xC9, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93,
+0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x1F, 0x02, 0x76,
+0x35, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83,
+0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x20, 0x02, 0x76, 0x35, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x01,
+0x90, 0x01, 0xBC, 0xF0, 0xEF, 0x30, 0xE0, 0x5C, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x4E, 0x90,
+0xFD, 0x50, 0x74, 0x0A, 0xF0, 0xA3, 0x74, 0x06, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90,
+0xFD, 0x52, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0x90, 0xFD, 0x53, 0xF0, 0xA3, 0xE4, 0xF0,
+0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x90, 0xFD, 0x55, 0x30, 0xE0, 0x05, 0x74, 0xA0, 0xF0, 0x80, 0x03,
+0x74, 0xC0, 0xF0, 0x90, 0xFD, 0x56, 0x74, 0x10, 0xF0, 0xA3, 0x74, 0x80, 0xF0, 0x90, 0xFD, 0x50,
+0x74, 0x0A, 0xF0, 0xA3, 0x74, 0x06, 0xF0, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0x90, 0x01, 0xBD,
+0xE0, 0x44, 0x01, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0x0F, 0xFE, 0x90, 0x00, 0x01, 0x12, 0x1F,
+0x0F, 0x7C, 0x00, 0x24, 0x00, 0xFF, 0xEC, 0x3E, 0xFE, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0,
+0xE4, 0xFC, 0x74, 0x20, 0x2F, 0xFF, 0xE4, 0x3E, 0xFE, 0x90, 0x93, 0x83, 0xEF, 0xF0, 0xEE, 0xF9,
+0x90, 0x01, 0xBD, 0xE0, 0x44, 0x02, 0xF0, 0x90, 0x02, 0x09, 0xE0, 0xC3, 0x13, 0x90, 0xFD, 0x10,
+0xF0, 0xEC, 0xC3, 0x99, 0x50, 0x43, 0xEC, 0x70, 0x04, 0x7D, 0x04, 0x80, 0x02, 0xE4, 0xFD, 0xED,
+0xC3, 0x94, 0x20, 0x50, 0x07, 0xAF, 0x05, 0xD1, 0xE1, 0x0D, 0x80, 0xF3, 0x0C, 0x90, 0xFD, 0x10,
+0xE0, 0x04, 0xF0, 0xEC, 0xB5, 0x01, 0xDA, 0xE4, 0xFD, 0xED, 0x75, 0xF0, 0x08, 0xA4, 0xFF, 0x90,
+0x93, 0x83, 0xE0, 0xFB, 0xC3, 0xEF, 0x9B, 0x74, 0x80, 0xF8, 0x65, 0xF0, 0x98, 0x50, 0x07, 0xAF,
+0x05, 0xD1, 0xE1, 0x0D, 0x80, 0xE3, 0x0C, 0x80, 0xB8, 0x90, 0x00, 0x81, 0xE0, 0x44, 0x80, 0xFD,
+0x7F, 0x81, 0x12, 0x53, 0xF0, 0x90, 0x01, 0xBD, 0xE0, 0x44, 0x04, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0x90, 0xFD, 0x58, 0xE0, 0x30, 0xE0, 0x08, 0x90, 0x01, 0xB8, 0xE0, 0x04, 0xF0, 0x80, 0xF1,
+0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90,
+0xFD, 0x50, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x01, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5,
+0x83, 0xE0, 0x90, 0xFD, 0x51, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x02, 0xF5, 0x82, 0xE4,
+0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x52, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x03,
+0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x53, 0xF0, 0xEF, 0x75, 0xF0, 0x08,
+0xA4, 0x24, 0x04, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x54, 0xF0, 0xEF,
+0x75, 0xF0, 0x08, 0xA4, 0x24, 0x05, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD,
+0x55, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x06, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83,
+0xE0, 0x90, 0xFD, 0x56, 0xF0, 0xEF, 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x07, 0xF5, 0x82, 0xE4, 0x34,
+0xFC, 0xF5, 0x83, 0xE0, 0x90, 0xFD, 0x57, 0xF0, 0xA3, 0x74, 0x01, 0xF0, 0x22, 0x12, 0x1E, 0xF6,
+0x90, 0xFE, 0x10, 0x60, 0x05, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0xE0, 0x54, 0xFE, 0xF0, 0x22, 0x90,
+0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43,
+0xA8, 0x7D, 0x01, 0x7F, 0x23, 0x12, 0x76, 0x35, 0xEF, 0xB4, 0x03, 0x05, 0x7F, 0xFF, 0x12, 0x9C,
+0x4C, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12, 0x43, 0xC8, 0x90, 0x93,
+0x83, 0x12, 0x43, 0xA8, 0x7D, 0x01, 0x7F, 0x24, 0x02, 0x76, 0x35, 0x12, 0x1E, 0xF6, 0xFF, 0x54,
+0x01, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, 0x54, 0x02, 0xFF, 0xE0, 0x54,
+0xFD, 0x4F, 0xF0, 0x12, 0x1E, 0xF6, 0xFF, 0x54, 0x04, 0xFE, 0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFB,
+0x4E, 0xF0, 0xEF, 0x54, 0x08, 0xFF, 0xE0, 0x54, 0xF7, 0x4F, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F,
+0x0F, 0x90, 0x93, 0x1B, 0xF0, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x90, 0x93, 0x86, 0x12,
+0x43, 0xC8, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x7D, 0x03, 0x7F, 0x26, 0x02, 0x76, 0x35, 0x12,
+0x1E, 0xF6, 0x90, 0x93, 0xB0, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x93,
+0x8A, 0x12, 0x43, 0xC8, 0xE4, 0xFE, 0x90, 0xFD, 0x58, 0xE0, 0x20, 0xE0, 0x2F, 0x90, 0xFD, 0x50,
+0xEF, 0xF0, 0xEE, 0xC3, 0x94, 0x07, 0x50, 0x1E, 0x90, 0x93, 0x8A, 0x12, 0x43, 0xA8, 0x8E, 0x82,
+0x75, 0x83, 0x00, 0x12, 0x1F, 0x0F, 0xFF, 0x74, 0x51, 0x2E, 0xF5, 0x82, 0xE4, 0x34, 0xFD, 0xF5,
+0x83, 0xEF, 0xF0, 0x0E, 0x80, 0xDC, 0x90, 0xFD, 0x58, 0x74, 0x01, 0xF0, 0xD0, 0xD0, 0x92, 0xAF,
+0x22, 0x12, 0x1E, 0xF6, 0x90, 0x93, 0xAE, 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x93,
+0xAF, 0xF0, 0x22, 0xE4, 0x90, 0x94, 0x46, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xEB, 0xE0, 0x54, 0xC0,
+0x60, 0x43, 0xC3, 0x90, 0x94, 0x47, 0xE0, 0x94, 0x88, 0x90, 0x94, 0x46, 0xE0, 0x94, 0x13, 0x40,
+0x0A, 0x90, 0x01, 0xC6, 0xE0, 0x44, 0x04, 0xF0, 0x7F, 0x00, 0x22, 0x90, 0x94, 0x46, 0xE4, 0x75,
+0xF0, 0x01, 0x12, 0x42, 0x87, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x3B, 0x09, 0xD3, 0x90, 0x94, 0x47,
+0xE0, 0x94, 0x64, 0x90, 0x94, 0x46, 0xE0, 0x94, 0x00, 0x40, 0xBF, 0x90, 0x01, 0xC7, 0xE0, 0x30,
+0xE2, 0xB8, 0x7F, 0x00, 0x22, 0x7F, 0x01, 0x22, 0x90, 0x93, 0xE2, 0x12, 0x1F, 0xC9, 0x90, 0x93,
+0xE6, 0x12, 0x1F, 0xD5, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x7F, 0x1F, 0xFE, 0xFD, 0xFC, 0x90, 0x93,
+0xE6, 0x12, 0x43, 0x90, 0xD3, 0x12, 0x43, 0x73, 0x50, 0x41, 0x90, 0x93, 0xE6, 0x12, 0x43, 0x84,
+0xA9, 0x07, 0x90, 0x93, 0xE2, 0x12, 0x43, 0x84, 0xA8, 0x01, 0x12, 0x1F, 0xA3, 0xEF, 0x54, 0x01,
+0xFF, 0xE4, 0xFE, 0xFD, 0xFC, 0x7B, 0x01, 0xFA, 0xF9, 0xF8, 0xC3, 0x12, 0x43, 0x73, 0x60, 0x1B,
+0x90, 0x93, 0xE6, 0x12, 0x43, 0x84, 0xEF, 0x24, 0x01, 0xFF, 0xE4, 0x3E, 0xFE, 0xE4, 0x3D, 0xFD,
+0xE4, 0x3C, 0xFC, 0x90, 0x93, 0xE6, 0x12, 0x1F, 0xC9, 0x80, 0xAD, 0x90, 0x93, 0xE6, 0x02, 0x43,
+0x84, 0x90, 0x93, 0xB4, 0x12, 0x1F, 0xC9, 0x74, 0xFF, 0xFF, 0xFE, 0xFD, 0xFC, 0x90, 0x93, 0xB8,
+0x12, 0x43, 0x90, 0xC3, 0x12, 0x43, 0x73, 0x90, 0x93, 0xB4, 0x60, 0x67, 0x12, 0x43, 0x84, 0x12,
+0x2C, 0x6E, 0x90, 0x93, 0xC0, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB8, 0x12, 0x43, 0x84, 0x11, 0xE8,
+0x90, 0x93, 0xC4, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB8, 0x12, 0x43, 0x84, 0x12, 0x43, 0x66, 0x90,
+0x93, 0xC0, 0x12, 0x43, 0x90, 0x12, 0x43, 0x4C, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07,
+0x90, 0x93, 0xC4, 0x12, 0x43, 0x84, 0xA9, 0x07, 0x90, 0x93, 0xBC, 0x12, 0x43, 0x84, 0xA8, 0x01,
+0x12, 0x1F, 0xB6, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x43, 0x59, 0x90, 0x93,
+0xC8, 0x12, 0x1F, 0xC9, 0x90, 0x93, 0xB4, 0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93,
+0xC8, 0x80, 0x0A, 0x12, 0x43, 0x84, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x93, 0xBC, 0x12, 0x43, 0x84,
+0x90, 0x81, 0x57, 0x12, 0x1F, 0xC9, 0xD0, 0x07, 0xD0, 0x06, 0x02, 0x34, 0x30, 0xD3, 0x10, 0xAF,
+0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x94, 0x4C, 0xEF, 0xF0, 0xD3, 0x94, 0x07, 0x50, 0x47, 0xE0, 0xFF,
+0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x46,
+0xE0, 0x5F, 0xF0, 0x12, 0x54, 0x38, 0x90, 0x94, 0x4C, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8,
+0x05, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x44, 0xE0,
+0xFB, 0xE4, 0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13,
+0xD8, 0xF8, 0xFF, 0x80, 0x4C, 0x90, 0x94, 0x4C, 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0xFF, 0x74, 0x01,
+0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x62, 0xE0, 0x5F,
+0xF0, 0x12, 0x54, 0x38, 0x90, 0x94, 0x4C, 0xE0, 0xFD, 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x05, 0x08,
+0x80, 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x00, 0x60, 0xE0, 0xFB, 0xE4,
+0xFE, 0xEF, 0x5B, 0xA8, 0x05, 0x08, 0x80, 0x06, 0xCE, 0xA2, 0xE7, 0x13, 0xCE, 0x13, 0xD8, 0xF8,
+0xFF, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x93, 0x83, 0x12, 0x43, 0xC8, 0x12, 0x1E, 0xF6, 0x54,
+0x01, 0xFF, 0x90, 0x94, 0x3E, 0xE0, 0x54, 0xFE, 0x4F, 0xF0, 0xE0, 0x30, 0xE0, 0x03, 0x12, 0x44,
+0xFE, 0x90, 0x93, 0x83, 0x12, 0x43, 0xA8, 0x12, 0x1E, 0xF6, 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90,
+0x00, 0x01, 0x12, 0x1F, 0x0F, 0x90, 0x94, 0x3F, 0xF0, 0x22, 0x90, 0x93, 0x04, 0xE0, 0x54, 0xFE,
+0xF0, 0x54, 0xFB, 0xF0, 0x54, 0xFD, 0xF0, 0x54, 0xF7, 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3,
+0x12, 0x1F, 0xD5, 0x20, 0x08, 0x30, 0x70, 0x90, 0x93, 0x0B, 0x12, 0x1F, 0xD5, 0xC0, 0x08, 0x30,
+0x70, 0xE4, 0x90, 0x93, 0x11, 0xF0, 0xA3, 0xF0, 0x43, 0xE8, 0x04, 0x90, 0xFD, 0x68, 0x74, 0x02,
+0xF0, 0x90, 0x04, 0x26, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x07, 0x83, 0xE4, 0xF0, 0x90, 0x07, 0x78,
+0x74, 0x03, 0xF0, 0x90, 0x04, 0x64, 0xE4, 0xF0, 0x90, 0x00, 0x40, 0x74, 0x20, 0xF0, 0x71, 0x2D,
+0x90, 0x93, 0x2C, 0x74, 0x01, 0xF0, 0x7D, 0x04, 0x7F, 0x02, 0x02, 0x3A, 0xAD, 0x90, 0x93, 0x15,
+0xE0, 0x54, 0xFE, 0xF0, 0xA3, 0x74, 0x0B, 0xF0, 0xA3, 0x74, 0x08, 0xF0, 0xE4, 0x90, 0x93, 0x26,
+0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54,
+0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x93,
+0x18, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xFD, 0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0xE0, 0x54, 0xEF,
+0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0xA3, 0xE0, 0x54,
+0xDF, 0xF0, 0xE0, 0x54, 0xBF, 0xF0, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x93, 0x28, 0x74, 0x02, 0xF0,
+0x90, 0x93, 0x1A, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xDF, 0xF0, 0xE4,
+0xA3, 0xF0, 0x90, 0x93, 0x25, 0xF0, 0x90, 0x93, 0x1C, 0xE0, 0x54, 0xFE, 0xF0, 0xE4, 0x90, 0x93,
+0x23, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x29, 0xF0, 0xA3, 0xF0, 0x90, 0x93, 0x1C, 0xE0, 0x54, 0xFD,
+0xF0, 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x93, 0x19, 0xE0, 0x54, 0xEF, 0xF0, 0xE0, 0x54, 0xFB, 0xF0,
+0xE0, 0x54, 0xF7, 0xF0, 0x90, 0x93, 0x2D, 0xE0, 0x54, 0xFE, 0xF0, 0xE0, 0x54, 0xE1, 0xF0, 0x22,
+0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0, 0x44, 0x0A, 0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90, 0x93, 0x6E,
+0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6F, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93, 0x70,
+0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0x71, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0x72,
+0xF0, 0x90, 0xFD, 0x60, 0xE0, 0x90, 0x93, 0x6C, 0x30, 0xE6, 0x08, 0xE0, 0x54, 0x0F, 0x44, 0x50,
+0xF0, 0x80, 0x16, 0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93, 0x73,
+0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x93, 0x74, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90,
+0x94, 0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x02, 0x57, 0x1F, 0xAD, 0x07, 0x90, 0x93,
+0xFA, 0xE0, 0x54, 0xF0, 0x44, 0x0C, 0xF0, 0x54, 0x0F, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93,
+0xFC, 0xF0, 0x90, 0xFD, 0x63, 0xE0, 0x90, 0x93, 0xFD, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93,
+0xFE, 0xF0, 0x90, 0xFD, 0x65, 0xE0, 0x90, 0x93, 0xFF, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x94,
+0x00, 0xF0, 0x90, 0xFD, 0x67, 0xE0, 0x90, 0x94, 0x01, 0xF0, 0xED, 0xB4, 0x02, 0x0B, 0x90, 0x93,
+0xFA, 0xE0, 0x54, 0x0F, 0x44, 0x20, 0xF0, 0x80, 0x3C, 0xED, 0xB4, 0x04, 0x0B, 0x90, 0x93, 0xFA,
+0xE0, 0x54, 0x0F, 0x44, 0x60, 0xF0, 0x80, 0x2D, 0xED, 0xF4, 0x70, 0x29, 0x90, 0x93, 0xFA, 0xE0,
+0x54, 0x0F, 0x44, 0x60, 0xF0, 0x90, 0x93, 0x2C, 0xE0, 0x60, 0x08, 0x90, 0x93, 0xFC, 0x74, 0x01,
+0xF0, 0x80, 0x05, 0xE4, 0x90, 0x93, 0xFC, 0xF0, 0xE4, 0x90, 0x93, 0xFD, 0xF0, 0xA3, 0xF0, 0xA3,
+0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0xFC, 0x90, 0x94, 0x19, 0x12, 0x43,
+0xC8, 0x7A, 0x93, 0x79, 0xFA, 0x02, 0x57, 0x1F, 0xAD, 0x07, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0xF0,
+0x44, 0x0E, 0xF0, 0x54, 0x0F, 0xF0, 0x90, 0xFD, 0x62, 0xE0, 0x90, 0x93, 0x6F, 0xF0, 0x90, 0xFD,
+0x63, 0xE0, 0x90, 0x93, 0x70, 0xF0, 0x90, 0xFD, 0x64, 0xE0, 0x90, 0x93, 0x71, 0xF0, 0x90, 0xFD,
+0x65, 0xE0, 0x90, 0x93, 0x72, 0xF0, 0x90, 0xFD, 0x66, 0xE0, 0x90, 0x93, 0x73, 0xF0, 0x90, 0xFD,
+0x67, 0xE0, 0x90, 0x93, 0x74, 0xF0, 0xED, 0xB4, 0x01, 0x11, 0x90, 0x93, 0x6C, 0xE0, 0x54, 0x0F,
+0x44, 0x20, 0xF0, 0x90, 0x93, 0x6E, 0x74, 0x01, 0xF0, 0x80, 0x13, 0xED, 0xB4, 0x02, 0x0F, 0x90,
+0x93, 0x6C, 0xE0, 0x54, 0x0F, 0x44, 0x70, 0xF0, 0x90, 0x93, 0x6E, 0x74, 0x02, 0xF0, 0x90, 0x93,
+0x6C, 0xE0, 0xFF, 0xC4, 0x54, 0x0F, 0x60, 0x13, 0x7B, 0x01, 0x7A, 0x93, 0x79, 0x6E, 0x90, 0x94,
+0x19, 0x12, 0x43, 0xC8, 0x7A, 0x93, 0x79, 0x6C, 0x12, 0x57, 0x1F, 0x22, 0x90, 0x93, 0x47, 0xE0,
+0x60, 0x27, 0x90, 0x93, 0x4A, 0xE0, 0x70, 0x21, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30,
+0xE0, 0x07, 0x90, 0x07, 0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x93, 0x44, 0xE0, 0x90, 0x07, 0x78,
+0x60, 0x04, 0x74, 0x0D, 0xF0, 0x22, 0x74, 0x09, 0xF0, 0x22, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13,
+0x13, 0x54, 0x03, 0x20, 0xE0, 0x02, 0xE1, 0x26, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x01, 0x70, 0x2B,
+0x90, 0x06, 0x92, 0xE0, 0x30, 0xE2, 0x19, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x29, 0xE0, 0x04, 0xF0,
+0x90, 0x93, 0x1E, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0xB5, 0x07, 0x02, 0x80, 0x02, 0xE1, 0x11,
+0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x90, 0x93, 0x27, 0x04, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64,
+0x04, 0x70, 0x2C, 0x90, 0x06, 0x92, 0xE0, 0x30, 0xE2, 0x19, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x29,
+0xE0, 0x04, 0xF0, 0x90, 0x93, 0x20, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0xB5, 0x07, 0x02, 0x80,
+0x02, 0xE1, 0x11, 0xE4, 0x90, 0x93, 0x1D, 0xF0, 0x90, 0x93, 0x27, 0x74, 0x04, 0xF0, 0x22, 0x90,
+0x93, 0x1D, 0xE0, 0x64, 0x06, 0x60, 0x02, 0xC1, 0xD5, 0x90, 0x93, 0x2A, 0xE0, 0xB4, 0x04, 0x0F,
+0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x90, 0x93, 0x27, 0x30, 0xE0, 0x4E, 0xE1, 0x23, 0x90,
+0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x45, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3,
+0xF0, 0x90, 0x93, 0x18, 0xE0, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x02, 0xC1, 0xE4, 0x90, 0x93, 0x2A,
+0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0x2F, 0xFF, 0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12,
+0x1F, 0x3C, 0x90, 0x93, 0x21, 0xE0, 0x2F, 0xFF, 0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE,
+0x64, 0x80, 0x94, 0x80, 0x90, 0x93, 0x27, 0x40, 0x02, 0xE1, 0x23, 0x74, 0x02, 0xF0, 0x22, 0x90,
+0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4E, 0x18, 0x90, 0x93, 0x2A, 0xE0, 0x04, 0xF0,
+0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77, 0x90,
+0x01, 0x63, 0x74, 0x05, 0xF0, 0x90, 0x93, 0x2A, 0xE0, 0xFF, 0x90, 0x93, 0x29, 0xE0, 0x2F, 0xFF,
+0xE4, 0x33, 0xFE, 0x7C, 0x00, 0x7D, 0x03, 0x12, 0x1F, 0x3C, 0x90, 0x93, 0x21, 0xE0, 0x2F, 0xFF,
+0xEC, 0x3E, 0xFE, 0xC3, 0xEF, 0x94, 0x32, 0xEE, 0x64, 0x80, 0x94, 0x80, 0x40, 0x58, 0x90, 0x07,
+0x78, 0x74, 0x03, 0xF0, 0x22, 0x90, 0x93, 0x1D, 0xE0, 0x64, 0x07, 0x70, 0x49, 0x90, 0x93, 0x2A,
+0xE0, 0xB4, 0x04, 0x05, 0x90, 0x93, 0x27, 0x80, 0x3A, 0x90, 0x93, 0x1C, 0xE0, 0x13, 0x13, 0x54,
+0x3F, 0x30, 0xE0, 0x0C, 0xE0, 0x54, 0xFB, 0xF0, 0xE4, 0xA3, 0xF0, 0x90, 0x93, 0x27, 0x80, 0x23,
+0x90, 0x04, 0x1D, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, 0x4E, 0x18, 0x90, 0x93, 0x2A, 0xE0, 0x04,
+0xF0, 0xE4, 0xF5, 0x48, 0x75, 0x49, 0x03, 0xFB, 0xFD, 0x7F, 0x60, 0x7E, 0x01, 0x12, 0x39, 0x77,
+0x90, 0x01, 0x63, 0x74, 0x05, 0xF0, 0x22, 0xE4, 0x90, 0x93, 0x5D, 0xF0, 0x90, 0x93, 0x15, 0xE0,
+0x20, 0xE0, 0x02, 0xE1, 0xC3, 0x90, 0x93, 0x19, 0xE0, 0xC4, 0x13, 0x13, 0x54, 0x03, 0x30, 0xE0,
+0x2A, 0xE4, 0xF5, 0x48, 0x90, 0x93, 0x21, 0xE0, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60, 0x7E,
+0x01, 0x12, 0x39, 0x77, 0x90, 0x06, 0x92, 0x74, 0x04, 0xF0, 0x90, 0x93, 0x1D, 0x74, 0x01, 0xF0,
+0xE4, 0x90, 0x93, 0x29, 0xF0, 0x90, 0x93, 0x27, 0xF0, 0x80, 0x20, 0xE4, 0xF5, 0x48, 0x90, 0x93,
+0x5D, 0xE0, 0xFF, 0x90, 0x93, 0x16, 0xE0, 0xC3, 0x9F, 0xF5, 0x49, 0xE4, 0xFB, 0xFD, 0x7F, 0x60,
+0x7E, 0x01, 0x12, 0x39, 0x77, 0x90, 0x93, 0x27, 0x74, 0x01, 0xF0, 0x90, 0x01, 0x63, 0x74, 0x05,
+0xF0, 0x90, 0x93, 0x26, 0x74, 0x01, 0xF0, 0x90, 0x93, 0x4C, 0xE0, 0x60, 0x07, 0x90, 0x05, 0x22,
+0x74, 0x6F, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x93, 0x15, 0xE0, 0xC4, 0x13, 0x54,
+0x07, 0x20, 0xE0, 0x0F, 0x90, 0x93, 0x15, 0xE0, 0xFF, 0x13, 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x03,
+0x12, 0x51, 0x39, 0x22, 0x01, 0xF5,
+};
+u4Byte ArrayLength_8723A_rtl8723fw_B = 24550;
+
+
+void
+ODM_ReadFirmware_8723A_rtl8723fw_B(
+ IN PDM_ODM_T pDM_Odm,
+ OUT u1Byte *pFirmware,
+ OUT u4Byte *pFirmwareSize
+)
+{
+ ODM_MoveMemory(pDM_Odm, pFirmware, Array_8723A_rtl8723fw_B, ArrayLength_8723A_rtl8723fw_B);
+ *pFirmwareSize = ArrayLength_8723A_rtl8723fw_B;
+}
+
+
+
+#endif // end of HWIMG_SUPPORT
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_FW.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_FW.h
index fcdc62b7ec3a..8bdde6c6d264 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_FW.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_FW.h
@@ -1,39 +1,39 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-* You should have received a copy of the GNU General Public License along with
-* this program; if not, write to the Free Software Foundation, Inc.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-*
-*
-******************************************************************************/
-
-#if (RTL8723A_SUPPORT == 1)
-#ifndef __INC_FW_8723A_HW_IMG_H
-#define __INC_FW_8723A_HW_IMG_H
-
-
-/******************************************************************************
-* rtl8723fw_B.TXT
-******************************************************************************/
-
-void
-ODM_ReadFirmware_8723A_rtl8723fw_B(
- IN PDM_ODM_T pDM_Odm,
- OUT u1Byte *pFirmware,
- OUT u4Byte *pFirmwareSize
-);
-
-#endif
-#endif // end of HWIMG_SUPPORT
-
+/******************************************************************************
+*
+* Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of version 2 of the GNU General Public License as
+* published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program; if not, write to the Free Software Foundation, Inc.,
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+*
+*
+******************************************************************************/
+
+#if (RTL8723A_SUPPORT == 1)
+#ifndef __INC_FW_8723A_HW_IMG_H
+#define __INC_FW_8723A_HW_IMG_H
+
+
+/******************************************************************************
+* rtl8723fw_B.TXT
+******************************************************************************/
+
+void
+ODM_ReadFirmware_8723A_rtl8723fw_B(
+ IN PDM_ODM_T pDM_Odm,
+ OUT u1Byte *pFirmware,
+ OUT u4Byte *pFirmwareSize
+);
+
+#endif
+#endif // end of HWIMG_SUPPORT
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_MAC.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_MAC.c
index 4d5fed358af3..b4e13b43f97c 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_MAC.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_MAC.c
@@ -1,219 +1,219 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-* You should have received a copy of the GNU General Public License along with
-* this program; if not, write to the Free Software Foundation, Inc.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-*
-*
-******************************************************************************/
-
-#include "../odm_precomp.h"
-
-#if (RTL8723A_SUPPORT == 1)
-static BOOLEAN
-CheckCondition(
- const u4Byte Condition,
- const u4Byte Hex
- )
-{
- u4Byte _board = (Hex & 0x000000FF);
- u4Byte _interface = (Hex & 0x0000FF00) >> 8;
- u4Byte _platform = (Hex & 0x00FF0000) >> 16;
- u4Byte cond = Condition;
-
- if ( Condition == 0xCDCDCDCD )
- return TRUE;
-
- cond = Condition & 0x000000FF;
- if ( (_board == cond) && cond != 0x00)
- return FALSE;
-
- cond = Condition & 0x0000FF00;
- cond = cond >> 8;
- if ( (_interface & cond) == 0 && cond != 0x07)
- return FALSE;
-
- cond = Condition & 0x00FF0000;
- cond = cond >> 16;
- if ( (_platform & cond) == 0 && cond != 0x0F)
- return FALSE;
- return TRUE;
-}
-
-
-/******************************************************************************
-* MAC_REG.TXT
-******************************************************************************/
-
-u4Byte Array_MAC_REG_8723A[] = {
- 0x420, 0x00000080,
- 0x423, 0x00000000,
- 0x430, 0x00000000,
- 0x431, 0x00000000,
- 0x432, 0x00000000,
- 0x433, 0x00000001,
- 0x434, 0x00000004,
- 0x435, 0x00000005,
- 0x436, 0x00000006,
- 0x437, 0x00000007,
- 0x438, 0x00000000,
- 0x439, 0x00000000,
- 0x43A, 0x00000000,
- 0x43B, 0x00000001,
- 0x43C, 0x00000004,
- 0x43D, 0x00000005,
- 0x43E, 0x00000006,
- 0x43F, 0x00000007,
- 0x440, 0x0000005D,
- 0x441, 0x00000001,
- 0x442, 0x00000000,
- 0x444, 0x00000015,
- 0x445, 0x000000F0,
- 0x446, 0x0000000F,
- 0x447, 0x00000000,
- 0x458, 0x00000041,
- 0x459, 0x000000A8,
- 0x45A, 0x00000072,
- 0x45B, 0x000000B9,
- 0x460, 0x00000066,
- 0x461, 0x00000066,
- 0x462, 0x00000008,
- 0x463, 0x00000003,
- 0x4C8, 0x000000FF,
- 0x4C9, 0x00000008,
- 0x4CC, 0x000000FF,
- 0x4CD, 0x000000FF,
- 0x4CE, 0x00000001,
- 0x500, 0x00000026,
- 0x501, 0x000000A2,
- 0x502, 0x0000002F,
- 0x503, 0x00000000,
- 0x504, 0x00000028,
- 0x505, 0x000000A3,
- 0x506, 0x0000005E,
- 0x507, 0x00000000,
- 0x508, 0x0000002B,
- 0x509, 0x000000A4,
- 0x50A, 0x0000005E,
- 0x50B, 0x00000000,
- 0x50C, 0x0000004F,
- 0x50D, 0x000000A4,
- 0x50E, 0x00000000,
- 0x50F, 0x00000000,
- 0x512, 0x0000001C,
- 0x514, 0x0000000A,
- 0x515, 0x00000010,
- 0x516, 0x0000000A,
- 0x517, 0x00000010,
- 0x51A, 0x00000016,
- 0x524, 0x0000000F,
- 0x525, 0x0000004F,
- 0x546, 0x00000040,
- 0x547, 0x00000000,
- 0x550, 0x00000010,
- 0x551, 0x00000010,
- 0x559, 0x00000002,
- 0x55A, 0x00000002,
- 0x55D, 0x000000FF,
- 0x605, 0x00000030,
- 0x608, 0x0000000E,
- 0x609, 0x0000002A,
- 0x652, 0x00000020,
- 0x63C, 0x0000000A,
- 0x63D, 0x0000000A,
- 0x63E, 0x0000000E,
- 0x63F, 0x0000000E,
- 0x66E, 0x00000005,
- 0x700, 0x00000021,
- 0x701, 0x00000043,
- 0x702, 0x00000065,
- 0x703, 0x00000087,
- 0x708, 0x00000021,
- 0x709, 0x00000043,
- 0x70A, 0x00000065,
- 0x70B, 0x00000087,
-
-};
-
-void
-ODM_ReadAndConfig_MAC_REG_8723A(
- IN PDM_ODM_T pDM_Odm
- )
-{
- #define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
-
- u4Byte hex = 0;
- u4Byte i = 0;
- u2Byte count = 0;
- pu4Byte ptr_array = NULL;
- u1Byte platform = pDM_Odm->SupportPlatform;
- u1Byte interfaceValue = pDM_Odm->SupportInterface;
- u1Byte board = pDM_Odm->BoardType;
- u4Byte ArrayLen = sizeof(Array_MAC_REG_8723A)/sizeof(u4Byte);
- pu4Byte Array = Array_MAC_REG_8723A;
-
-
- hex += board;
- hex += interfaceValue << 8;
- hex += platform << 16;
- hex += 0xFF000000;
- for (i = 0; i < ArrayLen; i += 2 )
- {
- u4Byte v1 = Array[i];
- u4Byte v2 = Array[i+1];
-
- // This (offset, data) pair meets the condition.
- if ( v1 < 0xCDCDCDCD )
- {
- odm_ConfigMAC_8723A(pDM_Odm, v1, (u1Byte)v2);
- continue;
- }
- else
- { // This line is the start line of branch.
- if ( !CheckCondition(Array[i], hex) )
- { // Discard the following (offset, data) pairs.
- READ_NEXT_PAIR(v1, v2, i);
- while (v2 != 0xDEAD &&
- v2 != 0xCDEF &&
- v2 != 0xCDCD && i < ArrayLen -2)
- {
- READ_NEXT_PAIR(v1, v2, i);
- }
- i -= 2; // prevent from for-loop += 2
- }
- else // Configure matched pairs and skip to end of if-else.
- {
- READ_NEXT_PAIR(v1, v2, i);
- while (v2 != 0xDEAD &&
- v2 != 0xCDEF &&
- v2 != 0xCDCD && i < ArrayLen -2)
- {
- odm_ConfigMAC_8723A(pDM_Odm, v1, (u1Byte)v2);
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- while (v2 != 0xDEAD && i < ArrayLen -2)
- {
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- }
- }
- }
-
-}
-
-
-#endif // end of HWIMG_SUPPORT
-
+/******************************************************************************
+*
+* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of version 2 of the GNU General Public License as
+* published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program; if not, write to the Free Software Foundation, Inc.,
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+*
+*
+******************************************************************************/
+
+#include "../odm_precomp.h"
+
+#if (RTL8723A_SUPPORT == 1)
+static BOOLEAN
+CheckCondition(
+ const u4Byte Condition,
+ const u4Byte Hex
+ )
+{
+ u4Byte _board = (Hex & 0x000000FF);
+ u4Byte _interface = (Hex & 0x0000FF00) >> 8;
+ u4Byte _platform = (Hex & 0x00FF0000) >> 16;
+ u4Byte cond = Condition;
+
+ if ( Condition == 0xCDCDCDCD )
+ return TRUE;
+
+ cond = Condition & 0x000000FF;
+ if ( (_board == cond) && cond != 0x00)
+ return FALSE;
+
+ cond = Condition & 0x0000FF00;
+ cond = cond >> 8;
+ if ( (_interface & cond) == 0 && cond != 0x07)
+ return FALSE;
+
+ cond = Condition & 0x00FF0000;
+ cond = cond >> 16;
+ if ( (_platform & cond) == 0 && cond != 0x0F)
+ return FALSE;
+ return TRUE;
+}
+
+
+/******************************************************************************
+* MAC_REG.TXT
+******************************************************************************/
+
+u4Byte Array_MAC_REG_8723A[] = {
+ 0x420, 0x00000080,
+ 0x423, 0x00000000,
+ 0x430, 0x00000000,
+ 0x431, 0x00000000,
+ 0x432, 0x00000000,
+ 0x433, 0x00000001,
+ 0x434, 0x00000004,
+ 0x435, 0x00000005,
+ 0x436, 0x00000006,
+ 0x437, 0x00000007,
+ 0x438, 0x00000000,
+ 0x439, 0x00000000,
+ 0x43A, 0x00000000,
+ 0x43B, 0x00000001,
+ 0x43C, 0x00000004,
+ 0x43D, 0x00000005,
+ 0x43E, 0x00000006,
+ 0x43F, 0x00000007,
+ 0x440, 0x0000005D,
+ 0x441, 0x00000001,
+ 0x442, 0x00000000,
+ 0x444, 0x00000015,
+ 0x445, 0x000000F0,
+ 0x446, 0x0000000F,
+ 0x447, 0x00000000,
+ 0x458, 0x00000041,
+ 0x459, 0x000000A8,
+ 0x45A, 0x00000072,
+ 0x45B, 0x000000B9,
+ 0x460, 0x00000066,
+ 0x461, 0x00000066,
+ 0x462, 0x00000008,
+ 0x463, 0x00000003,
+ 0x4C8, 0x000000FF,
+ 0x4C9, 0x00000008,
+ 0x4CC, 0x000000FF,
+ 0x4CD, 0x000000FF,
+ 0x4CE, 0x00000001,
+ 0x500, 0x00000026,
+ 0x501, 0x000000A2,
+ 0x502, 0x0000002F,
+ 0x503, 0x00000000,
+ 0x504, 0x00000028,
+ 0x505, 0x000000A3,
+ 0x506, 0x0000005E,
+ 0x507, 0x00000000,
+ 0x508, 0x0000002B,
+ 0x509, 0x000000A4,
+ 0x50A, 0x0000005E,
+ 0x50B, 0x00000000,
+ 0x50C, 0x0000004F,
+ 0x50D, 0x000000A4,
+ 0x50E, 0x00000000,
+ 0x50F, 0x00000000,
+ 0x512, 0x0000001C,
+ 0x514, 0x0000000A,
+ 0x515, 0x00000010,
+ 0x516, 0x0000000A,
+ 0x517, 0x00000010,
+ 0x51A, 0x00000016,
+ 0x524, 0x0000000F,
+ 0x525, 0x0000004F,
+ 0x546, 0x00000040,
+ 0x547, 0x00000000,
+ 0x550, 0x00000010,
+ 0x551, 0x00000010,
+ 0x559, 0x00000002,
+ 0x55A, 0x00000002,
+ 0x55D, 0x000000FF,
+ 0x605, 0x00000030,
+ 0x608, 0x0000000E,
+ 0x609, 0x0000002A,
+ 0x652, 0x00000020,
+ 0x63C, 0x0000000A,
+ 0x63D, 0x0000000A,
+ 0x63E, 0x0000000E,
+ 0x63F, 0x0000000E,
+ 0x66E, 0x00000005,
+ 0x700, 0x00000021,
+ 0x701, 0x00000043,
+ 0x702, 0x00000065,
+ 0x703, 0x00000087,
+ 0x708, 0x00000021,
+ 0x709, 0x00000043,
+ 0x70A, 0x00000065,
+ 0x70B, 0x00000087,
+
+};
+
+void
+ODM_ReadAndConfig_MAC_REG_8723A(
+ IN PDM_ODM_T pDM_Odm
+ )
+{
+ #define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
+
+ u4Byte hex = 0;
+ u4Byte i = 0;
+ u2Byte count = 0;
+ pu4Byte ptr_array = NULL;
+ u1Byte platform = pDM_Odm->SupportPlatform;
+ u1Byte interfaceValue = pDM_Odm->SupportInterface;
+ u1Byte board = pDM_Odm->BoardType;
+ u4Byte ArrayLen = sizeof(Array_MAC_REG_8723A)/sizeof(u4Byte);
+ pu4Byte Array = Array_MAC_REG_8723A;
+
+
+ hex += board;
+ hex += interfaceValue << 8;
+ hex += platform << 16;
+ hex += 0xFF000000;
+ for (i = 0; i < ArrayLen; i += 2 )
+ {
+ u4Byte v1 = Array[i];
+ u4Byte v2 = Array[i+1];
+
+ // This (offset, data) pair meets the condition.
+ if ( v1 < 0xCDCDCDCD )
+ {
+ odm_ConfigMAC_8723A(pDM_Odm, v1, (u1Byte)v2);
+ continue;
+ }
+ else
+ { // This line is the start line of branch.
+ if ( !CheckCondition(Array[i], hex) )
+ { // Discard the following (offset, data) pairs.
+ READ_NEXT_PAIR(v1, v2, i);
+ while (v2 != 0xDEAD &&
+ v2 != 0xCDEF &&
+ v2 != 0xCDCD && i < ArrayLen -2)
+ {
+ READ_NEXT_PAIR(v1, v2, i);
+ }
+ i -= 2; // prevent from for-loop += 2
+ }
+ else // Configure matched pairs and skip to end of if-else.
+ {
+ READ_NEXT_PAIR(v1, v2, i);
+ while (v2 != 0xDEAD &&
+ v2 != 0xCDEF &&
+ v2 != 0xCDCD && i < ArrayLen -2)
+ {
+ odm_ConfigMAC_8723A(pDM_Odm, v1, (u1Byte)v2);
+ READ_NEXT_PAIR(v1, v2, i);
+ }
+
+ while (v2 != 0xDEAD && i < ArrayLen -2)
+ {
+ READ_NEXT_PAIR(v1, v2, i);
+ }
+
+ }
+ }
+ }
+
+}
+
+
+#endif // end of HWIMG_SUPPORT
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_MAC.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_MAC.h
index 498faac482c2..295e6f4067b7 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_MAC.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_MAC.h
@@ -1,36 +1,36 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-* You should have received a copy of the GNU General Public License along with
-* this program; if not, write to the Free Software Foundation, Inc.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-*
-*
-******************************************************************************/
-
-#if (RTL8723A_SUPPORT == 1)
-#ifndef __INC_MAC_8723A_HW_IMG_H
-#define __INC_MAC_8723A_HW_IMG_H
-
-/******************************************************************************
-* MAC_REG.TXT
-******************************************************************************/
-
-void
-ODM_ReadAndConfig_MAC_REG_8723A(
- IN PDM_ODM_T pDM_Odm
-);
-
-#endif
-#endif // end of HWIMG_SUPPORT
-
+/******************************************************************************
+*
+* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of version 2 of the GNU General Public License as
+* published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program; if not, write to the Free Software Foundation, Inc.,
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+*
+*
+******************************************************************************/
+
+#if (RTL8723A_SUPPORT == 1)
+#ifndef __INC_MAC_8723A_HW_IMG_H
+#define __INC_MAC_8723A_HW_IMG_H
+
+/******************************************************************************
+* MAC_REG.TXT
+******************************************************************************/
+
+void
+ODM_ReadAndConfig_MAC_REG_8723A(
+ IN PDM_ODM_T pDM_Odm
+);
+
+#endif
+#endif // end of HWIMG_SUPPORT
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_RF.c b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_RF.c
index 31925b03922c..b9a5942bbb22 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_RF.c
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_RF.c
@@ -1,290 +1,290 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-* You should have received a copy of the GNU General Public License along with
-* this program; if not, write to the Free Software Foundation, Inc.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-*
-*
-******************************************************************************/
-
-#include "../odm_precomp.h"
-
-#if (RTL8723A_SUPPORT == 1)
-static BOOLEAN
-CheckCondition(
- const u4Byte Condition,
- const u4Byte Hex
- )
-{
- u4Byte _board = (Hex & 0x000000FF);
- u4Byte _interface = (Hex & 0x0000FF00) >> 8;
- u4Byte _platform = (Hex & 0x00FF0000) >> 16;
- u4Byte cond = Condition;
-
- if ( Condition == 0xCDCDCDCD )
- return TRUE;
-
- cond = Condition & 0x000000FF;
- if ( (_board == cond) && cond != 0x00)
- return FALSE;
-
- cond = Condition & 0x0000FF00;
- cond = cond >> 8;
- if ( (_interface & cond) == 0 && cond != 0x07)
- return FALSE;
-
- cond = Condition & 0x00FF0000;
- cond = cond >> 16;
- if ( (_platform & cond) == 0 && cond != 0x0F)
- return FALSE;
- return TRUE;
-}
-
-
-/******************************************************************************
-* RadioA_1T.TXT
-******************************************************************************/
-
-u4Byte Array_RadioA_1T_8723A[] = {
- 0x000, 0x00030159,
- 0x001, 0x00031284,
- 0x002, 0x00098000,
- 0xFF0F011F, 0xABCD,
- 0x003, 0x00018C63,
- 0xCDCDCDCD, 0xCDCD,
- 0x003, 0x00039C63,
- 0xFF0F011F, 0xDEAD,
- 0x004, 0x000210E7,
- 0x009, 0x0002044F,
- 0x00A, 0x0001A3F1,
- 0x00B, 0x00014787,
- 0x00C, 0x000896FE,
- 0x00D, 0x0000E02C,
- 0x00E, 0x00039CE7,
- 0x00F, 0x00000451,
- 0x019, 0x00000000,
- 0x01A, 0x00030355,
- 0x01B, 0x00060A00,
- 0x01C, 0x000FC378,
- 0x01D, 0x000A1250,
- 0x01E, 0x0000024F,
- 0x01F, 0x00000000,
- 0x020, 0x0000B614,
- 0x021, 0x0006C000,
- 0x022, 0x00000000,
- 0x023, 0x00001558,
- 0x024, 0x00000060,
- 0x025, 0x00000483,
- 0x026, 0x0004F000,
- 0x027, 0x000EC7D9,
- 0x028, 0x00057730,
- 0x029, 0x00004783,
- 0x02A, 0x00000001,
- 0x02B, 0x00021334,
- 0x02A, 0x00000000,
- 0x02B, 0x00000054,
- 0x02A, 0x00000001,
- 0x02B, 0x00000808,
- 0x02B, 0x00053333,
- 0x02C, 0x0000000C,
- 0x02A, 0x00000002,
- 0x02B, 0x00000808,
- 0x02B, 0x0005B333,
- 0x02C, 0x0000000D,
- 0x02A, 0x00000003,
- 0x02B, 0x00000808,
- 0x02B, 0x00063333,
- 0x02C, 0x0000000D,
- 0x02A, 0x00000004,
- 0x02B, 0x00000808,
- 0x02B, 0x0006B333,
- 0x02C, 0x0000000D,
- 0x02A, 0x00000005,
- 0x02B, 0x00000808,
- 0x02B, 0x00073333,
- 0x02C, 0x0000000D,
- 0x02A, 0x00000006,
- 0x02B, 0x00000709,
- 0x02B, 0x0005B333,
- 0x02C, 0x0000000D,
- 0x02A, 0x00000007,
- 0x02B, 0x00000709,
- 0x02B, 0x00063333,
- 0x02C, 0x0000000D,
- 0x02A, 0x00000008,
- 0x02B, 0x0000060A,
- 0x02B, 0x0004B333,
- 0x02C, 0x0000000D,
- 0x02A, 0x00000009,
- 0x02B, 0x0000060A,
- 0x02B, 0x00053333,
- 0x02C, 0x0000000D,
- 0x02A, 0x0000000A,
- 0x02B, 0x0000060A,
- 0x02B, 0x0005B333,
- 0x02C, 0x0000000D,
- 0x02A, 0x0000000B,
- 0x02B, 0x0000060A,
- 0x02B, 0x00063333,
- 0x02C, 0x0000000D,
- 0x02A, 0x0000000C,
- 0x02B, 0x0000060A,
- 0x02B, 0x0006B333,
- 0x02C, 0x0000000D,
- 0x02A, 0x0000000D,
- 0x02B, 0x0000060A,
- 0x02B, 0x00073333,
- 0x02C, 0x0000000D,
- 0x02A, 0x0000000E,
- 0x02B, 0x0000050B,
- 0x02B, 0x00066666,
- 0x02C, 0x0000001A,
- 0x02A, 0x000E0000,
- 0x010, 0x0004000F,
- 0x011, 0x000E31FC,
- 0x010, 0x0006000F,
- 0x011, 0x000FF9F8,
- 0x010, 0x0002000F,
- 0x011, 0x000203F9,
- 0x010, 0x0003000F,
- 0x011, 0x000FF500,
- 0x010, 0x00000000,
- 0x011, 0x00000000,
- 0x010, 0x0008000F,
- 0x011, 0x0003F100,
- 0x010, 0x0009000F,
- 0x011, 0x00023100,
- 0x012, 0x00032000,
- 0x012, 0x00071000,
- 0x012, 0x000B0000,
- 0x012, 0x000FC000,
- 0x013, 0x000287B3,
- 0x013, 0x000244B7,
- 0x013, 0x000204AB,
- 0x013, 0x0001C49F,
- 0x013, 0x00018493,
- 0x013, 0x0001429B,
- 0x013, 0x00010299,
- 0x013, 0x0000C29C,
- 0x013, 0x000081A0,
- 0x013, 0x000040AC,
- 0x013, 0x00000020,
- 0x014, 0x0001944C,
- 0x014, 0x00059444,
- 0x014, 0x0009944C,
- 0x014, 0x000D9444,
- 0xFF0F011F, 0xABCD,
- 0x015, 0x0000F424,
- 0x015, 0x0004F424,
- 0x015, 0x0008F424,
- 0x015, 0x000CF424,
- 0xCDCDCDCD, 0xCDCD,
- 0x015, 0x0000F474,
- 0x015, 0x0004F477,
- 0x015, 0x0008F455,
- 0x015, 0x000CF455,
- 0xFF0F011F, 0xDEAD,
- 0x016, 0x00000339,
- 0x016, 0x00040339,
- 0x016, 0x00080339,
- 0xFF0F011F, 0xABCD,
- 0x016, 0x000C0356,
- 0xCDCDCDCD, 0xCDCD,
- 0x016, 0x000C0366,
- 0xFF0F011F, 0xDEAD,
- 0x000, 0x00010159,
- 0x018, 0x0000F401,
- 0x0FE, 0x00000000,
- 0x0FE, 0x00000000,
- 0x01F, 0x00000003,
- 0x0FE, 0x00000000,
- 0x0FE, 0x00000000,
- 0x01E, 0x00000247,
- 0x01F, 0x00000000,
- 0x000, 0x00030159,
-
-};
-
-void
-ODM_ReadAndConfig_RadioA_1T_8723A(
- IN PDM_ODM_T pDM_Odm
- )
-{
- #define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
-
- u4Byte hex = 0;
- u4Byte i = 0;
- u2Byte count = 0;
- pu4Byte ptr_array = NULL;
- u1Byte platform = pDM_Odm->SupportPlatform;
- u1Byte interfaceValue = pDM_Odm->SupportInterface;
- u1Byte board = pDM_Odm->BoardType;
- u4Byte ArrayLen = sizeof(Array_RadioA_1T_8723A)/sizeof(u4Byte);
- pu4Byte Array = Array_RadioA_1T_8723A;
-
-
- hex += board;
- hex += interfaceValue << 8;
- hex += platform << 16;
- hex += 0xFF000000;
-
- for (i = 0; i < ArrayLen; i += 2 )
- {
- u4Byte v1 = Array[i];
- u4Byte v2 = Array[i+1];
-
- // This (offset, data) pair meets the condition.
- if ( v1 < 0xCDCDCDCD )
- {
- odm_ConfigRF_RadioA_8723A(pDM_Odm, v1, v2);
- continue;
- }
- else
- { // This line is the start line of branch.
- if ( !CheckCondition(Array[i], hex) )
- { // Discard the following (offset, data) pairs.
- READ_NEXT_PAIR(v1, v2, i);
- while (v2 != 0xDEAD &&
- v2 != 0xCDEF &&
- v2 != 0xCDCD && i < ArrayLen -2)
- {
- READ_NEXT_PAIR(v1, v2, i);
- }
- i -= 2; // prevent from for-loop += 2
- }
- else // Configure matched pairs and skip to end of if-else.
- {
- READ_NEXT_PAIR(v1, v2, i);
- while (v2 != 0xDEAD &&
- v2 != 0xCDEF &&
- v2 != 0xCDCD && i < ArrayLen -2)
- {
- odm_ConfigRF_RadioA_8723A(pDM_Odm, v1, v2);
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- while (v2 != 0xDEAD && i < ArrayLen -2)
- {
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- }
- }
- }
-
-}
-
-
-#endif // end of HWIMG_SUPPORT
-
+/******************************************************************************
+*
+* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of version 2 of the GNU General Public License as
+* published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program; if not, write to the Free Software Foundation, Inc.,
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+*
+*
+******************************************************************************/
+
+#include "../odm_precomp.h"
+
+#if (RTL8723A_SUPPORT == 1)
+static BOOLEAN
+CheckCondition(
+ const u4Byte Condition,
+ const u4Byte Hex
+ )
+{
+ u4Byte _board = (Hex & 0x000000FF);
+ u4Byte _interface = (Hex & 0x0000FF00) >> 8;
+ u4Byte _platform = (Hex & 0x00FF0000) >> 16;
+ u4Byte cond = Condition;
+
+ if ( Condition == 0xCDCDCDCD )
+ return TRUE;
+
+ cond = Condition & 0x000000FF;
+ if ( (_board == cond) && cond != 0x00)
+ return FALSE;
+
+ cond = Condition & 0x0000FF00;
+ cond = cond >> 8;
+ if ( (_interface & cond) == 0 && cond != 0x07)
+ return FALSE;
+
+ cond = Condition & 0x00FF0000;
+ cond = cond >> 16;
+ if ( (_platform & cond) == 0 && cond != 0x0F)
+ return FALSE;
+ return TRUE;
+}
+
+
+/******************************************************************************
+* RadioA_1T.TXT
+******************************************************************************/
+
+u4Byte Array_RadioA_1T_8723A[] = {
+ 0x000, 0x00030159,
+ 0x001, 0x00031284,
+ 0x002, 0x00098000,
+ 0xFF0F011F, 0xABCD,
+ 0x003, 0x00018C63,
+ 0xCDCDCDCD, 0xCDCD,
+ 0x003, 0x00039C63,
+ 0xFF0F011F, 0xDEAD,
+ 0x004, 0x000210E7,
+ 0x009, 0x0002044F,
+ 0x00A, 0x0001A3F1,
+ 0x00B, 0x00014787,
+ 0x00C, 0x000896FE,
+ 0x00D, 0x0000E02C,
+ 0x00E, 0x00039CE7,
+ 0x00F, 0x00000451,
+ 0x019, 0x00000000,
+ 0x01A, 0x00030355,
+ 0x01B, 0x00060A00,
+ 0x01C, 0x000FC378,
+ 0x01D, 0x000A1250,
+ 0x01E, 0x0000024F,
+ 0x01F, 0x00000000,
+ 0x020, 0x0000B614,
+ 0x021, 0x0006C000,
+ 0x022, 0x00000000,
+ 0x023, 0x00001558,
+ 0x024, 0x00000060,
+ 0x025, 0x00000483,
+ 0x026, 0x0004F000,
+ 0x027, 0x000EC7D9,
+ 0x028, 0x00057730,
+ 0x029, 0x00004783,
+ 0x02A, 0x00000001,
+ 0x02B, 0x00021334,
+ 0x02A, 0x00000000,
+ 0x02B, 0x00000054,
+ 0x02A, 0x00000001,
+ 0x02B, 0x00000808,
+ 0x02B, 0x00053333,
+ 0x02C, 0x0000000C,
+ 0x02A, 0x00000002,
+ 0x02B, 0x00000808,
+ 0x02B, 0x0005B333,
+ 0x02C, 0x0000000D,
+ 0x02A, 0x00000003,
+ 0x02B, 0x00000808,
+ 0x02B, 0x00063333,
+ 0x02C, 0x0000000D,
+ 0x02A, 0x00000004,
+ 0x02B, 0x00000808,
+ 0x02B, 0x0006B333,
+ 0x02C, 0x0000000D,
+ 0x02A, 0x00000005,
+ 0x02B, 0x00000808,
+ 0x02B, 0x00073333,
+ 0x02C, 0x0000000D,
+ 0x02A, 0x00000006,
+ 0x02B, 0x00000709,
+ 0x02B, 0x0005B333,
+ 0x02C, 0x0000000D,
+ 0x02A, 0x00000007,
+ 0x02B, 0x00000709,
+ 0x02B, 0x00063333,
+ 0x02C, 0x0000000D,
+ 0x02A, 0x00000008,
+ 0x02B, 0x0000060A,
+ 0x02B, 0x0004B333,
+ 0x02C, 0x0000000D,
+ 0x02A, 0x00000009,
+ 0x02B, 0x0000060A,
+ 0x02B, 0x00053333,
+ 0x02C, 0x0000000D,
+ 0x02A, 0x0000000A,
+ 0x02B, 0x0000060A,
+ 0x02B, 0x0005B333,
+ 0x02C, 0x0000000D,
+ 0x02A, 0x0000000B,
+ 0x02B, 0x0000060A,
+ 0x02B, 0x00063333,
+ 0x02C, 0x0000000D,
+ 0x02A, 0x0000000C,
+ 0x02B, 0x0000060A,
+ 0x02B, 0x0006B333,
+ 0x02C, 0x0000000D,
+ 0x02A, 0x0000000D,
+ 0x02B, 0x0000060A,
+ 0x02B, 0x00073333,
+ 0x02C, 0x0000000D,
+ 0x02A, 0x0000000E,
+ 0x02B, 0x0000050B,
+ 0x02B, 0x00066666,
+ 0x02C, 0x0000001A,
+ 0x02A, 0x000E0000,
+ 0x010, 0x0004000F,
+ 0x011, 0x000E31FC,
+ 0x010, 0x0006000F,
+ 0x011, 0x000FF9F8,
+ 0x010, 0x0002000F,
+ 0x011, 0x000203F9,
+ 0x010, 0x0003000F,
+ 0x011, 0x000FF500,
+ 0x010, 0x00000000,
+ 0x011, 0x00000000,
+ 0x010, 0x0008000F,
+ 0x011, 0x0003F100,
+ 0x010, 0x0009000F,
+ 0x011, 0x00023100,
+ 0x012, 0x00032000,
+ 0x012, 0x00071000,
+ 0x012, 0x000B0000,
+ 0x012, 0x000FC000,
+ 0x013, 0x000287B3,
+ 0x013, 0x000244B7,
+ 0x013, 0x000204AB,
+ 0x013, 0x0001C49F,
+ 0x013, 0x00018493,
+ 0x013, 0x0001429B,
+ 0x013, 0x00010299,
+ 0x013, 0x0000C29C,
+ 0x013, 0x000081A0,
+ 0x013, 0x000040AC,
+ 0x013, 0x00000020,
+ 0x014, 0x0001944C,
+ 0x014, 0x00059444,
+ 0x014, 0x0009944C,
+ 0x014, 0x000D9444,
+ 0xFF0F011F, 0xABCD,
+ 0x015, 0x0000F424,
+ 0x015, 0x0004F424,
+ 0x015, 0x0008F424,
+ 0x015, 0x000CF424,
+ 0xCDCDCDCD, 0xCDCD,
+ 0x015, 0x0000F474,
+ 0x015, 0x0004F477,
+ 0x015, 0x0008F455,
+ 0x015, 0x000CF455,
+ 0xFF0F011F, 0xDEAD,
+ 0x016, 0x00000339,
+ 0x016, 0x00040339,
+ 0x016, 0x00080339,
+ 0xFF0F011F, 0xABCD,
+ 0x016, 0x000C0356,
+ 0xCDCDCDCD, 0xCDCD,
+ 0x016, 0x000C0366,
+ 0xFF0F011F, 0xDEAD,
+ 0x000, 0x00010159,
+ 0x018, 0x0000F401,
+ 0x0FE, 0x00000000,
+ 0x0FE, 0x00000000,
+ 0x01F, 0x00000003,
+ 0x0FE, 0x00000000,
+ 0x0FE, 0x00000000,
+ 0x01E, 0x00000247,
+ 0x01F, 0x00000000,
+ 0x000, 0x00030159,
+
+};
+
+void
+ODM_ReadAndConfig_RadioA_1T_8723A(
+ IN PDM_ODM_T pDM_Odm
+ )
+{
+ #define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0)
+
+ u4Byte hex = 0;
+ u4Byte i = 0;
+ u2Byte count = 0;
+ pu4Byte ptr_array = NULL;
+ u1Byte platform = pDM_Odm->SupportPlatform;
+ u1Byte interfaceValue = pDM_Odm->SupportInterface;
+ u1Byte board = pDM_Odm->BoardType;
+ u4Byte ArrayLen = sizeof(Array_RadioA_1T_8723A)/sizeof(u4Byte);
+ pu4Byte Array = Array_RadioA_1T_8723A;
+
+
+ hex += board;
+ hex += interfaceValue << 8;
+ hex += platform << 16;
+ hex += 0xFF000000;
+
+ for (i = 0; i < ArrayLen; i += 2 )
+ {
+ u4Byte v1 = Array[i];
+ u4Byte v2 = Array[i+1];
+
+ // This (offset, data) pair meets the condition.
+ if ( v1 < 0xCDCDCDCD )
+ {
+ odm_ConfigRF_RadioA_8723A(pDM_Odm, v1, v2);
+ continue;
+ }
+ else
+ { // This line is the start line of branch.
+ if ( !CheckCondition(Array[i], hex) )
+ { // Discard the following (offset, data) pairs.
+ READ_NEXT_PAIR(v1, v2, i);
+ while (v2 != 0xDEAD &&
+ v2 != 0xCDEF &&
+ v2 != 0xCDCD && i < ArrayLen -2)
+ {
+ READ_NEXT_PAIR(v1, v2, i);
+ }
+ i -= 2; // prevent from for-loop += 2
+ }
+ else // Configure matched pairs and skip to end of if-else.
+ {
+ READ_NEXT_PAIR(v1, v2, i);
+ while (v2 != 0xDEAD &&
+ v2 != 0xCDEF &&
+ v2 != 0xCDCD && i < ArrayLen -2)
+ {
+ odm_ConfigRF_RadioA_8723A(pDM_Odm, v1, v2);
+ READ_NEXT_PAIR(v1, v2, i);
+ }
+
+ while (v2 != 0xDEAD && i < ArrayLen -2)
+ {
+ READ_NEXT_PAIR(v1, v2, i);
+ }
+
+ }
+ }
+ }
+
+}
+
+
+#endif // end of HWIMG_SUPPORT
+
diff --git a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_RF.h b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_RF.h
index 59e8273098cc..21ce3d1aedb9 100755
--- a/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_RF.h
+++ b/drivers/net/wireless/rtl8723as/hal/OUTSRC/rtl8723a/HalHWImg8723A_RF.h
@@ -1,37 +1,37 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-* You should have received a copy of the GNU General Public License along with
-* this program; if not, write to the Free Software Foundation, Inc.,
-* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-*
-*
-******************************************************************************/
-
-#if (RTL8723A_SUPPORT == 1)
-#ifndef __INC_RF_8723A_HW_IMG_H
-#define __INC_RF_8723A_HW_IMG_H
-
-/******************************************************************************
-* RadioA_1T.TXT
-******************************************************************************/
-
-void
-ODM_ReadAndConfig_RadioA_1T_8723A(
- IN PDM_ODM_T pDM_Odm
-);
-
-
-#endif
-#endif // end of HWIMG_SUPPORT
-
+/******************************************************************************
+*
+* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+*
+* This program is free software; you can redistribute it and/or modify it
+* under the terms of version 2 of the GNU General Public License as
+* published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful, but WITHOUT
+* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+* more details.
+*
+* You should have received a copy of the GNU General Public License along with
+* this program; if not, write to the Free Software Foundation, Inc.,
+* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+*
+*
+******************************************************************************/
+
+#if (RTL8723A_SUPPORT == 1)
+#ifndef __INC_RF_8723A_HW_IMG_H
+#define __INC_RF_8723A_HW_IMG_H
+
+/******************************************************************************
+* RadioA_1T.TXT
+******************************************************************************/
+
+void
+ODM_ReadAndConfig_RadioA_1T_8723A(
+ IN PDM_ODM_T pDM_Odm
+);
+
+
+#endif
+#endif // end of HWIMG_SUPPORT
+
diff --git a/drivers/net/wireless/rtl8723as/hal/hal_com.c b/drivers/net/wireless/rtl8723as/hal/hal_com.c
index 7628b1be1469..9f413a09cfbf 100755
--- a/drivers/net/wireless/rtl8723as/hal/hal_com.c
+++ b/drivers/net/wireless/rtl8723as/hal/hal_com.c
@@ -65,6 +65,9 @@ void dump_chip_info(HAL_VERSION ChipVersion)
else if(IS_C_CUT(ChipVersion)) cnt += sprintf((buf+cnt), "C_CUT_");
else if(IS_D_CUT(ChipVersion)) cnt += sprintf((buf+cnt), "D_CUT_");
else if(IS_E_CUT(ChipVersion)) cnt += sprintf((buf+cnt), "E_CUT_");
+ else if(IS_I_CUT(ChipVersion)) cnt += sprintf((buf+cnt), "I_CUT_");
+ else if(IS_J_CUT(ChipVersion)) cnt += sprintf((buf+cnt), "J_CUT_");
+ else if(IS_K_CUT(ChipVersion)) cnt += sprintf((buf+cnt), "K_CUT_");
else cnt += sprintf((buf+cnt), "UNKNOWN_CUT(%d)_", ChipVersion.CUTVersion);
if(IS_1T1R(ChipVersion)) cnt += sprintf((buf+cnt), "1T1R_");
@@ -393,3 +396,58 @@ exit:
return ret;
}
+u8
+SetHalDefVar(_adapter *adapter, HAL_DEF_VARIABLE variable, void *value)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(adapter);
+ PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
+ u8 bResult = _SUCCESS;
+
+ switch(variable) {
+ case HW_DEF_FA_CNT_DUMP:
+ if(*((u8*)value))
+ pDM_Odm->DebugComponents |= (ODM_COMP_DIG |ODM_COMP_FA_CNT);
+ else
+ pDM_Odm->DebugComponents &= ~(ODM_COMP_DIG |ODM_COMP_FA_CNT);
+ break;
+ case HW_DEF_ODM_DBG_FLAG:
+ ODM_CmnInfoUpdate(pDM_Odm, ODM_CMNINFO_DBG_COMP, *((u8Byte*)value));
+ break;
+ case HW_DEF_ODM_DBG_LEVEL:
+ ODM_CmnInfoUpdate(pDM_Odm, ODM_CMNINFO_DBG_LEVEL, *((u4Byte*)value));
+ break;
+ default:
+ DBG_871X_LEVEL(_drv_always_, "%s: [WARNING] HAL_DEF_VARIABLE(%d) not defined!\n", __FUNCTION__, variable);
+ bResult = _FAIL;
+ break;
+ }
+
+ return bResult;
+}
+
+u8
+GetHalDefVar(_adapter *adapter, HAL_DEF_VARIABLE variable, void *value)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(adapter);
+ PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
+ u8 bResult = _SUCCESS;
+
+ switch(variable) {
+ case HW_DEF_ODM_DBG_FLAG:
+ *((u8Byte*)value) = pDM_Odm->DebugComponents;
+ break;
+ case HW_DEF_ODM_DBG_LEVEL:
+ *((u4Byte*)value) = pDM_Odm->DebugLevel;
+ break;
+ case HAL_DEF_DBG_DM_FUNC:
+ *((u32*)value) = pHalData->odmpriv.SupportAbility;
+ break;
+ default:
+ DBG_871X_LEVEL(_drv_always_, "%s: [WARNING] HAL_DEF_VARIABLE(%d) not defined!\n", __FUNCTION__, variable);
+ bResult = _FAIL;
+ break;
+ }
+
+ return bResult;
+}
+
diff --git a/drivers/net/wireless/rtl8723as/hal/hal_intf.c b/drivers/net/wireless/rtl8723as/hal/hal_intf.c
index 9fd02a87228f..c7950c48f3b3 100755
--- a/drivers/net/wireless/rtl8723as/hal/hal_intf.c
+++ b/drivers/net/wireless/rtl8723as/hal/hal_intf.c
@@ -54,24 +54,28 @@ void rtw_hal_read_chip_version(_adapter *padapter)
void rtw_hal_def_value_init(_adapter *padapter)
{
- if(padapter->HalFunc.init_default_value)
- padapter->HalFunc.init_default_value(padapter);
+ if (is_primary_adapter(padapter))
+ if(padapter->HalFunc.init_default_value)
+ padapter->HalFunc.init_default_value(padapter);
}
void rtw_hal_free_data(_adapter *padapter)
{
- if(padapter->HalFunc.free_hal_data)
- padapter->HalFunc.free_hal_data(padapter);
+ if (is_primary_adapter(padapter))
+ if(padapter->HalFunc.free_hal_data)
+ padapter->HalFunc.free_hal_data(padapter);
}
void rtw_hal_dm_init(_adapter *padapter)
{
- if(padapter->HalFunc.dm_init)
- padapter->HalFunc.dm_init(padapter);
+ if (is_primary_adapter(padapter))
+ if(padapter->HalFunc.dm_init)
+ padapter->HalFunc.dm_init(padapter);
}
void rtw_hal_dm_deinit(_adapter *padapter)
{
// cancel dm timer
- if(padapter->HalFunc.dm_deinit)
- padapter->HalFunc.dm_deinit(padapter);
+ if (is_primary_adapter(padapter))
+ if(padapter->HalFunc.dm_deinit)
+ padapter->HalFunc.dm_deinit(padapter);
}
void rtw_hal_sw_led_init(_adapter *padapter)
{
@@ -96,6 +100,8 @@ u32 rtw_hal_power_on(_adapter *padapter)
uint rtw_hal_init(_adapter *padapter)
{
uint status = _SUCCESS;
+ struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
+ int i;
#ifdef CONFIG_DUALMAC_CONCURRENT
if(padapter->hw_init_completed == _TRUE)
@@ -128,20 +134,27 @@ uint rtw_hal_init(_adapter *padapter)
}
#endif
- padapter->hw_init_completed=_FALSE;
-
status = padapter->HalFunc.hal_init(padapter);
if(status == _SUCCESS){
- padapter->hw_init_completed = _TRUE;
+ for (i = 0; i<dvobj->iface_nums; i++) {
+ padapter = dvobj->padapters[i];
+ padapter->hw_init_completed = _TRUE;
+ }
if (padapter->registrypriv.notch_filter == 1)
rtw_hal_notch_filter(padapter, 1);
rtw_hal_reset_security_engine(padapter);
+ rtw_sec_restore_wep_key(padapter);
+
+ init_hw_mlme_ext(padapter);
}
else{
- padapter->hw_init_completed = _FALSE;
+ for (i = 0; i<dvobj->iface_nums; i++) {
+ padapter = dvobj->padapters[i];
+ padapter->hw_init_completed = _FALSE;
+ }
DBG_871X("rtw_hal_init: hal__init fail\n");
}
@@ -154,13 +167,22 @@ uint rtw_hal_init(_adapter *padapter)
uint rtw_hal_deinit(_adapter *padapter)
{
uint status = _SUCCESS;
-
+ struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
+ int i;
+
_func_enter_;
+ if (!is_primary_adapter(padapter)){
+ DBG_871X(" rtw_hal_deinit: Secondary adapter return l\n");
+ return status;
+ }
status = padapter->HalFunc.hal_deinit(padapter);
if(status == _SUCCESS){
- padapter->hw_init_completed = _FALSE;
+ for (i = 0; i<dvobj->iface_nums; i++) {
+ padapter = dvobj->padapters[i];
+ padapter->hw_init_completed = _FALSE;
+ }
}
else
{
@@ -210,6 +232,11 @@ void rtw_hal_get_odm_var(_adapter *padapter, HAL_ODM_VARIABLE eVariable, PVOID p
void rtw_hal_enable_interrupt(_adapter *padapter)
{
+ if (!is_primary_adapter(padapter)){
+ DBG_871X(" rtw_hal_enable_interrupt: Secondary adapter return l\n");
+ return;
+ }
+
if (padapter->HalFunc.enable_interrupt)
padapter->HalFunc.enable_interrupt(padapter);
else
@@ -218,6 +245,11 @@ void rtw_hal_enable_interrupt(_adapter *padapter)
}
void rtw_hal_disable_interrupt(_adapter *padapter)
{
+ if (!is_primary_adapter(padapter)){
+ DBG_871X(" rtw_hal_disable_interrupt: Secondary adapter return l\n");
+ return;
+ }
+
if (padapter->HalFunc.disable_interrupt)
padapter->HalFunc.disable_interrupt(padapter);
else
@@ -272,6 +304,30 @@ s32 rtw_hal_xmit(_adapter *padapter, struct xmit_frame *pxmitframe)
s32 rtw_hal_mgnt_xmit(_adapter *padapter, struct xmit_frame *pmgntframe)
{
s32 ret = _FAIL;
+ unsigned char *pframe;
+ struct rtw_ieee80211_hdr *pwlanhdr;
+
+ pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
+ pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+ _rtw_memcpy(pmgntframe->attrib.ra, pwlanhdr->addr1, ETH_ALEN);
+
+#ifdef CONFIG_IEEE80211W
+ if(padapter->securitypriv.binstallBIPkey == _TRUE)
+ {
+ if(IS_MCAST(pmgntframe->attrib.ra))
+ {
+ pmgntframe->attrib.encrypt = _BIP_;
+ //pmgntframe->attrib.bswenc = _TRUE;
+ }
+ else
+ {
+ pmgntframe->attrib.encrypt = _AES_;
+ pmgntframe->attrib.bswenc = _TRUE;
+ }
+ rtw_mgmt_xmitframe_coalesce(padapter, pmgntframe->pkt, pmgntframe);
+ }
+#endif //CONFIG_IEEE80211W
+
if(padapter->HalFunc.mgnt_xmit)
ret = padapter->HalFunc.mgnt_xmit(padapter, pmgntframe);
return ret;
@@ -330,13 +386,7 @@ void rtw_hal_add_ra_tid(_adapter *padapter, u32 bitmap, u8 arg, u8 rssi_level)
if(padapter->HalFunc.Add_RateATid)
padapter->HalFunc.Add_RateATid(padapter, bitmap, arg, rssi_level);
}
-#ifdef CONFIG_CONCURRENT_MODE
-void rtw_hal_clone_data(_adapter *dst_padapter, _adapter *src_padapter)
-{
- if(dst_padapter->HalFunc.clone_haldata)
- dst_padapter->HalFunc.clone_haldata(dst_padapter, src_padapter);
-}
-#endif
+
/* Start specifical interface thread */
void rtw_hal_start_thread(_adapter *padapter)
{
@@ -457,15 +507,17 @@ void rtw_hal_sreset_reset_value(_adapter *padapter)
void rtw_hal_sreset_xmit_status_check(_adapter *padapter)
{
-#ifdef CONFIG_CONCURRENT_MODE
- if (padapter->adapter_type != PRIMARY_ADAPTER)
+ if (!is_primary_adapter(padapter))
return;
-#endif
+
if(padapter->HalFunc.sreset_xmit_status_check)
padapter->HalFunc.sreset_xmit_status_check(padapter);
}
void rtw_hal_sreset_linked_status_check(_adapter *padapter)
{
+ if (!is_primary_adapter(padapter))
+ return;
+
if(padapter->HalFunc.sreset_linked_status_check)
padapter->HalFunc.sreset_linked_status_check(padapter);
}
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/Hal8723PwrSeq.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/Hal8723PwrSeq.c
index 4f801cbc3e2a..97255cd3bc88 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/Hal8723PwrSeq.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/Hal8723PwrSeq.c
@@ -1,91 +1,91 @@
-/*++
-Copyright (c) Realtek Semiconductor Corp. All rights reserved.
-
-Module Name:
- Hal8723PwrSeq.c
-
-Abstract:
- This file includes all kinds of Power Action event for RTL8188E and corresponding hardware configurtions which are released from HW SD.
-
-Major Change History:
- When Who What
- ---------- --------------- -------------------------------
- 2011-08-08 Roger Create.
-
---*/
-#include "Hal8723PwrSeq.h"
-
-
-/*
- drivers should parse below arrays and do the corresponding actions
-*/
-//3 Power on Array
-WLAN_PWR_CFG rtl8723A_power_on_flow[RTL8723A_TRANS_CARDEMU_TO_ACT_STEPS+RTL8723A_TRANS_END_STEPS]=
-{
- RTL8723A_TRANS_CARDEMU_TO_ACT
- RTL8723A_TRANS_END
-};
-
-//3 Radio off GPIO Array
-WLAN_PWR_CFG rtl8723A_radio_off_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_END_STEPS]=
-{
- RTL8723A_TRANS_ACT_TO_CARDEMU
- RTL8723A_TRANS_END
-};
-
-//3 Card Disable Array
-WLAN_PWR_CFG rtl8723A_card_disable_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS]=
-{
- RTL8723A_TRANS_ACT_TO_CARDEMU
- RTL8723A_TRANS_CARDEMU_TO_CARDDIS
- RTL8723A_TRANS_END
-};
-
-//3 Card Enable Array
-WLAN_PWR_CFG rtl8723A_card_enable_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS]=
-{
- RTL8723A_TRANS_CARDDIS_TO_CARDEMU
- RTL8723A_TRANS_CARDEMU_TO_ACT
- RTL8723A_TRANS_END
-};
-
-//3 Suspend Array
-WLAN_PWR_CFG rtl8723A_suspend_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_SUS_STEPS+RTL8723A_TRANS_END_STEPS]=
-{
- RTL8723A_TRANS_ACT_TO_CARDEMU
- RTL8723A_TRANS_CARDEMU_TO_SUS
- RTL8723A_TRANS_END
-};
-
-//3 Resume Array
-WLAN_PWR_CFG rtl8723A_resume_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_SUS_STEPS+RTL8723A_TRANS_END_STEPS]=
-{
- RTL8723A_TRANS_SUS_TO_CARDEMU
- RTL8723A_TRANS_CARDEMU_TO_ACT
- RTL8723A_TRANS_END
-};
-
-//3 HWPDN Array
-WLAN_PWR_CFG rtl8723A_hwpdn_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS]=
-{
- RTL8723A_TRANS_ACT_TO_CARDEMU
- RTL8723A_TRANS_CARDEMU_TO_PDN
- RTL8723A_TRANS_END
-};
-
-//3 Enter LPS
-WLAN_PWR_CFG rtl8723A_enter_lps_flow[RTL8723A_TRANS_ACT_TO_LPS_STEPS+RTL8723A_TRANS_END_STEPS]=
-{
- //FW behavior
- RTL8723A_TRANS_ACT_TO_LPS
- RTL8723A_TRANS_END
-};
-
-//3 Leave LPS
-WLAN_PWR_CFG rtl8723A_leave_lps_flow[RTL8723A_TRANS_LPS_TO_ACT_STEPS+RTL8723A_TRANS_END_STEPS]=
-{
- //FW behavior
- RTL8723A_TRANS_LPS_TO_ACT
- RTL8723A_TRANS_END
-};
-
+/*++
+Copyright (c) Realtek Semiconductor Corp. All rights reserved.
+
+Module Name:
+ Hal8723PwrSeq.c
+
+Abstract:
+ This file includes all kinds of Power Action event for RTL8188E and corresponding hardware configurtions which are released from HW SD.
+
+Major Change History:
+ When Who What
+ ---------- --------------- -------------------------------
+ 2011-08-08 Roger Create.
+
+--*/
+#include "Hal8723PwrSeq.h"
+
+
+/*
+ drivers should parse below arrays and do the corresponding actions
+*/
+//3 Power on Array
+WLAN_PWR_CFG rtl8723A_power_on_flow[RTL8723A_TRANS_CARDEMU_TO_ACT_STEPS+RTL8723A_TRANS_END_STEPS]=
+{
+ RTL8723A_TRANS_CARDEMU_TO_ACT
+ RTL8723A_TRANS_END
+};
+
+//3 Radio off GPIO Array
+WLAN_PWR_CFG rtl8723A_radio_off_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_END_STEPS]=
+{
+ RTL8723A_TRANS_ACT_TO_CARDEMU
+ RTL8723A_TRANS_END
+};
+
+//3 Card Disable Array
+WLAN_PWR_CFG rtl8723A_card_disable_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS]=
+{
+ RTL8723A_TRANS_ACT_TO_CARDEMU
+ RTL8723A_TRANS_CARDEMU_TO_CARDDIS
+ RTL8723A_TRANS_END
+};
+
+//3 Card Enable Array
+WLAN_PWR_CFG rtl8723A_card_enable_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS]=
+{
+ RTL8723A_TRANS_CARDDIS_TO_CARDEMU
+ RTL8723A_TRANS_CARDEMU_TO_ACT
+ RTL8723A_TRANS_END
+};
+
+//3 Suspend Array
+WLAN_PWR_CFG rtl8723A_suspend_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_SUS_STEPS+RTL8723A_TRANS_END_STEPS]=
+{
+ RTL8723A_TRANS_ACT_TO_CARDEMU
+ RTL8723A_TRANS_CARDEMU_TO_SUS
+ RTL8723A_TRANS_END
+};
+
+//3 Resume Array
+WLAN_PWR_CFG rtl8723A_resume_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_SUS_STEPS+RTL8723A_TRANS_END_STEPS]=
+{
+ RTL8723A_TRANS_SUS_TO_CARDEMU
+ RTL8723A_TRANS_CARDEMU_TO_ACT
+ RTL8723A_TRANS_END
+};
+
+//3 HWPDN Array
+WLAN_PWR_CFG rtl8723A_hwpdn_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS]=
+{
+ RTL8723A_TRANS_ACT_TO_CARDEMU
+ RTL8723A_TRANS_CARDEMU_TO_PDN
+ RTL8723A_TRANS_END
+};
+
+//3 Enter LPS
+WLAN_PWR_CFG rtl8723A_enter_lps_flow[RTL8723A_TRANS_ACT_TO_LPS_STEPS+RTL8723A_TRANS_END_STEPS]=
+{
+ //FW behavior
+ RTL8723A_TRANS_ACT_TO_LPS
+ RTL8723A_TRANS_END
+};
+
+//3 Leave LPS
+WLAN_PWR_CFG rtl8723A_leave_lps_flow[RTL8723A_TRANS_LPS_TO_ACT_STEPS+RTL8723A_TRANS_END_STEPS]=
+{
+ //FW behavior
+ RTL8723A_TRANS_LPS_TO_ACT
+ RTL8723A_TRANS_END
+};
+
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_bt-coexist.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_bt-coexist.c
index 34025b0bb50e..4ac0a4a6bd64 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_bt-coexist.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_bt-coexist.c
@@ -27,7 +27,7 @@
//#define BT_DEBUG
-#define CHECK_BT_EXIST_FROM_REG
+//#define CHECK_BT_EXIST_FROM_REG
#define DIS_PS_RX_BCN
//#define BTCOEX_DECREASE_WIFI_POWER
//#define BTCOEX_CMCC_TEST
@@ -144,7 +144,7 @@ static u8 PlatformCancelTimer(PADAPTER a, _timer *ptimer)
#define PlatformScheduleWorkItem(pwork) _set_workitem(pwork)
#if 0
#define GET_UNDECORATED_AVERAGE_RSSI(padapter) \
- (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE) ? \
+ (BTDM_CheckFWState(padapter, WIFI_AP_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE) ? \
(GET_HAL_DATA(padapter)->dmpriv.EntryMinUndecoratedSmoothedPWDB): \
(GET_HAL_DATA(padapter)->dmpriv.UndecoratedSmoothedPWDB)
#else
@@ -216,6 +216,14 @@ void BT_SignalCompensation(PADAPTER padapter, u8 *rssi_wifi, u8 *rssi_bt)
void BT_WifiScanNotify(PADAPTER padapter, u8 scanType)
{
+#if defined(CONFIG_CONCURRENT_MODE)
+ if (padapter->adapter_type != PRIMARY_ADAPTER)
+ {
+ RTPRINT(FBT, BT_TRACE, ("[DM][BT], CONFIG_CONCURRENT_MODE and padapter->adapter_type != PRIMARY_ADAPTER in %s!!\n", __FUNCTION__));
+ return;
+ }
+#endif
+
BTHCI_WifiScanNotify(padapter, scanType);
BTDM_CheckAntSelMode(padapter);
BTDM_WifiScanNotify(padapter, scanType);
@@ -223,6 +231,14 @@ void BT_WifiScanNotify(PADAPTER padapter, u8 scanType)
void BT_WifiAssociateNotify(PADAPTER padapter, u8 action)
{
+#if defined(CONFIG_CONCURRENT_MODE)
+ if (padapter->adapter_type != PRIMARY_ADAPTER)
+ {
+ RTPRINT(FBT, BT_TRACE, ("[DM][BT], CONFIG_CONCURRENT_MODE and padapter->adapter_type != PRIMARY_ADAPTER in %s!!\n", __FUNCTION__));
+ return;
+ }
+#endif
+
// action :
// TRUE = associate start
// FALSE = associate finished
@@ -234,11 +250,27 @@ void BT_WifiAssociateNotify(PADAPTER padapter, u8 action)
void BT_WifiMediaStatusNotify(PADAPTER padapter, RT_MEDIA_STATUS mstatus)
{
+#if defined(CONFIG_CONCURRENT_MODE)
+ if (padapter->adapter_type != PRIMARY_ADAPTER)
+ {
+ RTPRINT(FBT, BT_TRACE, ("[DM][BT], CONFIG_CONCURRENT_MODE and padapter->adapter_type != PRIMARY_ADAPTER in %s!!\n", __FUNCTION__));
+ return;
+ }
+#endif
+
BTDM_MediaStatusNotify(padapter, mstatus);
}
void BT_SpecialPacketNotify(PADAPTER padapter)
{
+#if defined(CONFIG_CONCURRENT_MODE)
+ if (padapter->adapter_type != PRIMARY_ADAPTER)
+ {
+ RTPRINT(FBT, BT_TRACE, ("[DM][BT], CONFIG_CONCURRENT_MODE and padapter->adapter_type != PRIMARY_ADAPTER in %s!!\n", __FUNCTION__));
+ return;
+ }
+#endif
+
BTDM_ForDhcp(padapter);
}
@@ -295,7 +327,7 @@ void BTPKT_WPAAuthINITIALIZE(PADAPTER padapter, u8 EntryNum)
if (pHalData->bBTMode)
{
// if (padapter->MgntInfo.OpMode == RT_OP_MODE_IBSS)
- if (check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE)
+ if (BTDM_CheckFWState(padapter, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == _TRUE)
{
pBtSec->bUsedHwEncrypt = _FALSE;
}
@@ -745,7 +777,7 @@ void bthci_DecideBTChannel(PADAPTER padapter, u8 EntryNum)
IsAPModeExist(padapter)||
BTHCI_HsConnectionEstablished(padapter)))
#else
- if (!(check_fwstate(pmlmepriv, WIFI_ASOC_STATE|WIFI_ADHOC_STATE|WIFI_AP_STATE) == _TRUE ||
+ if (!(BTDM_CheckFWState(padapter, WIFI_ASOC_STATE|WIFI_ADHOC_STATE|WIFI_AP_STATE) == _TRUE ||
BTHCI_HsConnectionEstablished(padapter)))
#endif
{
@@ -1462,7 +1494,7 @@ bthci_AssocPreferredChannelList(
pMgntInfo->mIbss ||
IsExtAPModeExist(padapter)) ||
#else
- (check_fwstate(&padapter->mlmepriv, WIFI_ASOC_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE|WIFI_AP_STATE) == _TRUE) ||
+ (BTDM_CheckFWState(padapter, WIFI_ASOC_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE|WIFI_AP_STATE) == _TRUE) ||
#endif
BTHCI_HsConnectionEstablished(padapter))
{
@@ -1591,7 +1623,7 @@ u8 bthci_CheckRfStateBeforeConnect(PADAPTER padapter)
pBTInfo = GET_BT_INFO(padapter);
// rtw_hal_get_hwreg(padapter, HW_VAR_RF_STATE, (u8*)(&RfState));
- RfState = padapter->pwrctrlpriv.rf_pwrstate;
+ RfState = adapter_to_pwrctl(padapter)->rf_pwrstate;
if (RfState != rf_on)
{
@@ -4249,7 +4281,7 @@ bthci_CmdReadLocalAMPInfo(
{
// PMGNT_INFO pMgntInfo = &padapter->MgntInfo;
- struct pwrctrl_priv *ppwrctrl = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *ppwrctrl = adapter_to_pwrctl(padapter);
u8 localBuf[TmpLocalBufSize] = "";
u8 *pRetPar;
u8 len = 0;
@@ -5353,15 +5385,15 @@ bthci_CmdWIFIConnectionStatus(
}
}
#else
- if (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == _TRUE) {
+ if (BTDM_CheckFWState(padapter, WIFI_AP_STATE) == _TRUE) {
if (padapter->stapriv.asoc_sta_count >= 3)
connectStatus = HCI_WIFI_CONNECTED;
else
connectStatus = HCI_WIFI_NOT_CONNECTED;
}
- else if (check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE|WIFI_ASOC_STATE) == _TRUE)
+ else if (BTDM_CheckFWState(padapter, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE|WIFI_ASOC_STATE) == _TRUE)
connectStatus = HCI_WIFI_CONNECTED;
- else if (check_fwstate(&padapter->mlmepriv, WIFI_UNDER_LINKING) == _TRUE)
+ else if (BTDM_CheckFWState(padapter, WIFI_UNDER_LINKING) == _TRUE)
connectStatus = HCI_WIFI_CONNECT_IN_PROGRESS;
else
connectStatus = HCI_WIFI_NOT_CONNECTED;
@@ -6526,7 +6558,7 @@ bthci_StateDisconnected(
(MgntIsLinkInProgress(pMgntInfo))||
(MgntScanInProgress(pMgntInfo)))
#else
- while (check_fwstate(&padapter->mlmepriv, WIFI_ASOC_STATE|WIFI_SITE_MONITOR) == _TRUE)
+ while (BTDM_CheckFWState(padapter, WIFI_ASOC_STATE|WIFI_SITE_MONITOR) == _TRUE)
#endif
{
RTPRINT(FIOCTL, IOCTL_STATE, ("Scan/Roaming/Wifi Link is in Progress, wait 200 ms\n"));
@@ -6959,7 +6991,7 @@ u8 bthci_WaitForRfReady(PADAPTER padapter)
u8 bRet = _FALSE;
// PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(&(padapter->MgntInfo));
- struct pwrctrl_priv *ppwrctrl = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *ppwrctrl = adapter_to_pwrctl(padapter);
rt_rf_power_state RfState;
u32 waitcnt = 0;
@@ -7070,7 +7102,7 @@ u8 BTHCI_GetCurrentEntryNumByMAC(PADAPTER padapter, u8 *SA)
void BTHCI_StatusWatchdog(PADAPTER padapter)
{
// PMGNT_INFO pMgntInfo = &padapter->MgntInfo;
- struct pwrctrl_priv *ppwrctrl = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *ppwrctrl = adapter_to_pwrctl(padapter);
PBT30Info pBTInfo = GET_BT_INFO(padapter);
PBT_MGNT pBtMgnt = &pBTInfo->BtMgnt;
PBT_TRAFFIC pBtTraffic = &pBTInfo->BtTraffic;
@@ -7113,7 +7145,7 @@ void BTHCI_StatusWatchdog(PADAPTER padapter)
!MgntIsLinkInProgress(pMgntInfo) &&
!MgntScanInProgress(pMgntInfo) &&
#else
- if ((check_fwstate(&padapter->mlmepriv, WIFI_REASOC_STATE|WIFI_UNDER_LINKING|WIFI_SITE_MONITOR) == _FALSE) &&
+ if ((BTDM_CheckFWState(padapter, WIFI_REASOC_STATE|WIFI_UNDER_LINKING|WIFI_SITE_MONITOR) == _FALSE) &&
#endif
!bRfOff)
{
@@ -7166,7 +7198,7 @@ BTHCI_NotifyRFState(
PMGNT_INFO pMgntInfo = &padapter->MgntInfo;
RT_RF_CHANGE_SOURCE RfOffReason = pMgntInfo->RfOffReason;
#else
- struct pwrctrl_priv *ppwrctrl = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *ppwrctrl = adapter_to_pwrctl(padapter);
RT_RF_CHANGE_SOURCE RfOffReason = ppwrctrl->rfoff_reason;
#endif
@@ -8104,7 +8136,7 @@ void btdm_1AntSetPSMode(PADAPTER padapter, u8 enable, u8 smartps, u8 mode)
RTPRINT(FBT, BT_TRACE, ("[BTCoex], Current LPS(%s, %d), smartps=%d\n", enable==_TRUE?"ON":"OFF", mode, smartps));
- pwrctrl = &padapter->pwrctrlpriv;
+ pwrctrl = adapter_to_pwrctl(padapter);
if (enable == _TRUE) {
rtw_set_ps_mode(padapter, PS_MODE_MIN, smartps, mode);
@@ -8147,6 +8179,41 @@ u8 btdm_Is1AntPsTdmaStateChange(PADAPTER padapter)
}
}
+void btdm_1AntSetBTCoexTable(PADAPTER padapter, u8 coexCase)
+{
+ switch (coexCase)
+ {
+ case 0:
+ rtw_write32(padapter, REG_BT_COEX_TABLE_1, 0x55555555);
+ rtw_write32(padapter, REG_BT_COEX_TABLE_2, 0x55555555);
+ break;
+ case 1:
+ rtw_write32(padapter, REG_BT_COEX_TABLE_1, 0x55555555);
+ rtw_write32(padapter, REG_BT_COEX_TABLE_2, 0x5afa5afa);
+ break;
+ case 2:
+ rtw_write32(padapter, REG_BT_COEX_TABLE_1, 0x5a5a5a5a);
+ rtw_write32(padapter, REG_BT_COEX_TABLE_2, 0x5a5a5a5a);
+ break;
+ case 3:
+ rtw_write32(padapter, REG_BT_COEX_TABLE_1, 0xaaaaaaaa);
+ rtw_write32(padapter, REG_BT_COEX_TABLE_2, 0xaaaaaaaa);
+ break;
+ case 4:
+ rtw_write32(padapter, REG_BT_COEX_TABLE_1, 0xffffffff);
+ rtw_write32(padapter, REG_BT_COEX_TABLE_2, 0xffffffff);
+ break;
+ case 5:
+ rtw_write32(padapter, REG_BT_COEX_TABLE_1, 0x5fff5fff);
+ rtw_write32(padapter, REG_BT_COEX_TABLE_2, 0x5fff5fff);
+ break;
+ case 6:
+ rtw_write32(padapter, REG_BT_COEX_TABLE_1, 0x55ff55ff);
+ rtw_write32(padapter, REG_BT_COEX_TABLE_2, 0x5a5a5a5a);
+ break;
+ }
+}
+
// Before enter TDMA, make sure Power Saving is enable!
void
btdm_1AntPsTdma(
@@ -8171,22 +8238,24 @@ btdm_1AntPsTdma(
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
// wide duration for WiFi
- BTDM_SetFw3a(padapter, 0xd3, 0x1a, 0x1a, 0x0, 0x58);
+ BTDM_SetFw3a(padapter, 0xd3, 0x1a, 0x1a, 0x0, 0x50);
+ btdm_1AntSetBTCoexTable(padapter, 6);
}
break;
case 2: // A2DP Level-2
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
// normal duration for WiFi
- BTDM_SetFw3a(padapter, 0xd3, 0x12, 0x12, 0x0, 0x58);
+ BTDM_SetFw3a(padapter, 0xd3, 0x12, 0x12, 0x0, 0x50);
+ btdm_1AntSetBTCoexTable(padapter, 6);
}
break;
case 3: // BT FTP/OPP
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
// normal duration for WiFi
- BTDM_SetFw3a(padapter, 0xd3, 0x30, 0x03, 0x10, 0x58);
-
+ BTDM_SetFw3a(padapter, 0x53, 0x30, 0x03, 0x10, 0x50);
+ btdm_1AntSetBTCoexTable(padapter, 6);
}
break;
case 4: // for wifi scan & BT is connected
@@ -8194,13 +8263,15 @@ btdm_1AntPsTdma(
{
// protect 3 beacons in 3-beacon period & no Tx pause at BT slot
BTDM_SetFw3a(padapter, 0x93, 0x15, 0x03, 0x14, 0x0);
+ btdm_1AntSetBTCoexTable(padapter, 1);
}
break;
case 5: // for WiFi connected-busy & BT is Non-Connected-Idle
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
// SCO mode, Ant fixed at WiFi, WLAN_Act toggle
- BTDM_SetFw3a(padapter, 0x61, 0x15, 0x03, 0x31, 0x00);
+ BTDM_SetFw3a(padapter, 0x61, 0x15, 0x03, 0x31, 0x10);
+ btdm_1AntSetBTCoexTable(padapter, 2);
}
break;
case 9: // ACL high-retry type - 2
@@ -8208,19 +8279,22 @@ btdm_1AntPsTdma(
{
// narrow duration for WiFi
BTDM_SetFw3a(padapter, 0xd3, 0xa, 0xa, 0x0, 0x58); //narrow duration for WiFi
+ btdm_1AntSetBTCoexTable(padapter, 6);
}
break;
case 10: // for WiFi connect idle & BT ACL busy or WiFi Connected-Busy & BT is Inquiry
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
BTDM_SetFw3a(padapter, 0x13, 0xa, 0xa, 0x0, 0x40);
+ btdm_1AntSetBTCoexTable(padapter, 2);
}
break;
case 11: // ACL high-retry type - 3
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
// narrow duration for WiFi
- BTDM_SetFw3a(padapter, 0xd3, 0x05, 0x05, 0x00, 0x58);
+ BTDM_SetFw3a(padapter, 0x53, 0x10, 0x03, 0x10, 0x50);
+ btdm_1AntSetBTCoexTable(padapter, 6);
}
break;
case 12: // for WiFi Connected-Busy & BT is Connected-Idle
@@ -8228,68 +8302,91 @@ btdm_1AntPsTdma(
{
// Allow High-Pri BT
BTDM_SetFw3a(padapter, 0xeb, 0x0a, 0x03, 0x31, 0x18);
+ btdm_1AntSetBTCoexTable(padapter, 2);
}
break;
case 20: // WiFi only busy ,TDMA mode for power saving
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
BTDM_SetFw3a(padapter, 0x13, 0x25, 0x25, 0x00, 0x00);
+ btdm_1AntSetBTCoexTable(padapter, 2);
}
break;
case 27: // WiFi DHCP/Site Survey & BT SCO busy
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
BTDM_SetFw3a(padapter, 0xa3, 0x25, 0x03, 0x31, 0x98);
+ btdm_1AntSetBTCoexTable(padapter, 2);
}
break;
case 28: // WiFi DHCP/Site Survey & BT idle
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
BTDM_SetFw3a(padapter, 0x69, 0x25, 0x03, 0x31, 0x00);
+ btdm_1AntSetBTCoexTable(padapter, 2);
}
break;
case 29: // WiFi DHCP/Site Survey & BT ACL busy
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
BTDM_SetFw3a(padapter, 0xeb, 0x1a, 0x1a, 0x01, 0x18);
- rtw_write32(padapter, 0x6c0, 0x5afa5afa);
- rtw_write32(padapter, 0x6c4, 0x5afa5afa);
+ btdm_1AntSetBTCoexTable(padapter, 1);
}
break;
case 30: // WiFi idle & BT Inquiry
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
BTDM_SetFw3a(padapter, 0x93, 0x15, 0x03, 0x14, 0x00);
+ btdm_1AntSetBTCoexTable(padapter, 0);
}
break;
case 31: // BT HID
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
- BTDM_SetFw3a(padapter, 0xd3, 0x1a, 0x1a, 0x00, 0x58);
+ BTDM_SetFw3a(padapter, 0x53, 0x12, 0x12, 0x00, 0x50);
+ btdm_1AntSetBTCoexTable(padapter, 6);
}
break;
case 32: // BT SCO & Inquiry
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
- BTDM_SetFw3a(padapter, 0xab, 0x0a, 0x03, 0x11, 0x98);
+ BTDM_SetFw3a(padapter, 0xa3, 0x0a, 0x03, 0x14, 0x00);
+ btdm_1AntSetBTCoexTable(padapter, 0);
}
break;
case 33: // BT SCO & WiFi site survey
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
BTDM_SetFw3a(padapter, 0xa3, 0x25, 0x03, 0x30, 0x98);
+ btdm_1AntSetBTCoexTable(padapter, 2);
}
break;
case 34: // BT HID & WiFi site survey
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
- BTDM_SetFw3a(padapter, 0xd3, 0x1a, 0x1a, 0x00, 0x18);
+ BTDM_SetFw3a(padapter, 0xd3, 0x1a, 0x1a, 0x00, 0x10);
+ btdm_1AntSetBTCoexTable(padapter, 1);
}
break;
case 35: // BT HID & WiFi Connecting
if (btdm_Is1AntPsTdmaStateChange(padapter))
{
- BTDM_SetFw3a(padapter, 0xe3, 0x1a, 0x1a, 0x00, 0x18);
+ BTDM_SetFw3a(padapter, 0xe3, 0x1a, 0x1a, 0x00, 0x10);
+ btdm_1AntSetBTCoexTable(padapter, 1);
+ }
+ break;
+ case 36: // BT A2DP/FTP/A2DP+HID/FTP+A2DP & WiFi LPS
+ if (btdm_Is1AntPsTdmaStateChange(padapter))
+ {
+ BTDM_SetFw3a(padapter, 0x23, 0x20, 0x00, 0x10, 0x24);
+ btdm_1AntSetBTCoexTable(padapter, 2);
+ }
+ break;
+ case 37:
+ if (btdm_Is1AntPsTdmaStateChange(padapter))
+ {
+ BTDM_SetFw3a(padapter, 0x53, 0x10, 0x03, 0x10, 0x10);
+ btdm_1AntSetBTCoexTable(padapter, 6);
}
break;
}
@@ -8326,6 +8423,7 @@ btdm_1AntPsTdma(
RTPRINT(FBT, BT_TRACE, ("[BTCoex], 0x860=0x110, Switch Antenna to WiFi\n"));
break;
}
+ btdm_1AntSetBTCoexTable(padapter, 2);
}
RTPRINT(FBT, BT_TRACE, ("[BTCoex], Current TDMA(%s, %d)\n",
@@ -8345,7 +8443,7 @@ void _btdm_1AntSetPSTDMA(PADAPTER padapter, u8 bPSEn, u8 smartps, u8 psOption, u
u8 bSwitchPS;
- if ((check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE) == _FALSE) &&
+ if ((BTDM_CheckFWState(padapter, WIFI_STATION_STATE) == _FALSE) &&
(get_fwstate(&padapter->mlmepriv) != WIFI_NULL_STATE))
{
btdm_1AntPsTdma(padapter, bTDMAOn, tdmaType);
@@ -8361,7 +8459,7 @@ void _btdm_1AntSetPSTDMA(PADAPTER padapter, u8 bPSEn, u8 smartps, u8 psOption, u
bPSEn==_TRUE?"ON":"OFF", psOption,
bTDMAOn==_TRUE?"ON":"OFF", tdmaType));
- pwrctrl = &padapter->pwrctrlpriv;
+ pwrctrl = adapter_to_pwrctl(padapter);
pHalData = GET_HAL_DATA(padapter);
pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm1Ant;
@@ -8606,7 +8704,12 @@ void btdm_1AntTdmaDurationAdjustForACL(PADAPTER padapter)
if (pBtdm8723->psTdmaMonitorCnt == 0)
{
// RTPRINT(FBT, BT_TRACE, ("[BTCoex], 1AntTdmaAdjACL, first time execute!!\n"));
- btdm_1AntSetPSTDMA(padapter, _TRUE, 0, _TRUE, 2);
+ btdm_1AntSetPSTDMA(padapter, _TRUE, 0, _TRUE, 9);
+ if(pHalData->bt_coexist.halCoex8723.btInfoExt){
+ pBtdm8723->psTdmaDuAdjType = 9;
+ RTPRINT(FBT, BT_TRACE, ("[BTCoex], 1AntTdmaAdjACL, limit to type9 \n"));
+ }
+ else
pBtdm8723->psTdmaDuAdjType = 2;
}
else
@@ -8666,7 +8769,7 @@ void btdm_1AntTdmaDurationAdjustForACL(PADAPTER padapter)
}
else if (pBtdm8723->curPsTdma == 9)
{
- if (pHalData->bt_coexist.halCoex8723.btInfoExt){
+ if ((pHalData->bt_coexist.halCoex8723.btInfoExt) || (pHalData->bt_coexist.halCoex8723.btRssi <= 32)){
pBtdm8723->psTdmaDuAdjType = 9;
// RTPRINT(FBT, BT_TRACE, ("[BTCoex], 1AntTdmaAdjACL, limit to type9 \n"));
}
@@ -8676,7 +8779,7 @@ void btdm_1AntTdmaDurationAdjustForACL(PADAPTER padapter)
}
else if (pBtdm8723->curPsTdma == 2)
{
- if (pHalData->bt_coexist.halCoex8723.btInfoExt){
+ if ((pHalData->bt_coexist.halCoex8723.btInfoExt) || (pHalData->bt_coexist.halCoex8723.btRssi <=32)){
pBtdm8723->psTdmaDuAdjType = 9;
// RTPRINT(FBT, BT_TRACE, ("[BTCoex], 1AntTdmaAdjACL, limit to type9 \n"));
}
@@ -8855,9 +8958,9 @@ void btdm_1AntCoexProcessForWifiConnect(PADAPTER padapter)
RTPRINT(FBT, BT_TRACE, ("[BTCoex], WiFi is %s\n", BTDM_IsWifiBusy(padapter)?"Busy":"IDLE"));
RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT is %s\n", BtStateString[BtState]));
- padapter->pwrctrlpriv.btcoex_rfon = _FALSE;
+ adapter_to_pwrctl(padapter)->btcoex_rfon = _FALSE;
- if ((!BTDM_IsWifiBusy(padapter)) &&(check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) != _TRUE)&&
+ if ((!BTDM_IsWifiBusy(padapter)) &&(BTDM_CheckFWState(padapter, WIFI_AP_STATE) != _TRUE)&&
((BtState == BT_INFO_STATE_NO_CONNECTION) || (BtState == BT_INFO_STATE_CONNECT_IDLE)))
{
switch (BtState)
@@ -8866,7 +8969,7 @@ void btdm_1AntCoexProcessForWifiConnect(PADAPTER padapter)
_btdm_1AntSetPSTDMA(padapter, _TRUE, 2, 0x26, _FALSE, 9);
break;
case BT_INFO_STATE_CONNECT_IDLE:
- _btdm_1AntSetPSTDMA(padapter, _TRUE, 2, 0x26, _FALSE, 0);
+ _btdm_1AntSetPSTDMA(padapter, _TRUE, 2, 0x26, _FALSE, 9);
break;
}
}
@@ -8898,13 +9001,11 @@ void btdm_1AntCoexProcessForWifiConnect(PADAPTER padapter)
case BT_INFO_STATE_CONNECT_IDLE:
// WiFi is Busy
btdm_1AntSetPSTDMA(padapter, _FALSE, 0, _TRUE, 5);
- rtw_write32(padapter, 0x6c0, 0x5a5a5a5a);
- rtw_write32(padapter, 0x6c4, 0x5a5a5a5a);
break;
case BT_INFO_STATE_ACL_INQ_OR_PAG:
RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT PROFILE is BT_INFO_STATE_ACL_INQ_OR_PAG\n"));
case BT_INFO_STATE_INQ_OR_PAG:
- padapter->pwrctrlpriv.btcoex_rfon = _TRUE;
+ adapter_to_pwrctl(padapter)->btcoex_rfon = _TRUE;
btdm_1AntSetPSTDMA(padapter, _TRUE, 0, _TRUE, 30);
break;
case BT_INFO_STATE_SCO_ONLY_BUSY:
@@ -8917,14 +9018,17 @@ void btdm_1AntCoexProcessForWifiConnect(PADAPTER padapter)
btdm_1AntSetPSTDMA(padapter, _FALSE, 0, _TRUE, 23);
#else // !BTCOEX_CMCC_TEST
btdm_1AntSetPSTDMA(padapter, _FALSE, 0, _FALSE, 8);
- rtw_write32(padapter, 0x6c0, 0x5a5a5a5a);
- rtw_write32(padapter, 0x6c4, 0x5a5a5a5a);
#endif // !BTCOEX_CMCC_TEST
}
break;
case BT_INFO_STATE_ACL_ONLY_BUSY:
- padapter->pwrctrlpriv.btcoex_rfon = _TRUE;
- if (pBtCoex->c2hBtProfile == BT_INFO_HID)
+ adapter_to_pwrctl(padapter)->btcoex_rfon = _TRUE;
+ if (!BTDM_IsWifiBusy(padapter)) {
+ //WiFi LPS
+ btdm_1AntSetPSTDMA(padapter, _TRUE, 0, _TRUE, 37);
+
+ }
+ else if (pBtCoex->c2hBtProfile == BT_INFO_HID)
{
RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT PROFILE is HID\n"));
btdm_1AntSetPSTDMA(padapter, _TRUE, 0, _TRUE, 31);
@@ -8939,17 +9043,37 @@ void btdm_1AntCoexProcessForWifiConnect(PADAPTER padapter)
RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT PROFILE is A2DP_FTP\n"));
btdm_1AntSetPSTDMA(padapter, _TRUE, 0, _TRUE, 11);
}
+ else if (pBtCoex->c2hBtProfile == (BT_INFO_A2DP|BT_INFO_HID))
+ {
+ RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT PROFILE is A2DP_HID\n"));
+ btdm_1AntSetPSTDMA(padapter, _TRUE, 0, _TRUE, 11);
+ }
+ else if (pBtCoex->c2hBtProfile == (BT_INFO_FTP|BT_INFO_HID))
+ {
+ RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT PROFILE is FTP_HID\n"));
+ btdm_1AntSetPSTDMA(padapter, _TRUE, 0, _TRUE, 11);
+ }
else
{
if (pBtCoex->c2hBtProfile == BT_INFO_A2DP)
{
RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT PROFILE is A2DP\n"));
+ RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT PROFILE is A2DP pBtCoex->AclTp=0x%x lowPriorityTx=%d\n",pBtCoex->AclTp,pHalData->bt_coexist.halCoex8723.lowPriorityTx));
+ if(pBtCoex->AclTp > 0x3000 ||pHalData->bt_coexist.halCoex8723.lowPriorityTx >1000)
+ {
+ RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT PROFILE is A2DP change to A2DP+OPP, pBtCoex->AclTp=0x%x lowPriorityTx=%d\n",pBtCoex->AclTp,pHalData->bt_coexist.halCoex8723.lowPriorityTx));
+ btdm_1AntSetPSTDMA(padapter, _TRUE, 0, _TRUE, 11);
+ }
+ else{
+ btdm_1AntTdmaDurationAdjustForACL(padapter);
+ }
}
else
{
RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT PROFILE is UNKNOWN(0x%02X)! Use A2DP Profile\n", pBtCoex->c2hBtProfile));
+ btdm_1AntTdmaDurationAdjustForACL(padapter);
}
- btdm_1AntTdmaDurationAdjustForACL(padapter);
+
}
break;
}
@@ -9114,7 +9238,7 @@ void btdm_1AntBTStateChangeHandler(PADAPTER padapter, BT_STATE_1ANT oldState, BT
btdm_SetFwIgnoreWlanAct(padapter, _FALSE);
}
- if ((check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE) == _TRUE) &&
+ if ((BTDM_CheckFWState(padapter, WIFI_STATION_STATE) == _TRUE) &&
(BTDM_IsWifiConnectionExist(padapter) == _TRUE))
{
if ((newState == BT_INFO_STATE_SCO_ONLY_BUSY) ||
@@ -9185,7 +9309,7 @@ void btdm_1AntBtCoexistHandler(PADAPTER padapter)
pHalData = GET_HAL_DATA(padapter);
pBtCoex8723 = &pHalData->bt_coexist.halCoex8723;
pBtdm8723 = &pBtCoex8723->btdm1Ant;
- padapter->pwrctrlpriv.btcoex_rfon = _FALSE;
+ adapter_to_pwrctl(padapter)->btcoex_rfon = _FALSE;
if (BT_IsBtDisabled(padapter) == _TRUE)
{
RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT is disabled\n"));
@@ -9403,8 +9527,6 @@ void BTDM_1AntWifiAssociateNotify(PADAPTER padapter, u8 type)
(BtState == BT_INFO_STATE_ACL_SCO_BUSY))
{
btdm_1AntSetPSTDMA(padapter, _FALSE, 0, _FALSE, 8);
- rtw_write32(padapter, 0x6c0, 0x5a5a5a5a);
- rtw_write32(padapter, 0x6c4, 0x5a5a5a5a);
}
else if ((BtState == BT_INFO_STATE_ACL_ONLY_BUSY) ||
(BtState == BT_INFO_STATE_ACL_INQ_OR_PAG))
@@ -9445,7 +9567,7 @@ void BTDM_1AntMediaStatusNotify(PADAPTER padapter, RT_MEDIA_STATUS mstatus)
if (RT_MEDIA_CONNECT == mstatus)
{
- if (check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE) == _TRUE)
+ if (BTDM_CheckFWState(padapter, WIFI_STATION_STATE) == _TRUE)
{
if ((pBtCoex->c2hBtInfo == BT_INFO_STATE_SCO_ONLY_BUSY) ||
(pBtCoex->c2hBtInfo == BT_INFO_STATE_ACL_SCO_BUSY))
@@ -9454,7 +9576,7 @@ void BTDM_1AntMediaStatusNotify(PADAPTER padapter, RT_MEDIA_STATUS mstatus)
}
}
- padapter->pwrctrlpriv.DelayLPSLastTimeStamp = rtw_get_current_time();
+ adapter_to_pwrctl(padapter)->DelayLPSLastTimeStamp = rtw_get_current_time();
BTDM_1AntForDhcp(padapter);
}
else
@@ -9486,7 +9608,8 @@ void BTDM_1AntForDhcp(PADAPTER padapter)
#if 1
- BTDM_1AntWifiAssociateNotify(padapter, _TRUE);
+ //BTDM_1AntWifiAssociateNotify(padapter, _TRUE);
+ RTPRINT(FBT, BT_TRACE, ("\n[BTCoex], 1Ant for DHCP SKIP~~~~~\n"));
#else
@@ -9509,7 +9632,7 @@ void BTDM_1AntForDhcp(PADAPTER padapter)
}
else if (BtState == BT_INFO_STATE_ACL_ONLY_BUSY)
{
- padapter->pwrctrlpriv.btcoex_rfon = _TRUE;
+ adapter_to_pwrctl(padapter)->btcoex_rfon = _TRUE;
if(padapter->securitypriv.ndisencryptstatus != Ndis802_11EncryptionDisabled)
{
btdm_1AntSetPSTDMA(padapter, _TRUE, 0, _TRUE, 18);
@@ -9579,18 +9702,18 @@ void BTDM_1AntWifiScanNotify(PADAPTER padapter, u8 scanType)
btdm_1AntSetPSTDMA(padapter, _FALSE, 0, _TRUE, 32);
else
{
- padapter->pwrctrlpriv.btcoex_rfon = _TRUE;
+ adapter_to_pwrctl(padapter)->btcoex_rfon = _TRUE;
btdm_1AntSetPSTDMA(padapter, _TRUE, 0, _TRUE, 33);
}
}
else if (_TRUE == pBtCoex->bC2hBtInquiryPage)
{
- padapter->pwrctrlpriv.btcoex_rfon = _TRUE;
+ adapter_to_pwrctl(padapter)->btcoex_rfon = _TRUE;
btdm_1AntSetPSTDMA(padapter, _TRUE, 0, _TRUE, 30);
}
else if (BtState == BT_INFO_STATE_ACL_ONLY_BUSY)
{
- padapter->pwrctrlpriv.btcoex_rfon = _TRUE;
+ adapter_to_pwrctl(padapter)->btcoex_rfon = _TRUE;
if (pBtCoex->c2hBtProfile == BT_INFO_HID)
btdm_1AntSetPSTDMA(padapter, _TRUE, 0, _TRUE, 34);
else
@@ -9598,7 +9721,7 @@ void BTDM_1AntWifiScanNotify(PADAPTER padapter, u8 scanType)
}
else
{
- padapter->pwrctrlpriv.btcoex_rfon = _TRUE;
+ adapter_to_pwrctl(padapter)->btcoex_rfon = _TRUE;
btdm_1AntSetPSTDMA(padapter, _TRUE, 0, _TRUE, 5);
}
}
@@ -9655,6 +9778,10 @@ void BTDM_1AntFwC2hBtInfo8723A(PADAPTER padapter)
if (btState == 0x1)
{
pBtCoex->c2hBtInfo = BT_INFO_STATE_CONNECT_IDLE;
+ if (pBtCoex->c2hBtProfile)
+ {
+ pBtCoex->c2hBtInfo = BT_INFO_STATE_ACL_ONLY_BUSY;
+ }
}
else if (btState == 0x9)
{
@@ -9692,28 +9819,26 @@ void BTDM_1AntFwC2hBtInfo8723A(PADAPTER padapter)
RTPRINT(FBT, BT_TRACE, ("[BTC2H], %s(%d)\n",
BtStateString[pBtCoex->c2hBtInfo], pBtCoex->c2hBtInfo));
- if(pBtCoex->c2hBtProfile != BT_INFO_HID)
- pBtCoex->c2hBtProfile &= ~BT_INFO_HID;
+// if(pBtCoex->c2hBtProfile != BT_INFO_HID)
+// pBtCoex->c2hBtProfile &= ~BT_INFO_HID;
}
void BTDM_1AntBtCoexist8723A(PADAPTER padapter)
{
- struct mlme_priv *pmlmepriv;
PHAL_DATA_TYPE pHalData;
u32 curr_time, delta_time;
- pmlmepriv = &padapter->mlmepriv;
pHalData = GET_HAL_DATA(padapter);
- if (check_fwstate(pmlmepriv, WIFI_SITE_MONITOR) == _TRUE)
+ if (BTDM_CheckFWState(padapter, WIFI_SITE_MONITOR) == _TRUE)
{
// already done in BTDM_1AntForScan()
RTPRINT(FBT, BT_TRACE, ("[BTCoex], wifi is under scan progress!!\n"));
return;
}
- if (check_fwstate(pmlmepriv, WIFI_UNDER_LINKING) == _TRUE)
+ if (BTDM_CheckFWState(padapter, WIFI_UNDER_LINKING) == _TRUE)
{
RTPRINT(FBT, BT_TRACE, ("[BTCoex], wifi is under link progress!!\n"));
return;
@@ -9721,7 +9846,7 @@ void BTDM_1AntBtCoexist8723A(PADAPTER padapter)
// under DHCP(Special packet)
curr_time = rtw_get_current_time();
- delta_time = curr_time - padapter->pwrctrlpriv.DelayLPSLastTimeStamp;
+ delta_time = curr_time - adapter_to_pwrctl(padapter)->DelayLPSLastTimeStamp;
delta_time = rtw_systime_to_ms(delta_time);
if (delta_time < 500) // 500ms
{
@@ -10321,8 +10446,8 @@ void btdm_2AntCoexTable( PADAPTER padapter,u32 val0x6c0,u32 val0x6c8,u8 val0x6cc
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
PBTDM_8723A_2ANT pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
- RTPRINT(FBT, BT_TRACE, ("[BTCoex], write Coex Table 0x6c0=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n",
- val0x6c0, val0x6c8, val0x6cc));
+// RTPRINT(FBT, BT_TRACE, ("[BTCoex], write Coex Table 0x6c0=0x%x, 0x6c8=0x%x, 0x6cc=0x%x\n",
+// val0x6c0, val0x6c8, val0x6cc));
pBtdm8723->curVal0x6c0 = val0x6c0;
pBtdm8723->curVal0x6c8 = val0x6c8;
pBtdm8723->curVal0x6cc = val0x6cc;
@@ -10361,6 +10486,33 @@ void btdm_2AntIgnoreWlanAct(PADAPTER padapter,u8 bEnable)
btdm_SetFwIgnoreWlanAct(padapter,bEnable);
pBtdm8723->bPreIgnoreWlanAct = pBtdm8723->bCurIgnoreWlanAct;
}
+void btdm_2AntSetTable(PADAPTER padapter,u8 byte){
+ u8 value;
+ u32 val0x6c0,val0x6c4;
+ value =(byte&(BIT4|BIT3))>>3;
+
+ switch(value){
+ case 0:
+ val0x6c0=0x55555555;
+ val0x6c4=0x55555555;
+ break;
+ case 1:
+ val0x6c0=0x55555555;
+ val0x6c4=0x5afa5afa;
+ break;
+ case 2:
+ val0x6c0=0x55ff55ff;
+ val0x6c4=0x5a5a5a5a;
+ break;
+ case 3:
+ val0x6c0=0x55ff55ff;
+ val0x6c4=0x5afa5afa;
+ break;
+ }
+ RTPRINT(FBT, BT_TRACE, ("set coex table, set 0x6c0=0x%x 0x6c4=0x%x\n", val0x6c0, val0x6c4));
+ rtw_write32(padapter, 0x6c0, val0x6c0);
+ rtw_write32(padapter, 0x6c4, val0x6c4);
+}
void btdm_2AntSetFw3a(PADAPTER padapter,u8 byte1,u8 byte2,u8 byte3,u8 byte4,u8 byte5)
{
@@ -10391,6 +10543,7 @@ void btdm_2AntSetFw3a(PADAPTER padapter,u8 byte1,u8 byte2,u8 byte3,u8 byte4,u8
H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));
FillH2CCmd(padapter, 0x3a, 5, H2C_Parameter);
+ btdm_2AntSetTable(padapter,byte5); // Driver need to set the Coex Table value after FW version 35.
}
void btdm_2AntPsTdma(PADAPTER padapter,u8 bTurnOn,u8 type)
@@ -10434,64 +10587,64 @@ void btdm_2AntPsTdma(PADAPTER padapter,u8 bTurnOn,u8 type)
{
case 1:
default:
- btdm_2AntSetFw3a(padapter, 0xe3, 0x1a, 0x1a, 0xa1, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0x1a, 0x1a, 0xe1, 0x98);
break;
case 2:
- btdm_2AntSetFw3a(padapter, 0xe3, 0x12, 0x12, 0xa1, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0x12, 0x12, 0xe1, 0x98);
break;
case 3:
- btdm_2AntSetFw3a(padapter, 0xe3, 0xa, 0xa, 0xa1, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0xa, 0xa, 0xe1, 0x98);
break;
case 4:
- btdm_2AntSetFw3a(padapter, 0xa3, 0x5, 0x5, 0xa1, 0x80);
+ btdm_2AntSetFw3a(padapter, 0xa3, 0x5, 0x5, 0xe1, 0x80);
break;
case 5:
- btdm_2AntSetFw3a(padapter, 0xe3, 0x1a, 0x1a, 0x20, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0x1a, 0x1a, 0x60, 0x98);
break;
case 6:
- btdm_2AntSetFw3a(padapter, 0xe3, 0x12, 0x12, 0x20, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0x12, 0x12, 0x60, 0x98);
break;
case 7:
- btdm_2AntSetFw3a(padapter, 0xe3, 0xa, 0xa, 0x20, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0xa, 0xa, 0x60, 0x98);
break;
case 8:
- btdm_2AntSetFw3a(padapter, 0xa3, 0x5, 0x5, 0x20, 0x80);
+ btdm_2AntSetFw3a(padapter, 0xa3, 0x5, 0x5, 0x60, 0x80);
break;
case 9:
- btdm_2AntSetFw3a(padapter, 0xe3, 0x1a, 0x1a, 0xa1, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0x1a, 0x1a, 0xe1, 0x98);
break;
case 10:
- btdm_2AntSetFw3a(padapter, 0xe3, 0x12, 0x12, 0xa1, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0x12, 0x12, 0xe1, 0x98);
break;
case 11:
- btdm_2AntSetFw3a(padapter, 0xe3, 0xa, 0xa, 0xa1, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0xa, 0xa, 0xe1, 0x98);
break;
case 12:
- btdm_2AntSetFw3a(padapter, 0xe3, 0x5, 0x5, 0xa1, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0x5, 0x5, 0xe1, 0x98);
break;
case 13:
- btdm_2AntSetFw3a(padapter, 0xe3, 0x1a, 0x1a, 0x20, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0x1a, 0x1a, 0x60, 0x98);
break;
case 14:
- btdm_2AntSetFw3a(padapter, 0xe3, 0x12, 0x12, 0x20, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0x12, 0x12, 0x60, 0x98);
break;
case 15:
- btdm_2AntSetFw3a(padapter, 0xe3, 0xa, 0xa, 0x20, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0xa, 0xa, 0x60, 0x98);
break;
case 16:
- btdm_2AntSetFw3a(padapter, 0xe3, 0x5, 0x5, 0x20, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0x5, 0x5, 0x60, 0x98);
break;
case 17:
- btdm_2AntSetFw3a(padapter, 0xa3, 0x2f, 0x2f, 0x20, 0x80);
+ btdm_2AntSetFw3a(padapter, 0xa3, 0x2f, 0x2f, 0x60, 0x80);
break;
case 18:
- btdm_2AntSetFw3a(padapter, 0xe3, 0x5, 0x5, 0xa1, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0x5, 0x5, 0xe1, 0x98);
break;
case 19:
- btdm_2AntSetFw3a(padapter, 0xe3, 0x25, 0x25, 0xa1, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0x25, 0x25, 0xe1, 0x98);
break;
case 20:
- btdm_2AntSetFw3a(padapter, 0xe3, 0x25, 0x25, 0x20, 0x98);
+ btdm_2AntSetFw3a(padapter, 0xe3, 0x25, 0x25, 0x60, 0x98);
break;
}
}
@@ -10572,11 +10725,11 @@ u8 btdm_Is2Ant8723ACommonAction(PADAPTER padapter)
PBTDM_8723A_2ANT pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
u8 bCommon=_FALSE;
- RTPRINT(FBT, BT_TRACE, ("%s :BTDM_IsWifiConnectionExist =%x check_fwstate=%x pmlmepriv->fw_state=0x%x\n",__func__,BTDM_IsWifiConnectionExist(padapter),check_fwstate(&padapter->mlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING)),padapter->mlmepriv.fw_state));
+ RTPRINT(FBT, BT_TRACE, ("%s :BTDM_IsWifiConnectionExist =%x BTDM_CheckFWState=%x pmlmepriv->fw_state=0x%x\n",__func__,BTDM_IsWifiConnectionExist(padapter),BTDM_CheckFWState(padapter, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING)),padapter->mlmepriv.fw_state));
// if(!BTDM_IsWifiBusy(padapter) &&
- if((BTDM_IsWifiConnectionExist(padapter) == _FALSE)&&(check_fwstate(&padapter->mlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))== _FALSE)&&
+ if((BTDM_IsWifiConnectionExist(padapter) == _FALSE)&&(BTDM_CheckFWState(padapter, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))== _FALSE)&&
(BT_2ANT_BT_STATUS_IDLE == pBtdm8723->btStatus) )
{
RTPRINT(FBT, BT_TRACE, ("Wifi idle + Bt idle!!\n"));
@@ -10597,7 +10750,7 @@ u8 btdm_Is2Ant8723ACommonAction(PADAPTER padapter)
bCommon = _TRUE;
}
// else if( BTDM_IsWifiBusy(padapter) &&
- else if(((BTDM_IsWifiConnectionExist(padapter) == _TRUE)||(check_fwstate(&padapter->mlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))== _TRUE))&&
+ else if(((BTDM_IsWifiConnectionExist(padapter) == _TRUE)||(BTDM_CheckFWState(padapter, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))== _TRUE))&&
(BT_2ANT_BT_STATUS_IDLE == pBtdm8723->btStatus) )
{
RTPRINT(FBT, BT_TRACE, ("Wifi non-idle + BT idle!!\n"));
@@ -10618,7 +10771,7 @@ u8 btdm_Is2Ant8723ACommonAction(PADAPTER padapter)
bCommon = _TRUE;
}
// else if(!BTDM_IsWifiBusy(padapter) &&
- else if((BTDM_IsWifiConnectionExist(padapter) == _FALSE)&&(check_fwstate(&padapter->mlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))== _FALSE)&&
+ else if((BTDM_IsWifiConnectionExist(padapter) == _FALSE)&&(BTDM_CheckFWState(padapter, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))== _FALSE)&&
(BT_2ANT_BT_STATUS_CONNECTED_IDLE == pBtdm8723->btStatus) )
{
RTPRINT(FBT, BT_TRACE, ("Wifi idle + Bt connected idle!!\n"));
@@ -10639,7 +10792,7 @@ u8 btdm_Is2Ant8723ACommonAction(PADAPTER padapter)
bCommon = _TRUE;
}
// else if(BTDM_IsWifiBusy(padapter) &&
- else if(((BTDM_IsWifiConnectionExist(padapter) == _TRUE)||(check_fwstate(&padapter->mlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))== _TRUE))&&
+ else if(((BTDM_IsWifiConnectionExist(padapter) == _TRUE)||(BTDM_CheckFWState(padapter, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))== _TRUE))&&
(BT_2ANT_BT_STATUS_CONNECTED_IDLE == pBtdm8723->btStatus) )
{
RTPRINT(FBT, BT_TRACE, ("Wifi non-idle + Bt connected idle!!\n"));
@@ -10660,7 +10813,7 @@ u8 btdm_Is2Ant8723ACommonAction(PADAPTER padapter)
bCommon = _TRUE;
}
// else if(!BTDM_IsWifiBusy(padapter) &&
- else if((BTDM_IsWifiConnectionExist(padapter) == _FALSE)&&(check_fwstate(&padapter->mlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))== _FALSE)&&
+ else if((BTDM_IsWifiConnectionExist(padapter) == _FALSE)&&(BTDM_CheckFWState(padapter, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))== _FALSE)&&
(BT_2ANT_BT_STATUS_NON_IDLE == pBtdm8723->btStatus) )
{
RTPRINT(FBT, BT_TRACE, ("Wifi idle + BT non-idle!!\n"));
@@ -11573,7 +11726,7 @@ void btdm_2AntTdmaDurationAdjust(PADAPTER padapter,u8 bScoHid,u8 bTxPause,u8
RTPRINT(FBT, BT_TRACE, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma=%d, recordPsTdma=%d\n",
pBtdm8723->curPsTdma, pBtdm8723->psTdmaDuAdjType));
- if( check_fwstate(&padapter->mlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _FALSE )
+ if( BTDM_CheckFWState(padapter, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _FALSE )
{
btdm_2AntPsTdma(padapter, _TRUE, pBtdm8723->psTdmaDuAdjType);
}
@@ -13362,6 +13515,22 @@ u8 btdm_BtWifiAntNum(PADAPTER padapter)
return Ant_x2;
}
+u8 btdm_GetBtState(PADAPTER padapter)
+{
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
+ PBT_COEXIST_8723A pBtCoex = &pHalData->bt_coexist.halCoex8723;
+
+ return pBtCoex->c2hBtInfo;
+}
+
+u8 btdm_IsBtInquiryPage(PADAPTER padapter)
+{
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
+ PBT_COEXIST_8723A pBtCoex = &pHalData->bt_coexist.halCoex8723;
+
+ return pBtCoex->bC2hBtInquiryPage;
+}
+
void btdm_BtHwCountersMonitor(PADAPTER padapter)
{
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
@@ -13580,7 +13749,7 @@ void BTDM_SetFwChnlInfo(PADAPTER padapter, RT_MEDIA_STATUS mstatus)
H2C_Parameter[0] = 0x1; // 0: disconnected, 1:connected
}
- if (check_fwstate(&padapter->mlmepriv, WIFI_ASOC_STATE) == _TRUE)
+ if (BTDM_CheckFWState(padapter, WIFI_ASOC_STATE) == _TRUE)
{
// channel
chnl = pmlmeext->cur_channel;
@@ -13619,7 +13788,10 @@ void BTDM_SetFwChnlInfo(PADAPTER padapter, RT_MEDIA_STATUS mstatus)
// RTPRINT(FBT, BT_TRACE, ("[BTCoex], FW write 0x19=0x%x\n",
// H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));
- FillH2CCmd(padapter, 0x19, 3, H2C_Parameter);
+ if (btdm_BtWifiAntNum(padapter) == Ant_x2)
+ {
+ FillH2CCmd(padapter, 0x19, 3, H2C_Parameter);
+ }
}
u8 BTDM_IsWifiConnectionExist(PADAPTER padapter)
@@ -13630,8 +13802,21 @@ u8 BTDM_IsWifiConnectionExist(PADAPTER padapter)
if (BTHCI_HsConnectionEstablished(padapter))
bRet = _TRUE;
- if (check_fwstate(&padapter->mlmepriv, WIFI_ASOC_STATE) == _TRUE)
+#ifdef CONFIG_CONCURRENT_MODE
+ if (padapter->pbuddy_adapter != NULL)
+ {
+ if ((BTDM_CheckFWState(padapter, WIFI_ASOC_STATE) == _TRUE) || (BTDM_CheckFWState(padapter->pbuddy_adapter, WIFI_ASOC_STATE) == _TRUE))
+ bRet = _TRUE;
+ }
+ else
+ {
+ if (BTDM_CheckFWState(padapter, WIFI_ASOC_STATE) == _TRUE)
+ bRet = _TRUE;
+ }
+#else
+ if (BTDM_CheckFWState(padapter, WIFI_ASOC_STATE) == _TRUE)
bRet = _TRUE;
+#endif
return bRet;
}
@@ -13649,7 +13834,7 @@ void BTDM_SetFw3a(
if (BTDM_1Ant8723A(padapter) == _TRUE)
{
- if ((check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE) == _FALSE) &&
+ if ((BTDM_CheckFWState(padapter, WIFI_STATION_STATE) == _FALSE) &&
(get_fwstate(&padapter->mlmepriv) != WIFI_NULL_STATE)) // for softap mode
{
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
@@ -13859,6 +14044,7 @@ void BTDM_FwC2hBtInfo8723A(PADAPTER padapter, u8 *tmpBuf, u8 length)
RTPRINT(FBT, BT_TRACE, ("[BTC2H], BT info[%d]=[", length));
pBtCoex->btRetryCnt = 0;
+ pBtCoex->AclTp=0;
for (i=0; i<length; i++)
{
switch (i)
@@ -13873,8 +14059,14 @@ void BTDM_FwC2hBtInfo8723A(PADAPTER padapter, u8 *tmpBuf, u8 length)
BTDM_FwC2hBtRssi8723A(padapter, &tmpBuf[i]);
break;
case 3:
- pBtCoex->btInfoExt=tmpBuf[i]&BIT(0);
+ pBtCoex->btInfoExt=tmpBuf[i]&BIT(0); //EDR_BR
break;
+ case 4:
+ pBtCoex->AclTp=tmpBuf[i];
+ break;
+ case 5:
+ pBtCoex->AclTp |=(tmpBuf[i]<<8);
+ break;
}
if (i == length-1)
@@ -14328,6 +14520,16 @@ void BTDM_BTCoexist8723A(PADAPTER padapter)
BTDM_QueryBtInformation(padapter);
}
+u8 BTDM_GetBtState8723A(PADAPTER padapter)
+{
+ return btdm_GetBtState(padapter);
+}
+
+u8 BTDM_IsBtInquiryPage8723A(PADAPTER padapter)
+{
+ return btdm_IsBtInquiryPage(padapter);
+}
+
// ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc8723.c =====
#endif
@@ -15239,7 +15441,7 @@ void BTDM_CheckBTIdleChange1Ant(PADAPTER padapter)
MgntIsLinkInProgress(pMgntInfo) ||
MgntScanInProgress(pMgntInfo))
#else
- if (check_fwstate(&padapter->mlmepriv, WIFI_UNDER_LINKING|WIFI_SITE_MONITOR) == _TRUE)
+ if (BTDM_CheckFWState(padapter, WIFI_UNDER_LINKING|WIFI_SITE_MONITOR) == _TRUE)
#endif
{
BTDM_SetAntenna(padapter, BTDM_ANT_WIFI);
@@ -18164,16 +18366,14 @@ void BTDM_CheckWiFiState(PADAPTER padapter)
s32 BTDM_GetRxSS(PADAPTER padapter)
{
// PMGNT_INFO pMgntInfo = &padapter->MgntInfo;
- struct mlme_priv *pmlmepriv;
PHAL_DATA_TYPE pHalData;
s32 UndecoratedSmoothedPWDB = 0;
- pmlmepriv = &padapter->mlmepriv;
pHalData = GET_HAL_DATA(padapter);
// if (pMgntInfo->bMediaConnect) // Default port
- if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
+ if (BTDM_CheckFWState(padapter, _FW_LINKED) == _TRUE)
{
UndecoratedSmoothedPWDB = GET_UNDECORATED_AVERAGE_RSSI(padapter);
}
@@ -18189,16 +18389,14 @@ s32 BTDM_GetRxSS(PADAPTER padapter)
s32 BTDM_GetRxBeaconSS(PADAPTER padapter)
{
// PMGNT_INFO pMgntInfo = &padapter->MgntInfo;
- struct mlme_priv *pmlmepriv;
PHAL_DATA_TYPE pHalData;
s32 pwdbBeacon = 0;
- pmlmepriv = &padapter->mlmepriv;
pHalData = GET_HAL_DATA(padapter);
// if (pMgntInfo->bMediaConnect) // Default port
- if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
+ if (BTDM_CheckFWState(padapter, _FW_LINKED) == _TRUE)
{
//pwdbBeacon = pHalData->dmpriv.UndecoratedSmoothedBeacon;
pwdbBeacon= pHalData->dmpriv.EntryMinUndecoratedSmoothedPWDB;
@@ -18666,7 +18864,7 @@ u8 BTDM_DisableEDCATurbo(PADAPTER padapter)
if ((pHalData->bt_coexist.last_aggr_num != aggr_num) || !pHalData->bt_coexist.bEDCAInitialized)
{
RTPRINT(FBT, BT_TRACE, ("BT write AGGR NUM = 0x%x\n", aggr_num));
- rtw_write16(padapter, REG_MAX_AGGR_NUM, aggr_num);
+ rtw_write8(padapter, REG_MAX_AGGR_NUM, aggr_num);
pHalData->bt_coexist.last_aggr_num = aggr_num;
}
}
@@ -18893,7 +19091,7 @@ void BTDM_TurnOffBtCoexistBeforeEnterLPS(PADAPTER padapter)
PBT_MGNT pBtMgnt = &pBTInfo->BtMgnt;
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
// PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo);
- struct pwrctrl_priv *ppwrctrl = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *ppwrctrl = adapter_to_pwrctl(padapter);
// Add temporarily.
@@ -18928,7 +19126,7 @@ void BTDM_TurnOffBtCoexistBeforeEnterIPS(PADAPTER padapter)
PBT_MGNT pBtMgnt = &pBTInfo->BtMgnt;
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
// PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo);
- struct pwrctrl_priv *ppwrctrl = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *ppwrctrl = adapter_to_pwrctl(padapter);
if (!pHalData->bt_coexist.BluetoothCoexist)
return;
@@ -19008,6 +19206,9 @@ void dm_CheckBTState(_adapter *pAdapter)
rtw_write8(pAdapter, 0xf6, value);
rtw_write8(pAdapter, 0x3A, 0x31);
}
+ else{
+ return;
+ }
regvalue32 = rtw_read32(pAdapter, 0xc0);
//DBG_871X("Get 0xc0 = 0x%x\n",regvalue32);
@@ -19016,6 +19217,9 @@ void dm_CheckBTState(_adapter *pAdapter)
value |= 0x4;
rtw_write8(pAdapter, 0xcc, value);
}
+ else{
+ return;
+ }
regValue8 = rtw_read8(pAdapter, 0x6b); //0x6b[28]
//DBG_871X("Get 0x6b = 0x%x\n",regValue8);
@@ -19042,6 +19246,7 @@ void check_bt_status_work(void *data)
{
struct delayed_work *dwork;
PADAPTER padapter;
+ struct pwrctrl_priv *pwrpriv ;
dwork = container_of(data, struct delayed_work, work);
padapter = container_of(dwork, struct _ADAPTER, checkbt_work);
@@ -19051,7 +19256,9 @@ void check_bt_status_work(void *data)
return;
};
- dm_CheckBTState(padapter);
+ pwrpriv = adapter_to_pwrctl(padapter);
+ if (pwrpriv->bInSuspend == _FALSE)
+ dm_CheckBTState(padapter);
}
#endif
void BTDM_Coexist(PADAPTER padapter)
@@ -19261,8 +19468,33 @@ u8 BTDM_IsWifiBusy(PADAPTER padapter)
PBT30Info pBTInfo = GET_BT_INFO(padapter);
PBT_TRAFFIC pBtTraffic = &pBTInfo->BtTraffic;
+#ifdef CONFIG_CONCURRENT_MODE
+ struct mlme_priv *pbuddy_mlmepriv;
+
+ if (padapter->pbuddy_adapter != NULL)
+ {
+ pbuddy_mlmepriv = &(padapter->pbuddy_adapter->mlmepriv);
+
+#if 1
+ if ((btdm_BtWifiAntNum(padapter) == Ant_x1) && ((BT_IsBtDisabled(padapter) == _TRUE) || ((BT_IsBtDisabled(padapter) == _FALSE && (BT_GetBtState(padapter) <= BT_INFO_STATE_CONNECT_IDLE)))))
+ {
+ if (((padapter->iface_type == IFACE_PORT0) && (check_fwstate(pbuddy_mlmepriv, _FW_LINKED) == _TRUE)) ||
+ ((padapter->iface_type == IFACE_PORT1) && (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)))
+ return _TRUE;
+ }
+#endif
+
+ if (pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > WIFI_BUSY_TRAFFIC_TH ||pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > WIFI_BUSY_TRAFFIC_TH ||
+ pbuddy_mlmepriv->LinkDetectInfo.NumRxOkInPeriod > WIFI_BUSY_TRAFFIC_TH || pbuddy_mlmepriv->LinkDetectInfo.NumTxOkInPeriod > WIFI_BUSY_TRAFFIC_TH ||
+ pBtTraffic->Bt30TrafficStatistics.bTxBusyTraffic ||
+ pBtTraffic->Bt30TrafficStatistics.bRxBusyTraffic)
+ return _TRUE;
+ else
+ return _FALSE;
+ }
+#endif
- if (pmlmepriv->LinkDetectInfo.bBusyTraffic ||
+ if (pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > WIFI_BUSY_TRAFFIC_TH ||pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > WIFI_BUSY_TRAFFIC_TH ||
pBtTraffic->Bt30TrafficStatistics.bTxBusyTraffic ||
pBtTraffic->Bt30TrafficStatistics.bRxBusyTraffic)
return _TRUE;
@@ -19707,6 +19939,25 @@ u8 BTDM_IsBtDisabled(PADAPTER padapter)
return _FALSE;
}
+sint BTDM_CheckFWState(PADAPTER padapter, sint state)
+{
+ if (check_fwstate(&padapter->mlmepriv, state) == _FALSE)
+ {
+#ifdef CONFIG_CONCURRENT_MODE
+ if (padapter->pbuddy_adapter != NULL)
+ {
+ if (check_fwstate(&padapter->pbuddy_adapter->mlmepriv, state) == _TRUE)
+ {
+ return _TRUE;
+ }
+ }
+#endif
+ return _FALSE;
+ }
+
+ return _TRUE;
+}
+
//============================================
// Started with "WA_" means this is a work around function.
// Because fw need to count bt HW counters
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_cmd.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_cmd.c
index ce088bc86590..47e8c631f46f 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_cmd.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_cmd.c
@@ -1,1159 +1,1185 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#define _RTL8723A_CMD_C_
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <recv_osdep.h>
-#include <cmd_osdep.h>
-#include <mlme_osdep.h>
-#include <rtw_byteorder.h>
-#include <circ_buf.h>
-#include <rtw_ioctl_set.h>
-
-#include <rtl8723a_hal.h>
-
-
-#define RTL92C_MAX_H2C_BOX_NUMS 4
-#define RTL92C_MAX_CMD_LEN 5
-#define MESSAGE_BOX_SIZE 4
-#define EX_MESSAGE_BOX_SIZE 2
-
-
-static u8 _is_fw_read_cmd_down(_adapter* padapter, u8 msgbox_num)
-{
- u8 read_down = _FALSE;
- int retry_cnts = 100;
-
- u8 valid;
-
- //DBG_8192C(" _is_fw_read_cmd_down ,reg_1cc(%x),msg_box(%d)...\n",rtw_read8(padapter,REG_HMETFR),msgbox_num);
-
- do{
- valid = rtw_read8(padapter,REG_HMETFR) & BIT(msgbox_num);
- if(0 == valid ){
- read_down = _TRUE;
- }
- }while( (!read_down) && (retry_cnts--));
-
- return read_down;
-
-}
-
-
-/*****************************************
-* H2C Msg format :
-*| 31 - 8 |7 | 6 - 0 |
-*| h2c_msg |Ext_bit |CMD_ID |
-*
-******************************************/
-s32 FillH2CCmd(PADAPTER padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer)
-{
- u8 bcmd_down = _FALSE;
- s32 retry_cnts = 100;
- u8 h2c_box_num;
- u32 msgbox_addr;
- u32 msgbox_ex_addr;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- u32 h2c_cmd = 0;
- u16 h2c_cmd_ex = 0;
- s32 ret = _FAIL;
-
-_func_enter_;
-
- padapter = GET_PRIMARY_ADAPTER(padapter);
- pHalData = GET_HAL_DATA(padapter);
-
- _enter_critical_mutex(&(adapter_to_dvobj(padapter)->h2c_fwcmd_mutex), NULL);
-
- if (!pCmdBuffer) {
- goto exit;
- }
- if (CmdLen > RTL92C_MAX_CMD_LEN) {
- goto exit;
- }
- if (padapter->bSurpriseRemoved == _TRUE)
- goto exit;
-
- //pay attention to if race condition happened in H2C cmd setting.
- do{
- h2c_box_num = pHalData->LastHMEBoxNum;
-
- if(!_is_fw_read_cmd_down(padapter, h2c_box_num)){
- DBG_8192C(" fw read cmd failed...\n");
- goto exit;
- }
-
- if(CmdLen<=3)
- {
- _rtw_memcpy((u8*)(&h2c_cmd)+1, pCmdBuffer, CmdLen );
- }
- else{
- _rtw_memcpy((u8*)(&h2c_cmd_ex), pCmdBuffer, EX_MESSAGE_BOX_SIZE);
- _rtw_memcpy((u8*)(&h2c_cmd)+1, pCmdBuffer+2,( CmdLen-EX_MESSAGE_BOX_SIZE));
- *(u8*)(&h2c_cmd) |= BIT(7);
- }
-
- *(u8*)(&h2c_cmd) |= ElementID;
-
- if(h2c_cmd & BIT(7)){
- msgbox_ex_addr = REG_HMEBOX_EXT_0 + (h2c_box_num *EX_MESSAGE_BOX_SIZE);
- h2c_cmd_ex = le16_to_cpu( h2c_cmd_ex );
- rtw_write16(padapter, msgbox_ex_addr, h2c_cmd_ex);
- }
- msgbox_addr =REG_HMEBOX_0 + (h2c_box_num *MESSAGE_BOX_SIZE);
- h2c_cmd = le32_to_cpu( h2c_cmd );
- rtw_write32(padapter,msgbox_addr, h2c_cmd);
-
- bcmd_down = _TRUE;
-
- // DBG_8192C("MSG_BOX:%d,CmdLen(%d), reg:0x%x =>h2c_cmd:0x%x, reg:0x%x =>h2c_cmd_ex:0x%x ..\n"
- // ,pHalData->LastHMEBoxNum ,CmdLen,msgbox_addr,h2c_cmd,msgbox_ex_addr,h2c_cmd_ex);
-
- pHalData->LastHMEBoxNum = (h2c_box_num+1) % RTL92C_MAX_H2C_BOX_NUMS;
-
- }while((!bcmd_down) && (retry_cnts--));
-
- ret = _SUCCESS;
-
-exit:
-
- _exit_critical_mutex(&(adapter_to_dvobj(padapter)->h2c_fwcmd_mutex), NULL);
-
-_func_exit_;
-
- return ret;
-}
-
-u8 rtl8192c_h2c_msg_hdl(_adapter *padapter, unsigned char *pbuf)
-{
- u8 ElementID, CmdLen;
- u8 *pCmdBuffer;
- struct cmd_msg_parm *pcmdmsg;
-
- if(!pbuf)
- return H2C_PARAMETERS_ERROR;
-
- pcmdmsg = (struct cmd_msg_parm*)pbuf;
- ElementID = pcmdmsg->eid;
- CmdLen = pcmdmsg->sz;
- pCmdBuffer = pcmdmsg->buf;
-
- FillH2CCmd(padapter, ElementID, CmdLen, pCmdBuffer);
-
- return H2C_SUCCESS;
-}
-
-#if defined(CONFIG_AUTOSUSPEND) && defined(SUPPORT_HW_RFOFF_DETECTED)
-u8 rtl8192c_set_FwSelectSuspend_cmd(_adapter *padapter ,u8 bfwpoll, u16 period)
-{
- u8 res=_SUCCESS;
- struct H2C_SS_RFOFF_PARAM param;
- DBG_8192C("==>%s bfwpoll(%x)\n",__FUNCTION__,bfwpoll);
- param.gpio_period = period;//Polling GPIO_11 period time
- param.ROFOn = (_TRUE == bfwpoll)?1:0;
- FillH2CCmd(padapter, SELECTIVE_SUSPEND_ROF_CMD, sizeof(param), (u8*)(&param));
- return res;
-}
-#endif //CONFIG_AUTOSUSPEND && SUPPORT_HW_RFOFF_DETECTED
-
-u8 rtl8192c_set_rssi_cmd(_adapter*padapter, u8 *param)
-{
- u8 res=_SUCCESS;
-
-_func_enter_;
-
- *((u32*) param ) = cpu_to_le32( *((u32*) param ) );
-
- FillH2CCmd(padapter, RSSI_SETTING_EID, 3, param);
-
-_func_exit_;
-
- return res;
-}
-
-u8 rtl8192c_set_raid_cmd(_adapter*padapter, u32 mask, u8 arg)
-{
- u8 buf[5];
- u8 res=_SUCCESS;
-
-_func_enter_;
-
- _rtw_memset(buf, 0, 5);
- mask = cpu_to_le32( mask );
- _rtw_memcpy(buf, &mask, 4);
- buf[4] = arg;
-
- FillH2CCmd(padapter, MACID_CONFIG_EID, 5, buf);
-
-_func_exit_;
-
- return res;
-
-}
-
-//bitmap[0:27] = tx_rate_bitmap
-//bitmap[28:31]= Rate Adaptive id
-//arg[0:4] = macid
-//arg[5] = Short GI
-void rtl8192c_Add_RateATid(PADAPTER pAdapter, u32 bitmap, u8 arg, u8 rssi_level)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
-
- u8 macid = arg&0x1f;
-
-#ifdef CONFIG_ODM_REFRESH_RAMASK
- u8 raid = (bitmap>>28) & 0x0f;
-
-#ifdef CONFIG_CONCURRENT_MODE
- if(rtw_buddy_adapter_up(pAdapter) && pAdapter->adapter_type > PRIMARY_ADAPTER)
- pHalData = GET_HAL_DATA(pAdapter->pbuddy_adapter);
-#endif //CONFIG_CONCURRENT_MODE
-
- bitmap &=0x0fffffff;
- if(rssi_level != DM_RATR_STA_INIT)
- bitmap = ODM_Get_Rate_Bitmap(&pHalData->odmpriv, macid, bitmap, rssi_level);
-
- bitmap |= ((raid<<28)&0xf0000000);
-#endif //CONFIG_ODM_REFRESH_RAMASK
-
-
- if(pHalData->fw_ractrl == _TRUE)
- {
- rtl8192c_set_raid_cmd(pAdapter, bitmap, arg);
- }
- else
- {
- u8 init_rate, shortGIrate=_FALSE;
-
- init_rate = get_highest_rate_idx(bitmap&0x0fffffff)&0x3f;
-
-
- shortGIrate = (arg&BIT(5)) ? _TRUE:_FALSE;
-
- if (shortGIrate==_TRUE)
- init_rate |= BIT(6);
-
- rtw_write8(pAdapter, (REG_INIDATA_RATE_SEL+macid), (u8)init_rate);
- }
-
-}
-
-void rtl8723a_set_FwPwrMode_cmd(PADAPTER padapter, u8 Mode)
-{
- SETPWRMODE_PARM H2CSetPwrMode;
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-
-_func_enter_;
-
- DBG_871X("%s: Mode=%d SmartPS=%d UAPSD=%d BcnMode=0x%02x\n", __FUNCTION__,
- Mode, pwrpriv->smart_ps, padapter->registrypriv.uapsd_enable, pwrpriv->bcn_ant_mode);
-
- H2CSetPwrMode.Mode = Mode;
- H2CSetPwrMode.SmartPS = pwrpriv->smart_ps;
- H2CSetPwrMode.AwakeInterval = 1;
- H2CSetPwrMode.bAllQueueUAPSD = padapter->registrypriv.uapsd_enable;
- H2CSetPwrMode.BcnAntMode = pwrpriv->bcn_ant_mode;
-
- FillH2CCmd(padapter, SET_PWRMODE_EID, sizeof(H2CSetPwrMode), (u8 *)&H2CSetPwrMode);
-
-_func_exit_;
-}
-
-void ConstructBeacon(_adapter *padapter, u8 *pframe, u32 *pLength)
-{
- struct rtw_ieee80211_hdr *pwlanhdr;
- u16 *fctrl;
- u32 rate_len, pktlen;
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
- u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
-
- //DBG_871X("%s\n", __FUNCTION__);
-
- pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
-
- fctrl = &(pwlanhdr->frame_ctl);
- *(fctrl) = 0;
-
- _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
-
- SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
- //pmlmeext->mgnt_seq++;
- SetFrameSubType(pframe, WIFI_BEACON);
-
- pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
- pktlen = sizeof (struct rtw_ieee80211_hdr_3addr);
-
- //timestamp will be inserted by hardware
- pframe += 8;
- pktlen += 8;
-
- // beacon interval: 2 bytes
- _rtw_memcpy(pframe, (unsigned char *)(rtw_get_beacon_interval_from_ie(cur_network->IEs)), 2);
-
- pframe += 2;
- pktlen += 2;
-
- // capability info: 2 bytes
- _rtw_memcpy(pframe, (unsigned char *)(rtw_get_capability_from_ie(cur_network->IEs)), 2);
-
- pframe += 2;
- pktlen += 2;
-
- if( (pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
- {
- //DBG_871X("ie len=%d\n", cur_network->IELength);
- pktlen += cur_network->IELength - sizeof(NDIS_802_11_FIXED_IEs);
- _rtw_memcpy(pframe, cur_network->IEs+sizeof(NDIS_802_11_FIXED_IEs), pktlen);
-
- goto _ConstructBeacon;
- }
-
- //below for ad-hoc mode
-
- // SSID
- pframe = rtw_set_ie(pframe, _SSID_IE_, cur_network->Ssid.SsidLength, cur_network->Ssid.Ssid, &pktlen);
-
- // supported rates...
- rate_len = rtw_get_rateset_len(cur_network->SupportedRates);
- pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, ((rate_len > 8)? 8: rate_len), cur_network->SupportedRates, &pktlen);
-
- // DS parameter set
- pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&(cur_network->Configuration.DSConfig), &pktlen);
-
- if( (pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE)
- {
- u32 ATIMWindow;
- // IBSS Parameter Set...
- //ATIMWindow = cur->Configuration.ATIMWindow;
- ATIMWindow = 0;
- pframe = rtw_set_ie(pframe, _IBSS_PARA_IE_, 2, (unsigned char *)(&ATIMWindow), &pktlen);
- }
-
-
- //todo: ERP IE
-
-
- // EXTERNDED SUPPORTED RATE
- if (rate_len > 8)
- {
- pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_, (rate_len - 8), (cur_network->SupportedRates + 8), &pktlen);
- }
-
-
- //todo:HT for adhoc
-
-_ConstructBeacon:
-
- if ((pktlen + TXDESC_SIZE) > 512)
- {
- DBG_871X("beacon frame too large\n");
- return;
- }
-
- *pLength = pktlen;
-
- //DBG_871X("%s bcn_sz=%d\n", __FUNCTION__, pktlen);
-
-}
-
-void ConstructPSPoll(_adapter *padapter, u8 *pframe, u32 *pLength)
-{
- struct rtw_ieee80211_hdr *pwlanhdr;
- u16 *fctrl;
- u32 pktlen;
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
- //DBG_871X("%s\n", __FUNCTION__);
-
- pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
-
- // Frame control.
- fctrl = &(pwlanhdr->frame_ctl);
- *(fctrl) = 0;
- SetPwrMgt(fctrl);
- SetFrameSubType(pframe, WIFI_PSPOLL);
-
- // AID.
- SetDuration(pframe, (pmlmeinfo->aid | 0xc000));
-
- // BSSID.
- _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
-
- // TA.
- _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
-
- *pLength = 16;
-}
-
-void ConstructNullFunctionData(
- PADAPTER padapter,
- u8 *pframe,
- u32 *pLength,
- u8 *StaAddr,
- u8 bQoS,
- u8 AC,
- u8 bEosp,
- u8 bForcePowerSave)
-{
- struct rtw_ieee80211_hdr *pwlanhdr;
- u16 *fctrl;
- u32 pktlen;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct wlan_network *cur_network = &pmlmepriv->cur_network;
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
-
- //DBG_871X("%s:%d\n", __FUNCTION__, bForcePowerSave);
-
- pwlanhdr = (struct rtw_ieee80211_hdr*)pframe;
-
- fctrl = &pwlanhdr->frame_ctl;
- *(fctrl) = 0;
- if (bForcePowerSave)
- {
- SetPwrMgt(fctrl);
- }
-
- switch(cur_network->network.InfrastructureMode)
- {
- case Ndis802_11Infrastructure:
- SetToDs(fctrl);
- _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr3, StaAddr, ETH_ALEN);
- break;
- case Ndis802_11APMode:
- SetFrDs(fctrl);
- _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr2, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN);
- break;
- case Ndis802_11IBSS:
- default:
- _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
- break;
- }
-
- SetSeqNum(pwlanhdr, 0);
-
- if (bQoS == _TRUE) {
- struct rtw_ieee80211_hdr_3addr_qos *pwlanqoshdr;
-
- SetFrameSubType(pframe, WIFI_QOS_DATA_NULL);
-
- pwlanqoshdr = (struct rtw_ieee80211_hdr_3addr_qos*)pframe;
- SetPriority(&pwlanqoshdr->qc, AC);
- SetEOSP(&pwlanqoshdr->qc, bEosp);
-
- pktlen = sizeof(struct rtw_ieee80211_hdr_3addr_qos);
- } else {
- SetFrameSubType(pframe, WIFI_DATA_NULL);
-
- pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
- }
-
- *pLength = pktlen;
-}
-
-void ConstructProbeRsp(_adapter *padapter, u8 *pframe, u32 *pLength, u8 *StaAddr, BOOLEAN bHideSSID)
-{
- struct rtw_ieee80211_hdr *pwlanhdr;
- u16 *fctrl;
- u8 *mac, *bssid;
- u32 pktlen;
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
-
-
- //DBG_871X("%s\n", __FUNCTION__);
-
- pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
-
- mac = myid(&(padapter->eeprompriv));
- bssid = cur_network->MacAddress;
-
- fctrl = &(pwlanhdr->frame_ctl);
- *(fctrl) = 0;
- _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr3, bssid, ETH_ALEN);
-
- SetSeqNum(pwlanhdr, 0);
- SetFrameSubType(fctrl, WIFI_PROBERSP);
-
- pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
- pframe += pktlen;
-
- if(cur_network->IELength>MAX_IE_SZ)
- return;
-
- _rtw_memcpy(pframe, cur_network->IEs, cur_network->IELength);
- pframe += cur_network->IELength;
- pktlen += cur_network->IELength;
-
- *pLength = pktlen;
-}
-
-// To check if reserved page content is destroyed by beacon beacuse beacon is too large.
-// 2010.06.23. Added by tynli.
-VOID
-CheckFwRsvdPageContent(
- IN PADAPTER Adapter
-)
-{
- HAL_DATA_TYPE* pHalData = GET_HAL_DATA(Adapter);
- u32 MaxBcnPageNum;
-
- if(pHalData->FwRsvdPageStartOffset != 0)
- {
- /*MaxBcnPageNum = PageNum_128(pMgntInfo->MaxBeaconSize);
- RT_ASSERT((MaxBcnPageNum <= pHalData->FwRsvdPageStartOffset),
- ("CheckFwRsvdPageContent(): The reserved page content has been"\
- "destroyed by beacon!!! MaxBcnPageNum(%d) FwRsvdPageStartOffset(%d)\n!",
- MaxBcnPageNum, pHalData->FwRsvdPageStartOffset));*/
- }
-}
-
-//
-// Description: Fill the reserved packets that FW will use to RSVD page.
-// Now we just send 4 types packet to rsvd page.
-// (1)Beacon, (2)Ps-poll, (3)Null data, (4)ProbeRsp.
-// Input:
-// bDLFinished - FALSE: At the first time we will send all the packets as a large packet to Hw,
-// so we need to set the packet length to total lengh.
-// TRUE: At the second time, we should send the first packet (default:beacon)
-// to Hw again and set the lengh in descriptor to the real beacon lengh.
-// 2009.10.15 by tynli.
-static void SetFwRsvdPagePkt(PADAPTER padapter, BOOLEAN bDLFinished)
-{
- PHAL_DATA_TYPE pHalData;
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- struct xmit_priv *pxmitpriv;
- struct mlme_ext_priv *pmlmeext;
- struct mlme_ext_info *pmlmeinfo;
- u32 BeaconLength, ProbeRspLength, PSPollLength;
- u32 NullDataLength, QosNullLength, BTQosNullLength;
- u8 *ReservedPagePacket;
- u8 PageNum, PageNeed, TxDescLen;
- u16 BufIndex;
- u32 TotalPacketLen;
- RSVDPAGE_LOC RsvdPageLoc;
-
-
- DBG_871X("%s\n", __FUNCTION__);
-
- ReservedPagePacket = (u8*)rtw_zmalloc(1000);
- if (ReservedPagePacket == NULL) {
- DBG_871X("%s: alloc ReservedPagePacket fail!\n", __FUNCTION__);
- return;
- }
-
- pHalData = GET_HAL_DATA(padapter);
- pxmitpriv = &padapter->xmitpriv;
- pmlmeext = &padapter->mlmeextpriv;
- pmlmeinfo = &pmlmeext->mlmext_info;
-
- TxDescLen = TXDESC_SIZE;
- PageNum = 0;
-
- //3 (1) beacon
- BufIndex = TXDESC_OFFSET;
- ConstructBeacon(padapter, &ReservedPagePacket[BufIndex], &BeaconLength);
-
- // When we count the first page size, we need to reserve description size for the RSVD
- // packet, it will be filled in front of the packet in TXPKTBUF.
- PageNeed = (u8)PageNum_128(TxDescLen + BeaconLength);
- // To reserved 2 pages for beacon buffer. 2010.06.24.
- if (PageNeed == 1)
- PageNeed += 1;
- PageNum += PageNeed;
- pHalData->FwRsvdPageStartOffset = PageNum;
-
- BufIndex += PageNeed*128;
-
- //3 (2) ps-poll
- RsvdPageLoc.LocPsPoll = PageNum;
- ConstructPSPoll(padapter, &ReservedPagePacket[BufIndex], &PSPollLength);
- rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], PSPollLength, _TRUE, _FALSE);
-
- PageNeed = (u8)PageNum_128(TxDescLen + PSPollLength);
- PageNum += PageNeed;
-
- BufIndex += PageNeed*128;
-
- //3 (3) null data
- RsvdPageLoc.LocNullData = PageNum;
- ConstructNullFunctionData(
- padapter,
- &ReservedPagePacket[BufIndex],
- &NullDataLength,
- get_my_bssid(&pmlmeinfo->network),
- _FALSE, 0, 0, _FALSE);
- rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], NullDataLength, _FALSE, _FALSE);
-
- PageNeed = (u8)PageNum_128(TxDescLen + NullDataLength);
- PageNum += PageNeed;
-
- BufIndex += PageNeed*128;
-
- //3 (4) probe response
- RsvdPageLoc.LocProbeRsp = PageNum;
- ConstructProbeRsp(
- padapter,
- &ReservedPagePacket[BufIndex],
- &ProbeRspLength,
- get_my_bssid(&pmlmeinfo->network),
- _FALSE);
- rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], ProbeRspLength, _FALSE, _FALSE);
-
- PageNeed = (u8)PageNum_128(TxDescLen + ProbeRspLength);
- PageNum += PageNeed;
-
- BufIndex += PageNeed*128;
-
- //3 (5) Qos null data
- RsvdPageLoc.LocQosNull = PageNum;
- ConstructNullFunctionData(
- padapter,
- &ReservedPagePacket[BufIndex],
- &QosNullLength,
- get_my_bssid(&pmlmeinfo->network),
- _TRUE, 0, 0, _FALSE);
- rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], QosNullLength, _FALSE, _FALSE);
-
- PageNeed = (u8)PageNum_128(TxDescLen + QosNullLength);
- PageNum += PageNeed;
-
- BufIndex += PageNeed*128;
-
- //3 (6) BT Qos null data
- RsvdPageLoc.LocBTQosNull = PageNum;
- ConstructNullFunctionData(
- padapter,
- &ReservedPagePacket[BufIndex],
- &BTQosNullLength,
- get_my_bssid(&pmlmeinfo->network),
- _TRUE, 0, 0, _FALSE);
- rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], BTQosNullLength, _FALSE, _TRUE);
-
- TotalPacketLen = BufIndex + BTQosNullLength;
-
- pmgntframe = alloc_mgtxmitframe(pxmitpriv);
- if (pmgntframe == NULL)
- goto exit;
-
- // update attribute
- pattrib = &pmgntframe->attrib;
- update_mgntframe_attrib(padapter, pattrib);
- pattrib->qsel = 0x10;
- pattrib->pktlen = pattrib->last_txcmdsz = TotalPacketLen - TXDESC_OFFSET;
- _rtw_memcpy(pmgntframe->buf_addr, ReservedPagePacket, TotalPacketLen);
-
- rtw_hal_mgnt_xmit(padapter, pmgntframe);
-
- DBG_871X("%s: Set RSVD page location to Fw\n", __FUNCTION__);
- FillH2CCmd(padapter, RSVD_PAGE_EID, sizeof(RsvdPageLoc), (u8*)&RsvdPageLoc);
-
-exit:
- rtw_mfree(ReservedPagePacket, 1000);
-}
-
-void rtl8723a_set_FwJoinBssReport_cmd(PADAPTER padapter, u8 mstatus)
-{
- JOINBSSRPT_PARM JoinBssRptParm;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
-_func_enter_;
-
- DBG_871X("%s mstatus(%x)\n", __FUNCTION__,mstatus);
-
- if(mstatus == 1)
- {
- BOOLEAN bRecover = _FALSE;
- u8 v8;
-
- // We should set AID, correct TSF, HW seq enable before set JoinBssReport to Fw in 88/92C.
- // Suggested by filen. Added by tynli.
- rtw_write16(padapter, REG_BCN_PSR_RPT, (0xC000|pmlmeinfo->aid));
- // Do not set TSF again here or vWiFi beacon DMA INT will not work.
- //correct_TSF(padapter, pmlmeext);
- // Hw sequende enable by dedault. 2010.06.23. by tynli.
- //rtw_write16(padapter, REG_NQOS_SEQ, ((pmlmeext->mgnt_seq+100)&0xFFF));
- //rtw_write8(padapter, REG_HWSEQ_CTRL, 0xFF);
-
- // set REG_CR bit 8
- v8 = rtw_read8(padapter, REG_CR+1);
- v8 |= BIT(0); // ENSWBCN
- rtw_write8(padapter, REG_CR+1, v8);
-
- // Disable Hw protection for a time which revserd for Hw sending beacon.
- // Fix download reserved page packet fail that access collision with the protection time.
- // 2010.05.11. Added by tynli.
-// SetBcnCtrlReg(padapter, 0, BIT(3));
-// SetBcnCtrlReg(padapter, BIT(4), 0);
- SetBcnCtrlReg(padapter, BIT(4), BIT(3));
-
- // Set FWHW_TXQ_CTRL 0x422[6]=0 to tell Hw the packet is not a real beacon frame.
- if (pHalData->RegFwHwTxQCtrl & BIT(6))
- bRecover = _TRUE;
-
- // To tell Hw the packet is not a real beacon frame.
- //U1bTmp = rtw_read8(padapter, REG_FWHW_TXQ_CTRL+2);
- rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, pHalData->RegFwHwTxQCtrl & ~BIT(6));
- pHalData->RegFwHwTxQCtrl &= ~BIT(6);
- SetFwRsvdPagePkt(padapter, 0);
-
- // 2010.05.11. Added by tynli.
-// SetBcnCtrlReg(padapter, BIT3, 0);
-// SetBcnCtrlReg(padapter, 0, BIT4);
- SetBcnCtrlReg(padapter, BIT(3), BIT(4));
-
- // To make sure that if there exists an adapter which would like to send beacon.
- // If exists, the origianl value of 0x422[6] will be 1, we should check this to
- // prevent from setting 0x422[6] to 0 after download reserved page, or it will cause
- // the beacon cannot be sent by HW.
- // 2010.06.23. Added by tynli.
- if(bRecover)
- {
- rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, pHalData->RegFwHwTxQCtrl | BIT(6));
- pHalData->RegFwHwTxQCtrl |= BIT(6);
- }
-
- // Clear CR[8] or beacon packet will not be send to TxBuf anymore.
- v8 = rtw_read8(padapter, REG_CR+1);
- v8 &= ~BIT(0); // ~ENSWBCN
- rtw_write8(padapter, REG_CR+1, v8);
- }
-
- JoinBssRptParm.OpMode = mstatus;
-
- FillH2CCmd(padapter, JOINBSS_RPT_EID, sizeof(JoinBssRptParm), (u8 *)&JoinBssRptParm);
-
-_func_exit_;
-}
-
-#ifdef CONFIG_BT_COEXIST
-static void SetFwRsvdPagePkt_BTCoex(PADAPTER padapter)
-{
- PHAL_DATA_TYPE pHalData;
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- struct xmit_priv *pxmitpriv;
- struct mlme_ext_priv *pmlmeext;
- struct mlme_ext_info *pmlmeinfo;
- u8 fakemac[6]={0x00,0xe0,0x4c,0x00,0x00,0x00};
- u32 BeaconLength, ProbeRspLength, PSPollLength;
- u32 NullDataLength, QosNullLength, BTQosNullLength;
- u8 *ReservedPagePacket;
- u8 PageNum, PageNeed, TxDescLen;
- u16 BufIndex;
- u32 TotalPacketLen;
- RSVDPAGE_LOC RsvdPageLoc;
-
-
- DBG_871X("+%s\n", __FUNCTION__);
-
- ReservedPagePacket = (u8*)rtw_zmalloc(1024);
- if (ReservedPagePacket == NULL) {
- DBG_871X("%s: alloc ReservedPagePacket fail!\n", __FUNCTION__);
- return;
- }
-
- pHalData = GET_HAL_DATA(padapter);
- pxmitpriv = &padapter->xmitpriv;
- pmlmeext = &padapter->mlmeextpriv;
- pmlmeinfo = &pmlmeext->mlmext_info;
-
- TxDescLen = TXDESC_SIZE;
- PageNum = 0;
-
- //3 (1) beacon
- BufIndex = TXDESC_OFFSET;
-#if 0
- ConstructBeacon(padapter, &ReservedPagePacket[BufIndex], &BeaconLength);
-
- // When we count the first page size, we need to reserve description size for the RSVD
- // packet, it will be filled in front of the packet in TXPKTBUF.
- PageNeed = (u8)PageNum_128(TxDescLen + BeaconLength);
- // To reserved 2 pages for beacon buffer. 2010.06.24.
- if (PageNeed == 1)
- PageNeed += 1;
-#else
- // skip Beacon Packet
- PageNeed = 3;
-#endif
-
- PageNum += PageNeed;
- pHalData->FwRsvdPageStartOffset = PageNum;
-
- BufIndex += PageNeed*128;
-
- //3 (2) ps-poll
-#if 0 // skip
- RsvdPageLoc.LocPsPoll = PageNum;
- ConstructPSPoll(padapter, &ReservedPagePacket[BufIndex], &PSPollLength);
- rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], PSPollLength, _TRUE, _FALSE);
-
- PageNeed = (u8)PageNum_128(TxDescLen + PSPollLength);
- PageNum += PageNeed;
-
- BufIndex += PageNeed*128;
-#endif
-
- //3 (3) null data
- RsvdPageLoc.LocNullData = PageNum;
- ConstructNullFunctionData(
- padapter,
- &ReservedPagePacket[BufIndex],
- &NullDataLength,
- fakemac,
- _FALSE, 0, 0, _FALSE);
- rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], NullDataLength, _FALSE, _FALSE);
-
- PageNeed = (u8)PageNum_128(TxDescLen + NullDataLength);
- PageNum += PageNeed;
-
- BufIndex += PageNeed*128;
-
- //3 (4) probe response
-#if 0 // skip
- RsvdPageLoc.LocProbeRsp = PageNum;
- ConstructProbeRsp(
- padapter,
- &ReservedPagePacket[BufIndex],
- &ProbeRspLength,
- get_my_bssid(&pmlmeinfo->network),
- _FALSE);
- rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], ProbeRspLength, _FALSE, _FALSE);
-
- PageNeed = (u8)PageNum_128(TxDescLen + ProbeRspLength);
- PageNum += PageNeed;
-
- BufIndex += PageNeed*128;
-#endif
-
- //3 (5) Qos null data
-#if 0 // skip
- RsvdPageLoc.LocQosNull = PageNum;
- ConstructNullFunctionData(
- padapter,
- &ReservedPagePacket[BufIndex],
- &QosNullLength,
- get_my_bssid(&pmlmeinfo->network),
- _TRUE, 0, 0, _FALSE);
- rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], QosNullLength, _FALSE, _FALSE);
-
- PageNeed = (u8)PageNum_128(TxDescLen + QosNullLength);
- PageNum += PageNeed;
-
- BufIndex += PageNeed*128;
-#endif
-
- //3 (6) BT Qos null data
- RsvdPageLoc.LocBTQosNull = PageNum;
- ConstructNullFunctionData(
- padapter,
- &ReservedPagePacket[BufIndex],
- &BTQosNullLength,
- fakemac,
- _TRUE, 0, 0, _FALSE);
- rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], BTQosNullLength, _FALSE, _TRUE);
-
- TotalPacketLen = BufIndex + BTQosNullLength;
-
- pmgntframe = alloc_mgtxmitframe(pxmitpriv);
- if (pmgntframe == NULL)
- goto exit;
-
- // update attribute
- pattrib = &pmgntframe->attrib;
- update_mgntframe_attrib(padapter, pattrib);
- pattrib->qsel = 0x10;
- pattrib->pktlen = pattrib->last_txcmdsz = TotalPacketLen - TXDESC_OFFSET;
- _rtw_memcpy(pmgntframe->buf_addr, ReservedPagePacket, TotalPacketLen);
-
- rtw_hal_mgnt_xmit(padapter, pmgntframe);
-
- DBG_8192C("%s: Set RSVD page location to Fw\n", __FUNCTION__);
- FillH2CCmd(padapter, RSVD_PAGE_EID, sizeof(RsvdPageLoc), (u8*)&RsvdPageLoc);
-
-exit:
- rtw_mfree(ReservedPagePacket, 1024);
-}
-
-void rtl8723a_set_BTCoex_AP_mode_FwRsvdPkt_cmd(PADAPTER padapter)
-{
- PHAL_DATA_TYPE pHalData;
- u8 bRecover = _FALSE;
-
-
- DBG_8192C("+%s\n", __FUNCTION__);
-
- pHalData = GET_HAL_DATA(padapter);
-
- // Set FWHW_TXQ_CTRL 0x422[6]=0 to tell Hw the packet is not a real beacon frame.
- if (pHalData->RegFwHwTxQCtrl & BIT(6))
- bRecover = _TRUE;
-
- // To tell Hw the packet is not a real beacon frame.
- pHalData->RegFwHwTxQCtrl &= ~BIT(6);
- rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, pHalData->RegFwHwTxQCtrl);
- SetFwRsvdPagePkt_BTCoex(padapter);
-
- // To make sure that if there exists an adapter which would like to send beacon.
- // If exists, the origianl value of 0x422[6] will be 1, we should check this to
- // prevent from setting 0x422[6] to 0 after download reserved page, or it will cause
- // the beacon cannot be sent by HW.
- // 2010.06.23. Added by tynli.
- if (bRecover)
- {
- pHalData->RegFwHwTxQCtrl |= BIT(6);
- rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, pHalData->RegFwHwTxQCtrl);
- }
-}
-#endif
-
-#ifdef CONFIG_P2P_PS
-void rtl8192c_set_p2p_ps_offload_cmd(_adapter* padapter, u8 p2p_ps_state)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
- struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
- struct P2P_PS_Offload_t *p2p_ps_offload = &pHalData->p2p_ps_offload;
- u8 i;
-
-_func_enter_;
-
- switch(p2p_ps_state)
- {
- case P2P_PS_DISABLE:
- DBG_8192C("P2P_PS_DISABLE \n");
- _rtw_memset(p2p_ps_offload, 0 ,1);
- break;
- case P2P_PS_ENABLE:
- DBG_8192C("P2P_PS_ENABLE \n");
- // update CTWindow value.
- if( pwdinfo->ctwindow > 0 )
- {
- p2p_ps_offload->CTWindow_En = 1;
- rtw_write8(padapter, REG_P2P_CTWIN, pwdinfo->ctwindow);
- }
-
- // hw only support 2 set of NoA
- for( i=0 ; i<pwdinfo->noa_num ; i++)
- {
- // To control the register setting for which NOA
- rtw_write8(padapter, REG_NOA_DESC_SEL, (i << 4));
- if(i == 0)
- p2p_ps_offload->NoA0_En = 1;
- else
- p2p_ps_offload->NoA1_En = 1;
-
- // config P2P NoA Descriptor Register
- //DBG_8192C("%s(): noa_duration = %x\n",__FUNCTION__,pwdinfo->noa_duration[i]);
- rtw_write32(padapter, REG_NOA_DESC_DURATION, pwdinfo->noa_duration[i]);
-
- //DBG_8192C("%s(): noa_interval = %x\n",__FUNCTION__,pwdinfo->noa_interval[i]);
- rtw_write32(padapter, REG_NOA_DESC_INTERVAL, pwdinfo->noa_interval[i]);
-
- //DBG_8192C("%s(): start_time = %x\n",__FUNCTION__,pwdinfo->noa_start_time[i]);
- rtw_write32(padapter, REG_NOA_DESC_START, pwdinfo->noa_start_time[i]);
-
- //DBG_8192C("%s(): noa_count = %x\n",__FUNCTION__,pwdinfo->noa_count[i]);
- rtw_write8(padapter, REG_NOA_DESC_COUNT, pwdinfo->noa_count[i]);
- }
-
- if( (pwdinfo->opp_ps == 1) || (pwdinfo->noa_num > 0) )
- {
- // rst p2p circuit
- rtw_write8(padapter, REG_DUAL_TSF_RST, BIT(4));
-
- p2p_ps_offload->Offload_En = 1;
-
- if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
- {
- p2p_ps_offload->role= 1;
- p2p_ps_offload->AllStaSleep = 0;
- }
- else
- {
- p2p_ps_offload->role= 0;
- }
-
- p2p_ps_offload->discovery = 0;
- }
- break;
- case P2P_PS_SCAN:
- DBG_8192C("P2P_PS_SCAN \n");
- p2p_ps_offload->discovery = 1;
- break;
- case P2P_PS_SCAN_DONE:
- DBG_8192C("P2P_PS_SCAN_DONE \n");
- p2p_ps_offload->discovery = 0;
- pwdinfo->p2p_ps_state = P2P_PS_ENABLE;
- break;
- default:
- break;
- }
-
- FillH2CCmd(padapter, P2P_PS_OFFLOAD_EID, 1, (u8 *)p2p_ps_offload);
-
-_func_exit_;
-
-}
-#endif //CONFIG_P2P_PS
-
-#ifdef CONFIG_IOL
-#include <rtw_iol.h>
-#ifdef CONFIG_USB_HCI
-#include <usb_ops.h>
-#endif
-int rtl8192c_IOL_exec_cmds_sync(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms, u32 bndy_cnt)
-{
- IO_OFFLOAD_LOC IoOffloadLoc;
- u32 start_time = rtw_get_current_time();
- u32 passing_time_ms;
- u8 polling_ret;
- int ret = _FAIL;
-
- if (rtw_IOL_append_END_cmd(xmit_frame) != _SUCCESS)
- goto exit;
-#ifdef CONFIG_USB_HCI
- {
- struct pkt_attrib *pattrib = &xmit_frame->attrib;
- if(rtw_usb_bulk_size_boundary(adapter,TXDESC_SIZE+pattrib->last_txcmdsz))
- {
- if (rtw_IOL_append_END_cmd(xmit_frame) != _SUCCESS)
- goto exit;
- }
- }
-#endif //CONFIG_USB_HCI
-
-
- dump_mgntframe_and_wait(adapter, xmit_frame, max_wating_ms);
-
- IoOffloadLoc.LocCmd = 0;
- if(_SUCCESS != FillH2CCmd(adapter, H2C_92C_IO_OFFLOAD, sizeof(IO_OFFLOAD_LOC), (u8 *)&IoOffloadLoc))
- goto exit;
-
- //polling if the IO offloading is done
- while( (passing_time_ms=rtw_get_passing_time_ms(start_time)) <= max_wating_ms) {
- #if 0 //C2H
- if(0xff == rtw_read8(adapter, REG_C2HEVT_CLEAR))
- break;
- #else// 0x1c3
- if(0x00 != (polling_ret=rtw_read8(adapter, 0x1c3)))
- break;
- #endif
- rtw_msleep_os(5);
- }
- #if 0 //debug
- DBG_871X("IOL %s, polling_ret:0x%02x, 0x1c0=0x%08x, 0x1c4=0x%08x, 0x1cc=0x%08x, 0x1e8=0x%08x, 0x130=0x%08x, 0x134=0x%08x\n"
- , polling_ret==0xff?"success":"error"
- , polling_ret
- , rtw_read32(adapter, 0x1c0)
- , rtw_read32(adapter, 0x1c4)
- , rtw_read32(adapter, 0x1cc)
- , rtw_read32(adapter, 0x1e8)
- , rtw_read32(adapter, 0x130)
- , rtw_read32(adapter, 0x134)
- );
- rtw_write32(adapter, 0x1c0, 0x0);
- #endif
-
- if(polling_ret == 0xff)
- ret =_SUCCESS;
- else {
- DBG_871X("IOL %s, polling_ret:0x%02x\n"
- //", 0x1c0=0x%08x, 0x1c4=0x%08x, 0x1cc=0x%08x, 0x1e8=0x%08x, 0x130=0x%08x, 0x134=0x%08x\n"
- , polling_ret==0xff?"success":"error"
- , polling_ret
- //, rtw_read32(adapter, 0x1c0)
- //, rtw_read32(adapter, 0x1c4)
- //, rtw_read32(adapter, 0x1cc)
- //, rtw_read32(adapter, 0x1e8)
- //, rtw_read32(adapter, 0x130)
- //, rtw_read32(adapter, 0x134)
- );
- #if 0 //debug
- rtw_write16(adapter, 0x1c4, 0x0000);
- rtw_msleep_os(10);
- DBG_871X("after reset, 0x1c4=0x%08x\n", rtw_read32(adapter, 0x1c4));
- #endif
-
- }
-
- {
- #if 0 //C2H
- u32 c2h_evt;
- int i;
- c2h_evt = rtw_read32(adapter, REG_C2HEVT_MSG_NORMAL);
- DBG_871X("%s io-offloading complete, in %ums: 0x%08x\n", __FUNCTION__, passing_time_ms, c2h_evt);
- rtw_write8(adapter, REG_C2HEVT_CLEAR, 0x0);
- #else// 0x1c3
- //DBG_871X("%s IOF complete in %ums\n", __FUNCTION__, passing_time_ms);
- rtw_write8(adapter, 0x1c3, 0x0);
- #endif
- }
-
-exit:
- return ret;
-
-}
-#endif //CONFIG_IOL
-
-#ifdef CONFIG_TSF_RESET_OFFLOAD
-/*
- ask FW to Reset sync register at Beacon early interrupt
-*/
-u8 rtl8723c_reset_tsf(_adapter *padapter, u8 reset_port )
-{
- u8 buf[2];
- u8 res=_SUCCESS;
-
-_func_enter_;
- if (IFACE_PORT0==reset_port) {
- buf[0] = 0x1; buf[1] = 0;
-
- } else{
- buf[0] = 0x0; buf[1] = 0x1;
- }
- FillH2CCmd(padapter, H2C_RESET_TSF, 2, buf);
-_func_exit_;
-
- return res;
-}
-#endif // CONFIG_TSF_RESET_OFFLOAD
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#define _RTL8723A_CMD_C_
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+#include <recv_osdep.h>
+#include <cmd_osdep.h>
+#include <mlme_osdep.h>
+#include <rtw_byteorder.h>
+#include <circ_buf.h>
+#include <rtw_ioctl_set.h>
+
+#include <rtl8723a_hal.h>
+
+
+#define RTL92C_MAX_H2C_BOX_NUMS 4
+#define RTL92C_MAX_CMD_LEN 5
+#define MESSAGE_BOX_SIZE 4
+#define EX_MESSAGE_BOX_SIZE 2
+
+
+static u8 _is_fw_read_cmd_down(_adapter* padapter, u8 msgbox_num)
+{
+ u8 read_down = _FALSE;
+ int retry_cnts = 100;
+
+ u8 valid;
+
+ //DBG_8192C(" _is_fw_read_cmd_down ,reg_1cc(%x),msg_box(%d)...\n",rtw_read8(padapter,REG_HMETFR),msgbox_num);
+
+ do{
+ valid = rtw_read8(padapter,REG_HMETFR) & BIT(msgbox_num);
+
+ if(0 == valid ){
+ read_down = _TRUE;
+ }
+ }while( (!read_down) && (retry_cnts--));
+
+ return read_down;
+
+}
+
+
+/*****************************************
+* H2C Msg format :
+*| 31 - 8 |7 | 6 - 0 |
+*| h2c_msg |Ext_bit |CMD_ID |
+*
+******************************************/
+s32 FillH2CCmd(PADAPTER padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer)
+{
+ u8 bcmd_down = _FALSE;
+ s32 retry_cnts = 100;
+ u8 h2c_box_num;
+ u32 msgbox_addr;
+ u32 msgbox_ex_addr;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ u32 h2c_cmd = 0;
+ u16 h2c_cmd_ex = 0;
+ s32 ret = _FAIL;
+
+_func_enter_;
+
+ padapter = GET_PRIMARY_ADAPTER(padapter);
+ pHalData = GET_HAL_DATA(padapter);
+
+ _enter_critical_mutex(&(adapter_to_dvobj(padapter)->h2c_fwcmd_mutex), NULL);
+
+ if (!pCmdBuffer) {
+ goto exit;
+ }
+ if (CmdLen > RTL92C_MAX_CMD_LEN) {
+ goto exit;
+ }
+ if (padapter->bSurpriseRemoved == _TRUE)
+ goto exit;
+
+ //pay attention to if race condition happened in H2C cmd setting.
+ do{
+ h2c_box_num = pHalData->LastHMEBoxNum;
+
+ if(!_is_fw_read_cmd_down(padapter, h2c_box_num)){
+ DBG_8192C(" fw read cmd failed...\n");
+ goto exit;
+ }
+
+ if(CmdLen<=3)
+ {
+ _rtw_memcpy((u8*)(&h2c_cmd)+1, pCmdBuffer, CmdLen );
+ }
+ else{
+ _rtw_memcpy((u8*)(&h2c_cmd_ex), pCmdBuffer, EX_MESSAGE_BOX_SIZE);
+ _rtw_memcpy((u8*)(&h2c_cmd)+1, pCmdBuffer+2,( CmdLen-EX_MESSAGE_BOX_SIZE));
+ *(u8*)(&h2c_cmd) |= BIT(7);
+ }
+
+ *(u8*)(&h2c_cmd) |= ElementID;
+
+ if(h2c_cmd & BIT(7)){
+ msgbox_ex_addr = REG_HMEBOX_EXT_0 + (h2c_box_num *EX_MESSAGE_BOX_SIZE);
+ h2c_cmd_ex = le16_to_cpu( h2c_cmd_ex );
+ rtw_write16(padapter, msgbox_ex_addr, h2c_cmd_ex);
+ }
+ msgbox_addr =REG_HMEBOX_0 + (h2c_box_num *MESSAGE_BOX_SIZE);
+ h2c_cmd = le32_to_cpu( h2c_cmd );
+ rtw_write32(padapter,msgbox_addr, h2c_cmd);
+
+ bcmd_down = _TRUE;
+
+ //DBG_8192C("MSG_BOX:%d,CmdLen(%d), reg:0x%x =>h2c_cmd:0x%x, reg:0x%x =>h2c_cmd_ex:0x%x ..\n"
+ // ,pHalData->LastHMEBoxNum ,CmdLen,msgbox_addr,h2c_cmd,msgbox_ex_addr,h2c_cmd_ex);
+
+ pHalData->LastHMEBoxNum = (h2c_box_num+1) % RTL92C_MAX_H2C_BOX_NUMS;
+
+ }while((!bcmd_down) && (retry_cnts--));
+
+ ret = _SUCCESS;
+
+exit:
+
+ _exit_critical_mutex(&(adapter_to_dvobj(padapter)->h2c_fwcmd_mutex), NULL);
+
+_func_exit_;
+
+ return ret;
+}
+
+u8 rtl8192c_h2c_msg_hdl(_adapter *padapter, unsigned char *pbuf)
+{
+ u8 ElementID, CmdLen;
+ u8 *pCmdBuffer;
+ struct cmd_msg_parm *pcmdmsg;
+
+ if(!pbuf)
+ return H2C_PARAMETERS_ERROR;
+
+ pcmdmsg = (struct cmd_msg_parm*)pbuf;
+ ElementID = pcmdmsg->eid;
+ CmdLen = pcmdmsg->sz;
+ pCmdBuffer = pcmdmsg->buf;
+
+ FillH2CCmd(padapter, ElementID, CmdLen, pCmdBuffer);
+
+ return H2C_SUCCESS;
+}
+
+#if defined(CONFIG_AUTOSUSPEND) && defined(SUPPORT_HW_RFOFF_DETECTED)
+u8 rtl8192c_set_FwSelectSuspend_cmd(_adapter *padapter ,u8 bfwpoll, u16 period)
+{
+ u8 res=_SUCCESS;
+ struct H2C_SS_RFOFF_PARAM param;
+ DBG_8192C("==>%s bfwpoll(%x)\n",__FUNCTION__,bfwpoll);
+ param.gpio_period = period;//Polling GPIO_11 period time
+ param.ROFOn = (_TRUE == bfwpoll)?1:0;
+ FillH2CCmd(padapter, SELECTIVE_SUSPEND_ROF_CMD, sizeof(param), (u8*)(&param));
+ return res;
+}
+#endif //CONFIG_AUTOSUSPEND && SUPPORT_HW_RFOFF_DETECTED
+
+u8 rtl8192c_set_rssi_cmd(_adapter*padapter, u8 *param)
+{
+ u8 res=_SUCCESS;
+
+_func_enter_;
+
+ *((u32*) param ) = cpu_to_le32( *((u32*) param ) );
+
+ FillH2CCmd(padapter, RSSI_SETTING_EID, 3, param);
+
+_func_exit_;
+
+ return res;
+}
+
+u8 rtl8192c_set_raid_cmd(_adapter*padapter, u32 mask, u8 arg)
+{
+ u8 buf[5];
+ u8 res=_SUCCESS;
+
+_func_enter_;
+
+ _rtw_memset(buf, 0, 5);
+ mask = cpu_to_le32( mask );
+ _rtw_memcpy(buf, &mask, 4);
+ buf[4] = arg;
+
+ FillH2CCmd(padapter, MACID_CONFIG_EID, 5, buf);
+
+_func_exit_;
+
+ return res;
+
+}
+
+//bitmap[0:27] = tx_rate_bitmap
+//bitmap[28:31]= Rate Adaptive id
+//arg[0:4] = macid
+//arg[5] = Short GI
+void rtl8192c_Add_RateATid(PADAPTER pAdapter, u32 bitmap, u8 arg, u8 rssi_level)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+
+ u8 macid = arg&0x1f;
+
+#ifdef CONFIG_ODM_REFRESH_RAMASK
+ u8 raid = (bitmap>>28) & 0x0f;
+ bitmap &=0x0fffffff;
+ if(rssi_level != DM_RATR_STA_INIT)
+ bitmap = ODM_Get_Rate_Bitmap(&pHalData->odmpriv, macid, bitmap, rssi_level);
+
+ bitmap |= ((raid<<28)&0xf0000000);
+#endif //CONFIG_ODM_REFRESH_RAMASK
+
+
+ if(pHalData->fw_ractrl == _TRUE)
+ {
+ rtl8192c_set_raid_cmd(pAdapter, bitmap, arg);
+ }
+ else
+ {
+ u8 init_rate, shortGIrate=_FALSE;
+
+ init_rate = get_highest_rate_idx(bitmap&0x0fffffff)&0x3f;
+
+
+ shortGIrate = (arg&BIT(5)) ? _TRUE:_FALSE;
+
+ if (shortGIrate==_TRUE)
+ init_rate |= BIT(6);
+
+ rtw_write8(pAdapter, (REG_INIDATA_RATE_SEL+macid), (u8)init_rate);
+ }
+
+}
+
+void rtl8723a_set_FwPwrMode_cmd(PADAPTER padapter, u8 Mode)
+{
+ SETPWRMODE_PARM H2CSetPwrMode;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
+
+_func_enter_;
+
+ H2CSetPwrMode.Mode = Mode;
+ H2CSetPwrMode.SmartPS = pwrpriv->smart_ps;
+ H2CSetPwrMode.AwakeInterval = 1;
+ H2CSetPwrMode.bAllQueueUAPSD = padapter->registrypriv.uapsd_enable;
+
+ if(0 == Mode)
+ {
+ /* Leave LPS, set BcnAntMode to 0 */
+ H2CSetPwrMode.BcnAntMode = 0;
+ }
+ else
+ {
+ H2CSetPwrMode.BcnAntMode = pwrpriv->bcn_ant_mode;
+ }
+
+ DBG_871X("%s: Mode=%d SmartPS=%d UAPSD=%d BcnMode=0x%02x\n", __FUNCTION__,
+ H2CSetPwrMode.Mode, H2CSetPwrMode.SmartPS, H2CSetPwrMode.bAllQueueUAPSD, H2CSetPwrMode.BcnAntMode);
+
+ FillH2CCmd(padapter, SET_PWRMODE_EID, sizeof(H2CSetPwrMode), (u8 *)&H2CSetPwrMode);
+
+_func_exit_;
+}
+
+
+void rtl8723a_set_FwMediaStatus_cmd(PADAPTER padapter, u16 mstatus_rpt )
+{
+ u8 opmode,macid;
+ u16 mst_rpt = cpu_to_le16 (mstatus_rpt);
+ u32 reg_macid_no_link = REG_MACID_NO_LINK;
+ opmode = (u8) mst_rpt;
+ macid = (u8)(mst_rpt >> 8) ;
+ DBG_871X("### %s: MStatus=%x MACID=%d \n", __FUNCTION__,opmode,macid);
+
+ //Delete select macid (MACID 0~63) from queue list.
+ if(opmode == 1)// 1:connect
+ {
+ rtw_write32(padapter,reg_macid_no_link, (rtw_read32(padapter,reg_macid_no_link) & (~BIT(macid))));
+ }
+ else//0: disconnect
+ {
+ rtw_write32(padapter,reg_macid_no_link, (rtw_read32(padapter,reg_macid_no_link)|BIT(macid)));
+ }
+}
+
+
+void ConstructBeacon(_adapter *padapter, u8 *pframe, u32 *pLength)
+{
+ struct rtw_ieee80211_hdr *pwlanhdr;
+ u16 *fctrl;
+ u32 rate_len, pktlen;
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
+ u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+
+
+ //DBG_871X("%s\n", __FUNCTION__);
+
+ pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+
+ fctrl = &(pwlanhdr->frame_ctl);
+ *(fctrl) = 0;
+
+ _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
+
+ SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
+ //pmlmeext->mgnt_seq++;
+ SetFrameSubType(pframe, WIFI_BEACON);
+
+ pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
+ pktlen = sizeof (struct rtw_ieee80211_hdr_3addr);
+
+ //timestamp will be inserted by hardware
+ pframe += 8;
+ pktlen += 8;
+
+ // beacon interval: 2 bytes
+ _rtw_memcpy(pframe, (unsigned char *)(rtw_get_beacon_interval_from_ie(cur_network->IEs)), 2);
+
+ pframe += 2;
+ pktlen += 2;
+
+ // capability info: 2 bytes
+ _rtw_memcpy(pframe, (unsigned char *)(rtw_get_capability_from_ie(cur_network->IEs)), 2);
+
+ pframe += 2;
+ pktlen += 2;
+
+ if( (pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
+ {
+ //DBG_871X("ie len=%d\n", cur_network->IELength);
+ pktlen += cur_network->IELength - sizeof(NDIS_802_11_FIXED_IEs);
+ _rtw_memcpy(pframe, cur_network->IEs+sizeof(NDIS_802_11_FIXED_IEs), pktlen);
+
+ goto _ConstructBeacon;
+ }
+
+ //below for ad-hoc mode
+
+ // SSID
+ pframe = rtw_set_ie(pframe, _SSID_IE_, cur_network->Ssid.SsidLength, cur_network->Ssid.Ssid, &pktlen);
+
+ // supported rates...
+ rate_len = rtw_get_rateset_len(cur_network->SupportedRates);
+ pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, ((rate_len > 8)? 8: rate_len), cur_network->SupportedRates, &pktlen);
+
+ // DS parameter set
+ pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&(cur_network->Configuration.DSConfig), &pktlen);
+
+ if( (pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE)
+ {
+ u32 ATIMWindow;
+ // IBSS Parameter Set...
+ //ATIMWindow = cur->Configuration.ATIMWindow;
+ ATIMWindow = 0;
+ pframe = rtw_set_ie(pframe, _IBSS_PARA_IE_, 2, (unsigned char *)(&ATIMWindow), &pktlen);
+ }
+
+
+ //todo: ERP IE
+
+
+ // EXTERNDED SUPPORTED RATE
+ if (rate_len > 8)
+ {
+ pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_, (rate_len - 8), (cur_network->SupportedRates + 8), &pktlen);
+ }
+
+
+ //todo:HT for adhoc
+
+_ConstructBeacon:
+
+ if ((pktlen + TXDESC_SIZE) > 512)
+ {
+ DBG_871X("beacon frame too large\n");
+ return;
+ }
+
+ *pLength = pktlen;
+
+ //DBG_871X("%s bcn_sz=%d\n", __FUNCTION__, pktlen);
+
+}
+
+void ConstructPSPoll(_adapter *padapter, u8 *pframe, u32 *pLength)
+{
+ struct rtw_ieee80211_hdr *pwlanhdr;
+ u16 *fctrl;
+ u32 pktlen;
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+
+ //DBG_871X("%s\n", __FUNCTION__);
+
+ pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+
+ // Frame control.
+ fctrl = &(pwlanhdr->frame_ctl);
+ *(fctrl) = 0;
+ SetPwrMgt(fctrl);
+ SetFrameSubType(pframe, WIFI_PSPOLL);
+
+ // AID.
+ SetDuration(pframe, (pmlmeinfo->aid | 0xc000));
+
+ // BSSID.
+ _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
+
+ // TA.
+ _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+
+ *pLength = 16;
+}
+
+void ConstructNullFunctionData(
+ PADAPTER padapter,
+ u8 *pframe,
+ u32 *pLength,
+ u8 *StaAddr,
+ u8 bQoS,
+ u8 AC,
+ u8 bEosp,
+ u8 bForcePowerSave)
+{
+ struct rtw_ieee80211_hdr *pwlanhdr;
+ u16 *fctrl;
+ u32 pktlen;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct wlan_network *cur_network = &pmlmepriv->cur_network;
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+
+
+ //DBG_871X("%s:%d\n", __FUNCTION__, bForcePowerSave);
+
+ pwlanhdr = (struct rtw_ieee80211_hdr*)pframe;
+
+ fctrl = &pwlanhdr->frame_ctl;
+ *(fctrl) = 0;
+ if (bForcePowerSave)
+ {
+ SetPwrMgt(fctrl);
+ }
+
+ switch(cur_network->network.InfrastructureMode)
+ {
+ case Ndis802_11Infrastructure:
+ SetToDs(fctrl);
+ _rtw_memcpy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr3, StaAddr, ETH_ALEN);
+ break;
+ case Ndis802_11APMode:
+ SetFrDs(fctrl);
+ _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr2, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)), ETH_ALEN);
+ break;
+ case Ndis802_11IBSS:
+ default:
+ _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
+ break;
+ }
+
+ SetSeqNum(pwlanhdr, 0);
+
+ if (bQoS == _TRUE) {
+ struct rtw_ieee80211_hdr_3addr_qos *pwlanqoshdr;
+
+ SetFrameSubType(pframe, WIFI_QOS_DATA_NULL);
+
+ pwlanqoshdr = (struct rtw_ieee80211_hdr_3addr_qos*)pframe;
+ SetPriority(&pwlanqoshdr->qc, AC);
+ SetEOSP(&pwlanqoshdr->qc, bEosp);
+
+ pktlen = sizeof(struct rtw_ieee80211_hdr_3addr_qos);
+ } else {
+ SetFrameSubType(pframe, WIFI_DATA_NULL);
+
+ pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+ }
+
+ *pLength = pktlen;
+}
+
+void ConstructProbeRsp(_adapter *padapter, u8 *pframe, u32 *pLength, u8 *StaAddr, BOOLEAN bHideSSID)
+{
+ struct rtw_ieee80211_hdr *pwlanhdr;
+ u16 *fctrl;
+ u8 *mac, *bssid;
+ u32 pktlen;
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
+
+
+ //DBG_871X("%s\n", __FUNCTION__);
+
+ pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+
+ mac = myid(&(padapter->eeprompriv));
+ bssid = cur_network->MacAddress;
+
+ fctrl = &(pwlanhdr->frame_ctl);
+ *(fctrl) = 0;
+ _rtw_memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr3, bssid, ETH_ALEN);
+
+ SetSeqNum(pwlanhdr, 0);
+ SetFrameSubType(fctrl, WIFI_PROBERSP);
+
+ pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+ pframe += pktlen;
+
+ if(cur_network->IELength>MAX_IE_SZ)
+ return;
+
+ _rtw_memcpy(pframe, cur_network->IEs, cur_network->IELength);
+ pframe += cur_network->IELength;
+ pktlen += cur_network->IELength;
+
+ *pLength = pktlen;
+}
+
+// To check if reserved page content is destroyed by beacon beacuse beacon is too large.
+// 2010.06.23. Added by tynli.
+VOID
+CheckFwRsvdPageContent(
+ IN PADAPTER Adapter
+)
+{
+ HAL_DATA_TYPE* pHalData = GET_HAL_DATA(Adapter);
+ u32 MaxBcnPageNum;
+
+ if(pHalData->FwRsvdPageStartOffset != 0)
+ {
+ /*MaxBcnPageNum = PageNum_128(pMgntInfo->MaxBeaconSize);
+ RT_ASSERT((MaxBcnPageNum <= pHalData->FwRsvdPageStartOffset),
+ ("CheckFwRsvdPageContent(): The reserved page content has been"\
+ "destroyed by beacon!!! MaxBcnPageNum(%d) FwRsvdPageStartOffset(%d)\n!",
+ MaxBcnPageNum, pHalData->FwRsvdPageStartOffset));*/
+ }
+}
+
+//
+// Description: Fill the reserved packets that FW will use to RSVD page.
+// Now we just send 4 types packet to rsvd page.
+// (1)Beacon, (2)Ps-poll, (3)Null data, (4)ProbeRsp.
+// Input:
+// bDLFinished - FALSE: At the first time we will send all the packets as a large packet to Hw,
+// so we need to set the packet length to total lengh.
+// TRUE: At the second time, we should send the first packet (default:beacon)
+// to Hw again and set the lengh in descriptor to the real beacon lengh.
+// 2009.10.15 by tynli.
+static void SetFwRsvdPagePkt(PADAPTER padapter, BOOLEAN bDLFinished)
+{
+ PHAL_DATA_TYPE pHalData;
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ struct xmit_priv *pxmitpriv;
+ struct mlme_ext_priv *pmlmeext;
+ struct mlme_ext_info *pmlmeinfo;
+ u32 BeaconLength, ProbeRspLength, PSPollLength;
+ u32 NullDataLength, QosNullLength, BTQosNullLength;
+ u8 *ReservedPagePacket;
+ u8 PageNum, PageNeed, TxDescLen;
+ u16 BufIndex;
+ u32 TotalPacketLen;
+ RSVDPAGE_LOC RsvdPageLoc;
+
+
+ DBG_871X("%s\n", __FUNCTION__);
+
+ ReservedPagePacket = (u8*)rtw_zmalloc(1000);
+ if (ReservedPagePacket == NULL) {
+ DBG_871X("%s: alloc ReservedPagePacket fail!\n", __FUNCTION__);
+ return;
+ }
+
+ pHalData = GET_HAL_DATA(padapter);
+ pxmitpriv = &padapter->xmitpriv;
+ pmlmeext = &padapter->mlmeextpriv;
+ pmlmeinfo = &pmlmeext->mlmext_info;
+
+ TxDescLen = TXDESC_SIZE;
+ PageNum = 0;
+
+ //3 (1) beacon
+ BufIndex = TXDESC_OFFSET;
+ ConstructBeacon(padapter, &ReservedPagePacket[BufIndex], &BeaconLength);
+
+ // When we count the first page size, we need to reserve description size for the RSVD
+ // packet, it will be filled in front of the packet in TXPKTBUF.
+ PageNeed = (u8)PageNum_128(TxDescLen + BeaconLength);
+ // To reserved 2 pages for beacon buffer. 2010.06.24.
+ if (PageNeed == 1)
+ PageNeed += 1;
+ PageNum += PageNeed;
+ pHalData->FwRsvdPageStartOffset = PageNum;
+
+ BufIndex += PageNeed*128;
+
+ //3 (2) ps-poll
+ RsvdPageLoc.LocPsPoll = PageNum;
+ ConstructPSPoll(padapter, &ReservedPagePacket[BufIndex], &PSPollLength);
+ rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], PSPollLength, _TRUE, _FALSE);
+
+ PageNeed = (u8)PageNum_128(TxDescLen + PSPollLength);
+ PageNum += PageNeed;
+
+ BufIndex += PageNeed*128;
+
+ //3 (3) null data
+ RsvdPageLoc.LocNullData = PageNum;
+ ConstructNullFunctionData(
+ padapter,
+ &ReservedPagePacket[BufIndex],
+ &NullDataLength,
+ get_my_bssid(&pmlmeinfo->network),
+ _FALSE, 0, 0, _FALSE);
+ rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], NullDataLength, _FALSE, _FALSE);
+
+ PageNeed = (u8)PageNum_128(TxDescLen + NullDataLength);
+ PageNum += PageNeed;
+
+ BufIndex += PageNeed*128;
+
+ //3 (4) probe response
+ RsvdPageLoc.LocProbeRsp = PageNum;
+ ConstructProbeRsp(
+ padapter,
+ &ReservedPagePacket[BufIndex],
+ &ProbeRspLength,
+ get_my_bssid(&pmlmeinfo->network),
+ _FALSE);
+ rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], ProbeRspLength, _FALSE, _FALSE);
+
+ PageNeed = (u8)PageNum_128(TxDescLen + ProbeRspLength);
+ PageNum += PageNeed;
+
+ BufIndex += PageNeed*128;
+
+ //3 (5) Qos null data
+ RsvdPageLoc.LocQosNull = PageNum;
+ ConstructNullFunctionData(
+ padapter,
+ &ReservedPagePacket[BufIndex],
+ &QosNullLength,
+ get_my_bssid(&pmlmeinfo->network),
+ _TRUE, 0, 0, _FALSE);
+ rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], QosNullLength, _FALSE, _FALSE);
+
+ PageNeed = (u8)PageNum_128(TxDescLen + QosNullLength);
+ PageNum += PageNeed;
+
+ BufIndex += PageNeed*128;
+
+ //3 (6) BT Qos null data
+ RsvdPageLoc.LocBTQosNull = PageNum;
+ ConstructNullFunctionData(
+ padapter,
+ &ReservedPagePacket[BufIndex],
+ &BTQosNullLength,
+ get_my_bssid(&pmlmeinfo->network),
+ _TRUE, 0, 0, _FALSE);
+ rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], BTQosNullLength, _FALSE, _TRUE);
+
+ TotalPacketLen = BufIndex + BTQosNullLength;
+
+ pmgntframe = alloc_mgtxmitframe(pxmitpriv);
+ if (pmgntframe == NULL)
+ goto exit;
+
+ // update attribute
+ pattrib = &pmgntframe->attrib;
+ update_mgntframe_attrib(padapter, pattrib);
+ pattrib->qsel = 0x10;
+ pattrib->pktlen = pattrib->last_txcmdsz = TotalPacketLen - TXDESC_OFFSET;
+ _rtw_memcpy(pmgntframe->buf_addr, ReservedPagePacket, TotalPacketLen);
+
+ rtw_hal_mgnt_xmit(padapter, pmgntframe);
+
+ DBG_871X("%s: Set RSVD page location to Fw\n", __FUNCTION__);
+ FillH2CCmd(padapter, RSVD_PAGE_EID, sizeof(RsvdPageLoc), (u8*)&RsvdPageLoc);
+
+exit:
+ rtw_mfree(ReservedPagePacket, 1000);
+}
+
+void rtl8723a_set_FwJoinBssReport_cmd(PADAPTER padapter, u8 mstatus)
+{
+ JOINBSSRPT_PARM JoinBssRptParm;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+
+_func_enter_;
+
+ DBG_871X("%s mstatus(%x)\n", __FUNCTION__,mstatus);
+
+ if(mstatus == 1)
+ {
+ BOOLEAN bRecover = _FALSE;
+ u8 v8;
+
+ // We should set AID, correct TSF, HW seq enable before set JoinBssReport to Fw in 88/92C.
+ // Suggested by filen. Added by tynli.
+ rtw_write16(padapter, REG_BCN_PSR_RPT, (0xC000|pmlmeinfo->aid));
+ // Do not set TSF again here or vWiFi beacon DMA INT will not work.
+ //correct_TSF(padapter, pmlmeext);
+ // Hw sequende enable by dedault. 2010.06.23. by tynli.
+ //rtw_write16(padapter, REG_NQOS_SEQ, ((pmlmeext->mgnt_seq+100)&0xFFF));
+ //rtw_write8(padapter, REG_HWSEQ_CTRL, 0xFF);
+
+ // set REG_CR bit 8
+ v8 = rtw_read8(padapter, REG_CR+1);
+ v8 |= BIT(0); // ENSWBCN
+ rtw_write8(padapter, REG_CR+1, v8);
+
+ // Disable Hw protection for a time which revserd for Hw sending beacon.
+ // Fix download reserved page packet fail that access collision with the protection time.
+ // 2010.05.11. Added by tynli.
+// SetBcnCtrlReg(padapter, 0, BIT(3));
+// SetBcnCtrlReg(padapter, BIT(4), 0);
+ SetBcnCtrlReg(padapter, BIT(4), BIT(3));
+
+ // Set FWHW_TXQ_CTRL 0x422[6]=0 to tell Hw the packet is not a real beacon frame.
+ if (pHalData->RegFwHwTxQCtrl & BIT(6))
+ bRecover = _TRUE;
+
+ // To tell Hw the packet is not a real beacon frame.
+ //U1bTmp = rtw_read8(padapter, REG_FWHW_TXQ_CTRL+2);
+ rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, pHalData->RegFwHwTxQCtrl & ~BIT(6));
+ pHalData->RegFwHwTxQCtrl &= ~BIT(6);
+ SetFwRsvdPagePkt(padapter, 0);
+
+ // 2010.05.11. Added by tynli.
+// SetBcnCtrlReg(padapter, BIT3, 0);
+// SetBcnCtrlReg(padapter, 0, BIT4);
+ SetBcnCtrlReg(padapter, BIT(3), BIT(4));
+
+ // To make sure that if there exists an adapter which would like to send beacon.
+ // If exists, the origianl value of 0x422[6] will be 1, we should check this to
+ // prevent from setting 0x422[6] to 0 after download reserved page, or it will cause
+ // the beacon cannot be sent by HW.
+ // 2010.06.23. Added by tynli.
+ if(bRecover)
+ {
+ rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, pHalData->RegFwHwTxQCtrl | BIT(6));
+ pHalData->RegFwHwTxQCtrl |= BIT(6);
+ }
+
+ // Clear CR[8] or beacon packet will not be send to TxBuf anymore.
+ v8 = rtw_read8(padapter, REG_CR+1);
+ v8 &= ~BIT(0); // ~ENSWBCN
+ rtw_write8(padapter, REG_CR+1, v8);
+ }
+
+ JoinBssRptParm.OpMode = mstatus;
+
+ FillH2CCmd(padapter, JOINBSS_RPT_EID, sizeof(JoinBssRptParm), (u8 *)&JoinBssRptParm);
+
+_func_exit_;
+}
+
+#ifdef CONFIG_BT_COEXIST
+static void SetFwRsvdPagePkt_BTCoex(PADAPTER padapter)
+{
+ PHAL_DATA_TYPE pHalData;
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ struct xmit_priv *pxmitpriv;
+ struct mlme_ext_priv *pmlmeext;
+ struct mlme_ext_info *pmlmeinfo;
+ u8 fakemac[6]={0x00,0xe0,0x4c,0x00,0x00,0x00};
+ u32 BeaconLength, ProbeRspLength, PSPollLength;
+ u32 NullDataLength, QosNullLength, BTQosNullLength;
+ u8 *ReservedPagePacket;
+ u8 PageNum, PageNeed, TxDescLen;
+ u16 BufIndex;
+ u32 TotalPacketLen;
+ RSVDPAGE_LOC RsvdPageLoc;
+
+
+ DBG_871X("+%s\n", __FUNCTION__);
+
+ ReservedPagePacket = (u8*)rtw_zmalloc(1024);
+ if (ReservedPagePacket == NULL) {
+ DBG_871X("%s: alloc ReservedPagePacket fail!\n", __FUNCTION__);
+ return;
+ }
+
+ pHalData = GET_HAL_DATA(padapter);
+ pxmitpriv = &padapter->xmitpriv;
+ pmlmeext = &padapter->mlmeextpriv;
+ pmlmeinfo = &pmlmeext->mlmext_info;
+
+ TxDescLen = TXDESC_SIZE;
+ PageNum = 0;
+
+ //3 (1) beacon
+ BufIndex = TXDESC_OFFSET;
+#if 0
+ ConstructBeacon(padapter, &ReservedPagePacket[BufIndex], &BeaconLength);
+
+ // When we count the first page size, we need to reserve description size for the RSVD
+ // packet, it will be filled in front of the packet in TXPKTBUF.
+ PageNeed = (u8)PageNum_128(TxDescLen + BeaconLength);
+ // To reserved 2 pages for beacon buffer. 2010.06.24.
+ if (PageNeed == 1)
+ PageNeed += 1;
+#else
+ // skip Beacon Packet
+ PageNeed = 3;
+#endif
+
+ PageNum += PageNeed;
+ pHalData->FwRsvdPageStartOffset = PageNum;
+
+ BufIndex += PageNeed*128;
+
+ //3 (2) ps-poll
+#if 0 // skip
+ RsvdPageLoc.LocPsPoll = PageNum;
+ ConstructPSPoll(padapter, &ReservedPagePacket[BufIndex], &PSPollLength);
+ rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], PSPollLength, _TRUE, _FALSE);
+
+ PageNeed = (u8)PageNum_128(TxDescLen + PSPollLength);
+ PageNum += PageNeed;
+
+ BufIndex += PageNeed*128;
+#endif
+
+ //3 (3) null data
+ RsvdPageLoc.LocNullData = PageNum;
+ ConstructNullFunctionData(
+ padapter,
+ &ReservedPagePacket[BufIndex],
+ &NullDataLength,
+ fakemac,
+ _FALSE, 0, 0, _FALSE);
+ rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], NullDataLength, _FALSE, _FALSE);
+
+ PageNeed = (u8)PageNum_128(TxDescLen + NullDataLength);
+ PageNum += PageNeed;
+
+ BufIndex += PageNeed*128;
+
+ //3 (4) probe response
+#if 0 // skip
+ RsvdPageLoc.LocProbeRsp = PageNum;
+ ConstructProbeRsp(
+ padapter,
+ &ReservedPagePacket[BufIndex],
+ &ProbeRspLength,
+ get_my_bssid(&pmlmeinfo->network),
+ _FALSE);
+ rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], ProbeRspLength, _FALSE, _FALSE);
+
+ PageNeed = (u8)PageNum_128(TxDescLen + ProbeRspLength);
+ PageNum += PageNeed;
+
+ BufIndex += PageNeed*128;
+#endif
+
+ //3 (5) Qos null data
+#if 0 // skip
+ RsvdPageLoc.LocQosNull = PageNum;
+ ConstructNullFunctionData(
+ padapter,
+ &ReservedPagePacket[BufIndex],
+ &QosNullLength,
+ get_my_bssid(&pmlmeinfo->network),
+ _TRUE, 0, 0, _FALSE);
+ rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], QosNullLength, _FALSE, _FALSE);
+
+ PageNeed = (u8)PageNum_128(TxDescLen + QosNullLength);
+ PageNum += PageNeed;
+
+ BufIndex += PageNeed*128;
+#endif
+
+ //3 (6) BT Qos null data
+ RsvdPageLoc.LocBTQosNull = PageNum;
+ ConstructNullFunctionData(
+ padapter,
+ &ReservedPagePacket[BufIndex],
+ &BTQosNullLength,
+ fakemac,
+ _TRUE, 0, 0, _FALSE);
+ rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], BTQosNullLength, _FALSE, _TRUE);
+
+ TotalPacketLen = BufIndex + BTQosNullLength;
+
+ pmgntframe = alloc_mgtxmitframe(pxmitpriv);
+ if (pmgntframe == NULL)
+ goto exit;
+
+ // update attribute
+ pattrib = &pmgntframe->attrib;
+ update_mgntframe_attrib(padapter, pattrib);
+ pattrib->qsel = 0x10;
+ pattrib->pktlen = pattrib->last_txcmdsz = TotalPacketLen - TXDESC_OFFSET;
+ _rtw_memcpy(pmgntframe->buf_addr, ReservedPagePacket, TotalPacketLen);
+
+ rtw_hal_mgnt_xmit(padapter, pmgntframe);
+
+ DBG_8192C("%s: Set RSVD page location to Fw\n", __FUNCTION__);
+ FillH2CCmd(padapter, RSVD_PAGE_EID, sizeof(RsvdPageLoc), (u8*)&RsvdPageLoc);
+
+exit:
+ rtw_mfree(ReservedPagePacket, 1024);
+}
+
+void rtl8723a_set_BTCoex_AP_mode_FwRsvdPkt_cmd(PADAPTER padapter)
+{
+ PHAL_DATA_TYPE pHalData;
+ u8 bRecover = _FALSE;
+
+
+ DBG_8192C("+%s\n", __FUNCTION__);
+
+ pHalData = GET_HAL_DATA(padapter);
+
+ // Set FWHW_TXQ_CTRL 0x422[6]=0 to tell Hw the packet is not a real beacon frame.
+ if (pHalData->RegFwHwTxQCtrl & BIT(6))
+ bRecover = _TRUE;
+
+ // To tell Hw the packet is not a real beacon frame.
+ pHalData->RegFwHwTxQCtrl &= ~BIT(6);
+ rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, pHalData->RegFwHwTxQCtrl);
+ SetFwRsvdPagePkt_BTCoex(padapter);
+
+ // To make sure that if there exists an adapter which would like to send beacon.
+ // If exists, the origianl value of 0x422[6] will be 1, we should check this to
+ // prevent from setting 0x422[6] to 0 after download reserved page, or it will cause
+ // the beacon cannot be sent by HW.
+ // 2010.06.23. Added by tynli.
+ if (bRecover)
+ {
+ pHalData->RegFwHwTxQCtrl |= BIT(6);
+ rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, pHalData->RegFwHwTxQCtrl);
+ }
+}
+#endif
+
+#ifdef CONFIG_P2P_PS
+void rtl8192c_set_p2p_ps_offload_cmd(_adapter* padapter, u8 p2p_ps_state)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
+ struct wifidirect_info *pwdinfo = &( padapter->wdinfo );
+ struct P2P_PS_Offload_t *p2p_ps_offload = &pHalData->p2p_ps_offload;
+ u8 i;
+
+_func_enter_;
+
+ switch(p2p_ps_state)
+ {
+ case P2P_PS_DISABLE:
+ DBG_8192C("P2P_PS_DISABLE \n");
+ _rtw_memset(p2p_ps_offload, 0 ,1);
+ break;
+ case P2P_PS_ENABLE:
+ DBG_8192C("P2P_PS_ENABLE \n");
+ // update CTWindow value.
+ if( pwdinfo->ctwindow > 0 )
+ {
+ p2p_ps_offload->CTWindow_En = 1;
+ rtw_write8(padapter, REG_P2P_CTWIN, pwdinfo->ctwindow);
+ }
+
+ // hw only support 2 set of NoA
+ for( i=0 ; i<pwdinfo->noa_num ; i++)
+ {
+ // To control the register setting for which NOA
+ rtw_write8(padapter, REG_NOA_DESC_SEL, (i << 4));
+ if(i == 0)
+ p2p_ps_offload->NoA0_En = 1;
+ else
+ p2p_ps_offload->NoA1_En = 1;
+
+ // config P2P NoA Descriptor Register
+ //DBG_8192C("%s(): noa_duration = %x\n",__FUNCTION__,pwdinfo->noa_duration[i]);
+ rtw_write32(padapter, REG_NOA_DESC_DURATION, pwdinfo->noa_duration[i]);
+
+ //DBG_8192C("%s(): noa_interval = %x\n",__FUNCTION__,pwdinfo->noa_interval[i]);
+ rtw_write32(padapter, REG_NOA_DESC_INTERVAL, pwdinfo->noa_interval[i]);
+
+ //DBG_8192C("%s(): start_time = %x\n",__FUNCTION__,pwdinfo->noa_start_time[i]);
+ rtw_write32(padapter, REG_NOA_DESC_START, pwdinfo->noa_start_time[i]);
+
+ //DBG_8192C("%s(): noa_count = %x\n",__FUNCTION__,pwdinfo->noa_count[i]);
+ rtw_write8(padapter, REG_NOA_DESC_COUNT, pwdinfo->noa_count[i]);
+ }
+
+ if( (pwdinfo->opp_ps == 1) || (pwdinfo->noa_num > 0) )
+ {
+ // rst p2p circuit
+ rtw_write8(padapter, REG_DUAL_TSF_RST, BIT(4));
+
+ p2p_ps_offload->Offload_En = 1;
+
+ if(rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
+ {
+ p2p_ps_offload->role= 1;
+ p2p_ps_offload->AllStaSleep = 0;
+ }
+ else
+ {
+ p2p_ps_offload->role= 0;
+ }
+
+ p2p_ps_offload->discovery = 0;
+ }
+ break;
+ case P2P_PS_SCAN:
+ DBG_8192C("P2P_PS_SCAN \n");
+ p2p_ps_offload->discovery = 1;
+ break;
+ case P2P_PS_SCAN_DONE:
+ DBG_8192C("P2P_PS_SCAN_DONE \n");
+ p2p_ps_offload->discovery = 0;
+ pwdinfo->p2p_ps_state = P2P_PS_ENABLE;
+ break;
+ default:
+ break;
+ }
+
+ FillH2CCmd(padapter, P2P_PS_OFFLOAD_EID, 1, (u8 *)p2p_ps_offload);
+
+_func_exit_;
+
+}
+#endif //CONFIG_P2P_PS
+
+#ifdef CONFIG_IOL
+#include <rtw_iol.h>
+#ifdef CONFIG_USB_HCI
+#include <usb_ops.h>
+#endif
+int rtl8192c_IOL_exec_cmds_sync(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms, u32 bndy_cnt)
+{
+ IO_OFFLOAD_LOC IoOffloadLoc;
+ u32 start_time = rtw_get_current_time();
+ u32 passing_time_ms;
+ u8 polling_ret;
+ int ret = _FAIL;
+
+ if (rtw_IOL_append_END_cmd(xmit_frame) != _SUCCESS)
+ goto exit;
+#ifdef CONFIG_USB_HCI
+ {
+ struct pkt_attrib *pattrib = &xmit_frame->attrib;
+ if(rtw_usb_bulk_size_boundary(adapter,TXDESC_SIZE+pattrib->last_txcmdsz))
+ {
+ if (rtw_IOL_append_END_cmd(xmit_frame) != _SUCCESS)
+ goto exit;
+ }
+ }
+#endif //CONFIG_USB_HCI
+
+
+ dump_mgntframe_and_wait(adapter, xmit_frame, max_wating_ms);
+
+ IoOffloadLoc.LocCmd = 0;
+ if(_SUCCESS != FillH2CCmd(adapter, H2C_92C_IO_OFFLOAD, sizeof(IO_OFFLOAD_LOC), (u8 *)&IoOffloadLoc))
+ goto exit;
+
+ //polling if the IO offloading is done
+ while( (passing_time_ms=rtw_get_passing_time_ms(start_time)) <= max_wating_ms) {
+ #if 0 //C2H
+ if(0xff == rtw_read8(adapter, REG_C2HEVT_CLEAR))
+ break;
+ #else// 0x1c3
+ if(0x00 != (polling_ret=rtw_read8(adapter, 0x1c3)))
+ break;
+ #endif
+ rtw_msleep_os(5);
+ }
+ #if 0 //debug
+ DBG_871X("IOL %s, polling_ret:0x%02x, 0x1c0=0x%08x, 0x1c4=0x%08x, 0x1cc=0x%08x, 0x1e8=0x%08x, 0x130=0x%08x, 0x134=0x%08x\n"
+ , polling_ret==0xff?"success":"error"
+ , polling_ret
+ , rtw_read32(adapter, 0x1c0)
+ , rtw_read32(adapter, 0x1c4)
+ , rtw_read32(adapter, 0x1cc)
+ , rtw_read32(adapter, 0x1e8)
+ , rtw_read32(adapter, 0x130)
+ , rtw_read32(adapter, 0x134)
+ );
+ rtw_write32(adapter, 0x1c0, 0x0);
+ #endif
+
+ if(polling_ret == 0xff)
+ ret =_SUCCESS;
+ else {
+ DBG_871X("IOL %s, polling_ret:0x%02x\n"
+ //", 0x1c0=0x%08x, 0x1c4=0x%08x, 0x1cc=0x%08x, 0x1e8=0x%08x, 0x130=0x%08x, 0x134=0x%08x\n"
+ , polling_ret==0xff?"success":"error"
+ , polling_ret
+ //, rtw_read32(adapter, 0x1c0)
+ //, rtw_read32(adapter, 0x1c4)
+ //, rtw_read32(adapter, 0x1cc)
+ //, rtw_read32(adapter, 0x1e8)
+ //, rtw_read32(adapter, 0x130)
+ //, rtw_read32(adapter, 0x134)
+ );
+ #if 0 //debug
+ rtw_write16(adapter, 0x1c4, 0x0000);
+ rtw_msleep_os(10);
+ DBG_871X("after reset, 0x1c4=0x%08x\n", rtw_read32(adapter, 0x1c4));
+ #endif
+
+ }
+
+ {
+ #if 0 //C2H
+ u32 c2h_evt;
+ int i;
+ c2h_evt = rtw_read32(adapter, REG_C2HEVT_MSG_NORMAL);
+ DBG_871X("%s io-offloading complete, in %ums: 0x%08x\n", __FUNCTION__, passing_time_ms, c2h_evt);
+ rtw_write8(adapter, REG_C2HEVT_CLEAR, 0x0);
+ #else// 0x1c3
+ //DBG_871X("%s IOF complete in %ums\n", __FUNCTION__, passing_time_ms);
+ rtw_write8(adapter, 0x1c3, 0x0);
+ #endif
+ }
+
+exit:
+ return ret;
+
+}
+#endif //CONFIG_IOL
+
+#ifdef CONFIG_TSF_RESET_OFFLOAD
+/*
+ ask FW to Reset sync register at Beacon early interrupt
+*/
+u8 rtl8723c_reset_tsf(_adapter *padapter, u8 reset_port )
+{
+ u8 buf[2];
+ u8 res=_SUCCESS;
+
+_func_enter_;
+ if (IFACE_PORT0==reset_port) {
+ buf[0] = 0x1; buf[1] = 0;
+
+ } else{
+ buf[0] = 0x0; buf[1] = 0x1;
+ }
+ FillH2CCmd(padapter, H2C_RESET_TSF, 2, buf);
+_func_exit_;
+
+ return res;
+}
+#endif // CONFIG_TSF_RESET_OFFLOAD
+
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_dm.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_dm.c
index 6d82a0f7ab9a..bab4925b0959 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_dm.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_dm.c
@@ -1,578 +1,581 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-//============================================================
-// Description:
-//
-// This file is for 92CE/92CU dynamic mechanism only
-//
-//
-//============================================================
-#define _RTL8723A_DM_C_
-
-//============================================================
-// include files
-//============================================================
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <rtw_byteorder.h>
-
-#include <rtl8723a_hal.h>
-
-//============================================================
-// Global var
-//============================================================
-
-
-static VOID
-dm_CheckProtection(
- IN PADAPTER Adapter
- )
-{
-#if 0
- PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo);
- u1Byte CurRate, RateThreshold;
-
- if(pMgntInfo->pHTInfo->bCurBW40MHz)
- RateThreshold = MGN_MCS1;
- else
- RateThreshold = MGN_MCS3;
-
- if(Adapter->TxStats.CurrentInitTxRate <= RateThreshold)
- {
- pMgntInfo->bDmDisableProtect = TRUE;
- DbgPrint("Forced disable protect: %x\n", Adapter->TxStats.CurrentInitTxRate);
- }
- else
- {
- pMgntInfo->bDmDisableProtect = FALSE;
- DbgPrint("Enable protect: %x\n", Adapter->TxStats.CurrentInitTxRate);
- }
-#endif
-}
-
-static VOID
-dm_CheckStatistics(
- IN PADAPTER Adapter
- )
-{
-#if 0
- if(!Adapter->MgntInfo.bMediaConnect)
- return;
-
- //2008.12.10 tynli Add for getting Current_Tx_Rate_Reg flexibly.
- rtw_hal_get_hwreg( Adapter, HW_VAR_INIT_TX_RATE, (pu1Byte)(&Adapter->TxStats.CurrentInitTxRate) );
-
- // Calculate current Tx Rate(Successful transmited!!)
-
- // Calculate current Rx Rate(Successful received!!)
-
- //for tx tx retry count
- rtw_hal_get_hwreg( Adapter, HW_VAR_RETRY_COUNT, (pu1Byte)(&Adapter->TxStats.NumTxRetryCount) );
-#endif
-}
-
-static void dm_CheckPbcGPIO(_adapter *padapter)
-{
- u8 tmp1byte;
- u8 bPbcPressed = _FALSE;
-
- if(!padapter->registrypriv.hw_wps_pbc)
- return;
-
-#ifdef CONFIG_USB_HCI
- tmp1byte = rtw_read8(padapter, GPIO_IO_SEL);
- tmp1byte |= (HAL_8192C_HW_GPIO_WPS_BIT);
- rtw_write8(padapter, GPIO_IO_SEL, tmp1byte); //enable GPIO[2] as output mode
-
- tmp1byte &= ~(HAL_8192C_HW_GPIO_WPS_BIT);
- rtw_write8(padapter, GPIO_IN, tmp1byte); //reset the floating voltage level
-
- tmp1byte = rtw_read8(padapter, GPIO_IO_SEL);
- tmp1byte &= ~(HAL_8192C_HW_GPIO_WPS_BIT);
- rtw_write8(padapter, GPIO_IO_SEL, tmp1byte); //enable GPIO[2] as input mode
-
- tmp1byte =rtw_read8(padapter, GPIO_IN);
-
- if (tmp1byte == 0xff)
- return ;
-
- if (tmp1byte&HAL_8192C_HW_GPIO_WPS_BIT)
- {
- bPbcPressed = _TRUE;
- }
-#else
- tmp1byte = rtw_read8(padapter, GPIO_IN);
- //RT_TRACE(COMP_IO, DBG_TRACE, ("dm_CheckPbcGPIO - %x\n", tmp1byte));
-
- if (tmp1byte == 0xff || padapter->init_adpt_in_progress)
- return ;
-
- if((tmp1byte&HAL_8192C_HW_GPIO_WPS_BIT)==0)
- {
- bPbcPressed = _TRUE;
- }
-#endif
-
- if( _TRUE == bPbcPressed)
- {
- // Here we only set bPbcPressed to true
- // After trigger PBC, the variable will be set to false
- DBG_8192C("CheckPbcGPIO - PBC is pressed\n");
-
-#ifdef RTK_DMP_PLATFORM
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12))
- kobject_uevent(&padapter->pnetdev->dev.kobj, KOBJ_NET_PBC);
-#else
- kobject_hotplug(&padapter->pnetdev->class_dev.kobj, KOBJ_NET_PBC);
-#endif
-#else
-
- if ( padapter->pid[0] == 0 )
- { // 0 is the default value and it means the application monitors the HW PBC doesn't privde its pid to driver.
- return;
- }
-
-#ifdef PLATFORM_LINUX
- rtw_signal_process(padapter->pid[0], SIGUSR1);
-#endif
-#endif
- }
-}
-
-#ifdef CONFIG_PCI_HCI
-//
-// Description:
-// Perform interrupt migration dynamically to reduce CPU utilization.
-//
-// Assumption:
-// 1. Do not enable migration under WIFI test.
-//
-// Created by Roger, 2010.03.05.
-//
-VOID
-dm_InterruptMigration(
- IN PADAPTER Adapter
- )
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
- BOOLEAN bCurrentIntMt, bCurrentACIntDisable;
- BOOLEAN IntMtToSet = _FALSE;
- BOOLEAN ACIntToSet = _FALSE;
-
-
- // Retrieve current interrupt migration and Tx four ACs IMR settings first.
- bCurrentIntMt = pHalData->bInterruptMigration;
- bCurrentACIntDisable = pHalData->bDisableTxInt;
-
- //
- // <Roger_Notes> Currently we use busy traffic for reference instead of RxIntOK counts to prevent non-linear Rx statistics
- // when interrupt migration is set before. 2010.03.05.
- //
- if(!Adapter->registrypriv.wifi_spec &&
- (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) &&
- pmlmepriv->LinkDetectInfo.bHigherBusyTraffic)
- {
- IntMtToSet = _TRUE;
-
- // To check whether we should disable Tx interrupt or not.
- if(pmlmepriv->LinkDetectInfo.bHigherBusyRxTraffic )
- ACIntToSet = _TRUE;
- }
-
- //Update current settings.
- if( bCurrentIntMt != IntMtToSet ){
- DBG_8192C("%s(): Update interrrupt migration(%d)\n",__FUNCTION__,IntMtToSet);
- if(IntMtToSet)
- {
- //
- // <Roger_Notes> Set interrrupt migration timer and corresponging Tx/Rx counter.
- // timer 25ns*0xfa0=100us for 0xf packets.
- // 2010.03.05.
- //
- rtw_write32(Adapter, REG_INT_MIG, 0xff000fa0);// 0x306:Rx, 0x307:Tx
- pHalData->bInterruptMigration = IntMtToSet;
- }
- else
- {
- // Reset all interrupt migration settings.
- rtw_write32(Adapter, REG_INT_MIG, 0);
- pHalData->bInterruptMigration = IntMtToSet;
- }
- }
-
- /*if( bCurrentACIntDisable != ACIntToSet ){
- DBG_8192C("%s(): Update AC interrrupt(%d)\n",__FUNCTION__,ACIntToSet);
- if(ACIntToSet) // Disable four ACs interrupts.
- {
- //
- // <Roger_Notes> Disable VO, VI, BE and BK four AC interrupts to gain more efficient CPU utilization.
- // When extremely highly Rx OK occurs, we will disable Tx interrupts.
- // 2010.03.05.
- //
- UpdateInterruptMask8192CE( Adapter, 0, RT_AC_INT_MASKS );
- pHalData->bDisableTxInt = ACIntToSet;
- }
- else// Enable four ACs interrupts.
- {
- UpdateInterruptMask8192CE( Adapter, RT_AC_INT_MASKS, 0 );
- pHalData->bDisableTxInt = ACIntToSet;
- }
- }*/
-
-}
-
-#endif
-
-//
-// Initialize GPIO setting registers
-//
-static void
-dm_InitGPIOSetting(
- IN PADAPTER Adapter
- )
-{
- PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
-
- u8 tmp1byte;
-
- tmp1byte = rtw_read8(Adapter, REG_GPIO_MUXCFG);
- tmp1byte &= (GPIOSEL_GPIO | ~GPIOSEL_ENBT);
-
- rtw_write8(Adapter, REG_GPIO_MUXCFG, tmp1byte);
-}
-//============================================================
-// functions
-//============================================================
-static void Init_ODM_ComInfo_8723a(PADAPTER Adapter)
-{
-
- PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
- PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
- u8 cut_ver,fab_ver;
-
- //
- // Init Value
- //
- _rtw_memset(pDM_Odm,0,sizeof(pDM_Odm));
-
- pDM_Odm->Adapter = Adapter;
- ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_PLATFORM,ODM_CE);
- if(Adapter->interface_type == RTW_GSPI )
- ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_INTERFACE,ODM_ITRF_SDIO);
- else
- ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_INTERFACE,Adapter->interface_type);//RTL871X_HCI_TYPE
-
- ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_IC_TYPE,ODM_RTL8723A);
-
-
- if(IS_8723A_A_CUT(pHalData->VersionID))
- {
- fab_ver = ODM_UMC;
- cut_ver = ODM_CUT_A;
- }
- else if(IS_8723A_B_CUT(pHalData->VersionID))
- {
- fab_ver = ODM_UMC;
- cut_ver = ODM_CUT_B;
- }
- else
- {
- fab_ver = ODM_TSMC;
- cut_ver = ODM_CUT_A;
- }
- ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_FAB_VER,fab_ver);
- ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_CUT_VER,cut_ver);
- ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_MP_TEST_CHIP,IS_NORMAL_CHIP(pHalData->VersionID));
-
-#ifdef CONFIG_USB_HCI
- ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_BOARD_TYPE,pHalData->BoardType);
-
- if(pHalData->BoardType == BOARD_USB_High_PA){
- ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_EXT_LNA,_TRUE);
- ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_EXT_PA,_TRUE);
- }
-#endif
- ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_PATCH_ID,pHalData->CustomerID);
- // ODM_CMNINFO_BINHCT_TEST only for MP Team
- ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_BWIFI_TEST,Adapter->registrypriv.wifi_spec);
-
-
- if(pHalData->rf_type == RF_1T1R){
- ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_RF_TYPE,ODM_1T1R);
- }
- else if(pHalData->rf_type == RF_2T2R){
- ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_RF_TYPE,ODM_2T2R);
- }
- else if(pHalData->rf_type == RF_1T2R){
- ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_RF_TYPE,ODM_1T2R);
- }
-}
-static void Update_ODM_ComInfo_8723a(PADAPTER Adapter)
-{
- struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
- struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
- struct pwrctrl_priv *pwrctrlpriv = &Adapter->pwrctrlpriv;
- PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
- PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
- int i;
- pdmpriv->InitODMFlag = ODM_BB_DIG |
-#ifdef CONFIG_ODM_REFRESH_RAMASK
- ODM_BB_RA_MASK |
-#endif
- ODM_BB_DYNAMIC_TXPWR |
- ODM_BB_FA_CNT |
- ODM_BB_RSSI_MONITOR |
- ODM_BB_CCK_PD |
- ODM_BB_PWR_SAVE |
- ODM_MAC_EDCA_TURBO |
- ODM_RF_TX_PWR_TRACK |
- ODM_RF_CALIBRATION ;
- //
- // Pointer reference
- //
- //ODM_CMNINFO_MAC_PHY_MODE pHalData->MacPhyMode92D
- // ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_MAC_PHY_MODE,&(pDM_Odm->u1Byte_temp));
-
-
-#ifdef CONFIG_ANTENNA_DIVERSITY
- if(pHalData->AntDivCfg)
- pdmpriv->InitODMFlag |= ODM_BB_ANT_DIV;
-#endif
-
-#if (MP_DRIVER==1)
- if (Adapter->registrypriv.mp_mode == 1)
- {
- pdmpriv->InitODMFlag = ODM_RF_CALIBRATION |
- ODM_RF_TX_PWR_TRACK;
- }
-#endif//(MP_DRIVER==1)
-
- ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_ABILITY,pdmpriv->InitODMFlag);
-
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_TX_UNI,&(Adapter->xmitpriv.tx_bytes));
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_RX_UNI,&(Adapter->recvpriv.rx_bytes));
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_WM_MODE,&(pmlmeext->cur_wireless_mode));
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_SEC_CHNL_OFFSET,&(pHalData->nCur40MhzPrimeSC));
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_SEC_MODE,&(Adapter->securitypriv.dot11PrivacyAlgrthm));
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BW,&(pHalData->CurrentChannelBW ));
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_CHNL,&( pHalData->CurrentChannel));
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_NET_CLOSED,&( Adapter->net_closed));
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_MP_MODE,&(Adapter->registrypriv.mp_mode));
-
- //================= only for 8192D =================
- /*
- //pHalData->CurrentBandType92D
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BAND,&(pDM_Odm->u1Byte_temp));
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_DMSP_GET_VALUE,&(pDM_Odm->u1Byte_temp));
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BUDDY_ADAPTOR,&(pDM_Odm->PADAPTER_temp));
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_DMSP_IS_MASTER,&(pDM_Odm->u1Byte_temp));
- //================= only for 8192D =================
- // driver havn't those variable now
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BT_OPERATION,&(pDM_Odm->u1Byte_temp));
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BT_DISABLE_EDCA,&(pDM_Odm->u1Byte_temp));
- */
-
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_SCAN,&(pmlmepriv->bScanInProcess));
- ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_POWER_SAVING,&(pwrctrlpriv->bpower_saving));
-
-
- for(i=0; i< NUM_STA; i++)
- {
- //pDM_Odm->pODM_StaInfo[i] = NULL;
- ODM_CmnInfoPtrArrayHook(pDM_Odm, ODM_CMNINFO_STA_STATUS,i,NULL);
- }
-}
-
-void
-rtl8723a_InitHalDm(
- IN PADAPTER Adapter
- )
-{
- PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
- PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
-
- u8 i;
-
- pdmpriv->DM_Type = DM_Type_ByDriver;
- pdmpriv->DMFlag = DYNAMIC_FUNC_DISABLE;
-
-#ifdef CONFIG_BT_COEXIST
- pdmpriv->DMFlag |= DYNAMIC_FUNC_BT;
-// btdm_InitBtCoexistDM(Adapter); // Move to BT_CoexistMechanism()
-#endif
- pdmpriv->InitDMFlag = pdmpriv->DMFlag;
-
- Update_ODM_ComInfo_8723a(Adapter);
- ODM_DMInit(pDM_Odm);
- // Save REG_INIDATA_RATE_SEL value for TXDESC.
- for(i = 0 ; i<32 ; i++)
- {
- pdmpriv->INIDATA_RATE[i] = rtw_read8(Adapter, REG_INIDATA_RATE_SEL+i) & 0x3f;
- }
-
-}
-
-VOID
-rtl8723a_HalDmWatchDog(
- IN PADAPTER Adapter
- )
-{
- BOOLEAN bFwCurrentInPSMode = _FALSE;
- BOOLEAN bFwPSAwake = _TRUE;
- u8 hw_init_completed = _FALSE;
- PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
-#ifdef CONFIG_CONCURRENT_MODE
- PADAPTER pbuddy_adapter = Adapter->pbuddy_adapter;
-#endif //CONFIG_CONCURRENT_MODE
-
- hw_init_completed = Adapter->hw_init_completed;
-
- if (hw_init_completed == _FALSE)
- goto skip_dm;
-
-#ifdef CONFIG_LPS
- #ifdef CONFIG_CONCURRENT_MODE
- if (Adapter->iface_type != IFACE_PORT0 && pbuddy_adapter) {
- bFwCurrentInPSMode = pbuddy_adapter->pwrctrlpriv.bFwCurrentInPSMode;
- rtw_hal_get_hwreg(pbuddy_adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bFwPSAwake));
- } else
- #endif //CONFIG_CONCURRENT_MODE
- {
- bFwCurrentInPSMode = Adapter->pwrctrlpriv.bFwCurrentInPSMode;
- rtw_hal_get_hwreg(Adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bFwPSAwake));
- }
-#endif
-
-#ifdef CONFIG_P2P_PS
- // Fw is under p2p powersaving mode, driver should stop dynamic mechanism.
- // modifed by thomas. 2011.06.11.
- if(Adapter->wdinfo.p2p_ps_mode)
- bFwPSAwake = _FALSE;
-#endif //CONFIG_P2P_PS
-
- if( (hw_init_completed == _TRUE)
- && ((!bFwCurrentInPSMode) && bFwPSAwake))
- {
- //
- // Calculate Tx/Rx statistics.
- //
- dm_CheckStatistics(Adapter);
-
-
-#ifdef CONFIG_CONCURRENT_MODE
- if(Adapter->adapter_type > PRIMARY_ADAPTER)
- goto _record_initrate;
-#endif
-
- //
- // Dynamically switch RTS/CTS protection.
- //
- //dm_CheckProtection(Adapter);
-
-#ifdef CONFIG_PCI_HCI
- // 20100630 Joseph: Disable Interrupt Migration mechanism temporarily because it degrades Rx throughput.
- // Tx Migration settings.
- //dm_InterruptMigration(Adapter);
-
- //if(Adapter->HalFunc.TxCheckStuckHandler(Adapter))
- // PlatformScheduleWorkItem(&(GET_HAL_DATA(Adapter)->HalResetWorkItem));
-#endif
-_record_initrate:
-
- // Read REG_INIDATA_RATE_SEL value for TXDESC.
- if(check_fwstate(&Adapter->mlmepriv, WIFI_STATION_STATE) == _TRUE)
- {
- pdmpriv->INIDATA_RATE[0] = rtw_read8(Adapter, REG_INIDATA_RATE_SEL) & 0x3f;
- }
- else
- {
- u8 i;
- for(i=1 ; i < (Adapter->stapriv.asoc_sta_count + 1); i++)
- {
- pdmpriv->INIDATA_RATE[i] = rtw_read8(Adapter, (REG_INIDATA_RATE_SEL+i)) & 0x3f;
- }
- }
- }
-
-
- //ODM
- if (hw_init_completed == _TRUE)
- {
- u8 bLinked=_FALSE;
-
- #ifdef CONFIG_DISABLE_ODM
- pHalData->odmpriv.SupportAbility = 0;
- #endif
-
- if(rtw_linked_check(Adapter))
- bLinked = _TRUE;
-
-#ifdef CONFIG_CONCURRENT_MODE
- if(pbuddy_adapter && rtw_linked_check(pbuddy_adapter))
- bLinked = _TRUE;
-#endif //CONFIG_CONCURRENT_MODE
-
- ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_LINK, bLinked);
- ODM_DMWatchdog(&pHalData->odmpriv);
-
- }
-
-skip_dm:
-
- // Check GPIO to determine current RF on/off and Pbc status.
- // Check Hardware Radio ON/OFF or not
-#ifdef CONFIG_PCI_HCI
- if(pHalData->bGpioHwWpsPbc)
-#endif
- {
- dm_CheckPbcGPIO(Adapter); // Add by hpfan 2008-03-11
- }
-
-}
-
-void rtl8723a_init_dm_priv(IN PADAPTER Adapter)
-{
- PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
- PDM_ODM_T podmpriv = &pHalData->odmpriv;
- _rtw_memset(pdmpriv, 0, sizeof(struct dm_priv));
- Init_ODM_ComInfo_8723a(Adapter);
-#ifdef CONFIG_SW_ANTENNA_DIVERSITY
- //_init_timer(&(pdmpriv->SwAntennaSwitchTimer), Adapter->pnetdev , odm_SW_AntennaSwitchCallback, Adapter);
- ODM_InitAllTimers(podmpriv );
-#endif
-}
-
-void rtl8723a_deinit_dm_priv(IN PADAPTER Adapter)
-{
- PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
- PDM_ODM_T podmpriv = &pHalData->odmpriv;
-#ifdef CONFIG_SW_ANTENNA_DIVERSITY
- //_cancel_timer_ex(&pdmpriv->SwAntennaSwitchTimer);
- ODM_CancelAllTimers(podmpriv);
-#endif
-}
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+//============================================================
+// Description:
+//
+// This file is for 92CE/92CU dynamic mechanism only
+//
+//
+//============================================================
+#define _RTL8723A_DM_C_
+
+//============================================================
+// include files
+//============================================================
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+#include <rtw_byteorder.h>
+
+#include <rtl8723a_hal.h>
+
+//============================================================
+// Global var
+//============================================================
+
+
+static VOID
+dm_CheckProtection(
+ IN PADAPTER Adapter
+ )
+{
+#if 0
+ PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo);
+ u1Byte CurRate, RateThreshold;
+
+ if(pMgntInfo->pHTInfo->bCurBW40MHz)
+ RateThreshold = MGN_MCS1;
+ else
+ RateThreshold = MGN_MCS3;
+
+ if(Adapter->TxStats.CurrentInitTxRate <= RateThreshold)
+ {
+ pMgntInfo->bDmDisableProtect = TRUE;
+ DbgPrint("Forced disable protect: %x\n", Adapter->TxStats.CurrentInitTxRate);
+ }
+ else
+ {
+ pMgntInfo->bDmDisableProtect = FALSE;
+ DbgPrint("Enable protect: %x\n", Adapter->TxStats.CurrentInitTxRate);
+ }
+#endif
+}
+
+static VOID
+dm_CheckStatistics(
+ IN PADAPTER Adapter
+ )
+{
+#if 0
+ if(!Adapter->MgntInfo.bMediaConnect)
+ return;
+
+ //2008.12.10 tynli Add for getting Current_Tx_Rate_Reg flexibly.
+ rtw_hal_get_hwreg( Adapter, HW_VAR_INIT_TX_RATE, (pu1Byte)(&Adapter->TxStats.CurrentInitTxRate) );
+
+ // Calculate current Tx Rate(Successful transmited!!)
+
+ // Calculate current Rx Rate(Successful received!!)
+
+ //for tx tx retry count
+ rtw_hal_get_hwreg( Adapter, HW_VAR_RETRY_COUNT, (pu1Byte)(&Adapter->TxStats.NumTxRetryCount) );
+#endif
+}
+
+static void dm_CheckPbcGPIO(_adapter *padapter)
+{
+ u8 tmp1byte;
+ u8 bPbcPressed = _FALSE;
+
+ if(!padapter->registrypriv.hw_wps_pbc)
+ return;
+
+#ifdef CONFIG_USB_HCI
+ tmp1byte = rtw_read8(padapter, GPIO_IO_SEL);
+ tmp1byte |= (HAL_8192C_HW_GPIO_WPS_BIT);
+ rtw_write8(padapter, GPIO_IO_SEL, tmp1byte); //enable GPIO[2] as output mode
+
+ tmp1byte &= ~(HAL_8192C_HW_GPIO_WPS_BIT);
+ rtw_write8(padapter, GPIO_IN, tmp1byte); //reset the floating voltage level
+
+ tmp1byte = rtw_read8(padapter, GPIO_IO_SEL);
+ tmp1byte &= ~(HAL_8192C_HW_GPIO_WPS_BIT);
+ rtw_write8(padapter, GPIO_IO_SEL, tmp1byte); //enable GPIO[2] as input mode
+
+ tmp1byte =rtw_read8(padapter, GPIO_IN);
+
+ if (tmp1byte == 0xff)
+ return ;
+
+ if (tmp1byte&HAL_8192C_HW_GPIO_WPS_BIT)
+ {
+ bPbcPressed = _TRUE;
+ }
+#else
+ tmp1byte = rtw_read8(padapter, GPIO_IN);
+ //RT_TRACE(COMP_IO, DBG_TRACE, ("dm_CheckPbcGPIO - %x\n", tmp1byte));
+
+ if (tmp1byte == 0xff || padapter->init_adpt_in_progress)
+ return ;
+
+ if((tmp1byte&HAL_8192C_HW_GPIO_WPS_BIT)==0)
+ {
+ bPbcPressed = _TRUE;
+ }
+#endif
+
+ if( _TRUE == bPbcPressed)
+ {
+ // Here we only set bPbcPressed to true
+ // After trigger PBC, the variable will be set to false
+ DBG_8192C("CheckPbcGPIO - PBC is pressed\n");
+
+#ifdef RTK_DMP_PLATFORM
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12))
+ kobject_uevent(&padapter->pnetdev->dev.kobj, KOBJ_NET_PBC);
+#else
+ kobject_hotplug(&padapter->pnetdev->class_dev.kobj, KOBJ_NET_PBC);
+#endif
+#else
+
+ if ( padapter->pid[0] == 0 )
+ { // 0 is the default value and it means the application monitors the HW PBC doesn't privde its pid to driver.
+ return;
+ }
+
+#ifdef PLATFORM_LINUX
+ rtw_signal_process(padapter->pid[0], SIGUSR1);
+#endif
+#endif
+ }
+}
+
+#ifdef CONFIG_PCI_HCI
+//
+// Description:
+// Perform interrupt migration dynamically to reduce CPU utilization.
+//
+// Assumption:
+// 1. Do not enable migration under WIFI test.
+//
+// Created by Roger, 2010.03.05.
+//
+VOID
+dm_InterruptMigration(
+ IN PADAPTER Adapter
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ struct mlme_priv *pmlmepriv = &(Adapter->mlmepriv);
+ BOOLEAN bCurrentIntMt, bCurrentACIntDisable;
+ BOOLEAN IntMtToSet = _FALSE;
+ BOOLEAN ACIntToSet = _FALSE;
+
+
+ // Retrieve current interrupt migration and Tx four ACs IMR settings first.
+ bCurrentIntMt = pHalData->bInterruptMigration;
+ bCurrentACIntDisable = pHalData->bDisableTxInt;
+
+ //
+ // <Roger_Notes> Currently we use busy traffic for reference instead of RxIntOK counts to prevent non-linear Rx statistics
+ // when interrupt migration is set before. 2010.03.05.
+ //
+ if(!Adapter->registrypriv.wifi_spec &&
+ (check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE) &&
+ pmlmepriv->LinkDetectInfo.bHigherBusyTraffic)
+ {
+ IntMtToSet = _TRUE;
+
+ // To check whether we should disable Tx interrupt or not.
+ if(pmlmepriv->LinkDetectInfo.bHigherBusyRxTraffic )
+ ACIntToSet = _TRUE;
+ }
+
+ //Update current settings.
+ if( bCurrentIntMt != IntMtToSet ){
+ DBG_8192C("%s(): Update interrrupt migration(%d)\n",__FUNCTION__,IntMtToSet);
+ if(IntMtToSet)
+ {
+ //
+ // <Roger_Notes> Set interrrupt migration timer and corresponging Tx/Rx counter.
+ // timer 25ns*0xfa0=100us for 0xf packets.
+ // 2010.03.05.
+ //
+ rtw_write32(Adapter, REG_INT_MIG, 0xff000fa0);// 0x306:Rx, 0x307:Tx
+ pHalData->bInterruptMigration = IntMtToSet;
+ }
+ else
+ {
+ // Reset all interrupt migration settings.
+ rtw_write32(Adapter, REG_INT_MIG, 0);
+ pHalData->bInterruptMigration = IntMtToSet;
+ }
+ }
+
+ /*if( bCurrentACIntDisable != ACIntToSet ){
+ DBG_8192C("%s(): Update AC interrrupt(%d)\n",__FUNCTION__,ACIntToSet);
+ if(ACIntToSet) // Disable four ACs interrupts.
+ {
+ //
+ // <Roger_Notes> Disable VO, VI, BE and BK four AC interrupts to gain more efficient CPU utilization.
+ // When extremely highly Rx OK occurs, we will disable Tx interrupts.
+ // 2010.03.05.
+ //
+ UpdateInterruptMask8192CE( Adapter, 0, RT_AC_INT_MASKS );
+ pHalData->bDisableTxInt = ACIntToSet;
+ }
+ else// Enable four ACs interrupts.
+ {
+ UpdateInterruptMask8192CE( Adapter, RT_AC_INT_MASKS, 0 );
+ pHalData->bDisableTxInt = ACIntToSet;
+ }
+ }*/
+
+}
+
+#endif
+
+//
+// Initialize GPIO setting registers
+//
+static void
+dm_InitGPIOSetting(
+ IN PADAPTER Adapter
+ )
+{
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
+
+ u8 tmp1byte;
+
+ tmp1byte = rtw_read8(Adapter, REG_GPIO_MUXCFG);
+ tmp1byte &= (GPIOSEL_GPIO | ~GPIOSEL_ENBT);
+
+ rtw_write8(Adapter, REG_GPIO_MUXCFG, tmp1byte);
+}
+//============================================================
+// functions
+//============================================================
+static void Init_ODM_ComInfo_8723a(PADAPTER Adapter)
+{
+
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
+ PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
+ u8 cut_ver,fab_ver;
+
+ //
+ // Init Value
+ //
+ _rtw_memset(pDM_Odm,0,sizeof(pDM_Odm));
+
+ pDM_Odm->Adapter = Adapter;
+ ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_PLATFORM,ODM_CE);
+ if(Adapter->interface_type == RTW_GSPI )
+ ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_INTERFACE,ODM_ITRF_SDIO);
+ else
+ ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_INTERFACE,Adapter->interface_type);//RTL871X_HCI_TYPE
+
+ ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_IC_TYPE,ODM_RTL8723A);
+
+
+ if(IS_8723A_A_CUT(pHalData->VersionID))
+ {
+ fab_ver = ODM_UMC;
+ cut_ver = ODM_CUT_A;
+ }
+ else if(IS_8723A_B_CUT(pHalData->VersionID))
+ {
+ fab_ver = ODM_UMC;
+ cut_ver = ODM_CUT_B;
+ }
+ else
+ {
+ fab_ver = ODM_TSMC;
+ cut_ver = ODM_CUT_A;
+ }
+ ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_FAB_VER,fab_ver);
+ ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_CUT_VER,cut_ver);
+ ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_MP_TEST_CHIP,IS_NORMAL_CHIP(pHalData->VersionID));
+
+#ifdef CONFIG_USB_HCI
+ ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_BOARD_TYPE,pHalData->BoardType);
+
+ if(pHalData->BoardType == BOARD_USB_High_PA){
+ ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_EXT_LNA,_TRUE);
+ ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_EXT_PA,_TRUE);
+ }
+#endif
+ ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_PATCH_ID,pHalData->CustomerID);
+ // ODM_CMNINFO_BINHCT_TEST only for MP Team
+ ODM_CmnInfoInit(pDM_Odm,ODM_CMNINFO_BWIFI_TEST,Adapter->registrypriv.wifi_spec);
+
+
+ if(pHalData->rf_type == RF_1T1R){
+ ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_RF_TYPE,ODM_1T1R);
+ }
+ else if(pHalData->rf_type == RF_2T2R){
+ ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_RF_TYPE,ODM_2T2R);
+ }
+ else if(pHalData->rf_type == RF_1T2R){
+ ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_RF_TYPE,ODM_1T2R);
+ }
+}
+static void Update_ODM_ComInfo_8723a(PADAPTER Adapter)
+{
+ struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
+ struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
+ struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(Adapter);
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
+ PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
+ struct dm_priv *pdmpriv = &pHalData->dmpriv;
+ int i;
+
+ pdmpriv->InitODMFlag = 0
+ | ODM_BB_DIG
+#ifdef CONFIG_ODM_REFRESH_RAMASK
+ | ODM_BB_RA_MASK
+#endif
+ | ODM_BB_DYNAMIC_TXPWR
+ | ODM_BB_FA_CNT
+ | ODM_BB_RSSI_MONITOR
+ | ODM_BB_CCK_PD
+ | ODM_BB_PWR_SAVE
+ | ODM_MAC_EDCA_TURBO
+ | ODM_RF_TX_PWR_TRACK
+ | ODM_RF_CALIBRATION
+#ifdef CONFIG_ODM_ADAPTIVITY
+ | ODM_BB_ADAPTIVITY
+#endif
+ ;
+
+#ifdef CONFIG_ANTENNA_DIVERSITY
+ if(pHalData->AntDivCfg)
+ pdmpriv->InitODMFlag |= ODM_BB_ANT_DIV;
+#endif
+
+#if (MP_DRIVER==1)
+ if (Adapter->registrypriv.mp_mode == 1) {
+ pdmpriv->InitODMFlag = 0
+ | ODM_RF_CALIBRATION
+ | ODM_RF_TX_PWR_TRACK
+ ;
+ }
+#endif//(MP_DRIVER==1)
+
+#ifdef CONFIG_DISABLE_ODM
+ pdmpriv->InitODMFlag = 0;
+#endif//CONFIG_DISABLE_ODM
+
+ //
+ // Pointer reference
+ //
+ //ODM_CMNINFO_MAC_PHY_MODE pHalData->MacPhyMode92D
+ // ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_MAC_PHY_MODE,&(pDM_Odm->u1Byte_temp));
+
+ ODM_CmnInfoUpdate(pDM_Odm,ODM_CMNINFO_ABILITY,pdmpriv->InitODMFlag);
+
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_TX_UNI,&(Adapter->xmitpriv.tx_bytes));
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_RX_UNI,&(Adapter->recvpriv.rx_bytes));
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_WM_MODE,&(pmlmeext->cur_wireless_mode));
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_SEC_CHNL_OFFSET,&(pHalData->nCur40MhzPrimeSC));
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_SEC_MODE,&(Adapter->securitypriv.dot11PrivacyAlgrthm));
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BW,&(pHalData->CurrentChannelBW ));
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_CHNL,&( pHalData->CurrentChannel));
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_NET_CLOSED,&( Adapter->net_closed));
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_MP_MODE,&(Adapter->registrypriv.mp_mode));
+
+ //================= only for 8192D =================
+ /*
+ //pHalData->CurrentBandType92D
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BAND,&(pDM_Odm->u1Byte_temp));
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_DMSP_GET_VALUE,&(pDM_Odm->u1Byte_temp));
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BUDDY_ADAPTOR,&(pDM_Odm->PADAPTER_temp));
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_DMSP_IS_MASTER,&(pDM_Odm->u1Byte_temp));
+ //================= only for 8192D =================
+ // driver havn't those variable now
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BT_OPERATION,&(pDM_Odm->u1Byte_temp));
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_BT_DISABLE_EDCA,&(pDM_Odm->u1Byte_temp));
+ */
+
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_SCAN,&(pmlmepriv->bScanInProcess));
+ ODM_CmnInfoHook(pDM_Odm,ODM_CMNINFO_POWER_SAVING,&(pwrctrlpriv->bpower_saving));
+
+
+ for(i=0; i< NUM_STA; i++)
+ {
+ //pDM_Odm->pODM_StaInfo[i] = NULL;
+ ODM_CmnInfoPtrArrayHook(pDM_Odm, ODM_CMNINFO_STA_STATUS,i,NULL);
+ }
+}
+
+void
+rtl8723a_InitHalDm(
+ IN PADAPTER Adapter
+ )
+{
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
+ struct dm_priv *pdmpriv = &pHalData->dmpriv;
+ PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
+
+ u8 i;
+
+ pdmpriv->DM_Type = DM_Type_ByDriver;
+ pdmpriv->DMFlag = DYNAMIC_FUNC_DISABLE;
+
+#ifdef CONFIG_BT_COEXIST
+ pdmpriv->DMFlag |= DYNAMIC_FUNC_BT;
+// btdm_InitBtCoexistDM(Adapter); // Move to BT_CoexistMechanism()
+#endif
+ pdmpriv->InitDMFlag = pdmpriv->DMFlag;
+
+ Update_ODM_ComInfo_8723a(Adapter);
+ ODM_DMInit(pDM_Odm);
+ // Save REG_INIDATA_RATE_SEL value for TXDESC.
+ for(i = 0 ; i<32 ; i++)
+ {
+ pdmpriv->INIDATA_RATE[i] = rtw_read8(Adapter, REG_INIDATA_RATE_SEL+i) & 0x3f;
+ }
+
+}
+
+VOID
+rtl8723a_HalDmWatchDog(
+ IN PADAPTER Adapter
+ )
+{
+ BOOLEAN bFwCurrentInPSMode = _FALSE;
+ BOOLEAN bFwPSAwake = _TRUE;
+ u8 hw_init_completed = _FALSE;
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
+ struct dm_priv *pdmpriv = &pHalData->dmpriv;
+#ifdef CONFIG_CONCURRENT_MODE
+ PADAPTER pbuddy_adapter = Adapter->pbuddy_adapter;
+#endif //CONFIG_CONCURRENT_MODE
+
+ hw_init_completed = Adapter->hw_init_completed;
+
+ if (hw_init_completed == _FALSE)
+ goto skip_dm;
+
+#ifdef CONFIG_LPS
+ bFwCurrentInPSMode = adapter_to_pwrctl(Adapter)->bFwCurrentInPSMode;
+ rtw_hal_get_hwreg(Adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bFwPSAwake));
+#endif
+
+#ifdef CONFIG_P2P_PS
+ // Fw is under p2p powersaving mode, driver should stop dynamic mechanism.
+ // modifed by thomas. 2011.06.11.
+ if(Adapter->wdinfo.p2p_ps_mode)
+ bFwPSAwake = _FALSE;
+#endif //CONFIG_P2P_PS
+
+ if( (hw_init_completed == _TRUE)
+ && ((!bFwCurrentInPSMode) && bFwPSAwake))
+ {
+ //
+ // Calculate Tx/Rx statistics.
+ //
+ dm_CheckStatistics(Adapter);
+
+
+#ifdef CONFIG_CONCURRENT_MODE
+ if(Adapter->adapter_type > PRIMARY_ADAPTER)
+ goto _record_initrate;
+#endif
+
+ //
+ // Dynamically switch RTS/CTS protection.
+ //
+ //dm_CheckProtection(Adapter);
+
+#ifdef CONFIG_PCI_HCI
+ // 20100630 Joseph: Disable Interrupt Migration mechanism temporarily because it degrades Rx throughput.
+ // Tx Migration settings.
+ //dm_InterruptMigration(Adapter);
+
+ //if(Adapter->HalFunc.TxCheckStuckHandler(Adapter))
+ // PlatformScheduleWorkItem(&(GET_HAL_DATA(Adapter)->HalResetWorkItem));
+#endif
+_record_initrate:
+
+ // Read REG_INIDATA_RATE_SEL value for TXDESC.
+ if(check_fwstate(&Adapter->mlmepriv, WIFI_STATION_STATE) == _TRUE)
+ {
+ pdmpriv->INIDATA_RATE[0] = rtw_read8(Adapter, REG_INIDATA_RATE_SEL) & 0x3f;
+ }
+ else
+ {
+ u8 i;
+ for(i=1 ; i < (Adapter->stapriv.asoc_sta_count + 1); i++)
+ {
+ pdmpriv->INIDATA_RATE[i] = rtw_read8(Adapter, (REG_INIDATA_RATE_SEL+i)) & 0x3f;
+ }
+ }
+ }
+
+
+ //ODM
+ if (hw_init_completed == _TRUE)
+ {
+ u8 bLinked=_FALSE;
+
+ #ifdef CONFIG_DISABLE_ODM
+ pHalData->odmpriv.SupportAbility = 0;
+ #endif
+
+ if(rtw_linked_check(Adapter))
+ bLinked = _TRUE;
+
+#ifdef CONFIG_CONCURRENT_MODE
+ if(pbuddy_adapter && rtw_linked_check(pbuddy_adapter))
+ bLinked = _TRUE;
+#endif //CONFIG_CONCURRENT_MODE
+
+ ODM_CmnInfoUpdate(&pHalData->odmpriv ,ODM_CMNINFO_LINK, bLinked);
+ ODM_DMWatchdog(&pHalData->odmpriv);
+
+ }
+
+skip_dm:
+
+ // Check GPIO to determine current RF on/off and Pbc status.
+ // Check Hardware Radio ON/OFF or not
+#ifdef CONFIG_PCI_HCI
+ if(pHalData->bGpioHwWpsPbc)
+#endif
+ {
+ dm_CheckPbcGPIO(Adapter); // Add by hpfan 2008-03-11
+ }
+
+}
+
+void rtl8723a_init_dm_priv(IN PADAPTER Adapter)
+{
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
+ struct dm_priv *pdmpriv = &pHalData->dmpriv;
+ PDM_ODM_T podmpriv = &pHalData->odmpriv;
+ _rtw_memset(pdmpriv, 0, sizeof(struct dm_priv));
+ Init_ODM_ComInfo_8723a(Adapter);
+#ifdef CONFIG_SW_ANTENNA_DIVERSITY
+ //_init_timer(&(pdmpriv->SwAntennaSwitchTimer), Adapter->pnetdev , odm_SW_AntennaSwitchCallback, Adapter);
+ ODM_InitAllTimers(podmpriv );
+#endif
+}
+
+void rtl8723a_deinit_dm_priv(IN PADAPTER Adapter)
+{
+ PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter);
+ struct dm_priv *pdmpriv = &pHalData->dmpriv;
+ PDM_ODM_T podmpriv = &pHalData->odmpriv;
+#ifdef CONFIG_SW_ANTENNA_DIVERSITY
+ //_cancel_timer_ex(&pdmpriv->SwAntennaSwitchTimer);
+ ODM_CancelAllTimers(podmpriv);
+#endif
+}
+
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_hal_init.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_hal_init.c
index 2a002f5e5f7c..aef17c95853c 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_hal_init.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_hal_init.c
@@ -37,10 +37,6 @@ _FWDownloadEnable(
if(enable)
{
- // 8051 enable
- tmp = rtw_read8(padapter, REG_SYS_FUNC_EN+1);
- rtw_write8(padapter, REG_SYS_FUNC_EN+1, tmp|0x04);
-
// MCU firmware download enable.
tmp = rtw_read8(padapter, REG_MCUFWDL);
rtw_write8(padapter, REG_MCUFWDL, tmp|0x01);
@@ -230,6 +226,29 @@ exit:
return ret;
}
+void _8051Reset8723A(PADAPTER padapter)
+{
+ u8 tmp;
+
+ // Reset 8051
+ tmp = rtw_read8(padapter, REG_SYS_FUNC_EN + 1);
+ rtw_write8(padapter, REG_SYS_FUNC_EN + 1, tmp & (~BIT2));
+
+ // Reset wrapper
+ tmp = rtw_read8(padapter, REG_RSV_CTRL + 1);
+ rtw_write8(padapter, REG_RSV_CTRL + 1, tmp & (~BIT0));
+
+ // Enable wrapper
+ tmp = rtw_read8(padapter, REG_RSV_CTRL + 1);
+ rtw_write8(padapter, REG_RSV_CTRL + 1, tmp | BIT0);
+
+ // 8051 enable
+ tmp = rtw_read8(padapter, REG_SYS_FUNC_EN+1);
+ rtw_write8(padapter, REG_SYS_FUNC_EN+1, tmp|BIT2);
+
+ DBG_871X("=====> _8051Reset8723A(): 8051 reset success .\n");
+}
+
static s32 _FWFreeToGo(PADAPTER padapter)
{
u32 counter = 0;
@@ -242,7 +261,7 @@ static s32 _FWFreeToGo(PADAPTER padapter)
} while (counter++ < POLLING_READY_TIMEOUT_COUNT);
if (counter >= POLLING_READY_TIMEOUT_COUNT) {
- RT_TRACE(_module_hal_init_c_, _drv_err_, ("%s: chksum report fail! REG_MCUFWDL:0x%08x\n", __FUNCTION__, value32));
+ DBG_871X("%s: chksum report fail! REG_MCUFWDL:0x%08x\n", __FUNCTION__, value32);
return _FAIL;
}
RT_TRACE(_module_hal_init_c_, _drv_info_, ("%s: Checksum report OK! REG_MCUFWDL:0x%08x\n", __FUNCTION__, value32));
@@ -252,6 +271,8 @@ static s32 _FWFreeToGo(PADAPTER padapter)
value32 &= ~WINTINI_RDY;
rtw_write32(padapter, REG_MCUFWDL, value32);
+ _8051Reset8723A(padapter);
+
// polling for FW ready
counter = 0;
do {
@@ -263,7 +284,7 @@ static s32 _FWFreeToGo(PADAPTER padapter)
rtw_udelay_os(5);
} while (counter++ < POLLING_READY_TIMEOUT_COUNT);
- RT_TRACE(_module_hal_init_c_, _drv_err_, ("%s: Polling FW ready fail!! REG_MCUFWDL:0x%08x\n", __FUNCTION__, value32));
+ DBG_871X("%s: Polling FW ready fail!! REG_MCUFWDL:0x%08x\n", __FUNCTION__, value32);
return _FAIL;
}
@@ -412,7 +433,7 @@ int _WriteBTFWtoTxPktBuf8723A(
//BT patch is big, we should set 0x209 < 0x40 suggested from Gimmy
RT_TRACE(_module_mp_, _drv_info_,("0x209:%x\n",
PlatformEFIORead1Byte(Adapter, REG_TDECTRL+1)));//209 < 0x40
-#if 0
+#if 0//def CONFIG_RTL8723A_SDIO
PlatformEFIOWrite1Byte(Adapter, REG_TDECTRL+1, 0x30);
RT_TRACE(_module_mp_, _drv_info_,("0x209:%x\n",
PlatformEFIORead1Byte(Adapter, REG_TDECTRL+1)));
@@ -656,6 +677,7 @@ FirmwareDownloadBT(IN PADAPTER Adapter, PRT_FIRMWARE_8723A pFirmware)
u1Byte *pBTFirmwareBuf;
u4Byte BTFirmwareLen;
+ u8 i;
//
// Patch BT Fw. Download BT RAM code to Tx packet buffer. Added by tynli. 2011.10.
// Only for 8723AE for Toshiba. Suggested by SD1 Jackie.
@@ -667,7 +689,13 @@ FirmwareDownloadBT(IN PADAPTER Adapter, PRT_FIRMWARE_8723A pFirmware)
DBG_871X("BT Firmware is ready!!\n");
return _FAIL;
}*/
-
+ PlatformEFIOWrite1Byte(Adapter, 0xCC, 0x2d);
+ PlatformEFIOWrite4Byte(Adapter, 0x68, 0xa005000c);
+ rtw_msleep_os(5);
+ PlatformEFIOWrite4Byte(Adapter, 0x68, 0xb005000c);
+ PlatformEFIOWrite1Byte(Adapter, 0xCC, 0x29);
+ for(i=0; i<10; i++)
+ rtw_msleep_os(100);
BTFwImage = (pu1Byte)Rtl8723EFwBTImgArray;
BTFwImageLen = Rtl8723EBTImgArrayLength;
DBG_871X("BT Firmware is size= %zu!!\n",sizeof(Rtl8723EFwBTImgArray));
@@ -701,33 +729,34 @@ FirmwareDownloadBT(IN PADAPTER Adapter, PRT_FIRMWARE_8723A pFirmware)
//for h2c cam here should be set to true
Adapter->bFWReady = _TRUE;
DBG_871X("FirmwareDownloadBT to _WriteBTFWtoTxPktBuf8723A !\n");
-#if 1
+#ifdef CONFIG_RTL8723A_SDIO
+ rtStatus = _WriteBTFWtoTxPktBuf8723A(Adapter, pBTFirmwareBuf, BTFirmwareLen, 0);
+#else
//rtStatus = _WriteBTFWtoTxPktBuf8723A(Adapter, pBTFirmwareBuf, BTFirmwareLen);
rtStatus = _WriteBTFWtoTxPktBuf8723A(Adapter, pBTFirmwareBuf+(4096*3), (BTFirmwareLen-(4096*3)), 1);
if(rtStatus != _SUCCESS)
{
- DBG_871X("BT Firmware download to Tx packet buffer first fail!\n");
+ DBG_871X("BT Firmware download to Tx packet buffer first fail! \n");
return rtStatus;
}
rtStatus = _WriteBTFWtoTxPktBuf8723A(Adapter, pBTFirmwareBuf+(4096*2), 4096, 2);
if(rtStatus != _SUCCESS)
{
- DBG_871X("BT Firmware download to Tx packet buffer second fail!\n");
+ DBG_871X("BT Firmware download to Tx packet buffer second fail! \n");
return rtStatus;
}
rtStatus = _WriteBTFWtoTxPktBuf8723A(Adapter, pBTFirmwareBuf+(4096), 4096, 3);
if(rtStatus != _SUCCESS)
{
- DBG_871X("BT Firmware download to Tx packet buffer third fail!\n");
+ DBG_871X("BT Firmware download to Tx packet buffer third fail! \n");
return rtStatus;
}
rtStatus = _WriteBTFWtoTxPktBuf8723A(Adapter, pBTFirmwareBuf, 4096, 4);
-
-
+#endif
if(rtStatus != _SUCCESS)
{
- RT_TRACE(_module_mp_, _drv_info_,("BT Firmware download to Tx packet buffer fail!\n"));
- DBG_871X("BT Firmware download to Tx packet buffer fail!\n");
+ RT_TRACE(_module_mp_, _drv_info_,("BT Firmware download to Tx packet buffer four fail! \n"));
+ DBG_871X("BT Firmware download to Tx packet buffer four fail!!\n");
}
else
{
@@ -735,7 +764,7 @@ FirmwareDownloadBT(IN PADAPTER Adapter, PRT_FIRMWARE_8723A pFirmware)
SetFwBTFwPatchCmd(Adapter, (u2Byte)BTFirmwareLen);
_CheckWLANFwPatchBTFwReady(Adapter);
}
-#endif
+
DBG_871X("<===FirmwareDownloadBT(),return %s!\n",rtStatus?"SUCCESS":"FAIL");
return rtStatus;
@@ -970,7 +999,7 @@ void rtl8723a_InitializeFirmwareVars(PADAPTER padapter)
PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
// Init Fw LPS related.
- padapter->pwrctrlpriv.bFwCurrentInPSMode = _FALSE;
+ adapter_to_pwrctl(padapter)->bFwCurrentInPSMode = _FALSE;
// Init H2C counter. by tynli. 2009.12.09.
pHalData->LastHMEBoxNum = 0;
@@ -982,10 +1011,13 @@ void rtl8723a_InitializeFirmwareVars(PADAPTER padapter)
static void rtl8723a_free_hal_data(PADAPTER padapter)
{
_func_enter_;
- if (padapter->HalData) {
+
+ if(padapter->HalData)
+ {
rtw_mfree(padapter->HalData, sizeof(HAL_DATA_TYPE));
padapter->HalData = NULL;
}
+
_func_exit_;
}
@@ -2589,14 +2621,6 @@ void rtl8723a_SetHalODMVar(
case HAL_ODM_STA_INFO:
{
struct sta_info *psta = (struct sta_info *)pValue1;
- #ifdef CONFIG_CONCURRENT_MODE
- //get Primary adapter's odmpriv
- if(Adapter->adapter_type > PRIMARY_ADAPTER && Adapter->pbuddy_adapter){
- pHalData = GET_HAL_DATA(Adapter->pbuddy_adapter);
- podmpriv = &pHalData->odmpriv;
- }
- #endif
-
if(bSet){
DBG_8192C("Set STA_(%d) info\n",psta->mac_id);
ODM_CmnInfoPtrArrayHook(podmpriv, ODM_CMNINFO_STA_STATUS,psta->mac_id,psta);
@@ -2721,9 +2745,7 @@ void rtl8723a_set_hal_ops(struct hal_ops *pHalFunc)
pHalFunc->SetBeaconRelatedRegistersHandler = &rtl8723a_SetBeaconRelatedRegisters;
pHalFunc->Add_RateATid = &rtl8192c_Add_RateATid;
-#ifdef CONFIG_CONCURRENT_MODE
- pHalFunc->clone_haldata = &rtl8723a_clone_haldata;
-#endif
+
pHalFunc->run_thread= &rtl8723a_start_thread;
pHalFunc->cancel_thread= &rtl8723a_stop_thread;
@@ -2831,7 +2853,7 @@ void rtl8723a_init_default_value(PADAPTER padapter)
// init default value
pHalData->fw_ractrl = _FALSE;
pHalData->bIQKInitialized = _FALSE;
- if (!padapter->pwrctrlpriv.bkeepfwalive)
+ if (!adapter_to_pwrctl(padapter)->bkeepfwalive)
pHalData->LastHMEBoxNum = 0;
pHalData->bIQKInitialized = _FALSE;
@@ -3905,6 +3927,33 @@ Hal_InitChannelPlan(
#endif
}
+#ifdef CONFIG_RF_GAIN_OFFSET
+void Hal_ReadRFGainOffset(
+ IN PADAPTER Adapter,
+ IN u8* PROMContent,
+ IN BOOLEAN AutoloadFail)
+{
+ //
+ // BB_RF Gain Offset from EEPROM
+ //
+ if(!AutoloadFail ){
+ Adapter->eeprompriv.EEPROMRFGainOffset =PROMContent[EEPROM_RF_GAIN_OFFSET];
+ DBG_871X("AutoloadFail =%x,\n", AutoloadFail);
+ Adapter->eeprompriv.EEPROMRFGainVal=EFUSE_Read1Byte(Adapter, EEPROM_RF_GAIN_VAL);
+ DBG_871X("Adapter->eeprompriv.EEPROMRFGainVal=%x\n", Adapter->eeprompriv.EEPROMRFGainVal);
+ }
+ else{
+ Adapter->eeprompriv.EEPROMRFGainOffset = 0;
+ Adapter->eeprompriv.EEPROMRFGainVal=0xFF;
+ DBG_871X("else AutoloadFail =%x,\n", AutoloadFail);
+ }
+ DBG_871X("EEPRORFGainOffset = 0x%02x\n", Adapter->eeprompriv.EEPROMRFGainOffset);
+}
+#endif //CONFIG_RF_GAIN_OFFSET
+
+
+
+
void rtl8723a_cal_txdesc_chksum(struct tx_desc *ptxdesc)
{
u16 *usPtr = (u16*)ptxdesc;
@@ -4351,6 +4400,11 @@ static void hw_var_set_opmode(PADAPTER padapter, u8 variable, u8 *val)
}
// disable atim wnd
+#ifdef CONFIG_CONCURRENT_MODE
+ if (padapter->iface_type == IFACE_PORT1)
+ val8 = DIS_TSF_UDT|DIS_ATIM;
+ else
+#endif
val8 = DIS_TSF_UDT|EN_BCN_FUNCTION|DIS_ATIM;
SetBcnCtrlReg(padapter, val8, ~val8);
}
@@ -4608,8 +4662,8 @@ static void hw_var_set_mlme_disconnect(PADAPTER padapter, u8 variable, u8 *val)
// reset TSF1
rtw_write8(padapter, REG_DUAL_TSF_RST, BIT(1));
- // disable update TSF1
- SetBcnCtrlReg(padapter, DIS_TSF_UDT, 0);
+ // disable update TSF1, disble BCN function
+ SetBcnCtrlReg(padapter, DIS_TSF_UDT, EN_BCN_FUNCTION);
}
else
#endif
@@ -5315,7 +5369,7 @@ _func_enter_;
#define RW_RELEASE_EN BIT(18)
#define RXDMA_IDLE BIT(17)
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
u8 trycnt = 100;
// pause tx
@@ -5353,12 +5407,13 @@ _func_enter_;
{
u16 v16;
u32 i;
+ #if 0
u8 RetryLimit = 0x01;
//rtw_write16(padapter, REG_RL,0x0101);
v16 = RetryLimit << RETRY_LIMIT_SHORT_SHIFT | RetryLimit << RETRY_LIMIT_LONG_SHIFT;
rtw_write16(padapter, REG_RL, v16);
-
+ #endif
for (i=0; i<1000; i++)
{
if (rtw_read32(padapter, 0x200) != rtw_read32(padapter, 0x204))
@@ -5372,10 +5427,11 @@ _func_enter_;
break;
}
}
-
+ #if 0
RetryLimit = 0x30;
v16 = RetryLimit << RETRY_LIMIT_SHORT_SHIFT | RetryLimit << RETRY_LIMIT_LONG_SHIFT;
rtw_write16(padapter, REG_RL, v16);
+ #endif
}
#endif
break;
@@ -5403,7 +5459,11 @@ _func_enter_;
rtw_write8(padapter, REG_NAV_UPPER, (u8)usNavUpper);
}
break;
-
+ case HW_VAR_H2C_MEDIA_STATUS_RPT:
+ {
+ rtl8723a_set_FwMediaStatus_cmd(padapter , (*(u16 *)val));
+ }
+ break;
case HW_VAR_BCN_VALID:
//BCN_VALID, BIT16 of REG_TDECTRL = BIT0 of REG_TDECTRL+2, write 1 to clear, Clear by sw
rtw_write8(padapter, REG_TDECTRL+2, rtw_read8(padapter, REG_TDECTRL+2) | BIT0);
@@ -5447,13 +5507,25 @@ void GetHwReg8723A(PADAPTER padapter, u8 variable, u8 *val)
}
break;
+ case HW_VAR_CAM_READ:
+ {
+ u32 cmd;
+ u32 *cam_val = (u32*)val;
+
+ cmd = CAM_POLLINIG | CAM_READ | cam_val[1];
+ rtw_write32(padapter, RWCAM, cmd);
+
+ cam_val[0]=rtw_read32(padapter, RCAMO);
+ }
+ break;
+
case HW_VAR_FWLPS_RF_ON:
{
// When we halt NIC, we should check if FW LPS is leave.
u32 valRCR;
if ((padapter->bSurpriseRemoved == _TRUE) ||
- (padapter->pwrctrlpriv.rf_pwrstate == rf_off))
+ (adapter_to_pwrctl(padapter)->rf_pwrstate == rf_off))
{
// If it is in HW/SW Radio OFF or IPS state, we do not check Fw LPS Leave,
// because Fw is unload.
@@ -5504,7 +5576,13 @@ void GetHwReg8723A(PADAPTER padapter, u8 variable, u8 *val)
break;
case HW_VAR_CHK_HI_QUEUE_EMPTY:
*val = ((rtw_read32(padapter, REG_HGQ_INFORMATION)&0x0000ff00)==0) ? _TRUE:_FALSE;
+ break;
+ case HW_VAR_C2HEVT_CLEAR:
+ *val = rtw_read8(padapter, REG_C2HEVT_CLEAR);
break;
+ case HW_VAR_C2HEVT_MSG_NORMAL:
+ *val = rtw_read8(padapter, REG_C2HEVT_MSG_NORMAL);
+ break;
}
}
@@ -5557,40 +5635,14 @@ void rtl8723a_SingleDualAntennaDetection(PADAPTER padapter)
}
#endif // CONFIG_BT_COEXIST
-void rtl8723a_clone_haldata(_adapter* dst_adapter, _adapter* src_adapter)
-{
-#ifdef CONFIG_SDIO_HCI
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(dst_adapter);
- //_thread_hdl_ SdioXmitThread;
- _sema temp_SdioXmitSema;
- _sema temp_SdioXmitTerminateSema;
- //u8 SdioTxFIFOFreePage[SDIO_TX_FREE_PG_QUEUE];
- _lock temp_SdioTxFIFOFreePageLock;
-
- _rtw_memcpy(&temp_SdioXmitSema, &(pHalData->SdioXmitSema), sizeof(_sema));
- _rtw_memcpy(&temp_SdioXmitTerminateSema, &(pHalData->SdioXmitTerminateSema), sizeof(_sema));
- _rtw_memcpy(&temp_SdioTxFIFOFreePageLock, &(pHalData->SdioTxFIFOFreePageLock), sizeof(_lock));
-
- _rtw_memcpy(dst_adapter->HalData, src_adapter->HalData, dst_adapter->hal_data_sz);
-
- _rtw_memcpy(&(pHalData->SdioXmitSema), &temp_SdioXmitSema, sizeof(_sema));
- _rtw_memcpy(&(pHalData->SdioXmitTerminateSema), &temp_SdioXmitTerminateSema, sizeof(_sema));
- _rtw_memcpy(&(pHalData->SdioTxFIFOFreePageLock), &temp_SdioTxFIFOFreePageLock, sizeof(_lock));
-
-#else
- _rtw_memcpy(dst_adapter->HalData, src_adapter->HalData, dst_adapter->hal_data_sz);
-#endif
-
-}
-
void rtl8723a_start_thread(_adapter *padapter)
{
#if (defined CONFIG_SDIO_HCI) || (defined CONFIG_GSPI_HCI)
#ifndef CONFIG_SDIO_TX_TASKLET
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct xmit_priv *xmitpriv = &padapter->xmitpriv;
- pHalData->SdioXmitThread = kthread_run(rtl8723as_xmit_thread, padapter, "RTWHALXT");
- if (IS_ERR(pHalData->SdioXmitThread))
+ xmitpriv->SdioXmitThread = kthread_run(rtl8723as_xmit_thread, padapter, "RTWHALXT");
+ if (IS_ERR(xmitpriv->SdioXmitThread))
{
RT_TRACE(_module_hal_xmit_c_, _drv_err_, ("%s: start rtl8723as_xmit_thread FAIL!!\n", __FUNCTION__));
}
@@ -5602,15 +5654,49 @@ void rtl8723a_stop_thread(_adapter *padapter)
{
#if (defined CONFIG_SDIO_HCI) || (defined CONFIG_GSPI_HCI)
#ifndef CONFIG_SDIO_TX_TASKLET
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct xmit_priv *xmitpriv = &padapter->xmitpriv;
// stop xmit_buf_thread
- if (pHalData->SdioXmitThread ) {
- _rtw_up_sema(&pHalData->SdioXmitSema);
- _rtw_down_sema(&pHalData->SdioXmitTerminateSema);
- pHalData->SdioXmitThread = 0;
+ if (xmitpriv->SdioXmitThread ) {
+ _rtw_up_sema(&xmitpriv->SdioXmitSema);
+ _rtw_down_sema(&xmitpriv->SdioXmitTerminateSema);
+ xmitpriv->SdioXmitThread = 0;
}
#endif
#endif
}
+#if defined(CONFIG_CHECK_BT_HANG) && defined(CONFIG_BT_COEXIST)
+extern void check_bt_status_work(void *data);
+void rtl8723a_init_checkbthang_workqueue(_adapter * adapter)
+{
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
+ adapter->priv_checkbt_wq = alloc_workqueue("sdio_wq", 0, 0);
+#else
+ adapter->priv_checkbt_wq = create_workqueue("sdio_wq");
+#endif
+ INIT_DELAYED_WORK(&adapter->checkbt_work, (void*)check_bt_status_work);
+}
+
+void rtl8723a_free_checkbthang_workqueue(_adapter * adapter)
+{
+ if (adapter->priv_checkbt_wq) {
+ cancel_delayed_work_sync(&adapter->checkbt_work);
+ flush_workqueue(adapter->priv_checkbt_wq);
+ destroy_workqueue(adapter->priv_checkbt_wq);
+ adapter->priv_checkbt_wq = NULL;
+ }
+}
+void rtl8723a_cancel_checkbthang_workqueue(_adapter * adapter)
+{
+ if (adapter->priv_checkbt_wq) {
+ cancel_delayed_work_sync(&adapter->checkbt_work);
+ }
+}
+
+void rtl8723a_hal_check_bt_hang(_adapter * adapter)
+{
+ if (adapter->priv_checkbt_wq)
+ queue_delayed_work(adapter->priv_checkbt_wq, &(adapter->checkbt_work), 0);
+}
+#endif
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_mp.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_mp.c
index 9ee3996aaad1..c05a0cb39103 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_mp.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_mp.c
@@ -1,1179 +1,1214 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#define _RTL8723A_MP_C_
-#ifdef CONFIG_MP_INCLUDED
-
-#include <drv_types.h>
-#include <rtw_mp.h>
-#include <rtl8723a_hal.h>
-
-
-/*-----------------------------------------------------------------------------
- * Function: mpt_SwitchRfSetting
- *
- * Overview: Change RF Setting when we siwthc channel/rate/BW for MP.
- *
- * Input: IN PADAPTER pAdapter
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 01/08/2009 MHC Suggestion from SD3 Willis for 92S series.
- * 01/09/2009 MHC Add CCK modification for 40MHZ. Suggestion from SD3.
- *
- *---------------------------------------------------------------------------*/
- static void phy_SwitchRfSetting8723A(PADAPTER pAdapter,u8 channel )
-{
-
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
- u32 u4RF_IPA[3], u4RF_TXBIAS, u4RF_SYN_G2;
-
- //default value
- {
- u4RF_IPA[0] = 0x4F424; //CCK
- u4RF_IPA[1] = 0xCF424; //OFDM
- u4RF_IPA[2] = 0x8F424; //MCS
- u4RF_TXBIAS = 0xC0356;
- u4RF_SYN_G2 = 0x4F200;
- }
-
- switch(channel)
- {
- case 1:
- u4RF_IPA[0] = 0x4F40C;
- u4RF_IPA[1] = 0xCF466;
- u4RF_TXBIAS = 0xC0350;
- break;
-
- case 2:
- u4RF_IPA[0] = 0x4F407;
- u4RF_TXBIAS = 0xC0350;
- break;
-
- case 3:
- u4RF_IPA[0] = 0x4F407;
- u4RF_IPA[2] = 0x8F466;
- u4RF_TXBIAS = 0xC0350;
- break;
-
- case 5:
- case 8:
- u4RF_SYN_G2 = 0x0F400;
- break;
-
- case 6:
- case 13:
- u4RF_IPA[0] = 0x4F40C;
- break;
-
- case 7:
- u4RF_IPA[0] = 0x4F40C;
- u4RF_SYN_G2 = 0x0F400;
- break;
-
- case 9:
- u4RF_IPA[2] = 0x8F454;
- u4RF_SYN_G2 = 0x0F400;
- break;
-
- case 11:
- u4RF_IPA[0] = 0x4F40C;
- u4RF_IPA[1] = 0xCF454;
- u4RF_SYN_G2 = 0x0F400;
- break;
-
- default:
- u4RF_IPA[0] = 0x4F424;
- u4RF_IPA[1] = 0x8F424;
- u4RF_IPA[2] = 0xCF424;
- u4RF_TXBIAS = 0xC0356;
- u4RF_SYN_G2 = 0x4F200;
- break;
- }
-
- PHY_SetRFReg(pAdapter, RF_PATH_A, RF_IPA, bRFRegOffsetMask, u4RF_IPA[0]);
- PHY_SetRFReg(pAdapter, RF_PATH_A, RF_IPA, bRFRegOffsetMask, u4RF_IPA[1]);
- PHY_SetRFReg(pAdapter, RF_PATH_A, RF_IPA, bRFRegOffsetMask, u4RF_IPA[2]);
- PHY_SetRFReg(pAdapter, RF_PATH_A, RF_TXBIAS, bRFRegOffsetMask, u4RF_TXBIAS);
- PHY_SetRFReg(pAdapter, RF_PATH_A, RF_SYN_G2, bRFRegOffsetMask, u4RF_SYN_G2);
-
-}
-
-
-
-
-void Hal_mpt_SwitchRfSetting(PADAPTER pAdapter)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
- PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.MptCtx);
- u8 ChannelToSw = pMptCtx->MptChannelToSw;
-
- phy_SwitchRfSetting8723A(pAdapter, ChannelToSw);
-}
-
-
-
-
-s32 Hal_SetPowerTracking(PADAPTER padapter, u8 enable)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
-
-
- if (!netif_running(padapter->pnetdev)) {
- RT_TRACE(_module_mp_, _drv_warning_, ("SetPowerTracking! Fail: interface not opened!\n"));
- return _FAIL;
- }
-
- if (check_fwstate(&padapter->mlmepriv, WIFI_MP_STATE) == _FALSE) {
- RT_TRACE(_module_mp_, _drv_warning_, ("SetPowerTracking! Fail: not in MP mode!\n"));
- return _FAIL;
- }
-
- if (enable)
- pdmpriv->TxPowerTrackControl = _TRUE;
- else
- pdmpriv->TxPowerTrackControl = _FALSE;
-
- return _SUCCESS;
-}
-
-void Hal_GetPowerTracking(PADAPTER padapter, u8 *enable)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
-
-
- *enable = pdmpriv->TxPowerTrackControl;
-}
-
-static void Hal_disable_dm(PADAPTER padapter)
-{
- u8 v8;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
-
-
- //3 1. disable firmware dynamic mechanism
- // disable Power Training, Rate Adaptive
- v8 = rtw_read8(padapter, REG_BCN_CTRL);
- v8 &= ~EN_BCN_FUNCTION;
- rtw_write8(padapter, REG_BCN_CTRL, v8);
-
- //3 2. disable driver dynamic mechanism
- // disable Dynamic Initial Gain
- // disable High Power
- // disable Power Tracking
- Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
-
- // enable APK, LCK and IQK but disable power tracking
- pdmpriv->TxPowerTrackControl = _FALSE;
- Switch_DM_Func(padapter, DYNAMIC_RF_TX_PWR_TRACK , _TRUE);
-}
-
-void Hal_MPT_CCKTxPowerAdjust(PADAPTER Adapter, BOOLEAN bInCH14)
-{
- u32 TempVal = 0, TempVal2 = 0, TempVal3 = 0;
- u32 CurrCCKSwingVal = 0, CCKSwingIndex = 12;
- u8 i;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
-
- // get current cck swing value and check 0xa22 & 0xa23 later to match the table.
- CurrCCKSwingVal = read_bbreg(Adapter, rCCK0_TxFilter1, bMaskHWord);
-
- if (!bInCH14)
- {
- // Readback the current bb cck swing value and compare with the table to
- // get the current swing index
- for (i = 0; i < CCK_TABLE_SIZE; i++)
- {
- if (((CurrCCKSwingVal&0xff) == (u32)CCKSwingTable_Ch1_Ch13[i][0]) &&
- (((CurrCCKSwingVal&0xff00)>>8) == (u32)CCKSwingTable_Ch1_Ch13[i][1]))
- {
- CCKSwingIndex = i;
-// RT_TRACE(COMP_INIT, DBG_LOUD,("Ch1~13, Current reg0x%x = 0x%lx, CCKSwingIndex=0x%x\n",
-// (rCCK0_TxFilter1+2), CurrCCKSwingVal, CCKSwingIndex));
- break;
- }
- }
-
- //Write 0xa22 0xa23
- TempVal = CCKSwingTable_Ch1_Ch13[CCKSwingIndex][0] +
- (CCKSwingTable_Ch1_Ch13[CCKSwingIndex][1]<<8) ;
-
-
- //Write 0xa24 ~ 0xa27
- TempVal2 = 0;
- TempVal2 = CCKSwingTable_Ch1_Ch13[CCKSwingIndex][2] +
- (CCKSwingTable_Ch1_Ch13[CCKSwingIndex][3]<<8) +
- (CCKSwingTable_Ch1_Ch13[CCKSwingIndex][4]<<16 )+
- (CCKSwingTable_Ch1_Ch13[CCKSwingIndex][5]<<24);
-
- //Write 0xa28 0xa29
- TempVal3 = 0;
- TempVal3 = CCKSwingTable_Ch1_Ch13[CCKSwingIndex][6] +
- (CCKSwingTable_Ch1_Ch13[CCKSwingIndex][7]<<8) ;
- }
- else
- {
- for (i = 0; i < CCK_TABLE_SIZE; i++)
- {
- if (((CurrCCKSwingVal&0xff) == (u32)CCKSwingTable_Ch14[i][0]) &&
- (((CurrCCKSwingVal&0xff00)>>8) == (u32)CCKSwingTable_Ch14[i][1]))
- {
- CCKSwingIndex = i;
-// RT_TRACE(COMP_INIT, DBG_LOUD,("Ch14, Current reg0x%x = 0x%lx, CCKSwingIndex=0x%x\n",
-// (rCCK0_TxFilter1+2), CurrCCKSwingVal, CCKSwingIndex));
- break;
- }
- }
-
- //Write 0xa22 0xa23
- TempVal = CCKSwingTable_Ch14[CCKSwingIndex][0] +
- (CCKSwingTable_Ch14[CCKSwingIndex][1]<<8) ;
-
- //Write 0xa24 ~ 0xa27
- TempVal2 = 0;
- TempVal2 = CCKSwingTable_Ch14[CCKSwingIndex][2] +
- (CCKSwingTable_Ch14[CCKSwingIndex][3]<<8) +
- (CCKSwingTable_Ch14[CCKSwingIndex][4]<<16 )+
- (CCKSwingTable_Ch14[CCKSwingIndex][5]<<24);
-
- //Write 0xa28 0xa29
- TempVal3 = 0;
- TempVal3 = CCKSwingTable_Ch14[CCKSwingIndex][6] +
- (CCKSwingTable_Ch14[CCKSwingIndex][7]<<8) ;
- }
-
- write_bbreg(Adapter, rCCK0_TxFilter1, bMaskHWord, TempVal);
- write_bbreg(Adapter, rCCK0_TxFilter2, bMaskDWord, TempVal2);
- write_bbreg(Adapter, rCCK0_DebugPort, bMaskLWord, TempVal3);
-}
-
-void Hal_MPT_CCKTxPowerAdjustbyIndex(PADAPTER pAdapter, BOOLEAN beven)
-{
- s32 TempCCk;
- u8 CCK_index, CCK_index_old;
- u8 Action = 0; //0: no action, 1: even->odd, 2:odd->even
- u8 TimeOut = 100;
- s32 i = 0;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
- PMPT_CONTEXT pMptCtx = &pAdapter->mppriv.MptCtx;
-
-
- if (!IS_92C_SERIAL(pHalData->VersionID))
- return;
-#if 0
- while(PlatformAtomicExchange(&Adapter->IntrCCKRefCount, TRUE) == TRUE)
- {
- PlatformSleepUs(100);
- TimeOut--;
- if(TimeOut <= 0)
- {
- RTPRINT(FINIT, INIT_TxPower,
- ("!!!MPT_CCKTxPowerAdjustbyIndex Wait for check CCK gain index too long!!!\n" ));
- break;
- }
- }
-#endif
- if (beven && !pMptCtx->bMptIndexEven) //odd->even
- {
- Action = 2;
- pMptCtx->bMptIndexEven = _TRUE;
- }
- else if (!beven && pMptCtx->bMptIndexEven) //even->odd
- {
- Action = 1;
- pMptCtx->bMptIndexEven = _FALSE;
- }
-
- if (Action != 0)
- {
- //Query CCK default setting From 0xa24
- TempCCk = read_bbreg(pAdapter, rCCK0_TxFilter2, bMaskDWord) & bMaskCCK;
- for (i = 0; i < CCK_TABLE_SIZE; i++)
- {
- if (pHalData->dmpriv.bCCKinCH14)
- {
- if (_rtw_memcmp((void*)&TempCCk, (void*)&CCKSwingTable_Ch14[i][2], 4) == _TRUE)
- {
- CCK_index_old = (u8) i;
-// RTPRINT(FINIT, INIT_TxPower,("MPT_CCKTxPowerAdjustbyIndex: Initial reg0x%x = 0x%lx, CCK_index=0x%x, ch 14 %d\n",
-// rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
- break;
- }
- }
- else
- {
- if (_rtw_memcmp((void*)&TempCCk, (void*)&CCKSwingTable_Ch1_Ch13[i][2], 4) == _TRUE)
- {
- CCK_index_old = (u8) i;
-// RTPRINT(FINIT, INIT_TxPower,("MPT_CCKTxPowerAdjustbyIndex: Initial reg0x%x = 0x%lx, CCK_index=0x%x, ch14 %d\n",
-// rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
- break;
- }
- }
- }
-
- if (Action == 1)
- CCK_index = CCK_index_old - 1;
- else
- CCK_index = CCK_index_old + 1;
-
-// RTPRINT(FINIT, INIT_TxPower,("MPT_CCKTxPowerAdjustbyIndex: new CCK_index=0x%x\n",
-// CCK_index));
-
- //Adjust CCK according to gain index
- if (!pHalData->dmpriv.bCCKinCH14) {
- rtw_write8(pAdapter, 0xa22, CCKSwingTable_Ch1_Ch13[CCK_index][0]);
- rtw_write8(pAdapter, 0xa23, CCKSwingTable_Ch1_Ch13[CCK_index][1]);
- rtw_write8(pAdapter, 0xa24, CCKSwingTable_Ch1_Ch13[CCK_index][2]);
- rtw_write8(pAdapter, 0xa25, CCKSwingTable_Ch1_Ch13[CCK_index][3]);
- rtw_write8(pAdapter, 0xa26, CCKSwingTable_Ch1_Ch13[CCK_index][4]);
- rtw_write8(pAdapter, 0xa27, CCKSwingTable_Ch1_Ch13[CCK_index][5]);
- rtw_write8(pAdapter, 0xa28, CCKSwingTable_Ch1_Ch13[CCK_index][6]);
- rtw_write8(pAdapter, 0xa29, CCKSwingTable_Ch1_Ch13[CCK_index][7]);
- } else {
- rtw_write8(pAdapter, 0xa22, CCKSwingTable_Ch14[CCK_index][0]);
- rtw_write8(pAdapter, 0xa23, CCKSwingTable_Ch14[CCK_index][1]);
- rtw_write8(pAdapter, 0xa24, CCKSwingTable_Ch14[CCK_index][2]);
- rtw_write8(pAdapter, 0xa25, CCKSwingTable_Ch14[CCK_index][3]);
- rtw_write8(pAdapter, 0xa26, CCKSwingTable_Ch14[CCK_index][4]);
- rtw_write8(pAdapter, 0xa27, CCKSwingTable_Ch14[CCK_index][5]);
- rtw_write8(pAdapter, 0xa28, CCKSwingTable_Ch14[CCK_index][6]);
- rtw_write8(pAdapter, 0xa29, CCKSwingTable_Ch14[CCK_index][7]);
- }
- }
-#if 0
- RTPRINT(FINIT, INIT_TxPower,
- ("MPT_CCKTxPowerAdjustbyIndex 0xa20=%x\n", PlatformEFIORead4Byte(Adapter, 0xa20)));
-
- PlatformAtomicExchange(&Adapter->IntrCCKRefCount, FALSE);
-#endif
-}
-/*---------------------------hal\rtl8192c\MPT_HelperFunc.c---------------------------*/
-
-/*
- * SetChannel
- * Description
- * Use H2C command to change channel,
- * not only modify rf register, but also other setting need to be done.
- */
-void Hal_SetChannel(PADAPTER pAdapter)
-{
-#if 0
- struct mp_priv *pmp = &pAdapter->mppriv;
-
-// SelectChannel(pAdapter, pmp->channel);
- set_channel_bwmode(pAdapter, pmp->channel, pmp->channel_offset, pmp->bandwidth);
-#else
- u8 eRFPath;
-
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
- struct mp_priv *pmp = &pAdapter->mppriv;
- u8 channel = pmp->channel;
- u8 bandwidth = pmp->bandwidth;
- u8 rate = pmp->rateidx;
-
-
- // set RF channel register
- for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++)
- {
- if(IS_HARDWARE_TYPE_8192D(pAdapter))
- _write_rfreg(pAdapter, (RF_RADIO_PATH_E)eRFPath, rRfChannel, 0xFF, channel);
- else
- _write_rfreg(pAdapter, eRFPath, rRfChannel, 0x3FF, channel);
- }
- Hal_mpt_SwitchRfSetting(pAdapter);
-
- SelectChannel(pAdapter, channel);
-
- if (pHalData->CurrentChannel == 14 && !pHalData->dmpriv.bCCKinCH14) {
- pHalData->dmpriv.bCCKinCH14 = _TRUE;
- Hal_MPT_CCKTxPowerAdjust(pAdapter, pHalData->dmpriv.bCCKinCH14);
- }
- else if (pHalData->CurrentChannel != 14 && pHalData->dmpriv.bCCKinCH14) {
- pHalData->dmpriv.bCCKinCH14 = _FALSE;
- Hal_MPT_CCKTxPowerAdjust(pAdapter, pHalData->dmpriv.bCCKinCH14);
- }
-
-#endif
-}
-
-/*
- * Notice
- * Switch bandwitdth may change center frequency(channel)
- */
-void Hal_SetBandwidth(PADAPTER pAdapter)
-{
- struct mp_priv *pmp = &pAdapter->mppriv;
-
-
- SetBWMode(pAdapter, pmp->bandwidth, pmp->prime_channel_offset);
- Hal_mpt_SwitchRfSetting(pAdapter);
-}
-
-void Hal_SetCCKTxPower(PADAPTER pAdapter, u8 *TxPower)
-{
- u32 tmpval = 0;
-
-
- // rf-A cck tx power
- write_bbreg(pAdapter, rTxAGC_A_CCK1_Mcs32, bMaskByte1, TxPower[RF_PATH_A]);
- tmpval = (TxPower[RF_PATH_A]<<16) | (TxPower[RF_PATH_A]<<8) | TxPower[RF_PATH_A];
- write_bbreg(pAdapter, rTxAGC_B_CCK11_A_CCK2_11, 0xffffff00, tmpval);
-
- // rf-B cck tx power
- write_bbreg(pAdapter, rTxAGC_B_CCK11_A_CCK2_11, bMaskByte0, TxPower[RF_PATH_B]);
- tmpval = (TxPower[RF_PATH_B]<<16) | (TxPower[RF_PATH_B]<<8) | TxPower[RF_PATH_B];
- write_bbreg(pAdapter, rTxAGC_B_CCK1_55_Mcs32, 0xffffff00, tmpval);
-
- RT_TRACE(_module_mp_, _drv_notice_,
- ("-SetCCKTxPower: A[0x%02x] B[0x%02x]\n",
- TxPower[RF_PATH_A], TxPower[RF_PATH_B]));
-}
-
-void Hal_SetOFDMTxPower(PADAPTER pAdapter, u8 *TxPower)
-{
- u32 TxAGC = 0;
- u8 tmpval = 0;
- PMPT_CONTEXT pMptCtx = &pAdapter->mppriv.MptCtx;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
-
-
- // HT Tx-rf(A)
- tmpval = TxPower[RF_PATH_A];
- TxAGC = (tmpval<<24) | (tmpval<<16) | (tmpval<<8) | tmpval;
-
- write_bbreg(pAdapter, rTxAGC_A_Rate18_06, bMaskDWord, TxAGC);
- write_bbreg(pAdapter, rTxAGC_A_Rate54_24, bMaskDWord, TxAGC);
- write_bbreg(pAdapter, rTxAGC_A_Mcs03_Mcs00, bMaskDWord, TxAGC);
- write_bbreg(pAdapter, rTxAGC_A_Mcs07_Mcs04, bMaskDWord, TxAGC);
- write_bbreg(pAdapter, rTxAGC_A_Mcs11_Mcs08, bMaskDWord, TxAGC);
- write_bbreg(pAdapter, rTxAGC_A_Mcs15_Mcs12, bMaskDWord, TxAGC);
-
- if (pHalData->dmpriv.bAPKdone && !IS_NORMAL_CHIP(pHalData->VersionID))
- {
- if (tmpval > pMptCtx->APK_bound[RF_PATH_A])
- write_rfreg(pAdapter, RF_PATH_A, 0xe, pHalData->dmpriv.APKoutput[0][0]);
- else
- write_rfreg(pAdapter, RF_PATH_A, 0xe, pHalData->dmpriv.APKoutput[0][1]);
- }
-
- // HT Tx-rf(B)
- tmpval = TxPower[RF_PATH_B];
- TxAGC = (tmpval<<24) | (tmpval<<16) | (tmpval<<8) | tmpval;
-
- write_bbreg(pAdapter, rTxAGC_B_Rate18_06, bMaskDWord, TxAGC);
- write_bbreg(pAdapter, rTxAGC_B_Rate54_24, bMaskDWord, TxAGC);
- write_bbreg(pAdapter, rTxAGC_B_Mcs03_Mcs00, bMaskDWord, TxAGC);
- write_bbreg(pAdapter, rTxAGC_B_Mcs07_Mcs04, bMaskDWord, TxAGC);
- write_bbreg(pAdapter, rTxAGC_B_Mcs11_Mcs08, bMaskDWord, TxAGC);
- write_bbreg(pAdapter, rTxAGC_B_Mcs15_Mcs12, bMaskDWord, TxAGC);
-
- if (pHalData->dmpriv.bAPKdone && !IS_NORMAL_CHIP(pHalData->VersionID))
- {
- if (tmpval > pMptCtx->APK_bound[RF_PATH_B])
- write_rfreg(pAdapter, RF_PATH_B, 0xe, pHalData->dmpriv.APKoutput[1][0]);
- else
- write_rfreg(pAdapter, RF_PATH_B, 0xe, pHalData->dmpriv.APKoutput[1][1]);
- }
-
- RT_TRACE(_module_mp_, _drv_notice_,
- ("-SetOFDMTxPower: A[0x%02x] B[0x%02x]\n",
- TxPower[RF_PATH_A], TxPower[RF_PATH_B]));
-}
-
-void Hal_SetAntennaPathPower(PADAPTER pAdapter)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
- u8 TxPowerLevel[MAX_RF_PATH_NUMS];
- u8 rfPath;
-
- TxPowerLevel[RF_PATH_A] = pAdapter->mppriv.txpoweridx;
- TxPowerLevel[RF_PATH_B] = pAdapter->mppriv.txpoweridx_b;
-
- switch (pAdapter->mppriv.antenna_tx)
- {
- case ANTENNA_A:
- default:
- rfPath = RF_PATH_A;
- break;
- case ANTENNA_B:
- rfPath = RF_PATH_B;
- break;
- case ANTENNA_C:
- rfPath = RF_PATH_C;
- break;
- }
-
- switch (pHalData->rf_chip)
- {
- case RF_8225:
- case RF_8256:
- case RF_6052:
- Hal_SetCCKTxPower(pAdapter, TxPowerLevel);
- if (pAdapter->mppriv.rateidx < MPT_RATE_6M) // CCK rate
- Hal_MPT_CCKTxPowerAdjustbyIndex(pAdapter, TxPowerLevel[rfPath]%2 == 0);
- Hal_SetOFDMTxPower(pAdapter, TxPowerLevel);
- break;
-
- default:
- break;
- }
-}
-
-void Hal_SetTxPower(PADAPTER pAdapter)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
- u8 TxPower = pAdapter->mppriv.txpoweridx;
- u8 TxPowerLevel[MAX_RF_PATH_NUMS];
- u8 rf, rfPath;
-
- for (rf = 0; rf < MAX_RF_PATH_NUMS; rf++) {
- TxPowerLevel[rf] = TxPower;
- }
-
- switch (pAdapter->mppriv.antenna_tx)
- {
- case ANTENNA_A:
- default:
- rfPath = RF_PATH_A;
- break;
- case ANTENNA_B:
- rfPath = RF_PATH_B;
- break;
- case ANTENNA_C:
- rfPath = RF_PATH_C;
- break;
- }
-
- switch (pHalData->rf_chip)
- {
- // 2008/09/12 MH Test only !! We enable the TX power tracking for MP!!!!!
- // We should call normal driver API later!!
- case RF_8225:
- case RF_8256:
- case RF_6052:
- Hal_SetCCKTxPower(pAdapter, TxPowerLevel);
- if (pAdapter->mppriv.rateidx < MPT_RATE_6M) // CCK rate
- Hal_MPT_CCKTxPowerAdjustbyIndex(pAdapter, TxPowerLevel[rfPath]%2 == 0);
- Hal_SetOFDMTxPower(pAdapter, TxPowerLevel);
- break;
-
- default:
- break;
- }
-
-// SetCCKTxPower(pAdapter, TxPower);
-// SetOFDMTxPower(pAdapter, TxPower);
-}
-
-void Hal_SetTxAGCOffset(PADAPTER pAdapter, u32 ulTxAGCOffset)
-{
- u32 TxAGCOffset_B, TxAGCOffset_C, TxAGCOffset_D,tmpAGC;
-
- return ;
-
- TxAGCOffset_B = (ulTxAGCOffset&0x000000ff);
- TxAGCOffset_C = ((ulTxAGCOffset&0x0000ff00)>>8);
- TxAGCOffset_D = ((ulTxAGCOffset&0x00ff0000)>>16);
-
- tmpAGC = (TxAGCOffset_D<<8 | TxAGCOffset_C<<4 | TxAGCOffset_B);
- write_bbreg(pAdapter, rFPGA0_TxGainStage,
- (bXBTxAGC|bXCTxAGC|bXDTxAGC), tmpAGC);
-}
-
-void Hal_SetDataRate(PADAPTER pAdapter)
-{
- if(!IS_HARDWARE_TYPE_8723A(pAdapter))
- Hal_mpt_SwitchRfSetting(pAdapter);
-}
-
-
-void Hal_SetAntenna(PADAPTER pAdapter)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
-
- R_ANTENNA_SELECT_OFDM *p_ofdm_tx; /* OFDM Tx register */
- R_ANTENNA_SELECT_CCK *p_cck_txrx;
-
- u8 r_rx_antenna_ofdm = 0, r_ant_select_cck_val = 0;
- u8 chgTx = 0, chgRx = 0;
- u32 r_ant_sel_cck_val = 0, r_ant_select_ofdm_val = 0, r_ofdm_tx_en_val = 0;
-
-
- p_ofdm_tx = (R_ANTENNA_SELECT_OFDM *)&r_ant_select_ofdm_val;
- p_cck_txrx = (R_ANTENNA_SELECT_CCK *)&r_ant_select_cck_val;
-
- p_ofdm_tx->r_ant_ht1 = 0x1;
- p_ofdm_tx->r_ant_ht2 = 0x2; // Second TX RF path is A
- p_ofdm_tx->r_ant_non_ht = 0x3; // 0x1+0x2=0x3
-
- switch (pAdapter->mppriv.antenna_tx)
- {
- case ANTENNA_A:
- p_ofdm_tx->r_tx_antenna = 0x1;
- r_ofdm_tx_en_val = 0x1;
- p_ofdm_tx->r_ant_l = 0x1;
- p_ofdm_tx->r_ant_ht_s1 = 0x1;
- p_ofdm_tx->r_ant_non_ht_s1 = 0x1;
- p_cck_txrx->r_ccktx_enable = 0x8;
- chgTx = 1;
-
- // From SD3 Willis suggestion !!! Set RF A=TX and B as standby
-// if (IS_HARDWARE_TYPE_8192S(pAdapter))
- {
- write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter2, 0xe, 2);
- write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter2, 0xe, 1);
- r_ofdm_tx_en_val = 0x3;
-
- // Power save
- //cosa r_ant_select_ofdm_val = 0x11111111;
-
- // We need to close RFB by SW control
- if (pHalData->rf_type == RF_2T2R)
- {
- PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT10, 0);
- PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT26, 1);
- PHY_SetBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT10, 0);
- PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT1, 1);
- PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT17, 0);
- }
- }
- break;
-
- case ANTENNA_B:
- p_ofdm_tx->r_tx_antenna = 0x2;
- r_ofdm_tx_en_val = 0x2;
- p_ofdm_tx->r_ant_l = 0x2;
- p_ofdm_tx->r_ant_ht_s1 = 0x2;
- p_ofdm_tx->r_ant_non_ht_s1 = 0x2;
- p_cck_txrx->r_ccktx_enable = 0x4;
- chgTx = 1;
-
- // From SD3 Willis suggestion !!! Set RF A as standby
- //if (IS_HARDWARE_TYPE_8192S(pAdapter))
- {
- PHY_SetBBReg(pAdapter, rFPGA0_XA_HSSIParameter2, 0xe, 1);
- PHY_SetBBReg(pAdapter, rFPGA0_XB_HSSIParameter2, 0xe, 2);
-// r_ofdm_tx_en_val = 0x3;
-
- // Power save
- //cosa r_ant_select_ofdm_val = 0x22222222;
-
- // 2008/10/31 MH From SD3 Willi's suggestion. We must read RF 1T table.
- // 2009/01/08 MH From Sd3 Willis. We need to close RFA by SW control
- if (pHalData->rf_type == RF_2T2R || pHalData->rf_type == RF_1T2R)
- {
- PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT10, 1);
- PHY_SetBBReg(pAdapter, rFPGA0_XA_RFInterfaceOE, BIT10, 0);
- PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT26, 0);
-// PHY_SetBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT10, 0);
- PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT1, 0);
- PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT17, 1);
- }
- }
- break;
-
- case ANTENNA_AB: // For 8192S
- p_ofdm_tx->r_tx_antenna = 0x3;
- r_ofdm_tx_en_val = 0x3;
- p_ofdm_tx->r_ant_l = 0x3;
- p_ofdm_tx->r_ant_ht_s1 = 0x3;
- p_ofdm_tx->r_ant_non_ht_s1 = 0x3;
- p_cck_txrx->r_ccktx_enable = 0xC;
- chgTx = 1;
-
- // From SD3 Willis suggestion !!! Set RF B as standby
- //if (IS_HARDWARE_TYPE_8192S(pAdapter))
- {
- PHY_SetBBReg(pAdapter, rFPGA0_XA_HSSIParameter2, 0xe, 2);
- PHY_SetBBReg(pAdapter, rFPGA0_XB_HSSIParameter2, 0xe, 2);
-
- // Disable Power save
- //cosa r_ant_select_ofdm_val = 0x3321333;
-#if 0
- // 2008/10/31 MH From SD3 Willi's suggestion. We must read RFA 2T table.
- if ((pHalData->VersionID == VERSION_8192S_ACUT)) // For RTL8192SU A-Cut only, by Roger, 2008.11.07.
- {
- mpt_RFConfigFromPreParaArrary(pAdapter, 1, RF_PATH_A);
- }
-#endif
- // 2009/01/08 MH From Sd3 Willis. We need to enable RFA/B by SW control
- if (pHalData->rf_type == RF_2T2R)
- {
- PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT10, 0);
- PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT26, 0);
-// PHY_SetBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT10, 0);
- PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT1, 1);
- PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT17, 1);
- }
- }
- break;
-
- default:
- break;
- }
-
- //
- // r_rx_antenna_ofdm, bit0=A, bit1=B, bit2=C, bit3=D
- // r_cckrx_enable : CCK default, 0=A, 1=B, 2=C, 3=D
- // r_cckrx_enable_2 : CCK option, 0=A, 1=B, 2=C, 3=D
- //
- switch (pAdapter->mppriv.antenna_rx)
- {
- case ANTENNA_A:
- r_rx_antenna_ofdm = 0x1; // A
- p_cck_txrx->r_cckrx_enable = 0x0; // default: A
- p_cck_txrx->r_cckrx_enable_2 = 0x0; // option: A
- chgRx = 1;
- break;
-
- case ANTENNA_B:
- r_rx_antenna_ofdm = 0x2; // B
- p_cck_txrx->r_cckrx_enable = 0x1; // default: B
- p_cck_txrx->r_cckrx_enable_2 = 0x1; // option: B
- chgRx = 1;
- break;
-
- case ANTENNA_AB:
- r_rx_antenna_ofdm = 0x3; // AB
- p_cck_txrx->r_cckrx_enable = 0x0; // default:A
- p_cck_txrx->r_cckrx_enable_2 = 0x1; // option:B
- chgRx = 1;
- break;
-
- default:
- break;
- }
-
- if (chgTx && chgRx)
- {
- switch(pHalData->rf_chip)
- {
- case RF_8225:
- case RF_8256:
- case RF_6052:
- //r_ant_sel_cck_val = r_ant_select_cck_val;
- PHY_SetBBReg(pAdapter, rFPGA1_TxInfo, 0x7fffffff, r_ant_select_ofdm_val); //OFDM Tx
- PHY_SetBBReg(pAdapter, rFPGA0_TxInfo, 0x0000000f, r_ofdm_tx_en_val); //OFDM Tx
- PHY_SetBBReg(pAdapter, rOFDM0_TRxPathEnable, 0x0000000f, r_rx_antenna_ofdm); //OFDM Rx
- PHY_SetBBReg(pAdapter, rOFDM1_TRxPathEnable, 0x0000000f, r_rx_antenna_ofdm); //OFDM Rx
- PHY_SetBBReg(pAdapter, rCCK0_AFESetting, bMaskByte3, r_ant_select_cck_val);//r_ant_sel_cck_val); //CCK TxRx
-
- break;
-
- default:
- break;
- }
- }
-
- RT_TRACE(_module_mp_, _drv_notice_, ("-SwitchAntenna: finished\n"));
-}
-
-s32 Hal_SetThermalMeter(PADAPTER pAdapter, u8 target_ther)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
-
-
- if (!netif_running(pAdapter->pnetdev)) {
- RT_TRACE(_module_mp_, _drv_warning_, ("SetThermalMeter! Fail: interface not opened!\n"));
- return _FAIL;
- }
-
- if (check_fwstate(&pAdapter->mlmepriv, WIFI_MP_STATE) == _FALSE) {
- RT_TRACE(_module_mp_, _drv_warning_, ("SetThermalMeter: Fail! not in MP mode!\n"));
- return _FAIL;
- }
-
- target_ther &= 0xff;
- if (target_ther < 0x07)
- target_ther = 0x07;
- else if (target_ther > 0x1d)
- target_ther = 0x1d;
-
- pHalData->EEPROMThermalMeter = target_ther;
-
- return _SUCCESS;
-}
-
-void Hal_TriggerRFThermalMeter(PADAPTER pAdapter)
-{
-
- write_rfreg(pAdapter, RF_PATH_A, RF_T_METER, 0x60); // 0x24: RF Reg[6:5]
-
-// RT_TRACE(_module_mp_,_drv_alert_, ("TriggerRFThermalMeter() finished.\n" ));
-}
-
-u8 Hal_ReadRFThermalMeter(PADAPTER pAdapter)
-{
- u32 ThermalValue = 0;
-
- ThermalValue = _read_rfreg(pAdapter, RF_PATH_A, RF_T_METER, 0x1F); // 0x24: RF Reg[4:0]
-// RT_TRACE(_module_mp_, _drv_alert_, ("ThermalValue = 0x%x\n", ThermalValue));
- return (u8)ThermalValue;
-}
-
-void Hal_GetThermalMeter(PADAPTER pAdapter, u8 *value)
-{
-#if 0
- fw_cmd(pAdapter, IOCMD_GET_THERMAL_METER);
- rtw_msleep_os(1000);
- fw_cmd_data(pAdapter, value, 1);
- *value &= 0xFF;
-#else
-
- Hal_TriggerRFThermalMeter(pAdapter);
- rtw_msleep_os(1000);
- *value = Hal_ReadRFThermalMeter(pAdapter);
-#endif
-}
-
-void Hal_SetSingleCarrierTx(PADAPTER pAdapter, u8 bStart)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
- pAdapter->mppriv.MptCtx.bSingleCarrier = bStart;
- if (bStart)// Start Single Carrier.
- {
- RT_TRACE(_module_mp_,_drv_alert_, ("SetSingleCarrierTx: test start\n"));
- // 1. if OFDM block on?
- if(!read_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn))
- write_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn, bEnable);//set OFDM block on
-
- {
- // 2. set CCK test mode off, set to CCK normal mode
- write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, bDisable);
- // 3. turn on scramble setting
- write_bbreg(pAdapter, rCCK0_System, bCCKScramble, bEnable);
- }
- // 4. Turn On Single Carrier Tx and turn off the other test modes.
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable);
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bEnable);
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
-#ifdef CONFIG_RTL8192C
- // 5. Disable TX power saving at STF & LLTF
- write_bbreg(pAdapter, rOFDM1_LSTF, BIT22, 1);
-#endif
- }
- else// Stop Single Carrier.
- {
- RT_TRACE(_module_mp_,_drv_alert_, ("SetSingleCarrierTx: test stop\n"));
-
- // Turn off all test modes.
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable);
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable);
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
-#ifdef CONFIG_RTL8192C
- // Cancel disable TX power saving at STF&LLTF
- write_bbreg(pAdapter, rOFDM1_LSTF, BIT22, 0);
-#endif
- //Delay 10 ms //delay_ms(10);
- rtw_msleep_os(10);
-
- //BB Reset
- write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x0);
- write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x1);
- }
-}
-
-
-void Hal_SetSingleToneTx(PADAPTER pAdapter, u8 bStart)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
- BOOLEAN is92C = IS_92C_SERIAL(pHalData->VersionID);
-
- u8 rfPath;
-
- switch (pAdapter->mppriv.antenna_tx)
- {
- case ANTENNA_A:
- default:
- rfPath = RF_PATH_A;
- break;
- case ANTENNA_B:
- rfPath = RF_PATH_B;
- break;
- case ANTENNA_C:
- rfPath = RF_PATH_C;
- break;
- }
-
- pAdapter->mppriv.MptCtx.bSingleTone = bStart;
- if (bStart)// Start Single Tone.
- {
- RT_TRACE(_module_mp_,_drv_alert_, ("SetSingleToneTx: test start\n"));
- write_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn, 0x0);
- write_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn, 0x0);
-
- if (is92C)
- {
- _write_rfreg(pAdapter, RF_PATH_A, 0x21, BIT19, 0x01);
- rtw_usleep_os(100);
- if (rfPath == RF_PATH_A)
- write_rfreg(pAdapter, RF_PATH_B, 0x00, 0x10000); // PAD all on.
- else if (rfPath == RF_PATH_B)
- write_rfreg(pAdapter, RF_PATH_A, 0x00, 0x10000); // PAD all on.
- write_rfreg(pAdapter, rfPath, 0x00, 0x2001f); // PAD all on.
- rtw_usleep_os(100);
- }
- else
- {
- write_rfreg(pAdapter, rfPath, 0x21, 0xd4000);
- rtw_usleep_os(100);
- write_rfreg(pAdapter, rfPath, 0x00, 0x2001f); // PAD all on.
- rtw_usleep_os(100);
- }
-
- write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);
- write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);
-
- }
- else// Stop Single Tone.
- {
- RT_TRACE(_module_mp_,_drv_alert_, ("SetSingleToneTx: test stop\n"));
- write_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn, 0x1);
- write_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn, 0x1);
-
- if (is92C) {
- _write_rfreg(pAdapter, RF_PATH_A, 0x21, BIT19, 0x00);
- rtw_usleep_os(100);
- write_rfreg(pAdapter, RF_PATH_A, 0x00, 0x32d75); // PAD all on.
- write_rfreg(pAdapter, RF_PATH_B, 0x00, 0x32d75); // PAD all on.
- rtw_usleep_os(100);
- } else {
- write_rfreg(pAdapter, rfPath, 0x21, 0x54000);
- rtw_usleep_os(100);
- write_rfreg(pAdapter, rfPath, 0x00, 0x30000); // PAD all on.
- rtw_usleep_os(100);
- }
-
- write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100);
- write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100);
-
- }
-
-}
-
-
-void Hal_SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart)
-{
- pAdapter->mppriv.MptCtx.bCarrierSuppression = bStart;
- if (bStart) // Start Carrier Suppression.
- {
- RT_TRACE(_module_mp_,_drv_alert_, ("SetCarrierSuppressionTx: test start\n"));
- //if(pMgntInfo->dot11CurrentWirelessMode == WIRELESS_MODE_B)
- if (pAdapter->mppriv.rateidx <= MPT_RATE_11M)
- {
- // 1. if CCK block on?
- if(!read_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn))
- write_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn, bEnable);//set CCK block on
-
- //Turn Off All Test Mode
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable);
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable);
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
-
- write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, 0x2); //transmit mode
- write_bbreg(pAdapter, rCCK0_System, bCCKScramble, 0x0); //turn off scramble setting
-
- //Set CCK Tx Test Rate
- //PHY_SetBBReg(pAdapter, rCCK0_System, bCCKTxRate, pMgntInfo->ForcedDataRate);
- write_bbreg(pAdapter, rCCK0_System, bCCKTxRate, 0x0); //Set FTxRate to 1Mbps
- }
-
- //Set for dynamic set Power index
- write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);
- write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);
-
- }
- else// Stop Carrier Suppression.
- {
- RT_TRACE(_module_mp_,_drv_alert_, ("SetCarrierSuppressionTx: test stop\n"));
- //if(pMgntInfo->dot11CurrentWirelessMode == WIRELESS_MODE_B)
- if (pAdapter->mppriv.rateidx <= MPT_RATE_11M ) {
- write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, 0x0); //normal mode
- write_bbreg(pAdapter, rCCK0_System, bCCKScramble, 0x1); //turn on scramble setting
-
- //BB Reset
- write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x0);
- write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x1);
- }
- //Stop for dynamic set Power index
- write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100);
- write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100);
- }
- //DbgPrint("\n MPT_ProSetCarrierSupp() is finished. \n");
-}
-
-void Hal_SetCCKContinuousTx(PADAPTER pAdapter, u8 bStart)
-{
- u32 cckrate;
-
- if (bStart)
- {
- RT_TRACE(_module_mp_, _drv_alert_,
- ("SetCCKContinuousTx: test start\n"));
-
- // 1. if CCK block on?
- if(!read_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn))
- write_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn, bEnable);//set CCK block on
-
- //Turn Off All Test Mode
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable);
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable);
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
- //Set CCK Tx Test Rate
- #if 0
- switch(pAdapter->mppriv.rateidx)
- {
- case 2:
- cckrate = 0;
- break;
- case 4:
- cckrate = 1;
- break;
- case 11:
- cckrate = 2;
- break;
- case 22:
- cckrate = 3;
- break;
- default:
- cckrate = 0;
- break;
- }
- #else
- cckrate = pAdapter->mppriv.rateidx;
- #endif
- write_bbreg(pAdapter, rCCK0_System, bCCKTxRate, cckrate);
- write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, 0x2); //transmit mode
- write_bbreg(pAdapter, rCCK0_System, bCCKScramble, bEnable); //turn on scramble setting
-
- write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);
- write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);
-
- // Patch for CCK 11M waveform
- if (cckrate == MPT_RATE_1M)
- write_bbreg(pAdapter, 0xA71, BIT(6), bDisable);
- else
- write_bbreg(pAdapter, 0xA71, BIT(6), bEnable);
-
-
- }
- else {
- RT_TRACE(_module_mp_, _drv_info_,
- ("SetCCKContinuousTx: test stop\n"));
-
- write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, 0x0); //normal mode
- write_bbreg(pAdapter, rCCK0_System, bCCKScramble, bEnable); //turn on scramble setting
-
- //BB Reset
- write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x0);
- write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x1);
-
- write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100);
- write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100);
- }
-
- pAdapter->mppriv.MptCtx.bCckContTx = bStart;
- pAdapter->mppriv.MptCtx.bOfdmContTx = _FALSE;
-}/* mpt_StartCckContTx */
-
-void Hal_SetOFDMContinuousTx(PADAPTER pAdapter, u8 bStart)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
-
- if (bStart) {
- RT_TRACE(_module_mp_, _drv_info_, ("SetOFDMContinuousTx: test start\n"));
- // 1. if OFDM block on?
- if(!read_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn))
- write_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn, bEnable);//set OFDM block on
- {
-
- // 2. set CCK test mode off, set to CCK normal mode
- write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, bDisable);
-
- // 3. turn on scramble setting
- write_bbreg(pAdapter, rCCK0_System, bCCKScramble, bEnable);
- }
- // 4. Turn On Continue Tx and turn off the other test modes.
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bEnable);
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable);
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
-
- write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);
- write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);
-
- } else {
- RT_TRACE(_module_mp_,_drv_info_, ("SetOFDMContinuousTx: test stop\n"));
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable);
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable);
- write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
- //Delay 10 ms
- rtw_msleep_os(10);
- //BB Reset
- write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x0);
- write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x1);
-
- write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100);
- write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100);
- }
-
- pAdapter->mppriv.MptCtx.bCckContTx = _FALSE;
- pAdapter->mppriv.MptCtx.bOfdmContTx = bStart;
-}/* mpt_StartOfdmContTx */
-
-void Hal_SetContinuousTx(PADAPTER pAdapter, u8 bStart)
-{
-#if 0
- // ADC turn off [bit24-21] adc port0 ~ port1
- if (bStart) {
- write_bbreg(pAdapter, rRx_Wait_CCCA, read_bbreg(pAdapter, rRx_Wait_CCCA) & 0xFE1FFFFF);
- rtw_usleep_os(100);
- }
-#endif
- RT_TRACE(_module_mp_, _drv_info_,
- ("SetContinuousTx: rate:%d\n", pAdapter->mppriv.rateidx));
-
- pAdapter->mppriv.MptCtx.bStartContTx = bStart;
- if (pAdapter->mppriv.rateidx <= MPT_RATE_11M)
- {
- Hal_SetCCKContinuousTx(pAdapter, bStart);
- }
- else if ((pAdapter->mppriv.rateidx >= MPT_RATE_6M) &&
- (pAdapter->mppriv.rateidx <= MPT_RATE_MCS15))
- {
- Hal_SetOFDMContinuousTx(pAdapter, bStart);
- }
-#if 0
- // ADC turn on [bit24-21] adc port0 ~ port1
- if (!bStart) {
- write_bbreg(pAdapter, rRx_Wait_CCCA, read_bbreg(pAdapter, rRx_Wait_CCCA) | 0x01E00000);
- }
-#endif
-}
-
-#endif // CONFIG_MP_INCLUDE
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#define _RTL8723A_MP_C_
+#ifdef CONFIG_MP_INCLUDED
+
+#include <drv_types.h>
+#include <rtw_mp.h>
+#include <rtl8723a_hal.h>
+
+
+/*-----------------------------------------------------------------------------
+ * Function: mpt_SwitchRfSetting
+ *
+ * Overview: Change RF Setting when we siwthc channel/rate/BW for MP.
+ *
+ * Input: IN PADAPTER pAdapter
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 01/08/2009 MHC Suggestion from SD3 Willis for 92S series.
+ * 01/09/2009 MHC Add CCK modification for 40MHZ. Suggestion from SD3.
+ *
+ *---------------------------------------------------------------------------*/
+ static void phy_SwitchRfSetting8723A(PADAPTER pAdapter,u8 channel )
+{
+
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ u32 u4RF_IPA[3], u4RF_TXBIAS, u4RF_SYN_G2;
+
+ DBG_8192C("phy_SwitchRfSetting8723A channel=%d\n",channel);
+
+
+ if(channel >= 1 && channel <= 9)
+ {
+ DBG_8192C("phy_SwitchRfSetting8723A REG_AFE_PLL_CTRL 0xF0FFFF83\n");
+ PHY_SetBBReg(pAdapter, REG_AFE_PLL_CTRL, bMaskDWord, 0xF0FFFF83);
+ }
+ else if (channel >= 10 && channel <= 14)
+ {
+ DBG_8192C("phy_SwitchRfSetting8723A REG_AFE_PLL_CTRL 0xF2FFFF83\n");
+ PHY_SetBBReg(pAdapter, REG_AFE_PLL_CTRL, bMaskDWord, 0xF2FFFF83);
+ }
+
+
+#if DEV_BUS_TYPE==RT_PCI_INTERFACE
+ u4Byte u4RF_IPA[3], u4RF_TXBIAS, u4RF_SYN_G2;
+ //default value
+ {
+ u4RF_IPA[0] = 0x4F424; //CCK
+ u4RF_IPA[1] = 0xCF424; //OFDM
+ u4RF_IPA[2] = 0x8F424; //MCS
+ u4RF_TXBIAS = 0xC0356;
+ u4RF_SYN_G2 = 0x4F200;
+ }
+
+ switch(channel)
+ {
+ case 1:
+ u4RF_IPA[0] = 0x4F40C;
+ u4RF_IPA[1] = 0xCF466;
+ u4RF_TXBIAS = 0xC0350;
+ u4RF_SYN_G2 = 0x0F400;
+ break;
+
+ case 2:
+ u4RF_IPA[0] = 0x4F407;
+ u4RF_TXBIAS = 0xC0350;
+ u4RF_SYN_G2 = 0x0F400;
+ break;
+
+ case 3:
+ u4RF_IPA[0] = 0x4F407;
+ u4RF_IPA[2] = 0x8F466;
+ u4RF_TXBIAS = 0xC0350;
+ u4RF_SYN_G2 = 0x0F400;
+ break;
+
+ case 5:
+ case 8:
+ u4RF_SYN_G2 = 0x0F400;
+ break;
+
+ case 6:
+ case 13:
+ u4RF_IPA[0] = 0x4F40C;
+ break;
+
+ case 7:
+ u4RF_IPA[0] = 0x4F40C;
+ u4RF_SYN_G2 = 0x0F400;
+ break;
+
+ case 9:
+ u4RF_IPA[2] = 0x8F454;
+ u4RF_SYN_G2 = 0x0F400;
+ break;
+
+ case 11:
+ u4RF_IPA[0] = 0x4F40C;
+ u4RF_IPA[1] = 0xCF454;
+ u4RF_SYN_G2 = 0x0F400;
+ break;
+
+ default:
+ u4RF_IPA[0] = 0x4F424;
+ u4RF_IPA[1] = 0x8F424;
+ u4RF_IPA[2] = 0xCF424;
+ u4RF_TXBIAS = 0xC0356;
+ u4RF_SYN_G2 = 0x4F200;
+ break;
+ }
+
+ PHY_SetRFReg(pAdapter, ODM_RF_PATH_A, RF_IPA, bRFRegOffsetMask, u4RF_IPA[0]);
+ PHY_SetRFReg(pAdapter, ODM_RF_PATH_A, RF_IPA, bRFRegOffsetMask, u4RF_IPA[1]);
+ PHY_SetRFReg(pAdapter, ODM_RF_PATH_A, RF_IPA, bRFRegOffsetMask, u4RF_IPA[2]);
+ PHY_SetRFReg(pAdapter, ODM_RF_PATH_A, RF_TXBIAS, bRFRegOffsetMask, u4RF_TXBIAS);
+ PHY_SetRFReg(pAdapter, ODM_RF_PATH_A, RF_SYN_G2, bRFRegOffsetMask, u4RF_SYN_G2);
+
+ if((channel >= 1 && channel <= 5) || (channel >= 8 && channel <= 9))
+ {
+ PHY_SetBBReg(pAdapter, REG_AFE_PLL_CTRL, bMaskDWord, 0xF0FFFF83);
+ }
+ else
+ {
+ PHY_SetBBReg(pAdapter, REG_AFE_PLL_CTRL, bMaskDWord, 0xF2FFFF83);
+ }
+
+#endif
+
+
+}
+
+
+
+
+void Hal_mpt_SwitchRfSetting(PADAPTER pAdapter)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ PMPT_CONTEXT pMptCtx = &(pAdapter->mppriv.MptCtx);
+ u8 ChannelToSw ;
+
+ pMptCtx->MptChannelToSw=pAdapter->mppriv.channel;
+ ChannelToSw =pMptCtx->MptChannelToSw;
+
+ phy_SwitchRfSetting8723A(pAdapter, ChannelToSw);
+}
+
+
+
+
+s32 Hal_SetPowerTracking(PADAPTER padapter, u8 enable)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct dm_priv *pdmpriv = &pHalData->dmpriv;
+
+
+ if (!netif_running(padapter->pnetdev)) {
+ RT_TRACE(_module_mp_, _drv_warning_, ("SetPowerTracking! Fail: interface not opened!\n"));
+ return _FAIL;
+ }
+
+ if (check_fwstate(&padapter->mlmepriv, WIFI_MP_STATE) == _FALSE) {
+ RT_TRACE(_module_mp_, _drv_warning_, ("SetPowerTracking! Fail: not in MP mode!\n"));
+ return _FAIL;
+ }
+
+ if (enable)
+ pdmpriv->TxPowerTrackControl = _TRUE;
+ else
+ pdmpriv->TxPowerTrackControl = _FALSE;
+
+ return _SUCCESS;
+}
+
+void Hal_GetPowerTracking(PADAPTER padapter, u8 *enable)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct dm_priv *pdmpriv = &pHalData->dmpriv;
+
+
+ *enable = pdmpriv->TxPowerTrackControl;
+}
+
+static void Hal_disable_dm(PADAPTER padapter)
+{
+ u8 v8;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct dm_priv *pdmpriv = &pHalData->dmpriv;
+
+
+ //3 1. disable firmware dynamic mechanism
+ // disable Power Training, Rate Adaptive
+ v8 = rtw_read8(padapter, REG_BCN_CTRL);
+ v8 &= ~EN_BCN_FUNCTION;
+ rtw_write8(padapter, REG_BCN_CTRL, v8);
+
+ //3 2. disable driver dynamic mechanism
+ // disable Dynamic Initial Gain
+ // disable High Power
+ // disable Power Tracking
+ Switch_DM_Func(padapter, DYNAMIC_FUNC_DISABLE, _FALSE);
+
+ // enable APK, LCK and IQK but disable power tracking
+ pdmpriv->TxPowerTrackControl = _FALSE;
+ Switch_DM_Func(padapter, DYNAMIC_RF_TX_PWR_TRACK , _TRUE);
+}
+
+void Hal_MPT_CCKTxPowerAdjust(PADAPTER Adapter, BOOLEAN bInCH14)
+{
+ u32 TempVal = 0, TempVal2 = 0, TempVal3 = 0;
+ u32 CurrCCKSwingVal = 0, CCKSwingIndex = 12;
+ u8 i;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+
+ // get current cck swing value and check 0xa22 & 0xa23 later to match the table.
+ CurrCCKSwingVal = read_bbreg(Adapter, rCCK0_TxFilter1, bMaskHWord);
+
+ if (!bInCH14)
+ {
+ // Readback the current bb cck swing value and compare with the table to
+ // get the current swing index
+ for (i = 0; i < CCK_TABLE_SIZE; i++)
+ {
+ if (((CurrCCKSwingVal&0xff) == (u32)CCKSwingTable_Ch1_Ch13[i][0]) &&
+ (((CurrCCKSwingVal&0xff00)>>8) == (u32)CCKSwingTable_Ch1_Ch13[i][1]))
+ {
+ CCKSwingIndex = i;
+// RT_TRACE(COMP_INIT, DBG_LOUD,("Ch1~13, Current reg0x%x = 0x%lx, CCKSwingIndex=0x%x\n",
+// (rCCK0_TxFilter1+2), CurrCCKSwingVal, CCKSwingIndex));
+ break;
+ }
+ }
+
+ //Write 0xa22 0xa23
+ TempVal = CCKSwingTable_Ch1_Ch13[CCKSwingIndex][0] +
+ (CCKSwingTable_Ch1_Ch13[CCKSwingIndex][1]<<8) ;
+
+
+ //Write 0xa24 ~ 0xa27
+ TempVal2 = 0;
+ TempVal2 = CCKSwingTable_Ch1_Ch13[CCKSwingIndex][2] +
+ (CCKSwingTable_Ch1_Ch13[CCKSwingIndex][3]<<8) +
+ (CCKSwingTable_Ch1_Ch13[CCKSwingIndex][4]<<16 )+
+ (CCKSwingTable_Ch1_Ch13[CCKSwingIndex][5]<<24);
+
+ //Write 0xa28 0xa29
+ TempVal3 = 0;
+ TempVal3 = CCKSwingTable_Ch1_Ch13[CCKSwingIndex][6] +
+ (CCKSwingTable_Ch1_Ch13[CCKSwingIndex][7]<<8) ;
+ }
+ else
+ {
+ for (i = 0; i < CCK_TABLE_SIZE; i++)
+ {
+ if (((CurrCCKSwingVal&0xff) == (u32)CCKSwingTable_Ch14[i][0]) &&
+ (((CurrCCKSwingVal&0xff00)>>8) == (u32)CCKSwingTable_Ch14[i][1]))
+ {
+ CCKSwingIndex = i;
+// RT_TRACE(COMP_INIT, DBG_LOUD,("Ch14, Current reg0x%x = 0x%lx, CCKSwingIndex=0x%x\n",
+// (rCCK0_TxFilter1+2), CurrCCKSwingVal, CCKSwingIndex));
+ break;
+ }
+ }
+
+ //Write 0xa22 0xa23
+ TempVal = CCKSwingTable_Ch14[CCKSwingIndex][0] +
+ (CCKSwingTable_Ch14[CCKSwingIndex][1]<<8) ;
+
+ //Write 0xa24 ~ 0xa27
+ TempVal2 = 0;
+ TempVal2 = CCKSwingTable_Ch14[CCKSwingIndex][2] +
+ (CCKSwingTable_Ch14[CCKSwingIndex][3]<<8) +
+ (CCKSwingTable_Ch14[CCKSwingIndex][4]<<16 )+
+ (CCKSwingTable_Ch14[CCKSwingIndex][5]<<24);
+
+ //Write 0xa28 0xa29
+ TempVal3 = 0;
+ TempVal3 = CCKSwingTable_Ch14[CCKSwingIndex][6] +
+ (CCKSwingTable_Ch14[CCKSwingIndex][7]<<8) ;
+ }
+
+ write_bbreg(Adapter, rCCK0_TxFilter1, bMaskHWord, TempVal);
+ write_bbreg(Adapter, rCCK0_TxFilter2, bMaskDWord, TempVal2);
+ write_bbreg(Adapter, rCCK0_DebugPort, bMaskLWord, TempVal3);
+}
+
+void Hal_MPT_CCKTxPowerAdjustbyIndex(PADAPTER pAdapter, BOOLEAN beven)
+{
+ s32 TempCCk;
+ u8 CCK_index, CCK_index_old;
+ u8 Action = 0; //0: no action, 1: even->odd, 2:odd->even
+ u8 TimeOut = 100;
+ s32 i = 0;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ PMPT_CONTEXT pMptCtx = &pAdapter->mppriv.MptCtx;
+
+
+ if (!IS_92C_SERIAL(pHalData->VersionID))
+ return;
+#if 0
+ while(PlatformAtomicExchange(&Adapter->IntrCCKRefCount, TRUE) == TRUE)
+ {
+ PlatformSleepUs(100);
+ TimeOut--;
+ if(TimeOut <= 0)
+ {
+ RTPRINT(FINIT, INIT_TxPower,
+ ("!!!MPT_CCKTxPowerAdjustbyIndex Wait for check CCK gain index too long!!!\n" ));
+ break;
+ }
+ }
+#endif
+ if (beven && !pMptCtx->bMptIndexEven) //odd->even
+ {
+ Action = 2;
+ pMptCtx->bMptIndexEven = _TRUE;
+ }
+ else if (!beven && pMptCtx->bMptIndexEven) //even->odd
+ {
+ Action = 1;
+ pMptCtx->bMptIndexEven = _FALSE;
+ }
+
+ if (Action != 0)
+ {
+ //Query CCK default setting From 0xa24
+ TempCCk = read_bbreg(pAdapter, rCCK0_TxFilter2, bMaskDWord) & bMaskCCK;
+ for (i = 0; i < CCK_TABLE_SIZE; i++)
+ {
+ if (pHalData->dmpriv.bCCKinCH14)
+ {
+ if (_rtw_memcmp((void*)&TempCCk, (void*)&CCKSwingTable_Ch14[i][2], 4) == _TRUE)
+ {
+ CCK_index_old = (u8) i;
+// RTPRINT(FINIT, INIT_TxPower,("MPT_CCKTxPowerAdjustbyIndex: Initial reg0x%x = 0x%lx, CCK_index=0x%x, ch 14 %d\n",
+// rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
+ break;
+ }
+ }
+ else
+ {
+ if (_rtw_memcmp((void*)&TempCCk, (void*)&CCKSwingTable_Ch1_Ch13[i][2], 4) == _TRUE)
+ {
+ CCK_index_old = (u8) i;
+// RTPRINT(FINIT, INIT_TxPower,("MPT_CCKTxPowerAdjustbyIndex: Initial reg0x%x = 0x%lx, CCK_index=0x%x, ch14 %d\n",
+// rCCK0_TxFilter2, TempCCk, CCK_index_old, pHalData->bCCKinCH14));
+ break;
+ }
+ }
+ }
+
+ if (Action == 1)
+ CCK_index = CCK_index_old - 1;
+ else
+ CCK_index = CCK_index_old + 1;
+
+// RTPRINT(FINIT, INIT_TxPower,("MPT_CCKTxPowerAdjustbyIndex: new CCK_index=0x%x\n",
+// CCK_index));
+
+ //Adjust CCK according to gain index
+ if (!pHalData->dmpriv.bCCKinCH14) {
+ rtw_write8(pAdapter, 0xa22, CCKSwingTable_Ch1_Ch13[CCK_index][0]);
+ rtw_write8(pAdapter, 0xa23, CCKSwingTable_Ch1_Ch13[CCK_index][1]);
+ rtw_write8(pAdapter, 0xa24, CCKSwingTable_Ch1_Ch13[CCK_index][2]);
+ rtw_write8(pAdapter, 0xa25, CCKSwingTable_Ch1_Ch13[CCK_index][3]);
+ rtw_write8(pAdapter, 0xa26, CCKSwingTable_Ch1_Ch13[CCK_index][4]);
+ rtw_write8(pAdapter, 0xa27, CCKSwingTable_Ch1_Ch13[CCK_index][5]);
+ rtw_write8(pAdapter, 0xa28, CCKSwingTable_Ch1_Ch13[CCK_index][6]);
+ rtw_write8(pAdapter, 0xa29, CCKSwingTable_Ch1_Ch13[CCK_index][7]);
+ } else {
+ rtw_write8(pAdapter, 0xa22, CCKSwingTable_Ch14[CCK_index][0]);
+ rtw_write8(pAdapter, 0xa23, CCKSwingTable_Ch14[CCK_index][1]);
+ rtw_write8(pAdapter, 0xa24, CCKSwingTable_Ch14[CCK_index][2]);
+ rtw_write8(pAdapter, 0xa25, CCKSwingTable_Ch14[CCK_index][3]);
+ rtw_write8(pAdapter, 0xa26, CCKSwingTable_Ch14[CCK_index][4]);
+ rtw_write8(pAdapter, 0xa27, CCKSwingTable_Ch14[CCK_index][5]);
+ rtw_write8(pAdapter, 0xa28, CCKSwingTable_Ch14[CCK_index][6]);
+ rtw_write8(pAdapter, 0xa29, CCKSwingTable_Ch14[CCK_index][7]);
+ }
+ }
+#if 0
+ RTPRINT(FINIT, INIT_TxPower,
+ ("MPT_CCKTxPowerAdjustbyIndex 0xa20=%x\n", PlatformEFIORead4Byte(Adapter, 0xa20)));
+
+ PlatformAtomicExchange(&Adapter->IntrCCKRefCount, FALSE);
+#endif
+}
+/*---------------------------hal\rtl8192c\MPT_HelperFunc.c---------------------------*/
+
+/*
+ * SetChannel
+ * Description
+ * Use H2C command to change channel,
+ * not only modify rf register, but also other setting need to be done.
+ */
+void Hal_SetChannel(PADAPTER pAdapter)
+{
+#if 0
+ struct mp_priv *pmp = &pAdapter->mppriv;
+
+// SelectChannel(pAdapter, pmp->channel);
+ set_channel_bwmode(pAdapter, pmp->channel, pmp->channel_offset, pmp->bandwidth);
+#else
+ u8 eRFPath;
+
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ struct mp_priv *pmp = &pAdapter->mppriv;
+ u8 channel = pmp->channel;
+ u8 bandwidth = pmp->bandwidth;
+ u8 rate = pmp->rateidx;
+
+
+ // set RF channel register
+ for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++)
+ {
+ if(IS_HARDWARE_TYPE_8192D(pAdapter))
+ _write_rfreg(pAdapter, (RF_RADIO_PATH_E)eRFPath, rRfChannel, 0xFF, channel);
+ else
+ _write_rfreg(pAdapter, eRFPath, rRfChannel, 0x3FF, channel);
+ }
+ Hal_mpt_SwitchRfSetting(pAdapter);
+
+ SelectChannel(pAdapter, channel);
+
+ if (pHalData->CurrentChannel == 14 && !pHalData->dmpriv.bCCKinCH14) {
+ pHalData->dmpriv.bCCKinCH14 = _TRUE;
+ Hal_MPT_CCKTxPowerAdjust(pAdapter, pHalData->dmpriv.bCCKinCH14);
+ }
+ else if (pHalData->CurrentChannel != 14 && pHalData->dmpriv.bCCKinCH14) {
+ pHalData->dmpriv.bCCKinCH14 = _FALSE;
+ Hal_MPT_CCKTxPowerAdjust(pAdapter, pHalData->dmpriv.bCCKinCH14);
+ }
+
+#endif
+}
+
+/*
+ * Notice
+ * Switch bandwitdth may change center frequency(channel)
+ */
+void Hal_SetBandwidth(PADAPTER pAdapter)
+{
+ struct mp_priv *pmp = &pAdapter->mppriv;
+
+
+ SetBWMode(pAdapter, pmp->bandwidth, pmp->prime_channel_offset);
+ Hal_mpt_SwitchRfSetting(pAdapter);
+}
+
+void Hal_SetCCKTxPower(PADAPTER pAdapter, u8 *TxPower)
+{
+ u32 tmpval = 0;
+
+
+ // rf-A cck tx power
+ write_bbreg(pAdapter, rTxAGC_A_CCK1_Mcs32, bMaskByte1, TxPower[RF_PATH_A]);
+ tmpval = (TxPower[RF_PATH_A]<<16) | (TxPower[RF_PATH_A]<<8) | TxPower[RF_PATH_A];
+ write_bbreg(pAdapter, rTxAGC_B_CCK11_A_CCK2_11, 0xffffff00, tmpval);
+
+ // rf-B cck tx power
+ write_bbreg(pAdapter, rTxAGC_B_CCK11_A_CCK2_11, bMaskByte0, TxPower[RF_PATH_B]);
+ tmpval = (TxPower[RF_PATH_B]<<16) | (TxPower[RF_PATH_B]<<8) | TxPower[RF_PATH_B];
+ write_bbreg(pAdapter, rTxAGC_B_CCK1_55_Mcs32, 0xffffff00, tmpval);
+
+ RT_TRACE(_module_mp_, _drv_notice_,
+ ("-SetCCKTxPower: A[0x%02x] B[0x%02x]\n",
+ TxPower[RF_PATH_A], TxPower[RF_PATH_B]));
+}
+
+void Hal_SetOFDMTxPower(PADAPTER pAdapter, u8 *TxPower)
+{
+ u32 TxAGC = 0;
+ u8 tmpval = 0;
+ PMPT_CONTEXT pMptCtx = &pAdapter->mppriv.MptCtx;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+
+
+ // HT Tx-rf(A)
+ tmpval = TxPower[RF_PATH_A];
+ TxAGC = (tmpval<<24) | (tmpval<<16) | (tmpval<<8) | tmpval;
+
+ write_bbreg(pAdapter, rTxAGC_A_Rate18_06, bMaskDWord, TxAGC);
+ write_bbreg(pAdapter, rTxAGC_A_Rate54_24, bMaskDWord, TxAGC);
+ write_bbreg(pAdapter, rTxAGC_A_Mcs03_Mcs00, bMaskDWord, TxAGC);
+ write_bbreg(pAdapter, rTxAGC_A_Mcs07_Mcs04, bMaskDWord, TxAGC);
+ write_bbreg(pAdapter, rTxAGC_A_Mcs11_Mcs08, bMaskDWord, TxAGC);
+ write_bbreg(pAdapter, rTxAGC_A_Mcs15_Mcs12, bMaskDWord, TxAGC);
+
+ if (pHalData->dmpriv.bAPKdone && !IS_NORMAL_CHIP(pHalData->VersionID))
+ {
+ if (tmpval > pMptCtx->APK_bound[RF_PATH_A])
+ write_rfreg(pAdapter, RF_PATH_A, 0xe, pHalData->dmpriv.APKoutput[0][0]);
+ else
+ write_rfreg(pAdapter, RF_PATH_A, 0xe, pHalData->dmpriv.APKoutput[0][1]);
+ }
+
+ // HT Tx-rf(B)
+ tmpval = TxPower[RF_PATH_B];
+ TxAGC = (tmpval<<24) | (tmpval<<16) | (tmpval<<8) | tmpval;
+
+ write_bbreg(pAdapter, rTxAGC_B_Rate18_06, bMaskDWord, TxAGC);
+ write_bbreg(pAdapter, rTxAGC_B_Rate54_24, bMaskDWord, TxAGC);
+ write_bbreg(pAdapter, rTxAGC_B_Mcs03_Mcs00, bMaskDWord, TxAGC);
+ write_bbreg(pAdapter, rTxAGC_B_Mcs07_Mcs04, bMaskDWord, TxAGC);
+ write_bbreg(pAdapter, rTxAGC_B_Mcs11_Mcs08, bMaskDWord, TxAGC);
+ write_bbreg(pAdapter, rTxAGC_B_Mcs15_Mcs12, bMaskDWord, TxAGC);
+
+ if (pHalData->dmpriv.bAPKdone && !IS_NORMAL_CHIP(pHalData->VersionID))
+ {
+ if (tmpval > pMptCtx->APK_bound[RF_PATH_B])
+ write_rfreg(pAdapter, RF_PATH_B, 0xe, pHalData->dmpriv.APKoutput[1][0]);
+ else
+ write_rfreg(pAdapter, RF_PATH_B, 0xe, pHalData->dmpriv.APKoutput[1][1]);
+ }
+
+ RT_TRACE(_module_mp_, _drv_notice_,
+ ("-SetOFDMTxPower: A[0x%02x] B[0x%02x]\n",
+ TxPower[RF_PATH_A], TxPower[RF_PATH_B]));
+}
+
+void Hal_SetAntennaPathPower(PADAPTER pAdapter)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ u8 TxPowerLevel[MAX_RF_PATH_NUMS];
+ u8 rfPath;
+
+ TxPowerLevel[RF_PATH_A] = pAdapter->mppriv.txpoweridx;
+ TxPowerLevel[RF_PATH_B] = pAdapter->mppriv.txpoweridx_b;
+
+ switch (pAdapter->mppriv.antenna_tx)
+ {
+ case ANTENNA_A:
+ default:
+ rfPath = RF_PATH_A;
+ break;
+ case ANTENNA_B:
+ rfPath = RF_PATH_B;
+ break;
+ case ANTENNA_C:
+ rfPath = RF_PATH_C;
+ break;
+ }
+
+ switch (pHalData->rf_chip)
+ {
+ case RF_8225:
+ case RF_8256:
+ case RF_6052:
+ Hal_SetCCKTxPower(pAdapter, TxPowerLevel);
+ if (pAdapter->mppriv.rateidx < MPT_RATE_6M) // CCK rate
+ Hal_MPT_CCKTxPowerAdjustbyIndex(pAdapter, TxPowerLevel[rfPath]%2 == 0);
+ Hal_SetOFDMTxPower(pAdapter, TxPowerLevel);
+ break;
+
+ default:
+ break;
+ }
+}
+
+void Hal_SetTxPower(PADAPTER pAdapter)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ u8 TxPower = pAdapter->mppriv.txpoweridx;
+ u8 TxPowerLevel[MAX_RF_PATH_NUMS];
+ u8 rf, rfPath;
+
+ for (rf = 0; rf < MAX_RF_PATH_NUMS; rf++) {
+ TxPowerLevel[rf] = TxPower;
+ }
+
+ switch (pAdapter->mppriv.antenna_tx)
+ {
+ case ANTENNA_A:
+ default:
+ rfPath = RF_PATH_A;
+ break;
+ case ANTENNA_B:
+ rfPath = RF_PATH_B;
+ break;
+ case ANTENNA_C:
+ rfPath = RF_PATH_C;
+ break;
+ }
+
+ switch (pHalData->rf_chip)
+ {
+ // 2008/09/12 MH Test only !! We enable the TX power tracking for MP!!!!!
+ // We should call normal driver API later!!
+ case RF_8225:
+ case RF_8256:
+ case RF_6052:
+ Hal_SetCCKTxPower(pAdapter, TxPowerLevel);
+ if (pAdapter->mppriv.rateidx < MPT_RATE_6M) // CCK rate
+ Hal_MPT_CCKTxPowerAdjustbyIndex(pAdapter, TxPowerLevel[rfPath]%2 == 0);
+ Hal_SetOFDMTxPower(pAdapter, TxPowerLevel);
+ break;
+
+ default:
+ break;
+ }
+
+// SetCCKTxPower(pAdapter, TxPower);
+// SetOFDMTxPower(pAdapter, TxPower);
+}
+
+void Hal_SetTxAGCOffset(PADAPTER pAdapter, u32 ulTxAGCOffset)
+{
+ u32 TxAGCOffset_B, TxAGCOffset_C, TxAGCOffset_D,tmpAGC;
+
+ return ;
+
+ TxAGCOffset_B = (ulTxAGCOffset&0x000000ff);
+ TxAGCOffset_C = ((ulTxAGCOffset&0x0000ff00)>>8);
+ TxAGCOffset_D = ((ulTxAGCOffset&0x00ff0000)>>16);
+
+ tmpAGC = (TxAGCOffset_D<<8 | TxAGCOffset_C<<4 | TxAGCOffset_B);
+ write_bbreg(pAdapter, rFPGA0_TxGainStage,
+ (bXBTxAGC|bXCTxAGC|bXDTxAGC), tmpAGC);
+}
+
+void Hal_SetDataRate(PADAPTER pAdapter)
+{
+ if(!IS_HARDWARE_TYPE_8723A(pAdapter))
+ Hal_mpt_SwitchRfSetting(pAdapter);
+}
+
+
+void Hal_SetAntenna(PADAPTER pAdapter)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+
+ R_ANTENNA_SELECT_OFDM *p_ofdm_tx; /* OFDM Tx register */
+ R_ANTENNA_SELECT_CCK *p_cck_txrx;
+
+ u8 r_rx_antenna_ofdm = 0, r_ant_select_cck_val = 0;
+ u8 chgTx = 0, chgRx = 0;
+ u32 r_ant_sel_cck_val = 0, r_ant_select_ofdm_val = 0, r_ofdm_tx_en_val = 0;
+
+
+ p_ofdm_tx = (R_ANTENNA_SELECT_OFDM *)&r_ant_select_ofdm_val;
+ p_cck_txrx = (R_ANTENNA_SELECT_CCK *)&r_ant_select_cck_val;
+
+ p_ofdm_tx->r_ant_ht1 = 0x1;
+ p_ofdm_tx->r_ant_ht2 = 0x2; // Second TX RF path is A
+ p_ofdm_tx->r_ant_non_ht = 0x3; // 0x1+0x2=0x3
+
+ switch (pAdapter->mppriv.antenna_tx)
+ {
+ case ANTENNA_A:
+ p_ofdm_tx->r_tx_antenna = 0x1;
+ r_ofdm_tx_en_val = 0x1;
+ p_ofdm_tx->r_ant_l = 0x1;
+ p_ofdm_tx->r_ant_ht_s1 = 0x1;
+ p_ofdm_tx->r_ant_non_ht_s1 = 0x1;
+ p_cck_txrx->r_ccktx_enable = 0x8;
+ chgTx = 1;
+
+ // From SD3 Willis suggestion !!! Set RF A=TX and B as standby
+// if (IS_HARDWARE_TYPE_8192S(pAdapter))
+ {
+ write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter2, 0xe, 2);
+ write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter2, 0xe, 1);
+ r_ofdm_tx_en_val = 0x3;
+
+ // Power save
+ //cosa r_ant_select_ofdm_val = 0x11111111;
+
+ // We need to close RFB by SW control
+ if (pHalData->rf_type == RF_2T2R)
+ {
+ PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT10, 0);
+ PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT26, 1);
+ PHY_SetBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT10, 0);
+ PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT1, 1);
+ PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT17, 0);
+ }
+ }
+ break;
+
+ case ANTENNA_B:
+ p_ofdm_tx->r_tx_antenna = 0x2;
+ r_ofdm_tx_en_val = 0x2;
+ p_ofdm_tx->r_ant_l = 0x2;
+ p_ofdm_tx->r_ant_ht_s1 = 0x2;
+ p_ofdm_tx->r_ant_non_ht_s1 = 0x2;
+ p_cck_txrx->r_ccktx_enable = 0x4;
+ chgTx = 1;
+
+ // From SD3 Willis suggestion !!! Set RF A as standby
+ //if (IS_HARDWARE_TYPE_8192S(pAdapter))
+ {
+ PHY_SetBBReg(pAdapter, rFPGA0_XA_HSSIParameter2, 0xe, 1);
+ PHY_SetBBReg(pAdapter, rFPGA0_XB_HSSIParameter2, 0xe, 2);
+// r_ofdm_tx_en_val = 0x3;
+
+ // Power save
+ //cosa r_ant_select_ofdm_val = 0x22222222;
+
+ // 2008/10/31 MH From SD3 Willi's suggestion. We must read RF 1T table.
+ // 2009/01/08 MH From Sd3 Willis. We need to close RFA by SW control
+ if (pHalData->rf_type == RF_2T2R || pHalData->rf_type == RF_1T2R)
+ {
+ PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT10, 1);
+ PHY_SetBBReg(pAdapter, rFPGA0_XA_RFInterfaceOE, BIT10, 0);
+ PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT26, 0);
+// PHY_SetBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT10, 0);
+ PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT1, 0);
+ PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT17, 1);
+ }
+ }
+ break;
+
+ case ANTENNA_AB: // For 8192S
+ p_ofdm_tx->r_tx_antenna = 0x3;
+ r_ofdm_tx_en_val = 0x3;
+ p_ofdm_tx->r_ant_l = 0x3;
+ p_ofdm_tx->r_ant_ht_s1 = 0x3;
+ p_ofdm_tx->r_ant_non_ht_s1 = 0x3;
+ p_cck_txrx->r_ccktx_enable = 0xC;
+ chgTx = 1;
+
+ // From SD3 Willis suggestion !!! Set RF B as standby
+ //if (IS_HARDWARE_TYPE_8192S(pAdapter))
+ {
+ PHY_SetBBReg(pAdapter, rFPGA0_XA_HSSIParameter2, 0xe, 2);
+ PHY_SetBBReg(pAdapter, rFPGA0_XB_HSSIParameter2, 0xe, 2);
+
+ // Disable Power save
+ //cosa r_ant_select_ofdm_val = 0x3321333;
+#if 0
+ // 2008/10/31 MH From SD3 Willi's suggestion. We must read RFA 2T table.
+ if ((pHalData->VersionID == VERSION_8192S_ACUT)) // For RTL8192SU A-Cut only, by Roger, 2008.11.07.
+ {
+ mpt_RFConfigFromPreParaArrary(pAdapter, 1, RF_PATH_A);
+ }
+#endif
+ // 2009/01/08 MH From Sd3 Willis. We need to enable RFA/B by SW control
+ if (pHalData->rf_type == RF_2T2R)
+ {
+ PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT10, 0);
+ PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT26, 0);
+// PHY_SetBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT10, 0);
+ PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT1, 1);
+ PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT17, 1);
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ //
+ // r_rx_antenna_ofdm, bit0=A, bit1=B, bit2=C, bit3=D
+ // r_cckrx_enable : CCK default, 0=A, 1=B, 2=C, 3=D
+ // r_cckrx_enable_2 : CCK option, 0=A, 1=B, 2=C, 3=D
+ //
+ switch (pAdapter->mppriv.antenna_rx)
+ {
+ case ANTENNA_A:
+ r_rx_antenna_ofdm = 0x1; // A
+ p_cck_txrx->r_cckrx_enable = 0x0; // default: A
+ p_cck_txrx->r_cckrx_enable_2 = 0x0; // option: A
+ chgRx = 1;
+ break;
+
+ case ANTENNA_B:
+ r_rx_antenna_ofdm = 0x2; // B
+ p_cck_txrx->r_cckrx_enable = 0x1; // default: B
+ p_cck_txrx->r_cckrx_enable_2 = 0x1; // option: B
+ chgRx = 1;
+ break;
+
+ case ANTENNA_AB:
+ r_rx_antenna_ofdm = 0x3; // AB
+ p_cck_txrx->r_cckrx_enable = 0x0; // default:A
+ p_cck_txrx->r_cckrx_enable_2 = 0x1; // option:B
+ chgRx = 1;
+ break;
+
+ default:
+ break;
+ }
+
+ if (chgTx && chgRx)
+ {
+ switch(pHalData->rf_chip)
+ {
+ case RF_8225:
+ case RF_8256:
+ case RF_6052:
+ //r_ant_sel_cck_val = r_ant_select_cck_val;
+ PHY_SetBBReg(pAdapter, rFPGA1_TxInfo, 0x7fffffff, r_ant_select_ofdm_val); //OFDM Tx
+ PHY_SetBBReg(pAdapter, rFPGA0_TxInfo, 0x0000000f, r_ofdm_tx_en_val); //OFDM Tx
+ PHY_SetBBReg(pAdapter, rOFDM0_TRxPathEnable, 0x0000000f, r_rx_antenna_ofdm); //OFDM Rx
+ PHY_SetBBReg(pAdapter, rOFDM1_TRxPathEnable, 0x0000000f, r_rx_antenna_ofdm); //OFDM Rx
+ PHY_SetBBReg(pAdapter, rCCK0_AFESetting, bMaskByte3, r_ant_select_cck_val);//r_ant_sel_cck_val); //CCK TxRx
+
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ RT_TRACE(_module_mp_, _drv_notice_, ("-SwitchAntenna: finished\n"));
+}
+
+s32 Hal_SetThermalMeter(PADAPTER pAdapter, u8 target_ther)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+
+
+ if (!netif_running(pAdapter->pnetdev)) {
+ RT_TRACE(_module_mp_, _drv_warning_, ("SetThermalMeter! Fail: interface not opened!\n"));
+ return _FAIL;
+ }
+
+ if (check_fwstate(&pAdapter->mlmepriv, WIFI_MP_STATE) == _FALSE) {
+ RT_TRACE(_module_mp_, _drv_warning_, ("SetThermalMeter: Fail! not in MP mode!\n"));
+ return _FAIL;
+ }
+
+ target_ther &= 0xff;
+ if (target_ther < 0x07)
+ target_ther = 0x07;
+ else if (target_ther > 0x1d)
+ target_ther = 0x1d;
+
+ pHalData->EEPROMThermalMeter = target_ther;
+
+ return _SUCCESS;
+}
+
+void Hal_TriggerRFThermalMeter(PADAPTER pAdapter)
+{
+
+ write_rfreg(pAdapter, RF_PATH_A, RF_T_METER, 0x60); // 0x24: RF Reg[6:5]
+
+// RT_TRACE(_module_mp_,_drv_alert_, ("TriggerRFThermalMeter() finished.\n" ));
+}
+
+u8 Hal_ReadRFThermalMeter(PADAPTER pAdapter)
+{
+ u32 ThermalValue = 0;
+
+ ThermalValue = _read_rfreg(pAdapter, RF_PATH_A, RF_T_METER, 0x1F); // 0x24: RF Reg[4:0]
+// RT_TRACE(_module_mp_, _drv_alert_, ("ThermalValue = 0x%x\n", ThermalValue));
+ return (u8)ThermalValue;
+}
+
+void Hal_GetThermalMeter(PADAPTER pAdapter, u8 *value)
+{
+#if 0
+ fw_cmd(pAdapter, IOCMD_GET_THERMAL_METER);
+ rtw_msleep_os(1000);
+ fw_cmd_data(pAdapter, value, 1);
+ *value &= 0xFF;
+#else
+
+ Hal_TriggerRFThermalMeter(pAdapter);
+ rtw_msleep_os(1000);
+ *value = Hal_ReadRFThermalMeter(pAdapter);
+#endif
+}
+
+void Hal_SetSingleCarrierTx(PADAPTER pAdapter, u8 bStart)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ pAdapter->mppriv.MptCtx.bSingleCarrier = bStart;
+ if (bStart)// Start Single Carrier.
+ {
+ RT_TRACE(_module_mp_,_drv_alert_, ("SetSingleCarrierTx: test start\n"));
+ // 1. if OFDM block on?
+ if(!read_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn))
+ write_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn, bEnable);//set OFDM block on
+
+ {
+ // 2. set CCK test mode off, set to CCK normal mode
+ write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, bDisable);
+ // 3. turn on scramble setting
+ write_bbreg(pAdapter, rCCK0_System, bCCKScramble, bEnable);
+ }
+ // 4. Turn On Single Carrier Tx and turn off the other test modes.
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable);
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bEnable);
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
+#ifdef CONFIG_RTL8192C
+ // 5. Disable TX power saving at STF & LLTF
+ write_bbreg(pAdapter, rOFDM1_LSTF, BIT22, 1);
+#endif
+ }
+ else// Stop Single Carrier.
+ {
+ RT_TRACE(_module_mp_,_drv_alert_, ("SetSingleCarrierTx: test stop\n"));
+
+ // Turn off all test modes.
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable);
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable);
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
+#ifdef CONFIG_RTL8192C
+ // Cancel disable TX power saving at STF&LLTF
+ write_bbreg(pAdapter, rOFDM1_LSTF, BIT22, 0);
+#endif
+ //Delay 10 ms //delay_ms(10);
+ rtw_msleep_os(10);
+
+ //BB Reset
+ write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x0);
+ write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x1);
+ }
+}
+
+
+void Hal_SetSingleToneTx(PADAPTER pAdapter, u8 bStart)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ BOOLEAN is92C = IS_92C_SERIAL(pHalData->VersionID);
+
+ u8 rfPath;
+
+ switch (pAdapter->mppriv.antenna_tx)
+ {
+ case ANTENNA_A:
+ default:
+ rfPath = RF_PATH_A;
+ break;
+ case ANTENNA_B:
+ rfPath = RF_PATH_B;
+ break;
+ case ANTENNA_C:
+ rfPath = RF_PATH_C;
+ break;
+ }
+
+ pAdapter->mppriv.MptCtx.bSingleTone = bStart;
+ if (bStart)// Start Single Tone.
+ {
+ RT_TRACE(_module_mp_,_drv_alert_, ("SetSingleToneTx: test start\n"));
+ write_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn, 0x0);
+ write_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn, 0x0);
+
+ if (is92C)
+ {
+ _write_rfreg(pAdapter, RF_PATH_A, 0x21, BIT19, 0x01);
+ rtw_usleep_os(100);
+ if (rfPath == RF_PATH_A)
+ write_rfreg(pAdapter, RF_PATH_B, 0x00, 0x10000); // PAD all on.
+ else if (rfPath == RF_PATH_B)
+ write_rfreg(pAdapter, RF_PATH_A, 0x00, 0x10000); // PAD all on.
+ write_rfreg(pAdapter, rfPath, 0x00, 0x2001f); // PAD all on.
+ rtw_usleep_os(100);
+ }
+ else
+ {
+ write_rfreg(pAdapter, rfPath, 0x21, 0xd4000);
+ rtw_usleep_os(100);
+ write_rfreg(pAdapter, rfPath, 0x00, 0x2001f); // PAD all on.
+ rtw_usleep_os(100);
+ }
+
+ write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);
+ write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);
+
+ }
+ else// Stop Single Tone.
+ {
+ RT_TRACE(_module_mp_,_drv_alert_, ("SetSingleToneTx: test stop\n"));
+ write_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn, 0x1);
+ write_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn, 0x1);
+
+ if (is92C) {
+ _write_rfreg(pAdapter, RF_PATH_A, 0x21, BIT19, 0x00);
+ rtw_usleep_os(100);
+ write_rfreg(pAdapter, RF_PATH_A, 0x00, 0x32d75); // PAD all on.
+ write_rfreg(pAdapter, RF_PATH_B, 0x00, 0x32d75); // PAD all on.
+ rtw_usleep_os(100);
+ } else {
+ write_rfreg(pAdapter, rfPath, 0x21, 0x54000);
+ rtw_usleep_os(100);
+ write_rfreg(pAdapter, rfPath, 0x00, 0x30000); // PAD all on.
+ rtw_usleep_os(100);
+ }
+
+ write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100);
+ write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100);
+
+ }
+
+}
+
+
+void Hal_SetCarrierSuppressionTx(PADAPTER pAdapter, u8 bStart)
+{
+ pAdapter->mppriv.MptCtx.bCarrierSuppression = bStart;
+ if (bStart) // Start Carrier Suppression.
+ {
+ RT_TRACE(_module_mp_,_drv_alert_, ("SetCarrierSuppressionTx: test start\n"));
+ //if(pMgntInfo->dot11CurrentWirelessMode == WIRELESS_MODE_B)
+ if (pAdapter->mppriv.rateidx <= MPT_RATE_11M)
+ {
+ // 1. if CCK block on?
+ if(!read_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn))
+ write_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn, bEnable);//set CCK block on
+
+ //Turn Off All Test Mode
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable);
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable);
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
+
+ write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, 0x2); //transmit mode
+ write_bbreg(pAdapter, rCCK0_System, bCCKScramble, 0x0); //turn off scramble setting
+
+ //Set CCK Tx Test Rate
+ //PHY_SetBBReg(pAdapter, rCCK0_System, bCCKTxRate, pMgntInfo->ForcedDataRate);
+ write_bbreg(pAdapter, rCCK0_System, bCCKTxRate, 0x0); //Set FTxRate to 1Mbps
+ }
+
+ //Set for dynamic set Power index
+ write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);
+ write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);
+
+ }
+ else// Stop Carrier Suppression.
+ {
+ RT_TRACE(_module_mp_,_drv_alert_, ("SetCarrierSuppressionTx: test stop\n"));
+ //if(pMgntInfo->dot11CurrentWirelessMode == WIRELESS_MODE_B)
+ if (pAdapter->mppriv.rateidx <= MPT_RATE_11M ) {
+ write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, 0x0); //normal mode
+ write_bbreg(pAdapter, rCCK0_System, bCCKScramble, 0x1); //turn on scramble setting
+
+ //BB Reset
+ write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x0);
+ write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x1);
+ }
+ //Stop for dynamic set Power index
+ write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100);
+ write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100);
+ }
+ //DbgPrint("\n MPT_ProSetCarrierSupp() is finished. \n");
+}
+
+void Hal_SetCCKContinuousTx(PADAPTER pAdapter, u8 bStart)
+{
+ u32 cckrate;
+
+ if (bStart)
+ {
+ RT_TRACE(_module_mp_, _drv_alert_,
+ ("SetCCKContinuousTx: test start\n"));
+
+ // 1. if CCK block on?
+ if(!read_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn))
+ write_bbreg(pAdapter, rFPGA0_RFMOD, bCCKEn, bEnable);//set CCK block on
+
+ //Turn Off All Test Mode
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable);
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable);
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
+ //Set CCK Tx Test Rate
+ #if 0
+ switch(pAdapter->mppriv.rateidx)
+ {
+ case 2:
+ cckrate = 0;
+ break;
+ case 4:
+ cckrate = 1;
+ break;
+ case 11:
+ cckrate = 2;
+ break;
+ case 22:
+ cckrate = 3;
+ break;
+ default:
+ cckrate = 0;
+ break;
+ }
+ #else
+ cckrate = pAdapter->mppriv.rateidx;
+ #endif
+ write_bbreg(pAdapter, rCCK0_System, bCCKTxRate, cckrate);
+ write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, 0x2); //transmit mode
+ write_bbreg(pAdapter, rCCK0_System, bCCKScramble, bEnable); //turn on scramble setting
+
+ write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);
+ write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);
+
+ // Patch for CCK 11M waveform
+ if (cckrate == MPT_RATE_1M)
+ write_bbreg(pAdapter, 0xA71, BIT(6), bDisable);
+ else
+ write_bbreg(pAdapter, 0xA71, BIT(6), bEnable);
+
+
+ }
+ else {
+ RT_TRACE(_module_mp_, _drv_info_,
+ ("SetCCKContinuousTx: test stop\n"));
+
+ write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, 0x0); //normal mode
+ write_bbreg(pAdapter, rCCK0_System, bCCKScramble, bEnable); //turn on scramble setting
+
+ //BB Reset
+ write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x0);
+ write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x1);
+
+ write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100);
+ write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100);
+ }
+
+ pAdapter->mppriv.MptCtx.bCckContTx = bStart;
+ pAdapter->mppriv.MptCtx.bOfdmContTx = _FALSE;
+}/* mpt_StartCckContTx */
+
+void Hal_SetOFDMContinuousTx(PADAPTER pAdapter, u8 bStart)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+
+ if (bStart) {
+ RT_TRACE(_module_mp_, _drv_info_, ("SetOFDMContinuousTx: test start\n"));
+ // 1. if OFDM block on?
+ if(!read_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn))
+ write_bbreg(pAdapter, rFPGA0_RFMOD, bOFDMEn, bEnable);//set OFDM block on
+ {
+
+ // 2. set CCK test mode off, set to CCK normal mode
+ write_bbreg(pAdapter, rCCK0_System, bCCKBBMode, bDisable);
+
+ // 3. turn on scramble setting
+ write_bbreg(pAdapter, rCCK0_System, bCCKScramble, bEnable);
+ }
+ // 4. Turn On Continue Tx and turn off the other test modes.
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bEnable);
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable);
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
+
+ write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000500);
+ write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000500);
+
+ } else {
+ RT_TRACE(_module_mp_,_drv_info_, ("SetOFDMContinuousTx: test stop\n"));
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMContinueTx, bDisable);
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleCarrier, bDisable);
+ write_bbreg(pAdapter, rOFDM1_LSTF, bOFDMSingleTone, bDisable);
+ //Delay 10 ms
+ rtw_msleep_os(10);
+ //BB Reset
+ write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x0);
+ write_bbreg(pAdapter, rPMAC_Reset, bBBResetB, 0x1);
+
+ write_bbreg(pAdapter, rFPGA0_XA_HSSIParameter1, bMaskDWord, 0x01000100);
+ write_bbreg(pAdapter, rFPGA0_XB_HSSIParameter1, bMaskDWord, 0x01000100);
+ }
+
+ pAdapter->mppriv.MptCtx.bCckContTx = _FALSE;
+ pAdapter->mppriv.MptCtx.bOfdmContTx = bStart;
+}/* mpt_StartOfdmContTx */
+
+void Hal_SetContinuousTx(PADAPTER pAdapter, u8 bStart)
+{
+#if 0
+ // ADC turn off [bit24-21] adc port0 ~ port1
+ if (bStart) {
+ write_bbreg(pAdapter, rRx_Wait_CCCA, read_bbreg(pAdapter, rRx_Wait_CCCA) & 0xFE1FFFFF);
+ rtw_usleep_os(100);
+ }
+#endif
+ RT_TRACE(_module_mp_, _drv_info_,
+ ("SetContinuousTx: rate:%d\n", pAdapter->mppriv.rateidx));
+
+ pAdapter->mppriv.MptCtx.bStartContTx = bStart;
+ if (pAdapter->mppriv.rateidx <= MPT_RATE_11M)
+ {
+ Hal_SetCCKContinuousTx(pAdapter, bStart);
+ }
+ else if ((pAdapter->mppriv.rateidx >= MPT_RATE_6M) &&
+ (pAdapter->mppriv.rateidx <= MPT_RATE_MCS15))
+ {
+ Hal_SetOFDMContinuousTx(pAdapter, bStart);
+ }
+#if 0
+ // ADC turn on [bit24-21] adc port0 ~ port1
+ if (!bStart) {
+ write_bbreg(pAdapter, rRx_Wait_CCCA, read_bbreg(pAdapter, rRx_Wait_CCCA) | 0x01E00000);
+ }
+#endif
+}
+
+#endif // CONFIG_MP_INCLUDE
+
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_phycfg.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_phycfg.c
index 87e059996a58..0efb64a89055 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_phycfg.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_phycfg.c
@@ -1,3397 +1,3406 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#define _RTL8723A_PHYCFG_C_
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <rtw_byteorder.h>
-
-#ifdef CONFIG_IOL
-#include <rtw_iol.h>
-#endif
-
-#include <rtl8723a_hal.h>
-
-
-/*---------------------------Define Local Constant---------------------------*/
-/* Channel switch:The size of command tables for switch channel*/
-#define MAX_PRECMD_CNT 16
-#define MAX_RFDEPENDCMD_CNT 16
-#define MAX_POSTCMD_CNT 16
-
-#define MAX_DOZE_WAITING_TIMES_9x 64
-
-/*---------------------------Define Local Constant---------------------------*/
-
-
-/*------------------------Define global variable-----------------------------*/
-
-/*------------------------Define local variable------------------------------*/
-
-
-/*--------------------Define export function prototype-----------------------*/
-// Please refer to header file
-/*--------------------Define export function prototype-----------------------*/
-
-/*----------------------------Function Body----------------------------------*/
-//
-// 1. BB register R/W API
-//
-
-/**
-* Function: phy_CalculateBitShift
-*
-* OverView: Get shifted position of the BitMask
-*
-* Input:
-* u4Byte BitMask,
-*
-* Output: none
-* Return: u4Byte Return the shift bit bit position of the mask
-*/
-static u32
-phy_CalculateBitShift(
- u32 BitMask
- )
-{
- u32 i;
-
- for(i=0; i<=31; i++)
- {
- if ( ((BitMask>>i) & 0x1 ) == 1)
- break;
- }
-
- return (i);
-}
-
-
-/**
-* Function: PHY_QueryBBReg
-*
-* OverView: Read "sepcific bits" from BB register
-*
-* Input:
-* PADAPTER Adapter,
-* u4Byte RegAddr, //The target address to be readback
-* u4Byte BitMask //The target bit position in the target address
-* //to be readback
-* Output: None
-* Return: u4Byte Data //The readback register value
-* Note: This function is equal to "GetRegSetting" in PHY programming guide
-*/
-u32
-rtl8192c_PHY_QueryBBReg(
- IN PADAPTER Adapter,
- IN u32 RegAddr,
- IN u32 BitMask
- )
-{
- u32 ReturnValue = 0, OriginalValue, BitShift;
- u16 BBWaitCounter = 0;
-
-#if (DISABLE_BB_RF == 1)
- return 0;
-#endif
-
- //RT_TRACE(COMP_RF, DBG_TRACE, ("--->PHY_QueryBBReg(): RegAddr(%#lx), BitMask(%#lx)\n", RegAddr, BitMask));
-
- OriginalValue = rtw_read32(Adapter, RegAddr);
- BitShift = phy_CalculateBitShift(BitMask);
- ReturnValue = (OriginalValue & BitMask) >> BitShift;
-
- //RTPRINT(FPHY, PHY_BBR, ("BBR MASK=0x%lx Addr[0x%lx]=0x%lx\n", BitMask, RegAddr, OriginalValue));
- //RT_TRACE(COMP_RF, DBG_TRACE, ("<---PHY_QueryBBReg(): RegAddr(%#lx), BitMask(%#lx), OriginalValue(%#lx)\n", RegAddr, BitMask, OriginalValue));
-
- return (ReturnValue);
-
-}
-
-
-/**
-* Function: PHY_SetBBReg
-*
-* OverView: Write "Specific bits" to BB register (page 8~)
-*
-* Input:
-* PADAPTER Adapter,
-* u4Byte RegAddr, //The target address to be modified
-* u4Byte BitMask //The target bit position in the target address
-* //to be modified
-* u4Byte Data //The new register value in the target bit position
-* //of the target address
-*
-* Output: None
-* Return: None
-* Note: This function is equal to "PutRegSetting" in PHY programming guide
-*/
-
-VOID
-rtl8192c_PHY_SetBBReg(
- IN PADAPTER Adapter,
- IN u32 RegAddr,
- IN u32 BitMask,
- IN u32 Data
- )
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- //u16 BBWaitCounter = 0;
- u32 OriginalValue, BitShift;
-
-#if (DISABLE_BB_RF == 1)
- return;
-#endif
-
- //RT_TRACE(COMP_RF, DBG_TRACE, ("--->PHY_SetBBReg(): RegAddr(%#lx), BitMask(%#lx), Data(%#lx)\n", RegAddr, BitMask, Data));
-
- if(BitMask!= bMaskDWord){//if not "double word" write
- OriginalValue = rtw_read32(Adapter, RegAddr);
- BitShift = phy_CalculateBitShift(BitMask);
- Data = ((OriginalValue & (~BitMask)) | (Data << BitShift));
- }
-
- rtw_write32(Adapter, RegAddr, Data);
-
- //RTPRINT(FPHY, PHY_BBW, ("BBW MASK=0x%lx Addr[0x%lx]=0x%lx\n", BitMask, RegAddr, Data));
- //RT_TRACE(COMP_RF, DBG_TRACE, ("<---PHY_SetBBReg(): RegAddr(%#lx), BitMask(%#lx), Data(%#lx)\n", RegAddr, BitMask, Data));
-
-}
-
-
-//
-// 2. RF register R/W API
-//
-
-/*-----------------------------------------------------------------------------
- * Function: phy_FwRFSerialRead()
- *
- * Overview: We support firmware to execute RF-R/W.
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 01/21/2008 MHC Create Version 0.
- *
- *---------------------------------------------------------------------------*/
-static u32
-phy_FwRFSerialRead(
- IN PADAPTER Adapter,
- IN RF_RADIO_PATH_E eRFPath,
- IN u32 Offset )
-{
- u32 retValue = 0;
- //RT_ASSERT(FALSE,("deprecate!\n"));
- return (retValue);
-
-} /* phy_FwRFSerialRead */
-
-
-/*-----------------------------------------------------------------------------
- * Function: phy_FwRFSerialWrite()
- *
- * Overview: We support firmware to execute RF-R/W.
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 01/21/2008 MHC Create Version 0.
- *
- *---------------------------------------------------------------------------*/
-static VOID
-phy_FwRFSerialWrite(
- IN PADAPTER Adapter,
- IN RF_RADIO_PATH_E eRFPath,
- IN u32 Offset,
- IN u32 Data )
-{
- //RT_ASSERT(FALSE,("deprecate!\n"));
-}
-
-
-/**
-* Function: phy_RFSerialRead
-*
-* OverView: Read regster from RF chips
-*
-* Input:
-* PADAPTER Adapter,
-* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
-* u4Byte Offset, //The target address to be read
-*
-* Output: None
-* Return: u4Byte reback value
-* Note: Threre are three types of serial operations:
-* 1. Software serial write
-* 2. Hardware LSSI-Low Speed Serial Interface
-* 3. Hardware HSSI-High speed
-* serial write. Driver need to implement (1) and (2).
-* This function is equal to the combination of RF_ReadReg() and RFLSSIRead()
-*/
-static u32
-phy_RFSerialRead(
- IN PADAPTER Adapter,
- IN RF_RADIO_PATH_E eRFPath,
- IN u32 Offset
- )
-{
- u32 retValue = 0;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- BB_REGISTER_DEFINITION_T *pPhyReg = &pHalData->PHYRegDef[eRFPath];
- u32 NewOffset;
- u32 tmplong,tmplong2;
- u8 RfPiEnable=0;
-#if 0
- if(pHalData->RFChipID == RF_8225 && Offset > 0x24) //36 valid regs
- return retValue;
- if(pHalData->RFChipID == RF_8256 && Offset > 0x2D) //45 valid regs
- return retValue;
-#endif
- //
- // Make sure RF register offset is correct
- //
- Offset &= 0x3f;
-
- //
- // Switch page for 8256 RF IC
- //
- NewOffset = Offset;
-
- // 2009/06/17 MH We can not execute IO for power save or other accident mode.
- //if(RT_CANNOT_IO(Adapter))
- //{
- // RTPRINT(FPHY, PHY_RFR, ("phy_RFSerialRead return all one\n"));
- // return 0xFFFFFFFF;
- //}
-
- // For 92S LSSI Read RFLSSIRead
- // For RF A/B write 0x824/82c(does not work in the future)
- // We must use 0x824 for RF A and B to execute read trigger
- tmplong = PHY_QueryBBReg(Adapter, rFPGA0_XA_HSSIParameter2, bMaskDWord);
- if(eRFPath == RF_PATH_A)
- tmplong2 = tmplong;
- else
- tmplong2 = PHY_QueryBBReg(Adapter, pPhyReg->rfHSSIPara2, bMaskDWord);
-
- tmplong2 = (tmplong2 & (~bLSSIReadAddress)) | (NewOffset<<23) | bLSSIReadEdge; //T65 RF
-
- PHY_SetBBReg(Adapter, rFPGA0_XA_HSSIParameter2, bMaskDWord, tmplong&(~bLSSIReadEdge));
- rtw_udelay_os(10);// PlatformStallExecution(10);
-
- PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, bMaskDWord, tmplong2);
- rtw_udelay_os(100);//PlatformStallExecution(100);
-
- PHY_SetBBReg(Adapter, rFPGA0_XA_HSSIParameter2, bMaskDWord, tmplong|bLSSIReadEdge);
- rtw_udelay_os(10);//PlatformStallExecution(10);
-
- if(eRFPath == RF_PATH_A)
- RfPiEnable = (u8)PHY_QueryBBReg(Adapter, rFPGA0_XA_HSSIParameter1, BIT8);
- else if(eRFPath == RF_PATH_B)
- RfPiEnable = (u8)PHY_QueryBBReg(Adapter, rFPGA0_XB_HSSIParameter1, BIT8);
-
- if(RfPiEnable)
- { // Read from BBreg8b8, 12 bits for 8190, 20bits for T65 RF
- retValue = PHY_QueryBBReg(Adapter, pPhyReg->rfLSSIReadBackPi, bLSSIReadBackData);
- //DBG_8192C("Readback from RF-PI : 0x%x\n", retValue);
- }
- else
- { //Read from BBreg8a0, 12 bits for 8190, 20 bits for T65 RF
- retValue = PHY_QueryBBReg(Adapter, pPhyReg->rfLSSIReadBack, bLSSIReadBackData);
- //DBG_8192C("Readback from RF-SI : 0x%x\n", retValue);
- }
- //DBG_8192C("RFR-%d Addr[0x%x]=0x%x\n", eRFPath, pPhyReg->rfLSSIReadBack, retValue);
-
- return retValue;
-
-}
-
-
-
-/**
-* Function: phy_RFSerialWrite
-*
-* OverView: Write data to RF register (page 8~)
-*
-* Input:
-* PADAPTER Adapter,
-* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
-* u4Byte Offset, //The target address to be read
-* u4Byte Data //The new register Data in the target bit position
-* //of the target to be read
-*
-* Output: None
-* Return: None
-* Note: Threre are three types of serial operations:
-* 1. Software serial write
-* 2. Hardware LSSI-Low Speed Serial Interface
-* 3. Hardware HSSI-High speed
-* serial write. Driver need to implement (1) and (2).
-* This function is equal to the combination of RF_ReadReg() and RFLSSIRead()
- *
- * Note: For RF8256 only
- * The total count of RTL8256(Zebra4) register is around 36 bit it only employs
- * 4-bit RF address. RTL8256 uses "register mode control bit" (Reg00[12], Reg00[10])
- * to access register address bigger than 0xf. See "Appendix-4 in PHY Configuration
- * programming guide" for more details.
- * Thus, we define a sub-finction for RTL8526 register address conversion
- * ===========================================================
- * Register Mode RegCTL[1] RegCTL[0] Note
- * (Reg00[12]) (Reg00[10])
- * ===========================================================
- * Reg_Mode0 0 x Reg 0 ~15(0x0 ~ 0xf)
- * ------------------------------------------------------------------
- * Reg_Mode1 1 0 Reg 16 ~30(0x1 ~ 0xf)
- * ------------------------------------------------------------------
- * Reg_Mode2 1 1 Reg 31 ~ 45(0x1 ~ 0xf)
- * ------------------------------------------------------------------
- *
- * 2008/09/02 MH Add 92S RF definition
- *
- *
- *
-*/
-static VOID
-phy_RFSerialWrite(
- IN PADAPTER Adapter,
- IN RF_RADIO_PATH_E eRFPath,
- IN u32 Offset,
- IN u32 Data
- )
-{
- u32 DataAndAddr = 0;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- BB_REGISTER_DEFINITION_T *pPhyReg = &pHalData->PHYRegDef[eRFPath];
- u32 NewOffset;
-
-#if 0
- //<Roger_TODO> We should check valid regs for RF_6052 case.
- if(pHalData->RFChipID == RF_8225 && Offset > 0x24) //36 valid regs
- return;
- if(pHalData->RFChipID == RF_8256 && Offset > 0x2D) //45 valid regs
- return;
-#endif
-
- // 2009/06/17 MH We can not execute IO for power save or other accident mode.
- //if(RT_CANNOT_IO(Adapter))
- //{
- // RTPRINT(FPHY, PHY_RFW, ("phy_RFSerialWrite stop\n"));
- // return;
- //}
-
- Offset &= 0x3f;
-
- //
- // Shadow Update
- //
- //PHY_RFShadowWrite(Adapter, eRFPath, Offset, Data);
-
- //
- // Switch page for 8256 RF IC
- //
- NewOffset = Offset;
-
- //
- // Put write addr in [5:0] and write data in [31:16]
- //
- //DataAndAddr = (Data<<16) | (NewOffset&0x3f);
- DataAndAddr = ((NewOffset<<20) | (Data&0x000fffff)) & 0x0fffffff; // T65 RF
-
- //
- // Write Operation
- //
- PHY_SetBBReg(Adapter, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr);
- //RTPRINT(FPHY, PHY_RFW, ("RFW-%d Addr[0x%lx]=0x%lx\n", eRFPath, pPhyReg->rf3wireOffset, DataAndAddr));
-
-}
-
-
-/**
-* Function: PHY_QueryRFReg
-*
-* OverView: Query "Specific bits" to RF register (page 8~)
-*
-* Input:
-* PADAPTER Adapter,
-* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
-* u4Byte RegAddr, //The target address to be read
-* u4Byte BitMask //The target bit position in the target address
-* //to be read
-*
-* Output: None
-* Return: u4Byte Readback value
-* Note: This function is equal to "GetRFRegSetting" in PHY programming guide
-*/
-u32
-rtl8192c_PHY_QueryRFReg(
- IN PADAPTER Adapter,
- IN RF_RADIO_PATH_E eRFPath,
- IN u32 RegAddr,
- IN u32 BitMask
- )
-{
- u32 Original_Value, Readback_Value, BitShift;
- //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- //u8 RFWaitCounter = 0;
- //_irqL irqL;
-
-#if (DISABLE_BB_RF == 1)
- return 0;
-#endif
-
- //RT_TRACE(COMP_RF, DBG_TRACE, ("--->PHY_QueryRFReg(): RegAddr(%#lx), eRFPath(%#x), BitMask(%#lx)\n", RegAddr, eRFPath,BitMask));
-
-#ifdef CONFIG_USB_HCI
- //PlatformAcquireMutex(&pHalData->mxRFOperate);
-#else
- //_enter_critical(&pHalData->rf_lock, &irqL);
-#endif
-
-
- Original_Value = phy_RFSerialRead(Adapter, eRFPath, RegAddr);
-
- BitShift = phy_CalculateBitShift(BitMask);
- Readback_Value = (Original_Value & BitMask) >> BitShift;
-
-#ifdef CONFIG_USB_HCI
- //PlatformReleaseMutex(&pHalData->mxRFOperate);
-#else
- //_exit_critical(&pHalData->rf_lock, &irqL);
-#endif
-
-
- //RTPRINT(FPHY, PHY_RFR, ("RFR-%d MASK=0x%lx Addr[0x%lx]=0x%lx\n", eRFPath, BitMask, RegAddr, Original_Value));//BitMask(%#lx),BitMask,
- //RT_TRACE(COMP_RF, DBG_TRACE, ("<---PHY_QueryRFReg(): RegAddr(%#lx), eRFPath(%#x), Original_Value(%#lx)\n",
- // RegAddr, eRFPath, Original_Value));
-
- return (Readback_Value);
-}
-
-/**
-* Function: PHY_SetRFReg
-*
-* OverView: Write "Specific bits" to RF register (page 8~)
-*
-* Input:
-* PADAPTER Adapter,
-* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
-* u4Byte RegAddr, //The target address to be modified
-* u4Byte BitMask //The target bit position in the target address
-* //to be modified
-* u4Byte Data //The new register Data in the target bit position
-* //of the target address
-*
-* Output: None
-* Return: None
-* Note: This function is equal to "PutRFRegSetting" in PHY programming guide
-*/
-VOID
-rtl8192c_PHY_SetRFReg(
- IN PADAPTER Adapter,
- IN RF_RADIO_PATH_E eRFPath,
- IN u32 RegAddr,
- IN u32 BitMask,
- IN u32 Data
- )
-{
-
- //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- //u1Byte RFWaitCounter = 0;
- u32 Original_Value, BitShift;
- //_irqL irqL;
-
-#if (DISABLE_BB_RF == 1)
- return;
-#endif
-
- //RT_TRACE(COMP_RF, DBG_TRACE, ("--->PHY_SetRFReg(): RegAddr(%#lx), BitMask(%#lx), Data(%#lx), eRFPath(%#x)\n",
- // RegAddr, BitMask, Data, eRFPath));
- //RTPRINT(FINIT, INIT_RF, ("PHY_SetRFReg(): RegAddr(%#lx), BitMask(%#lx), Data(%#lx), eRFPath(%#x)\n",
- // RegAddr, BitMask, Data, eRFPath));
-
-
-#ifdef CONFIG_USB_HCI
- //PlatformAcquireMutex(&pHalData->mxRFOperate);
-#else
- //_enter_critical(&pHalData->rf_lock, &irqL);
-#endif
-
-
- // RF data is 12 bits only
- if (BitMask != bRFRegOffsetMask)
- {
- Original_Value = phy_RFSerialRead(Adapter, eRFPath, RegAddr);
- BitShift = phy_CalculateBitShift(BitMask);
- Data = ((Original_Value & (~BitMask)) | (Data<< BitShift));
- }
-
- phy_RFSerialWrite(Adapter, eRFPath, RegAddr, Data);
-
-
-#ifdef CONFIG_USB_HCI
- //PlatformReleaseMutex(&pHalData->mxRFOperate);
-#else
- //_exit_critical(&pHalData->rf_lock, &irqL);
-#endif
-
- //PHY_QueryRFReg(Adapter,eRFPath,RegAddr,BitMask);
- //RT_TRACE(COMP_RF, DBG_TRACE, ("<---PHY_SetRFReg(): RegAddr(%#lx), BitMask(%#lx), Data(%#lx), eRFPath(%#x)\n",
- // RegAddr, BitMask, Data, eRFPath));
-
-}
-
-
-//
-// 3. Initial MAC/BB/RF config by reading MAC/BB/RF txt.
-//
-
-/*-----------------------------------------------------------------------------
- * Function: phy_ConfigMACWithParaFile()
- *
- * Overview: This function read BB parameters from general file format, and do register
- * Read/Write
- *
- * Input: PADAPTER Adapter
- * ps1Byte pFileName
- *
- * Output: NONE
- *
- * Return: RT_STATUS_SUCCESS: configuration file exist
- *
- * Note: The format of MACPHY_REG.txt is different from PHY and RF.
- * [Register][Mask][Value]
- *---------------------------------------------------------------------------*/
-static int
-phy_ConfigMACWithParaFile(
- IN PADAPTER Adapter,
- IN u8* pFileName
-)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
- int rtStatus = _SUCCESS;
-
- return rtStatus;
-}
-
-/*-----------------------------------------------------------------------------
- * Function: phy_ConfigMACWithHeaderFile()
- *
- * Overview: This function read BB parameters from Header file we gen, and do register
- * Read/Write
- *
- * Input: PADAPTER Adapter
- * ps1Byte pFileName
- *
- * Output: NONE
- *
- * Return: RT_STATUS_SUCCESS: configuration file exist
- *
- * Note: The format of MACPHY_REG.txt is different from PHY and RF.
- * [Register][Mask][Value]
- *---------------------------------------------------------------------------*/
-#ifndef CONFIG_PHY_SETTING_WITH_ODM
-static int
-phy_ConfigMACWithHeaderFile(
- IN PADAPTER Adapter
-)
-{
- u32 i = 0;
- u32 ArrayLength = 0;
- u32* ptrArray;
- //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
- //2008.11.06 Modified by tynli.
- //RT_TRACE(COMP_INIT, DBG_LOUD, ("Read Rtl819XMACPHY_Array\n"));
- ArrayLength = Rtl8723_MAC_ArrayLength;
- ptrArray = (u32*)Rtl8723_MAC_Array;
-
-#ifdef CONFIG_IOL_MAC
- {
- struct xmit_frame *xmit_frame;
- if((xmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL)
- return _FAIL;
-
- for(i = 0 ;i < ArrayLength;i=i+2){ // Add by tynli for 2 column
- rtw_IOL_append_WB_cmd(xmit_frame, ptrArray[i], (u8)ptrArray[i+1]);
- }
-
- return rtw_IOL_exec_cmds_sync(Adapter, xmit_frame, 1000,0);
- }
-#else
- for(i = 0 ;i < ArrayLength;i=i+2){ // Add by tynli for 2 column
- rtw_write8(Adapter, ptrArray[i], (u8)ptrArray[i+1]);
- }
-#endif
-
- return _SUCCESS;
-
-}
-#endif//#ifndef CONFIG_PHY_SETTING_WITH_ODM
-
-/*-----------------------------------------------------------------------------
- * Function: PHY_MACConfig8192C
- *
- * Overview: Condig MAC by header file or parameter file.
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 08/12/2008 MHC Create Version 0.
- *
- *---------------------------------------------------------------------------*/
-s32 PHY_MACConfig8723A(PADAPTER Adapter)
-{
- int rtStatus = _SUCCESS;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- s8 *pszMACRegFile;
- s8 sz8723MACRegFile[] = RTL8723_PHY_MACREG;
- BOOLEAN is92C = IS_92C_SERIAL(pHalData->VersionID);
-
-
- pszMACRegFile = sz8723MACRegFile;
-
- //
- // Config MAC
- //
-#ifdef CONFIG_EMBEDDED_FWIMG
- #ifdef CONFIG_PHY_SETTING_WITH_ODM
- if(HAL_STATUS_FAILURE == ODM_ConfigMACWithHeaderFile(&pHalData->odmpriv))
- rtStatus = _FAIL;
- #else
- rtStatus = phy_ConfigMACWithHeaderFile(Adapter);
- #endif//#ifdef CONFIG_PHY_SETTING_WITH_ODM
-#else
-
- // Not make sure EEPROM, add later
- //RT_TRACE(COMP_INIT, DBG_LOUD, ("Read MACREG.txt\n"));
- rtStatus = phy_ConfigMACWithParaFile(Adapter, pszMACRegFile);
-#endif//CONFIG_EMBEDDED_FWIMG
-
-#ifdef CONFIG_PCI_HCI
- //this switching setting cause some 8192cu hw have redownload fw fail issue
- //improve 2-stream TX EVM by Jenyu
- if(is92C)
- rtw_write8(Adapter, REG_SPS0_CTRL+3,0x71);
-#endif
-
-
- // 2010.07.13 AMPDU aggregation number 9
- //rtw_write16(Adapter, REG_MAX_AGGR_NUM, MAX_AGGR_NUM);
- rtw_write8(Adapter, REG_MAX_AGGR_NUM, 0x0A); //By tynli. 2010.11.18.
-#ifdef CONFIG_USB_HCI
- if(is92C && (BOARD_USB_DONGLE == pHalData->BoardType))
- rtw_write8(Adapter, 0x40,0x04);
-#endif
-
- return rtStatus;
-
-}
-
-
-/**
-* Function: phy_InitBBRFRegisterDefinition
-*
-* OverView: Initialize Register definition offset for Radio Path A/B/C/D
-*
-* Input:
-* PADAPTER Adapter,
-*
-* Output: None
-* Return: None
-* Note: The initialization value is constant and it should never be changes
-*/
-static VOID
-phy_InitBBRFRegisterDefinition(
- IN PADAPTER Adapter
-)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
- // RF Interface Sowrtware Control
- pHalData->PHYRegDef[RF_PATH_A].rfintfs = rFPGA0_XAB_RFInterfaceSW; // 16 LSBs if read 32-bit from 0x870
- pHalData->PHYRegDef[RF_PATH_B].rfintfs = rFPGA0_XAB_RFInterfaceSW; // 16 MSBs if read 32-bit from 0x870 (16-bit for 0x872)
- pHalData->PHYRegDef[RF_PATH_C].rfintfs = rFPGA0_XCD_RFInterfaceSW;// 16 LSBs if read 32-bit from 0x874
- pHalData->PHYRegDef[RF_PATH_D].rfintfs = rFPGA0_XCD_RFInterfaceSW;// 16 MSBs if read 32-bit from 0x874 (16-bit for 0x876)
-
- // RF Interface Readback Value
- pHalData->PHYRegDef[RF_PATH_A].rfintfi = rFPGA0_XAB_RFInterfaceRB; // 16 LSBs if read 32-bit from 0x8E0
- pHalData->PHYRegDef[RF_PATH_B].rfintfi = rFPGA0_XAB_RFInterfaceRB;// 16 MSBs if read 32-bit from 0x8E0 (16-bit for 0x8E2)
- pHalData->PHYRegDef[RF_PATH_C].rfintfi = rFPGA0_XCD_RFInterfaceRB;// 16 LSBs if read 32-bit from 0x8E4
- pHalData->PHYRegDef[RF_PATH_D].rfintfi = rFPGA0_XCD_RFInterfaceRB;// 16 MSBs if read 32-bit from 0x8E4 (16-bit for 0x8E6)
-
- // RF Interface Output (and Enable)
- pHalData->PHYRegDef[RF_PATH_A].rfintfo = rFPGA0_XA_RFInterfaceOE; // 16 LSBs if read 32-bit from 0x860
- pHalData->PHYRegDef[RF_PATH_B].rfintfo = rFPGA0_XB_RFInterfaceOE; // 16 LSBs if read 32-bit from 0x864
-
- // RF Interface (Output and) Enable
- pHalData->PHYRegDef[RF_PATH_A].rfintfe = rFPGA0_XA_RFInterfaceOE; // 16 MSBs if read 32-bit from 0x860 (16-bit for 0x862)
- pHalData->PHYRegDef[RF_PATH_B].rfintfe = rFPGA0_XB_RFInterfaceOE; // 16 MSBs if read 32-bit from 0x864 (16-bit for 0x866)
-
- //Addr of LSSI. Wirte RF register by driver
- pHalData->PHYRegDef[RF_PATH_A].rf3wireOffset = rFPGA0_XA_LSSIParameter; //LSSI Parameter
- pHalData->PHYRegDef[RF_PATH_B].rf3wireOffset = rFPGA0_XB_LSSIParameter;
-
- // RF parameter
- pHalData->PHYRegDef[RF_PATH_A].rfLSSI_Select = rFPGA0_XAB_RFParameter; //BB Band Select
- pHalData->PHYRegDef[RF_PATH_B].rfLSSI_Select = rFPGA0_XAB_RFParameter;
- pHalData->PHYRegDef[RF_PATH_C].rfLSSI_Select = rFPGA0_XCD_RFParameter;
- pHalData->PHYRegDef[RF_PATH_D].rfLSSI_Select = rFPGA0_XCD_RFParameter;
-
- // Tx AGC Gain Stage (same for all path. Should we remove this?)
- pHalData->PHYRegDef[RF_PATH_A].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
- pHalData->PHYRegDef[RF_PATH_B].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
- pHalData->PHYRegDef[RF_PATH_C].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
- pHalData->PHYRegDef[RF_PATH_D].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
-
- // Tranceiver A~D HSSI Parameter-1
- pHalData->PHYRegDef[RF_PATH_A].rfHSSIPara1 = rFPGA0_XA_HSSIParameter1; //wire control parameter1
- pHalData->PHYRegDef[RF_PATH_B].rfHSSIPara1 = rFPGA0_XB_HSSIParameter1; //wire control parameter1
-
- // Tranceiver A~D HSSI Parameter-2
- pHalData->PHYRegDef[RF_PATH_A].rfHSSIPara2 = rFPGA0_XA_HSSIParameter2; //wire control parameter2
- pHalData->PHYRegDef[RF_PATH_B].rfHSSIPara2 = rFPGA0_XB_HSSIParameter2; //wire control parameter2
-
- // RF switch Control
- pHalData->PHYRegDef[RF_PATH_A].rfSwitchControl = rFPGA0_XAB_SwitchControl; //TR/Ant switch control
- pHalData->PHYRegDef[RF_PATH_B].rfSwitchControl = rFPGA0_XAB_SwitchControl;
- pHalData->PHYRegDef[RF_PATH_C].rfSwitchControl = rFPGA0_XCD_SwitchControl;
- pHalData->PHYRegDef[RF_PATH_D].rfSwitchControl = rFPGA0_XCD_SwitchControl;
-
- // AGC control 1
- pHalData->PHYRegDef[RF_PATH_A].rfAGCControl1 = rOFDM0_XAAGCCore1;
- pHalData->PHYRegDef[RF_PATH_B].rfAGCControl1 = rOFDM0_XBAGCCore1;
- pHalData->PHYRegDef[RF_PATH_C].rfAGCControl1 = rOFDM0_XCAGCCore1;
- pHalData->PHYRegDef[RF_PATH_D].rfAGCControl1 = rOFDM0_XDAGCCore1;
-
- // AGC control 2
- pHalData->PHYRegDef[RF_PATH_A].rfAGCControl2 = rOFDM0_XAAGCCore2;
- pHalData->PHYRegDef[RF_PATH_B].rfAGCControl2 = rOFDM0_XBAGCCore2;
- pHalData->PHYRegDef[RF_PATH_C].rfAGCControl2 = rOFDM0_XCAGCCore2;
- pHalData->PHYRegDef[RF_PATH_D].rfAGCControl2 = rOFDM0_XDAGCCore2;
-
- // RX AFE control 1
- pHalData->PHYRegDef[RF_PATH_A].rfRxIQImbalance = rOFDM0_XARxIQImbalance;
- pHalData->PHYRegDef[RF_PATH_B].rfRxIQImbalance = rOFDM0_XBRxIQImbalance;
- pHalData->PHYRegDef[RF_PATH_C].rfRxIQImbalance = rOFDM0_XCRxIQImbalance;
- pHalData->PHYRegDef[RF_PATH_D].rfRxIQImbalance = rOFDM0_XDRxIQImbalance;
-
- // RX AFE control 1
- pHalData->PHYRegDef[RF_PATH_A].rfRxAFE = rOFDM0_XARxAFE;
- pHalData->PHYRegDef[RF_PATH_B].rfRxAFE = rOFDM0_XBRxAFE;
- pHalData->PHYRegDef[RF_PATH_C].rfRxAFE = rOFDM0_XCRxAFE;
- pHalData->PHYRegDef[RF_PATH_D].rfRxAFE = rOFDM0_XDRxAFE;
-
- // Tx AFE control 1
- pHalData->PHYRegDef[RF_PATH_A].rfTxIQImbalance = rOFDM0_XATxIQImbalance;
- pHalData->PHYRegDef[RF_PATH_B].rfTxIQImbalance = rOFDM0_XBTxIQImbalance;
- pHalData->PHYRegDef[RF_PATH_C].rfTxIQImbalance = rOFDM0_XCTxIQImbalance;
- pHalData->PHYRegDef[RF_PATH_D].rfTxIQImbalance = rOFDM0_XDTxIQImbalance;
-
- // Tx AFE control 2
- pHalData->PHYRegDef[RF_PATH_A].rfTxAFE = rOFDM0_XATxAFE;
- pHalData->PHYRegDef[RF_PATH_B].rfTxAFE = rOFDM0_XBTxAFE;
- pHalData->PHYRegDef[RF_PATH_C].rfTxAFE = rOFDM0_XCTxAFE;
- pHalData->PHYRegDef[RF_PATH_D].rfTxAFE = rOFDM0_XDTxAFE;
-
- // Tranceiver LSSI Readback SI mode
- pHalData->PHYRegDef[RF_PATH_A].rfLSSIReadBack = rFPGA0_XA_LSSIReadBack;
- pHalData->PHYRegDef[RF_PATH_B].rfLSSIReadBack = rFPGA0_XB_LSSIReadBack;
- pHalData->PHYRegDef[RF_PATH_C].rfLSSIReadBack = rFPGA0_XC_LSSIReadBack;
- pHalData->PHYRegDef[RF_PATH_D].rfLSSIReadBack = rFPGA0_XD_LSSIReadBack;
-
- // Tranceiver LSSI Readback PI mode
- pHalData->PHYRegDef[RF_PATH_A].rfLSSIReadBackPi = TransceiverA_HSPI_Readback;
- pHalData->PHYRegDef[RF_PATH_B].rfLSSIReadBackPi = TransceiverB_HSPI_Readback;
- //pHalData->PHYRegDef[RF_PATH_C].rfLSSIReadBackPi = rFPGA0_XC_LSSIReadBack;
- //pHalData->PHYRegDef[RF_PATH_D].rfLSSIReadBackPi = rFPGA0_XD_LSSIReadBack;
-
-}
-
-
-/*-----------------------------------------------------------------------------
- * Function: phy_ConfigBBWithParaFile()
- *
- * Overview: This function read BB parameters from general file format, and do register
- * Read/Write
- *
- * Input: PADAPTER Adapter
- * ps1Byte pFileName
- *
- * Output: NONE
- *
- * Return: RT_STATUS_SUCCESS: configuration file exist
- * 2008/11/06 MH For 92S we do not support silent reset now. Disable
- * parameter file compare!!!!!!??
- *
- *---------------------------------------------------------------------------*/
-static int
-phy_ConfigBBWithParaFile(
- IN PADAPTER Adapter,
- IN u8* pFileName
-)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
- int rtStatus = _SUCCESS;
-
- return rtStatus;
-}
-
-
-
-//****************************************
-// The following is for High Power PA
-//****************************************
-VOID
-phy_ConfigBBExternalPA(
- IN PADAPTER Adapter
-)
-{
-#ifdef CONFIG_USB_HCI
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u16 i=0;
- u32 temp=0;
-
- if(!pHalData->ExternalPA)
- {
- return;
- }
-
- // 2010/10/19 MH According to Jenyu/EEChou 's opinion, we need not to execute the
- // same code as SU. It is already updated in PHY_REG_1T_HP.txt.
-#if 0
- PHY_SetBBReg(Adapter, 0xee8, BIT28, 1);
- temp = PHY_QueryBBReg(Adapter, 0x860, bMaskDWord);
- temp |= (BIT26|BIT21|BIT10|BIT5);
- PHY_SetBBReg(Adapter, 0x860, bMaskDWord, temp);
- PHY_SetBBReg(Adapter, 0x870, BIT10, 0);
- PHY_SetBBReg(Adapter, 0xc80, bMaskDWord, 0x20000080);
- PHY_SetBBReg(Adapter, 0xc88, bMaskDWord, 0x40000100);
-#endif
-
-#endif
-}
-
-/*-----------------------------------------------------------------------------
- * Function: phy_ConfigBBWithHeaderFile()
- *
- * Overview: This function read BB parameters from general file format, and do register
- * Read/Write
- *
- * Input: PADAPTER Adapter
- * u1Byte ConfigType 0 => PHY_CONFIG
- * 1 =>AGC_TAB
- *
- * Output: NONE
- *
- * Return: RT_STATUS_SUCCESS: configuration file exist
- *
- *---------------------------------------------------------------------------*/
-#ifndef CONFIG_PHY_SETTING_WITH_ODM
-static int
-phy_ConfigBBWithHeaderFile(
- IN PADAPTER Adapter,
- IN u8 ConfigType
-)
-{
- int i;
- u32* Rtl819XPHY_REGArray_Table;
- u32* Rtl819XAGCTAB_Array_Table;
- u16 PHY_REGArrayLen, AGCTAB_ArrayLen;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- int ret = _SUCCESS;
-
-
- AGCTAB_ArrayLen = Rtl8723_AGCTAB_1TArrayLength;
- Rtl819XAGCTAB_Array_Table = (u32*)Rtl8723_AGCTAB_1TArray;
- PHY_REGArrayLen = Rtl8723_PHY_REG_1TArrayLength;
- Rtl819XPHY_REGArray_Table = (u32*)Rtl8723_PHY_REG_1TArray;
-// RT_TRACE(COMP_INIT, DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() phy:Rtl8723AGCTAB_1TArray\n"));
-// RT_TRACE(COMP_INIT, DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() agc:Rtl8723PHY_REG_1TArray\n"));
-
- if(ConfigType == BaseBand_Config_PHY_REG)
- {
- #ifdef CONFIG_IOL_BB_PHY_REG
- {
- struct xmit_frame *xmit_frame;
- u32 tmp_value;
-
- if((xmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL) {
- ret = _FAIL;
- goto exit;
- }
-
- for(i=0;i<PHY_REGArrayLen;i=i+2)
- {
- tmp_value=Rtl819XPHY_REGArray_Table[i+1];
-
- if (Rtl819XPHY_REGArray_Table[i] == 0xfe)
- rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 50);
- else if (Rtl819XPHY_REGArray_Table[i] == 0xfd)
- rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 5);
- else if (Rtl819XPHY_REGArray_Table[i] == 0xfc)
- rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 1);
- else if (Rtl819XPHY_REGArray_Table[i] == 0xfb)
- rtw_IOL_append_DELAY_US_cmd(xmit_frame, 50);
- else if (Rtl819XPHY_REGArray_Table[i] == 0xfa)
- rtw_IOL_append_DELAY_US_cmd(xmit_frame, 5);
- else if (Rtl819XPHY_REGArray_Table[i] == 0xf9)
- rtw_IOL_append_DELAY_US_cmd(xmit_frame, 1);
-
- rtw_IOL_append_WD_cmd(xmit_frame, Rtl819XPHY_REGArray_Table[i], tmp_value);
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("The Rtl819XPHY_REGArray_Table[0] is %lx Rtl819XPHY_REGArray[1] is %lx \n",Rtl819XPHY_REGArray_Table[i], Rtl819XPHY_REGArray_Table[i+1]));
- }
-
- ret = rtw_IOL_exec_cmds_sync(Adapter, xmit_frame, 1000,0);
- }
- #else
- for(i=0;i<PHY_REGArrayLen;i=i+2)
- {
- if (Rtl819XPHY_REGArray_Table[i] == 0xfe){
- #ifdef CONFIG_LONG_DELAY_ISSUE
- rtw_msleep_os(50);
- #else
- rtw_mdelay_os(50);
- #endif
- }
- else if (Rtl819XPHY_REGArray_Table[i] == 0xfd)
- rtw_mdelay_os(5);
- else if (Rtl819XPHY_REGArray_Table[i] == 0xfc)
- rtw_mdelay_os(1);
- else if (Rtl819XPHY_REGArray_Table[i] == 0xfb)
- rtw_udelay_os(50);
- else if (Rtl819XPHY_REGArray_Table[i] == 0xfa)
- rtw_udelay_os(5);
- else if (Rtl819XPHY_REGArray_Table[i] == 0xf9)
- rtw_udelay_os(1);
-
- PHY_SetBBReg(Adapter, Rtl819XPHY_REGArray_Table[i], bMaskDWord, Rtl819XPHY_REGArray_Table[i+1]);
-
- // Add 1us delay between BB/RF register setting.
- rtw_udelay_os(1);
-
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("The Rtl819XPHY_REGArray_Table[0] is %lx Rtl819XPHY_REGArray[1] is %lx \n",Rtl819XPHY_REGArray_Table[i], Rtl819XPHY_REGArray_Table[i+1]));
- }
- #endif
- // for External PA
- phy_ConfigBBExternalPA(Adapter);
- }
- else if(ConfigType == BaseBand_Config_AGC_TAB)
- {
- #ifdef CONFIG_IOL_BB_AGC_TAB
- {
- struct xmit_frame *xmit_frame;
-
- if((xmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL) {
- ret = _FAIL;
- goto exit;
- }
-
- for(i=0;i<AGCTAB_ArrayLen;i=i+2)
- {
- rtw_IOL_append_WD_cmd(xmit_frame, Rtl819XAGCTAB_Array_Table[i], Rtl819XAGCTAB_Array_Table[i+1]);
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("The Rtl819XAGCTAB_Array_Table[0] is %lx Rtl819XPHY_REGArray[1] is %lx \n",Rtl819XAGCTAB_Array_Table[i], Rtl819XAGCTAB_Array_Table[i+1]));
- }
-
- ret = rtw_IOL_exec_cmds_sync(Adapter, xmit_frame, 1000,0);
- }
- #else
- for(i=0;i<AGCTAB_ArrayLen;i=i+2)
- {
- PHY_SetBBReg(Adapter, Rtl819XAGCTAB_Array_Table[i], bMaskDWord, Rtl819XAGCTAB_Array_Table[i+1]);
-
- // Add 1us delay between BB/RF register setting.
- rtw_udelay_os(1);
-
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("The Rtl819XAGCTAB_Array_Table[0] is %lx Rtl819XPHY_REGArray[1] is %lx \n",Rtl819XAGCTAB_Array_Table[i], Rtl819XAGCTAB_Array_Table[i+1]));
- }
- #endif
- }
-
-exit:
- return ret;
-}
-
-#endif
-VOID
-storePwrIndexDiffRateOffset(
- IN PADAPTER Adapter,
- IN u32 RegAddr,
- IN u32 BitMask,
- IN u32 Data
- )
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
- if(RegAddr == rTxAGC_A_Rate18_06)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][0] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][0] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][0]));
- }
- if(RegAddr == rTxAGC_A_Rate54_24)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][1] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][1] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][1]));
- }
- if(RegAddr == rTxAGC_A_CCK1_Mcs32)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][6] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][6] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][6]));
- }
- if(RegAddr == rTxAGC_B_CCK11_A_CCK2_11 && BitMask == 0xffffff00)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][7] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][7] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][7]));
- }
- if(RegAddr == rTxAGC_A_Mcs03_Mcs00)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][2] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][2] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][2]));
- }
- if(RegAddr == rTxAGC_A_Mcs07_Mcs04)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][3] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][3] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][3]));
- }
- if(RegAddr == rTxAGC_A_Mcs11_Mcs08)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][4] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][4] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][4]));
- }
- if(RegAddr == rTxAGC_A_Mcs15_Mcs12)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][5] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][5] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][5]));
- }
- if(RegAddr == rTxAGC_B_Rate18_06)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][8] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][8] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][8]));
- }
- if(RegAddr == rTxAGC_B_Rate54_24)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][9] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][9] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][9]));
- }
- if(RegAddr == rTxAGC_B_CCK1_55_Mcs32)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][14] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][14] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][14]));
- }
- if(RegAddr == rTxAGC_B_CCK11_A_CCK2_11 && BitMask == 0x000000ff)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][15] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][15] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][15]));
- }
- if(RegAddr == rTxAGC_B_Mcs03_Mcs00)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][10] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][10] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][10]));
- }
- if(RegAddr == rTxAGC_B_Mcs07_Mcs04)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][11] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][11] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][11]));
- }
- if(RegAddr == rTxAGC_B_Mcs11_Mcs08)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][12] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][12] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][12]));
- }
- if(RegAddr == rTxAGC_B_Mcs15_Mcs12)
- {
- pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][13] = Data;
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][13] = 0x%lx\n", pHalData->pwrGroupCnt,
- // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][13]));
- pHalData->pwrGroupCnt++;
- }
-}
-/*-----------------------------------------------------------------------------
- * Function: phy_ConfigBBWithPgParaFile
- *
- * Overview:
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 11/06/2008 MHC Create Version 0.
- * 2009/07/29 tynli (porting from 92SE branch)2009/03/11 Add copy parameter file to buffer for silent reset
- *---------------------------------------------------------------------------*/
-static int
-phy_ConfigBBWithPgParaFile(
- IN PADAPTER Adapter,
- IN u8* pFileName)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
- int rtStatus = _SUCCESS;
-
-
- return rtStatus;
-
-} /* phy_ConfigBBWithPgParaFile */
-
-
-/*-----------------------------------------------------------------------------
- * Function: phy_ConfigBBWithPgHeaderFile
- *
- * Overview: Config PHY_REG_PG array
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 11/06/2008 MHC Add later!!!!!!.. Please modify for new files!!!!
- * 11/10/2008 tynli Modify to mew files.
- *---------------------------------------------------------------------------*/
-static int
-phy_ConfigBBWithPgHeaderFile(
- IN PADAPTER Adapter,
- IN u8 ConfigType)
-{
- int i;
- u32* Rtl819XPHY_REGArray_Table_PG;
- u16 PHY_REGArrayPGLen;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
-
- PHY_REGArrayPGLen = Rtl8723_PHY_REG_Array_PGLength;
- Rtl819XPHY_REGArray_Table_PG = (u32*)Rtl8723_PHY_REG_Array_PG;
-
- if(ConfigType == BaseBand_Config_PHY_REG)
- {
- for(i=0;i<PHY_REGArrayPGLen;i=i+3)
- {
- #if 0 //without IO, no delay is neeeded...
- if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfe){
- #ifdef CONFIG_LONG_DELAY_ISSUE
- rtw_msleep_os(50);
- #else
- rtw_mdelay_os(50);
- #endif
- }
- else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfd)
- rtw_mdelay_os(5);
- else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfc)
- rtw_mdelay_os(1);
- else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfb)
- rtw_udelay_os(50);
- else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfa)
- rtw_udelay_os(5);
- else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xf9)
- rtw_udelay_os(1);
- //PHY_SetBBReg(Adapter, Rtl819XPHY_REGArray_Table_PG[i], Rtl819XPHY_REGArray_Table_PG[i+1], Rtl819XPHY_REGArray_Table_PG[i+2]);
- #endif
-
- storePwrIndexDiffRateOffset(Adapter, Rtl819XPHY_REGArray_Table_PG[i],
- Rtl819XPHY_REGArray_Table_PG[i+1],
- Rtl819XPHY_REGArray_Table_PG[i+2]);
- //RT_TRACE(COMP_SEND, DBG_TRACE, ("The Rtl819XPHY_REGArray_Table_PG[0] is %lx Rtl819XPHY_REGArray_Table_PG[1] is %lx \n",Rtl819XPHY_REGArray_Table_PG[i], Rtl819XPHY_REGArray_Table_PG[i+1]));
- }
- }
- else
- {
-
- //RT_TRACE(COMP_SEND, DBG_LOUD, ("phy_ConfigBBWithPgHeaderFile(): ConfigType != BaseBand_Config_PHY_REG\n"));
- }
-
- return _SUCCESS;
-
-} /* phy_ConfigBBWithPgHeaderFile */
-
-#if (MP_DRIVER == 1)
-
-/*-----------------------------------------------------------------------------
- * Function: phy_ConfigBBWithMpParaFile()
- *
- * Overview: This function read BB parameters from general file format, and do register
- * Read/Write
- *
- * Input: PADAPTER Adapter
- * ps1Byte pFileName
- *
- * Output: NONE
- *
- * Return: RT_STATUS_SUCCESS: configuration file exist
- * 2008/11/06 MH For 92S we do not support silent reset now. Disable
- * parameter file compare!!!!!!??
- *
- *---------------------------------------------------------------------------*/
-static int
-phy_ConfigBBWithMpParaFile(
- IN PADAPTER Adapter,
- IN u8* pFileName
-)
-{
-#if 1
- int rtStatus = _SUCCESS;
-#else
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- s4Byte nLinesRead, ithLine;
- RT_STATUS rtStatus = RT_STATUS_SUCCESS;
- ps1Byte szLine;
- u4Byte u4bRegOffset, u4bRegMask, u4bRegValue;
- u4Byte u4bMove;
-
- if(ADAPTER_TEST_STATUS_FLAG(Adapter, ADAPTER_STATUS_FIRST_INIT))
- {
- rtStatus = PlatformReadFile(
- Adapter,
- pFileName,
- (pu1Byte)(pHalData->BufOfLines),
- MAX_LINES_HWCONFIG_TXT,
- MAX_BYTES_LINE_HWCONFIG_TXT,
- &nLinesRead
- );
- if(rtStatus == RT_STATUS_SUCCESS)
- {
- PlatformMoveMemory(pHalData->BufOfLines6, pHalData->BufOfLines, nLinesRead*MAX_BYTES_LINE_HWCONFIG_TXT);
- pHalData->nLinesRead6 = nLinesRead;
- }
- else
- {
- // Temporarily skip PHY_REG_MP.txt if file does not exist.
- pHalData->nLinesRead6 = 0;
- RT_TRACE(COMP_INIT, DBG_LOUD, ("No matched file \r\n"));
- return RT_STATUS_SUCCESS;
- }
- }
- else
- {
- PlatformMoveMemory(pHalData->BufOfLines, pHalData->BufOfLines6, MAX_LINES_HWCONFIG_TXT*MAX_BYTES_LINE_HWCONFIG_TXT);
- nLinesRead = pHalData->nLinesRead6;
- rtStatus = RT_STATUS_SUCCESS;
- }
-
-
- if(rtStatus == RT_STATUS_SUCCESS)
- {
- RT_TRACE(COMP_INIT, DBG_LOUD, ("phy_ConfigBBWithMpParaFile(): read %s ok\n", pFileName));
-
- for(ithLine = 0; ithLine < nLinesRead; ithLine++)
- {
- szLine = pHalData->BufOfLines[ithLine];
-
- if(!IsCommentString(szLine))
- {
- // Get 1st hex value as register offset.
- if(GetHexValueFromString(szLine, &u4bRegOffset, &u4bMove))
- {
- if(u4bRegOffset == 0xff)
- { // Ending.
- break;
- }
- else if (u4bRegOffset == 0xfe)
- delay_ms(50);
- else if (u4bRegOffset == 0xfd)
- delay_ms(5);
- else if (u4bRegOffset == 0xfc)
- delay_ms(1);
- else if (u4bRegOffset == 0xfb)
- PlatformStallExecution(50);
- else if (u4bRegOffset == 0xfa)
- PlatformStallExecution(5);
- else if (u4bRegOffset == 0xf9)
- PlatformStallExecution(1);
-
- // Get 2nd hex value as register value.
- szLine += u4bMove;
- if(GetHexValueFromString(szLine, &u4bRegValue, &u4bMove))
- {
- RT_TRACE(COMP_FPGA, DBG_TRACE, ("[ADDR]%03lX=%08lX\n", u4bRegOffset, u4bRegValue));
- PHY_SetBBReg(Adapter, u4bRegOffset, bMaskDWord, u4bRegValue);
-
- // Add 1us delay between BB/RF register setting.
- PlatformStallExecution(1);
- }
- }
- }
- }
- }
- else
- {
- RT_TRACE(COMP_INIT, DBG_LOUD, ("phy_ConfigBBWithMpParaFile(): Failed%s\n", pFileName));
- }
-#endif
-
- return rtStatus;
-}
-
-/*-----------------------------------------------------------------------------
- * Function: phy_ConfigBBWithMpHeaderFile
- *
- * Overview: Config PHY_REG_MP array
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 02/04/2010 chiyokolin Modify to new files.
- *---------------------------------------------------------------------------*/
-static int
-phy_ConfigBBWithMpHeaderFile(
- IN PADAPTER Adapter,
- IN u1Byte ConfigType)
-{
- int i;
- u32* Rtl8192CPHY_REGArray_Table_MP;
- u16 PHY_REGArrayMPLen;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
-
- PHY_REGArrayMPLen = Rtl8723_PHY_REG_Array_MPLength;
- Rtl8192CPHY_REGArray_Table_MP = (u32*)Rtl8723_PHY_REG_Array_MP;
-
- if(ConfigType == BaseBand_Config_PHY_REG)
- {
- for(i=0;i<PHY_REGArrayMPLen;i=i+2)
- {
- if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfe) {
- #ifdef CONFIG_LONG_DELAY_ISSUE
- rtw_msleep_os(50);
- #else
- rtw_mdelay_os(50);
- #endif
- }
- else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfd)
- rtw_mdelay_os(5);
- else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfc)
- rtw_mdelay_os(1);
- else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfb) {
- #ifdef CONFIG_LONG_DELAY_ISSUE
- rtw_msleep_os(50);
- #else
- rtw_mdelay_os(50);
- #endif
- }
- else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfa)
- rtw_mdelay_os(5);
- else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xf9)
- rtw_mdelay_os(1);
- PHY_SetBBReg(Adapter, Rtl8192CPHY_REGArray_Table_MP[i], bMaskDWord, Rtl8192CPHY_REGArray_Table_MP[i+1]);
-
- // Add 1us delay between BB/RF register setting.
- rtw_mdelay_os(1);
-
-// RT_TRACE(COMP_INIT, DBG_TRACE, ("The Rtl8192CPHY_REGArray_Table_MP[%d] is %lx Rtl8192CPHY_REGArray_Table_MP[%d] is %lx \n", i, i+1, Rtl8192CPHY_REGArray_Table_MP[i], Rtl8192CPHY_REGArray_Table_MP[i+1]));
- }
- }
- else
- {
-// RT_TRACE(COMP_SEND, DBG_LOUD, ("phy_ConfigBBWithMpHeaderFile(): ConfigType != BaseBand_Config_PHY_REG\n"));
- }
-
- return _SUCCESS;
-} /* phy_ConfigBBWithMpHeaderFile */
-
-#endif // #if (MP_DRIVER == 1)
-
-static VOID
-phy_BB8192C_Config_1T(
- IN PADAPTER Adapter
- )
-{
-#if 0
- //for path - A
- PHY_SetBBReg(Adapter, rFPGA0_TxInfo, 0x3, 0x1);
- PHY_SetBBReg(Adapter, rFPGA1_TxInfo, 0x0303, 0x0101);
- PHY_SetBBReg(Adapter, 0xe74, 0x0c000000, 0x1);
- PHY_SetBBReg(Adapter, 0xe78, 0x0c000000, 0x1);
- PHY_SetBBReg(Adapter, 0xe7c, 0x0c000000, 0x1);
- PHY_SetBBReg(Adapter, 0xe80, 0x0c000000, 0x1);
- PHY_SetBBReg(Adapter, 0xe88, 0x0c000000, 0x1);
-#endif
- //for path - B
- PHY_SetBBReg(Adapter, rFPGA0_TxInfo, 0x3, 0x2);
- PHY_SetBBReg(Adapter, rFPGA1_TxInfo, 0x300033, 0x200022);
-
- // 20100519 Joseph: Add for 1T2R config. Suggested by Kevin, Jenyu and Yunan.
- PHY_SetBBReg(Adapter, rCCK0_AFESetting, bMaskByte3, 0x45);
- PHY_SetBBReg(Adapter, rOFDM0_TRxPathEnable, bMaskByte0, 0x23);
- PHY_SetBBReg(Adapter, rOFDM0_AGCParameter1, 0x30, 0x1); // B path first AGC
-
- PHY_SetBBReg(Adapter, 0xe74, 0x0c000000, 0x2);
- PHY_SetBBReg(Adapter, 0xe78, 0x0c000000, 0x2);
- PHY_SetBBReg(Adapter, 0xe7c, 0x0c000000, 0x2);
- PHY_SetBBReg(Adapter, 0xe80, 0x0c000000, 0x2);
- PHY_SetBBReg(Adapter, 0xe88, 0x0c000000, 0x2);
-
-
-}
-
-// Joseph test: new initialize order!!
-// Test only!! This part need to be re-organized.
-// Now it is just for 8256.
-static int
-phy_BB8190_Config_HardCode(
- IN PADAPTER Adapter
- )
-{
- //RT_ASSERT(FALSE, ("This function is not implement yet!! \n"));
- return _SUCCESS;
-}
-
-static int
-phy_BB8723a_Config_ParaFile(
- IN PADAPTER Adapter
- )
-{
- EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter);
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- int rtStatus = _SUCCESS;
-
- u8 sz8723BBRegFile[] = RTL8723_PHY_REG;
- u8 sz8723AGCTableFile[] = RTL8723_AGC_TAB;
- u8 sz8723BBRegPgFile[] = RTL8723_PHY_REG_PG;
- u8 sz8723BBRegMpFile[] = RTL8723_PHY_REG_MP;
-
- u8 *pszBBRegFile = NULL, *pszAGCTableFile = NULL, *pszBBRegPgFile = NULL, *pszBBRegMpFile=NULL;
-
-
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("==>phy_BB8192S_Config_ParaFile\n"));
-
- pszBBRegFile = sz8723BBRegFile ;
- pszAGCTableFile = sz8723AGCTableFile;
- pszBBRegPgFile = sz8723BBRegPgFile;
- pszBBRegMpFile = sz8723BBRegMpFile;
-
- //
- // 1. Read PHY_REG.TXT BB INIT!!
- // We will seperate as 88C / 92C according to chip version
- //
-#ifdef CONFIG_EMBEDDED_FWIMG
- #ifdef CONFIG_PHY_SETTING_WITH_ODM
- if(HAL_STATUS_FAILURE ==ODM_ConfigBBWithHeaderFile(&pHalData->odmpriv, CONFIG_BB_PHY_REG))
- rtStatus = _FAIL;
- #else
- rtStatus = phy_ConfigBBWithHeaderFile(Adapter, BaseBand_Config_PHY_REG);
- #endif
-#else
- // No matter what kind of CHIP we always read PHY_REG.txt. We must copy different
- // type of parameter files to phy_reg.txt at first.
- rtStatus = phy_ConfigBBWithParaFile(Adapter,pszBBRegFile);
-#endif//#ifdef CONFIG_EMBEDDED_FWIMG
-
- if(rtStatus != _SUCCESS){
- //RT_TRACE(COMP_INIT, DBG_SERIOUS, ("phy_BB8192S_Config_ParaFile():Write BB Reg Fail!!"));
- goto phy_BB8190_Config_ParaFile_Fail;
- }
-
-#if MP_DRIVER == 1
- if (Adapter->registrypriv.mp_mode == 1)
- {
- //
- // 1.1 Read PHY_REG_MP.TXT BB INIT!!
- // We will seperate as 88C / 92C according to chip version
- //
-#ifdef CONFIG_EMBEDDED_FWIMG
- rtStatus = phy_ConfigBBWithMpHeaderFile(Adapter, BaseBand_Config_PHY_REG);
-#else
- // No matter what kind of CHIP we always read PHY_REG.txt. We must copy different
- // type of parameter files to phy_reg.txt at first.
- rtStatus = phy_ConfigBBWithMpParaFile(Adapter, pszBBRegMpFile);
-#endif
-
- if(rtStatus != _SUCCESS){
-// RT_TRACE(COMP_INIT, DBG_SERIOUS, ("phy_BB8192S_Config_ParaFile():Write BB Reg MP Fail!!"));
- goto phy_BB8190_Config_ParaFile_Fail;
- }
- }
-#endif // #if (MP_DRIVER == 1)
-
- //
- // 20100318 Joseph: Config 2T2R to 1T2R if necessary.
- //
- if(pHalData->rf_type == RF_1T2R)
- {
- phy_BB8192C_Config_1T(Adapter);
- DBG_8192C("phy_BB8723a_Config_ParaFile():Config to 1T!!\n");
- }
-
- //
- // 2. If EEPROM or EFUSE autoload OK, We must config by PHY_REG_PG.txt
- //
- if (pEEPROM->bautoload_fail_flag == _FALSE)
- {
- pHalData->pwrGroupCnt = 0;
-
-#ifdef CONFIG_EMBEDDED_FWIMG
- rtStatus = phy_ConfigBBWithPgHeaderFile(Adapter, BaseBand_Config_PHY_REG);
-#else
- rtStatus = phy_ConfigBBWithPgParaFile(Adapter, pszBBRegPgFile);
-#endif
- }
-
- if(rtStatus != _SUCCESS){
- //RT_TRACE(COMP_INIT, DBG_SERIOUS, ("phy_BB8192S_Config_ParaFile():BB_PG Reg Fail!!"));
- goto phy_BB8190_Config_ParaFile_Fail;
- }
-
- //
- // 3. BB AGC table Initialization
- //
-#ifdef CONFIG_EMBEDDED_FWIMG
- #ifdef CONFIG_PHY_SETTING_WITH_ODM
- if(HAL_STATUS_FAILURE ==ODM_ConfigBBWithHeaderFile(&pHalData->odmpriv, CONFIG_BB_AGC_TAB))
- rtStatus = _FAIL;
- #else
- rtStatus = phy_ConfigBBWithHeaderFile(Adapter, BaseBand_Config_AGC_TAB);
- #endif//#ifdef CONFIG_PHY_SETTING_WITH_ODM
-#else
- //RT_TRACE(COMP_INIT, DBG_LOUD, ("phy_BB8192S_Config_ParaFile AGC_TAB.txt\n"));
- rtStatus = phy_ConfigBBWithParaFile(Adapter, pszAGCTableFile);
-#endif
-
- if(rtStatus != _SUCCESS){
- //RT_TRACE(COMP_FPGA, DBG_SERIOUS, ("phy_BB8192S_Config_ParaFile():AGC Table Fail\n"));
- goto phy_BB8190_Config_ParaFile_Fail;
- }
-
-phy_BB8190_Config_ParaFile_Fail:
-
- return rtStatus;
-}
-
-
-int
-PHY_BBConfig8723A(
- IN PADAPTER Adapter
- )
-{
- int rtStatus = _SUCCESS;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u32 RegVal;
- u8 TmpU1B=0;
- u8 value8,CrystalCap;
-
- phy_InitBBRFRegisterDefinition(Adapter);
-
- if(IS_HARDWARE_TYPE_8723A(Adapter))
- {
- // Suggested by Scott. tynli_test. 2010.12.30.
- //1. 0x28[1] = 1
- TmpU1B = rtw_read8(Adapter, REG_AFE_PLL_CTRL);
- rtw_udelay_os(2);
- rtw_write8(Adapter, REG_AFE_PLL_CTRL, (TmpU1B|BIT1));
- rtw_udelay_os(2);
-
- //2. 0x29[7:0] = 0xFF
- rtw_write8(Adapter, REG_AFE_PLL_CTRL+1, 0xff);
- rtw_udelay_os(2);
-
- //3. 0x02[1:0] = 2b'11
- TmpU1B = rtw_read8(Adapter, REG_SYS_FUNC_EN);
- rtw_write8(Adapter, REG_SYS_FUNC_EN, (TmpU1B|FEN_BB_GLB_RSTn|FEN_BBRSTB));
-
- //4. 0x25[6] = 0
- TmpU1B = rtw_read8(Adapter, REG_AFE_XTAL_CTRL+1);
- rtw_write8(Adapter, REG_AFE_XTAL_CTRL+1, (TmpU1B&(~BIT6)));
-
- //5. 0x24[20] = 0 //Advised by SD3 Alex Wang. 2011.02.09.
- TmpU1B = rtw_read8(Adapter, REG_AFE_XTAL_CTRL+2);
- rtw_write8(Adapter, REG_AFE_XTAL_CTRL+2, (TmpU1B&(~BIT4)));
-
- //6. 0x1f[7:0] = 0x07
- rtw_write8(Adapter, REG_RF_CTRL, 0x07);
- }
- else
- {
- // Enable BB and RF
- RegVal = rtw_read16(Adapter, REG_SYS_FUNC_EN);
- rtw_write16(Adapter, REG_SYS_FUNC_EN, (u16)(RegVal|BIT13|BIT0|BIT1));
-
- // 20090923 Joseph: Advised by Steven and Jenyu. Power sequence before init RF.
- rtw_write8(Adapter, REG_AFE_PLL_CTRL, 0x83);
- rtw_write8(Adapter, REG_AFE_PLL_CTRL+1, 0xdb);
-
- rtw_write8(Adapter, REG_RF_CTRL, RF_EN|RF_RSTB|RF_SDMRSTB);
-
-#ifdef CONFIG_USB_HCI
- rtw_write8(Adapter, REG_SYS_FUNC_EN, FEN_USBA | FEN_USBD | FEN_BB_GLB_RSTn | FEN_BBRSTB);
-#else
- rtw_write8(Adapter, REG_SYS_FUNC_EN, FEN_PPLL|FEN_PCIEA|FEN_DIO_PCIE|FEN_BB_GLB_RSTn|FEN_BBRSTB);
-#endif
-
- // 2009/10/21 by SD1 Jong. Modified by tynli. Not in Documented in V8.1.
-#ifdef CONFIG_USB_HCI
- //To Fix MAC loopback mode fail. Suggested by SD4 Johnny. 2010.03.23.
- rtw_write8(Adapter, REG_LDOHCI12_CTRL, 0x0f);
- rtw_write8(Adapter, 0x15, 0xe9);
-#endif
-
- rtw_write8(Adapter, REG_AFE_XTAL_CTRL+1, 0x80);
-
-#ifdef CONFIG_PCI_HCI
- // Force use left antenna by default for 88C.
- // if(!IS_92C_SERIAL(pHalData->VersionID) || IS_92C_1T2R(pHalData->VersionID))
- if(Adapter->ledpriv.LedStrategy != SW_LED_MODE10)
- {
- RegVal = rtw_read32(Adapter, REG_LEDCFG0);
- rtw_write32(Adapter, REG_LEDCFG0, RegVal|BIT23);
- }
-#endif
- }
-
- //
- // Config BB and AGC
- //
- rtStatus = phy_BB8723a_Config_ParaFile(Adapter);
-
-#ifdef CONFIG_USB_HCI
- if(IS_HARDWARE_TYPE_8192CU(Adapter)&&IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID)
- &&(pHalData->BoardType == BOARD_USB_High_PA))
- rtw_write8(Adapter, 0xc72, 0x50);
-#endif
-//only for B-cut
- if(IS_HARDWARE_TYPE_8723A(Adapter) && pHalData->EEPROMVersion >= 0x01)
- {
- CrystalCap = pHalData->CrystalCap & 0x3F;
- PHY_SetBBReg(Adapter, REG_MAC_PHY_CTRL, 0xFFF000, (CrystalCap | (CrystalCap << 6)));
- }
-
- if(IS_HARDWARE_TYPE_8723AE(Adapter))
- PHY_SetBBReg(Adapter, REG_LDOA15_CTRL, bMaskDWord, 0x01572505);
- return rtStatus;
-}
-
-
-int
-PHY_RFConfig8723A(
- IN PADAPTER Adapter
- )
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- int rtStatus = _SUCCESS;
-
- //
- // RF config
- //
- rtStatus = PHY_RF6052_Config8723A(Adapter);
- return rtStatus;
-}
-
-
-/*-----------------------------------------------------------------------------
- * Function: PHY_ConfigRFWithParaFile()
- *
- * Overview: This function read RF parameters from general file format, and do RF 3-wire
- *
- * Input: PADAPTER Adapter
- * ps1Byte pFileName
- * RF_RADIO_PATH_E eRFPath
- *
- * Output: NONE
- *
- * Return: RT_STATUS_SUCCESS: configuration file exist
- *
- * Note: Delay may be required for RF configuration
- *---------------------------------------------------------------------------*/
-int
-rtl8192c_PHY_ConfigRFWithParaFile(
- IN PADAPTER Adapter,
- IN u8* pFileName,
- RF_RADIO_PATH_E eRFPath
-)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
- int rtStatus = _SUCCESS;
-
-
- return rtStatus;
-
-}
-
-//****************************************
-// The following is for High Power PA
-//****************************************
-#define HighPowerRadioAArrayLen 22
-//This is for High power PA
-u32 Rtl8192S_HighPower_RadioA_Array[HighPowerRadioAArrayLen] = {
-0x013,0x00029ea4,
-0x013,0x00025e74,
-0x013,0x00020ea4,
-0x013,0x0001ced0,
-0x013,0x00019f40,
-0x013,0x00014e70,
-0x013,0x000106a0,
-0x013,0x0000c670,
-0x013,0x000082a0,
-0x013,0x00004270,
-0x013,0x00000240,
-};
-
-int
-PHY_ConfigRFExternalPA(
- IN PADAPTER Adapter,
- RF_RADIO_PATH_E eRFPath
-)
-{
- int rtStatus = _SUCCESS;
-#ifdef CONFIG_USB_HCI
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u16 i=0;
-
- if(!pHalData->ExternalPA)
- {
- return rtStatus;
- }
-
- // 2010/10/19 MH According to Jenyu/EEChou 's opinion, we need not to execute the
- // same code as SU. It is already updated in radio_a_1T_HP.txt.
-#if 0
- //add for SU High Power PA
- for(i = 0;i<HighPowerRadioAArrayLen; i=i+2)
- {
- RT_TRACE(COMP_INIT, DBG_LOUD, ("External PA, write RF 0x%lx=0x%lx\n", Rtl8192S_HighPower_RadioA_Array[i], Rtl8192S_HighPower_RadioA_Array[i+1]));
- PHY_SetRFReg(Adapter, eRFPath, Rtl8192S_HighPower_RadioA_Array[i], bRFRegOffsetMask, Rtl8192S_HighPower_RadioA_Array[i+1]);
- }
-#endif
-
-#endif
- return rtStatus;
-}
-//****************************************
-/*-----------------------------------------------------------------------------
- * Function: PHY_ConfigRFWithHeaderFile()
- *
- * Overview: This function read RF parameters from general file format, and do RF 3-wire
- *
- * Input: PADAPTER Adapter
- * ps1Byte pFileName
- * RF_RADIO_PATH_E eRFPath
- *
- * Output: NONE
- *
- * Return: RT_STATUS_SUCCESS: configuration file exist
- *
- * Note: Delay may be required for RF configuration
- *---------------------------------------------------------------------------*/
-#ifndef CONFIG_PHY_SETTING_WITH_ODM
-int
-rtl8723a_PHY_ConfigRFWithHeaderFile(
- IN PADAPTER Adapter,
- RF_RADIO_PATH_E eRFPath
-)
-{
-
- int i;
- int rtStatus = _SUCCESS;
- u32* Rtl819XRadioA_Array_Table;
- u32* Rtl819XRadioB_Array_Table;
- u16 RadioA_ArrayLen,RadioB_ArrayLen;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
-
- RadioA_ArrayLen = Rtl8723_RadioA_1TArrayLength;
- Rtl819XRadioA_Array_Table = (u32*)Rtl8723_RadioA_1TArray;
- RadioB_ArrayLen = Rtl8723_RadioB_1TArrayLength;
- Rtl819XRadioB_Array_Table = (u32*)Rtl8723_RadioB_1TArray;
-// RT_TRACE(COMP_INIT, DBG_LOUD, (" ===> PHY_ConfigRFWithHeaderFile() Radio_A:Rtl8723RadioA_1TArray\n"));
-// RT_TRACE(COMP_INIT, DBG_LOUD, (" ===> PHY_ConfigRFWithHeaderFile() Radio_B:Rtl8723RadioB_1TArray\n"));
-
- switch (eRFPath)
- {
- case RF_PATH_A:
- #ifdef CONFIG_IOL_RF_RF90_PATH_A
- {
- struct xmit_frame *xmit_frame;
- if((xmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL) {
- rtStatus = _FAIL;
- goto exit;
- }
-
- for(i = 0;i<RadioA_ArrayLen; i=i+2)
- {
- if(Rtl819XRadioA_Array_Table[i] == 0xfe)
- rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 50);
- else if (Rtl819XRadioA_Array_Table[i] == 0xfd)
- rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 5);
- else if (Rtl819XRadioA_Array_Table[i] == 0xfc)
- rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 1);
- else if (Rtl819XRadioA_Array_Table[i] == 0xfb)
- rtw_IOL_append_DELAY_US_cmd(xmit_frame, 50);
- else if (Rtl819XRadioA_Array_Table[i] == 0xfa)
- rtw_IOL_append_DELAY_US_cmd(xmit_frame, 5);
- else if (Rtl819XRadioA_Array_Table[i] == 0xf9)
- rtw_IOL_append_DELAY_US_cmd(xmit_frame, 1);
- else
- {
- BB_REGISTER_DEFINITION_T *pPhyReg = &pHalData->PHYRegDef[eRFPath];
- u32 NewOffset = 0;
- u32 DataAndAddr = 0;
-
- NewOffset = Rtl819XRadioA_Array_Table[i] & 0x3f;
- DataAndAddr = ((NewOffset<<20) | (Rtl819XRadioA_Array_Table[i+1]&0x000fffff)) & 0x0fffffff; // T65 RF
- rtw_IOL_append_WD_cmd(xmit_frame, pPhyReg->rf3wireOffset, DataAndAddr);
- }
- }
- rtStatus = rtw_IOL_exec_cmds_sync(Adapter, xmit_frame, 1000,0);
- }
- #else
- for(i = 0;i<RadioA_ArrayLen; i=i+2)
- {
- if(Rtl819XRadioA_Array_Table[i] == 0xfe) {
- #ifdef CONFIG_LONG_DELAY_ISSUE
- rtw_msleep_os(50);
- #else
- rtw_mdelay_os(50);
- #endif
- }
- else if (Rtl819XRadioA_Array_Table[i] == 0xfd)
- rtw_mdelay_os(5);
- else if (Rtl819XRadioA_Array_Table[i] == 0xfc)
- rtw_mdelay_os(1);
- else if (Rtl819XRadioA_Array_Table[i] == 0xfb)
- rtw_udelay_os(50);
- else if (Rtl819XRadioA_Array_Table[i] == 0xfa)
- rtw_udelay_os(5);
- else if (Rtl819XRadioA_Array_Table[i] == 0xf9)
- rtw_udelay_os(1);
- else
- {
- PHY_SetRFReg(Adapter, eRFPath, Rtl819XRadioA_Array_Table[i], bRFRegOffsetMask, Rtl819XRadioA_Array_Table[i+1]);
- // Add 1us delay between BB/RF register setting.
- rtw_udelay_os(1);
- }
- }
- #endif
- //Add for High Power PA
- PHY_ConfigRFExternalPA(Adapter, eRFPath);
- break;
- case RF_PATH_B:
- #ifdef CONFIG_IOL_RF_RF_PATH_B
- {
- struct xmit_frame *xmit_frame;
- if((xmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL) {
- rtStatus = _FAIL;
- goto exit;
- }
-
- for(i = 0;i<RadioB_ArrayLen; i=i+2)
- {
- if(Rtl819XRadioB_Array_Table[i] == 0xfe)
- rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 50);
- else if (Rtl819XRadioB_Array_Table[i] == 0xfd)
- rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 5);
- else if (Rtl819XRadioB_Array_Table[i] == 0xfc)
- rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 1);
- else if (Rtl819XRadioB_Array_Table[i] == 0xfb)
- rtw_IOL_append_DELAY_US_cmd(xmit_frame, 50);
- else if (Rtl819XRadioB_Array_Table[i] == 0xfa)
- rtw_IOL_append_DELAY_US_cmd(xmit_frame, 5);
- else if (Rtl819XRadioB_Array_Table[i] == 0xf9)
- rtw_IOL_append_DELAY_US_cmd(xmit_frame, 1);
- else
- {
- BB_REGISTER_DEFINITION_T *pPhyReg = &pHalData->PHYRegDef[eRFPath];
- u32 NewOffset = 0;
- u32 DataAndAddr = 0;
-
- NewOffset = Rtl819XRadioB_Array_Table[i] & 0x3f;
- DataAndAddr = ((NewOffset<<20) | (Rtl819XRadioB_Array_Table[i+1]&0x000fffff)) & 0x0fffffff; // T65 RF
- rtw_IOL_append_WD_cmd(xmit_frame, pPhyReg->rf3wireOffset, DataAndAddr);
- }
- }
- rtStatus = rtw_IOL_exec_cmds_sync(Adapter, xmit_frame, 1000,0);
- }
- #else
- for(i = 0;i<RadioB_ArrayLen; i=i+2)
- {
- if(Rtl819XRadioB_Array_Table[i] == 0xfe)
- { // Deay specific ms. Only RF configuration require delay.
-#if 0//#ifdef CONFIG_USB_HCI
- #ifdef CONFIG_LONG_DELAY_ISSUE
- rtw_msleep_os(1000);
- #else
- rtw_mdelay_os(1000);
- #endif
-#else
- #ifdef CONFIG_LONG_DELAY_ISSUE
- rtw_msleep_os(50);
- #else
- rtw_mdelay_os(50);
- #endif
-#endif
- }
- else if (Rtl819XRadioB_Array_Table[i] == 0xfd)
- rtw_mdelay_os(5);
- else if (Rtl819XRadioB_Array_Table[i] == 0xfc)
- rtw_mdelay_os(1);
- else if (Rtl819XRadioB_Array_Table[i] == 0xfb)
- rtw_udelay_os(50);
- else if (Rtl819XRadioB_Array_Table[i] == 0xfa)
- rtw_udelay_os(5);
- else if (Rtl819XRadioB_Array_Table[i] == 0xf9)
- rtw_udelay_os(1);
- else
- {
- PHY_SetRFReg(Adapter, eRFPath, Rtl819XRadioB_Array_Table[i], bRFRegOffsetMask, Rtl819XRadioB_Array_Table[i+1]);
- // Add 1us delay between BB/RF register setting.
- rtw_udelay_os(1);
- }
- }
- #endif
- break;
- case RF_PATH_C:
- break;
- case RF_PATH_D:
- break;
- }
-
-exit:
- return rtStatus;
-
-}
-#endif
-
-/*-----------------------------------------------------------------------------
- * Function: PHY_CheckBBAndRFOK()
- *
- * Overview: This function is write register and then readback to make sure whether
- * BB[PHY0, PHY1], RF[Patha, path b, path c, path d] is Ok
- *
- * Input: PADAPTER Adapter
- * HW90_BLOCK_E CheckBlock
- * RF_RADIO_PATH_E eRFPath // it is used only when CheckBlock is HW90_BLOCK_RF
- *
- * Output: NONE
- *
- * Return: RT_STATUS_SUCCESS: PHY is OK
- *
- * Note: This function may be removed in the ASIC
- *---------------------------------------------------------------------------*/
-int
-PHY_CheckBBAndRFOK(
- IN PADAPTER Adapter,
- IN HW90_BLOCK_E CheckBlock,
- IN RF_RADIO_PATH_E eRFPath
- )
-{
- int rtStatus = _SUCCESS;
-
- u32 i, CheckTimes = 4,ulRegRead = 0;
-
- u32 WriteAddr[4];
- u32 WriteData[] = {0xfffff027, 0xaa55a02f, 0x00000027, 0x55aa502f};
-
- // Initialize register address offset to be checked
- WriteAddr[HW90_BLOCK_MAC] = 0x100;
- WriteAddr[HW90_BLOCK_PHY0] = 0x900;
- WriteAddr[HW90_BLOCK_PHY1] = 0x800;
- WriteAddr[HW90_BLOCK_RF] = 0x3;
-
- for(i=0 ; i < CheckTimes ; i++)
- {
-
- //
- // Write Data to register and readback
- //
- switch(CheckBlock)
- {
- case HW90_BLOCK_MAC:
- //RT_ASSERT(FALSE, ("PHY_CheckBBRFOK(): Never Write 0x100 here!"));
- //RT_TRACE(COMP_INIT, DBG_LOUD, ("PHY_CheckBBRFOK(): Never Write 0x100 here!\n"));
- break;
-
- case HW90_BLOCK_PHY0:
- case HW90_BLOCK_PHY1:
- rtw_write32(Adapter, WriteAddr[CheckBlock], WriteData[i]);
- ulRegRead = rtw_read32(Adapter, WriteAddr[CheckBlock]);
- break;
-
- case HW90_BLOCK_RF:
- // When initialization, we want the delay function(delay_ms(), delay_us()
- // ==> actually we call PlatformStallExecution()) to do NdisStallExecution()
- // [busy wait] instead of NdisMSleep(). So we acquire RT_INITIAL_SPINLOCK
- // to run at Dispatch level to achive it.
- //cosa PlatformAcquireSpinLock(Adapter, RT_INITIAL_SPINLOCK);
- WriteData[i] &= 0xfff;
- PHY_SetRFReg(Adapter, eRFPath, WriteAddr[HW90_BLOCK_RF], bRFRegOffsetMask, WriteData[i]);
- // TODO: we should not delay for such a long time. Ask SD3
- rtw_mdelay_os(10);
- ulRegRead = PHY_QueryRFReg(Adapter, eRFPath, WriteAddr[HW90_BLOCK_RF], bMaskDWord);
- rtw_mdelay_os(10);
- //cosa PlatformReleaseSpinLock(Adapter, RT_INITIAL_SPINLOCK);
- break;
-
- default:
- rtStatus = _FAIL;
- break;
- }
-
-
- //
- // Check whether readback data is correct
- //
- if(ulRegRead != WriteData[i])
- {
- //RT_TRACE(COMP_FPGA, DBG_LOUD, ("ulRegRead: %lx, WriteData: %lx \n", ulRegRead, WriteData[i]));
- rtStatus = _FAIL;
- break;
- }
- }
-
- return rtStatus;
-}
-
-
-VOID
-rtl8192c_PHY_GetHWRegOriginalValue(
- IN PADAPTER Adapter
- )
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
- // read rx initial gain
- pHalData->DefaultInitialGain[0] = (u8)PHY_QueryBBReg(Adapter, rOFDM0_XAAGCCore1, bMaskByte0);
- pHalData->DefaultInitialGain[1] = (u8)PHY_QueryBBReg(Adapter, rOFDM0_XBAGCCore1, bMaskByte0);
- pHalData->DefaultInitialGain[2] = (u8)PHY_QueryBBReg(Adapter, rOFDM0_XCAGCCore1, bMaskByte0);
- pHalData->DefaultInitialGain[3] = (u8)PHY_QueryBBReg(Adapter, rOFDM0_XDAGCCore1, bMaskByte0);
- //RT_TRACE(COMP_INIT, DBG_LOUD,
- //("Default initial gain (c50=0x%x, c58=0x%x, c60=0x%x, c68=0x%x) \n",
- //pHalData->DefaultInitialGain[0], pHalData->DefaultInitialGain[1],
- //pHalData->DefaultInitialGain[2], pHalData->DefaultInitialGain[3]));
-
- // read framesync
- pHalData->framesync = (u8)PHY_QueryBBReg(Adapter, rOFDM0_RxDetector3, bMaskByte0);
- pHalData->framesyncC34 = PHY_QueryBBReg(Adapter, rOFDM0_RxDetector2, bMaskDWord);
- //RT_TRACE(COMP_INIT, DBG_LOUD, ("Default framesync (0x%x) = 0x%x \n",
- // rOFDM0_RxDetector3, pHalData->framesync));
-}
-
-
-//
-// Description:
-// Map dBm into Tx power index according to
-// current HW model, for example, RF and PA, and
-// current wireless mode.
-// By Bruce, 2008-01-29.
-//
-static u8
-phy_DbmToTxPwrIdx(
- IN PADAPTER Adapter,
- IN WIRELESS_MODE WirelessMode,
- IN int PowerInDbm
- )
-{
- u8 TxPwrIdx = 0;
- int Offset = 0;
-
-
- //
- // Tested by MP, we found that CCK Index 0 equals to 8dbm, OFDM legacy equals to
- // 3dbm, and OFDM HT equals to 0dbm repectively.
- // Note:
- // The mapping may be different by different NICs. Do not use this formula for what needs accurate result.
- // By Bruce, 2008-01-29.
- //
- switch(WirelessMode)
- {
- case WIRELESS_MODE_B:
- Offset = -7;
- break;
-
- case WIRELESS_MODE_G:
- case WIRELESS_MODE_N_24G:
- Offset = -8;
- break;
- default:
- Offset = -8;
- break;
- }
-
- if((PowerInDbm - Offset) > 0)
- {
- TxPwrIdx = (u8)((PowerInDbm - Offset) * 2);
- }
- else
- {
- TxPwrIdx = 0;
- }
-
- // Tx Power Index is too large.
- if(TxPwrIdx > MAX_TXPWR_IDX_NMODE_92S)
- TxPwrIdx = MAX_TXPWR_IDX_NMODE_92S;
-
- return TxPwrIdx;
-}
-
-//
-// Description:
-// Map Tx power index into dBm according to
-// current HW model, for example, RF and PA, and
-// current wireless mode.
-// By Bruce, 2008-01-29.
-//
-int
-phy_TxPwrIdxToDbm(
- IN PADAPTER Adapter,
- IN WIRELESS_MODE WirelessMode,
- IN u8 TxPwrIdx
- )
-{
- int Offset = 0;
- int PwrOutDbm = 0;
-
- //
- // Tested by MP, we found that CCK Index 0 equals to -7dbm, OFDM legacy equals to -8dbm.
- // Note:
- // The mapping may be different by different NICs. Do not use this formula for what needs accurate result.
- // By Bruce, 2008-01-29.
- //
- switch(WirelessMode)
- {
- case WIRELESS_MODE_B:
- Offset = -7;
- break;
-
- case WIRELESS_MODE_G:
- case WIRELESS_MODE_N_24G:
- Offset = -8;
- default:
- Offset = -8;
- break;
- }
-
- PwrOutDbm = TxPwrIdx / 2 + Offset; // Discard the decimal part.
-
- return PwrOutDbm;
-}
-
-
-/*-----------------------------------------------------------------------------
- * Function: GetTxPowerLevel8190()
- *
- * Overview: This function is export to "common" moudule
- *
- * Input: PADAPTER Adapter
- * psByte Power Level
- *
- * Output: NONE
- *
- * Return: NONE
- *
- *---------------------------------------------------------------------------*/
-VOID
-PHY_GetTxPowerLevel8192C(
- IN PADAPTER Adapter,
- OUT u32* powerlevel
- )
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 TxPwrLevel = 0;
- int TxPwrDbm;
-
- //
- // Because the Tx power indexes are different, we report the maximum of them to
- // meet the CCX TPC request. By Bruce, 2008-01-31.
- //
-
- // CCK
- TxPwrLevel = pHalData->CurrentCckTxPwrIdx;
- TxPwrDbm = phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_B, TxPwrLevel);
-
- // Legacy OFDM
- TxPwrLevel = pHalData->CurrentOfdm24GTxPwrIdx + pHalData->LegacyHTTxPowerDiff;
-
- // Compare with Legacy OFDM Tx power.
- if(phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_G, TxPwrLevel) > TxPwrDbm)
- TxPwrDbm = phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_G, TxPwrLevel);
-
- // HT OFDM
- TxPwrLevel = pHalData->CurrentOfdm24GTxPwrIdx;
-
- // Compare with HT OFDM Tx power.
- if(phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_N_24G, TxPwrLevel) > TxPwrDbm)
- TxPwrDbm = phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_N_24G, TxPwrLevel);
-
- *powerlevel = TxPwrDbm;
-}
-
-
-static void getTxPowerIndex(
- IN PADAPTER Adapter,
- IN u8 channel,
- IN OUT u8* cckPowerLevel,
- IN OUT u8* ofdmPowerLevel
- )
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 index = (channel -1);
- // 1. CCK
- cckPowerLevel[RF_PATH_A] = pHalData->TxPwrLevelCck[RF_PATH_A][index]; //RF-A
- cckPowerLevel[RF_PATH_B] = pHalData->TxPwrLevelCck[RF_PATH_B][index]; //RF-B
-
- // 2. OFDM for 1S or 2S
- if (GET_RF_TYPE(Adapter) == RF_1T2R || GET_RF_TYPE(Adapter) == RF_1T1R)
- {
- // Read HT 40 OFDM TX power
- ofdmPowerLevel[RF_PATH_A] = pHalData->TxPwrLevelHT40_1S[RF_PATH_A][index];
- ofdmPowerLevel[RF_PATH_B] = pHalData->TxPwrLevelHT40_1S[RF_PATH_B][index];
- }
- else if (GET_RF_TYPE(Adapter) == RF_2T2R)
- {
- // Read HT 40 OFDM TX power
- ofdmPowerLevel[RF_PATH_A] = pHalData->TxPwrLevelHT40_2S[RF_PATH_A][index];
- ofdmPowerLevel[RF_PATH_B] = pHalData->TxPwrLevelHT40_2S[RF_PATH_B][index];
- }
- //RTPRINT(FPHY, PHY_TXPWR, ("Channel-%d, set tx power index !!\n", channel));
-}
-
-static void ccxPowerIndexCheck(
- IN PADAPTER Adapter,
- IN u8 channel,
- IN OUT u8* cckPowerLevel,
- IN OUT u8* ofdmPowerLevel
- )
-{
-#if 0
- PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo);
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- PRT_CCX_INFO pCcxInfo = GET_CCX_INFO(pMgntInfo);
-
- //
- // CCX 2 S31, AP control of client transmit power:
- // 1. We shall not exceed Cell Power Limit as possible as we can.
- // 2. Tolerance is +/- 5dB.
- // 3. 802.11h Power Contraint takes higher precedence over CCX Cell Power Limit.
- //
- // TODO:
- // 1. 802.11h power contraint
- //
- // 071011, by rcnjko.
- //
- if( pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE &&
- pMgntInfo->mAssoc &&
- pCcxInfo->bUpdateCcxPwr &&
- pCcxInfo->bWithCcxCellPwr &&
- channel == pMgntInfo->dot11CurrentChannelNumber)
- {
- u1Byte CckCellPwrIdx = phy_DbmToTxPwrIdx(Adapter, WIRELESS_MODE_B, pCcxInfo->CcxCellPwr);
- u1Byte LegacyOfdmCellPwrIdx = phy_DbmToTxPwrIdx(Adapter, WIRELESS_MODE_G, pCcxInfo->CcxCellPwr);
- u1Byte OfdmCellPwrIdx = phy_DbmToTxPwrIdx(Adapter, WIRELESS_MODE_N_24G, pCcxInfo->CcxCellPwr);
-
- RT_TRACE(COMP_TXAGC, DBG_LOUD,
- ("CCX Cell Limit: %d dbm => CCK Tx power index : %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",
- pCcxInfo->CcxCellPwr, CckCellPwrIdx, LegacyOfdmCellPwrIdx, OfdmCellPwrIdx));
- RT_TRACE(COMP_TXAGC, DBG_LOUD,
- ("EEPROM channel(%d) => CCK Tx power index: %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",
- channel, cckPowerLevel[0], ofdmPowerLevel[0] + pHalData->LegacyHTTxPowerDiff, ofdmPowerLevel[0]));
-
- // CCK
- if(cckPowerLevel[0] > CckCellPwrIdx)
- cckPowerLevel[0] = CckCellPwrIdx;
- // Legacy OFDM, HT OFDM
- if(ofdmPowerLevel[0] + pHalData->LegacyHTTxPowerDiff > LegacyOfdmCellPwrIdx)
- {
- if((OfdmCellPwrIdx - pHalData->LegacyHTTxPowerDiff) > 0)
- {
- ofdmPowerLevel[0] = OfdmCellPwrIdx - pHalData->LegacyHTTxPowerDiff;
- }
- else
- {
- ofdmPowerLevel[0] = 0;
- }
- }
-
- RT_TRACE(COMP_TXAGC, DBG_LOUD,
- ("Altered CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n",
- cckPowerLevel[0], ofdmPowerLevel[0] + pHalData->LegacyHTTxPowerDiff, ofdmPowerLevel[0]));
- }
-
- pHalData->CurrentCckTxPwrIdx = cckPowerLevel[0];
- pHalData->CurrentOfdm24GTxPwrIdx = ofdmPowerLevel[0];
-
- RT_TRACE(COMP_TXAGC, DBG_LOUD,
- ("PHY_SetTxPowerLevel8192S(): CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n",
- cckPowerLevel[0], ofdmPowerLevel[0] + pHalData->LegacyHTTxPowerDiff, ofdmPowerLevel[0]));
-#endif
-}
-/*-----------------------------------------------------------------------------
- * Function: SetTxPowerLevel8190()
- *
- * Overview: This function is export to "HalCommon" moudule
- * We must consider RF path later!!!!!!!
- *
- * Input: PADAPTER Adapter
- * u1Byte channel
- *
- * Output: NONE
- *
- * Return: NONE
- * 2008/11/04 MHC We remove EEPROM_93C56.
- * We need to move CCX relative code to independet file.
- * 2009/01/21 MHC Support new EEPROM format from SD3 requirement.
- *
- *---------------------------------------------------------------------------*/
-VOID
-PHY_SetTxPowerLevel8192C(
- IN PADAPTER Adapter,
- IN u8 channel
- )
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 cckPowerLevel[2], ofdmPowerLevel[2]; // [0]:RF-A, [1]:RF-B
-/*
-#if(MP_DRIVER == 1)
- if (Adapter->registrypriv.mp_mode == 1)
- return;
-#endif
-*/
- if(pHalData->bTXPowerDataReadFromEEPORM == _FALSE)
- return;
-
- getTxPowerIndex(Adapter, channel, &cckPowerLevel[0], &ofdmPowerLevel[0]);
- //RTPRINT(FPHY, PHY_TXPWR, ("Channel-%d, cckPowerLevel (A / B) = 0x%x / 0x%x, ofdmPowerLevel (A / B) = 0x%x / 0x%x\n",
- // channel, cckPowerLevel[0], cckPowerLevel[1], ofdmPowerLevel[0], ofdmPowerLevel[1]));
-
- ccxPowerIndexCheck(Adapter, channel, &cckPowerLevel[0], &ofdmPowerLevel[0]);
-
- rtl8192c_PHY_RF6052SetCckTxPower(Adapter, &cckPowerLevel[0]);
- rtl8192c_PHY_RF6052SetOFDMTxPower(Adapter, &ofdmPowerLevel[0], channel);
-
-#if 0
- switch(pHalData->rf_chip)
- {
- case RF_8225:
- PHY_SetRF8225CckTxPower(Adapter, cckPowerLevel[0]);
- PHY_SetRF8225OfdmTxPower(Adapter, ofdmPowerLevel[0]);
- break;
-
- case RF_8256:
- PHY_SetRF8256CCKTxPower(Adapter, cckPowerLevel[0]);
- PHY_SetRF8256OFDMTxPower(Adapter, ofdmPowerLevel[0]);
- break;
-
- case RF_6052:
- PHY_RF6052SetCckTxPower(Adapter, &cckPowerLevel[0]);
- PHY_RF6052SetOFDMTxPower(Adapter, &ofdmPowerLevel[0], channel);
- break;
-
- case RF_8258:
- break;
- }
-#endif
-
-}
-
-
-//
-// Description:
-// Update transmit power level of all channel supported.
-//
-// TODO:
-// A mode.
-// By Bruce, 2008-02-04.
-//
-BOOLEAN
-PHY_UpdateTxPowerDbm8192C(
- IN PADAPTER Adapter,
- IN int powerInDbm
- )
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 idx;
- u8 rf_path;
-
- // TODO: A mode Tx power.
- u8 CckTxPwrIdx = phy_DbmToTxPwrIdx(Adapter, WIRELESS_MODE_B, powerInDbm);
- u8 OfdmTxPwrIdx = phy_DbmToTxPwrIdx(Adapter, WIRELESS_MODE_N_24G, powerInDbm);
-
- if(OfdmTxPwrIdx - pHalData->LegacyHTTxPowerDiff > 0)
- OfdmTxPwrIdx -= pHalData->LegacyHTTxPowerDiff;
- else
- OfdmTxPwrIdx = 0;
-
- //RT_TRACE(COMP_TXAGC, DBG_LOUD, ("PHY_UpdateTxPowerDbm8192S(): %ld dBm , CckTxPwrIdx = %d, OfdmTxPwrIdx = %d\n", powerInDbm, CckTxPwrIdx, OfdmTxPwrIdx));
-
- for(idx = 0; idx < 14; idx++)
- {
- for (rf_path = 0; rf_path < 2; rf_path++)
- {
- pHalData->TxPwrLevelCck[rf_path][idx] = CckTxPwrIdx;
- pHalData->TxPwrLevelHT40_1S[rf_path][idx] =
- pHalData->TxPwrLevelHT40_2S[rf_path][idx] = OfdmTxPwrIdx;
- }
- }
-
- //Adapter->HalFunc.SetTxPowerLevelHandler(Adapter, pHalData->CurrentChannel);//gtest:todo
-
- return _TRUE;
-}
-
-
-/*
- Description:
- When beacon interval is changed, the values of the
- hw registers should be modified.
- By tynli, 2008.10.24.
-
-*/
-
-
-void
-rtl8192c_PHY_SetBeaconHwReg(
- IN PADAPTER Adapter,
- IN u16 BeaconInterval
- )
-{
-
-}
-
-
-VOID
-PHY_ScanOperationBackup8192C(
- IN PADAPTER Adapter,
- IN u8 Operation
- )
-{
-#if 0
- IO_TYPE IoType;
-
- if(!Adapter->bDriverStopped)
- {
- switch(Operation)
- {
- case SCAN_OPT_BACKUP:
- IoType = IO_CMD_PAUSE_DM_BY_SCAN;
- rtw_hal_set_hwreg(Adapter,HW_VAR_IO_CMD, (pu1Byte)&IoType);
-
- break;
-
- case SCAN_OPT_RESTORE:
- IoType = IO_CMD_RESUME_DM_BY_SCAN;
- rtw_hal_set_hwreg(Adapter,HW_VAR_IO_CMD, (pu1Byte)&IoType);
- break;
-
- default:
- RT_TRACE(COMP_SCAN, DBG_LOUD, ("Unknown Scan Backup Operation. \n"));
- break;
- }
- }
-#endif
-}
-
-/*-----------------------------------------------------------------------------
- * Function: PHY_SetBWModeCallback8192C()
- *
- * Overview: Timer callback function for SetSetBWMode
- *
- * Input: PRT_TIMER pTimer
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Note: (1) We do not take j mode into consideration now
- * (2) Will two workitem of "switch channel" and "switch channel bandwidth" run
- * concurrently?
- *---------------------------------------------------------------------------*/
-static VOID
-_PHY_SetBWMode92C(
- IN PADAPTER Adapter
-)
-{
-// PADAPTER Adapter = (PADAPTER)pTimer->Adapter;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 regBwOpMode;
- u8 regRRSR_RSC;
-
- //return;
-
- // Added it for 20/40 mhz switch time evaluation by guangan 070531
- //u4Byte NowL, NowH;
- //u8Byte BeginTime, EndTime;
-
- /*RT_TRACE(COMP_SCAN, DBG_LOUD, ("==>PHY_SetBWModeCallback8192C() Switch to %s bandwidth\n", \
- pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_20?"20MHz":"40MHz"))*/
-
- if(pHalData->rf_chip == RF_PSEUDO_11N)
- {
- //pHalData->SetBWModeInProgress= _FALSE;
- return;
- }
-
- // There is no 40MHz mode in RF_8225.
- if(pHalData->rf_chip==RF_8225)
- return;
-
- if(Adapter->bDriverStopped)
- return;
-
- // Added it for 20/40 mhz switch time evaluation by guangan 070531
- //NowL = PlatformEFIORead4Byte(Adapter, TSFR);
- //NowH = PlatformEFIORead4Byte(Adapter, TSFR+4);
- //BeginTime = ((u8Byte)NowH << 32) + NowL;
-
- //3//
- //3//<1>Set MAC register
- //3//
- //Adapter->HalFunc.SetBWModeHandler();
-
- regBwOpMode = rtw_read8(Adapter, REG_BWOPMODE);
- regRRSR_RSC = rtw_read8(Adapter, REG_RRSR+2);
- //regBwOpMode = rtw_hal_get_hwreg(Adapter,HW_VAR_BWMODE,(pu1Byte)&regBwOpMode);
-
- switch(pHalData->CurrentChannelBW)
- {
- case HT_CHANNEL_WIDTH_20:
- regBwOpMode |= BW_OPMODE_20MHZ;
- // 2007/02/07 Mark by Emily becasue we have not verify whether this register works
- rtw_write8(Adapter, REG_BWOPMODE, regBwOpMode);
- break;
-
- case HT_CHANNEL_WIDTH_40:
- regBwOpMode &= ~BW_OPMODE_20MHZ;
- // 2007/02/07 Mark by Emily becasue we have not verify whether this register works
- rtw_write8(Adapter, REG_BWOPMODE, regBwOpMode);
-
- regRRSR_RSC = (regRRSR_RSC&0x90) |(pHalData->nCur40MhzPrimeSC<<5);
- rtw_write8(Adapter, REG_RRSR+2, regRRSR_RSC);
- break;
-
- default:
- /*RT_TRACE(COMP_DBG, DBG_LOUD, ("PHY_SetBWModeCallback8192C():
- unknown Bandwidth: %#X\n",pHalData->CurrentChannelBW));*/
- break;
- }
-
- //3//
- //3//<2>Set PHY related register
- //3//
- switch(pHalData->CurrentChannelBW)
- {
- /* 20 MHz channel*/
- case HT_CHANNEL_WIDTH_20:
- PHY_SetBBReg(Adapter, rFPGA0_RFMOD, bRFMOD, 0x0);
- PHY_SetBBReg(Adapter, rFPGA1_RFMOD, bRFMOD, 0x0);
- PHY_SetBBReg(Adapter, rFPGA0_AnalogParameter2, BIT10, 1);
-
- break;
-
-
- /* 40 MHz channel*/
- case HT_CHANNEL_WIDTH_40:
- PHY_SetBBReg(Adapter, rFPGA0_RFMOD, bRFMOD, 0x1);
- PHY_SetBBReg(Adapter, rFPGA1_RFMOD, bRFMOD, 0x1);
-
- // Set Control channel to upper or lower. These settings are required only for 40MHz
- PHY_SetBBReg(Adapter, rCCK0_System, bCCKSideBand, (pHalData->nCur40MhzPrimeSC>>1));
- PHY_SetBBReg(Adapter, rOFDM1_LSTF, 0xC00, pHalData->nCur40MhzPrimeSC);
- PHY_SetBBReg(Adapter, rFPGA0_AnalogParameter2, BIT10, 0);
-
- PHY_SetBBReg(Adapter, 0x818, (BIT26|BIT27), (pHalData->nCur40MhzPrimeSC==HAL_PRIME_CHNL_OFFSET_LOWER)?2:1);
-
- break;
-
-
-
- default:
- /*RT_TRACE(COMP_DBG, DBG_LOUD, ("PHY_SetBWModeCallback8192C(): unknown Bandwidth: %#X\n"\
- ,pHalData->CurrentChannelBW));*/
- break;
-
- }
- //Skip over setting of J-mode in BB register here. Default value is "None J mode". Emily 20070315
-
- // Added it for 20/40 mhz switch time evaluation by guangan 070531
- //NowL = PlatformEFIORead4Byte(Adapter, TSFR);
- //NowH = PlatformEFIORead4Byte(Adapter, TSFR+4);
- //EndTime = ((u8Byte)NowH << 32) + NowL;
- //RT_TRACE(COMP_SCAN, DBG_LOUD, ("SetBWModeCallback8190Pci: time of SetBWMode = %I64d us!\n", (EndTime - BeginTime)));
-
- //3<3>Set RF related register
- switch(pHalData->rf_chip)
- {
- case RF_8225:
- //PHY_SetRF8225Bandwidth(Adapter, pHalData->CurrentChannelBW);
- break;
-
- case RF_8256:
- // Please implement this function in Hal8190PciPhy8256.c
- //PHY_SetRF8256Bandwidth(Adapter, pHalData->CurrentChannelBW);
- break;
-
- case RF_8258:
- // Please implement this function in Hal8190PciPhy8258.c
- // PHY_SetRF8258Bandwidth();
- break;
-
- case RF_PSEUDO_11N:
- // Do Nothing
- break;
-
- case RF_6052:
- rtl8192c_PHY_RF6052SetBandwidth(Adapter, pHalData->CurrentChannelBW);
- break;
-
- default:
- //RT_ASSERT(FALSE, ("Unknown RFChipID: %d\n", pHalData->RFChipID));
- break;
- }
-
- //pHalData->SetBWModeInProgress= FALSE;
-
- //RT_TRACE(COMP_SCAN, DBG_LOUD, ("<==PHY_SetBWModeCallback8192C() \n" ));
-}
-
-
- /*-----------------------------------------------------------------------------
- * Function: SetBWMode8190Pci()
- *
- * Overview: This function is export to "HalCommon" moudule
- *
- * Input: PADAPTER Adapter
- * HT_CHANNEL_WIDTH Bandwidth //20M or 40M
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Note: We do not take j mode into consideration now
- *---------------------------------------------------------------------------*/
-VOID
-PHY_SetBWMode8192C(
- IN PADAPTER Adapter,
- IN HT_CHANNEL_WIDTH Bandwidth, // 20M or 40M
- IN unsigned char Offset // Upper, Lower, or Don't care
-)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- HT_CHANNEL_WIDTH tmpBW= pHalData->CurrentChannelBW;
- // Modified it for 20/40 mhz switch by guangan 070531
- //PMGNT_INFO pMgntInfo=&Adapter->MgntInfo;
-
- //return;
-
- //if(pHalData->SwChnlInProgress)
-// if(pMgntInfo->bScanInProgress)
-// {
-// RT_TRACE(COMP_SCAN, DBG_LOUD, ("PHY_SetBWMode8192C() %s Exit because bScanInProgress!\n",
-// Bandwidth == HT_CHANNEL_WIDTH_20?"20MHz":"40MHz"));
-// return;
-// }
-
-// if(pHalData->SetBWModeInProgress)
-// {
-// // Modified it for 20/40 mhz switch by guangan 070531
-// RT_TRACE(COMP_SCAN, DBG_LOUD, ("PHY_SetBWMode8192C() %s cancel last timer because SetBWModeInProgress!\n",
-// Bandwidth == HT_CHANNEL_WIDTH_20?"20MHz":"40MHz"));
-// PlatformCancelTimer(Adapter, &pHalData->SetBWModeTimer);
-// //return;
-// }
-
- //if(pHalData->SetBWModeInProgress)
- // return;
-
- //pHalData->SetBWModeInProgress= TRUE;
-
- pHalData->CurrentChannelBW = Bandwidth;
-
-#if 0
- if(Offset==HT_EXTCHNL_OFFSET_LOWER)
- pHalData->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_UPPER;
- else if(Offset==HT_EXTCHNL_OFFSET_UPPER)
- pHalData->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_LOWER;
- else
- pHalData->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-#else
- pHalData->nCur40MhzPrimeSC = Offset;
-#endif
-
- if((!Adapter->bDriverStopped) && (!Adapter->bSurpriseRemoved))
- {
-
- #if 0
- //PlatformSetTimer(Adapter, &(pHalData->SetBWModeTimer), 0);
- #else
- _PHY_SetBWMode92C(Adapter);
- #endif
-
- }
- else
- {
- //RT_TRACE(COMP_SCAN, DBG_LOUD, ("PHY_SetBWMode8192C() SetBWModeInProgress FALSE driver sleep or unload\n"));
- //pHalData->SetBWModeInProgress= FALSE;
- pHalData->CurrentChannelBW = tmpBW;
- }
-
-}
-
-
-static void _PHY_SwChnl8192C(PADAPTER Adapter, u8 channel)
-{
- u8 eRFPath;
- u32 param1, param2;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
- if ( Adapter->bNotifyChannelChange )
- {
- DBG_871X( "[%s] ch = %d\n", __FUNCTION__, channel );
- }
-
- //s1. pre common command - CmdID_SetTxPowerLevel
- PHY_SetTxPowerLevel8192C(Adapter, channel);
-
- //s2. RF dependent command - CmdID_RF_WriteReg, param1=RF_CHNLBW, param2=channel
- param1 = RF_CHNLBW;
- param2 = channel;
- for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
- {
- pHalData->RfRegChnlVal[eRFPath] = ((pHalData->RfRegChnlVal[eRFPath] & 0xfffffc00) | param2);
- PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, param1, bRFRegOffsetMask, pHalData->RfRegChnlVal[eRFPath]);
- }
-
-
- //s3. post common command - CmdID_End, None
-
-}
-
-VOID
-PHY_SwChnl8192C( // Call after initialization
- IN PADAPTER Adapter,
- IN u8 channel
- )
-{
- //PADAPTER Adapter = ADJUST_TO_ADAPTIVE_ADAPTER(pAdapter, _TRUE);
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u8 tmpchannel = pHalData->CurrentChannel;
- BOOLEAN bResult = _TRUE;
-
- if(pHalData->rf_chip == RF_PSEUDO_11N)
- {
- //pHalData->SwChnlInProgress=FALSE;
- return; //return immediately if it is peudo-phy
- }
-
- //if(pHalData->SwChnlInProgress)
- // return;
-
- //if(pHalData->SetBWModeInProgress)
- // return;
-
- //--------------------------------------------
- switch(pHalData->CurrentWirelessMode)
- {
- case WIRELESS_MODE_A:
- case WIRELESS_MODE_N_5G:
- //RT_ASSERT((channel>14), ("WIRELESS_MODE_A but channel<=14"));
- break;
-
- case WIRELESS_MODE_B:
- //RT_ASSERT((channel<=14), ("WIRELESS_MODE_B but channel>14"));
- break;
-
- case WIRELESS_MODE_G:
- case WIRELESS_MODE_N_24G:
- //RT_ASSERT((channel<=14), ("WIRELESS_MODE_G but channel>14"));
- break;
-
- default:
- //RT_ASSERT(FALSE, ("Invalid WirelessMode(%#x)!!\n", pHalData->CurrentWirelessMode));
- break;
- }
- //--------------------------------------------
-
- //pHalData->SwChnlInProgress = TRUE;
- if(channel == 0)
- channel = 1;
-
- pHalData->CurrentChannel=channel;
-
- //pHalData->SwChnlStage=0;
- //pHalData->SwChnlStep=0;
-
- if((!Adapter->bDriverStopped) && (!Adapter->bSurpriseRemoved))
- {
-
- #if 0
- //PlatformSetTimer(Adapter, &(pHalData->SwChnlTimer), 0);
- #else
- _PHY_SwChnl8192C(Adapter, channel);
- #endif
-
- if(bResult)
- {
- //RT_TRACE(COMP_SCAN, DBG_LOUD, ("PHY_SwChnl8192C SwChnlInProgress TRUE schdule workitem done\n"));
- }
- else
- {
- //RT_TRACE(COMP_SCAN, DBG_LOUD, ("PHY_SwChnl8192C SwChnlInProgress FALSE schdule workitem error\n"));
- //if(IS_HARDWARE_TYPE_8192SU(Adapter))
- //{
- // pHalData->SwChnlInProgress = FALSE;
- pHalData->CurrentChannel = tmpchannel;
- //}
- }
-
- }
- else
- {
- //RT_TRACE(COMP_SCAN, DBG_LOUD, ("PHY_SwChnl8192C SwChnlInProgress FALSE driver sleep or unload\n"));
- //if(IS_HARDWARE_TYPE_8192SU(Adapter))
- //{
- // pHalData->SwChnlInProgress = FALSE;
- pHalData->CurrentChannel = tmpchannel;
- //}
- }
-}
-
-
-static BOOLEAN
-phy_SwChnlStepByStep(
- IN PADAPTER Adapter,
- IN u8 channel,
- IN u8 *stage,
- IN u8 *step,
- OUT u32 *delay
- )
-{
-#if 0
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- PCHANNEL_ACCESS_SETTING pChnlAccessSetting;
- SwChnlCmd PreCommonCmd[MAX_PRECMD_CNT];
- u4Byte PreCommonCmdCnt;
- SwChnlCmd PostCommonCmd[MAX_POSTCMD_CNT];
- u4Byte PostCommonCmdCnt;
- SwChnlCmd RfDependCmd[MAX_RFDEPENDCMD_CNT];
- u4Byte RfDependCmdCnt;
- SwChnlCmd *CurrentCmd;
- u1Byte eRFPath;
- u4Byte RfTXPowerCtrl;
- BOOLEAN bAdjRfTXPowerCtrl = _FALSE;
-
-
- RT_ASSERT((Adapter != NULL), ("Adapter should not be NULL\n"));
-#if(MP_DRIVER != 1)
- RT_ASSERT(IsLegalChannel(Adapter, channel), ("illegal channel: %d\n", channel));
-#endif
- RT_ASSERT((pHalData != NULL), ("pHalData should not be NULL\n"));
-
- pChnlAccessSetting = &Adapter->MgntInfo.Info8185.ChannelAccessSetting;
- RT_ASSERT((pChnlAccessSetting != NULL), ("pChnlAccessSetting should not be NULL\n"));
-
- //for(eRFPath = RF_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
- //for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
- //{
- // <1> Fill up pre common command.
- PreCommonCmdCnt = 0;
- phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, MAX_PRECMD_CNT,
- CmdID_SetTxPowerLevel, 0, 0, 0);
- phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, MAX_PRECMD_CNT,
- CmdID_End, 0, 0, 0);
-
- // <2> Fill up post common command.
- PostCommonCmdCnt = 0;
-
- phy_SetSwChnlCmdArray(PostCommonCmd, PostCommonCmdCnt++, MAX_POSTCMD_CNT,
- CmdID_End, 0, 0, 0);
-
- // <3> Fill up RF dependent command.
- RfDependCmdCnt = 0;
- switch( pHalData->RFChipID )
- {
- case RF_8225:
- RT_ASSERT((channel >= 1 && channel <= 14), ("illegal channel for Zebra: %d\n", channel));
- // 2008/09/04 MH Change channel.
- if(channel==14) channel++;
- phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
- CmdID_RF_WriteReg, rZebra1_Channel, (0x10+channel-1), 10);
- phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
- CmdID_End, 0, 0, 0);
- break;
-
- case RF_8256:
- // TEST!! This is not the table for 8256!!
- RT_ASSERT((channel >= 1 && channel <= 14), ("illegal channel for Zebra: %d\n", channel));
- phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
- CmdID_RF_WriteReg, rRfChannel, channel, 10);
- phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
- CmdID_End, 0, 0, 0);
- break;
-
- case RF_6052:
- RT_ASSERT((channel >= 1 && channel <= 14), ("illegal channel for Zebra: %d\n", channel));
- phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
- CmdID_RF_WriteReg, RF_CHNLBW, channel, 10);
- phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
- CmdID_End, 0, 0, 0);
-
- break;
-
- case RF_8258:
- break;
-
- // For FPGA two MAC verification
- case RF_PSEUDO_11N:
- return TRUE;
- default:
- RT_ASSERT(FALSE, ("Unknown RFChipID: %d\n", pHalData->RFChipID));
- return FALSE;
- break;
- }
-
-
- do{
- switch(*stage)
- {
- case 0:
- CurrentCmd=&PreCommonCmd[*step];
- break;
- case 1:
- CurrentCmd=&RfDependCmd[*step];
- break;
- case 2:
- CurrentCmd=&PostCommonCmd[*step];
- break;
- }
-
- if(CurrentCmd->CmdID==CmdID_End)
- {
- if((*stage)==2)
- {
- return TRUE;
- }
- else
- {
- (*stage)++;
- (*step)=0;
- continue;
- }
- }
-
- switch(CurrentCmd->CmdID)
- {
- case CmdID_SetTxPowerLevel:
- PHY_SetTxPowerLevel8192C(Adapter,channel);
- break;
- case CmdID_WritePortUlong:
- PlatformEFIOWrite4Byte(Adapter, CurrentCmd->Para1, CurrentCmd->Para2);
- break;
- case CmdID_WritePortUshort:
- PlatformEFIOWrite2Byte(Adapter, CurrentCmd->Para1, (u2Byte)CurrentCmd->Para2);
- break;
- case CmdID_WritePortUchar:
- PlatformEFIOWrite1Byte(Adapter, CurrentCmd->Para1, (u1Byte)CurrentCmd->Para2);
- break;
- case CmdID_RF_WriteReg: // Only modify channel for the register now !!!!!
- for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
- {
-#if 1
- pHalData->RfRegChnlVal[eRFPath] = ((pHalData->RfRegChnlVal[eRFPath] & 0xfffffc00) | CurrentCmd->Para2);
- PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, pHalData->RfRegChnlVal[eRFPath]);
-#else
- PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, (CurrentCmd->Para2));
-#endif
- }
- break;
- }
-
- break;
- }while(TRUE);
- //cosa }/*for(Number of RF paths)*/
-
- (*delay)=CurrentCmd->msDelay;
- (*step)++;
- return FALSE;
-#endif
- return _TRUE;
-}
-
-
-static BOOLEAN
-phy_SetSwChnlCmdArray(
- SwChnlCmd* CmdTable,
- u32 CmdTableIdx,
- u32 CmdTableSz,
- SwChnlCmdID CmdID,
- u32 Para1,
- u32 Para2,
- u32 msDelay
- )
-{
- SwChnlCmd* pCmd;
-
- if(CmdTable == NULL)
- {
- //RT_ASSERT(FALSE, ("phy_SetSwChnlCmdArray(): CmdTable cannot be NULL.\n"));
- return _FALSE;
- }
- if(CmdTableIdx >= CmdTableSz)
- {
- //RT_ASSERT(FALSE,
- // ("phy_SetSwChnlCmdArray(): Access invalid index, please check size of the table, CmdTableIdx:%ld, CmdTableSz:%ld\n",
- // CmdTableIdx, CmdTableSz));
- return _FALSE;
- }
-
- pCmd = CmdTable + CmdTableIdx;
- pCmd->CmdID = CmdID;
- pCmd->Para1 = Para1;
- pCmd->Para2 = Para2;
- pCmd->msDelay = msDelay;
-
- return _TRUE;
-}
-
-
-static void
-phy_FinishSwChnlNow( // We should not call this function directly
- IN PADAPTER Adapter,
- IN u8 channel
- )
-{
-#if 0
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u32 delay;
-
- while(!phy_SwChnlStepByStep(Adapter,channel,&pHalData->SwChnlStage,&pHalData->SwChnlStep,&delay))
- {
- if(delay>0)
- rtw_mdelay_os(delay);
- }
-#endif
-}
-
-
-
-//
-// Description:
-// Switch channel synchronously. Called by SwChnlByDelayHandler.
-//
-// Implemented by Bruce, 2008-02-14.
-// The following procedure is operted according to SwChanlCallback8190Pci().
-// However, this procedure is performed synchronously which should be running under
-// passive level.
-//
-VOID
-PHY_SwChnlPhy8192C( // Only called during initialize
- IN PADAPTER Adapter,
- IN u8 channel
- )
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
- //RT_TRACE(COMP_SCAN | COMP_RM, DBG_LOUD, ("==>PHY_SwChnlPhy8192S(), switch from channel %d to channel %d.\n", pHalData->CurrentChannel, channel));
-
- // Cannot IO.
- //if(RT_CANNOT_IO(Adapter))
- // return;
-
- // Channel Switching is in progress.
- //if(pHalData->SwChnlInProgress)
- // return;
-
- //return immediately if it is peudo-phy
- if(pHalData->rf_chip == RF_PSEUDO_11N)
- {
- //pHalData->SwChnlInProgress=FALSE;
- return;
- }
-
- //pHalData->SwChnlInProgress = TRUE;
- if( channel == 0)
- channel = 1;
-
- pHalData->CurrentChannel=channel;
-
- //pHalData->SwChnlStage = 0;
- //pHalData->SwChnlStep = 0;
-
- phy_FinishSwChnlNow(Adapter,channel);
-
- //pHalData->SwChnlInProgress = FALSE;
-}
-
-
-//
-// Description:
-// Configure H/W functionality to enable/disable Monitor mode.
-// Note, because we possibly need to configure BB and RF in this function,
-// so caller should in PASSIVE_LEVEL. 080118, by rcnjko.
-//
-VOID
-PHY_SetMonitorMode8192C(
- IN PADAPTER pAdapter,
- IN BOOLEAN bEnableMonitorMode
- )
-{
-#if 0
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
- BOOLEAN bFilterOutNonAssociatedBSSID = FALSE;
-
- //2 Note: we may need to stop antenna diversity.
- if(bEnableMonitorMode)
- {
- bFilterOutNonAssociatedBSSID = FALSE;
- RT_TRACE(COMP_RM, DBG_LOUD, ("PHY_SetMonitorMode8192S(): enable monitor mode\n"));
-
- pHalData->bInMonitorMode = TRUE;
- pAdapter->HalFunc.AllowAllDestAddrHandler(pAdapter, TRUE, TRUE);
- rtw_hal_set_hwreg(pAdapter, HW_VAR_CHECK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);
- }
- else
- {
- bFilterOutNonAssociatedBSSID = TRUE;
- RT_TRACE(COMP_RM, DBG_LOUD, ("PHY_SetMonitorMode8192S(): disable monitor mode\n"));
-
- pAdapter->HalFunc.AllowAllDestAddrHandler(pAdapter, FALSE, TRUE);
- pHalData->bInMonitorMode = FALSE;
- rtw_hal_set_hwreg(pAdapter, HW_VAR_CHECK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);
- }
-#endif
-}
-
-
-/*-----------------------------------------------------------------------------
- * Function: PHYCheckIsLegalRfPath8190Pci()
- *
- * Overview: Check different RF type to execute legal judgement. If RF Path is illegal
- * We will return false.
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 11/15/2007 MHC Create Version 0.
- *
- *---------------------------------------------------------------------------*/
-BOOLEAN
-PHY_CheckIsLegalRfPath8192C(
- IN PADAPTER pAdapter,
- IN u32 eRFPath)
-{
-// HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
- BOOLEAN rtValue = _TRUE;
-
- // NOt check RF Path now.!
-#if 0
- if (pHalData->RF_Type == RF_1T2R && eRFPath != RF_PATH_A)
- {
- rtValue = FALSE;
- }
- if (pHalData->RF_Type == RF_1T2R && eRFPath != RF_PATH_A)
- {
-
- }
-#endif
- return rtValue;
-
-} /* PHY_CheckIsLegalRfPath8192C */
-
-static VOID _PHY_SetRFPathSwitch(
- IN PADAPTER pAdapter,
- IN BOOLEAN bMain,
- IN BOOLEAN is2T
- )
-{
- u8 u1bTmp;
-
- if(!pAdapter->hw_init_completed)
- {
- u1bTmp = rtw_read8(pAdapter, REG_LEDCFG2) | BIT7;
- rtw_write8(pAdapter, REG_LEDCFG2, u1bTmp);
- //PHY_SetBBReg(pAdapter, REG_LEDCFG0, BIT23, 0x01);
- PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT13, 0x01);
- }
-
- if(is2T)
- {
- if(bMain)
- PHY_SetBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT5|BIT6, 0x1); //92C_Path_A
- else
- PHY_SetBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT5|BIT6, 0x2); //BT
- }
- else
- {
-
- if(bMain)
- PHY_SetBBReg(pAdapter, rFPGA0_XA_RFInterfaceOE, 0x300, 0x2); //Main
- else
- PHY_SetBBReg(pAdapter, rFPGA0_XA_RFInterfaceOE, 0x300, 0x1); //Aux
- }
-
-}
-
-//return value TRUE => Main; FALSE => Aux
-
-static BOOLEAN _PHY_QueryRFPathSwitch(
- IN PADAPTER pAdapter,
- IN BOOLEAN is2T
- )
-{
-// if(is2T)
-// return _TRUE;
-
- if(!pAdapter->hw_init_completed)
- {
- PHY_SetBBReg(pAdapter, REG_LEDCFG0, BIT23, 0x01);
- PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT13, 0x01);
- }
-
- if(is2T)
- {
- if(PHY_QueryBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT5|BIT6) == 0x01)
- return _TRUE;
- else
- return _FALSE;
- }
- else
- {
- if(PHY_QueryBBReg(pAdapter, rFPGA0_XA_RFInterfaceOE, 0x300) == 0x02)
- return _TRUE;
- else
- return _FALSE;
- }
-}
-
-
-static VOID
-_PHY_DumpRFReg(IN PADAPTER pAdapter)
-{
- u32 rfRegValue,rfRegOffset;
-
- //RTPRINT(FINIT, INIT_RF, ("PHY_DumpRFReg()====>\n"));
-
- for(rfRegOffset = 0x00;rfRegOffset<=0x30;rfRegOffset++){
- rfRegValue = PHY_QueryRFReg(pAdapter,RF_PATH_A, rfRegOffset, bMaskDWord);
- //RTPRINT(FINIT, INIT_RF, (" 0x%02x = 0x%08x\n",rfRegOffset,rfRegValue));
- }
- //RTPRINT(FINIT, INIT_RF, ("<===== PHY_DumpRFReg()\n"));
-}
-
-
-VOID rtl8192c_PHY_SetRFPathSwitch(
- IN PADAPTER pAdapter,
- IN BOOLEAN bMain
- )
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
-
-#if DISABLE_BB_RF
- return;
-#endif
-
- if(IS_92C_SERIAL( pHalData->VersionID)){
- _PHY_SetRFPathSwitch(pAdapter, bMain, _TRUE);
- }
- else{
- // For 88C 1T1R
- _PHY_SetRFPathSwitch(pAdapter, bMain, _FALSE);
- }
-}
-
-//
-// Move from phycfg.c to gen.c to be code independent later
-//
-//-------------------------Move to other DIR later----------------------------*/
-#ifdef CONFIG_USB_HCI
-
-//
-// Description:
-// To dump all Tx FIFO LLT related link-list table.
-// Added by Roger, 2009.03.10.
-//
-VOID
-DumpBBDbgPort_92CU(
- IN PADAPTER Adapter
- )
-{
-
- //RT_TRACE(COMP_SEND, DBG_WARNING, ("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"));
- //RT_TRACE(COMP_SEND, DBG_WARNING, ("BaseBand Debug Ports:\n"));
-
- PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0000);
- //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
-
- PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0803);
- //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
-
- PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0a06);
- //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
-
- PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0007);
- //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
-
- PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0100);
- PHY_SetBBReg(Adapter, 0x0a28, 0x00ff0000, 0x000f0000);
- //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
-
- PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0100);
- PHY_SetBBReg(Adapter, 0x0a28, 0x00ff0000, 0x00150000);
- //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
-
- //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0x800, PHY_QueryBBReg(Adapter, 0x0800, bMaskDWord)));
- //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0x900, PHY_QueryBBReg(Adapter, 0x0900, bMaskDWord)));
- //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xa00, PHY_QueryBBReg(Adapter, 0x0a00, bMaskDWord)));
- //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xa54, PHY_QueryBBReg(Adapter, 0x0a54, bMaskDWord)));
- //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xa58, PHY_QueryBBReg(Adapter, 0x0a58, bMaskDWord)));
-
-}
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#define _RTL8723A_PHYCFG_C_
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+#include <rtw_byteorder.h>
+
+#ifdef CONFIG_IOL
+#include <rtw_iol.h>
+#endif
+
+#include <rtl8723a_hal.h>
+
+
+/*---------------------------Define Local Constant---------------------------*/
+/* Channel switch:The size of command tables for switch channel*/
+#define MAX_PRECMD_CNT 16
+#define MAX_RFDEPENDCMD_CNT 16
+#define MAX_POSTCMD_CNT 16
+
+#define MAX_DOZE_WAITING_TIMES_9x 64
+
+/*---------------------------Define Local Constant---------------------------*/
+
+
+/*------------------------Define global variable-----------------------------*/
+
+/*------------------------Define local variable------------------------------*/
+
+
+/*--------------------Define export function prototype-----------------------*/
+// Please refer to header file
+/*--------------------Define export function prototype-----------------------*/
+
+/*----------------------------Function Body----------------------------------*/
+//
+// 1. BB register R/W API
+//
+
+/**
+* Function: phy_CalculateBitShift
+*
+* OverView: Get shifted position of the BitMask
+*
+* Input:
+* u4Byte BitMask,
+*
+* Output: none
+* Return: u4Byte Return the shift bit bit position of the mask
+*/
+static u32
+phy_CalculateBitShift(
+ u32 BitMask
+ )
+{
+ u32 i;
+
+ for(i=0; i<=31; i++)
+ {
+ if ( ((BitMask>>i) & 0x1 ) == 1)
+ break;
+ }
+
+ return (i);
+}
+
+
+/**
+* Function: PHY_QueryBBReg
+*
+* OverView: Read "sepcific bits" from BB register
+*
+* Input:
+* PADAPTER Adapter,
+* u4Byte RegAddr, //The target address to be readback
+* u4Byte BitMask //The target bit position in the target address
+* //to be readback
+* Output: None
+* Return: u4Byte Data //The readback register value
+* Note: This function is equal to "GetRegSetting" in PHY programming guide
+*/
+u32
+rtl8192c_PHY_QueryBBReg(
+ IN PADAPTER Adapter,
+ IN u32 RegAddr,
+ IN u32 BitMask
+ )
+{
+ u32 ReturnValue = 0, OriginalValue, BitShift;
+ u16 BBWaitCounter = 0;
+
+#if (DISABLE_BB_RF == 1)
+ return 0;
+#endif
+
+ //RT_TRACE(COMP_RF, DBG_TRACE, ("--->PHY_QueryBBReg(): RegAddr(%#lx), BitMask(%#lx)\n", RegAddr, BitMask));
+
+ OriginalValue = rtw_read32(Adapter, RegAddr);
+ BitShift = phy_CalculateBitShift(BitMask);
+ ReturnValue = (OriginalValue & BitMask) >> BitShift;
+
+ //RTPRINT(FPHY, PHY_BBR, ("BBR MASK=0x%lx Addr[0x%lx]=0x%lx\n", BitMask, RegAddr, OriginalValue));
+ //RT_TRACE(COMP_RF, DBG_TRACE, ("<---PHY_QueryBBReg(): RegAddr(%#lx), BitMask(%#lx), OriginalValue(%#lx)\n", RegAddr, BitMask, OriginalValue));
+
+ return (ReturnValue);
+
+}
+
+
+/**
+* Function: PHY_SetBBReg
+*
+* OverView: Write "Specific bits" to BB register (page 8~)
+*
+* Input:
+* PADAPTER Adapter,
+* u4Byte RegAddr, //The target address to be modified
+* u4Byte BitMask //The target bit position in the target address
+* //to be modified
+* u4Byte Data //The new register value in the target bit position
+* //of the target address
+*
+* Output: None
+* Return: None
+* Note: This function is equal to "PutRegSetting" in PHY programming guide
+*/
+
+VOID
+rtl8192c_PHY_SetBBReg(
+ IN PADAPTER Adapter,
+ IN u32 RegAddr,
+ IN u32 BitMask,
+ IN u32 Data
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ //u16 BBWaitCounter = 0;
+ u32 OriginalValue, BitShift;
+
+#if (DISABLE_BB_RF == 1)
+ return;
+#endif
+
+ //RT_TRACE(COMP_RF, DBG_TRACE, ("--->PHY_SetBBReg(): RegAddr(%#lx), BitMask(%#lx), Data(%#lx)\n", RegAddr, BitMask, Data));
+
+ if(BitMask!= bMaskDWord){//if not "double word" write
+ OriginalValue = rtw_read32(Adapter, RegAddr);
+ BitShift = phy_CalculateBitShift(BitMask);
+ Data = ((OriginalValue & (~BitMask)) | ((Data << BitShift) & BitMask));
+ }
+
+ rtw_write32(Adapter, RegAddr, Data);
+
+ //RTPRINT(FPHY, PHY_BBW, ("BBW MASK=0x%lx Addr[0x%lx]=0x%lx\n", BitMask, RegAddr, Data));
+ //RT_TRACE(COMP_RF, DBG_TRACE, ("<---PHY_SetBBReg(): RegAddr(%#lx), BitMask(%#lx), Data(%#lx)\n", RegAddr, BitMask, Data));
+
+}
+
+
+//
+// 2. RF register R/W API
+//
+
+/*-----------------------------------------------------------------------------
+ * Function: phy_FwRFSerialRead()
+ *
+ * Overview: We support firmware to execute RF-R/W.
+ *
+ * Input: NONE
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 01/21/2008 MHC Create Version 0.
+ *
+ *---------------------------------------------------------------------------*/
+static u32
+phy_FwRFSerialRead(
+ IN PADAPTER Adapter,
+ IN RF_RADIO_PATH_E eRFPath,
+ IN u32 Offset )
+{
+ u32 retValue = 0;
+ //RT_ASSERT(FALSE,("deprecate!\n"));
+ return (retValue);
+
+} /* phy_FwRFSerialRead */
+
+
+/*-----------------------------------------------------------------------------
+ * Function: phy_FwRFSerialWrite()
+ *
+ * Overview: We support firmware to execute RF-R/W.
+ *
+ * Input: NONE
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 01/21/2008 MHC Create Version 0.
+ *
+ *---------------------------------------------------------------------------*/
+static VOID
+phy_FwRFSerialWrite(
+ IN PADAPTER Adapter,
+ IN RF_RADIO_PATH_E eRFPath,
+ IN u32 Offset,
+ IN u32 Data )
+{
+ //RT_ASSERT(FALSE,("deprecate!\n"));
+}
+
+
+/**
+* Function: phy_RFSerialRead
+*
+* OverView: Read regster from RF chips
+*
+* Input:
+* PADAPTER Adapter,
+* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
+* u4Byte Offset, //The target address to be read
+*
+* Output: None
+* Return: u4Byte reback value
+* Note: Threre are three types of serial operations:
+* 1. Software serial write
+* 2. Hardware LSSI-Low Speed Serial Interface
+* 3. Hardware HSSI-High speed
+* serial write. Driver need to implement (1) and (2).
+* This function is equal to the combination of RF_ReadReg() and RFLSSIRead()
+*/
+static u32
+phy_RFSerialRead(
+ IN PADAPTER Adapter,
+ IN RF_RADIO_PATH_E eRFPath,
+ IN u32 Offset
+ )
+{
+ u32 retValue = 0;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ BB_REGISTER_DEFINITION_T *pPhyReg = &pHalData->PHYRegDef[eRFPath];
+ u32 NewOffset;
+ u32 tmplong,tmplong2;
+ u8 RfPiEnable=0;
+#if 0
+ if(pHalData->RFChipID == RF_8225 && Offset > 0x24) //36 valid regs
+ return retValue;
+ if(pHalData->RFChipID == RF_8256 && Offset > 0x2D) //45 valid regs
+ return retValue;
+#endif
+ //
+ // Make sure RF register offset is correct
+ //
+ Offset &= 0x3f;
+
+ //
+ // Switch page for 8256 RF IC
+ //
+ NewOffset = Offset;
+
+ // 2009/06/17 MH We can not execute IO for power save or other accident mode.
+ //if(RT_CANNOT_IO(Adapter))
+ //{
+ // RTPRINT(FPHY, PHY_RFR, ("phy_RFSerialRead return all one\n"));
+ // return 0xFFFFFFFF;
+ //}
+
+ // For 92S LSSI Read RFLSSIRead
+ // For RF A/B write 0x824/82c(does not work in the future)
+ // We must use 0x824 for RF A and B to execute read trigger
+ tmplong = PHY_QueryBBReg(Adapter, rFPGA0_XA_HSSIParameter2, bMaskDWord);
+ if(eRFPath == RF_PATH_A)
+ tmplong2 = tmplong;
+ else
+ tmplong2 = PHY_QueryBBReg(Adapter, pPhyReg->rfHSSIPara2, bMaskDWord);
+
+ tmplong2 = (tmplong2 & (~bLSSIReadAddress)) | (NewOffset<<23) | bLSSIReadEdge; //T65 RF
+
+ PHY_SetBBReg(Adapter, rFPGA0_XA_HSSIParameter2, bMaskDWord, tmplong&(~bLSSIReadEdge));
+ rtw_udelay_os(10);// PlatformStallExecution(10);
+
+ PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, bMaskDWord, tmplong2);
+ rtw_udelay_os(100);//PlatformStallExecution(100);
+
+ PHY_SetBBReg(Adapter, rFPGA0_XA_HSSIParameter2, bMaskDWord, tmplong|bLSSIReadEdge);
+ rtw_udelay_os(10);//PlatformStallExecution(10);
+
+ if(eRFPath == RF_PATH_A)
+ RfPiEnable = (u8)PHY_QueryBBReg(Adapter, rFPGA0_XA_HSSIParameter1, BIT8);
+ else if(eRFPath == RF_PATH_B)
+ RfPiEnable = (u8)PHY_QueryBBReg(Adapter, rFPGA0_XB_HSSIParameter1, BIT8);
+
+ if(RfPiEnable)
+ { // Read from BBreg8b8, 12 bits for 8190, 20bits for T65 RF
+ retValue = PHY_QueryBBReg(Adapter, pPhyReg->rfLSSIReadBackPi, bLSSIReadBackData);
+ //DBG_8192C("Readback from RF-PI : 0x%x\n", retValue);
+ }
+ else
+ { //Read from BBreg8a0, 12 bits for 8190, 20 bits for T65 RF
+ retValue = PHY_QueryBBReg(Adapter, pPhyReg->rfLSSIReadBack, bLSSIReadBackData);
+ //DBG_8192C("Readback from RF-SI : 0x%x\n", retValue);
+ }
+ //DBG_8192C("RFR-%d Addr[0x%x]=0x%x\n", eRFPath, pPhyReg->rfLSSIReadBack, retValue);
+
+ return retValue;
+
+}
+
+
+
+/**
+* Function: phy_RFSerialWrite
+*
+* OverView: Write data to RF register (page 8~)
+*
+* Input:
+* PADAPTER Adapter,
+* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
+* u4Byte Offset, //The target address to be read
+* u4Byte Data //The new register Data in the target bit position
+* //of the target to be read
+*
+* Output: None
+* Return: None
+* Note: Threre are three types of serial operations:
+* 1. Software serial write
+* 2. Hardware LSSI-Low Speed Serial Interface
+* 3. Hardware HSSI-High speed
+* serial write. Driver need to implement (1) and (2).
+* This function is equal to the combination of RF_ReadReg() and RFLSSIRead()
+ *
+ * Note: For RF8256 only
+ * The total count of RTL8256(Zebra4) register is around 36 bit it only employs
+ * 4-bit RF address. RTL8256 uses "register mode control bit" (Reg00[12], Reg00[10])
+ * to access register address bigger than 0xf. See "Appendix-4 in PHY Configuration
+ * programming guide" for more details.
+ * Thus, we define a sub-finction for RTL8526 register address conversion
+ * ===========================================================
+ * Register Mode RegCTL[1] RegCTL[0] Note
+ * (Reg00[12]) (Reg00[10])
+ * ===========================================================
+ * Reg_Mode0 0 x Reg 0 ~15(0x0 ~ 0xf)
+ * ------------------------------------------------------------------
+ * Reg_Mode1 1 0 Reg 16 ~30(0x1 ~ 0xf)
+ * ------------------------------------------------------------------
+ * Reg_Mode2 1 1 Reg 31 ~ 45(0x1 ~ 0xf)
+ * ------------------------------------------------------------------
+ *
+ * 2008/09/02 MH Add 92S RF definition
+ *
+ *
+ *
+*/
+static VOID
+phy_RFSerialWrite(
+ IN PADAPTER Adapter,
+ IN RF_RADIO_PATH_E eRFPath,
+ IN u32 Offset,
+ IN u32 Data
+ )
+{
+ u32 DataAndAddr = 0;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ BB_REGISTER_DEFINITION_T *pPhyReg = &pHalData->PHYRegDef[eRFPath];
+ u32 NewOffset;
+
+#if 0
+ //<Roger_TODO> We should check valid regs for RF_6052 case.
+ if(pHalData->RFChipID == RF_8225 && Offset > 0x24) //36 valid regs
+ return;
+ if(pHalData->RFChipID == RF_8256 && Offset > 0x2D) //45 valid regs
+ return;
+#endif
+
+ // 2009/06/17 MH We can not execute IO for power save or other accident mode.
+ //if(RT_CANNOT_IO(Adapter))
+ //{
+ // RTPRINT(FPHY, PHY_RFW, ("phy_RFSerialWrite stop\n"));
+ // return;
+ //}
+
+ Offset &= 0x3f;
+
+ //
+ // Shadow Update
+ //
+ //PHY_RFShadowWrite(Adapter, eRFPath, Offset, Data);
+
+ //
+ // Switch page for 8256 RF IC
+ //
+ NewOffset = Offset;
+
+ //
+ // Put write addr in [5:0] and write data in [31:16]
+ //
+ //DataAndAddr = (Data<<16) | (NewOffset&0x3f);
+ DataAndAddr = ((NewOffset<<20) | (Data&0x000fffff)) & 0x0fffffff; // T65 RF
+
+ //
+ // Write Operation
+ //
+ PHY_SetBBReg(Adapter, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr);
+ //RTPRINT(FPHY, PHY_RFW, ("RFW-%d Addr[0x%lx]=0x%lx\n", eRFPath, pPhyReg->rf3wireOffset, DataAndAddr));
+
+}
+
+
+/**
+* Function: PHY_QueryRFReg
+*
+* OverView: Query "Specific bits" to RF register (page 8~)
+*
+* Input:
+* PADAPTER Adapter,
+* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
+* u4Byte RegAddr, //The target address to be read
+* u4Byte BitMask //The target bit position in the target address
+* //to be read
+*
+* Output: None
+* Return: u4Byte Readback value
+* Note: This function is equal to "GetRFRegSetting" in PHY programming guide
+*/
+u32
+rtl8192c_PHY_QueryRFReg(
+ IN PADAPTER Adapter,
+ IN RF_RADIO_PATH_E eRFPath,
+ IN u32 RegAddr,
+ IN u32 BitMask
+ )
+{
+ u32 Original_Value, Readback_Value, BitShift;
+ //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ //u8 RFWaitCounter = 0;
+ //_irqL irqL;
+
+#if (DISABLE_BB_RF == 1)
+ return 0;
+#endif
+
+ //RT_TRACE(COMP_RF, DBG_TRACE, ("--->PHY_QueryRFReg(): RegAddr(%#lx), eRFPath(%#x), BitMask(%#lx)\n", RegAddr, eRFPath,BitMask));
+
+#ifdef CONFIG_USB_HCI
+ //PlatformAcquireMutex(&pHalData->mxRFOperate);
+#else
+ //_enter_critical(&pHalData->rf_lock, &irqL);
+#endif
+
+
+ Original_Value = phy_RFSerialRead(Adapter, eRFPath, RegAddr);
+
+ BitShift = phy_CalculateBitShift(BitMask);
+ Readback_Value = (Original_Value & BitMask) >> BitShift;
+
+#ifdef CONFIG_USB_HCI
+ //PlatformReleaseMutex(&pHalData->mxRFOperate);
+#else
+ //_exit_critical(&pHalData->rf_lock, &irqL);
+#endif
+
+
+ //RTPRINT(FPHY, PHY_RFR, ("RFR-%d MASK=0x%lx Addr[0x%lx]=0x%lx\n", eRFPath, BitMask, RegAddr, Original_Value));//BitMask(%#lx),BitMask,
+ //RT_TRACE(COMP_RF, DBG_TRACE, ("<---PHY_QueryRFReg(): RegAddr(%#lx), eRFPath(%#x), Original_Value(%#lx)\n",
+ // RegAddr, eRFPath, Original_Value));
+
+ return (Readback_Value);
+}
+
+/**
+* Function: PHY_SetRFReg
+*
+* OverView: Write "Specific bits" to RF register (page 8~)
+*
+* Input:
+* PADAPTER Adapter,
+* RF_RADIO_PATH_E eRFPath, //Radio path of A/B/C/D
+* u4Byte RegAddr, //The target address to be modified
+* u4Byte BitMask //The target bit position in the target address
+* //to be modified
+* u4Byte Data //The new register Data in the target bit position
+* //of the target address
+*
+* Output: None
+* Return: None
+* Note: This function is equal to "PutRFRegSetting" in PHY programming guide
+*/
+VOID
+rtl8192c_PHY_SetRFReg(
+ IN PADAPTER Adapter,
+ IN RF_RADIO_PATH_E eRFPath,
+ IN u32 RegAddr,
+ IN u32 BitMask,
+ IN u32 Data
+ )
+{
+
+ //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ //u1Byte RFWaitCounter = 0;
+ u32 Original_Value, BitShift;
+ //_irqL irqL;
+
+#if (DISABLE_BB_RF == 1)
+ return;
+#endif
+
+ //RT_TRACE(COMP_RF, DBG_TRACE, ("--->PHY_SetRFReg(): RegAddr(%#lx), BitMask(%#lx), Data(%#lx), eRFPath(%#x)\n",
+ // RegAddr, BitMask, Data, eRFPath));
+ //RTPRINT(FINIT, INIT_RF, ("PHY_SetRFReg(): RegAddr(%#lx), BitMask(%#lx), Data(%#lx), eRFPath(%#x)\n",
+ // RegAddr, BitMask, Data, eRFPath));
+
+
+#ifdef CONFIG_USB_HCI
+ //PlatformAcquireMutex(&pHalData->mxRFOperate);
+#else
+ //_enter_critical(&pHalData->rf_lock, &irqL);
+#endif
+
+
+ // RF data is 12 bits only
+ if (BitMask != bRFRegOffsetMask)
+ {
+ Original_Value = phy_RFSerialRead(Adapter, eRFPath, RegAddr);
+ BitShift = phy_CalculateBitShift(BitMask);
+ Data = ((Original_Value & (~BitMask)) | (Data<< BitShift));
+ }
+
+ phy_RFSerialWrite(Adapter, eRFPath, RegAddr, Data);
+
+
+#ifdef CONFIG_USB_HCI
+ //PlatformReleaseMutex(&pHalData->mxRFOperate);
+#else
+ //_exit_critical(&pHalData->rf_lock, &irqL);
+#endif
+
+ //PHY_QueryRFReg(Adapter,eRFPath,RegAddr,BitMask);
+ //RT_TRACE(COMP_RF, DBG_TRACE, ("<---PHY_SetRFReg(): RegAddr(%#lx), BitMask(%#lx), Data(%#lx), eRFPath(%#x)\n",
+ // RegAddr, BitMask, Data, eRFPath));
+
+}
+
+
+//
+// 3. Initial MAC/BB/RF config by reading MAC/BB/RF txt.
+//
+
+/*-----------------------------------------------------------------------------
+ * Function: phy_ConfigMACWithParaFile()
+ *
+ * Overview: This function read BB parameters from general file format, and do register
+ * Read/Write
+ *
+ * Input: PADAPTER Adapter
+ * ps1Byte pFileName
+ *
+ * Output: NONE
+ *
+ * Return: RT_STATUS_SUCCESS: configuration file exist
+ *
+ * Note: The format of MACPHY_REG.txt is different from PHY and RF.
+ * [Register][Mask][Value]
+ *---------------------------------------------------------------------------*/
+static int
+phy_ConfigMACWithParaFile(
+ IN PADAPTER Adapter,
+ IN u8* pFileName
+)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+ int rtStatus = _SUCCESS;
+
+ return rtStatus;
+}
+
+/*-----------------------------------------------------------------------------
+ * Function: phy_ConfigMACWithHeaderFile()
+ *
+ * Overview: This function read BB parameters from Header file we gen, and do register
+ * Read/Write
+ *
+ * Input: PADAPTER Adapter
+ * ps1Byte pFileName
+ *
+ * Output: NONE
+ *
+ * Return: RT_STATUS_SUCCESS: configuration file exist
+ *
+ * Note: The format of MACPHY_REG.txt is different from PHY and RF.
+ * [Register][Mask][Value]
+ *---------------------------------------------------------------------------*/
+#ifndef CONFIG_PHY_SETTING_WITH_ODM
+static int
+phy_ConfigMACWithHeaderFile(
+ IN PADAPTER Adapter
+)
+{
+ u32 i = 0;
+ u32 ArrayLength = 0;
+ u32* ptrArray;
+ //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+ //2008.11.06 Modified by tynli.
+ //RT_TRACE(COMP_INIT, DBG_LOUD, ("Read Rtl819XMACPHY_Array\n"));
+ ArrayLength = Rtl8723_MAC_ArrayLength;
+ ptrArray = (u32*)Rtl8723_MAC_Array;
+
+#ifdef CONFIG_IOL_MAC
+ {
+ struct xmit_frame *xmit_frame;
+ if((xmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL)
+ return _FAIL;
+
+ for(i = 0 ;i < ArrayLength;i=i+2){ // Add by tynli for 2 column
+ rtw_IOL_append_WB_cmd(xmit_frame, ptrArray[i], (u8)ptrArray[i+1]);
+ }
+
+ return rtw_IOL_exec_cmds_sync(Adapter, xmit_frame, 1000,0);
+ }
+#else
+ for(i = 0 ;i < ArrayLength;i=i+2){ // Add by tynli for 2 column
+ rtw_write8(Adapter, ptrArray[i], (u8)ptrArray[i+1]);
+ }
+#endif
+
+ return _SUCCESS;
+
+}
+#endif//#ifndef CONFIG_PHY_SETTING_WITH_ODM
+
+/*-----------------------------------------------------------------------------
+ * Function: PHY_MACConfig8192C
+ *
+ * Overview: Condig MAC by header file or parameter file.
+ *
+ * Input: NONE
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 08/12/2008 MHC Create Version 0.
+ *
+ *---------------------------------------------------------------------------*/
+s32 PHY_MACConfig8723A(PADAPTER Adapter)
+{
+ int rtStatus = _SUCCESS;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ s8 *pszMACRegFile;
+ s8 sz8723MACRegFile[] = RTL8723_PHY_MACREG;
+ BOOLEAN is92C = IS_92C_SERIAL(pHalData->VersionID);
+
+
+ pszMACRegFile = sz8723MACRegFile;
+
+ //
+ // Config MAC
+ //
+#ifdef CONFIG_EMBEDDED_FWIMG
+ #ifdef CONFIG_PHY_SETTING_WITH_ODM
+ if(HAL_STATUS_FAILURE == ODM_ConfigMACWithHeaderFile(&pHalData->odmpriv))
+ rtStatus = _FAIL;
+ #else
+ rtStatus = phy_ConfigMACWithHeaderFile(Adapter);
+ #endif//#ifdef CONFIG_PHY_SETTING_WITH_ODM
+#else
+
+ // Not make sure EEPROM, add later
+ //RT_TRACE(COMP_INIT, DBG_LOUD, ("Read MACREG.txt\n"));
+ rtStatus = phy_ConfigMACWithParaFile(Adapter, pszMACRegFile);
+#endif//CONFIG_EMBEDDED_FWIMG
+
+#ifdef CONFIG_PCI_HCI
+ //this switching setting cause some 8192cu hw have redownload fw fail issue
+ //improve 2-stream TX EVM by Jenyu
+ if(is92C)
+ rtw_write8(Adapter, REG_SPS0_CTRL+3,0x71);
+#endif
+
+
+ // 2010.07.13 AMPDU aggregation number 9
+ //rtw_write8(Adapter, REG_MAX_AGGR_NUM, MAX_AGGR_NUM);
+ rtw_write8(Adapter, REG_MAX_AGGR_NUM, 0x0A); //By tynli. 2010.11.18.
+#ifdef CONFIG_USB_HCI
+ if(is92C && (BOARD_USB_DONGLE == pHalData->BoardType))
+ rtw_write8(Adapter, 0x40,0x04);
+#endif
+
+ return rtStatus;
+
+}
+
+
+/**
+* Function: phy_InitBBRFRegisterDefinition
+*
+* OverView: Initialize Register definition offset for Radio Path A/B/C/D
+*
+* Input:
+* PADAPTER Adapter,
+*
+* Output: None
+* Return: None
+* Note: The initialization value is constant and it should never be changes
+*/
+static VOID
+phy_InitBBRFRegisterDefinition(
+ IN PADAPTER Adapter
+)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+ // RF Interface Sowrtware Control
+ pHalData->PHYRegDef[RF_PATH_A].rfintfs = rFPGA0_XAB_RFInterfaceSW; // 16 LSBs if read 32-bit from 0x870
+ pHalData->PHYRegDef[RF_PATH_B].rfintfs = rFPGA0_XAB_RFInterfaceSW; // 16 MSBs if read 32-bit from 0x870 (16-bit for 0x872)
+ pHalData->PHYRegDef[RF_PATH_C].rfintfs = rFPGA0_XCD_RFInterfaceSW;// 16 LSBs if read 32-bit from 0x874
+ pHalData->PHYRegDef[RF_PATH_D].rfintfs = rFPGA0_XCD_RFInterfaceSW;// 16 MSBs if read 32-bit from 0x874 (16-bit for 0x876)
+
+ // RF Interface Readback Value
+ pHalData->PHYRegDef[RF_PATH_A].rfintfi = rFPGA0_XAB_RFInterfaceRB; // 16 LSBs if read 32-bit from 0x8E0
+ pHalData->PHYRegDef[RF_PATH_B].rfintfi = rFPGA0_XAB_RFInterfaceRB;// 16 MSBs if read 32-bit from 0x8E0 (16-bit for 0x8E2)
+ pHalData->PHYRegDef[RF_PATH_C].rfintfi = rFPGA0_XCD_RFInterfaceRB;// 16 LSBs if read 32-bit from 0x8E4
+ pHalData->PHYRegDef[RF_PATH_D].rfintfi = rFPGA0_XCD_RFInterfaceRB;// 16 MSBs if read 32-bit from 0x8E4 (16-bit for 0x8E6)
+
+ // RF Interface Output (and Enable)
+ pHalData->PHYRegDef[RF_PATH_A].rfintfo = rFPGA0_XA_RFInterfaceOE; // 16 LSBs if read 32-bit from 0x860
+ pHalData->PHYRegDef[RF_PATH_B].rfintfo = rFPGA0_XB_RFInterfaceOE; // 16 LSBs if read 32-bit from 0x864
+
+ // RF Interface (Output and) Enable
+ pHalData->PHYRegDef[RF_PATH_A].rfintfe = rFPGA0_XA_RFInterfaceOE; // 16 MSBs if read 32-bit from 0x860 (16-bit for 0x862)
+ pHalData->PHYRegDef[RF_PATH_B].rfintfe = rFPGA0_XB_RFInterfaceOE; // 16 MSBs if read 32-bit from 0x864 (16-bit for 0x866)
+
+ //Addr of LSSI. Wirte RF register by driver
+ pHalData->PHYRegDef[RF_PATH_A].rf3wireOffset = rFPGA0_XA_LSSIParameter; //LSSI Parameter
+ pHalData->PHYRegDef[RF_PATH_B].rf3wireOffset = rFPGA0_XB_LSSIParameter;
+
+ // RF parameter
+ pHalData->PHYRegDef[RF_PATH_A].rfLSSI_Select = rFPGA0_XAB_RFParameter; //BB Band Select
+ pHalData->PHYRegDef[RF_PATH_B].rfLSSI_Select = rFPGA0_XAB_RFParameter;
+ pHalData->PHYRegDef[RF_PATH_C].rfLSSI_Select = rFPGA0_XCD_RFParameter;
+ pHalData->PHYRegDef[RF_PATH_D].rfLSSI_Select = rFPGA0_XCD_RFParameter;
+
+ // Tx AGC Gain Stage (same for all path. Should we remove this?)
+ pHalData->PHYRegDef[RF_PATH_A].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
+ pHalData->PHYRegDef[RF_PATH_B].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
+ pHalData->PHYRegDef[RF_PATH_C].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
+ pHalData->PHYRegDef[RF_PATH_D].rfTxGainStage = rFPGA0_TxGainStage; //Tx gain stage
+
+ // Tranceiver A~D HSSI Parameter-1
+ pHalData->PHYRegDef[RF_PATH_A].rfHSSIPara1 = rFPGA0_XA_HSSIParameter1; //wire control parameter1
+ pHalData->PHYRegDef[RF_PATH_B].rfHSSIPara1 = rFPGA0_XB_HSSIParameter1; //wire control parameter1
+
+ // Tranceiver A~D HSSI Parameter-2
+ pHalData->PHYRegDef[RF_PATH_A].rfHSSIPara2 = rFPGA0_XA_HSSIParameter2; //wire control parameter2
+ pHalData->PHYRegDef[RF_PATH_B].rfHSSIPara2 = rFPGA0_XB_HSSIParameter2; //wire control parameter2
+
+ // RF switch Control
+ pHalData->PHYRegDef[RF_PATH_A].rfSwitchControl = rFPGA0_XAB_SwitchControl; //TR/Ant switch control
+ pHalData->PHYRegDef[RF_PATH_B].rfSwitchControl = rFPGA0_XAB_SwitchControl;
+ pHalData->PHYRegDef[RF_PATH_C].rfSwitchControl = rFPGA0_XCD_SwitchControl;
+ pHalData->PHYRegDef[RF_PATH_D].rfSwitchControl = rFPGA0_XCD_SwitchControl;
+
+ // AGC control 1
+ pHalData->PHYRegDef[RF_PATH_A].rfAGCControl1 = rOFDM0_XAAGCCore1;
+ pHalData->PHYRegDef[RF_PATH_B].rfAGCControl1 = rOFDM0_XBAGCCore1;
+ pHalData->PHYRegDef[RF_PATH_C].rfAGCControl1 = rOFDM0_XCAGCCore1;
+ pHalData->PHYRegDef[RF_PATH_D].rfAGCControl1 = rOFDM0_XDAGCCore1;
+
+ // AGC control 2
+ pHalData->PHYRegDef[RF_PATH_A].rfAGCControl2 = rOFDM0_XAAGCCore2;
+ pHalData->PHYRegDef[RF_PATH_B].rfAGCControl2 = rOFDM0_XBAGCCore2;
+ pHalData->PHYRegDef[RF_PATH_C].rfAGCControl2 = rOFDM0_XCAGCCore2;
+ pHalData->PHYRegDef[RF_PATH_D].rfAGCControl2 = rOFDM0_XDAGCCore2;
+
+ // RX AFE control 1
+ pHalData->PHYRegDef[RF_PATH_A].rfRxIQImbalance = rOFDM0_XARxIQImbalance;
+ pHalData->PHYRegDef[RF_PATH_B].rfRxIQImbalance = rOFDM0_XBRxIQImbalance;
+ pHalData->PHYRegDef[RF_PATH_C].rfRxIQImbalance = rOFDM0_XCRxIQImbalance;
+ pHalData->PHYRegDef[RF_PATH_D].rfRxIQImbalance = rOFDM0_XDRxIQImbalance;
+
+ // RX AFE control 1
+ pHalData->PHYRegDef[RF_PATH_A].rfRxAFE = rOFDM0_XARxAFE;
+ pHalData->PHYRegDef[RF_PATH_B].rfRxAFE = rOFDM0_XBRxAFE;
+ pHalData->PHYRegDef[RF_PATH_C].rfRxAFE = rOFDM0_XCRxAFE;
+ pHalData->PHYRegDef[RF_PATH_D].rfRxAFE = rOFDM0_XDRxAFE;
+
+ // Tx AFE control 1
+ pHalData->PHYRegDef[RF_PATH_A].rfTxIQImbalance = rOFDM0_XATxIQImbalance;
+ pHalData->PHYRegDef[RF_PATH_B].rfTxIQImbalance = rOFDM0_XBTxIQImbalance;
+ pHalData->PHYRegDef[RF_PATH_C].rfTxIQImbalance = rOFDM0_XCTxIQImbalance;
+ pHalData->PHYRegDef[RF_PATH_D].rfTxIQImbalance = rOFDM0_XDTxIQImbalance;
+
+ // Tx AFE control 2
+ pHalData->PHYRegDef[RF_PATH_A].rfTxAFE = rOFDM0_XATxAFE;
+ pHalData->PHYRegDef[RF_PATH_B].rfTxAFE = rOFDM0_XBTxAFE;
+ pHalData->PHYRegDef[RF_PATH_C].rfTxAFE = rOFDM0_XCTxAFE;
+ pHalData->PHYRegDef[RF_PATH_D].rfTxAFE = rOFDM0_XDTxAFE;
+
+ // Tranceiver LSSI Readback SI mode
+ pHalData->PHYRegDef[RF_PATH_A].rfLSSIReadBack = rFPGA0_XA_LSSIReadBack;
+ pHalData->PHYRegDef[RF_PATH_B].rfLSSIReadBack = rFPGA0_XB_LSSIReadBack;
+ pHalData->PHYRegDef[RF_PATH_C].rfLSSIReadBack = rFPGA0_XC_LSSIReadBack;
+ pHalData->PHYRegDef[RF_PATH_D].rfLSSIReadBack = rFPGA0_XD_LSSIReadBack;
+
+ // Tranceiver LSSI Readback PI mode
+ pHalData->PHYRegDef[RF_PATH_A].rfLSSIReadBackPi = TransceiverA_HSPI_Readback;
+ pHalData->PHYRegDef[RF_PATH_B].rfLSSIReadBackPi = TransceiverB_HSPI_Readback;
+ //pHalData->PHYRegDef[RF_PATH_C].rfLSSIReadBackPi = rFPGA0_XC_LSSIReadBack;
+ //pHalData->PHYRegDef[RF_PATH_D].rfLSSIReadBackPi = rFPGA0_XD_LSSIReadBack;
+
+}
+
+
+/*-----------------------------------------------------------------------------
+ * Function: phy_ConfigBBWithParaFile()
+ *
+ * Overview: This function read BB parameters from general file format, and do register
+ * Read/Write
+ *
+ * Input: PADAPTER Adapter
+ * ps1Byte pFileName
+ *
+ * Output: NONE
+ *
+ * Return: RT_STATUS_SUCCESS: configuration file exist
+ * 2008/11/06 MH For 92S we do not support silent reset now. Disable
+ * parameter file compare!!!!!!??
+ *
+ *---------------------------------------------------------------------------*/
+static int
+phy_ConfigBBWithParaFile(
+ IN PADAPTER Adapter,
+ IN u8* pFileName
+)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+ int rtStatus = _SUCCESS;
+
+ return rtStatus;
+}
+
+
+
+//****************************************
+// The following is for High Power PA
+//****************************************
+VOID
+phy_ConfigBBExternalPA(
+ IN PADAPTER Adapter
+)
+{
+#ifdef CONFIG_USB_HCI
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ u16 i=0;
+ u32 temp=0;
+
+ if(!pHalData->ExternalPA)
+ {
+ return;
+ }
+
+ // 2010/10/19 MH According to Jenyu/EEChou 's opinion, we need not to execute the
+ // same code as SU. It is already updated in PHY_REG_1T_HP.txt.
+#if 0
+ PHY_SetBBReg(Adapter, 0xee8, BIT28, 1);
+ temp = PHY_QueryBBReg(Adapter, 0x860, bMaskDWord);
+ temp |= (BIT26|BIT21|BIT10|BIT5);
+ PHY_SetBBReg(Adapter, 0x860, bMaskDWord, temp);
+ PHY_SetBBReg(Adapter, 0x870, BIT10, 0);
+ PHY_SetBBReg(Adapter, 0xc80, bMaskDWord, 0x20000080);
+ PHY_SetBBReg(Adapter, 0xc88, bMaskDWord, 0x40000100);
+#endif
+
+#endif
+}
+
+/*-----------------------------------------------------------------------------
+ * Function: phy_ConfigBBWithHeaderFile()
+ *
+ * Overview: This function read BB parameters from general file format, and do register
+ * Read/Write
+ *
+ * Input: PADAPTER Adapter
+ * u1Byte ConfigType 0 => PHY_CONFIG
+ * 1 =>AGC_TAB
+ *
+ * Output: NONE
+ *
+ * Return: RT_STATUS_SUCCESS: configuration file exist
+ *
+ *---------------------------------------------------------------------------*/
+#ifndef CONFIG_PHY_SETTING_WITH_ODM
+static int
+phy_ConfigBBWithHeaderFile(
+ IN PADAPTER Adapter,
+ IN u8 ConfigType
+)
+{
+ int i;
+ u32* Rtl819XPHY_REGArray_Table;
+ u32* Rtl819XAGCTAB_Array_Table;
+ u16 PHY_REGArrayLen, AGCTAB_ArrayLen;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ int ret = _SUCCESS;
+
+
+ AGCTAB_ArrayLen = Rtl8723_AGCTAB_1TArrayLength;
+ Rtl819XAGCTAB_Array_Table = (u32*)Rtl8723_AGCTAB_1TArray;
+ PHY_REGArrayLen = Rtl8723_PHY_REG_1TArrayLength;
+ Rtl819XPHY_REGArray_Table = (u32*)Rtl8723_PHY_REG_1TArray;
+// RT_TRACE(COMP_INIT, DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() phy:Rtl8723AGCTAB_1TArray\n"));
+// RT_TRACE(COMP_INIT, DBG_LOUD, (" ===> phy_ConfigBBWithHeaderFile() agc:Rtl8723PHY_REG_1TArray\n"));
+
+ if(ConfigType == BaseBand_Config_PHY_REG)
+ {
+ #ifdef CONFIG_IOL_BB_PHY_REG
+ {
+ struct xmit_frame *xmit_frame;
+ u32 tmp_value;
+
+ if((xmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL) {
+ ret = _FAIL;
+ goto exit;
+ }
+
+ for(i=0;i<PHY_REGArrayLen;i=i+2)
+ {
+ tmp_value=Rtl819XPHY_REGArray_Table[i+1];
+
+ if (Rtl819XPHY_REGArray_Table[i] == 0xfe)
+ rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 50);
+ else if (Rtl819XPHY_REGArray_Table[i] == 0xfd)
+ rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 5);
+ else if (Rtl819XPHY_REGArray_Table[i] == 0xfc)
+ rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 1);
+ else if (Rtl819XPHY_REGArray_Table[i] == 0xfb)
+ rtw_IOL_append_DELAY_US_cmd(xmit_frame, 50);
+ else if (Rtl819XPHY_REGArray_Table[i] == 0xfa)
+ rtw_IOL_append_DELAY_US_cmd(xmit_frame, 5);
+ else if (Rtl819XPHY_REGArray_Table[i] == 0xf9)
+ rtw_IOL_append_DELAY_US_cmd(xmit_frame, 1);
+
+ rtw_IOL_append_WD_cmd(xmit_frame, Rtl819XPHY_REGArray_Table[i], tmp_value);
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("The Rtl819XPHY_REGArray_Table[0] is %lx Rtl819XPHY_REGArray[1] is %lx \n",Rtl819XPHY_REGArray_Table[i], Rtl819XPHY_REGArray_Table[i+1]));
+ }
+
+ ret = rtw_IOL_exec_cmds_sync(Adapter, xmit_frame, 1000,0);
+ }
+ #else
+ for(i=0;i<PHY_REGArrayLen;i=i+2)
+ {
+ if (Rtl819XPHY_REGArray_Table[i] == 0xfe){
+ #ifdef CONFIG_LONG_DELAY_ISSUE
+ rtw_msleep_os(50);
+ #else
+ rtw_mdelay_os(50);
+ #endif
+ }
+ else if (Rtl819XPHY_REGArray_Table[i] == 0xfd)
+ rtw_mdelay_os(5);
+ else if (Rtl819XPHY_REGArray_Table[i] == 0xfc)
+ rtw_mdelay_os(1);
+ else if (Rtl819XPHY_REGArray_Table[i] == 0xfb)
+ rtw_udelay_os(50);
+ else if (Rtl819XPHY_REGArray_Table[i] == 0xfa)
+ rtw_udelay_os(5);
+ else if (Rtl819XPHY_REGArray_Table[i] == 0xf9)
+ rtw_udelay_os(1);
+
+ PHY_SetBBReg(Adapter, Rtl819XPHY_REGArray_Table[i], bMaskDWord, Rtl819XPHY_REGArray_Table[i+1]);
+
+ // Add 1us delay between BB/RF register setting.
+ rtw_udelay_os(1);
+
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("The Rtl819XPHY_REGArray_Table[0] is %lx Rtl819XPHY_REGArray[1] is %lx \n",Rtl819XPHY_REGArray_Table[i], Rtl819XPHY_REGArray_Table[i+1]));
+ }
+ #endif
+ // for External PA
+ phy_ConfigBBExternalPA(Adapter);
+ }
+ else if(ConfigType == BaseBand_Config_AGC_TAB)
+ {
+ #ifdef CONFIG_IOL_BB_AGC_TAB
+ {
+ struct xmit_frame *xmit_frame;
+
+ if((xmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL) {
+ ret = _FAIL;
+ goto exit;
+ }
+
+ for(i=0;i<AGCTAB_ArrayLen;i=i+2)
+ {
+ rtw_IOL_append_WD_cmd(xmit_frame, Rtl819XAGCTAB_Array_Table[i], Rtl819XAGCTAB_Array_Table[i+1]);
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("The Rtl819XAGCTAB_Array_Table[0] is %lx Rtl819XPHY_REGArray[1] is %lx \n",Rtl819XAGCTAB_Array_Table[i], Rtl819XAGCTAB_Array_Table[i+1]));
+ }
+
+ ret = rtw_IOL_exec_cmds_sync(Adapter, xmit_frame, 1000,0);
+ }
+ #else
+ for(i=0;i<AGCTAB_ArrayLen;i=i+2)
+ {
+ PHY_SetBBReg(Adapter, Rtl819XAGCTAB_Array_Table[i], bMaskDWord, Rtl819XAGCTAB_Array_Table[i+1]);
+
+ // Add 1us delay between BB/RF register setting.
+ rtw_udelay_os(1);
+
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("The Rtl819XAGCTAB_Array_Table[0] is %lx Rtl819XPHY_REGArray[1] is %lx \n",Rtl819XAGCTAB_Array_Table[i], Rtl819XAGCTAB_Array_Table[i+1]));
+ }
+ #endif
+ }
+
+exit:
+ return ret;
+}
+
+#endif
+VOID
+storePwrIndexDiffRateOffset(
+ IN PADAPTER Adapter,
+ IN u32 RegAddr,
+ IN u32 BitMask,
+ IN u32 Data
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+ if(RegAddr == rTxAGC_A_Rate18_06)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][0] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][0] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][0]));
+ }
+ if(RegAddr == rTxAGC_A_Rate54_24)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][1] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][1] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][1]));
+ }
+ if(RegAddr == rTxAGC_A_CCK1_Mcs32)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][6] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][6] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][6]));
+ }
+ if(RegAddr == rTxAGC_B_CCK11_A_CCK2_11 && BitMask == 0xffffff00)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][7] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][7] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][7]));
+ }
+ if(RegAddr == rTxAGC_A_Mcs03_Mcs00)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][2] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][2] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][2]));
+ }
+ if(RegAddr == rTxAGC_A_Mcs07_Mcs04)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][3] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][3] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][3]));
+ }
+ if(RegAddr == rTxAGC_A_Mcs11_Mcs08)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][4] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][4] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][4]));
+ }
+ if(RegAddr == rTxAGC_A_Mcs15_Mcs12)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][5] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][5] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][5]));
+ }
+ if(RegAddr == rTxAGC_B_Rate18_06)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][8] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][8] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][8]));
+ }
+ if(RegAddr == rTxAGC_B_Rate54_24)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][9] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][9] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][9]));
+ }
+ if(RegAddr == rTxAGC_B_CCK1_55_Mcs32)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][14] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][14] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][14]));
+ }
+ if(RegAddr == rTxAGC_B_CCK11_A_CCK2_11 && BitMask == 0x000000ff)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][15] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][15] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][15]));
+ }
+ if(RegAddr == rTxAGC_B_Mcs03_Mcs00)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][10] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][10] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][10]));
+ }
+ if(RegAddr == rTxAGC_B_Mcs07_Mcs04)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][11] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][11] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][11]));
+ }
+ if(RegAddr == rTxAGC_B_Mcs11_Mcs08)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][12] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][12] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][12]));
+ }
+ if(RegAddr == rTxAGC_B_Mcs15_Mcs12)
+ {
+ pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][13] = Data;
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("MCSTxPowerLevelOriginalOffset[%d][13] = 0x%lx\n", pHalData->pwrGroupCnt,
+ // pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][13]));
+ pHalData->pwrGroupCnt++;
+ }
+}
+/*-----------------------------------------------------------------------------
+ * Function: phy_ConfigBBWithPgParaFile
+ *
+ * Overview:
+ *
+ * Input: NONE
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 11/06/2008 MHC Create Version 0.
+ * 2009/07/29 tynli (porting from 92SE branch)2009/03/11 Add copy parameter file to buffer for silent reset
+ *---------------------------------------------------------------------------*/
+static int
+phy_ConfigBBWithPgParaFile(
+ IN PADAPTER Adapter,
+ IN u8* pFileName)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+ int rtStatus = _SUCCESS;
+
+
+ return rtStatus;
+
+} /* phy_ConfigBBWithPgParaFile */
+
+
+/*-----------------------------------------------------------------------------
+ * Function: phy_ConfigBBWithPgHeaderFile
+ *
+ * Overview: Config PHY_REG_PG array
+ *
+ * Input: NONE
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 11/06/2008 MHC Add later!!!!!!.. Please modify for new files!!!!
+ * 11/10/2008 tynli Modify to mew files.
+ *---------------------------------------------------------------------------*/
+static int
+phy_ConfigBBWithPgHeaderFile(
+ IN PADAPTER Adapter,
+ IN u8 ConfigType)
+{
+ int i;
+ u32* Rtl819XPHY_REGArray_Table_PG;
+ u16 PHY_REGArrayPGLen;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+
+ PHY_REGArrayPGLen = Rtl8723_PHY_REG_Array_PGLength;
+ Rtl819XPHY_REGArray_Table_PG = (u32*)Rtl8723_PHY_REG_Array_PG;
+
+ if(ConfigType == BaseBand_Config_PHY_REG)
+ {
+ for(i=0;i<PHY_REGArrayPGLen;i=i+3)
+ {
+ #if 0 //without IO, no delay is neeeded...
+ if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfe){
+ #ifdef CONFIG_LONG_DELAY_ISSUE
+ rtw_msleep_os(50);
+ #else
+ rtw_mdelay_os(50);
+ #endif
+ }
+ else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfd)
+ rtw_mdelay_os(5);
+ else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfc)
+ rtw_mdelay_os(1);
+ else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfb)
+ rtw_udelay_os(50);
+ else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xfa)
+ rtw_udelay_os(5);
+ else if (Rtl819XPHY_REGArray_Table_PG[i] == 0xf9)
+ rtw_udelay_os(1);
+ //PHY_SetBBReg(Adapter, Rtl819XPHY_REGArray_Table_PG[i], Rtl819XPHY_REGArray_Table_PG[i+1], Rtl819XPHY_REGArray_Table_PG[i+2]);
+ #endif
+
+ storePwrIndexDiffRateOffset(Adapter, Rtl819XPHY_REGArray_Table_PG[i],
+ Rtl819XPHY_REGArray_Table_PG[i+1],
+ Rtl819XPHY_REGArray_Table_PG[i+2]);
+ //RT_TRACE(COMP_SEND, DBG_TRACE, ("The Rtl819XPHY_REGArray_Table_PG[0] is %lx Rtl819XPHY_REGArray_Table_PG[1] is %lx \n",Rtl819XPHY_REGArray_Table_PG[i], Rtl819XPHY_REGArray_Table_PG[i+1]));
+ }
+ }
+ else
+ {
+
+ //RT_TRACE(COMP_SEND, DBG_LOUD, ("phy_ConfigBBWithPgHeaderFile(): ConfigType != BaseBand_Config_PHY_REG\n"));
+ }
+
+ return _SUCCESS;
+
+} /* phy_ConfigBBWithPgHeaderFile */
+
+#if (MP_DRIVER == 1)
+
+/*-----------------------------------------------------------------------------
+ * Function: phy_ConfigBBWithMpParaFile()
+ *
+ * Overview: This function read BB parameters from general file format, and do register
+ * Read/Write
+ *
+ * Input: PADAPTER Adapter
+ * ps1Byte pFileName
+ *
+ * Output: NONE
+ *
+ * Return: RT_STATUS_SUCCESS: configuration file exist
+ * 2008/11/06 MH For 92S we do not support silent reset now. Disable
+ * parameter file compare!!!!!!??
+ *
+ *---------------------------------------------------------------------------*/
+static int
+phy_ConfigBBWithMpParaFile(
+ IN PADAPTER Adapter,
+ IN u8* pFileName
+)
+{
+#if 1
+ int rtStatus = _SUCCESS;
+#else
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ s4Byte nLinesRead, ithLine;
+ RT_STATUS rtStatus = RT_STATUS_SUCCESS;
+ ps1Byte szLine;
+ u4Byte u4bRegOffset, u4bRegMask, u4bRegValue;
+ u4Byte u4bMove;
+
+ if(ADAPTER_TEST_STATUS_FLAG(Adapter, ADAPTER_STATUS_FIRST_INIT))
+ {
+ rtStatus = PlatformReadFile(
+ Adapter,
+ pFileName,
+ (pu1Byte)(pHalData->BufOfLines),
+ MAX_LINES_HWCONFIG_TXT,
+ MAX_BYTES_LINE_HWCONFIG_TXT,
+ &nLinesRead
+ );
+ if(rtStatus == RT_STATUS_SUCCESS)
+ {
+ PlatformMoveMemory(pHalData->BufOfLines6, pHalData->BufOfLines, nLinesRead*MAX_BYTES_LINE_HWCONFIG_TXT);
+ pHalData->nLinesRead6 = nLinesRead;
+ }
+ else
+ {
+ // Temporarily skip PHY_REG_MP.txt if file does not exist.
+ pHalData->nLinesRead6 = 0;
+ RT_TRACE(COMP_INIT, DBG_LOUD, ("No matched file \r\n"));
+ return RT_STATUS_SUCCESS;
+ }
+ }
+ else
+ {
+ PlatformMoveMemory(pHalData->BufOfLines, pHalData->BufOfLines6, MAX_LINES_HWCONFIG_TXT*MAX_BYTES_LINE_HWCONFIG_TXT);
+ nLinesRead = pHalData->nLinesRead6;
+ rtStatus = RT_STATUS_SUCCESS;
+ }
+
+
+ if(rtStatus == RT_STATUS_SUCCESS)
+ {
+ RT_TRACE(COMP_INIT, DBG_LOUD, ("phy_ConfigBBWithMpParaFile(): read %s ok\n", pFileName));
+
+ for(ithLine = 0; ithLine < nLinesRead; ithLine++)
+ {
+ szLine = pHalData->BufOfLines[ithLine];
+
+ if(!IsCommentString(szLine))
+ {
+ // Get 1st hex value as register offset.
+ if(GetHexValueFromString(szLine, &u4bRegOffset, &u4bMove))
+ {
+ if(u4bRegOffset == 0xff)
+ { // Ending.
+ break;
+ }
+ else if (u4bRegOffset == 0xfe)
+ delay_ms(50);
+ else if (u4bRegOffset == 0xfd)
+ delay_ms(5);
+ else if (u4bRegOffset == 0xfc)
+ delay_ms(1);
+ else if (u4bRegOffset == 0xfb)
+ PlatformStallExecution(50);
+ else if (u4bRegOffset == 0xfa)
+ PlatformStallExecution(5);
+ else if (u4bRegOffset == 0xf9)
+ PlatformStallExecution(1);
+
+ // Get 2nd hex value as register value.
+ szLine += u4bMove;
+ if(GetHexValueFromString(szLine, &u4bRegValue, &u4bMove))
+ {
+ RT_TRACE(COMP_FPGA, DBG_TRACE, ("[ADDR]%03lX=%08lX\n", u4bRegOffset, u4bRegValue));
+ PHY_SetBBReg(Adapter, u4bRegOffset, bMaskDWord, u4bRegValue);
+
+ // Add 1us delay between BB/RF register setting.
+ PlatformStallExecution(1);
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ RT_TRACE(COMP_INIT, DBG_LOUD, ("phy_ConfigBBWithMpParaFile(): Failed%s\n", pFileName));
+ }
+#endif
+
+ return rtStatus;
+}
+
+/*-----------------------------------------------------------------------------
+ * Function: phy_ConfigBBWithMpHeaderFile
+ *
+ * Overview: Config PHY_REG_MP array
+ *
+ * Input: NONE
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 02/04/2010 chiyokolin Modify to new files.
+ *---------------------------------------------------------------------------*/
+static int
+phy_ConfigBBWithMpHeaderFile(
+ IN PADAPTER Adapter,
+ IN u1Byte ConfigType)
+{
+ int i;
+ u32* Rtl8192CPHY_REGArray_Table_MP;
+ u16 PHY_REGArrayMPLen;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+
+ PHY_REGArrayMPLen = Rtl8723_PHY_REG_Array_MPLength;
+ Rtl8192CPHY_REGArray_Table_MP = (u32*)Rtl8723_PHY_REG_Array_MP;
+
+ if(ConfigType == BaseBand_Config_PHY_REG)
+ {
+ for(i=0;i<PHY_REGArrayMPLen;i=i+2)
+ {
+ if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfe) {
+ #ifdef CONFIG_LONG_DELAY_ISSUE
+ rtw_msleep_os(50);
+ #else
+ rtw_mdelay_os(50);
+ #endif
+ }
+ else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfd)
+ rtw_mdelay_os(5);
+ else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfc)
+ rtw_mdelay_os(1);
+ else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfb) {
+ #ifdef CONFIG_LONG_DELAY_ISSUE
+ rtw_msleep_os(50);
+ #else
+ rtw_mdelay_os(50);
+ #endif
+ }
+ else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xfa)
+ rtw_mdelay_os(5);
+ else if (Rtl8192CPHY_REGArray_Table_MP[i] == 0xf9)
+ rtw_mdelay_os(1);
+ PHY_SetBBReg(Adapter, Rtl8192CPHY_REGArray_Table_MP[i], bMaskDWord, Rtl8192CPHY_REGArray_Table_MP[i+1]);
+
+ // Add 1us delay between BB/RF register setting.
+ rtw_mdelay_os(1);
+
+// RT_TRACE(COMP_INIT, DBG_TRACE, ("The Rtl8192CPHY_REGArray_Table_MP[%d] is %lx Rtl8192CPHY_REGArray_Table_MP[%d] is %lx \n", i, i+1, Rtl8192CPHY_REGArray_Table_MP[i], Rtl8192CPHY_REGArray_Table_MP[i+1]));
+ }
+ }
+ else
+ {
+// RT_TRACE(COMP_SEND, DBG_LOUD, ("phy_ConfigBBWithMpHeaderFile(): ConfigType != BaseBand_Config_PHY_REG\n"));
+ }
+
+ return _SUCCESS;
+} /* phy_ConfigBBWithMpHeaderFile */
+
+#endif // #if (MP_DRIVER == 1)
+
+static VOID
+phy_BB8192C_Config_1T(
+ IN PADAPTER Adapter
+ )
+{
+#if 0
+ //for path - A
+ PHY_SetBBReg(Adapter, rFPGA0_TxInfo, 0x3, 0x1);
+ PHY_SetBBReg(Adapter, rFPGA1_TxInfo, 0x0303, 0x0101);
+ PHY_SetBBReg(Adapter, 0xe74, 0x0c000000, 0x1);
+ PHY_SetBBReg(Adapter, 0xe78, 0x0c000000, 0x1);
+ PHY_SetBBReg(Adapter, 0xe7c, 0x0c000000, 0x1);
+ PHY_SetBBReg(Adapter, 0xe80, 0x0c000000, 0x1);
+ PHY_SetBBReg(Adapter, 0xe88, 0x0c000000, 0x1);
+#endif
+ //for path - B
+ PHY_SetBBReg(Adapter, rFPGA0_TxInfo, 0x3, 0x2);
+ PHY_SetBBReg(Adapter, rFPGA1_TxInfo, 0x300033, 0x200022);
+
+ // 20100519 Joseph: Add for 1T2R config. Suggested by Kevin, Jenyu and Yunan.
+ PHY_SetBBReg(Adapter, rCCK0_AFESetting, bMaskByte3, 0x45);
+ PHY_SetBBReg(Adapter, rOFDM0_TRxPathEnable, bMaskByte0, 0x23);
+ PHY_SetBBReg(Adapter, rOFDM0_AGCParameter1, 0x30, 0x1); // B path first AGC
+
+ PHY_SetBBReg(Adapter, 0xe74, 0x0c000000, 0x2);
+ PHY_SetBBReg(Adapter, 0xe78, 0x0c000000, 0x2);
+ PHY_SetBBReg(Adapter, 0xe7c, 0x0c000000, 0x2);
+ PHY_SetBBReg(Adapter, 0xe80, 0x0c000000, 0x2);
+ PHY_SetBBReg(Adapter, 0xe88, 0x0c000000, 0x2);
+
+
+}
+
+// Joseph test: new initialize order!!
+// Test only!! This part need to be re-organized.
+// Now it is just for 8256.
+static int
+phy_BB8190_Config_HardCode(
+ IN PADAPTER Adapter
+ )
+{
+ //RT_ASSERT(FALSE, ("This function is not implement yet!! \n"));
+ return _SUCCESS;
+}
+
+static int
+phy_BB8723a_Config_ParaFile(
+ IN PADAPTER Adapter
+ )
+{
+ EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter);
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ int rtStatus = _SUCCESS;
+
+ u8 sz8723BBRegFile[] = RTL8723_PHY_REG;
+ u8 sz8723AGCTableFile[] = RTL8723_AGC_TAB;
+ u8 sz8723BBRegPgFile[] = RTL8723_PHY_REG_PG;
+ u8 sz8723BBRegMpFile[] = RTL8723_PHY_REG_MP;
+
+ u8 *pszBBRegFile = NULL, *pszAGCTableFile = NULL, *pszBBRegPgFile = NULL, *pszBBRegMpFile=NULL;
+
+
+ //RT_TRACE(COMP_INIT, DBG_TRACE, ("==>phy_BB8192S_Config_ParaFile\n"));
+
+ pszBBRegFile = sz8723BBRegFile ;
+ pszAGCTableFile = sz8723AGCTableFile;
+ pszBBRegPgFile = sz8723BBRegPgFile;
+ pszBBRegMpFile = sz8723BBRegMpFile;
+
+ //
+ // 1. Read PHY_REG.TXT BB INIT!!
+ // We will seperate as 88C / 92C according to chip version
+ //
+#ifdef CONFIG_EMBEDDED_FWIMG
+ #ifdef CONFIG_PHY_SETTING_WITH_ODM
+ if(HAL_STATUS_FAILURE ==ODM_ConfigBBWithHeaderFile(&pHalData->odmpriv, CONFIG_BB_PHY_REG))
+ rtStatus = _FAIL;
+ #else
+ rtStatus = phy_ConfigBBWithHeaderFile(Adapter, BaseBand_Config_PHY_REG);
+ #endif
+#else
+ // No matter what kind of CHIP we always read PHY_REG.txt. We must copy different
+ // type of parameter files to phy_reg.txt at first.
+ rtStatus = phy_ConfigBBWithParaFile(Adapter,pszBBRegFile);
+#endif//#ifdef CONFIG_EMBEDDED_FWIMG
+
+ if(rtStatus != _SUCCESS){
+ //RT_TRACE(COMP_INIT, DBG_SERIOUS, ("phy_BB8192S_Config_ParaFile():Write BB Reg Fail!!"));
+ goto phy_BB8190_Config_ParaFile_Fail;
+ }
+
+#if MP_DRIVER == 1
+ if (Adapter->registrypriv.mp_mode == 1)
+ {
+ //
+ // 1.1 Read PHY_REG_MP.TXT BB INIT!!
+ // We will seperate as 88C / 92C according to chip version
+ //
+#ifdef CONFIG_EMBEDDED_FWIMG
+ rtStatus = phy_ConfigBBWithMpHeaderFile(Adapter, BaseBand_Config_PHY_REG);
+#else
+ // No matter what kind of CHIP we always read PHY_REG.txt. We must copy different
+ // type of parameter files to phy_reg.txt at first.
+ rtStatus = phy_ConfigBBWithMpParaFile(Adapter, pszBBRegMpFile);
+#endif
+
+ if(rtStatus != _SUCCESS){
+// RT_TRACE(COMP_INIT, DBG_SERIOUS, ("phy_BB8192S_Config_ParaFile():Write BB Reg MP Fail!!"));
+ goto phy_BB8190_Config_ParaFile_Fail;
+ }
+ }
+#endif // #if (MP_DRIVER == 1)
+
+ //
+ // 20100318 Joseph: Config 2T2R to 1T2R if necessary.
+ //
+ if(pHalData->rf_type == RF_1T2R)
+ {
+ phy_BB8192C_Config_1T(Adapter);
+ DBG_8192C("phy_BB8723a_Config_ParaFile():Config to 1T!!\n");
+ }
+
+ //
+ // 2. If EEPROM or EFUSE autoload OK, We must config by PHY_REG_PG.txt
+ //
+ if (pEEPROM->bautoload_fail_flag == _FALSE)
+ {
+ pHalData->pwrGroupCnt = 0;
+
+#ifdef CONFIG_EMBEDDED_FWIMG
+ rtStatus = phy_ConfigBBWithPgHeaderFile(Adapter, BaseBand_Config_PHY_REG);
+#else
+ rtStatus = phy_ConfigBBWithPgParaFile(Adapter, pszBBRegPgFile);
+#endif
+ }
+
+ if(rtStatus != _SUCCESS){
+ //RT_TRACE(COMP_INIT, DBG_SERIOUS, ("phy_BB8192S_Config_ParaFile():BB_PG Reg Fail!!"));
+ goto phy_BB8190_Config_ParaFile_Fail;
+ }
+
+ //
+ // 3. BB AGC table Initialization
+ //
+#ifdef CONFIG_EMBEDDED_FWIMG
+ #ifdef CONFIG_PHY_SETTING_WITH_ODM
+ if(HAL_STATUS_FAILURE ==ODM_ConfigBBWithHeaderFile(&pHalData->odmpriv, CONFIG_BB_AGC_TAB))
+ rtStatus = _FAIL;
+ #else
+ rtStatus = phy_ConfigBBWithHeaderFile(Adapter, BaseBand_Config_AGC_TAB);
+ #endif//#ifdef CONFIG_PHY_SETTING_WITH_ODM
+#else
+ //RT_TRACE(COMP_INIT, DBG_LOUD, ("phy_BB8192S_Config_ParaFile AGC_TAB.txt\n"));
+ rtStatus = phy_ConfigBBWithParaFile(Adapter, pszAGCTableFile);
+#endif
+
+ if(rtStatus != _SUCCESS){
+ //RT_TRACE(COMP_FPGA, DBG_SERIOUS, ("phy_BB8192S_Config_ParaFile():AGC Table Fail\n"));
+ goto phy_BB8190_Config_ParaFile_Fail;
+ }
+
+phy_BB8190_Config_ParaFile_Fail:
+
+ return rtStatus;
+}
+
+
+int
+PHY_BBConfig8723A(
+ IN PADAPTER Adapter
+ )
+{
+ int rtStatus = _SUCCESS;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ u32 RegVal;
+ u8 TmpU1B=0;
+ u8 value8,CrystalCap;
+
+ phy_InitBBRFRegisterDefinition(Adapter);
+
+ if(IS_HARDWARE_TYPE_8723A(Adapter))
+ {
+ // Suggested by Scott. tynli_test. 2010.12.30.
+ //1. 0x28[1] = 1
+ TmpU1B = rtw_read8(Adapter, REG_AFE_PLL_CTRL);
+ rtw_udelay_os(2);
+ rtw_write8(Adapter, REG_AFE_PLL_CTRL, (TmpU1B|BIT1));
+ rtw_udelay_os(2);
+
+ //2. 0x29[7:0] = 0xFF
+ rtw_write8(Adapter, REG_AFE_PLL_CTRL+1, 0xff);
+ rtw_udelay_os(2);
+
+ //3. 0x02[1:0] = 2b'11
+ TmpU1B = rtw_read8(Adapter, REG_SYS_FUNC_EN);
+ rtw_write8(Adapter, REG_SYS_FUNC_EN, (TmpU1B|FEN_BB_GLB_RSTn|FEN_BBRSTB));
+
+ //4. 0x25[6] = 0
+ TmpU1B = rtw_read8(Adapter, REG_AFE_XTAL_CTRL+1);
+ rtw_write8(Adapter, REG_AFE_XTAL_CTRL+1, (TmpU1B&(~BIT6)));
+
+ //5. 0x24[20] = 0 //Advised by SD3 Alex Wang. 2011.02.09.
+ TmpU1B = rtw_read8(Adapter, REG_AFE_XTAL_CTRL+2);
+ rtw_write8(Adapter, REG_AFE_XTAL_CTRL+2, (TmpU1B&(~BIT4)));
+
+ //6. 0x1f[7:0] = 0x07
+ rtw_write8(Adapter, REG_RF_CTRL, 0x07);
+ }
+ else
+ {
+ // Enable BB and RF
+ RegVal = rtw_read16(Adapter, REG_SYS_FUNC_EN);
+ rtw_write16(Adapter, REG_SYS_FUNC_EN, (u16)(RegVal|BIT13|BIT0|BIT1));
+
+ // 20090923 Joseph: Advised by Steven and Jenyu. Power sequence before init RF.
+ rtw_write8(Adapter, REG_AFE_PLL_CTRL, 0x83);
+ rtw_write8(Adapter, REG_AFE_PLL_CTRL+1, 0xdb);
+
+ rtw_write8(Adapter, REG_RF_CTRL, RF_EN|RF_RSTB|RF_SDMRSTB);
+
+#ifdef CONFIG_USB_HCI
+ rtw_write8(Adapter, REG_SYS_FUNC_EN, FEN_USBA | FEN_USBD | FEN_BB_GLB_RSTn | FEN_BBRSTB);
+#else
+ rtw_write8(Adapter, REG_SYS_FUNC_EN, FEN_PPLL|FEN_PCIEA|FEN_DIO_PCIE|FEN_BB_GLB_RSTn|FEN_BBRSTB);
+#endif
+
+ // 2009/10/21 by SD1 Jong. Modified by tynli. Not in Documented in V8.1.
+#ifdef CONFIG_USB_HCI
+ //To Fix MAC loopback mode fail. Suggested by SD4 Johnny. 2010.03.23.
+ rtw_write8(Adapter, REG_LDOHCI12_CTRL, 0x0f);
+ rtw_write8(Adapter, 0x15, 0xe9);
+#endif
+
+ rtw_write8(Adapter, REG_AFE_XTAL_CTRL+1, 0x80);
+
+#ifdef CONFIG_PCI_HCI
+ // Force use left antenna by default for 88C.
+ // if(!IS_92C_SERIAL(pHalData->VersionID) || IS_92C_1T2R(pHalData->VersionID))
+ if(Adapter->ledpriv.LedStrategy != SW_LED_MODE10)
+ {
+ RegVal = rtw_read32(Adapter, REG_LEDCFG0);
+ rtw_write32(Adapter, REG_LEDCFG0, RegVal|BIT23);
+ }
+#endif
+ }
+
+ //
+ // Config BB and AGC
+ //
+ rtStatus = phy_BB8723a_Config_ParaFile(Adapter);
+
+#ifdef CONFIG_USB_HCI
+ if(IS_HARDWARE_TYPE_8192CU(Adapter)&&IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID)
+ &&(pHalData->BoardType == BOARD_USB_High_PA))
+ rtw_write8(Adapter, 0xc72, 0x50);
+#endif
+//only for B-cut
+ if(IS_HARDWARE_TYPE_8723A(Adapter) && pHalData->EEPROMVersion >= 0x01)
+ {
+ CrystalCap = pHalData->CrystalCap & 0x3F;
+ PHY_SetBBReg(Adapter, REG_MAC_PHY_CTRL, 0xFFF000, (CrystalCap | (CrystalCap << 6)));
+ }
+
+ if(IS_HARDWARE_TYPE_8723AE(Adapter))
+ PHY_SetBBReg(Adapter, REG_LDOA15_CTRL, bMaskDWord, 0x01572505);
+ return rtStatus;
+}
+
+
+int
+PHY_RFConfig8723A(
+ IN PADAPTER Adapter
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ int rtStatus = _SUCCESS;
+
+ //
+ // RF config
+ //
+ rtStatus = PHY_RF6052_Config8723A(Adapter);
+ return rtStatus;
+}
+
+
+/*-----------------------------------------------------------------------------
+ * Function: PHY_ConfigRFWithParaFile()
+ *
+ * Overview: This function read RF parameters from general file format, and do RF 3-wire
+ *
+ * Input: PADAPTER Adapter
+ * ps1Byte pFileName
+ * RF_RADIO_PATH_E eRFPath
+ *
+ * Output: NONE
+ *
+ * Return: RT_STATUS_SUCCESS: configuration file exist
+ *
+ * Note: Delay may be required for RF configuration
+ *---------------------------------------------------------------------------*/
+int
+rtl8192c_PHY_ConfigRFWithParaFile(
+ IN PADAPTER Adapter,
+ IN u8* pFileName,
+ RF_RADIO_PATH_E eRFPath
+)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+ int rtStatus = _SUCCESS;
+
+
+ return rtStatus;
+
+}
+
+//****************************************
+// The following is for High Power PA
+//****************************************
+#define HighPowerRadioAArrayLen 22
+//This is for High power PA
+u32 Rtl8192S_HighPower_RadioA_Array[HighPowerRadioAArrayLen] = {
+0x013,0x00029ea4,
+0x013,0x00025e74,
+0x013,0x00020ea4,
+0x013,0x0001ced0,
+0x013,0x00019f40,
+0x013,0x00014e70,
+0x013,0x000106a0,
+0x013,0x0000c670,
+0x013,0x000082a0,
+0x013,0x00004270,
+0x013,0x00000240,
+};
+
+int
+PHY_ConfigRFExternalPA(
+ IN PADAPTER Adapter,
+ RF_RADIO_PATH_E eRFPath
+)
+{
+ int rtStatus = _SUCCESS;
+#ifdef CONFIG_USB_HCI
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ u16 i=0;
+
+ if(!pHalData->ExternalPA)
+ {
+ return rtStatus;
+ }
+
+ // 2010/10/19 MH According to Jenyu/EEChou 's opinion, we need not to execute the
+ // same code as SU. It is already updated in radio_a_1T_HP.txt.
+#if 0
+ //add for SU High Power PA
+ for(i = 0;i<HighPowerRadioAArrayLen; i=i+2)
+ {
+ RT_TRACE(COMP_INIT, DBG_LOUD, ("External PA, write RF 0x%lx=0x%lx\n", Rtl8192S_HighPower_RadioA_Array[i], Rtl8192S_HighPower_RadioA_Array[i+1]));
+ PHY_SetRFReg(Adapter, eRFPath, Rtl8192S_HighPower_RadioA_Array[i], bRFRegOffsetMask, Rtl8192S_HighPower_RadioA_Array[i+1]);
+ }
+#endif
+
+#endif
+ return rtStatus;
+}
+//****************************************
+/*-----------------------------------------------------------------------------
+ * Function: PHY_ConfigRFWithHeaderFile()
+ *
+ * Overview: This function read RF parameters from general file format, and do RF 3-wire
+ *
+ * Input: PADAPTER Adapter
+ * ps1Byte pFileName
+ * RF_RADIO_PATH_E eRFPath
+ *
+ * Output: NONE
+ *
+ * Return: RT_STATUS_SUCCESS: configuration file exist
+ *
+ * Note: Delay may be required for RF configuration
+ *---------------------------------------------------------------------------*/
+#ifndef CONFIG_PHY_SETTING_WITH_ODM
+int
+rtl8723a_PHY_ConfigRFWithHeaderFile(
+ IN PADAPTER Adapter,
+ RF_RADIO_PATH_E eRFPath
+)
+{
+
+ int i;
+ int rtStatus = _SUCCESS;
+ u32* Rtl819XRadioA_Array_Table;
+ u32* Rtl819XRadioB_Array_Table;
+ u16 RadioA_ArrayLen,RadioB_ArrayLen;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+
+ RadioA_ArrayLen = Rtl8723_RadioA_1TArrayLength;
+ Rtl819XRadioA_Array_Table = (u32*)Rtl8723_RadioA_1TArray;
+ RadioB_ArrayLen = Rtl8723_RadioB_1TArrayLength;
+ Rtl819XRadioB_Array_Table = (u32*)Rtl8723_RadioB_1TArray;
+// RT_TRACE(COMP_INIT, DBG_LOUD, (" ===> PHY_ConfigRFWithHeaderFile() Radio_A:Rtl8723RadioA_1TArray\n"));
+// RT_TRACE(COMP_INIT, DBG_LOUD, (" ===> PHY_ConfigRFWithHeaderFile() Radio_B:Rtl8723RadioB_1TArray\n"));
+
+ switch (eRFPath)
+ {
+ case RF_PATH_A:
+ #ifdef CONFIG_IOL_RF_RF90_PATH_A
+ {
+ struct xmit_frame *xmit_frame;
+ if((xmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL) {
+ rtStatus = _FAIL;
+ goto exit;
+ }
+
+ for(i = 0;i<RadioA_ArrayLen; i=i+2)
+ {
+ if(Rtl819XRadioA_Array_Table[i] == 0xfe)
+ rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 50);
+ else if (Rtl819XRadioA_Array_Table[i] == 0xfd)
+ rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 5);
+ else if (Rtl819XRadioA_Array_Table[i] == 0xfc)
+ rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 1);
+ else if (Rtl819XRadioA_Array_Table[i] == 0xfb)
+ rtw_IOL_append_DELAY_US_cmd(xmit_frame, 50);
+ else if (Rtl819XRadioA_Array_Table[i] == 0xfa)
+ rtw_IOL_append_DELAY_US_cmd(xmit_frame, 5);
+ else if (Rtl819XRadioA_Array_Table[i] == 0xf9)
+ rtw_IOL_append_DELAY_US_cmd(xmit_frame, 1);
+ else
+ {
+ BB_REGISTER_DEFINITION_T *pPhyReg = &pHalData->PHYRegDef[eRFPath];
+ u32 NewOffset = 0;
+ u32 DataAndAddr = 0;
+
+ NewOffset = Rtl819XRadioA_Array_Table[i] & 0x3f;
+ DataAndAddr = ((NewOffset<<20) | (Rtl819XRadioA_Array_Table[i+1]&0x000fffff)) & 0x0fffffff; // T65 RF
+ rtw_IOL_append_WD_cmd(xmit_frame, pPhyReg->rf3wireOffset, DataAndAddr);
+ }
+ }
+ rtStatus = rtw_IOL_exec_cmds_sync(Adapter, xmit_frame, 1000,0);
+ }
+ #else
+ for(i = 0;i<RadioA_ArrayLen; i=i+2)
+ {
+ if(Rtl819XRadioA_Array_Table[i] == 0xfe) {
+ #ifdef CONFIG_LONG_DELAY_ISSUE
+ rtw_msleep_os(50);
+ #else
+ rtw_mdelay_os(50);
+ #endif
+ }
+ else if (Rtl819XRadioA_Array_Table[i] == 0xfd)
+ rtw_mdelay_os(5);
+ else if (Rtl819XRadioA_Array_Table[i] == 0xfc)
+ rtw_mdelay_os(1);
+ else if (Rtl819XRadioA_Array_Table[i] == 0xfb)
+ rtw_udelay_os(50);
+ else if (Rtl819XRadioA_Array_Table[i] == 0xfa)
+ rtw_udelay_os(5);
+ else if (Rtl819XRadioA_Array_Table[i] == 0xf9)
+ rtw_udelay_os(1);
+ else
+ {
+ PHY_SetRFReg(Adapter, eRFPath, Rtl819XRadioA_Array_Table[i], bRFRegOffsetMask, Rtl819XRadioA_Array_Table[i+1]);
+ // Add 1us delay between BB/RF register setting.
+ rtw_udelay_os(1);
+ }
+ }
+ #endif
+ //Add for High Power PA
+ PHY_ConfigRFExternalPA(Adapter, eRFPath);
+ break;
+ case RF_PATH_B:
+ #ifdef CONFIG_IOL_RF_RF_PATH_B
+ {
+ struct xmit_frame *xmit_frame;
+ if((xmit_frame=rtw_IOL_accquire_xmit_frame(Adapter)) == NULL) {
+ rtStatus = _FAIL;
+ goto exit;
+ }
+
+ for(i = 0;i<RadioB_ArrayLen; i=i+2)
+ {
+ if(Rtl819XRadioB_Array_Table[i] == 0xfe)
+ rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 50);
+ else if (Rtl819XRadioB_Array_Table[i] == 0xfd)
+ rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 5);
+ else if (Rtl819XRadioB_Array_Table[i] == 0xfc)
+ rtw_IOL_append_DELAY_MS_cmd(xmit_frame, 1);
+ else if (Rtl819XRadioB_Array_Table[i] == 0xfb)
+ rtw_IOL_append_DELAY_US_cmd(xmit_frame, 50);
+ else if (Rtl819XRadioB_Array_Table[i] == 0xfa)
+ rtw_IOL_append_DELAY_US_cmd(xmit_frame, 5);
+ else if (Rtl819XRadioB_Array_Table[i] == 0xf9)
+ rtw_IOL_append_DELAY_US_cmd(xmit_frame, 1);
+ else
+ {
+ BB_REGISTER_DEFINITION_T *pPhyReg = &pHalData->PHYRegDef[eRFPath];
+ u32 NewOffset = 0;
+ u32 DataAndAddr = 0;
+
+ NewOffset = Rtl819XRadioB_Array_Table[i] & 0x3f;
+ DataAndAddr = ((NewOffset<<20) | (Rtl819XRadioB_Array_Table[i+1]&0x000fffff)) & 0x0fffffff; // T65 RF
+ rtw_IOL_append_WD_cmd(xmit_frame, pPhyReg->rf3wireOffset, DataAndAddr);
+ }
+ }
+ rtStatus = rtw_IOL_exec_cmds_sync(Adapter, xmit_frame, 1000,0);
+ }
+ #else
+ for(i = 0;i<RadioB_ArrayLen; i=i+2)
+ {
+ if(Rtl819XRadioB_Array_Table[i] == 0xfe)
+ { // Deay specific ms. Only RF configuration require delay.
+#if 0//#ifdef CONFIG_USB_HCI
+ #ifdef CONFIG_LONG_DELAY_ISSUE
+ rtw_msleep_os(1000);
+ #else
+ rtw_mdelay_os(1000);
+ #endif
+#else
+ #ifdef CONFIG_LONG_DELAY_ISSUE
+ rtw_msleep_os(50);
+ #else
+ rtw_mdelay_os(50);
+ #endif
+#endif
+ }
+ else if (Rtl819XRadioB_Array_Table[i] == 0xfd)
+ rtw_mdelay_os(5);
+ else if (Rtl819XRadioB_Array_Table[i] == 0xfc)
+ rtw_mdelay_os(1);
+ else if (Rtl819XRadioB_Array_Table[i] == 0xfb)
+ rtw_udelay_os(50);
+ else if (Rtl819XRadioB_Array_Table[i] == 0xfa)
+ rtw_udelay_os(5);
+ else if (Rtl819XRadioB_Array_Table[i] == 0xf9)
+ rtw_udelay_os(1);
+ else
+ {
+ PHY_SetRFReg(Adapter, eRFPath, Rtl819XRadioB_Array_Table[i], bRFRegOffsetMask, Rtl819XRadioB_Array_Table[i+1]);
+ // Add 1us delay between BB/RF register setting.
+ rtw_udelay_os(1);
+ }
+ }
+ #endif
+ break;
+ case RF_PATH_C:
+ break;
+ case RF_PATH_D:
+ break;
+ }
+
+exit:
+ return rtStatus;
+
+}
+#endif
+
+/*-----------------------------------------------------------------------------
+ * Function: PHY_CheckBBAndRFOK()
+ *
+ * Overview: This function is write register and then readback to make sure whether
+ * BB[PHY0, PHY1], RF[Patha, path b, path c, path d] is Ok
+ *
+ * Input: PADAPTER Adapter
+ * HW90_BLOCK_E CheckBlock
+ * RF_RADIO_PATH_E eRFPath // it is used only when CheckBlock is HW90_BLOCK_RF
+ *
+ * Output: NONE
+ *
+ * Return: RT_STATUS_SUCCESS: PHY is OK
+ *
+ * Note: This function may be removed in the ASIC
+ *---------------------------------------------------------------------------*/
+int
+PHY_CheckBBAndRFOK(
+ IN PADAPTER Adapter,
+ IN HW90_BLOCK_E CheckBlock,
+ IN RF_RADIO_PATH_E eRFPath
+ )
+{
+ int rtStatus = _SUCCESS;
+
+ u32 i, CheckTimes = 4,ulRegRead = 0;
+
+ u32 WriteAddr[4];
+ u32 WriteData[] = {0xfffff027, 0xaa55a02f, 0x00000027, 0x55aa502f};
+
+ // Initialize register address offset to be checked
+ WriteAddr[HW90_BLOCK_MAC] = 0x100;
+ WriteAddr[HW90_BLOCK_PHY0] = 0x900;
+ WriteAddr[HW90_BLOCK_PHY1] = 0x800;
+ WriteAddr[HW90_BLOCK_RF] = 0x3;
+
+ for(i=0 ; i < CheckTimes ; i++)
+ {
+
+ //
+ // Write Data to register and readback
+ //
+ switch(CheckBlock)
+ {
+ case HW90_BLOCK_MAC:
+ //RT_ASSERT(FALSE, ("PHY_CheckBBRFOK(): Never Write 0x100 here!"));
+ //RT_TRACE(COMP_INIT, DBG_LOUD, ("PHY_CheckBBRFOK(): Never Write 0x100 here!\n"));
+ break;
+
+ case HW90_BLOCK_PHY0:
+ case HW90_BLOCK_PHY1:
+ rtw_write32(Adapter, WriteAddr[CheckBlock], WriteData[i]);
+ ulRegRead = rtw_read32(Adapter, WriteAddr[CheckBlock]);
+ break;
+
+ case HW90_BLOCK_RF:
+ // When initialization, we want the delay function(delay_ms(), delay_us()
+ // ==> actually we call PlatformStallExecution()) to do NdisStallExecution()
+ // [busy wait] instead of NdisMSleep(). So we acquire RT_INITIAL_SPINLOCK
+ // to run at Dispatch level to achive it.
+ //cosa PlatformAcquireSpinLock(Adapter, RT_INITIAL_SPINLOCK);
+ WriteData[i] &= 0xfff;
+ PHY_SetRFReg(Adapter, eRFPath, WriteAddr[HW90_BLOCK_RF], bRFRegOffsetMask, WriteData[i]);
+ // TODO: we should not delay for such a long time. Ask SD3
+ rtw_mdelay_os(10);
+ ulRegRead = PHY_QueryRFReg(Adapter, eRFPath, WriteAddr[HW90_BLOCK_RF], bMaskDWord);
+ rtw_mdelay_os(10);
+ //cosa PlatformReleaseSpinLock(Adapter, RT_INITIAL_SPINLOCK);
+ break;
+
+ default:
+ rtStatus = _FAIL;
+ break;
+ }
+
+
+ //
+ // Check whether readback data is correct
+ //
+ if(ulRegRead != WriteData[i])
+ {
+ //RT_TRACE(COMP_FPGA, DBG_LOUD, ("ulRegRead: %lx, WriteData: %lx \n", ulRegRead, WriteData[i]));
+ rtStatus = _FAIL;
+ break;
+ }
+ }
+
+ return rtStatus;
+}
+
+
+VOID
+rtl8192c_PHY_GetHWRegOriginalValue(
+ IN PADAPTER Adapter
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+ // read rx initial gain
+ pHalData->DefaultInitialGain[0] = (u8)PHY_QueryBBReg(Adapter, rOFDM0_XAAGCCore1, bMaskByte0);
+ pHalData->DefaultInitialGain[1] = (u8)PHY_QueryBBReg(Adapter, rOFDM0_XBAGCCore1, bMaskByte0);
+ pHalData->DefaultInitialGain[2] = (u8)PHY_QueryBBReg(Adapter, rOFDM0_XCAGCCore1, bMaskByte0);
+ pHalData->DefaultInitialGain[3] = (u8)PHY_QueryBBReg(Adapter, rOFDM0_XDAGCCore1, bMaskByte0);
+ //RT_TRACE(COMP_INIT, DBG_LOUD,
+ //("Default initial gain (c50=0x%x, c58=0x%x, c60=0x%x, c68=0x%x) \n",
+ //pHalData->DefaultInitialGain[0], pHalData->DefaultInitialGain[1],
+ //pHalData->DefaultInitialGain[2], pHalData->DefaultInitialGain[3]));
+
+ // read framesync
+ pHalData->framesync = (u8)PHY_QueryBBReg(Adapter, rOFDM0_RxDetector3, bMaskByte0);
+ pHalData->framesyncC34 = PHY_QueryBBReg(Adapter, rOFDM0_RxDetector2, bMaskDWord);
+ //RT_TRACE(COMP_INIT, DBG_LOUD, ("Default framesync (0x%x) = 0x%x \n",
+ // rOFDM0_RxDetector3, pHalData->framesync));
+}
+
+
+//
+// Description:
+// Map dBm into Tx power index according to
+// current HW model, for example, RF and PA, and
+// current wireless mode.
+// By Bruce, 2008-01-29.
+//
+static u8
+phy_DbmToTxPwrIdx(
+ IN PADAPTER Adapter,
+ IN WIRELESS_MODE WirelessMode,
+ IN int PowerInDbm
+ )
+{
+ u8 TxPwrIdx = 0;
+ int Offset = 0;
+
+
+ //
+ // Tested by MP, we found that CCK Index 0 equals to 8dbm, OFDM legacy equals to
+ // 3dbm, and OFDM HT equals to 0dbm repectively.
+ // Note:
+ // The mapping may be different by different NICs. Do not use this formula for what needs accurate result.
+ // By Bruce, 2008-01-29.
+ //
+ switch(WirelessMode)
+ {
+ case WIRELESS_MODE_B:
+ Offset = -7;
+ break;
+
+ case WIRELESS_MODE_G:
+ case WIRELESS_MODE_N_24G:
+ Offset = -8;
+ break;
+ default:
+ Offset = -8;
+ break;
+ }
+
+ if((PowerInDbm - Offset) > 0)
+ {
+ TxPwrIdx = (u8)((PowerInDbm - Offset) * 2);
+ }
+ else
+ {
+ TxPwrIdx = 0;
+ }
+
+ // Tx Power Index is too large.
+ if(TxPwrIdx > MAX_TXPWR_IDX_NMODE_92S)
+ TxPwrIdx = MAX_TXPWR_IDX_NMODE_92S;
+
+ return TxPwrIdx;
+}
+
+//
+// Description:
+// Map Tx power index into dBm according to
+// current HW model, for example, RF and PA, and
+// current wireless mode.
+// By Bruce, 2008-01-29.
+//
+int
+phy_TxPwrIdxToDbm(
+ IN PADAPTER Adapter,
+ IN WIRELESS_MODE WirelessMode,
+ IN u8 TxPwrIdx
+ )
+{
+ int Offset = 0;
+ int PwrOutDbm = 0;
+
+ //
+ // Tested by MP, we found that CCK Index 0 equals to -7dbm, OFDM legacy equals to -8dbm.
+ // Note:
+ // The mapping may be different by different NICs. Do not use this formula for what needs accurate result.
+ // By Bruce, 2008-01-29.
+ //
+ switch(WirelessMode)
+ {
+ case WIRELESS_MODE_B:
+ Offset = -7;
+ break;
+
+ case WIRELESS_MODE_G:
+ case WIRELESS_MODE_N_24G:
+ Offset = -8;
+ default:
+ Offset = -8;
+ break;
+ }
+
+ PwrOutDbm = TxPwrIdx / 2 + Offset; // Discard the decimal part.
+
+ return PwrOutDbm;
+}
+
+
+/*-----------------------------------------------------------------------------
+ * Function: GetTxPowerLevel8190()
+ *
+ * Overview: This function is export to "common" moudule
+ *
+ * Input: PADAPTER Adapter
+ * psByte Power Level
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ *---------------------------------------------------------------------------*/
+VOID
+PHY_GetTxPowerLevel8192C(
+ IN PADAPTER Adapter,
+ OUT u32* powerlevel
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ u8 TxPwrLevel = 0;
+ int TxPwrDbm;
+
+ //
+ // Because the Tx power indexes are different, we report the maximum of them to
+ // meet the CCX TPC request. By Bruce, 2008-01-31.
+ //
+
+ // CCK
+ TxPwrLevel = pHalData->CurrentCckTxPwrIdx;
+ TxPwrDbm = phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_B, TxPwrLevel);
+
+ // Legacy OFDM
+ TxPwrLevel = pHalData->CurrentOfdm24GTxPwrIdx + pHalData->LegacyHTTxPowerDiff;
+
+ // Compare with Legacy OFDM Tx power.
+ if(phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_G, TxPwrLevel) > TxPwrDbm)
+ TxPwrDbm = phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_G, TxPwrLevel);
+
+ // HT OFDM
+ TxPwrLevel = pHalData->CurrentOfdm24GTxPwrIdx;
+
+ // Compare with HT OFDM Tx power.
+ if(phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_N_24G, TxPwrLevel) > TxPwrDbm)
+ TxPwrDbm = phy_TxPwrIdxToDbm(Adapter, WIRELESS_MODE_N_24G, TxPwrLevel);
+
+ *powerlevel = TxPwrDbm;
+}
+
+
+static void getTxPowerIndex(
+ IN PADAPTER Adapter,
+ IN u8 channel,
+ IN OUT u8* cckPowerLevel,
+ IN OUT u8* ofdmPowerLevel
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ u8 index = (channel -1);
+ // 1. CCK
+ cckPowerLevel[RF_PATH_A] = pHalData->TxPwrLevelCck[RF_PATH_A][index]; //RF-A
+ cckPowerLevel[RF_PATH_B] = pHalData->TxPwrLevelCck[RF_PATH_B][index]; //RF-B
+
+ // 2. OFDM for 1S or 2S
+ if (GET_RF_TYPE(Adapter) == RF_1T2R || GET_RF_TYPE(Adapter) == RF_1T1R)
+ {
+ // Read HT 40 OFDM TX power
+ ofdmPowerLevel[RF_PATH_A] = pHalData->TxPwrLevelHT40_1S[RF_PATH_A][index];
+ ofdmPowerLevel[RF_PATH_B] = pHalData->TxPwrLevelHT40_1S[RF_PATH_B][index];
+ }
+ else if (GET_RF_TYPE(Adapter) == RF_2T2R)
+ {
+ // Read HT 40 OFDM TX power
+ ofdmPowerLevel[RF_PATH_A] = pHalData->TxPwrLevelHT40_2S[RF_PATH_A][index];
+ ofdmPowerLevel[RF_PATH_B] = pHalData->TxPwrLevelHT40_2S[RF_PATH_B][index];
+ }
+ //RTPRINT(FPHY, PHY_TXPWR, ("Channel-%d, set tx power index !!\n", channel));
+}
+
+static void ccxPowerIndexCheck(
+ IN PADAPTER Adapter,
+ IN u8 channel,
+ IN OUT u8* cckPowerLevel,
+ IN OUT u8* ofdmPowerLevel
+ )
+{
+#if 0
+ PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo);
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ PRT_CCX_INFO pCcxInfo = GET_CCX_INFO(pMgntInfo);
+
+ //
+ // CCX 2 S31, AP control of client transmit power:
+ // 1. We shall not exceed Cell Power Limit as possible as we can.
+ // 2. Tolerance is +/- 5dB.
+ // 3. 802.11h Power Contraint takes higher precedence over CCX Cell Power Limit.
+ //
+ // TODO:
+ // 1. 802.11h power contraint
+ //
+ // 071011, by rcnjko.
+ //
+ if( pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE &&
+ pMgntInfo->mAssoc &&
+ pCcxInfo->bUpdateCcxPwr &&
+ pCcxInfo->bWithCcxCellPwr &&
+ channel == pMgntInfo->dot11CurrentChannelNumber)
+ {
+ u1Byte CckCellPwrIdx = phy_DbmToTxPwrIdx(Adapter, WIRELESS_MODE_B, pCcxInfo->CcxCellPwr);
+ u1Byte LegacyOfdmCellPwrIdx = phy_DbmToTxPwrIdx(Adapter, WIRELESS_MODE_G, pCcxInfo->CcxCellPwr);
+ u1Byte OfdmCellPwrIdx = phy_DbmToTxPwrIdx(Adapter, WIRELESS_MODE_N_24G, pCcxInfo->CcxCellPwr);
+
+ RT_TRACE(COMP_TXAGC, DBG_LOUD,
+ ("CCX Cell Limit: %d dbm => CCK Tx power index : %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",
+ pCcxInfo->CcxCellPwr, CckCellPwrIdx, LegacyOfdmCellPwrIdx, OfdmCellPwrIdx));
+ RT_TRACE(COMP_TXAGC, DBG_LOUD,
+ ("EEPROM channel(%d) => CCK Tx power index: %d, Legacy OFDM Tx power index : %d, OFDM Tx power index: %d\n",
+ channel, cckPowerLevel[0], ofdmPowerLevel[0] + pHalData->LegacyHTTxPowerDiff, ofdmPowerLevel[0]));
+
+ // CCK
+ if(cckPowerLevel[0] > CckCellPwrIdx)
+ cckPowerLevel[0] = CckCellPwrIdx;
+ // Legacy OFDM, HT OFDM
+ if(ofdmPowerLevel[0] + pHalData->LegacyHTTxPowerDiff > LegacyOfdmCellPwrIdx)
+ {
+ if((OfdmCellPwrIdx - pHalData->LegacyHTTxPowerDiff) > 0)
+ {
+ ofdmPowerLevel[0] = OfdmCellPwrIdx - pHalData->LegacyHTTxPowerDiff;
+ }
+ else
+ {
+ ofdmPowerLevel[0] = 0;
+ }
+ }
+
+ RT_TRACE(COMP_TXAGC, DBG_LOUD,
+ ("Altered CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n",
+ cckPowerLevel[0], ofdmPowerLevel[0] + pHalData->LegacyHTTxPowerDiff, ofdmPowerLevel[0]));
+ }
+
+ pHalData->CurrentCckTxPwrIdx = cckPowerLevel[0];
+ pHalData->CurrentOfdm24GTxPwrIdx = ofdmPowerLevel[0];
+
+ RT_TRACE(COMP_TXAGC, DBG_LOUD,
+ ("PHY_SetTxPowerLevel8192S(): CCK Tx power index : %d, Legacy OFDM Tx power index: %d, OFDM Tx power index: %d\n",
+ cckPowerLevel[0], ofdmPowerLevel[0] + pHalData->LegacyHTTxPowerDiff, ofdmPowerLevel[0]));
+#endif
+}
+/*-----------------------------------------------------------------------------
+ * Function: SetTxPowerLevel8190()
+ *
+ * Overview: This function is export to "HalCommon" moudule
+ * We must consider RF path later!!!!!!!
+ *
+ * Input: PADAPTER Adapter
+ * u1Byte channel
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ * 2008/11/04 MHC We remove EEPROM_93C56.
+ * We need to move CCX relative code to independet file.
+ * 2009/01/21 MHC Support new EEPROM format from SD3 requirement.
+ *
+ *---------------------------------------------------------------------------*/
+VOID
+PHY_SetTxPowerLevel8192C(
+ IN PADAPTER Adapter,
+ IN u8 channel
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ u8 cckPowerLevel[2], ofdmPowerLevel[2]; // [0]:RF-A, [1]:RF-B
+/*
+#if(MP_DRIVER == 1)
+ if (Adapter->registrypriv.mp_mode == 1)
+ return;
+#endif
+*/
+ if(pHalData->bTXPowerDataReadFromEEPORM == _FALSE)
+ return;
+
+ getTxPowerIndex(Adapter, channel, &cckPowerLevel[0], &ofdmPowerLevel[0]);
+ //RTPRINT(FPHY, PHY_TXPWR, ("Channel-%d, cckPowerLevel (A / B) = 0x%x / 0x%x, ofdmPowerLevel (A / B) = 0x%x / 0x%x\n",
+ // channel, cckPowerLevel[0], cckPowerLevel[1], ofdmPowerLevel[0], ofdmPowerLevel[1]));
+
+ ccxPowerIndexCheck(Adapter, channel, &cckPowerLevel[0], &ofdmPowerLevel[0]);
+
+ rtl8192c_PHY_RF6052SetCckTxPower(Adapter, &cckPowerLevel[0]);
+ rtl8192c_PHY_RF6052SetOFDMTxPower(Adapter, &ofdmPowerLevel[0], channel);
+
+#if 0
+ switch(pHalData->rf_chip)
+ {
+ case RF_8225:
+ PHY_SetRF8225CckTxPower(Adapter, cckPowerLevel[0]);
+ PHY_SetRF8225OfdmTxPower(Adapter, ofdmPowerLevel[0]);
+ break;
+
+ case RF_8256:
+ PHY_SetRF8256CCKTxPower(Adapter, cckPowerLevel[0]);
+ PHY_SetRF8256OFDMTxPower(Adapter, ofdmPowerLevel[0]);
+ break;
+
+ case RF_6052:
+ PHY_RF6052SetCckTxPower(Adapter, &cckPowerLevel[0]);
+ PHY_RF6052SetOFDMTxPower(Adapter, &ofdmPowerLevel[0], channel);
+ break;
+
+ case RF_8258:
+ break;
+ }
+#endif
+
+}
+
+
+//
+// Description:
+// Update transmit power level of all channel supported.
+//
+// TODO:
+// A mode.
+// By Bruce, 2008-02-04.
+//
+BOOLEAN
+PHY_UpdateTxPowerDbm8192C(
+ IN PADAPTER Adapter,
+ IN int powerInDbm
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ u8 idx;
+ u8 rf_path;
+
+ // TODO: A mode Tx power.
+ u8 CckTxPwrIdx = phy_DbmToTxPwrIdx(Adapter, WIRELESS_MODE_B, powerInDbm);
+ u8 OfdmTxPwrIdx = phy_DbmToTxPwrIdx(Adapter, WIRELESS_MODE_N_24G, powerInDbm);
+
+ if(OfdmTxPwrIdx - pHalData->LegacyHTTxPowerDiff > 0)
+ OfdmTxPwrIdx -= pHalData->LegacyHTTxPowerDiff;
+ else
+ OfdmTxPwrIdx = 0;
+
+ //RT_TRACE(COMP_TXAGC, DBG_LOUD, ("PHY_UpdateTxPowerDbm8192S(): %ld dBm , CckTxPwrIdx = %d, OfdmTxPwrIdx = %d\n", powerInDbm, CckTxPwrIdx, OfdmTxPwrIdx));
+
+ for(idx = 0; idx < 14; idx++)
+ {
+ for (rf_path = 0; rf_path < 2; rf_path++)
+ {
+ pHalData->TxPwrLevelCck[rf_path][idx] = CckTxPwrIdx;
+ pHalData->TxPwrLevelHT40_1S[rf_path][idx] =
+ pHalData->TxPwrLevelHT40_2S[rf_path][idx] = OfdmTxPwrIdx;
+ }
+ }
+
+ //Adapter->HalFunc.SetTxPowerLevelHandler(Adapter, pHalData->CurrentChannel);//gtest:todo
+
+ return _TRUE;
+}
+
+
+/*
+ Description:
+ When beacon interval is changed, the values of the
+ hw registers should be modified.
+ By tynli, 2008.10.24.
+
+*/
+
+
+void
+rtl8192c_PHY_SetBeaconHwReg(
+ IN PADAPTER Adapter,
+ IN u16 BeaconInterval
+ )
+{
+
+}
+
+
+VOID
+PHY_ScanOperationBackup8192C(
+ IN PADAPTER Adapter,
+ IN u8 Operation
+ )
+{
+#if 0
+ IO_TYPE IoType;
+
+ if(!Adapter->bDriverStopped)
+ {
+ switch(Operation)
+ {
+ case SCAN_OPT_BACKUP:
+ IoType = IO_CMD_PAUSE_DM_BY_SCAN;
+ rtw_hal_set_hwreg(Adapter,HW_VAR_IO_CMD, (pu1Byte)&IoType);
+
+ break;
+
+ case SCAN_OPT_RESTORE:
+ IoType = IO_CMD_RESUME_DM_BY_SCAN;
+ rtw_hal_set_hwreg(Adapter,HW_VAR_IO_CMD, (pu1Byte)&IoType);
+ break;
+
+ default:
+ RT_TRACE(COMP_SCAN, DBG_LOUD, ("Unknown Scan Backup Operation. \n"));
+ break;
+ }
+ }
+#endif
+}
+
+/*-----------------------------------------------------------------------------
+ * Function: PHY_SetBWModeCallback8192C()
+ *
+ * Overview: Timer callback function for SetSetBWMode
+ *
+ * Input: PRT_TIMER pTimer
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Note: (1) We do not take j mode into consideration now
+ * (2) Will two workitem of "switch channel" and "switch channel bandwidth" run
+ * concurrently?
+ *---------------------------------------------------------------------------*/
+static VOID
+_PHY_SetBWMode92C(
+ IN PADAPTER Adapter
+)
+{
+// PADAPTER Adapter = (PADAPTER)pTimer->Adapter;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ u8 regBwOpMode;
+ u8 regRRSR_RSC;
+
+ //return;
+
+ // Added it for 20/40 mhz switch time evaluation by guangan 070531
+ //u4Byte NowL, NowH;
+ //u8Byte BeginTime, EndTime;
+
+ /*RT_TRACE(COMP_SCAN, DBG_LOUD, ("==>PHY_SetBWModeCallback8192C() Switch to %s bandwidth\n", \
+ pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_20?"20MHz":"40MHz"))*/
+
+ if(pHalData->rf_chip == RF_PSEUDO_11N)
+ {
+ //pHalData->SetBWModeInProgress= _FALSE;
+ return;
+ }
+
+ // There is no 40MHz mode in RF_8225.
+ if(pHalData->rf_chip==RF_8225)
+ return;
+
+ if(Adapter->bDriverStopped)
+ return;
+
+ // Added it for 20/40 mhz switch time evaluation by guangan 070531
+ //NowL = PlatformEFIORead4Byte(Adapter, TSFR);
+ //NowH = PlatformEFIORead4Byte(Adapter, TSFR+4);
+ //BeginTime = ((u8Byte)NowH << 32) + NowL;
+
+ //3//
+ //3//<1>Set MAC register
+ //3//
+ //Adapter->HalFunc.SetBWModeHandler();
+
+ regBwOpMode = rtw_read8(Adapter, REG_BWOPMODE);
+ regRRSR_RSC = rtw_read8(Adapter, REG_RRSR+2);
+ //regBwOpMode = rtw_hal_get_hwreg(Adapter,HW_VAR_BWMODE,(pu1Byte)&regBwOpMode);
+
+ switch(pHalData->CurrentChannelBW)
+ {
+ case HT_CHANNEL_WIDTH_20:
+ regBwOpMode |= BW_OPMODE_20MHZ;
+ // 2007/02/07 Mark by Emily becasue we have not verify whether this register works
+ rtw_write8(Adapter, REG_BWOPMODE, regBwOpMode);
+ break;
+
+ case HT_CHANNEL_WIDTH_40:
+ regBwOpMode &= ~BW_OPMODE_20MHZ;
+ // 2007/02/07 Mark by Emily becasue we have not verify whether this register works
+ rtw_write8(Adapter, REG_BWOPMODE, regBwOpMode);
+
+ regRRSR_RSC = (regRRSR_RSC&0x90) |(pHalData->nCur40MhzPrimeSC<<5);
+ rtw_write8(Adapter, REG_RRSR+2, regRRSR_RSC);
+ break;
+
+ default:
+ /*RT_TRACE(COMP_DBG, DBG_LOUD, ("PHY_SetBWModeCallback8192C():
+ unknown Bandwidth: %#X\n",pHalData->CurrentChannelBW));*/
+ break;
+ }
+
+ //3//
+ //3//<2>Set PHY related register
+ //3//
+ switch(pHalData->CurrentChannelBW)
+ {
+ /* 20 MHz channel*/
+ case HT_CHANNEL_WIDTH_20:
+ PHY_SetBBReg(Adapter, rFPGA0_RFMOD, bRFMOD, 0x0);
+ PHY_SetBBReg(Adapter, rFPGA1_RFMOD, bRFMOD, 0x0);
+ PHY_SetBBReg(Adapter, rFPGA0_AnalogParameter2, BIT10, 1);
+
+ break;
+
+
+ /* 40 MHz channel*/
+ case HT_CHANNEL_WIDTH_40:
+ PHY_SetBBReg(Adapter, rFPGA0_RFMOD, bRFMOD, 0x1);
+ PHY_SetBBReg(Adapter, rFPGA1_RFMOD, bRFMOD, 0x1);
+
+ // Set Control channel to upper or lower. These settings are required only for 40MHz
+ PHY_SetBBReg(Adapter, rCCK0_System, bCCKSideBand, (pHalData->nCur40MhzPrimeSC>>1));
+ PHY_SetBBReg(Adapter, rOFDM1_LSTF, 0xC00, pHalData->nCur40MhzPrimeSC);
+ PHY_SetBBReg(Adapter, rFPGA0_AnalogParameter2, BIT10, 0);
+
+ PHY_SetBBReg(Adapter, 0x818, (BIT26|BIT27), (pHalData->nCur40MhzPrimeSC==HAL_PRIME_CHNL_OFFSET_LOWER)?2:1);
+
+ break;
+
+
+
+ default:
+ /*RT_TRACE(COMP_DBG, DBG_LOUD, ("PHY_SetBWModeCallback8192C(): unknown Bandwidth: %#X\n"\
+ ,pHalData->CurrentChannelBW));*/
+ break;
+
+ }
+ //Skip over setting of J-mode in BB register here. Default value is "None J mode". Emily 20070315
+
+ // Added it for 20/40 mhz switch time evaluation by guangan 070531
+ //NowL = PlatformEFIORead4Byte(Adapter, TSFR);
+ //NowH = PlatformEFIORead4Byte(Adapter, TSFR+4);
+ //EndTime = ((u8Byte)NowH << 32) + NowL;
+ //RT_TRACE(COMP_SCAN, DBG_LOUD, ("SetBWModeCallback8190Pci: time of SetBWMode = %I64d us!\n", (EndTime - BeginTime)));
+
+ //3<3>Set RF related register
+ switch(pHalData->rf_chip)
+ {
+ case RF_8225:
+ //PHY_SetRF8225Bandwidth(Adapter, pHalData->CurrentChannelBW);
+ break;
+
+ case RF_8256:
+ // Please implement this function in Hal8190PciPhy8256.c
+ //PHY_SetRF8256Bandwidth(Adapter, pHalData->CurrentChannelBW);
+ break;
+
+ case RF_8258:
+ // Please implement this function in Hal8190PciPhy8258.c
+ // PHY_SetRF8258Bandwidth();
+ break;
+
+ case RF_PSEUDO_11N:
+ // Do Nothing
+ break;
+
+ case RF_6052:
+ rtl8192c_PHY_RF6052SetBandwidth(Adapter, pHalData->CurrentChannelBW);
+ break;
+
+ default:
+ //RT_ASSERT(FALSE, ("Unknown RFChipID: %d\n", pHalData->RFChipID));
+ break;
+ }
+
+ //pHalData->SetBWModeInProgress= FALSE;
+
+ //RT_TRACE(COMP_SCAN, DBG_LOUD, ("<==PHY_SetBWModeCallback8192C() \n" ));
+}
+
+
+ /*-----------------------------------------------------------------------------
+ * Function: SetBWMode8190Pci()
+ *
+ * Overview: This function is export to "HalCommon" moudule
+ *
+ * Input: PADAPTER Adapter
+ * HT_CHANNEL_WIDTH Bandwidth //20M or 40M
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Note: We do not take j mode into consideration now
+ *---------------------------------------------------------------------------*/
+VOID
+PHY_SetBWMode8192C(
+ IN PADAPTER Adapter,
+ IN HT_CHANNEL_WIDTH Bandwidth, // 20M or 40M
+ IN unsigned char Offset // Upper, Lower, or Don't care
+)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ HT_CHANNEL_WIDTH tmpBW= pHalData->CurrentChannelBW;
+ // Modified it for 20/40 mhz switch by guangan 070531
+ //PMGNT_INFO pMgntInfo=&Adapter->MgntInfo;
+
+ //return;
+
+ //if(pHalData->SwChnlInProgress)
+// if(pMgntInfo->bScanInProgress)
+// {
+// RT_TRACE(COMP_SCAN, DBG_LOUD, ("PHY_SetBWMode8192C() %s Exit because bScanInProgress!\n",
+// Bandwidth == HT_CHANNEL_WIDTH_20?"20MHz":"40MHz"));
+// return;
+// }
+
+// if(pHalData->SetBWModeInProgress)
+// {
+// // Modified it for 20/40 mhz switch by guangan 070531
+// RT_TRACE(COMP_SCAN, DBG_LOUD, ("PHY_SetBWMode8192C() %s cancel last timer because SetBWModeInProgress!\n",
+// Bandwidth == HT_CHANNEL_WIDTH_20?"20MHz":"40MHz"));
+// PlatformCancelTimer(Adapter, &pHalData->SetBWModeTimer);
+// //return;
+// }
+
+ //if(pHalData->SetBWModeInProgress)
+ // return;
+
+ //pHalData->SetBWModeInProgress= TRUE;
+
+ pHalData->CurrentChannelBW = Bandwidth;
+
+#if 0
+ if(Offset==HT_EXTCHNL_OFFSET_LOWER)
+ pHalData->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_UPPER;
+ else if(Offset==HT_EXTCHNL_OFFSET_UPPER)
+ pHalData->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_LOWER;
+ else
+ pHalData->nCur40MhzPrimeSC = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
+#else
+ pHalData->nCur40MhzPrimeSC = Offset;
+#endif
+
+ if((!Adapter->bDriverStopped) && (!Adapter->bSurpriseRemoved))
+ {
+
+ #if 0
+ //PlatformSetTimer(Adapter, &(pHalData->SetBWModeTimer), 0);
+ #else
+ _PHY_SetBWMode92C(Adapter);
+ #endif
+
+ }
+ else
+ {
+ //RT_TRACE(COMP_SCAN, DBG_LOUD, ("PHY_SetBWMode8192C() SetBWModeInProgress FALSE driver sleep or unload\n"));
+ //pHalData->SetBWModeInProgress= FALSE;
+ pHalData->CurrentChannelBW = tmpBW;
+ }
+
+}
+
+
+static void _PHY_SwChnl8192C(PADAPTER Adapter, u8 channel)
+{
+ u8 eRFPath;
+ u32 param1, param2;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+ if ( Adapter->bNotifyChannelChange )
+ {
+ DBG_871X( "[%s] ch = %d\n", __FUNCTION__, channel );
+ }
+
+ //s1. pre common command - CmdID_SetTxPowerLevel
+ PHY_SetTxPowerLevel8192C(Adapter, channel);
+
+ //s2. RF dependent command - CmdID_RF_WriteReg, param1=RF_CHNLBW, param2=channel
+ param1 = RF_CHNLBW;
+ param2 = channel;
+ for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
+ {
+ pHalData->RfRegChnlVal[eRFPath] = ((pHalData->RfRegChnlVal[eRFPath] & 0xfffffc00) | param2);
+ PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, param1, bRFRegOffsetMask, pHalData->RfRegChnlVal[eRFPath]);
+ }
+
+ if(channel >= 1 && channel <= 9)
+ {
+ //DBG_8192C("phy_SwitchRfSetting8723A REG_AFE_PLL_CTRL 0xF0FFFF83\n");
+ PHY_SetBBReg(Adapter, REG_AFE_PLL_CTRL, bMaskDWord, 0xF0FFFF83);
+ }
+ else if (channel >= 10 && channel <= 14)
+ {
+ //DBG_8192C("phy_SwitchRfSetting8723A REG_AFE_PLL_CTRL 0xF2FFFF83\n");
+ PHY_SetBBReg(Adapter, REG_AFE_PLL_CTRL, bMaskDWord, 0xF2FFFF83);
+ }
+ //s3. post common command - CmdID_End, None
+
+}
+
+VOID
+PHY_SwChnl8192C( // Call after initialization
+ IN PADAPTER Adapter,
+ IN u8 channel
+ )
+{
+ //PADAPTER Adapter = ADJUST_TO_ADAPTIVE_ADAPTER(pAdapter, _TRUE);
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ u8 tmpchannel = pHalData->CurrentChannel;
+ BOOLEAN bResult = _TRUE;
+
+ if(pHalData->rf_chip == RF_PSEUDO_11N)
+ {
+ //pHalData->SwChnlInProgress=FALSE;
+ return; //return immediately if it is peudo-phy
+ }
+
+ //if(pHalData->SwChnlInProgress)
+ // return;
+
+ //if(pHalData->SetBWModeInProgress)
+ // return;
+
+ //--------------------------------------------
+ switch(pHalData->CurrentWirelessMode)
+ {
+ case WIRELESS_MODE_A:
+ case WIRELESS_MODE_N_5G:
+ //RT_ASSERT((channel>14), ("WIRELESS_MODE_A but channel<=14"));
+ break;
+
+ case WIRELESS_MODE_B:
+ //RT_ASSERT((channel<=14), ("WIRELESS_MODE_B but channel>14"));
+ break;
+
+ case WIRELESS_MODE_G:
+ case WIRELESS_MODE_N_24G:
+ //RT_ASSERT((channel<=14), ("WIRELESS_MODE_G but channel>14"));
+ break;
+
+ default:
+ //RT_ASSERT(FALSE, ("Invalid WirelessMode(%#x)!!\n", pHalData->CurrentWirelessMode));
+ break;
+ }
+ //--------------------------------------------
+
+ //pHalData->SwChnlInProgress = TRUE;
+ if(channel == 0)
+ channel = 1;
+
+ pHalData->CurrentChannel=channel;
+
+ //pHalData->SwChnlStage=0;
+ //pHalData->SwChnlStep=0;
+
+ if((!Adapter->bDriverStopped) && (!Adapter->bSurpriseRemoved))
+ {
+
+ #if 0
+ //PlatformSetTimer(Adapter, &(pHalData->SwChnlTimer), 0);
+ #else
+ _PHY_SwChnl8192C(Adapter, channel);
+ #endif
+
+ if(bResult)
+ {
+ //RT_TRACE(COMP_SCAN, DBG_LOUD, ("PHY_SwChnl8192C SwChnlInProgress TRUE schdule workitem done\n"));
+ }
+ else
+ {
+ //RT_TRACE(COMP_SCAN, DBG_LOUD, ("PHY_SwChnl8192C SwChnlInProgress FALSE schdule workitem error\n"));
+ //if(IS_HARDWARE_TYPE_8192SU(Adapter))
+ //{
+ // pHalData->SwChnlInProgress = FALSE;
+ pHalData->CurrentChannel = tmpchannel;
+ //}
+ }
+
+ }
+ else
+ {
+ //RT_TRACE(COMP_SCAN, DBG_LOUD, ("PHY_SwChnl8192C SwChnlInProgress FALSE driver sleep or unload\n"));
+ //if(IS_HARDWARE_TYPE_8192SU(Adapter))
+ //{
+ // pHalData->SwChnlInProgress = FALSE;
+ pHalData->CurrentChannel = tmpchannel;
+ //}
+ }
+}
+
+
+static BOOLEAN
+phy_SwChnlStepByStep(
+ IN PADAPTER Adapter,
+ IN u8 channel,
+ IN u8 *stage,
+ IN u8 *step,
+ OUT u32 *delay
+ )
+{
+#if 0
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ PCHANNEL_ACCESS_SETTING pChnlAccessSetting;
+ SwChnlCmd PreCommonCmd[MAX_PRECMD_CNT];
+ u4Byte PreCommonCmdCnt;
+ SwChnlCmd PostCommonCmd[MAX_POSTCMD_CNT];
+ u4Byte PostCommonCmdCnt;
+ SwChnlCmd RfDependCmd[MAX_RFDEPENDCMD_CNT];
+ u4Byte RfDependCmdCnt;
+ SwChnlCmd *CurrentCmd;
+ u1Byte eRFPath;
+ u4Byte RfTXPowerCtrl;
+ BOOLEAN bAdjRfTXPowerCtrl = _FALSE;
+
+
+ RT_ASSERT((Adapter != NULL), ("Adapter should not be NULL\n"));
+#if(MP_DRIVER != 1)
+ RT_ASSERT(IsLegalChannel(Adapter, channel), ("illegal channel: %d\n", channel));
+#endif
+ RT_ASSERT((pHalData != NULL), ("pHalData should not be NULL\n"));
+
+ pChnlAccessSetting = &Adapter->MgntInfo.Info8185.ChannelAccessSetting;
+ RT_ASSERT((pChnlAccessSetting != NULL), ("pChnlAccessSetting should not be NULL\n"));
+
+ //for(eRFPath = RF_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
+ //for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
+ //{
+ // <1> Fill up pre common command.
+ PreCommonCmdCnt = 0;
+ phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, MAX_PRECMD_CNT,
+ CmdID_SetTxPowerLevel, 0, 0, 0);
+ phy_SetSwChnlCmdArray(PreCommonCmd, PreCommonCmdCnt++, MAX_PRECMD_CNT,
+ CmdID_End, 0, 0, 0);
+
+ // <2> Fill up post common command.
+ PostCommonCmdCnt = 0;
+
+ phy_SetSwChnlCmdArray(PostCommonCmd, PostCommonCmdCnt++, MAX_POSTCMD_CNT,
+ CmdID_End, 0, 0, 0);
+
+ // <3> Fill up RF dependent command.
+ RfDependCmdCnt = 0;
+ switch( pHalData->RFChipID )
+ {
+ case RF_8225:
+ RT_ASSERT((channel >= 1 && channel <= 14), ("illegal channel for Zebra: %d\n", channel));
+ // 2008/09/04 MH Change channel.
+ if(channel==14) channel++;
+ phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
+ CmdID_RF_WriteReg, rZebra1_Channel, (0x10+channel-1), 10);
+ phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
+ CmdID_End, 0, 0, 0);
+ break;
+
+ case RF_8256:
+ // TEST!! This is not the table for 8256!!
+ RT_ASSERT((channel >= 1 && channel <= 14), ("illegal channel for Zebra: %d\n", channel));
+ phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
+ CmdID_RF_WriteReg, rRfChannel, channel, 10);
+ phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
+ CmdID_End, 0, 0, 0);
+ break;
+
+ case RF_6052:
+ RT_ASSERT((channel >= 1 && channel <= 14), ("illegal channel for Zebra: %d\n", channel));
+ phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
+ CmdID_RF_WriteReg, RF_CHNLBW, channel, 10);
+ phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++, MAX_RFDEPENDCMD_CNT,
+ CmdID_End, 0, 0, 0);
+
+ break;
+
+ case RF_8258:
+ break;
+
+ // For FPGA two MAC verification
+ case RF_PSEUDO_11N:
+ return TRUE;
+ default:
+ RT_ASSERT(FALSE, ("Unknown RFChipID: %d\n", pHalData->RFChipID));
+ return FALSE;
+ break;
+ }
+
+
+ do{
+ switch(*stage)
+ {
+ case 0:
+ CurrentCmd=&PreCommonCmd[*step];
+ break;
+ case 1:
+ CurrentCmd=&RfDependCmd[*step];
+ break;
+ case 2:
+ CurrentCmd=&PostCommonCmd[*step];
+ break;
+ }
+
+ if(CurrentCmd->CmdID==CmdID_End)
+ {
+ if((*stage)==2)
+ {
+ return TRUE;
+ }
+ else
+ {
+ (*stage)++;
+ (*step)=0;
+ continue;
+ }
+ }
+
+ switch(CurrentCmd->CmdID)
+ {
+ case CmdID_SetTxPowerLevel:
+ PHY_SetTxPowerLevel8192C(Adapter,channel);
+ break;
+ case CmdID_WritePortUlong:
+ PlatformEFIOWrite4Byte(Adapter, CurrentCmd->Para1, CurrentCmd->Para2);
+ break;
+ case CmdID_WritePortUshort:
+ PlatformEFIOWrite2Byte(Adapter, CurrentCmd->Para1, (u2Byte)CurrentCmd->Para2);
+ break;
+ case CmdID_WritePortUchar:
+ PlatformEFIOWrite1Byte(Adapter, CurrentCmd->Para1, (u1Byte)CurrentCmd->Para2);
+ break;
+ case CmdID_RF_WriteReg: // Only modify channel for the register now !!!!!
+ for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
+ {
+#if 1
+ pHalData->RfRegChnlVal[eRFPath] = ((pHalData->RfRegChnlVal[eRFPath] & 0xfffffc00) | CurrentCmd->Para2);
+ PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, pHalData->RfRegChnlVal[eRFPath]);
+#else
+ PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)eRFPath, CurrentCmd->Para1, bRFRegOffsetMask, (CurrentCmd->Para2));
+#endif
+ }
+ break;
+ }
+
+ break;
+ }while(TRUE);
+ //cosa }/*for(Number of RF paths)*/
+
+ (*delay)=CurrentCmd->msDelay;
+ (*step)++;
+ return FALSE;
+#endif
+ return _TRUE;
+}
+
+
+static BOOLEAN
+phy_SetSwChnlCmdArray(
+ SwChnlCmd* CmdTable,
+ u32 CmdTableIdx,
+ u32 CmdTableSz,
+ SwChnlCmdID CmdID,
+ u32 Para1,
+ u32 Para2,
+ u32 msDelay
+ )
+{
+ SwChnlCmd* pCmd;
+
+ if(CmdTable == NULL)
+ {
+ //RT_ASSERT(FALSE, ("phy_SetSwChnlCmdArray(): CmdTable cannot be NULL.\n"));
+ return _FALSE;
+ }
+ if(CmdTableIdx >= CmdTableSz)
+ {
+ //RT_ASSERT(FALSE,
+ // ("phy_SetSwChnlCmdArray(): Access invalid index, please check size of the table, CmdTableIdx:%ld, CmdTableSz:%ld\n",
+ // CmdTableIdx, CmdTableSz));
+ return _FALSE;
+ }
+
+ pCmd = CmdTable + CmdTableIdx;
+ pCmd->CmdID = CmdID;
+ pCmd->Para1 = Para1;
+ pCmd->Para2 = Para2;
+ pCmd->msDelay = msDelay;
+
+ return _TRUE;
+}
+
+
+static void
+phy_FinishSwChnlNow( // We should not call this function directly
+ IN PADAPTER Adapter,
+ IN u8 channel
+ )
+{
+#if 0
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ u32 delay;
+
+ while(!phy_SwChnlStepByStep(Adapter,channel,&pHalData->SwChnlStage,&pHalData->SwChnlStep,&delay))
+ {
+ if(delay>0)
+ rtw_mdelay_os(delay);
+ }
+#endif
+}
+
+
+
+//
+// Description:
+// Switch channel synchronously. Called by SwChnlByDelayHandler.
+//
+// Implemented by Bruce, 2008-02-14.
+// The following procedure is operted according to SwChanlCallback8190Pci().
+// However, this procedure is performed synchronously which should be running under
+// passive level.
+//
+VOID
+PHY_SwChnlPhy8192C( // Only called during initialize
+ IN PADAPTER Adapter,
+ IN u8 channel
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+ //RT_TRACE(COMP_SCAN | COMP_RM, DBG_LOUD, ("==>PHY_SwChnlPhy8192S(), switch from channel %d to channel %d.\n", pHalData->CurrentChannel, channel));
+
+ // Cannot IO.
+ //if(RT_CANNOT_IO(Adapter))
+ // return;
+
+ // Channel Switching is in progress.
+ //if(pHalData->SwChnlInProgress)
+ // return;
+
+ //return immediately if it is peudo-phy
+ if(pHalData->rf_chip == RF_PSEUDO_11N)
+ {
+ //pHalData->SwChnlInProgress=FALSE;
+ return;
+ }
+
+ //pHalData->SwChnlInProgress = TRUE;
+ if( channel == 0)
+ channel = 1;
+
+ pHalData->CurrentChannel=channel;
+
+ //pHalData->SwChnlStage = 0;
+ //pHalData->SwChnlStep = 0;
+
+ phy_FinishSwChnlNow(Adapter,channel);
+
+ //pHalData->SwChnlInProgress = FALSE;
+}
+
+
+//
+// Description:
+// Configure H/W functionality to enable/disable Monitor mode.
+// Note, because we possibly need to configure BB and RF in this function,
+// so caller should in PASSIVE_LEVEL. 080118, by rcnjko.
+//
+VOID
+PHY_SetMonitorMode8192C(
+ IN PADAPTER pAdapter,
+ IN BOOLEAN bEnableMonitorMode
+ )
+{
+#if 0
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ BOOLEAN bFilterOutNonAssociatedBSSID = FALSE;
+
+ //2 Note: we may need to stop antenna diversity.
+ if(bEnableMonitorMode)
+ {
+ bFilterOutNonAssociatedBSSID = FALSE;
+ RT_TRACE(COMP_RM, DBG_LOUD, ("PHY_SetMonitorMode8192S(): enable monitor mode\n"));
+
+ pHalData->bInMonitorMode = TRUE;
+ pAdapter->HalFunc.AllowAllDestAddrHandler(pAdapter, TRUE, TRUE);
+ rtw_hal_set_hwreg(pAdapter, HW_VAR_CHECK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);
+ }
+ else
+ {
+ bFilterOutNonAssociatedBSSID = TRUE;
+ RT_TRACE(COMP_RM, DBG_LOUD, ("PHY_SetMonitorMode8192S(): disable monitor mode\n"));
+
+ pAdapter->HalFunc.AllowAllDestAddrHandler(pAdapter, FALSE, TRUE);
+ pHalData->bInMonitorMode = FALSE;
+ rtw_hal_set_hwreg(pAdapter, HW_VAR_CHECK_BSSID, (pu1Byte)&bFilterOutNonAssociatedBSSID);
+ }
+#endif
+}
+
+
+/*-----------------------------------------------------------------------------
+ * Function: PHYCheckIsLegalRfPath8190Pci()
+ *
+ * Overview: Check different RF type to execute legal judgement. If RF Path is illegal
+ * We will return false.
+ *
+ * Input: NONE
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 11/15/2007 MHC Create Version 0.
+ *
+ *---------------------------------------------------------------------------*/
+BOOLEAN
+PHY_CheckIsLegalRfPath8192C(
+ IN PADAPTER pAdapter,
+ IN u32 eRFPath)
+{
+// HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+ BOOLEAN rtValue = _TRUE;
+
+ // NOt check RF Path now.!
+#if 0
+ if (pHalData->RF_Type == RF_1T2R && eRFPath != RF_PATH_A)
+ {
+ rtValue = FALSE;
+ }
+ if (pHalData->RF_Type == RF_1T2R && eRFPath != RF_PATH_A)
+ {
+
+ }
+#endif
+ return rtValue;
+
+} /* PHY_CheckIsLegalRfPath8192C */
+
+static VOID _PHY_SetRFPathSwitch(
+ IN PADAPTER pAdapter,
+ IN BOOLEAN bMain,
+ IN BOOLEAN is2T
+ )
+{
+ u8 u1bTmp;
+
+ if(!pAdapter->hw_init_completed)
+ {
+ u1bTmp = rtw_read8(pAdapter, REG_LEDCFG2) | BIT7;
+ rtw_write8(pAdapter, REG_LEDCFG2, u1bTmp);
+ //PHY_SetBBReg(pAdapter, REG_LEDCFG0, BIT23, 0x01);
+ PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT13, 0x01);
+ }
+
+ if(is2T)
+ {
+ if(bMain)
+ PHY_SetBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT5|BIT6, 0x1); //92C_Path_A
+ else
+ PHY_SetBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT5|BIT6, 0x2); //BT
+ }
+ else
+ {
+
+ if(bMain)
+ PHY_SetBBReg(pAdapter, rFPGA0_XA_RFInterfaceOE, 0x300, 0x2); //Main
+ else
+ PHY_SetBBReg(pAdapter, rFPGA0_XA_RFInterfaceOE, 0x300, 0x1); //Aux
+ }
+
+}
+
+//return value TRUE => Main; FALSE => Aux
+
+static BOOLEAN _PHY_QueryRFPathSwitch(
+ IN PADAPTER pAdapter,
+ IN BOOLEAN is2T
+ )
+{
+// if(is2T)
+// return _TRUE;
+
+ if(!pAdapter->hw_init_completed)
+ {
+ PHY_SetBBReg(pAdapter, REG_LEDCFG0, BIT23, 0x01);
+ PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFParameter, BIT13, 0x01);
+ }
+
+ if(is2T)
+ {
+ if(PHY_QueryBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT5|BIT6) == 0x01)
+ return _TRUE;
+ else
+ return _FALSE;
+ }
+ else
+ {
+ if(PHY_QueryBBReg(pAdapter, rFPGA0_XA_RFInterfaceOE, 0x300) == 0x02)
+ return _TRUE;
+ else
+ return _FALSE;
+ }
+}
+
+
+static VOID
+_PHY_DumpRFReg(IN PADAPTER pAdapter)
+{
+ u32 rfRegValue,rfRegOffset;
+
+ //RTPRINT(FINIT, INIT_RF, ("PHY_DumpRFReg()====>\n"));
+
+ for(rfRegOffset = 0x00;rfRegOffset<=0x30;rfRegOffset++){
+ rfRegValue = PHY_QueryRFReg(pAdapter,RF_PATH_A, rfRegOffset, bMaskDWord);
+ //RTPRINT(FINIT, INIT_RF, (" 0x%02x = 0x%08x\n",rfRegOffset,rfRegValue));
+ }
+ //RTPRINT(FINIT, INIT_RF, ("<===== PHY_DumpRFReg()\n"));
+}
+
+
+VOID rtl8192c_PHY_SetRFPathSwitch(
+ IN PADAPTER pAdapter,
+ IN BOOLEAN bMain
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter);
+
+#if DISABLE_BB_RF
+ return;
+#endif
+
+ if(IS_92C_SERIAL( pHalData->VersionID)){
+ _PHY_SetRFPathSwitch(pAdapter, bMain, _TRUE);
+ }
+ else{
+ // For 88C 1T1R
+ _PHY_SetRFPathSwitch(pAdapter, bMain, _FALSE);
+ }
+}
+
+//
+// Move from phycfg.c to gen.c to be code independent later
+//
+//-------------------------Move to other DIR later----------------------------*/
+#ifdef CONFIG_USB_HCI
+
+//
+// Description:
+// To dump all Tx FIFO LLT related link-list table.
+// Added by Roger, 2009.03.10.
+//
+VOID
+DumpBBDbgPort_92CU(
+ IN PADAPTER Adapter
+ )
+{
+
+ //RT_TRACE(COMP_SEND, DBG_WARNING, ("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"));
+ //RT_TRACE(COMP_SEND, DBG_WARNING, ("BaseBand Debug Ports:\n"));
+
+ PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0000);
+ //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
+
+ PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0803);
+ //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
+
+ PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0a06);
+ //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
+
+ PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0007);
+ //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
+
+ PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0100);
+ PHY_SetBBReg(Adapter, 0x0a28, 0x00ff0000, 0x000f0000);
+ //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
+
+ PHY_SetBBReg(Adapter, 0x0908, 0xffff, 0x0100);
+ PHY_SetBBReg(Adapter, 0x0a28, 0x00ff0000, 0x00150000);
+ //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xdf4, PHY_QueryBBReg(Adapter, 0x0df4, bMaskDWord)));
+
+ //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0x800, PHY_QueryBBReg(Adapter, 0x0800, bMaskDWord)));
+ //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0x900, PHY_QueryBBReg(Adapter, 0x0900, bMaskDWord)));
+ //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xa00, PHY_QueryBBReg(Adapter, 0x0a00, bMaskDWord)));
+ //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xa54, PHY_QueryBBReg(Adapter, 0x0a54, bMaskDWord)));
+ //RT_TRACE(COMP_SEND, DBG_WARNING, ("Offset[%x]: %x\n", 0xa58, PHY_QueryBBReg(Adapter, 0x0a58, bMaskDWord)));
+
+}
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_rf6052.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_rf6052.c
index c86782f695e6..b6449371f5a7 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_rf6052.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_rf6052.c
@@ -1,985 +1,985 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-/******************************************************************************
- *
- *
- * Module: rtl8192c_rf6052.c ( Source C File)
- *
- * Note: Provide RF 6052 series relative API.
- *
- * Function:
- *
- * Export:
- *
- * Abbrev:
- *
- * History:
- * Data Who Remark
- *
- * 09/25/2008 MHC Create initial version.
- * 11/05/2008 MHC Add API for tw power setting.
- *
- *
-******************************************************************************/
-
-#define _RTL8723A_RF6052_C_
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <rtw_byteorder.h>
-
-#include <rtl8723a_hal.h>
-
-/*---------------------------Define Local Constant---------------------------*/
-// Define local structure for debug!!!!!
-typedef struct RF_Shadow_Compare_Map {
- // Shadow register value
- u32 Value;
- // Compare or not flag
- u8 Compare;
- // Record If it had ever modified unpredicted
- u8 ErrorOrNot;
- // Recorver Flag
- u8 Recorver;
- //
- u8 Driver_Write;
-}RF_SHADOW_T;
-/*---------------------------Define Local Constant---------------------------*/
-
-
-/*------------------------Define global variable-----------------------------*/
-/*------------------------Define global variable-----------------------------*/
-
-
-/*------------------------Define local variable------------------------------*/
-// 2008/11/20 MH For Debug only, RF
-//static RF_SHADOW_T RF_Shadow[RF6052_MAX_PATH][RF6052_MAX_REG] = {0};
-static RF_SHADOW_T RF_Shadow[RF6052_MAX_PATH][RF6052_MAX_REG];
-/*------------------------Define local variable------------------------------*/
-
-
-/*-----------------------------------------------------------------------------
- * Function: RF_ChangeTxPath
- *
- * Overview: For RL6052, we must change some RF settign for 1T or 2T.
- *
- * Input: u2Byte DataRate // 0x80-8f, 0x90-9f
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 09/25/2008 MHC Create Version 0.
- * Firmwaer support the utility later.
- *
- *---------------------------------------------------------------------------*/
-void rtl8192c_RF_ChangeTxPath( IN PADAPTER Adapter,
- IN u16 DataRate)
-{
-// We do not support gain table change inACUT now !!!! Delete later !!!
-#if 0//(RTL92SE_FPGA_VERIFY == 0)
- static u1Byte RF_Path_Type = 2; // 1 = 1T 2= 2T
- static u4Byte tx_gain_tbl1[6]
- = {0x17f50, 0x11f40, 0x0cf30, 0x08720, 0x04310, 0x00100};
- static u4Byte tx_gain_tbl2[6]
- = {0x15ea0, 0x10e90, 0x0c680, 0x08250, 0x04040, 0x00030};
- u1Byte i;
-
- if (RF_Path_Type == 2 && (DataRate&0xF) <= 0x7)
- {
- // Set TX SYNC power G2G3 loop filter
- PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
- RF_TXPA_G2, bRFRegOffsetMask, 0x0f000);
- PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
- RF_TXPA_G3, bRFRegOffsetMask, 0xeacf1);
-
- // Change TX AGC gain table
- for (i = 0; i < 6; i++)
- PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
- RF_TX_AGC, bRFRegOffsetMask, tx_gain_tbl1[i]);
-
- // Set PA to high value
- PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
- RF_TXPA_G2, bRFRegOffsetMask, 0x01e39);
- }
- else if (RF_Path_Type == 1 && (DataRate&0xF) >= 0x8)
- {
- // Set TX SYNC power G2G3 loop filter
- PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
- RF_TXPA_G2, bRFRegOffsetMask, 0x04440);
- PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
- RF_TXPA_G3, bRFRegOffsetMask, 0xea4f1);
-
- // Change TX AGC gain table
- for (i = 0; i < 6; i++)
- PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
- RF_TX_AGC, bRFRegOffsetMask, tx_gain_tbl2[i]);
-
- // Set PA low gain
- PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
- RF_TXPA_G2, bRFRegOffsetMask, 0x01e19);
- }
-#endif
-
-} /* RF_ChangeTxPath */
-
-
-/*-----------------------------------------------------------------------------
- * Function: PHY_RF6052SetBandwidth()
- *
- * Overview: This function is called by SetBWModeCallback8190Pci() only
- *
- * Input: PADAPTER Adapter
- * WIRELESS_BANDWIDTH_E Bandwidth //20M or 40M
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Note: For RF type 0222D
- *---------------------------------------------------------------------------*/
-VOID
-rtl8192c_PHY_RF6052SetBandwidth(
- IN PADAPTER Adapter,
- IN HT_CHANNEL_WIDTH Bandwidth) //20M or 40M
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
- switch(Bandwidth)
- {
- case HT_CHANNEL_WIDTH_20:
- pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff) | 0x0400);
- PHY_SetRFReg(Adapter, RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
- break;
-
- case HT_CHANNEL_WIDTH_40:
- pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff));
- PHY_SetRFReg(Adapter, RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
- break;
-
- default:
- //RT_TRACE(COMP_DBG, DBG_LOUD, ("PHY_SetRF8225Bandwidth(): unknown Bandwidth: %#X\n",Bandwidth ));
- break;
- }
-
-}
-
-
-/*-----------------------------------------------------------------------------
- * Function: PHY_RF6052SetCckTxPower
- *
- * Overview:
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 11/05/2008 MHC Simulate 8192series..
- *
- *---------------------------------------------------------------------------*/
-
-VOID
-rtl8192c_PHY_RF6052SetCckTxPower(
- IN PADAPTER Adapter,
- IN u8* pPowerlevel)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
- struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
- //PMGNT_INFO pMgntInfo=&Adapter->MgntInfo;
- u32 TxAGC[2]={0, 0}, tmpval=0;
- BOOLEAN TurboScanOff = _FALSE;
- u8 idx1, idx2;
- u8* ptr;
-
- // 2010/10/18 MH Accorsing to SD3 eechou's suggestion, we need to disable turbo scan for RU.
- // Otherwise, external PA will be broken if power index > 0x20.
-#ifdef CONFIG_USB_HCI
- if (pHalData->EEPROMRegulatory != 0 || pHalData->ExternalPA)
-#else
- if (pHalData->EEPROMRegulatory != 0)
-#endif
- {
- //DbgPrint("TurboScanOff=1 EEPROMRegulatory=%d ExternalPA=%d\n", pHalData->EEPROMRegulatory, pHalData->ExternalPA);
- TurboScanOff = _TRUE;
- }
-
- if(pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
- {
- TxAGC[RF_PATH_A] = 0x3f3f3f3f;
- TxAGC[RF_PATH_B] = 0x3f3f3f3f;
-
- TurboScanOff = _TRUE;//disable turbo scan
-
- if(TurboScanOff)
- {
- for(idx1=RF_PATH_A; idx1<=RF_PATH_B; idx1++)
- {
- TxAGC[idx1] =
- pPowerlevel[idx1] | (pPowerlevel[idx1]<<8) |
- (pPowerlevel[idx1]<<16) | (pPowerlevel[idx1]<<24);
-#ifdef CONFIG_USB_HCI
- // 2010/10/18 MH For external PA module. We need to limit power index to be less than 0x20.
- if (TxAGC[idx1] > 0x20 && pHalData->ExternalPA)
- TxAGC[idx1] = 0x20;
-#endif
- }
- }
- }
- else
- {
-// 20100427 Joseph: Driver dynamic Tx power shall not affect Tx power. It shall be determined by power training mechanism.
-// Currently, we cannot fully disable driver dynamic tx power mechanism because it is referenced by BT coexist mechanism.
-// In the future, two mechanism shall be separated from each other and maintained independantly. Thanks for Lanhsin's reminder.
- if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
- {
- TxAGC[RF_PATH_A] = 0x10101010;
- TxAGC[RF_PATH_B] = 0x10101010;
- }
- else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2)
- {
- TxAGC[RF_PATH_A] = 0x00000000;
- TxAGC[RF_PATH_B] = 0x00000000;
- }
- else
- {
- for(idx1=RF_PATH_A; idx1<=RF_PATH_B; idx1++)
- {
- TxAGC[idx1] =
- pPowerlevel[idx1] | (pPowerlevel[idx1]<<8) |
- (pPowerlevel[idx1]<<16) | (pPowerlevel[idx1]<<24);
- }
-
- if(pHalData->EEPROMRegulatory==0)
- {
- tmpval = (pHalData->MCSTxPowerLevelOriginalOffset[0][6]) +
- (pHalData->MCSTxPowerLevelOriginalOffset[0][7]<<8);
- TxAGC[RF_PATH_A] += tmpval;
-
- tmpval = (pHalData->MCSTxPowerLevelOriginalOffset[0][14]) +
- (pHalData->MCSTxPowerLevelOriginalOffset[0][15]<<24);
- TxAGC[RF_PATH_B] += tmpval;
- }
- }
- }
-
- for(idx1=RF_PATH_A; idx1<=RF_PATH_B; idx1++)
- {
- ptr = (u8*)(&(TxAGC[idx1]));
- for(idx2=0; idx2<4; idx2++)
- {
- if(*ptr > RF6052_MAX_TX_PWR)
- *ptr = RF6052_MAX_TX_PWR;
- ptr++;
- }
- }
-
- // rf-A cck tx power
- tmpval = TxAGC[RF_PATH_A]&0xff;
- PHY_SetBBReg(Adapter, rTxAGC_A_CCK1_Mcs32, bMaskByte1, tmpval);
- //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 1M (rf-A) = 0x%x (reg 0x%x)\n", tmpval, rTxAGC_A_CCK1_Mcs32));
- tmpval = TxAGC[RF_PATH_A]>>8;
- PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_A_CCK2_11, 0xffffff00, tmpval);
- //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 2~11M (rf-A) = 0x%x (reg 0x%x)\n", tmpval, rTxAGC_B_CCK11_A_CCK2_11));
-
- // rf-B cck tx power
- tmpval = TxAGC[RF_PATH_B]>>24;
- PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_A_CCK2_11, bMaskByte0, tmpval);
- //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 11M (rf-B) = 0x%x (reg 0x%x)\n", tmpval, rTxAGC_B_CCK11_A_CCK2_11));
- tmpval = TxAGC[RF_PATH_B]&0x00ffffff;
- PHY_SetBBReg(Adapter, rTxAGC_B_CCK1_55_Mcs32, 0xffffff00, tmpval);
- //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 1~5.5M (rf-B) = 0x%x (reg 0x%x)\n",
- // tmpval, rTxAGC_B_CCK1_55_Mcs32));
-
-} /* PHY_RF6052SetCckTxPower */
-
-//
-// powerbase0 for OFDM rates
-// powerbase1 for HT MCS rates
-//
-static void getPowerBase(
- IN PADAPTER Adapter,
- IN u8* pPowerLevel,
- IN u8 Channel,
- IN OUT u32* OfdmBase,
- IN OUT u32* MCSBase
- )
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u32 powerBase0, powerBase1;
- u8 Legacy_pwrdiff=0;
- s8 HT20_pwrdiff=0;
- u8 i, powerlevel[2];
-
- for(i=0; i<2; i++)
- {
- powerlevel[i] = pPowerLevel[i];
- Legacy_pwrdiff = pHalData->TxPwrLegacyHtDiff[i][Channel-1];
- powerBase0 = powerlevel[i] + Legacy_pwrdiff;
-
- powerBase0 = (powerBase0<<24) | (powerBase0<<16) |(powerBase0<<8) |powerBase0;
- *(OfdmBase+i) = powerBase0;
- //RTPRINT(FPHY, PHY_TXPWR, (" [OFDM power base index rf(%c) = 0x%x]\n", ((i==0)?'A':'B'), *(OfdmBase+i)));
- }
-
- for(i=0; i<2; i++)
- {
- //Check HT20 to HT40 diff
- if(pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_20)
- {
- HT20_pwrdiff = pHalData->TxPwrHt20Diff[i][Channel-1];
- powerlevel[i] += HT20_pwrdiff;
- }
- powerBase1 = powerlevel[i];
- powerBase1 = (powerBase1<<24) | (powerBase1<<16) |(powerBase1<<8) |powerBase1;
- *(MCSBase+i) = powerBase1;
- //RTPRINT(FPHY, PHY_TXPWR, (" [MCS power base index rf(%c) = 0x%x]\n", ((i==0)?'A':'B'), *(MCSBase+i)));
- }
-}
-
-static void getTxPowerWriteValByRegulatory(
- IN PADAPTER Adapter,
- IN u8 Channel,
- IN u8 index,
- IN u32* powerBase0,
- IN u32* powerBase1,
- OUT u32* pOutWriteVal
- )
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
- u8 i, chnlGroup, pwr_diff_limit[4];
- u32 writeVal, customer_limit, rf;
-
- //
- // Index 0 & 1= legacy OFDM, 2-5=HT_MCS rate
- //
- for(rf=0; rf<2; rf++)
- {
- switch(pHalData->EEPROMRegulatory)
- {
- case 0: // Realtek better performance
- // increase power diff defined by Realtek for large power
- chnlGroup = 0;
- //RTPRINT(FPHY, PHY_TXPWR, ("MCSTxPowerLevelOriginalOffset[%d][%d] = 0x%x\n",
- // chnlGroup, index, pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)]));
- writeVal = pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)] +
- ((index<2)?powerBase0[rf]:powerBase1[rf]);
- //RTPRINT(FPHY, PHY_TXPWR, ("RTK better performance, writeVal(%c) = 0x%x\n", ((rf==0)?'A':'B'), writeVal));
- break;
- case 1: // Realtek regulatory
- // increase power diff defined by Realtek for regulatory
- {
- if(pHalData->pwrGroupCnt == 1)
- chnlGroup = 0;
- if(pHalData->pwrGroupCnt >= 3)
- {
- if(Channel <= 3)
- chnlGroup = 0;
- else if(Channel >= 4 && Channel <= 9)
- chnlGroup = 1;
- else if(Channel > 9)
- chnlGroup = 2;
-
- if(pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_20)
- chnlGroup++;
- else
- chnlGroup+=4;
- }
- //RTPRINT(FPHY, PHY_TXPWR, ("MCSTxPowerLevelOriginalOffset[%d][%d] = 0x%x\n",
- //chnlGroup, index, pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)]));
- writeVal = pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)] +
- ((index<2)?powerBase0[rf]:powerBase1[rf]);
- //RTPRINT(FPHY, PHY_TXPWR, ("Realtek regulatory, 20MHz, writeVal(%c) = 0x%x\n", ((rf==0)?'A':'B'), writeVal));
- }
- break;
- case 2: // Better regulatory
- // don't increase any power diff
- writeVal = ((index<2)?powerBase0[rf]:powerBase1[rf]);
- //RTPRINT(FPHY, PHY_TXPWR, ("Better regulatory, writeVal(%c) = 0x%x\n", ((rf==0)?'A':'B'), writeVal));
- break;
- case 3: // Customer defined power diff.
- // increase power diff defined by customer.
- chnlGroup = 0;
- //RTPRINT(FPHY, PHY_TXPWR, ("MCSTxPowerLevelOriginalOffset[%d][%d] = 0x%x\n",
- // chnlGroup, index, pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)]));
-
- if (pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_40)
- {
- //RTPRINT(FPHY, PHY_TXPWR, ("customer's limit, 40MHz rf(%c) = 0x%x\n",
- // ((rf==0)?'A':'B'), pHalData->PwrGroupHT40[rf][Channel-1]));
- }
- else
- {
- //RTPRINT(FPHY, PHY_TXPWR, ("customer's limit, 20MHz rf(%c) = 0x%x\n",
- // ((rf==0)?'A':'B'), pHalData->PwrGroupHT20[rf][Channel-1]));
- }
- for (i=0; i<4; i++)
- {
- pwr_diff_limit[i] = (u8)((pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)]&(0x7f<<(i*8)))>>(i*8));
- if (pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_40)
- {
- if(pwr_diff_limit[i] > pHalData->PwrGroupHT40[rf][Channel-1])
- pwr_diff_limit[i] = pHalData->PwrGroupHT40[rf][Channel-1];
- }
- else
- {
- if(pwr_diff_limit[i] > pHalData->PwrGroupHT20[rf][Channel-1])
- pwr_diff_limit[i] = pHalData->PwrGroupHT20[rf][Channel-1];
- }
- }
- customer_limit = (pwr_diff_limit[3]<<24) | (pwr_diff_limit[2]<<16) |
- (pwr_diff_limit[1]<<8) | (pwr_diff_limit[0]);
- //RTPRINT(FPHY, PHY_TXPWR, ("Customer's limit rf(%c) = 0x%x\n", ((rf==0)?'A':'B'), customer_limit));
-
- writeVal = customer_limit + ((index<2)?powerBase0[rf]:powerBase1[rf]);
- //RTPRINT(FPHY, PHY_TXPWR, ("Customer, writeVal rf(%c)= 0x%x\n", ((rf==0)?'A':'B'), writeVal));
- break;
- default:
- chnlGroup = 0;
- writeVal = pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)] +
- ((index<2)?powerBase0[rf]:powerBase1[rf]);
- //RTPRINT(FPHY, PHY_TXPWR, ("RTK better performance, writeVal rf(%c) = 0x%x\n", ((rf==0)?'A':'B'), writeVal));
- break;
- }
-
-// 20100427 Joseph: Driver dynamic Tx power shall not affect Tx power. It shall be determined by power training mechanism.
-// Currently, we cannot fully disable driver dynamic tx power mechanism because it is referenced by BT coexist mechanism.
-// In the future, two mechanism shall be separated from each other and maintained independantly. Thanks for Lanhsin's reminder.
-
- if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
- writeVal = 0x14141414;
- else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2)
- writeVal = 0x00000000;
-
-
- // 20100628 Joseph: High power mode for BT-Coexist mechanism.
- // This mechanism is only applied when Driver-Highpower-Mechanism is OFF.
- if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_BT1)
- {
- //RTPRINT(FBT, BT_TRACE, ("Tx Power (-6)\n"));
- writeVal = writeVal - 0x06060606;
- }
- else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_BT2)
- {
- //RTPRINT(FBT, BT_TRACE, ("Tx Power (-0)\n"));
- writeVal = writeVal;
- }
- *(pOutWriteVal+rf) = writeVal;
- }
-}
-
-static void writeOFDMPowerReg(
- IN PADAPTER Adapter,
- IN u8 index,
- IN u32* pValue
- )
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u16 RegOffset_A[6] = { rTxAGC_A_Rate18_06, rTxAGC_A_Rate54_24,
- rTxAGC_A_Mcs03_Mcs00, rTxAGC_A_Mcs07_Mcs04,
- rTxAGC_A_Mcs11_Mcs08, rTxAGC_A_Mcs15_Mcs12};
- u16 RegOffset_B[6] = { rTxAGC_B_Rate18_06, rTxAGC_B_Rate54_24,
- rTxAGC_B_Mcs03_Mcs00, rTxAGC_B_Mcs07_Mcs04,
- rTxAGC_B_Mcs11_Mcs08, rTxAGC_B_Mcs15_Mcs12};
- u8 i, rf, pwr_val[4];
- u32 writeVal;
- u16 RegOffset;
-
- for(rf=0; rf<2; rf++)
- {
- writeVal = pValue[rf];
- for(i=0; i<4; i++)
- {
- pwr_val[i] = (u8)((writeVal & (0x7f<<(i*8)))>>(i*8));
- if (pwr_val[i] > RF6052_MAX_TX_PWR)
- pwr_val[i] = RF6052_MAX_TX_PWR;
- }
- writeVal = (pwr_val[3]<<24) | (pwr_val[2]<<16) |(pwr_val[1]<<8) |pwr_val[0];
-
- if(rf == 0)
- RegOffset = RegOffset_A[index];
- else
- RegOffset = RegOffset_B[index];
-
- PHY_SetBBReg(Adapter, RegOffset, bMaskDWord, writeVal);
- //RTPRINT(FPHY, PHY_TXPWR, ("Set 0x%x = %08x\n", RegOffset, writeVal));
-
- // 201005115 Joseph: Set Tx Power diff for Tx power training mechanism.
- if(((pHalData->rf_type == RF_2T2R) &&
- (RegOffset == rTxAGC_A_Mcs15_Mcs12 || RegOffset == rTxAGC_B_Mcs15_Mcs12))||
- ((pHalData->rf_type != RF_2T2R) &&
- (RegOffset == rTxAGC_A_Mcs07_Mcs04 || RegOffset == rTxAGC_B_Mcs07_Mcs04)) )
- {
- writeVal = pwr_val[3];
- if(RegOffset == rTxAGC_A_Mcs15_Mcs12 || RegOffset == rTxAGC_A_Mcs07_Mcs04)
- RegOffset = 0xc90;
- if(RegOffset == rTxAGC_B_Mcs15_Mcs12 || RegOffset == rTxAGC_B_Mcs07_Mcs04)
- RegOffset = 0xc98;
- for(i=0; i<3; i++)
- {
- if(i!=2)
- writeVal = (writeVal>8)?(writeVal-8):0;
- else
- writeVal = (writeVal>6)?(writeVal-6):0;
- rtw_write8(Adapter, (u32)(RegOffset+i), (u8)writeVal);
- }
- }
- }
-}
-/*-----------------------------------------------------------------------------
- * Function: PHY_RF6052SetOFDMTxPower
- *
- * Overview: For legacy and HY OFDM, we must read EEPROM TX power index for
- * different channel and read original value in TX power register area from
- * 0xe00. We increase offset and original value to be correct tx pwr.
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 11/05/2008 MHC Simulate 8192 series method.
- * 01/06/2009 MHC 1. Prevent Path B tx power overflow or underflow dure to
- * A/B pwr difference or legacy/HT pwr diff.
- * 2. We concern with path B legacy/HT OFDM difference.
- * 01/22/2009 MHC Support new EPRO format from SD3.
- *
- *---------------------------------------------------------------------------*/
-VOID
-rtl8192c_PHY_RF6052SetOFDMTxPower(
- IN PADAPTER Adapter,
- IN u8* pPowerLevel,
- IN u8 Channel)
-{
- //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- u32 writeVal[2], powerBase0[2], powerBase1[2];
- u8 index = 0;
-
- getPowerBase(Adapter, pPowerLevel, Channel, &powerBase0[0], &powerBase1[0]);
-
- for(index=0; index<6; index++)
- {
- getTxPowerWriteValByRegulatory(Adapter, Channel, index,
- &powerBase0[0], &powerBase1[0], &writeVal[0]);
-
- writeOFDMPowerReg(Adapter, index, &writeVal[0]);
- }
-
-}
-
-
-static VOID
-phy_RF6052_Config_HardCode(
- IN PADAPTER Adapter
- )
-{
-
- // Set Default Bandwidth to 20M
- //Adapter->HalFunc .SetBWModeHandler(Adapter, HT_CHANNEL_WIDTH_20);
-
- // TODO: Set Default Channel to channel one for RTL8225
-
-}
-
-static int
-phy_RF6052_Config_ParaFile(
- IN PADAPTER Adapter
- )
-{
- u32 u4RegValue;
- u8 eRFPath;
- BB_REGISTER_DEFINITION_T *pPhyReg;
-
- int rtStatus = _SUCCESS;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
- static char sz8723RadioAFile[] = RTL8723_PHY_RADIO_A;
- static char sz8723RadioBFile[] = RTL8723_PHY_RADIO_B;
- char *pszRadioAFile, *pszRadioBFile;
-
-
- pszRadioAFile = sz8723RadioAFile;
- pszRadioBFile = sz8723RadioBFile;
-
-
- //3//-----------------------------------------------------------------
- //3// <2> Initialize RF
- //3//-----------------------------------------------------------------
- //for(eRFPath = RF_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
- for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
- {
-
- pPhyReg = &pHalData->PHYRegDef[eRFPath];
-
- /*----Store original RFENV control type----*/
- switch(eRFPath)
- {
- case RF_PATH_A:
- case RF_PATH_C:
- u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV);
- break;
- case RF_PATH_B :
- case RF_PATH_D:
- u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV<<16);
- break;
- }
-
- /*----Set RF_ENV enable----*/
- PHY_SetBBReg(Adapter, pPhyReg->rfintfe, bRFSI_RFENV<<16, 0x1);
- rtw_udelay_os(1);//PlatformStallExecution(1);
-
- /*----Set RF_ENV output high----*/
- PHY_SetBBReg(Adapter, pPhyReg->rfintfo, bRFSI_RFENV, 0x1);
- rtw_udelay_os(1);//PlatformStallExecution(1);
-
- /* Set bit number of Address and Data for RF register */
- PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireAddressLength, 0x0); // Set 1 to 4 bits for 8255
- rtw_udelay_os(1);//PlatformStallExecution(1);
-
- PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireDataLength, 0x0); // Set 0 to 12 bits for 8255
- rtw_udelay_os(1);//PlatformStallExecution(1);
-
- /*----Initialize RF fom connfiguration file----*/
- switch(eRFPath)
- {
- case RF_PATH_A:
-#ifdef CONFIG_EMBEDDED_FWIMG
- #ifdef CONFIG_PHY_SETTING_WITH_ODM
- if(HAL_STATUS_FAILURE ==ODM_ConfigRFWithHeaderFile(&pHalData->odmpriv,(ODM_RF_RADIO_PATH_E)eRFPath, (ODM_RF_RADIO_PATH_E)eRFPath))
- rtStatus= _FAIL;
- #else
- rtStatus= rtl8723a_PHY_ConfigRFWithHeaderFile(Adapter,(RF_RADIO_PATH_E)eRFPath);
- #endif//#ifdef CONFIG_PHY_SETTING_WITH_ODM
-#else
- rtStatus = rtl8192c_PHY_ConfigRFWithParaFile(Adapter, pszRadioAFile, (RF_RADIO_PATH_E)eRFPath);
-#endif//#ifdef CONFIG_EMBEDDED_FWIMG
- break;
- case RF_PATH_B:
-#ifdef CONFIG_EMBEDDED_FWIMG
- #ifdef CONFIG_PHY_SETTING_WITH_ODM
- if(HAL_STATUS_FAILURE ==ODM_ConfigRFWithHeaderFile(&pHalData->odmpriv,(ODM_RF_RADIO_PATH_E)eRFPath, (ODM_RF_RADIO_PATH_E)eRFPath))
- rtStatus= _FAIL;
- #else
- rtStatus = rtl8723a_PHY_ConfigRFWithHeaderFile(Adapter,(RF_RADIO_PATH_E)eRFPath);
- #endif
-#else
- rtStatus = rtl8192c_PHY_ConfigRFWithParaFile(Adapter, pszRadioBFile, (RF_RADIO_PATH_E)eRFPath);
-#endif
- break;
- case RF_PATH_C:
- break;
- case RF_PATH_D:
- break;
- }
-
- /*----Restore RFENV control type----*/;
- switch(eRFPath)
- {
- case RF_PATH_A:
- case RF_PATH_C:
- PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV, u4RegValue);
- break;
- case RF_PATH_B :
- case RF_PATH_D:
- PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV<<16, u4RegValue);
- break;
- }
-
- if(rtStatus != _SUCCESS){
- //RT_TRACE(COMP_FPGA, DBG_LOUD, ("phy_RF6052_Config_ParaFile():Radio[%d] Fail!!", eRFPath));
- goto phy_RF6052_Config_ParaFile_Fail;
- }
-
- }
-
- //RT_TRACE(COMP_INIT, DBG_LOUD, ("<---phy_RF6052_Config_ParaFile()\n"));
- return rtStatus;
-
-phy_RF6052_Config_ParaFile_Fail:
- return rtStatus;
-}
-
-
-int
-PHY_RF6052_Config8723A(
- IN PADAPTER Adapter)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- int rtStatus = _SUCCESS;
-
- //
- // Initialize general global value
- //
- // TODO: Extend RF_PATH_C and RF_PATH_D in the future
- if(pHalData->rf_type == RF_1T1R)
- pHalData->NumTotalRFPath = 1;
- else
- pHalData->NumTotalRFPath = 2;
-
- //
- // Config BB and RF
- //
- rtStatus = phy_RF6052_Config_ParaFile(Adapter);
- return rtStatus;
-
-}
-
-
-//
-// ==> RF shadow Operation API Code Section!!!
-//
-/*-----------------------------------------------------------------------------
- * Function: PHY_RFShadowRead
- * PHY_RFShadowWrite
- * PHY_RFShadowCompare
- * PHY_RFShadowRecorver
- * PHY_RFShadowCompareAll
- * PHY_RFShadowRecorverAll
- * PHY_RFShadowCompareFlagSet
- * PHY_RFShadowRecorverFlagSet
- *
- * Overview: When we set RF register, we must write shadow at first.
- * When we are running, we must compare shadow abd locate error addr.
- * Decide to recorver or not.
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 11/20/2008 MHC Create Version 0.
- *
- *---------------------------------------------------------------------------*/
-u32
-PHY_RFShadowRead(
- IN PADAPTER Adapter,
- IN RF_RADIO_PATH_E eRFPath,
- IN u32 Offset)
-{
- return RF_Shadow[eRFPath][Offset].Value;
-
-} /* PHY_RFShadowRead */
-
-
-VOID
-PHY_RFShadowWrite(
- IN PADAPTER Adapter,
- IN RF_RADIO_PATH_E eRFPath,
- IN u32 Offset,
- IN u32 Data)
-{
- RF_Shadow[eRFPath][Offset].Value = (Data & bRFRegOffsetMask);
- RF_Shadow[eRFPath][Offset].Driver_Write = _TRUE;
-
-} /* PHY_RFShadowWrite */
-
-
-BOOLEAN
-PHY_RFShadowCompare(
- IN PADAPTER Adapter,
- IN RF_RADIO_PATH_E eRFPath,
- IN u32 Offset)
-{
- u32 reg;
- // Check if we need to check the register
- if (RF_Shadow[eRFPath][Offset].Compare == _TRUE)
- {
- reg = PHY_QueryRFReg(Adapter, eRFPath, Offset, bRFRegOffsetMask);
- // Compare shadow and real rf register for 20bits!!
- if (RF_Shadow[eRFPath][Offset].Value != reg)
- {
- // Locate error position.
- RF_Shadow[eRFPath][Offset].ErrorOrNot = _TRUE;
- //RT_TRACE(COMP_INIT, DBG_LOUD,
- //("PHY_RFShadowCompare RF-%d Addr%02lx Err = %05lx\n",
- //eRFPath, Offset, reg));
- }
- return RF_Shadow[eRFPath][Offset].ErrorOrNot ;
- }
- return _FALSE;
-} /* PHY_RFShadowCompare */
-
-
-VOID
-PHY_RFShadowRecorver(
- IN PADAPTER Adapter,
- IN RF_RADIO_PATH_E eRFPath,
- IN u32 Offset)
-{
- // Check if the address is error
- if (RF_Shadow[eRFPath][Offset].ErrorOrNot == _TRUE)
- {
- // Check if we need to recorver the register.
- if (RF_Shadow[eRFPath][Offset].Recorver == _TRUE)
- {
- PHY_SetRFReg(Adapter, eRFPath, Offset, bRFRegOffsetMask,
- RF_Shadow[eRFPath][Offset].Value);
- //RT_TRACE(COMP_INIT, DBG_LOUD,
- //("PHY_RFShadowRecorver RF-%d Addr%02lx=%05lx",
- //eRFPath, Offset, RF_Shadow[eRFPath][Offset].Value));
- }
- }
-
-} /* PHY_RFShadowRecorver */
-
-
-VOID
-PHY_RFShadowCompareAll(
- IN PADAPTER Adapter)
-{
- u32 eRFPath;
- u32 Offset;
-
- for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++)
- {
- for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
- {
- PHY_RFShadowCompare(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset);
- }
- }
-
-} /* PHY_RFShadowCompareAll */
-
-
-VOID
-PHY_RFShadowRecorverAll(
- IN PADAPTER Adapter)
-{
- u32 eRFPath;
- u32 Offset;
-
- for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++)
- {
- for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
- {
- PHY_RFShadowRecorver(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset);
- }
- }
-
-} /* PHY_RFShadowRecorverAll */
-
-
-VOID
-PHY_RFShadowCompareFlagSet(
- IN PADAPTER Adapter,
- IN RF_RADIO_PATH_E eRFPath,
- IN u32 Offset,
- IN u8 Type)
-{
- // Set True or False!!!
- RF_Shadow[eRFPath][Offset].Compare = Type;
-
-} /* PHY_RFShadowCompareFlagSet */
-
-
-VOID
-PHY_RFShadowRecorverFlagSet(
- IN PADAPTER Adapter,
- IN RF_RADIO_PATH_E eRFPath,
- IN u32 Offset,
- IN u8 Type)
-{
- // Set True or False!!!
- RF_Shadow[eRFPath][Offset].Recorver= Type;
-
-} /* PHY_RFShadowRecorverFlagSet */
-
-
-VOID
-PHY_RFShadowCompareFlagSetAll(
- IN PADAPTER Adapter)
-{
- u32 eRFPath;
- u32 Offset;
-
- for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++)
- {
- for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
- {
- // 2008/11/20 MH For S3S4 test, we only check reg 26/27 now!!!!
- if (Offset != 0x26 && Offset != 0x27)
- PHY_RFShadowCompareFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _FALSE);
- else
- PHY_RFShadowCompareFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _TRUE);
- }
- }
-
-} /* PHY_RFShadowCompareFlagSetAll */
-
-
-VOID
-PHY_RFShadowRecorverFlagSetAll(
- IN PADAPTER Adapter)
-{
- u32 eRFPath;
- u32 Offset;
-
- for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++)
- {
- for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
- {
- // 2008/11/20 MH For S3S4 test, we only check reg 26/27 now!!!!
- if (Offset != 0x26 && Offset != 0x27)
- PHY_RFShadowRecorverFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _FALSE);
- else
- PHY_RFShadowRecorverFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _TRUE);
- }
- }
-
-} /* PHY_RFShadowCompareFlagSetAll */
-
-VOID
-PHY_RFShadowRefresh(
- IN PADAPTER Adapter)
-{
- u32 eRFPath;
- u32 Offset;
-
- for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++)
- {
- for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
- {
- RF_Shadow[eRFPath][Offset].Value = 0;
- RF_Shadow[eRFPath][Offset].Compare = _FALSE;
- RF_Shadow[eRFPath][Offset].Recorver = _FALSE;
- RF_Shadow[eRFPath][Offset].ErrorOrNot = _FALSE;
- RF_Shadow[eRFPath][Offset].Driver_Write = _FALSE;
- }
- }
-
-} /* PHY_RFShadowRead */
-
-/* End of HalRf6052.c */
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+/******************************************************************************
+ *
+ *
+ * Module: rtl8192c_rf6052.c ( Source C File)
+ *
+ * Note: Provide RF 6052 series relative API.
+ *
+ * Function:
+ *
+ * Export:
+ *
+ * Abbrev:
+ *
+ * History:
+ * Data Who Remark
+ *
+ * 09/25/2008 MHC Create initial version.
+ * 11/05/2008 MHC Add API for tw power setting.
+ *
+ *
+******************************************************************************/
+
+#define _RTL8723A_RF6052_C_
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+#include <rtw_byteorder.h>
+
+#include <rtl8723a_hal.h>
+
+/*---------------------------Define Local Constant---------------------------*/
+// Define local structure for debug!!!!!
+typedef struct RF_Shadow_Compare_Map {
+ // Shadow register value
+ u32 Value;
+ // Compare or not flag
+ u8 Compare;
+ // Record If it had ever modified unpredicted
+ u8 ErrorOrNot;
+ // Recorver Flag
+ u8 Recorver;
+ //
+ u8 Driver_Write;
+}RF_SHADOW_T;
+/*---------------------------Define Local Constant---------------------------*/
+
+
+/*------------------------Define global variable-----------------------------*/
+/*------------------------Define global variable-----------------------------*/
+
+
+/*------------------------Define local variable------------------------------*/
+// 2008/11/20 MH For Debug only, RF
+//static RF_SHADOW_T RF_Shadow[RF6052_MAX_PATH][RF6052_MAX_REG] = {0};
+static RF_SHADOW_T RF_Shadow[RF6052_MAX_PATH][RF6052_MAX_REG];
+/*------------------------Define local variable------------------------------*/
+
+
+/*-----------------------------------------------------------------------------
+ * Function: RF_ChangeTxPath
+ *
+ * Overview: For RL6052, we must change some RF settign for 1T or 2T.
+ *
+ * Input: u2Byte DataRate // 0x80-8f, 0x90-9f
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 09/25/2008 MHC Create Version 0.
+ * Firmwaer support the utility later.
+ *
+ *---------------------------------------------------------------------------*/
+void rtl8192c_RF_ChangeTxPath( IN PADAPTER Adapter,
+ IN u16 DataRate)
+{
+// We do not support gain table change inACUT now !!!! Delete later !!!
+#if 0//(RTL92SE_FPGA_VERIFY == 0)
+ static u1Byte RF_Path_Type = 2; // 1 = 1T 2= 2T
+ static u4Byte tx_gain_tbl1[6]
+ = {0x17f50, 0x11f40, 0x0cf30, 0x08720, 0x04310, 0x00100};
+ static u4Byte tx_gain_tbl2[6]
+ = {0x15ea0, 0x10e90, 0x0c680, 0x08250, 0x04040, 0x00030};
+ u1Byte i;
+
+ if (RF_Path_Type == 2 && (DataRate&0xF) <= 0x7)
+ {
+ // Set TX SYNC power G2G3 loop filter
+ PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
+ RF_TXPA_G2, bRFRegOffsetMask, 0x0f000);
+ PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
+ RF_TXPA_G3, bRFRegOffsetMask, 0xeacf1);
+
+ // Change TX AGC gain table
+ for (i = 0; i < 6; i++)
+ PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
+ RF_TX_AGC, bRFRegOffsetMask, tx_gain_tbl1[i]);
+
+ // Set PA to high value
+ PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
+ RF_TXPA_G2, bRFRegOffsetMask, 0x01e39);
+ }
+ else if (RF_Path_Type == 1 && (DataRate&0xF) >= 0x8)
+ {
+ // Set TX SYNC power G2G3 loop filter
+ PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
+ RF_TXPA_G2, bRFRegOffsetMask, 0x04440);
+ PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
+ RF_TXPA_G3, bRFRegOffsetMask, 0xea4f1);
+
+ // Change TX AGC gain table
+ for (i = 0; i < 6; i++)
+ PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
+ RF_TX_AGC, bRFRegOffsetMask, tx_gain_tbl2[i]);
+
+ // Set PA low gain
+ PHY_SetRFReg(Adapter, (RF_RADIO_PATH_E)RF_PATH_A,
+ RF_TXPA_G2, bRFRegOffsetMask, 0x01e19);
+ }
+#endif
+
+} /* RF_ChangeTxPath */
+
+
+/*-----------------------------------------------------------------------------
+ * Function: PHY_RF6052SetBandwidth()
+ *
+ * Overview: This function is called by SetBWModeCallback8190Pci() only
+ *
+ * Input: PADAPTER Adapter
+ * WIRELESS_BANDWIDTH_E Bandwidth //20M or 40M
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Note: For RF type 0222D
+ *---------------------------------------------------------------------------*/
+VOID
+rtl8192c_PHY_RF6052SetBandwidth(
+ IN PADAPTER Adapter,
+ IN HT_CHANNEL_WIDTH Bandwidth) //20M or 40M
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+ switch(Bandwidth)
+ {
+ case HT_CHANNEL_WIDTH_20:
+ pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff) | 0x0400);
+ PHY_SetRFReg(Adapter, RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
+ break;
+
+ case HT_CHANNEL_WIDTH_40:
+ pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff));
+ PHY_SetRFReg(Adapter, RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
+ break;
+
+ default:
+ //RT_TRACE(COMP_DBG, DBG_LOUD, ("PHY_SetRF8225Bandwidth(): unknown Bandwidth: %#X\n",Bandwidth ));
+ break;
+ }
+
+}
+
+
+/*-----------------------------------------------------------------------------
+ * Function: PHY_RF6052SetCckTxPower
+ *
+ * Overview:
+ *
+ * Input: NONE
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 11/05/2008 MHC Simulate 8192series..
+ *
+ *---------------------------------------------------------------------------*/
+
+VOID
+rtl8192c_PHY_RF6052SetCckTxPower(
+ IN PADAPTER Adapter,
+ IN u8* pPowerlevel)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
+ struct dm_priv *pdmpriv = &pHalData->dmpriv;
+ struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
+ //PMGNT_INFO pMgntInfo=&Adapter->MgntInfo;
+ u32 TxAGC[2]={0, 0}, tmpval=0;
+ BOOLEAN TurboScanOff = _FALSE;
+ u8 idx1, idx2;
+ u8* ptr;
+
+ // 2010/10/18 MH Accorsing to SD3 eechou's suggestion, we need to disable turbo scan for RU.
+ // Otherwise, external PA will be broken if power index > 0x20.
+#ifdef CONFIG_USB_HCI
+ if (pHalData->EEPROMRegulatory != 0 || pHalData->ExternalPA)
+#else
+ if (pHalData->EEPROMRegulatory != 0)
+#endif
+ {
+ //DbgPrint("TurboScanOff=1 EEPROMRegulatory=%d ExternalPA=%d\n", pHalData->EEPROMRegulatory, pHalData->ExternalPA);
+ TurboScanOff = _TRUE;
+ }
+
+ if(pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
+ {
+ TxAGC[RF_PATH_A] = 0x3f3f3f3f;
+ TxAGC[RF_PATH_B] = 0x3f3f3f3f;
+
+ TurboScanOff = _TRUE;//disable turbo scan
+
+ if(TurboScanOff)
+ {
+ for(idx1=RF_PATH_A; idx1<=RF_PATH_B; idx1++)
+ {
+ TxAGC[idx1] =
+ pPowerlevel[idx1] | (pPowerlevel[idx1]<<8) |
+ (pPowerlevel[idx1]<<16) | (pPowerlevel[idx1]<<24);
+#ifdef CONFIG_USB_HCI
+ // 2010/10/18 MH For external PA module. We need to limit power index to be less than 0x20.
+ if (TxAGC[idx1] > 0x20 && pHalData->ExternalPA)
+ TxAGC[idx1] = 0x20;
+#endif
+ }
+ }
+ }
+ else
+ {
+// 20100427 Joseph: Driver dynamic Tx power shall not affect Tx power. It shall be determined by power training mechanism.
+// Currently, we cannot fully disable driver dynamic tx power mechanism because it is referenced by BT coexist mechanism.
+// In the future, two mechanism shall be separated from each other and maintained independantly. Thanks for Lanhsin's reminder.
+ if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
+ {
+ TxAGC[RF_PATH_A] = 0x10101010;
+ TxAGC[RF_PATH_B] = 0x10101010;
+ }
+ else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2)
+ {
+ TxAGC[RF_PATH_A] = 0x00000000;
+ TxAGC[RF_PATH_B] = 0x00000000;
+ }
+ else
+ {
+ for(idx1=RF_PATH_A; idx1<=RF_PATH_B; idx1++)
+ {
+ TxAGC[idx1] =
+ pPowerlevel[idx1] | (pPowerlevel[idx1]<<8) |
+ (pPowerlevel[idx1]<<16) | (pPowerlevel[idx1]<<24);
+ }
+
+ if(pHalData->EEPROMRegulatory==0)
+ {
+ tmpval = (pHalData->MCSTxPowerLevelOriginalOffset[0][6]) +
+ (pHalData->MCSTxPowerLevelOriginalOffset[0][7]<<8);
+ TxAGC[RF_PATH_A] += tmpval;
+
+ tmpval = (pHalData->MCSTxPowerLevelOriginalOffset[0][14]) +
+ (pHalData->MCSTxPowerLevelOriginalOffset[0][15]<<24);
+ TxAGC[RF_PATH_B] += tmpval;
+ }
+ }
+ }
+
+ for(idx1=RF_PATH_A; idx1<=RF_PATH_B; idx1++)
+ {
+ ptr = (u8*)(&(TxAGC[idx1]));
+ for(idx2=0; idx2<4; idx2++)
+ {
+ if(*ptr > RF6052_MAX_TX_PWR)
+ *ptr = RF6052_MAX_TX_PWR;
+ ptr++;
+ }
+ }
+
+ // rf-A cck tx power
+ tmpval = TxAGC[RF_PATH_A]&0xff;
+ PHY_SetBBReg(Adapter, rTxAGC_A_CCK1_Mcs32, bMaskByte1, tmpval);
+ //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 1M (rf-A) = 0x%x (reg 0x%x)\n", tmpval, rTxAGC_A_CCK1_Mcs32));
+ tmpval = TxAGC[RF_PATH_A]>>8;
+ PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_A_CCK2_11, 0xffffff00, tmpval);
+ //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 2~11M (rf-A) = 0x%x (reg 0x%x)\n", tmpval, rTxAGC_B_CCK11_A_CCK2_11));
+
+ // rf-B cck tx power
+ tmpval = TxAGC[RF_PATH_B]>>24;
+ PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_A_CCK2_11, bMaskByte0, tmpval);
+ //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 11M (rf-B) = 0x%x (reg 0x%x)\n", tmpval, rTxAGC_B_CCK11_A_CCK2_11));
+ tmpval = TxAGC[RF_PATH_B]&0x00ffffff;
+ PHY_SetBBReg(Adapter, rTxAGC_B_CCK1_55_Mcs32, 0xffffff00, tmpval);
+ //RTPRINT(FPHY, PHY_TXPWR, ("CCK PWR 1~5.5M (rf-B) = 0x%x (reg 0x%x)\n",
+ // tmpval, rTxAGC_B_CCK1_55_Mcs32));
+
+} /* PHY_RF6052SetCckTxPower */
+
+//
+// powerbase0 for OFDM rates
+// powerbase1 for HT MCS rates
+//
+static void getPowerBase(
+ IN PADAPTER Adapter,
+ IN u8* pPowerLevel,
+ IN u8 Channel,
+ IN OUT u32* OfdmBase,
+ IN OUT u32* MCSBase
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ u32 powerBase0, powerBase1;
+ u8 Legacy_pwrdiff=0;
+ s8 HT20_pwrdiff=0;
+ u8 i, powerlevel[2];
+
+ for(i=0; i<2; i++)
+ {
+ powerlevel[i] = pPowerLevel[i];
+ Legacy_pwrdiff = pHalData->TxPwrLegacyHtDiff[i][Channel-1];
+ powerBase0 = powerlevel[i] + Legacy_pwrdiff;
+
+ powerBase0 = (powerBase0<<24) | (powerBase0<<16) |(powerBase0<<8) |powerBase0;
+ *(OfdmBase+i) = powerBase0;
+ //RTPRINT(FPHY, PHY_TXPWR, (" [OFDM power base index rf(%c) = 0x%x]\n", ((i==0)?'A':'B'), *(OfdmBase+i)));
+ }
+
+ for(i=0; i<2; i++)
+ {
+ //Check HT20 to HT40 diff
+ if(pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_20)
+ {
+ HT20_pwrdiff = pHalData->TxPwrHt20Diff[i][Channel-1];
+ powerlevel[i] += HT20_pwrdiff;
+ }
+ powerBase1 = powerlevel[i];
+ powerBase1 = (powerBase1<<24) | (powerBase1<<16) |(powerBase1<<8) |powerBase1;
+ *(MCSBase+i) = powerBase1;
+ //RTPRINT(FPHY, PHY_TXPWR, (" [MCS power base index rf(%c) = 0x%x]\n", ((i==0)?'A':'B'), *(MCSBase+i)));
+ }
+}
+
+static void getTxPowerWriteValByRegulatory(
+ IN PADAPTER Adapter,
+ IN u8 Channel,
+ IN u8 index,
+ IN u32* powerBase0,
+ IN u32* powerBase1,
+ OUT u32* pOutWriteVal
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ struct dm_priv *pdmpriv = &pHalData->dmpriv;
+ u8 i, chnlGroup, pwr_diff_limit[4];
+ u32 writeVal, customer_limit, rf;
+
+ //
+ // Index 0 & 1= legacy OFDM, 2-5=HT_MCS rate
+ //
+ for(rf=0; rf<2; rf++)
+ {
+ switch(pHalData->EEPROMRegulatory)
+ {
+ case 0: // Realtek better performance
+ // increase power diff defined by Realtek for large power
+ chnlGroup = 0;
+ //RTPRINT(FPHY, PHY_TXPWR, ("MCSTxPowerLevelOriginalOffset[%d][%d] = 0x%x\n",
+ // chnlGroup, index, pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)]));
+ writeVal = pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)] +
+ ((index<2)?powerBase0[rf]:powerBase1[rf]);
+ //RTPRINT(FPHY, PHY_TXPWR, ("RTK better performance, writeVal(%c) = 0x%x\n", ((rf==0)?'A':'B'), writeVal));
+ break;
+ case 1: // Realtek regulatory
+ // increase power diff defined by Realtek for regulatory
+ {
+ if(pHalData->pwrGroupCnt == 1)
+ chnlGroup = 0;
+ if(pHalData->pwrGroupCnt >= 3)
+ {
+ if(Channel <= 3)
+ chnlGroup = 0;
+ else if(Channel >= 4 && Channel <= 9)
+ chnlGroup = 1;
+ else if(Channel > 9)
+ chnlGroup = 2;
+
+ if(pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_20)
+ chnlGroup++;
+ else
+ chnlGroup+=4;
+ }
+ //RTPRINT(FPHY, PHY_TXPWR, ("MCSTxPowerLevelOriginalOffset[%d][%d] = 0x%x\n",
+ //chnlGroup, index, pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)]));
+ writeVal = pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)] +
+ ((index<2)?powerBase0[rf]:powerBase1[rf]);
+ //RTPRINT(FPHY, PHY_TXPWR, ("Realtek regulatory, 20MHz, writeVal(%c) = 0x%x\n", ((rf==0)?'A':'B'), writeVal));
+ }
+ break;
+ case 2: // Better regulatory
+ // don't increase any power diff
+ writeVal = ((index<2)?powerBase0[rf]:powerBase1[rf]);
+ //RTPRINT(FPHY, PHY_TXPWR, ("Better regulatory, writeVal(%c) = 0x%x\n", ((rf==0)?'A':'B'), writeVal));
+ break;
+ case 3: // Customer defined power diff.
+ // increase power diff defined by customer.
+ chnlGroup = 0;
+ //RTPRINT(FPHY, PHY_TXPWR, ("MCSTxPowerLevelOriginalOffset[%d][%d] = 0x%x\n",
+ // chnlGroup, index, pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)]));
+
+ if (pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_40)
+ {
+ //RTPRINT(FPHY, PHY_TXPWR, ("customer's limit, 40MHz rf(%c) = 0x%x\n",
+ // ((rf==0)?'A':'B'), pHalData->PwrGroupHT40[rf][Channel-1]));
+ }
+ else
+ {
+ //RTPRINT(FPHY, PHY_TXPWR, ("customer's limit, 20MHz rf(%c) = 0x%x\n",
+ // ((rf==0)?'A':'B'), pHalData->PwrGroupHT20[rf][Channel-1]));
+ }
+ for (i=0; i<4; i++)
+ {
+ pwr_diff_limit[i] = (u8)((pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)]&(0x7f<<(i*8)))>>(i*8));
+ if (pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_40)
+ {
+ if(pwr_diff_limit[i] > pHalData->PwrGroupHT40[rf][Channel-1])
+ pwr_diff_limit[i] = pHalData->PwrGroupHT40[rf][Channel-1];
+ }
+ else
+ {
+ if(pwr_diff_limit[i] > pHalData->PwrGroupHT20[rf][Channel-1])
+ pwr_diff_limit[i] = pHalData->PwrGroupHT20[rf][Channel-1];
+ }
+ }
+ customer_limit = (pwr_diff_limit[3]<<24) | (pwr_diff_limit[2]<<16) |
+ (pwr_diff_limit[1]<<8) | (pwr_diff_limit[0]);
+ //RTPRINT(FPHY, PHY_TXPWR, ("Customer's limit rf(%c) = 0x%x\n", ((rf==0)?'A':'B'), customer_limit));
+
+ writeVal = customer_limit + ((index<2)?powerBase0[rf]:powerBase1[rf]);
+ //RTPRINT(FPHY, PHY_TXPWR, ("Customer, writeVal rf(%c)= 0x%x\n", ((rf==0)?'A':'B'), writeVal));
+ break;
+ default:
+ chnlGroup = 0;
+ writeVal = pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)] +
+ ((index<2)?powerBase0[rf]:powerBase1[rf]);
+ //RTPRINT(FPHY, PHY_TXPWR, ("RTK better performance, writeVal rf(%c) = 0x%x\n", ((rf==0)?'A':'B'), writeVal));
+ break;
+ }
+
+// 20100427 Joseph: Driver dynamic Tx power shall not affect Tx power. It shall be determined by power training mechanism.
+// Currently, we cannot fully disable driver dynamic tx power mechanism because it is referenced by BT coexist mechanism.
+// In the future, two mechanism shall be separated from each other and maintained independantly. Thanks for Lanhsin's reminder.
+
+ if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
+ writeVal = 0x14141414;
+ else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level2)
+ writeVal = 0x00000000;
+
+
+ // 20100628 Joseph: High power mode for BT-Coexist mechanism.
+ // This mechanism is only applied when Driver-Highpower-Mechanism is OFF.
+ if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_BT1)
+ {
+ //RTPRINT(FBT, BT_TRACE, ("Tx Power (-6)\n"));
+ writeVal = writeVal - 0x06060606;
+ }
+ else if(pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_BT2)
+ {
+ //RTPRINT(FBT, BT_TRACE, ("Tx Power (-0)\n"));
+ writeVal = writeVal;
+ }
+ *(pOutWriteVal+rf) = writeVal;
+ }
+}
+
+static void writeOFDMPowerReg(
+ IN PADAPTER Adapter,
+ IN u8 index,
+ IN u32* pValue
+ )
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ u16 RegOffset_A[6] = { rTxAGC_A_Rate18_06, rTxAGC_A_Rate54_24,
+ rTxAGC_A_Mcs03_Mcs00, rTxAGC_A_Mcs07_Mcs04,
+ rTxAGC_A_Mcs11_Mcs08, rTxAGC_A_Mcs15_Mcs12};
+ u16 RegOffset_B[6] = { rTxAGC_B_Rate18_06, rTxAGC_B_Rate54_24,
+ rTxAGC_B_Mcs03_Mcs00, rTxAGC_B_Mcs07_Mcs04,
+ rTxAGC_B_Mcs11_Mcs08, rTxAGC_B_Mcs15_Mcs12};
+ u8 i, rf, pwr_val[4];
+ u32 writeVal;
+ u16 RegOffset;
+
+ for(rf=0; rf<2; rf++)
+ {
+ writeVal = pValue[rf];
+ for(i=0; i<4; i++)
+ {
+ pwr_val[i] = (u8)((writeVal & (0x7f<<(i*8)))>>(i*8));
+ if (pwr_val[i] > RF6052_MAX_TX_PWR)
+ pwr_val[i] = RF6052_MAX_TX_PWR;
+ }
+ writeVal = (pwr_val[3]<<24) | (pwr_val[2]<<16) |(pwr_val[1]<<8) |pwr_val[0];
+
+ if(rf == 0)
+ RegOffset = RegOffset_A[index];
+ else
+ RegOffset = RegOffset_B[index];
+
+ PHY_SetBBReg(Adapter, RegOffset, bMaskDWord, writeVal);
+ //RTPRINT(FPHY, PHY_TXPWR, ("Set 0x%x = %08x\n", RegOffset, writeVal));
+
+ // 201005115 Joseph: Set Tx Power diff for Tx power training mechanism.
+ if(((pHalData->rf_type == RF_2T2R) &&
+ (RegOffset == rTxAGC_A_Mcs15_Mcs12 || RegOffset == rTxAGC_B_Mcs15_Mcs12))||
+ ((pHalData->rf_type != RF_2T2R) &&
+ (RegOffset == rTxAGC_A_Mcs07_Mcs04 || RegOffset == rTxAGC_B_Mcs07_Mcs04)) )
+ {
+ writeVal = pwr_val[3];
+ if(RegOffset == rTxAGC_A_Mcs15_Mcs12 || RegOffset == rTxAGC_A_Mcs07_Mcs04)
+ RegOffset = 0xc90;
+ if(RegOffset == rTxAGC_B_Mcs15_Mcs12 || RegOffset == rTxAGC_B_Mcs07_Mcs04)
+ RegOffset = 0xc98;
+ for(i=0; i<3; i++)
+ {
+ if(i!=2)
+ writeVal = (writeVal>8)?(writeVal-8):0;
+ else
+ writeVal = (writeVal>6)?(writeVal-6):0;
+ rtw_write8(Adapter, (u32)(RegOffset+i), (u8)writeVal);
+ }
+ }
+ }
+}
+/*-----------------------------------------------------------------------------
+ * Function: PHY_RF6052SetOFDMTxPower
+ *
+ * Overview: For legacy and HY OFDM, we must read EEPROM TX power index for
+ * different channel and read original value in TX power register area from
+ * 0xe00. We increase offset and original value to be correct tx pwr.
+ *
+ * Input: NONE
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 11/05/2008 MHC Simulate 8192 series method.
+ * 01/06/2009 MHC 1. Prevent Path B tx power overflow or underflow dure to
+ * A/B pwr difference or legacy/HT pwr diff.
+ * 2. We concern with path B legacy/HT OFDM difference.
+ * 01/22/2009 MHC Support new EPRO format from SD3.
+ *
+ *---------------------------------------------------------------------------*/
+VOID
+rtl8192c_PHY_RF6052SetOFDMTxPower(
+ IN PADAPTER Adapter,
+ IN u8* pPowerLevel,
+ IN u8 Channel)
+{
+ //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ u32 writeVal[2], powerBase0[2], powerBase1[2];
+ u8 index = 0;
+
+ getPowerBase(Adapter, pPowerLevel, Channel, &powerBase0[0], &powerBase1[0]);
+
+ for(index=0; index<6; index++)
+ {
+ getTxPowerWriteValByRegulatory(Adapter, Channel, index,
+ &powerBase0[0], &powerBase1[0], &writeVal[0]);
+
+ writeOFDMPowerReg(Adapter, index, &writeVal[0]);
+ }
+
+}
+
+
+static VOID
+phy_RF6052_Config_HardCode(
+ IN PADAPTER Adapter
+ )
+{
+
+ // Set Default Bandwidth to 20M
+ //Adapter->HalFunc .SetBWModeHandler(Adapter, HT_CHANNEL_WIDTH_20);
+
+ // TODO: Set Default Channel to channel one for RTL8225
+
+}
+
+static int
+phy_RF6052_Config_ParaFile(
+ IN PADAPTER Adapter
+ )
+{
+ u32 u4RegValue;
+ u8 eRFPath;
+ BB_REGISTER_DEFINITION_T *pPhyReg;
+
+ int rtStatus = _SUCCESS;
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+
+ static char sz8723RadioAFile[] = RTL8723_PHY_RADIO_A;
+ static char sz8723RadioBFile[] = RTL8723_PHY_RADIO_B;
+ char *pszRadioAFile, *pszRadioBFile;
+
+
+ pszRadioAFile = sz8723RadioAFile;
+ pszRadioBFile = sz8723RadioBFile;
+
+
+ //3//-----------------------------------------------------------------
+ //3// <2> Initialize RF
+ //3//-----------------------------------------------------------------
+ //for(eRFPath = RF_PATH_A; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
+ for(eRFPath = 0; eRFPath <pHalData->NumTotalRFPath; eRFPath++)
+ {
+
+ pPhyReg = &pHalData->PHYRegDef[eRFPath];
+
+ /*----Store original RFENV control type----*/
+ switch(eRFPath)
+ {
+ case RF_PATH_A:
+ case RF_PATH_C:
+ u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV);
+ break;
+ case RF_PATH_B :
+ case RF_PATH_D:
+ u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV<<16);
+ break;
+ }
+
+ /*----Set RF_ENV enable----*/
+ PHY_SetBBReg(Adapter, pPhyReg->rfintfe, bRFSI_RFENV<<16, 0x1);
+ rtw_udelay_os(1);//PlatformStallExecution(1);
+
+ /*----Set RF_ENV output high----*/
+ PHY_SetBBReg(Adapter, pPhyReg->rfintfo, bRFSI_RFENV, 0x1);
+ rtw_udelay_os(1);//PlatformStallExecution(1);
+
+ /* Set bit number of Address and Data for RF register */
+ PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireAddressLength, 0x0); // Set 1 to 4 bits for 8255
+ rtw_udelay_os(1);//PlatformStallExecution(1);
+
+ PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireDataLength, 0x0); // Set 0 to 12 bits for 8255
+ rtw_udelay_os(1);//PlatformStallExecution(1);
+
+ /*----Initialize RF fom connfiguration file----*/
+ switch(eRFPath)
+ {
+ case RF_PATH_A:
+#ifdef CONFIG_EMBEDDED_FWIMG
+ #ifdef CONFIG_PHY_SETTING_WITH_ODM
+ if(HAL_STATUS_FAILURE ==ODM_ConfigRFWithHeaderFile(&pHalData->odmpriv,(ODM_RF_RADIO_PATH_E)eRFPath, (ODM_RF_RADIO_PATH_E)eRFPath))
+ rtStatus= _FAIL;
+ #else
+ rtStatus= rtl8723a_PHY_ConfigRFWithHeaderFile(Adapter,(RF_RADIO_PATH_E)eRFPath);
+ #endif//#ifdef CONFIG_PHY_SETTING_WITH_ODM
+#else
+ rtStatus = rtl8192c_PHY_ConfigRFWithParaFile(Adapter, pszRadioAFile, (RF_RADIO_PATH_E)eRFPath);
+#endif//#ifdef CONFIG_EMBEDDED_FWIMG
+ break;
+ case RF_PATH_B:
+#ifdef CONFIG_EMBEDDED_FWIMG
+ #ifdef CONFIG_PHY_SETTING_WITH_ODM
+ if(HAL_STATUS_FAILURE ==ODM_ConfigRFWithHeaderFile(&pHalData->odmpriv,(ODM_RF_RADIO_PATH_E)eRFPath, (ODM_RF_RADIO_PATH_E)eRFPath))
+ rtStatus= _FAIL;
+ #else
+ rtStatus = rtl8723a_PHY_ConfigRFWithHeaderFile(Adapter,(RF_RADIO_PATH_E)eRFPath);
+ #endif
+#else
+ rtStatus = rtl8192c_PHY_ConfigRFWithParaFile(Adapter, pszRadioBFile, (RF_RADIO_PATH_E)eRFPath);
+#endif
+ break;
+ case RF_PATH_C:
+ break;
+ case RF_PATH_D:
+ break;
+ }
+
+ /*----Restore RFENV control type----*/;
+ switch(eRFPath)
+ {
+ case RF_PATH_A:
+ case RF_PATH_C:
+ PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV, u4RegValue);
+ break;
+ case RF_PATH_B :
+ case RF_PATH_D:
+ PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV<<16, u4RegValue);
+ break;
+ }
+
+ if(rtStatus != _SUCCESS){
+ //RT_TRACE(COMP_FPGA, DBG_LOUD, ("phy_RF6052_Config_ParaFile():Radio[%d] Fail!!", eRFPath));
+ goto phy_RF6052_Config_ParaFile_Fail;
+ }
+
+ }
+
+ //RT_TRACE(COMP_INIT, DBG_LOUD, ("<---phy_RF6052_Config_ParaFile()\n"));
+ return rtStatus;
+
+phy_RF6052_Config_ParaFile_Fail:
+ return rtStatus;
+}
+
+
+int
+PHY_RF6052_Config8723A(
+ IN PADAPTER Adapter)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
+ int rtStatus = _SUCCESS;
+
+ //
+ // Initialize general global value
+ //
+ // TODO: Extend RF_PATH_C and RF_PATH_D in the future
+ if(pHalData->rf_type == RF_1T1R)
+ pHalData->NumTotalRFPath = 1;
+ else
+ pHalData->NumTotalRFPath = 2;
+
+ //
+ // Config BB and RF
+ //
+ rtStatus = phy_RF6052_Config_ParaFile(Adapter);
+ return rtStatus;
+
+}
+
+
+//
+// ==> RF shadow Operation API Code Section!!!
+//
+/*-----------------------------------------------------------------------------
+ * Function: PHY_RFShadowRead
+ * PHY_RFShadowWrite
+ * PHY_RFShadowCompare
+ * PHY_RFShadowRecorver
+ * PHY_RFShadowCompareAll
+ * PHY_RFShadowRecorverAll
+ * PHY_RFShadowCompareFlagSet
+ * PHY_RFShadowRecorverFlagSet
+ *
+ * Overview: When we set RF register, we must write shadow at first.
+ * When we are running, we must compare shadow abd locate error addr.
+ * Decide to recorver or not.
+ *
+ * Input: NONE
+ *
+ * Output: NONE
+ *
+ * Return: NONE
+ *
+ * Revised History:
+ * When Who Remark
+ * 11/20/2008 MHC Create Version 0.
+ *
+ *---------------------------------------------------------------------------*/
+u32
+PHY_RFShadowRead(
+ IN PADAPTER Adapter,
+ IN RF_RADIO_PATH_E eRFPath,
+ IN u32 Offset)
+{
+ return RF_Shadow[eRFPath][Offset].Value;
+
+} /* PHY_RFShadowRead */
+
+
+VOID
+PHY_RFShadowWrite(
+ IN PADAPTER Adapter,
+ IN RF_RADIO_PATH_E eRFPath,
+ IN u32 Offset,
+ IN u32 Data)
+{
+ RF_Shadow[eRFPath][Offset].Value = (Data & bRFRegOffsetMask);
+ RF_Shadow[eRFPath][Offset].Driver_Write = _TRUE;
+
+} /* PHY_RFShadowWrite */
+
+
+BOOLEAN
+PHY_RFShadowCompare(
+ IN PADAPTER Adapter,
+ IN RF_RADIO_PATH_E eRFPath,
+ IN u32 Offset)
+{
+ u32 reg;
+ // Check if we need to check the register
+ if (RF_Shadow[eRFPath][Offset].Compare == _TRUE)
+ {
+ reg = PHY_QueryRFReg(Adapter, eRFPath, Offset, bRFRegOffsetMask);
+ // Compare shadow and real rf register for 20bits!!
+ if (RF_Shadow[eRFPath][Offset].Value != reg)
+ {
+ // Locate error position.
+ RF_Shadow[eRFPath][Offset].ErrorOrNot = _TRUE;
+ //RT_TRACE(COMP_INIT, DBG_LOUD,
+ //("PHY_RFShadowCompare RF-%d Addr%02lx Err = %05lx\n",
+ //eRFPath, Offset, reg));
+ }
+ return RF_Shadow[eRFPath][Offset].ErrorOrNot ;
+ }
+ return _FALSE;
+} /* PHY_RFShadowCompare */
+
+
+VOID
+PHY_RFShadowRecorver(
+ IN PADAPTER Adapter,
+ IN RF_RADIO_PATH_E eRFPath,
+ IN u32 Offset)
+{
+ // Check if the address is error
+ if (RF_Shadow[eRFPath][Offset].ErrorOrNot == _TRUE)
+ {
+ // Check if we need to recorver the register.
+ if (RF_Shadow[eRFPath][Offset].Recorver == _TRUE)
+ {
+ PHY_SetRFReg(Adapter, eRFPath, Offset, bRFRegOffsetMask,
+ RF_Shadow[eRFPath][Offset].Value);
+ //RT_TRACE(COMP_INIT, DBG_LOUD,
+ //("PHY_RFShadowRecorver RF-%d Addr%02lx=%05lx",
+ //eRFPath, Offset, RF_Shadow[eRFPath][Offset].Value));
+ }
+ }
+
+} /* PHY_RFShadowRecorver */
+
+
+VOID
+PHY_RFShadowCompareAll(
+ IN PADAPTER Adapter)
+{
+ u32 eRFPath;
+ u32 Offset;
+
+ for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++)
+ {
+ for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
+ {
+ PHY_RFShadowCompare(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset);
+ }
+ }
+
+} /* PHY_RFShadowCompareAll */
+
+
+VOID
+PHY_RFShadowRecorverAll(
+ IN PADAPTER Adapter)
+{
+ u32 eRFPath;
+ u32 Offset;
+
+ for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++)
+ {
+ for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
+ {
+ PHY_RFShadowRecorver(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset);
+ }
+ }
+
+} /* PHY_RFShadowRecorverAll */
+
+
+VOID
+PHY_RFShadowCompareFlagSet(
+ IN PADAPTER Adapter,
+ IN RF_RADIO_PATH_E eRFPath,
+ IN u32 Offset,
+ IN u8 Type)
+{
+ // Set True or False!!!
+ RF_Shadow[eRFPath][Offset].Compare = Type;
+
+} /* PHY_RFShadowCompareFlagSet */
+
+
+VOID
+PHY_RFShadowRecorverFlagSet(
+ IN PADAPTER Adapter,
+ IN RF_RADIO_PATH_E eRFPath,
+ IN u32 Offset,
+ IN u8 Type)
+{
+ // Set True or False!!!
+ RF_Shadow[eRFPath][Offset].Recorver= Type;
+
+} /* PHY_RFShadowRecorverFlagSet */
+
+
+VOID
+PHY_RFShadowCompareFlagSetAll(
+ IN PADAPTER Adapter)
+{
+ u32 eRFPath;
+ u32 Offset;
+
+ for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++)
+ {
+ for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
+ {
+ // 2008/11/20 MH For S3S4 test, we only check reg 26/27 now!!!!
+ if (Offset != 0x26 && Offset != 0x27)
+ PHY_RFShadowCompareFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _FALSE);
+ else
+ PHY_RFShadowCompareFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _TRUE);
+ }
+ }
+
+} /* PHY_RFShadowCompareFlagSetAll */
+
+
+VOID
+PHY_RFShadowRecorverFlagSetAll(
+ IN PADAPTER Adapter)
+{
+ u32 eRFPath;
+ u32 Offset;
+
+ for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++)
+ {
+ for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
+ {
+ // 2008/11/20 MH For S3S4 test, we only check reg 26/27 now!!!!
+ if (Offset != 0x26 && Offset != 0x27)
+ PHY_RFShadowRecorverFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _FALSE);
+ else
+ PHY_RFShadowRecorverFlagSet(Adapter, (RF_RADIO_PATH_E)eRFPath, Offset, _TRUE);
+ }
+ }
+
+} /* PHY_RFShadowCompareFlagSetAll */
+
+VOID
+PHY_RFShadowRefresh(
+ IN PADAPTER Adapter)
+{
+ u32 eRFPath;
+ u32 Offset;
+
+ for (eRFPath = 0; eRFPath < RF6052_MAX_PATH; eRFPath++)
+ {
+ for (Offset = 0; Offset <= RF6052_MAX_REG; Offset++)
+ {
+ RF_Shadow[eRFPath][Offset].Value = 0;
+ RF_Shadow[eRFPath][Offset].Compare = _FALSE;
+ RF_Shadow[eRFPath][Offset].Recorver = _FALSE;
+ RF_Shadow[eRFPath][Offset].ErrorOrNot = _FALSE;
+ RF_Shadow[eRFPath][Offset].Driver_Write = _FALSE;
+ }
+ }
+
+} /* PHY_RFShadowRead */
+
+/* End of HalRf6052.c */
+
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_rxdesc.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_rxdesc.c
index a94370cd1a75..f030eb821291 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_rxdesc.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_rxdesc.c
@@ -245,7 +245,7 @@ void rtl8192c_query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pp
// (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive)
//
- if(padapter->pwrctrlpriv.rf_pwrstate == rf_on)
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate == rf_on)
cck_highpwr = (u8)pHalData->bCckHighPower;
else
cck_highpwr = _FALSE;
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_sreset.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_sreset.c
index 3edd244c0825..24028a36508d 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_sreset.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_sreset.c
@@ -1,104 +1,111 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#define _RTL8723A_SRESET_C_
-
-#include <rtl8723a_sreset.h>
-#include <rtl8723a_hal.h>
-
-
-#ifdef DBG_CONFIG_ERROR_DETECT
-void rtl8723a_sreset_xmit_status_check(_adapter *padapter)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- struct sreset_priv *psrtpriv = &pHalData->srestpriv;
-
- unsigned long current_time;
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- unsigned int diff_time;
- u32 txdma_status;
-
-
- if( (txdma_status=rtw_read32(padapter, REG_TXDMA_STATUS)) !=0x00){
- DBG_871X("%s REG_TXDMA_STATUS:0x%08x\n", __FUNCTION__, txdma_status);
- rtw_hal_sreset_reset(padapter);
- }
-
-#ifdef CONFIG_USB_HCI
- //total xmit irp = 4
- //DBG_8192C("==>%s free_xmitbuf_cnt(%d),txirp_cnt(%d)\n",__FUNCTION__,pxmitpriv->free_xmitbuf_cnt,pxmitpriv->txirp_cnt);
- //if(pxmitpriv->txirp_cnt == NR_XMITBUFF+1)
- current_time = rtw_get_current_time();
-
- if(0 == pxmitpriv->free_xmitbuf_cnt || 0 == pxmitpriv->free_xmit_extbuf_cnt) {
-
- diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_time);
-
- if (diff_time > 2000) {
- if (psrtpriv->last_tx_complete_time == 0) {
- psrtpriv->last_tx_complete_time = current_time;
- }
- else{
- diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_complete_time);
- if (diff_time > 4000) {
- //padapter->Wifi_Error_Status = WIFI_TX_HANG;
- DBG_871X("%s tx hang\n", __FUNCTION__);
- rtw_hal_sreset_reset(padapter);
- }
- }
- }
- }
-#endif // #ifdef CONFIG_USB_HCI
-
- if (psrtpriv->dbg_trigger_point == SRESET_TGP_XMIT_STATUS) {
- psrtpriv->dbg_trigger_point = SRESET_TGP_NULL;
- rtw_hal_sreset_reset(padapter);
- return;
- }
-}
-
-void rtl8723a_sreset_linked_status_check(_adapter *padapter)
-{
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- struct sreset_priv *psrtpriv = &pHalData->srestpriv;
-#if 0
- u32 regc50,regc58,reg824,reg800;
- regc50 = rtw_read32(padapter,0xc50);
- regc58 = rtw_read32(padapter,0xc58);
- reg824 = rtw_read32(padapter,0x824);
- reg800 = rtw_read32(padapter,0x800);
- if( ((regc50&0xFFFFFF00)!= 0x69543400)||
- ((regc58&0xFFFFFF00)!= 0x69543400)||
- (((reg824&0xFFFFFF00)!= 0x00390000)&&(((reg824&0xFFFFFF00)!= 0x80390000)))||
- ( ((reg800&0xFFFFFF00)!= 0x03040000)&&((reg800&0xFFFFFF00)!= 0x83040000)))
- {
- DBG_8192C("%s regc50:0x%08x, regc58:0x%08x, reg824:0x%08x, reg800:0x%08x,\n", __FUNCTION__,
- regc50, regc58, reg824, reg800);
- rtw_hal_sreset_reset(padapter);
- }
-#endif
-
- if (psrtpriv->dbg_trigger_point == SRESET_TGP_LINK_STATUS) {
- psrtpriv->dbg_trigger_point = SRESET_TGP_NULL;
- rtw_hal_sreset_reset(padapter);
- return;
- }
-}
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#define _RTL8723A_SRESET_C_
+
+#include <rtl8723a_sreset.h>
+#include <rtl8723a_hal.h>
+
+
+#ifdef DBG_CONFIG_ERROR_DETECT
+void rtl8723a_sreset_xmit_status_check(_adapter *padapter)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct sreset_priv *psrtpriv = &pHalData->srestpriv;
+
+ unsigned long current_time;
+ struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
+ unsigned int diff_time;
+ u32 txdma_status;
+
+
+ if( (txdma_status=rtw_read32(padapter, REG_TXDMA_STATUS)) !=0x00){
+ DBG_871X("%s REG_TXDMA_STATUS:0x%08x\n", __FUNCTION__, txdma_status);
+ rtw_hal_sreset_reset(padapter);
+ }
+
+#ifdef CONFIG_USB_HCI
+ //total xmit irp = 4
+ //DBG_8192C("==>%s free_xmitbuf_cnt(%d),txirp_cnt(%d)\n",__FUNCTION__,pxmitpriv->free_xmitbuf_cnt,pxmitpriv->txirp_cnt);
+ //if(pxmitpriv->txirp_cnt == NR_XMITBUFF+1)
+ current_time = rtw_get_current_time();
+
+ if(0 == pxmitpriv->free_xmitbuf_cnt || 0 == pxmitpriv->free_xmit_extbuf_cnt) {
+
+ diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_time);
+
+ if (diff_time > 2000) {
+ if (psrtpriv->last_tx_complete_time == 0) {
+ psrtpriv->last_tx_complete_time = current_time;
+ }
+ else{
+ diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_complete_time);
+ if (diff_time > 4000) {
+ u32 ability;
+
+ //padapter->Wifi_Error_Status = WIFI_TX_HANG;
+ rtw_hal_get_def_var(padapter, HAL_DEF_DBG_DM_FUNC, &ability);
+
+ DBG_871X("%s tx hang %s\n", __FUNCTION__,
+ (ability & ODM_BB_ADAPTIVITY)? "ODM_BB_ADAPTIVITY" : "");
+
+ if (!(ability & ODM_BB_ADAPTIVITY))
+ rtw_hal_sreset_reset(padapter);
+ }
+ }
+ }
+ }
+#endif // #ifdef CONFIG_USB_HCI
+
+ if (psrtpriv->dbg_trigger_point == SRESET_TGP_XMIT_STATUS) {
+ psrtpriv->dbg_trigger_point = SRESET_TGP_NULL;
+ rtw_hal_sreset_reset(padapter);
+ return;
+ }
+}
+
+void rtl8723a_sreset_linked_status_check(_adapter *padapter)
+{
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct sreset_priv *psrtpriv = &pHalData->srestpriv;
+#if 0
+ u32 regc50,regc58,reg824,reg800;
+ regc50 = rtw_read32(padapter,0xc50);
+ regc58 = rtw_read32(padapter,0xc58);
+ reg824 = rtw_read32(padapter,0x824);
+ reg800 = rtw_read32(padapter,0x800);
+ if( ((regc50&0xFFFFFF00)!= 0x69543400)||
+ ((regc58&0xFFFFFF00)!= 0x69543400)||
+ (((reg824&0xFFFFFF00)!= 0x00390000)&&(((reg824&0xFFFFFF00)!= 0x80390000)))||
+ ( ((reg800&0xFFFFFF00)!= 0x03040000)&&((reg800&0xFFFFFF00)!= 0x83040000)))
+ {
+ DBG_8192C("%s regc50:0x%08x, regc58:0x%08x, reg824:0x%08x, reg800:0x%08x,\n", __FUNCTION__,
+ regc50, regc58, reg824, reg800);
+ rtw_hal_sreset_reset(padapter);
+ }
+#endif
+
+ if (psrtpriv->dbg_trigger_point == SRESET_TGP_LINK_STATUS) {
+ psrtpriv->dbg_trigger_point = SRESET_TGP_NULL;
+ rtw_hal_sreset_reset(padapter);
+ return;
+ }
+}
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_xmit.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_xmit.c
index d2dc99074f20..7f705a93c118 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_xmit.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/rtl8723a_xmit.c
@@ -1,65 +1,65 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#define _RTL8723A_XMIT_C_
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <rtl8723a_hal.h>
-
-#ifdef CONFIG_XMIT_ACK
-void dump_txrpt_ccx_8723a(void *buf)
-{
- struct txrpt_ccx_8723a *txrpt_ccx = buf;
-
- DBG_871X("%s:\n"
- "tag1:%u, rsvd:%u, int_bt:%u, int_tri:%u, int_ccx:%u\n"
- "mac_id:%u, pkt_drop:%u, pkt_ok:%u, bmc:%u\n"
- "retry_cnt:%u, lifetime_over:%u, retry_over:%u\n"
- "ccx_qtime:%u\n"
- "final_data_rate:0x%02x\n"
- "qsel:%u, sw:0x%03x\n"
- , __func__
- , txrpt_ccx->tag1, txrpt_ccx->rsvd, txrpt_ccx->int_bt, txrpt_ccx->int_tri, txrpt_ccx->int_ccx
- , txrpt_ccx->mac_id, txrpt_ccx->pkt_drop, txrpt_ccx->pkt_ok, txrpt_ccx->bmc
- , txrpt_ccx->retry_cnt, txrpt_ccx->lifetime_over, txrpt_ccx->retry_over
- , txrpt_ccx_qtime_8723a(txrpt_ccx)
- , txrpt_ccx->final_data_rate
- , txrpt_ccx->qsel, txrpt_ccx_sw_8723a(txrpt_ccx)
- );
-}
-
-void handle_txrpt_ccx_8723a(_adapter *adapter, void *buf)
-{
- struct txrpt_ccx_8723a *txrpt_ccx = buf;
-
- #ifdef DBG_CCX
- dump_txrpt_ccx_8723a(buf);
- #endif
-
- if (txrpt_ccx->int_ccx) {
- if (txrpt_ccx->pkt_ok)
- rtw_ack_tx_done(&adapter->xmitpriv, RTW_SCTX_DONE_SUCCESS);
- else
- rtw_ack_tx_done(&adapter->xmitpriv, RTW_SCTX_DONE_CCX_PKT_FAIL);
- }
-}
-#endif //CONFIG_XMIT_ACK
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#define _RTL8723A_XMIT_C_
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+#include <rtl8723a_hal.h>
+
+#ifdef CONFIG_XMIT_ACK
+void dump_txrpt_ccx_8723a(void *buf)
+{
+ struct txrpt_ccx_8723a *txrpt_ccx = buf;
+
+ DBG_871X("%s:\n"
+ "tag1:%u, rsvd:%u, int_bt:%u, int_tri:%u, int_ccx:%u\n"
+ "mac_id:%u, pkt_drop:%u, pkt_ok:%u, bmc:%u\n"
+ "retry_cnt:%u, lifetime_over:%u, retry_over:%u\n"
+ "ccx_qtime:%u\n"
+ "final_data_rate:0x%02x\n"
+ "qsel:%u, sw:0x%03x\n"
+ , __func__
+ , txrpt_ccx->tag1, txrpt_ccx->rsvd, txrpt_ccx->int_bt, txrpt_ccx->int_tri, txrpt_ccx->int_ccx
+ , txrpt_ccx->mac_id, txrpt_ccx->pkt_drop, txrpt_ccx->pkt_ok, txrpt_ccx->bmc
+ , txrpt_ccx->retry_cnt, txrpt_ccx->lifetime_over, txrpt_ccx->retry_over
+ , txrpt_ccx_qtime_8723a(txrpt_ccx)
+ , txrpt_ccx->final_data_rate
+ , txrpt_ccx->qsel, txrpt_ccx_sw_8723a(txrpt_ccx)
+ );
+}
+
+void handle_txrpt_ccx_8723a(_adapter *adapter, void *buf)
+{
+ struct txrpt_ccx_8723a *txrpt_ccx = buf;
+
+ #ifdef DBG_CCX
+ dump_txrpt_ccx_8723a(buf);
+ #endif
+
+ if (txrpt_ccx->int_ccx) {
+ if (txrpt_ccx->pkt_ok)
+ rtw_ack_tx_done(&adapter->xmitpriv, RTW_SCTX_DONE_SUCCESS);
+ else
+ rtw_ack_tx_done(&adapter->xmitpriv, RTW_SCTX_DONE_CCX_PKT_FAIL);
+ }
+}
+#endif //CONFIG_XMIT_ACK
+
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/rtl8723as_led.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/rtl8723as_led.c
index b7511deaf49f..597bb30261d8 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/rtl8723as_led.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/rtl8723as_led.c
@@ -1,129 +1,129 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#define _RTL8723AS_LED_C_
-
-#include "drv_types.h"
-#include "rtl8723a_hal.h"
-
-//================================================================================
-// LED object.
-//================================================================================
-
-
-//================================================================================
-// Prototype of protected function.
-//================================================================================
-
-//================================================================================
-// LED_819xUsb routines.
-//================================================================================
-
-//
-// Description:
-// Turn on LED according to LedPin specified.
-//
-void
-SwLedOn(
- _adapter *padapter,
- PLED_871x pLed
-)
-{
- u8 LedCfg;
- //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
-
- if( (padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
- {
- return;
- }
-
- pLed->bLedOn = _TRUE;
-
-}
-
-
-//
-// Description:
-// Turn off LED according to LedPin specified.
-//
-void
-SwLedOff(
- _adapter *padapter,
- PLED_871x pLed
-)
-{
- u8 LedCfg;
- //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
-
- if((padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
- {
- goto exit;
- }
-
-exit:
- pLed->bLedOn = _FALSE;
-
-}
-
-//================================================================================
-// Interface to manipulate LED objects.
-//================================================================================
-
-//================================================================================
-// Default LED behavior.
-//================================================================================
-
-//
-// Description:
-// Initialize all LED_871x objects.
-//
-void
-rtl8723as_InitSwLeds(
- _adapter *padapter
- )
-{
- struct led_priv *pledpriv = &(padapter->ledpriv);
-
- pledpriv->LedControlHandler = LedControl871x;
-#if 0
-
- InitLed871x(padapter, &(pledpriv->SwLed0), LED_PIN_LED0);
-
- InitLed871x(padapter,&(pledpriv->SwLed1), LED_PIN_LED1);
-#endif
-}
-
-
-//
-// Description:
-// DeInitialize all LED_819xUsb objects.
-//
-void
-rtl8723as_DeInitSwLeds(
- _adapter *padapter
- )
-{
-#if 0
- struct led_priv *ledpriv = &(padapter->ledpriv);
-
- DeInitLed871x( &(ledpriv->SwLed0) );
- DeInitLed871x( &(ledpriv->SwLed1) );
-#endif
-}
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#define _RTL8723AS_LED_C_
+
+#include "drv_types.h"
+#include "rtl8723a_hal.h"
+
+//================================================================================
+// LED object.
+//================================================================================
+
+
+//================================================================================
+// Prototype of protected function.
+//================================================================================
+
+//================================================================================
+// LED_819xUsb routines.
+//================================================================================
+
+//
+// Description:
+// Turn on LED according to LedPin specified.
+//
+void
+SwLedOn(
+ _adapter *padapter,
+ PLED_871x pLed
+)
+{
+ u8 LedCfg;
+ //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+
+ if( (padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
+ {
+ return;
+ }
+
+ pLed->bLedOn = _TRUE;
+
+}
+
+
+//
+// Description:
+// Turn off LED according to LedPin specified.
+//
+void
+SwLedOff(
+ _adapter *padapter,
+ PLED_871x pLed
+)
+{
+ u8 LedCfg;
+ //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+
+ if((padapter->bSurpriseRemoved == _TRUE) || ( padapter->bDriverStopped == _TRUE))
+ {
+ goto exit;
+ }
+
+exit:
+ pLed->bLedOn = _FALSE;
+
+}
+
+//================================================================================
+// Interface to manipulate LED objects.
+//================================================================================
+
+//================================================================================
+// Default LED behavior.
+//================================================================================
+
+//
+// Description:
+// Initialize all LED_871x objects.
+//
+void
+rtl8723as_InitSwLeds(
+ _adapter *padapter
+ )
+{
+ struct led_priv *pledpriv = &(padapter->ledpriv);
+
+ pledpriv->LedControlHandler = LedControl871x;
+#if 0
+
+ InitLed871x(padapter, &(pledpriv->SwLed0), LED_PIN_LED0);
+
+ InitLed871x(padapter,&(pledpriv->SwLed1), LED_PIN_LED1);
+#endif
+}
+
+
+//
+// Description:
+// DeInitialize all LED_819xUsb objects.
+//
+void
+rtl8723as_DeInitSwLeds(
+ _adapter *padapter
+ )
+{
+#if 0
+ struct led_priv *ledpriv = &(padapter->ledpriv);
+
+ DeInitLed871x( &(ledpriv->SwLed0) );
+ DeInitLed871x( &(ledpriv->SwLed1) );
+#endif
+}
+
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/rtl8723as_recv.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/rtl8723as_recv.c
index d2baae9e28ca..ad2066fe9610 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/rtl8723as_recv.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/rtl8723as_recv.c
@@ -155,12 +155,7 @@ void update_recvframe_phyinfo(
}
pkt_info.Rate = pattrib->mcs_rate;
- #ifdef CONFIG_CONCURRENT_MODE
- //get Primary adapter's odmpriv
- if(padapter->adapter_type > PRIMARY_ADAPTER){
- pHalData = GET_HAL_DATA(padapter->pbuddy_adapter);
- }
- #endif
+
//rtl8192c_query_rx_phy_status(precvframe, pphy_status);
//_enter_critical_bh(&pHalData->odm_stainfo_lock, &irqL);
ODM_PhyStatusQuery(&pHalData->odmpriv,pPHYInfo,(u8 *)pphy_status,&(pkt_info));
@@ -234,24 +229,24 @@ static s32 pre_recv_entry(union recv_frame *precvframe, struct recv_buf *precvbu
_rtw_memcpy(&precvframe_if2->u.hdr.attrib, &precvframe->u.hdr.attrib, sizeof(struct rx_pkt_attrib));
pattrib = &precvframe_if2->u.hdr.attrib;
- //driver need to set skb len for skb_copy().
- //If skb->len is zero, skb_copy() will not copy data from original skb.
+ //driver need to set skb len for rtw_skb_copy().
+ //If skb->len is zero, rtw_skb_copy() will not copy data from original skb.
skb_put(precvframe->u.hdr.pkt, pattrib->pkt_len);
- pkt_copy = skb_copy( precvframe->u.hdr.pkt, GFP_ATOMIC);
+ pkt_copy = rtw_skb_copy(precvframe->u.hdr.pkt);
if (pkt_copy == NULL)
{
if((pattrib->mfrag == 1)&&(pattrib->frag_num == 0))
{
- DBG_8192C("pre_recv_entry(): skb_copy fail , drop frag frame \n");
+ DBG_8192C("pre_recv_entry(): rtw_skb_copy fail , drop frag frame \n");
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
return ret;
}
- pkt_copy = skb_clone( precvframe->u.hdr.pkt, GFP_ATOMIC);
+ pkt_copy = rtw_skb_clone(precvframe->u.hdr.pkt);
if(pkt_copy == NULL)
{
- DBG_8192C("pre_recv_entry(): skb_clone fail , drop frame\n");
+ DBG_8192C("pre_recv_entry(): rtw_skb_clone fail , drop frame\n");
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
return ret;
}
@@ -330,9 +325,11 @@ void rtl8723as_recv(PADAPTER padapter, struct recv_buf *precvbuf)
// fix Hardware RX data error, drop whole recv_buffer
if ((!(pHalData->ReceiveConfig & RCR_ACRC32)) && pattrib->crc_err)
{
- #if !(MP_DRIVER==1)
- DBG_8192C("%s()-%d: RX Warning! rx CRC ERROR !!\n", __FUNCTION__, __LINE__);
- #endif
+ if (padapter->registrypriv.mp_mode == 1)
+ padapter->mppriv.rx_crcerrpktcount++;
+ else
+ DBG_8192C("%s()-%d: RX Warning! rx CRC ERROR !!\n", __FUNCTION__, __LINE__);
+
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
break;
}
@@ -352,6 +349,7 @@ void rtl8723as_recv(PADAPTER padapter, struct recv_buf *precvbuf)
if ((pattrib->crc_err) || (pattrib->icv_err))
{
+ if (padapter->registrypriv.mp_mode == 0)
DBG_8192C("%s: crc_err=%d icv_err=%d, skip!\n", __FUNCTION__, pattrib->crc_err, pattrib->icv_err);
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
}
@@ -386,11 +384,8 @@ void rtl8723as_recv(PADAPTER padapter, struct recv_buf *precvbuf)
alloc_sz += 14;
}
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
- pkt_copy = __dev_alloc_skb(alloc_sz, GFP_KERNEL);
-#else
- pkt_copy = __netdev_alloc_skb(padapter->pnetdev, alloc_sz, GFP_KERNEL);
-#endif
+ pkt_copy = rtw_skb_alloc(alloc_sz);
+
if(pkt_copy)
{
pkt_copy->dev = padapter->pnetdev;
@@ -411,7 +406,7 @@ void rtl8723as_recv(PADAPTER padapter, struct recv_buf *precvbuf)
break;
}
- precvframe->u.hdr.pkt = skb_clone(precvbuf->pskb, GFP_ATOMIC);
+ precvframe->u.hdr.pkt = rtw_skb_clone(precvbuf->pskb);
if(precvframe->u.hdr.pkt)
{
_pkt *pkt_clone = precvframe->u.hdr.pkt;
@@ -424,7 +419,7 @@ void rtl8723as_recv(PADAPTER padapter, struct recv_buf *precvbuf)
}
else
{
- DBG_8192C("rtl8723as_recv_tasklet: skb_clone fail\n");
+ DBG_8192C("rtl8723as_recv_tasklet: rtw_skb_clone fail\n");
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
break;
}
@@ -531,9 +526,11 @@ static void rtl8723as_recv_tasklet(void *priv)
// fix Hardware RX data error, drop whole recv_buffer
if ((!(pHalData->ReceiveConfig & RCR_ACRC32)) && pattrib->crc_err)
{
- #if !(MP_DRIVER==1)
- DBG_8192C("%s()-%d: RX Warning! rx CRC ERROR !!\n", __FUNCTION__, __LINE__);
- #endif
+ if (padapter->registrypriv.mp_mode == 1)
+ padapter->mppriv.rx_crcerrpktcount++;
+ else
+ DBG_8192C("%s()-%d: RX Warning! rx CRC ERROR !!\n", __FUNCTION__, __LINE__);
+
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
break;
}
@@ -553,6 +550,7 @@ static void rtl8723as_recv_tasklet(void *priv)
if ((pattrib->crc_err) || (pattrib->icv_err))
{
+ if (padapter->registrypriv.mp_mode == 0)
DBG_8192C("%s: crc_err=%d icv_err=%d, skip!\n", __FUNCTION__, pattrib->crc_err, pattrib->icv_err);
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
}
@@ -587,11 +585,8 @@ static void rtl8723as_recv_tasklet(void *priv)
alloc_sz += 14;
}
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
- pkt_copy = dev_alloc_skb(alloc_sz);
-#else
- pkt_copy = netdev_alloc_skb(padapter->pnetdev, alloc_sz);
-#endif
+ pkt_copy = rtw_skb_alloc(alloc_sz);
+
if(pkt_copy)
{
pkt_copy->dev = padapter->pnetdev;
@@ -612,7 +607,7 @@ static void rtl8723as_recv_tasklet(void *priv)
break;
}
- precvframe->u.hdr.pkt = skb_clone(precvbuf->pskb, GFP_ATOMIC);
+ precvframe->u.hdr.pkt = rtw_skb_clone(precvbuf->pskb);
if(precvframe->u.hdr.pkt)
{
_pkt *pkt_clone = precvframe->u.hdr.pkt;
@@ -625,7 +620,7 @@ static void rtl8723as_recv_tasklet(void *priv)
}
else
{
- DBG_8192C("rtl8723as_recv_tasklet: skb_clone fail\n");
+ DBG_8192C("rtl8723as_recv_tasklet: rtw_skb_clone fail\n");
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
break;
}
@@ -730,7 +725,10 @@ static void rtl8723as_recv_tasklet(void *priv)
// fix Hardware RX data error, drop whole recv_buffer
if ((!(pHalData->ReceiveConfig & RCR_ACRC32)) && pattrib->crc_err)
{
- DBG_8192C("%s()-%d: RX Warning! rx CRC ERROR !!\n", __FUNCTION__, __LINE__);
+ if (padapter->registrypriv.mp_mode == 1)
+ padapter->mppriv.rx_crcerrpktcount++;
+ else
+ DBG_8192C("%s()-%d: RX Warning! rx CRC ERROR !!\n", __FUNCTION__, __LINE__);
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
break;
}
@@ -748,12 +746,13 @@ static void rtl8723as_recv_tasklet(void *priv)
if ((pattrib->crc_err) || (pattrib->icv_err))
{
+ if (padapter->registrypriv.mp_mode == 0)
DBG_8192C("%s: crc_err=%d icv_err=%d, skip!\n", __FUNCTION__, pattrib->crc_err, pattrib->icv_err);
rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
}
else
{
- ppkt = skb_clone(precvbuf->pskb, GFP_ATOMIC);
+ ppkt = rtw_skb_clone(precvbuf->pskb);
if (ppkt == NULL)
{
RT_TRACE(_module_rtl871x_recv_c_, _drv_crit_, ("rtl8723as_recv_tasklet: no enough memory to allocate SKB!\n"));
@@ -819,7 +818,7 @@ static void rtl8723as_recv_tasklet(void *priv)
ptr = precvbuf->pdata;
}
- dev_kfree_skb_any(precvbuf->pskb);
+ rtw_skb_free(precvbuf->pskb);
precvbuf->pskb = NULL;
rtw_enqueue_recvbuf(precvbuf, &precvpriv->free_recv_buf_queue);
} while (1);
@@ -876,11 +875,7 @@ s32 rtl8723as_init_recv_priv(PADAPTER padapter)
SIZE_PTR tmpaddr=0;
SIZE_PTR alignment=0;
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
- precvbuf->pskb = __dev_alloc_skb(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, GFP_KERNEL);
-#else
- precvbuf->pskb = __netdev_alloc_skb(padapter->pnetdev, MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, GFP_KERNEL);
-#endif
+ precvbuf->pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
if(precvbuf->pskb)
{
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/rtl8723as_xmit.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/rtl8723as_xmit.c
index eb7e41af96c1..a07063a16bba 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/rtl8723as_xmit.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/rtl8723as_xmit.c
@@ -105,7 +105,13 @@ s32 rtl8723_dequeue_writeport(PADAPTER padapter, u8 *freePage)
}
// _exit_critical_bh(&phal->SdioTxFIFOFreePageLock, &irql);
- ret = (padapter->bDriverStopped == _TRUE) || (padapter->bSurpriseRemoved == _TRUE);
+ ret = (padapter->bDriverStopped == _TRUE) || (padapter->bSurpriseRemoved == _TRUE)
+#ifdef CONFIG_CONCURRENT_MODE
+ ||((padapter->pbuddy_adapter)
+ && ((padapter->pbuddy_adapter->bSurpriseRemoved) ||(padapter->pbuddy_adapter->bDriverStopped)))
+#endif
+ ;
+
if (ret) {
RT_TRACE(_module_hal_xmit_c_, _drv_notice_,
("%s: bSurpriseRemoved(update TX FIFO page)\n", __func__));
@@ -114,11 +120,27 @@ s32 rtl8723_dequeue_writeport(PADAPTER padapter, u8 *freePage)
n++;
//if ((n & 0x3FF) == 0)
- if ((n % 2) == 0)
+ if ((n % 100) == 0)
{
- if (n > 5000) {
+ if (n >= 5000) {
+ u8 reg_value_1 = 0;
+ u8 reg_value_2 = 0;
+ u8 reg_value_3 = 0;
+
DBG_8192C(KERN_NOTICE "%s: FIFO starvation!(%d) len=%d agg=%d page=(R)%d(A)%d\n",
__func__, n, pxmitbuf->len, pxmitbuf->agg_num, pxmitbuf->pg_num, freePage[PageIdx] + freePage[PUBLIC_QUEUE_IDX]);
+
+ //try to recover the transmission
+ reg_value_1 = rtw_read8(padapter, REG_SYS_FUNC_EN);
+ reg_value_2 = rtw_read8(padapter, REG_CR);
+ reg_value_3 = rtw_read8(padapter, REG_TXPAUSE);
+ DBG_871X("Before recovery: REG_SYS_FUNC_EN = 0x%X, REG_CR = 0x%X, REG_TXPAUSE = 0x%X\n", reg_value_1, reg_value_2, reg_value_3);
+
+ rtw_write8(padapter, REG_SYS_FUNC_EN, reg_value_1 | 0x01);
+ rtw_write8(padapter, REG_CR, reg_value_2 | 0xC0);
+ rtw_write8(padapter, REG_TXPAUSE, 0);
+ DBG_871X("After recovery: REG_SYS_FUNC_EN = 0x%X, REG_CR = 0x%X, REG_TXPAUSE = 0x%X\n",
+ rtw_read8(padapter, REG_SYS_FUNC_EN), rtw_read8(padapter, REG_CR), rtw_read8(padapter, REG_TXPAUSE));
} else {
//RT_TRACE(_module_hal_xmit_c_, _drv_notice_,
// ("%s: FIFO starvation!(%d) len=%d agg=%d page=(R)%d(A)%d\n",
@@ -348,6 +370,7 @@ static s32 xmit_xmitframes(PADAPTER padapter, struct xmit_priv *pxmitpriv)
if (ret == _FAIL) {
RT_TRACE(_module_hal_xmit_c_, _drv_err_, ("%s: coalesce FAIL!", __FUNCTION__));
// Todo: error handler
+ DBG_871X("%s: coalesce FAIL!", __FUNCTION__);
} else {
k++;
if (k != 1)
@@ -421,16 +444,14 @@ static s32 xmit_xmitframes(PADAPTER padapter, struct xmit_priv *pxmitpriv)
s32 rtl8723as_xmit_handler(PADAPTER padapter)
{
struct xmit_priv *pxmitpriv;
- PHAL_DATA_TYPE phal;
s32 ret;
_irqL irql;
pxmitpriv = &padapter->xmitpriv;
- phal = GET_HAL_DATA(padapter);
wait:
- ret = _rtw_down_sema(&phal->SdioXmitSema);
+ ret = _rtw_down_sema(&pxmitpriv->SdioXmitSema);
if (_FAIL == ret) {
RT_TRACE(_module_hal_xmit_c_, _drv_emerg_, ("%s: down sema fail!\n", __FUNCTION__));
return _FAIL;
@@ -475,13 +496,11 @@ thread_return rtl8723as_xmit_thread(thread_context context)
{
PADAPTER padapter;
struct xmit_priv *pxmitpriv;
- PHAL_DATA_TYPE phal;
s32 ret;
padapter = (PADAPTER)context;
pxmitpriv = &padapter->xmitpriv;
- phal = GET_HAL_DATA(padapter);
ret = _SUCCESS;
thread_enter("RTWHALXT");
@@ -493,7 +512,7 @@ thread_return rtl8723as_xmit_thread(thread_context context)
}
} while (_SUCCESS == ret);
- _rtw_up_sema(&phal->SdioXmitTerminateSema);
+ _rtw_up_sema(&pxmitpriv->SdioXmitTerminateSema);
RT_TRACE(_module_hal_xmit_c_, _drv_notice_, ("-%s\n", __FUNCTION__));
@@ -556,14 +575,12 @@ s32 rtl8723as_mgnt_xmit(PADAPTER padapter, struct xmit_frame *pmgntframe)
s32 rtl8723as_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe)
{
struct xmit_priv *pxmitpriv;
- PHAL_DATA_TYPE phal;
_irqL irql;
s32 err;
pxmitframe->attrib.qsel = pxmitframe->attrib.priority;
pxmitpriv = &padapter->xmitpriv;
- phal = GET_HAL_DATA(padapter);
#ifdef CONFIG_80211N_HT
if ((pxmitframe->frame_tag == DATA_FRAMETAG) &&
@@ -589,7 +606,7 @@ s32 rtl8723as_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe)
return _TRUE;
}
- _rtw_up_sema(&phal->SdioXmitSema);
+ _rtw_up_sema(&pxmitpriv->SdioXmitSema);
return _FALSE;
}
@@ -597,7 +614,6 @@ s32 rtl8723as_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe)
s32 rtl8723as_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe)
{
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
s32 err;
if ((err=rtw_xmitframe_enqueue(padapter, pxmitframe)) != _SUCCESS)
@@ -613,7 +629,7 @@ s32 rtl8723as_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmit
#ifdef CONFIG_SDIO_TX_TASKLET
tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
#else
- _rtw_up_sema(&pHalData->SdioXmitSema);
+ _rtw_up_sema(&pxmitpriv->SdioXmitSema);
#endif
}
@@ -629,14 +645,15 @@ s32 rtl8723as_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmit
*/
s32 rtl8723as_init_xmit_priv(PADAPTER padapter)
{
+ struct xmit_priv *xmitpriv = &padapter->xmitpriv;
PHAL_DATA_TYPE phal;
phal = GET_HAL_DATA(padapter);
_rtw_spinlock_init(&phal->SdioTxFIFOFreePageLock);
- _rtw_init_sema(&phal->SdioXmitSema, 0);
- _rtw_init_sema(&phal->SdioXmitTerminateSema, 0);
+ _rtw_init_sema(&xmitpriv->SdioXmitSema, 0);
+ _rtw_init_sema(&xmitpriv->SdioXmitTerminateSema, 0);
return _SUCCESS;
}
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/sdio_halinit.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/sdio_halinit.c
index f02e85a9c44e..bd4429d3e11c 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/sdio_halinit.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/sdio_halinit.c
@@ -823,7 +823,7 @@ static void _RfPowerSave(PADAPTER padapter)
pHalData = GET_HAL_DATA(padapter);
// pMgntInfo = &padapter->MgntInfo;
- pwrctrlpriv = &padapter->pwrctrlpriv;
+ pwrctrlpriv = adapter_to_pwrctl(padapter);
//
// 2010/08/11 MH Merge from 8192SE for Minicard init. We need to confirm current radio status
@@ -989,7 +989,7 @@ static BOOLEAN HalDetectPwrDownMode(PADAPTER Adapter)
{
u8 tmpvalue;
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- struct pwrctrl_priv *pwrctrlpriv = &Adapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(Adapter);
EFUSE_ShadowRead(Adapter, 1, 0x7B/*EEPROM_RF_OPT3_92C*/, (u32 *)&tmpvalue);
@@ -1024,7 +1024,7 @@ static u32 rtl8723as_hal_init(PADAPTER padapter)
pHalData = GET_HAL_DATA(padapter);
- pwrctrlpriv = &padapter->pwrctrlpriv;
+ pwrctrlpriv = adapter_to_pwrctl(padapter);
pregistrypriv = &padapter->registrypriv;
is92C = IS_92C_SERIAL(pHalData->VersionID);
@@ -1112,7 +1112,7 @@ static u32 rtl8723as_hal_init(PADAPTER padapter)
}
else
#endif
- rtw_write8(padapter, REG_EARLY_MODE_CONTROL, 0);
+ //rtw_write8(padapter, REG_EARLY_MODE_CONTROL, 0);
#if (MP_DRIVER == 1)
if (padapter->registrypriv.mp_mode == 1)
@@ -1121,7 +1121,7 @@ static u32 rtl8723as_hal_init(PADAPTER padapter)
//RT_TRACE(_module_hci_hal_init_c_, _drv_info_, ("%s: Don't Download Firmware!!\n", __FUNCTION__));
//padapter->bFWReady = _FALSE;
}
- else
+// else
#endif
{
ret = rtl8723a_FirmwareDownload(padapter);
@@ -1841,7 +1841,7 @@ static u32 Hal_readPGDataFromConfigFile(
temp[2] = 0; // add end of string '\0'
- fp = filp_open("/system/etc/wifi/wifi_efuse.map", O_RDWR, 0644);
+ fp = filp_open("/system/etc/wifi/wifi_efuse.map", O_RDONLY, 0);
if (IS_ERR(fp)) {
pEEPROM->bloadfile_fail_flag = _TRUE;
DBG_871X("Error, Efuse configure file doesn't exist.\n");
@@ -1981,6 +1981,11 @@ readAdapterInfo(
Hal_InitChannelPlan(padapter);
Hal_CustomizeByCustomerID_8723AS(padapter);
+#ifdef CONFIG_RF_GAIN_OFFSET
+ Hal_ReadRFGainOffset(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
+#endif //CONFIG_RF_GAIN_OFFSET
+
+
RT_TRACE(_module_hci_hal_init_c_, _drv_info_, ("<==== readpadapterInfo_8723S()\n"));
}
@@ -2102,6 +2107,9 @@ _func_enter_;
switch (variable)
{
+ case HW_VAR_GET_CPWM:
+ *val = rtw_read8(padapter, SDIO_LOCAL_BASE | SDIO_REG_HCPWM1);
+ break;
default:
GetHwReg8723A(padapter, variable, val);
break;
@@ -2142,22 +2150,11 @@ GetHalDefVar8723ASDIO(
case HAL_DEF_DBG_DUMP_RXPKT:
*(( u8*)pValue) = pHalData->bDumpRxPkt;
break;
- case HAL_DEF_DBG_DM_FUNC:
- *(( u32*)pValue) =pHalData->odmpriv.SupportAbility;
- break;
case HW_VAR_MAX_RX_AMPDU_FACTOR:
*(( u32*)pValue) = MAX_AMPDU_FACTOR_64K;
- break;
- case HW_DEF_ODM_DBG_FLAG:
- {
- u8Byte DebugComponents = *((u32*)pValue);
- PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
- printk("pDM_Odm->DebugComponents = 0x%llx \n",pDM_Odm->DebugComponents );
- }
break;
default:
- //RT_TRACE(COMP_INIT, DBG_WARNING, ("GetHalDefVar8723ASDIO(): Unkown variable: %d!\n", eVariable));
- bResult = _FAIL;
+ bResult = GetHalDefVar(Adapter, eVariable, pValue);
break;
}
@@ -2222,27 +2219,8 @@ SetHalDefVar8723ASDIO(
}
}
break;
- case HW_DEF_FA_CNT_DUMP:
- {
- u8 bRSSIDump = *((u8*)pValue);
- PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
- if(bRSSIDump)
- pDM_Odm->DebugComponents = ODM_COMP_DIG|ODM_COMP_FA_CNT ;
- else
- pDM_Odm->DebugComponents = 0;
-
- }
- break;
- case HW_DEF_ODM_DBG_FLAG:
- {
- u8Byte DebugComponents = *((u8Byte*)pValue);
- PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
- pDM_Odm->DebugComponents = DebugComponents;
- }
- break;
default:
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("SetHalDefVar819xUsb(): Unkown variable: %d!\n", eVariable));
- bResult = _FAIL;
+ bResult = SetHalDefVar(Adapter, eVariable, pValue);
break;
}
@@ -2263,10 +2241,7 @@ void UpdateHalRAMask8192CUsb(PADAPTER padapter, u32 mac_id, u8 rssi_level)
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
-#ifdef CONFIG_CONCURRENT_MODE
- if(rtw_buddy_adapter_up(padapter) && padapter->adapter_type > PRIMARY_ADAPTER)
- pHalData = GET_HAL_DATA(padapter->pbuddy_adapter);
-#endif //CONFIG_CONCURRENT_MODE
+
if (mac_id >= NUM_STA) //CAM_SIZE
{
@@ -2378,14 +2353,21 @@ void rtl8723as_set_hal_ops(PADAPTER padapter)
_func_enter_;
- //set hardware operation functions
- padapter->HalData = rtw_zmalloc(sizeof(HAL_DATA_TYPE));
- if (padapter->HalData == NULL) {
- RT_TRACE(_module_hci_hal_init_c_, _drv_err_,
- ("can't alloc memory for HAL DATA\n"));
+
+#ifdef CONFIG_CONCURRENT_MODE
+ if(padapter->isprimary)
+#endif //CONFIG_CONCURRENT_MODE
+ {
+ //set hardware operation functions
+ padapter->HalData = rtw_zmalloc(sizeof(HAL_DATA_TYPE));
+ if(padapter->HalData == NULL){
+ DBG_8192C("cant not alloc memory for HAL DATA \n");
+ }
}
+
+ //_rtw_memset(padapter->HalData, 0, sizeof(HAL_DATA_TYPE));
+ padapter->hal_data_sz = sizeof(HAL_DATA_TYPE);
- padapter->hal_data_sz = sizeof(HAL_DATA_TYPE);
rtl8723a_set_hal_ops(pHalFunc);
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/sdio_ops.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/sdio_ops.c
index a5e60de92085..c319fb5ec643 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/sdio_ops.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/sdio/sdio_ops.c
@@ -19,34 +19,12 @@
#define _SDIO_OPS_C_
#include <drv_types.h>
+#include <sdio_ops.h>
#include <rtl8723a_spec.h>
#include <rtl8723a_hal.h>
//#define SDIO_DEBUG_IO 1
-#define SDIO_ERR_VAL8 0xEA
-#define SDIO_ERR_VAL16 0xEAEA
-#define SDIO_ERR_VAL32 0xEAEAEAEA
-
-extern u8 sd_f0_read8(PSDIO_DATA psdio, u32 addr, s32 *err);
-extern void sd_f0_write8(PSDIO_DATA psdio, u32 addr, s32 *err);
-
-extern s32 _sd_cmd52_read(PSDIO_DATA psdio, u32 addr, u32 cnt, void *pdata);
-extern s32 _sd_cmd52_write(PSDIO_DATA psdio, u32 addr, u32 cnt, void *pdata);
-extern s32 sd_cmd52_read(PSDIO_DATA psdio, u32 addr, u32 cnt, void *pdata);
-extern s32 sd_cmd52_write(PSDIO_DATA psdio, u32 addr, u32 cnt, void *pdata);
-
-extern u8 sd_read8(PSDIO_DATA psdio, u32 addr, s32 *err);
-extern u16 sd_read16(PSDIO_DATA psdio, u32 addr, s32 *err);
-extern u32 sd_read32(PSDIO_DATA psdio, u32 addr, s32 *err);
-extern s32 _sd_read(PSDIO_DATA psdio, u32 addr, u32 cnt, void *pdata);
-extern s32 sd_read(PSDIO_DATA psdio, u32 addr, u32 cnt, void *pdata);
-extern void sd_write8(PSDIO_DATA psdio, u32 addr, u8 v, s32 *err);
-extern void sd_write16(PSDIO_DATA psdio, u32 addr, u16 v, s32 *err);
-extern void sd_write32(PSDIO_DATA psdio, u32 addr, u32 v, s32 *err);
-extern s32 _sd_write(PSDIO_DATA psdio, u32 addr, u32 cnt, void *pdata);
-extern s32 sd_write(PSDIO_DATA psdio, u32 addr, u32 cnt, void *pdata);
-
//
// Description:
// The following mapping is for SDIO host local register space.
@@ -183,18 +161,12 @@ static u32 _cvrt2ftaddr(const u32 addr, u8 *pdeviceId, u16 *poffset)
u8 sdio_read8(struct intf_hdl *pintfhdl, u32 addr)
{
- struct dvobj_priv *psdiodev;
- PSDIO_DATA psdio;
u32 ftaddr;
u8 val;
_func_enter_;
-
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
ftaddr = _cvrt2ftaddr(addr, NULL, NULL);
- val = sd_read8(psdio, ftaddr, NULL);
+ val = sd_read8(pintfhdl, ftaddr, NULL);
_func_exit_;
@@ -203,18 +175,13 @@ _func_exit_;
u16 sdio_read16(struct intf_hdl *pintfhdl, u32 addr)
{
- struct dvobj_priv *psdiodev;
- PSDIO_DATA psdio;
u32 ftaddr;
u16 val;
_func_enter_;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
ftaddr = _cvrt2ftaddr(addr, NULL, NULL);
- sd_cmd52_read(psdio, ftaddr, 2, (u8*)&val);
+ sd_cmd52_read(pintfhdl, ftaddr, 2, (u8*)&val);
val = le16_to_cpu(val);
_func_exit_;
@@ -225,8 +192,6 @@ _func_exit_;
u32 sdio_read32(struct intf_hdl *pintfhdl, u32 addr)
{
PADAPTER padapter;
- struct dvobj_priv *psdiodev;
- PSDIO_DATA psdio;
u8 bMacPwrCtrlOn;
u8 deviceId;
u16 offset;
@@ -238,8 +203,6 @@ u32 sdio_read32(struct intf_hdl *pintfhdl, u32 addr)
_func_enter_;
padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
ftaddr = _cvrt2ftaddr(addr, &deviceId, &offset);
@@ -247,11 +210,11 @@ _func_enter_;
if (((deviceId == WLAN_IOREG_DEVICE_ID) && (offset < 0x100))
|| (_FALSE == bMacPwrCtrlOn)
#ifdef CONFIG_LPS_LCLK
- || (_TRUE == padapter->pwrctrlpriv.bFwCurrentInPSMode)
+ || (_TRUE == adapter_to_pwrctl(padapter)->bFwCurrentInPSMode)
#endif
)
{
- err = sd_cmd52_read(psdio, ftaddr, 4, (u8*)&val);
+ err = sd_cmd52_read(pintfhdl, ftaddr, 4, (u8*)&val);
#ifdef SDIO_DEBUG_IO
if (!err) {
#endif
@@ -268,7 +231,7 @@ _func_enter_;
// 4 bytes alignment
shift = ftaddr & 0x3;
if (shift == 0) {
- val = sd_read32(psdio, ftaddr, NULL);
+ val = sd_read32(pintfhdl, ftaddr, NULL);
} else {
u8 *ptmpbuf;
@@ -279,7 +242,7 @@ _func_enter_;
}
ftaddr &= ~(u16)0x3;
- sd_read(psdio, ftaddr, 8, ptmpbuf);
+ sd_read(pintfhdl, ftaddr, 8, ptmpbuf);
_rtw_memcpy(&val, ptmpbuf+shift, 4);
val = le32_to_cpu(val);
@@ -294,8 +257,6 @@ _func_exit_;
s32 sdio_readN(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pbuf)
{
PADAPTER padapter;
- struct dvobj_priv *psdiodev;
- PSDIO_DATA psdio;
u8 bMacPwrCtrlOn;
u8 deviceId;
u16 offset;
@@ -306,8 +267,6 @@ s32 sdio_readN(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pbuf)
_func_enter_;
padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
err = 0;
ftaddr = _cvrt2ftaddr(addr, &deviceId, &offset);
@@ -316,18 +275,18 @@ _func_enter_;
if (((deviceId == WLAN_IOREG_DEVICE_ID) && (offset < 0x100))
|| (_FALSE == bMacPwrCtrlOn)
#ifdef CONFIG_LPS_LCLK
- || (_TRUE == padapter->pwrctrlpriv.bFwCurrentInPSMode)
+ || (_TRUE == adapter_to_pwrctl(padapter)->bFwCurrentInPSMode)
#endif
)
{
- err = sd_cmd52_read(psdio, ftaddr, cnt, pbuf);
+ err = sd_cmd52_read(pintfhdl, ftaddr, cnt, pbuf);
return err;
}
// 4 bytes alignment
shift = ftaddr & 0x3;
if (shift == 0) {
- err = sd_read(psdio, ftaddr, cnt, pbuf);
+ err = sd_read(pintfhdl, ftaddr, cnt, pbuf);
} else {
u8 *ptmpbuf;
u32 n;
@@ -336,7 +295,7 @@ _func_enter_;
n = cnt + shift;
ptmpbuf = rtw_malloc(n);
if (NULL == ptmpbuf) return -1;
- err = sd_read(psdio, ftaddr, n, ptmpbuf);
+ err = sd_read(pintfhdl, ftaddr, n, ptmpbuf);
if (!err)
_rtw_memcpy(pbuf, ptmpbuf+shift, cnt);
rtw_mfree(ptmpbuf, n);
@@ -349,18 +308,13 @@ _func_exit_;
s32 sdio_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val)
{
- struct dvobj_priv *psdiodev;
- PSDIO_DATA psdio;
u32 ftaddr;
s32 err;
_func_enter_;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
ftaddr = _cvrt2ftaddr(addr, NULL, NULL);
- sd_write8(psdio, ftaddr, val, &err);
+ sd_write8(pintfhdl, ftaddr, val, &err);
_func_exit_;
@@ -369,20 +323,15 @@ _func_exit_;
s32 sdio_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val)
{
- struct dvobj_priv *psdiodev;
- PSDIO_DATA psdio;
u32 ftaddr;
u8 shift;
s32 err;
_func_enter_;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
ftaddr = _cvrt2ftaddr(addr, NULL, NULL);
val = cpu_to_le16(val);
- err = sd_cmd52_write(psdio, ftaddr, 2, (u8*)&val);
+ err = sd_cmd52_write(pintfhdl, ftaddr, 2, (u8*)&val);
_func_exit_;
@@ -392,8 +341,6 @@ _func_exit_;
s32 sdio_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val)
{
PADAPTER padapter;
- struct dvobj_priv *psdiodev;
- PSDIO_DATA psdio;
u8 bMacPwrCtrlOn;
u8 deviceId;
u16 offset;
@@ -404,8 +351,6 @@ s32 sdio_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val)
_func_enter_;
padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
err = 0;
ftaddr = _cvrt2ftaddr(addr, &deviceId, &offset);
@@ -414,12 +359,12 @@ _func_enter_;
if (((deviceId == WLAN_IOREG_DEVICE_ID) && (offset < 0x100))
|| (_FALSE == bMacPwrCtrlOn)
#ifdef CONFIG_LPS_LCLK
- || (_TRUE == padapter->pwrctrlpriv.bFwCurrentInPSMode)
+ || (_TRUE == adapter_to_pwrctl(padapter)->bFwCurrentInPSMode)
#endif
)
{
val = cpu_to_le32(val);
- err = sd_cmd52_write(psdio, ftaddr, 4, (u8*)&val);
+ err = sd_cmd52_write(pintfhdl, ftaddr, 4, (u8*)&val);
return err;
}
@@ -428,16 +373,16 @@ _func_enter_;
#if 1
if (shift == 0)
{
- sd_write32(psdio, ftaddr, val, &err);
+ sd_write32(pintfhdl, ftaddr, val, &err);
}
else
{
val = cpu_to_le32(val);
- err = sd_cmd52_write(psdio, ftaddr, 4, (u8*)&val);
+ err = sd_cmd52_write(pintfhdl, ftaddr, 4, (u8*)&val);
}
#else
if (shift == 0) {
- sd_write32(psdio, ftaddr, val, &err);
+ sd_write32(pintfhdl, ftaddr, val, &err);
} else {
u8 *ptmpbuf;
@@ -445,14 +390,14 @@ _func_enter_;
if (NULL == ptmpbuf) return (-1);
ftaddr &= ~(u16)0x3;
- err = sd_read(psdio, ftaddr, 8, ptmpbuf);
+ err = sd_read(pintfhdl, ftaddr, 8, ptmpbuf);
if (err) {
rtw_mfree(ptmpbuf, 8);
return err;
}
val = cpu_to_le32(val);
_rtw_memcpy(ptmpbuf+shift, &val, 4);
- err = sd_write(psdio, ftaddr, 8, ptmpbuf);
+ err = sd_write(pintfhdl, ftaddr, 8, ptmpbuf);
rtw_mfree(ptmpbuf, 8);
}
@@ -466,8 +411,6 @@ _func_exit_;
s32 sdio_writeN(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8* pbuf)
{
PADAPTER padapter;
- struct dvobj_priv *psdiodev;
- PSDIO_DATA psdio;
u8 bMacPwrCtrlOn;
u8 deviceId;
u16 offset;
@@ -478,8 +421,6 @@ s32 sdio_writeN(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8* pbuf)
_func_enter_;
padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
err = 0;
ftaddr = _cvrt2ftaddr(addr, &deviceId, &offset);
@@ -488,17 +429,17 @@ _func_enter_;
if (((deviceId == WLAN_IOREG_DEVICE_ID) && (offset < 0x100))
|| (_FALSE == bMacPwrCtrlOn)
#ifdef CONFIG_LPS_LCLK
- || (_TRUE == padapter->pwrctrlpriv.bFwCurrentInPSMode)
+ || (_TRUE == adapter_to_pwrctl(padapter)->bFwCurrentInPSMode)
#endif
)
{
- err = sd_cmd52_write(psdio, ftaddr, cnt, pbuf);
+ err = sd_cmd52_write(pintfhdl, ftaddr, cnt, pbuf);
return err;
}
shift = ftaddr & 0x3;
if (shift == 0) {
- err = sd_write(psdio, ftaddr, cnt, pbuf);
+ err = sd_write(pintfhdl, ftaddr, cnt, pbuf);
} else {
u8 *ptmpbuf;
u32 n;
@@ -507,13 +448,13 @@ _func_enter_;
n = cnt + shift;
ptmpbuf = rtw_malloc(n);
if (NULL == ptmpbuf) return -1;
- err = sd_read(psdio, ftaddr, 4, ptmpbuf);
+ err = sd_read(pintfhdl, ftaddr, 4, ptmpbuf);
if (err) {
rtw_mfree(ptmpbuf, n);
return err;
}
_rtw_memcpy(ptmpbuf+shift, pbuf, cnt);
- err = sd_write(psdio, ftaddr, n, ptmpbuf);
+ err = sd_write(pintfhdl, ftaddr, n, ptmpbuf);
rtw_mfree(ptmpbuf, n);
}
@@ -600,7 +541,7 @@ static u32 sdio_read_port(
#endif
}
- err = _sd_read(psdio, addr, cnt, mem);
+ err = _sd_read(pintfhdl, addr, cnt, mem);
#ifdef SDIO_DYNAMIC_ALLOC_MEM
if ((oldcnt != cnt) && (oldmem)) {
@@ -643,6 +584,12 @@ static u32 sdio_write_port(
padapter = pintfhdl->padapter;
psdio = &adapter_to_dvobj(padapter)->intf_data;
+ if(padapter->hw_init_completed == _FALSE)
+ {
+ DBG_871X("%s [addr=0x%x cnt=%d] padapter->hw_init_completed == _FALSE \n",__func__,addr,cnt);
+ return _FAIL;
+ }
+
cnt = _RND4(cnt);
HalSdioGetCmdAddr8723ASdio(padapter, addr, cnt >> 2, &addr);
@@ -650,7 +597,7 @@ static u32 sdio_write_port(
cnt = _RND(cnt, psdio->block_transfer_len);
// cnt = sdio_align_size(cnt);
- err = sd_write(psdio, addr, cnt, xmitbuf->pdata);
+ err = sd_write(pintfhdl, addr, cnt, xmitbuf->pdata);
rtw_sctx_done_err(&xmitbuf->sctx,
err ? RTW_SCTX_DONE_WRITE_PORT_ERR : RTW_SCTX_DONE_SUCCESS);
@@ -688,21 +635,20 @@ s32 _sdio_local_read(
u32 cnt,
u8 *pbuf)
{
- PSDIO_DATA psdio;
+ struct intf_hdl * pintfhdl;
u8 bMacPwrCtrlOn;
s32 err;
u8 *ptmpbuf;
u32 n;
-
- psdio = &adapter_to_dvobj(padapter)->intf_data;
-
+ pintfhdl=&padapter->iopriv.intf;
+
HalSdioGetCmdAddr8723ASdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
rtw_hal_get_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn);
if (_FALSE == bMacPwrCtrlOn)
{
- err = _sd_cmd52_read(psdio, addr, cnt, pbuf);
+ err = _sd_cmd52_read(pintfhdl, addr, cnt, pbuf);
return err;
}
@@ -711,7 +657,7 @@ s32 _sdio_local_read(
if (!ptmpbuf)
return (-1);
- err = _sd_read(psdio, addr, n, ptmpbuf);
+ err = _sd_read(pintfhdl, addr, n, ptmpbuf);
if (!err)
_rtw_memcpy(pbuf, ptmpbuf, cnt);
@@ -730,25 +676,23 @@ s32 sdio_local_read(
u32 cnt,
u8 *pbuf)
{
- PSDIO_DATA psdio;
+ struct intf_hdl * pintfhdl;
u8 bMacPwrCtrlOn;
s32 err;
u8 *ptmpbuf;
u32 n;
-
- psdio = &adapter_to_dvobj(padapter)->intf_data;
-
+ pintfhdl=&padapter->iopriv.intf;
HalSdioGetCmdAddr8723ASdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
rtw_hal_get_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn);
if ((_FALSE == bMacPwrCtrlOn)
#ifdef CONFIG_LPS_LCLK
- || (_TRUE == padapter->pwrctrlpriv.bFwCurrentInPSMode)
+ || (_TRUE == adapter_to_pwrctl(padapter)->bFwCurrentInPSMode)
#endif
)
{
- err = sd_cmd52_read(psdio, addr, cnt, pbuf);
+ err = sd_cmd52_read(pintfhdl, addr, cnt, pbuf);
return err;
}
@@ -757,7 +701,7 @@ s32 sdio_local_read(
if (!ptmpbuf)
return (-1);
- err = sd_read(psdio, addr, n, ptmpbuf);
+ err = sd_read(pintfhdl, addr, n, ptmpbuf);
if (!err)
_rtw_memcpy(pbuf, ptmpbuf, cnt);
@@ -776,7 +720,7 @@ s32 _sdio_local_write(
u32 cnt,
u8 *pbuf)
{
- PSDIO_DATA psdio;
+ struct intf_hdl * pintfhdl;
u8 bMacPwrCtrlOn;
s32 err;
u8 *ptmpbuf;
@@ -787,18 +731,17 @@ s32 _sdio_local_write(
if(cnt & 0x3)
DBG_8192C("%s, size must be the multiple of 4 \n", __FUNCTION__);
- psdio = &adapter_to_dvobj(padapter)->intf_data;
-
+ pintfhdl=&padapter->iopriv.intf;
HalSdioGetCmdAddr8723ASdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
rtw_hal_get_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn);
if ((_FALSE == bMacPwrCtrlOn)
#ifdef CONFIG_LPS_LCLK
- || (_TRUE == padapter->pwrctrlpriv.bFwCurrentInPSMode)
+ || (_TRUE == adapter_to_pwrctl(padapter)->bFwCurrentInPSMode)
#endif
)
{
- err = _sd_cmd52_write(psdio, addr, cnt, pbuf);
+ err = _sd_cmd52_write(pintfhdl, addr, cnt, pbuf);
return err;
}
@@ -808,7 +751,7 @@ s32 _sdio_local_write(
_rtw_memcpy(ptmpbuf, pbuf, cnt);
- err = _sd_write(psdio, addr, cnt, ptmpbuf);
+ err = _sd_write(pintfhdl, addr, cnt, ptmpbuf);
if (ptmpbuf)
rtw_mfree(ptmpbuf, cnt);
@@ -825,7 +768,7 @@ s32 sdio_local_write(
u32 cnt,
u8 *pbuf)
{
- PSDIO_DATA psdio;
+ struct intf_hdl * pintfhdl;
u8 bMacPwrCtrlOn;
s32 err;
u8 *ptmpbuf;
@@ -836,18 +779,18 @@ s32 sdio_local_write(
if(cnt & 0x3)
DBG_8192C("%s, size must be the multiple of 4 \n", __FUNCTION__);
- psdio = &adapter_to_dvobj(padapter)->intf_data;
-
+ pintfhdl=&padapter->iopriv.intf;
+
HalSdioGetCmdAddr8723ASdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
rtw_hal_get_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn);
if ((_FALSE == bMacPwrCtrlOn)
#ifdef CONFIG_LPS_LCLK
- || (_TRUE == padapter->pwrctrlpriv.bFwCurrentInPSMode)
+ || (_TRUE == adapter_to_pwrctl(padapter)->bFwCurrentInPSMode)
#endif
)
{
- err = sd_cmd52_write(psdio, addr, cnt, pbuf);
+ err = sd_cmd52_write(pintfhdl, addr, cnt, pbuf);
return err;
}
@@ -857,7 +800,7 @@ s32 sdio_local_write(
_rtw_memcpy(ptmpbuf, pbuf, cnt);
- err = sd_write(psdio, addr, cnt, ptmpbuf);
+ err = sd_write(pintfhdl, addr, cnt, ptmpbuf);
if (ptmpbuf)
rtw_mfree(ptmpbuf, cnt);
@@ -867,26 +810,24 @@ s32 sdio_local_write(
u8 SdioLocalCmd52Read1Byte(PADAPTER padapter, u32 addr)
{
- PSDIO_DATA psdio;
+ struct intf_hdl * pintfhdl;
u8 val = 0;
-
- psdio = &adapter_to_dvobj(padapter)->intf_data;
+ pintfhdl=&padapter->iopriv.intf;
HalSdioGetCmdAddr8723ASdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
- sd_cmd52_read(psdio, addr, 1, &val);
+ sd_cmd52_read(pintfhdl, addr, 1, &val);
return val;
}
u16 SdioLocalCmd52Read2Byte(PADAPTER padapter, u32 addr)
{
- PSDIO_DATA psdio;
+ struct intf_hdl * pintfhdl;
u16 val = 0;
-
- psdio = &adapter_to_dvobj(padapter)->intf_data;
+ pintfhdl=&padapter->iopriv.intf;
HalSdioGetCmdAddr8723ASdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
- sd_cmd52_read(psdio, addr, 2, (u8*)&val);
+ sd_cmd52_read(pintfhdl, addr, 2, (u8*)&val);
val = le16_to_cpu(val);
@@ -895,13 +836,12 @@ u16 SdioLocalCmd52Read2Byte(PADAPTER padapter, u32 addr)
u32 SdioLocalCmd52Read4Byte(PADAPTER padapter, u32 addr)
{
- PSDIO_DATA psdio;
+ struct intf_hdl * pintfhdl;
u32 val = 0;
-
- psdio = &adapter_to_dvobj(padapter)->intf_data;
+ pintfhdl=&padapter->iopriv.intf;
HalSdioGetCmdAddr8723ASdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
- sd_cmd52_read(psdio, addr, 4, (u8*)&val);
+ sd_cmd52_read(pintfhdl, addr, 4, (u8*)&val);
val = le32_to_cpu(val);
@@ -910,60 +850,55 @@ u32 SdioLocalCmd52Read4Byte(PADAPTER padapter, u32 addr)
u32 SdioLocalCmd53Read4Byte(PADAPTER padapter, u32 addr)
{
- PSDIO_DATA psdio;
+ struct intf_hdl * pintfhdl;
u8 bMacPwrCtrlOn;
- u32 val;
+ u32 val=0;
-
- val = 0;
- psdio = &adapter_to_dvobj(padapter)->intf_data;
+ pintfhdl=&padapter->iopriv.intf;
HalSdioGetCmdAddr8723ASdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
rtw_hal_get_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn);
if ((_FALSE == bMacPwrCtrlOn)
#ifdef CONFIG_LPS_LCLK
- || (_TRUE == padapter->pwrctrlpriv.bFwCurrentInPSMode)
+ || (_TRUE == adapter_to_pwrctl(padapter)->bFwCurrentInPSMode)
#endif
)
{
- sd_cmd52_read(psdio, addr, 4, (u8*)&val);
+ sd_cmd52_read(pintfhdl, addr, 4, (u8*)&val);
val = le32_to_cpu(val);
}
else
- val = sd_read32(psdio, addr, NULL);
+ val = sd_read32(pintfhdl, addr, NULL);
return val;
}
void SdioLocalCmd52Write1Byte(PADAPTER padapter, u32 addr, u8 v)
{
- PSDIO_DATA psdio;
-
+ struct intf_hdl * pintfhdl;
- psdio = &adapter_to_dvobj(padapter)->intf_data;
+ pintfhdl=&padapter->iopriv.intf;
HalSdioGetCmdAddr8723ASdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
- sd_cmd52_write(psdio, addr, 1, &v);
+ sd_cmd52_write(pintfhdl, addr, 1, &v);
}
void SdioLocalCmd52Write2Byte(PADAPTER padapter, u32 addr, u16 v)
{
- PSDIO_DATA psdio;
+ struct intf_hdl * pintfhdl;
-
- psdio = &adapter_to_dvobj(padapter)->intf_data;
+ pintfhdl=&padapter->iopriv.intf;
HalSdioGetCmdAddr8723ASdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
v = cpu_to_le16(v);
- sd_cmd52_write(psdio, addr, 2, (u8*)&v);
+ sd_cmd52_write(pintfhdl, addr, 2, (u8*)&v);
}
void SdioLocalCmd52Write4Byte(PADAPTER padapter, u32 addr, u32 v)
{
- PSDIO_DATA psdio;
-
+ struct intf_hdl * pintfhdl;
- psdio = &adapter_to_dvobj(padapter)->intf_data;
+ pintfhdl=&padapter->iopriv.intf;
HalSdioGetCmdAddr8723ASdio(padapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
v = cpu_to_le32(v);
- sd_cmd52_write(psdio, addr, 4, (u8*)&v);
+ sd_cmd52_write(pintfhdl, addr, 4, (u8*)&v);
}
#if 0
@@ -1147,13 +1082,17 @@ void InitInterrupt8723ASdio(PADAPTER padapter)
// SDIO_HIMR_TXBCNOK_MSK |
// SDIO_HIMR_TXBCNERR_MSK |
// SDIO_HIMR_BCNERLY_INT_MSK |
+#ifndef CONFIG_DETECT_C2H_BY_POLLING
#if defined( CONFIG_BT_COEXIST) || defined(CONFIG_MP_INCLUDED)
SDIO_HIMR_C2HCMD_MSK |
#endif
+#endif
+#ifndef CONFIG_DETECT_CPWM_BY_POLLING
#ifdef CONFIG_LPS_LCLK
SDIO_HIMR_CPWM1_MSK |
// SDIO_HIMR_CPWM2_MSK |
#endif
+#endif
// SDIO_HIMR_HSISR_IND_MSK |
// SDIO_HIMR_GTINT3_IND_MSK |
// SDIO_HIMR_GTINT4_IND_MSK |
@@ -1412,11 +1351,8 @@ static struct recv_buf* sd_recv_rxfifo(PADAPTER padapter, u32 size)
SIZE_PTR tmpaddr=0;
SIZE_PTR alignment=0;
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
- precvbuf->pskb = __dev_alloc_skb(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, GFP_KERNEL);
-#else
- precvbuf->pskb = __netdev_alloc_skb(padapter->pnetdev, MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, GFP_KERNEL);
-#endif
+ precvbuf->pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
+
if(precvbuf->pskb)
{
precvbuf->pskb->dev = padapter->pnetdev;
@@ -1467,11 +1403,9 @@ static struct recv_buf* sd_recv_rxfifo(PADAPTER padapter, u32 size)
//3 1. alloc skb
// align to block size
allocsize = _RND(readsize, adapter_to_dvobj(padapter)->intf_data.block_transfer_len);
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
- ppkt = __dev_alloc_skb(allocsize, GFP_KERNEL);
-#else
- ppkt = __netdev_alloc_skb(padapter->pnetdev, allocsize, GFP_KERNEL);
-#endif
+
+ ppkt = rtw_skb_alloc(allocsize);
+
if (ppkt == NULL) {
RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("%s: alloc_skb fail! alloc=%d read=%d\n", __FUNCTION__, allocsize, readsize));
return NULL;
@@ -1482,7 +1416,7 @@ static struct recv_buf* sd_recv_rxfifo(PADAPTER padapter, u32 size)
// rtw_read_port(padapter, WLAN_RX0FF_DEVICE_ID, readsize, preadbuf);
ret = sdio_read_port(&padapter->iopriv.intf, WLAN_RX0FF_DEVICE_ID, readsize, preadbuf);
if (ret == _FAIL) {
- dev_kfree_skb_any(ppkt);
+ rtw_skb_free(ppkt);
RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("%s: read port FAIL!\n", __FUNCTION__));
return NULL;
}
@@ -1491,7 +1425,7 @@ static struct recv_buf* sd_recv_rxfifo(PADAPTER padapter, u32 size)
precvpriv = &padapter->recvpriv;
precvbuf = rtw_dequeue_recvbuf(&precvpriv->free_recv_buf_queue);
if (precvbuf == NULL) {
- dev_kfree_skb_any(ppkt);
+ rtw_skb_free(ppkt);
RT_TRACE(_module_hci_ops_os_c_, _drv_err_, ("%s: alloc recvbuf FAIL!\n", __FUNCTION__));
return NULL;
}
@@ -1538,6 +1472,7 @@ void sd_int_dpc(PADAPTER padapter)
HAL_DATA_TYPE *phal;
struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
+ struct intf_hdl * pintfhdl=&padapter->iopriv.intf;
phal = GET_HAL_DATA(padapter);
if (phal->sdio_hisr & SDIO_HISR_CPWM1)
@@ -1546,14 +1481,14 @@ void sd_int_dpc(PADAPTER padapter)
#ifdef CONFIG_LPS_RPWM_TIMER
u8 bcancelled;
- _cancel_timer(&padapter->pwrctrlpriv.pwr_rpwm_timer, &bcancelled);
+ _cancel_timer(&(adapter_to_pwrctl(padapter)->pwr_rpwm_timer), &bcancelled);
#endif // CONFIG_LPS_RPWM_TIMER
_sdio_local_read(padapter, SDIO_REG_HCPWM1, 1, &report.state);
#ifdef CONFIG_LPS_LCLK
//cpwm_int_hdl(padapter, &report);
- _set_workitem(&padapter->pwrctrlpriv.cpwm_event);
+ _set_workitem(&(adapter_to_pwrctl(padapter)->cpwm_event));
#endif
}
@@ -1567,8 +1502,8 @@ void sd_int_dpc(PADAPTER padapter)
{
addr = REG_TXDMA_STATUS;
HalSdioGetCmdAddr8723ASdio(padapter, WLAN_IOREG_DEVICE_ID, addr, &addr);
- _sd_read(&dvobj->intf_data, addr, 4, status);
- _sd_write(&dvobj->intf_data, addr, 4, status);
+ _sd_read(pintfhdl, addr, 4, status);
+ _sd_write(pintfhdl, addr, 4, status);
DBG_8192C("%s: SDIO_HISR_TXERR (0x%08x)\n", __func__, le32_to_cpu(*(u32*)status));
rtw_mfree(status, 4);
} else {
@@ -1595,10 +1530,15 @@ void sd_int_dpc(PADAPTER padapter)
if (c2h_id_filter_ccx_8723a(c2h_evt->id)) {
/* Handle CCX report here */
rtw_hal_c2h_handler(padapter, c2h_evt);
+ rtw_mfree((u8*)c2h_evt, 16);
} else {
rtw_c2h_wk_cmd(padapter, (u8 *)c2h_evt);
}
}
+ else
+ {
+ rtw_mfree((u8*)c2h_evt, 16);
+ }
} else {
/* Error handling for malloc fail */
if (rtw_cbuf_push(padapter->evtpriv.c2h_queue, (void*)NULL) != _SUCCESS)
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/rtl8723au_recv.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/rtl8723au_recv.c
index e09d04fdb8b9..330c41c8f044 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/rtl8723au_recv.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/rtl8723au_recv.c
@@ -149,12 +149,7 @@ int rtl8192cu_init_recv_priv(_adapter *padapter)
for(i=0; i<NR_PREALLOC_RECV_SKB; i++)
{
-
- #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
- pskb = __dev_alloc_skb(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, GFP_KERNEL);
- #else
- pskb = __netdev_alloc_skb(padapter->pnetdev, MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, GFP_KERNEL);
- #endif
+ pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
if(pskb)
{
@@ -215,7 +210,7 @@ void rtl8192cu_free_recv_priv (_adapter *padapter)
DBG_8192C(KERN_WARNING "rx_skb_queue not empty\n");
}
- skb_queue_purge(&precvpriv->rx_skb_queue);
+ rtw_skb_queue_purge(&precvpriv->rx_skb_queue);
#ifdef CONFIG_PREALLOC_RECV_SKB
@@ -223,7 +218,7 @@ void rtl8192cu_free_recv_priv (_adapter *padapter)
DBG_8192C(KERN_WARNING "free_recv_skb_queue not empty, %d\n", skb_queue_len(&precvpriv->free_recv_skb_queue));
}
- skb_queue_purge(&precvpriv->free_recv_skb_queue);
+ rtw_skb_queue_purge(&precvpriv->free_recv_skb_queue);
#endif
@@ -340,13 +335,6 @@ void update_recvframe_phyinfo(
}
pkt_info.Rate = pattrib->mcs_rate;
- #ifdef CONFIG_CONCURRENT_MODE
- //get Primary adapter's odmpriv
- if(padapter->adapter_type > PRIMARY_ADAPTER){
- pHalData = GET_HAL_DATA(padapter->pbuddy_adapter);
- }
- #endif
-
//rtl8192c_query_rx_phy_status(precvframe, pphy_status);
//_enter_critical_bh(&pHalData->odm_stainfo_lock, &irqL);
ODM_PhyStatusQuery(&pHalData->odmpriv,pPHYInfo,(u8 *)pphy_status,&(pkt_info));
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/rtl8723au_xmit.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/rtl8723au_xmit.c
index d53be6245199..1ab9bafb7338 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/rtl8723au_xmit.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/rtl8723au_xmit.c
@@ -673,15 +673,11 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
//pxmitframe->agg_num = 1; // alloc xmitframe should assign to 1.
pxmitframe->pkt_offset = 1; // first frame of aggregation, reserve offset
-#ifdef IDEA_CONDITION
- rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe);
-#else
- res = rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe);
- if (res == _FALSE) {
-// rtw_free_xmitframe(pxmitpriv, pxmitframe);
+ if (rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe) == _FALSE) {
+ DBG_871X("%s coalesce 1st xmitframe failed \n",__FUNCTION__);
continue;
}
-#endif
+
// always return ndis_packet after rtw_xmitframe_coalesce
rtw_os_xmit_complete(padapter, pxmitframe);
@@ -777,15 +773,12 @@ s32 rtl8192cu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv
pxmitframe->agg_num = 0; // not first frame of aggregation
pxmitframe->pkt_offset = 0; // not first frame of aggregation, no need to reserve offset
-#ifdef IDEA_CONDITION
- rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe);
-#else
- res = rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe);
- if (res == _FALSE) {
+ if (rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe) == _FALSE) {
+ DBG_871X("%s coalesce failed \n",__FUNCTION__);
rtw_free_xmitframe(pxmitpriv, pxmitframe);
continue;
}
-#endif
+
// always return ndis_packet after rtw_xmitframe_coalesce
rtw_os_xmit_complete(padapter, pxmitframe);
@@ -1112,7 +1105,7 @@ static void rtl8192cu_hostap_mgnt_xmit_cb(struct urb *urb)
//DBG_8192C("%s\n", __FUNCTION__);
- dev_kfree_skb_any(skb);
+ rtw_skb_free(skb);
#endif
}
@@ -1145,11 +1138,7 @@ s32 rtl8192cu_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt)
if ((fc & IEEE80211_FCTL_FTYPE) != IEEE80211_FTYPE_MGMT)
goto _exit;
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
- pxmit_skb = dev_alloc_skb(len + TXDESC_SIZE);
-#else
- pxmit_skb = netdev_alloc_skb(pnetdev, len + TXDESC_SIZE);
-#endif
+ pxmit_skb = rtw_skb_alloc(len + TXDESC_SIZE);
if(!pxmit_skb)
goto _exit;
@@ -1230,7 +1219,7 @@ s32 rtl8192cu_hostap_mgnt_xmit_entry(_adapter *padapter, _pkt *pkt)
_exit:
- dev_kfree_skb_any(skb);
+ rtw_skb_free(skb);
#endif
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/usb_halinit.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/usb_halinit.c
index 2a200ff69d46..01726d1f5d40 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/usb_halinit.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/usb_halinit.c
@@ -343,7 +343,10 @@ _InitQueueReservedPage(
u8 value8;
BOOLEAN bWiFiConfig = pregistrypriv->wifi_spec;
//u32 txQPageNum, txQPageUnit,txQRemainPage;
-
+
+ if( (pregistrypriv->wifi_spec==_TRUE) ||(pregistrypriv->qos_opt_enable==_TRUE))
+ bWiFiConfig = _TRUE;
+
{ //for WMM
//RT_ASSERT((outEPNum>=2), ("for WMM ,number of out-ep must more than or equal to 2!\n"));
@@ -591,9 +594,11 @@ _InitHardwareDropIncorrectBulkOut(
IN PADAPTER Adapter
)
{
+#ifdef ENABLE_USB_DROP_INCORRECT_OUT
u32 value32 = rtw_read32(Adapter, REG_TXDMA_OFFSET_CHK);
value32 |= DROP_DATA_EN;
rtw_write32(Adapter, REG_TXDMA_OFFSET_CHK, value32);
+#endif
}
static VOID
@@ -1178,9 +1183,8 @@ static VOID _BBTurnOnBlock(
#define MgntActSet_RF_State(...)
static void _RfPowerSave(PADAPTER padapter)
{
-#if 0
- PHAL_DATA_TYPE pHalData = GET_HAL_DATA(padapter);
- struct pwrctrl_priv *ppwrctrl = &padapter->pwrctrlpriv;
+ PHAL_DATA_TYPE pHalData;
+ struct pwrctrl_priv *pwrctrl;
rt_rf_power_state eRfPowerStateToSet;
u8 u1bTmp;
@@ -1188,6 +1192,10 @@ static void _RfPowerSave(PADAPTER padapter)
#if (DISABLE_BB_RF)
return;
#endif
+
+ pHalData = GET_HAL_DATA(padapter);
+ pwrctrl = adapter_to_pwrctl(padapter);
+
//
// 2010/08/11 MH Merge from 8192SE for Minicard init. We need to confirm current radio status
// and then decide to enable RF or not.!!!??? For Selective suspend mode. We may not
@@ -1197,35 +1205,38 @@ static void _RfPowerSave(PADAPTER padapter)
// in MgntActSet_RF_State() after wake up, because the value of pHalData->eRFPowerState
// is the same as eRfOff, we should change it to eRfOn after we config RF parameters.
// Added by tynli. 2010.03.30.
- ppwrctrl->rf_pwrstate = rf_on;
- RT_CLEAR_PS_LEVEL(ppwrctrl, RT_RF_OFF_LEVL_HALT_NIC);
+ pwrctrl->rf_pwrstate = rf_on;
+ RT_CLEAR_PS_LEVEL(pwrctrl, RT_RF_OFF_LEVL_HALT_NIC);
//Added by chiyokolin, 2011.10.12 for Tx
rtw_write8(padapter, REG_TXPAUSE, 0x00);
// 20100326 Joseph: Copy from GPIOChangeRFWorkItemCallBack() function to check HW radio on/off.
// 20100329 Joseph: Revise and integrate the HW/SW radio off code in initialization.
-
+#if 1
+ pwrctrl->b_hw_radio_off = _FALSE;
+ eRfPowerStateToSet = rf_on;
+#else
eRfPowerStateToSet = (rt_rf_power_state) RfOnOffDetect(padapter);
- ppwrctrl->rfoff_reason |= eRfPowerStateToSet==rf_on ? RF_CHANGE_BY_INIT : RF_CHANGE_BY_HW;
- ppwrctrl->rfoff_reason |= (ppwrctrl->reg_rfoff) ? RF_CHANGE_BY_SW : 0;
+ pwrctrl->rfoff_reason |= eRfPowerStateToSet==rf_on ? RF_CHANGE_BY_INIT : RF_CHANGE_BY_HW;
+ pwrctrl->rfoff_reason |= (pwrctrl->reg_rfoff) ? RF_CHANGE_BY_SW : 0;
- if (ppwrctrl->rfoff_reason & RF_CHANGE_BY_HW)
- ppwrctrl->b_hw_radio_off = _TRUE;
+ if (pwrctrl->rfoff_reason & RF_CHANGE_BY_HW)
+ pwrctrl->b_hw_radio_off = _TRUE;
- if (ppwrctrl->reg_rfoff == _TRUE)
+ if (pwrctrl->reg_rfoff == _TRUE)
{
// User disable RF via registry.
- RT_TRACE(_module_hci_hal_init_c_, _drv_notice_, ("InitializeAdapter8192CUsb(): Turn off RF for RegRfOff.\n"));
+ RT_TRACE(_module_hci_hal_init_c_, _drv_notice_, ("%s: Turn off RF for RegRfOff\n", __FUNCTION__));
MgntActSet_RF_State(padapter, rf_off, RF_CHANGE_BY_SW, _TRUE);
// if (padapter->bSlaveOfDMSP)
// return;
}
- else if (ppwrctrl->rfoff_reason > RF_CHANGE_BY_PS)
+ else if (pwrctrl->rfoff_reason > RF_CHANGE_BY_PS)
{
// H/W or S/W RF OFF before sleep.
RT_TRACE(_module_hci_hal_init_c_, _drv_notice_, ("InitializeAdapter8192CUsb(): Turn off RF for RfOffReason(%ld).\n", pMgntInfo->RfOffReason));
- MgntActSet_RF_State(padapter, rf_off, ppwrctrl->rfoff_reason, _TRUE);
+ MgntActSet_RF_State(padapter, rf_off, pwrctrl->rfoff_reason, _TRUE);
}
else
{
@@ -1252,22 +1263,23 @@ static void _RfPowerSave(PADAPTER padapter)
else
#endif
{
- ppwrctrl->rf_pwrstate = rf_off;
- ppwrctrl->rfoff_reason = RF_CHANGE_BY_INIT;
- MgntActSet_RF_State(padapter, rf_on, ppwrctrl->rfoff_reason, _TRUE);
+ pwrctrl->rf_pwrstate = rf_off;
+ pwrctrl->rfoff_reason = RF_CHANGE_BY_INIT;
+ MgntActSet_RF_State(padapter, rf_on, pwrctrl->rfoff_reason, _TRUE);
}
- ppwrctrl->rfoff_reason = 0;
- ppwrctrl->b_hw_radio_off = _FALSE;
- ppwrctrl->rf_pwrstate = rf_on;
+ pwrctrl->rfoff_reason = 0;
+ pwrctrl->b_hw_radio_off = _FALSE;
+ pwrctrl->rf_pwrstate = rf_on;
if (padapter->ledpriv.LedControlHandler)
padapter->ledpriv.LedControlHandler(padapter, LED_CTL_POWER_ON);
}
-
+#endif
// 2010/-8/09 MH For power down module, we need to enable register block contrl reg at 0x1c.
// Then enable power down control bit of register 0x04 BIT4 and BIT15 as 1.
if (pHalData->pwrdown && eRfPowerStateToSet == rf_off)
{
+ DBG_871X("%s pwrdown\n", __FUNCTION__);
// Enable register area 0x0-0xc.
rtw_write8(padapter, REG_RSV_CTRL, 0x0);
@@ -1280,7 +1292,6 @@ static void _RfPowerSave(PADAPTER padapter)
u1bTmp |= WL_HWPDN_EN;
rtw_write8(padapter, REG_MULTI_FUNC_CTRL, u1bTmp);
}
-#endif
}
enum {
@@ -1298,7 +1309,7 @@ HalDetectPwrDownMode(
{
u8 tmpvalue;
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- struct pwrctrl_priv *pwrctrlpriv = &Adapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(Adapter);
EFUSE_ShadowRead(Adapter, 1, EEPROM_RF_OPT3, (u32 *)&tmpvalue);
@@ -1423,7 +1434,7 @@ rt_rf_power_state RfOnOffDetect(IN PADAPTER pAdapter )
u8 val8;
rt_rf_power_state rfpowerstate = rf_off;
- if(pAdapter->pwrctrlpriv.bHWPowerdown)
+ if(adapter_to_pwrctl(pAdapter)->bHWPowerdown)
{
val8 = rtw_read8(pAdapter, REG_HSISR);
DBG_8192C("pwrdown, 0x5c(BIT7)=%02x\n", val8);
@@ -1446,7 +1457,7 @@ u32 rtl8723au_hal_init(PADAPTER Adapter)
u8 val8 = 0;
u32 boundary, status = _SUCCESS;
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- struct pwrctrl_priv *pwrctrlpriv = &Adapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(Adapter);
struct registry_priv *pregistrypriv = &Adapter->registrypriv;
u8 is92C = IS_92C_SERIAL(pHalData->VersionID);
rt_rf_power_state eRfPowerStateToSet;
@@ -1530,7 +1541,7 @@ u32 rtl8723au_hal_init(PADAPTER Adapter)
_func_enter_;
HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_BEGIN);
- if(Adapter->pwrctrlpriv.bkeepfwalive)
+ if(pwrctrlpriv->bkeepfwalive)
{
_ps_open_RF(Adapter);
@@ -1825,13 +1836,15 @@ HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_MISC02);
_InitAdhocWorkaroundParams(Adapter);
#endif
-#if ENABLE_USB_DROP_INCORRECT_OUT
_InitHardwareDropIncorrectBulkOut(Adapter);
-#endif
#if defined(CONFIG_CONCURRENT_MODE) || defined(CONFIG_TX_MCAST2UNI)
+
+#ifdef CONFIG_CHECK_AC_LIFETIME
// Enable lifetime check for the four ACs
rtw_write8(Adapter, REG_LIFETIME_EN, 0x0F);
+#endif // CONFIG_CHECK_AC_LIFETIME
+
#ifdef CONFIG_TX_MCAST2UNI
rtw_write16(Adapter, REG_PKT_VO_VI_LIFE_TIME, 0x0400); // unit: 256us. 256ms
rtw_write16(Adapter, REG_PKT_BE_BK_LIFE_TIME, 0x0400); // unit: 256us. 256ms
@@ -2027,6 +2040,7 @@ phy_SsPwrSwitch92CU(
IN int bRegSSPwrLvl
)
{
+ struct pwrctrl_priv *pwrctl = adapter_to_pwrctl(Adapter);
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
u8 value8;
@@ -2152,9 +2166,9 @@ phy_SsPwrSwitch92CU(
// (2)Reg878[21:19]= 0 //Turn off RF-B
// (3) RegC04[7:4]= 0 // turn off all paths for packet detection
// (4) Reg800[1] = 1 // enable preamble power saving
- Adapter->pwrctrlpriv.PS_BBRegBackup[PSBBREG_RF0] = PHY_QueryBBReg(Adapter, rFPGA0_XAB_RFParameter, bMaskDWord);
- Adapter->pwrctrlpriv.PS_BBRegBackup[PSBBREG_RF1] = PHY_QueryBBReg(Adapter, rOFDM0_TRxPathEnable, bMaskDWord);
- Adapter->pwrctrlpriv.PS_BBRegBackup[PSBBREG_RF2] = PHY_QueryBBReg(Adapter, rFPGA0_RFMOD, bMaskDWord);
+ pwrctl->PS_BBRegBackup[PSBBREG_RF0] = PHY_QueryBBReg(Adapter, rFPGA0_XAB_RFParameter, bMaskDWord);
+ pwrctl->PS_BBRegBackup[PSBBREG_RF1] = PHY_QueryBBReg(Adapter, rOFDM0_TRxPathEnable, bMaskDWord);
+ pwrctl->PS_BBRegBackup[PSBBREG_RF2] = PHY_QueryBBReg(Adapter, rFPGA0_RFMOD, bMaskDWord);
if (pHalData->rf_type == RF_2T2R)
{
PHY_SetBBReg(Adapter, rFPGA0_XAB_RFParameter, 0x380038, 0);
@@ -2167,7 +2181,7 @@ phy_SsPwrSwitch92CU(
PHY_SetBBReg(Adapter, rFPGA0_RFMOD, BIT1,1);
// 2 .AFE control register to power down. bit[30:22]
- Adapter->pwrctrlpriv.PS_BBRegBackup[PSBBREG_AFE0] = PHY_QueryBBReg(Adapter, rRx_Wait_CCA, bMaskDWord);
+ pwrctl->PS_BBRegBackup[PSBBREG_AFE0] = PHY_QueryBBReg(Adapter, rRx_Wait_CCA, bMaskDWord);
if (pHalData->rf_type == RF_2T2R)
PHY_SetBBReg(Adapter, rRx_Wait_CCA, bMaskDWord ,0x00DB25A0);
else if (pHalData->rf_type == RF_1T1R)
@@ -2216,9 +2230,9 @@ phy_SsPwrSwitch92CU(
// (2)Reg878[21:19]= 0 //Turn off RF-B
// (3) RegC04[7:4]= 0 // turn off all paths for packet detection
// (4) Reg800[1] = 1 // enable preamble power saving
- Adapter->pwrctrlpriv.PS_BBRegBackup[PSBBREG_RF0] = PHY_QueryBBReg(Adapter, rFPGA0_XAB_RFParameter, bMaskDWord);
- Adapter->pwrctrlpriv.PS_BBRegBackup[PSBBREG_RF1] = PHY_QueryBBReg(Adapter, rOFDM0_TRxPathEnable, bMaskDWord);
- Adapter->pwrctrlpriv.PS_BBRegBackup[PSBBREG_RF2] = PHY_QueryBBReg(Adapter, rFPGA0_RFMOD, bMaskDWord);
+ pwrctl->PS_BBRegBackup[PSBBREG_RF0] = PHY_QueryBBReg(Adapter, rFPGA0_XAB_RFParameter, bMaskDWord);
+ pwrctl->PS_BBRegBackup[PSBBREG_RF1] = PHY_QueryBBReg(Adapter, rOFDM0_TRxPathEnable, bMaskDWord);
+ pwrctl->PS_BBRegBackup[PSBBREG_RF2] = PHY_QueryBBReg(Adapter, rFPGA0_RFMOD, bMaskDWord);
if (pHalData->rf_type == RF_2T2R)
{
PHY_SetBBReg(Adapter, rFPGA0_XAB_RFParameter, 0x380038, 0);
@@ -2231,7 +2245,7 @@ phy_SsPwrSwitch92CU(
PHY_SetBBReg(Adapter, rFPGA0_RFMOD, BIT1,1);
// 2 .AFE control register to power down. bit[30:22]
- Adapter->pwrctrlpriv.PS_BBRegBackup[PSBBREG_AFE0] = PHY_QueryBBReg(Adapter, rRx_Wait_CCA, bMaskDWord);
+ pwrctl->PS_BBRegBackup[PSBBREG_AFE0] = PHY_QueryBBReg(Adapter, rRx_Wait_CCA, bMaskDWord);
if (pHalData->rf_type == RF_2T2R)
PHY_SetBBReg(Adapter, rRx_Wait_CCA, bMaskDWord ,0x00DB25A0);
else if (pHalData->rf_type == RF_1T1R)
@@ -3153,33 +3167,35 @@ readAntennaDiversity(
// Read HW power down mode selection
static void _ReadPSSetting(IN PADAPTER Adapter,IN u8*PROMContent,IN u8 AutoloadFail)
{
+ struct pwrctrl_priv *pwrctl = adapter_to_pwrctl(Adapter);
+
if(AutoloadFail){
- Adapter->pwrctrlpriv.bHWPowerdown = _FALSE;
- Adapter->pwrctrlpriv.bSupportRemoteWakeup = _FALSE;
+ pwrctl->bHWPowerdown = _FALSE;
+ pwrctl->bSupportRemoteWakeup = _FALSE;
}
else {
//if(SUPPORT_HW_RADIO_DETECT(Adapter))
- Adapter->pwrctrlpriv.bHWPwrPindetect = Adapter->registrypriv.hwpwrp_detect;
+ pwrctl->bHWPwrPindetect = Adapter->registrypriv.hwpwrp_detect;
//else
- //Adapter->pwrctrlpriv.bHWPwrPindetect = _FALSE;//dongle not support new
+ //pwrctl->bHWPwrPindetect = _FALSE;//dongle not support new
//hw power down mode selection , 0:rf-off / 1:power down
if(Adapter->registrypriv.hwpdn_mode==2)
- Adapter->pwrctrlpriv.bHWPowerdown = (PROMContent[EEPROM_RF_OPT3] & BIT4);
+ pwrctl->bHWPowerdown = (PROMContent[EEPROM_RF_OPT3] & BIT4);
else
- Adapter->pwrctrlpriv.bHWPowerdown = Adapter->registrypriv.hwpdn_mode;
+ pwrctl->bHWPowerdown = Adapter->registrypriv.hwpdn_mode;
// decide hw if support remote wakeup function
// if hw supported, 8051 (SIE) will generate WeakUP signal( D+/D- toggle) when autoresume
- Adapter->pwrctrlpriv.bSupportRemoteWakeup = (PROMContent[EEPROM_TEST_USB_OPT] & BIT1)?_TRUE :_FALSE;
+ pwrctl->bSupportRemoteWakeup = (PROMContent[EEPROM_TEST_USB_OPT] & BIT1)?_TRUE :_FALSE;
//if(SUPPORT_HW_RADIO_DETECT(Adapter))
- //Adapter->registrypriv.usbss_enable = Adapter->pwrctrlpriv.bSupportRemoteWakeup ;
+ //Adapter->registrypriv.usbss_enable = pwrctl->bSupportRemoteWakeup ;
DBG_8192C("%s...bHWPwrPindetect(%x)-bHWPowerdown(%x) ,bSupportRemoteWakeup(%x)\n",__FUNCTION__,
- Adapter->pwrctrlpriv.bHWPwrPindetect,Adapter->pwrctrlpriv.bHWPowerdown ,Adapter->pwrctrlpriv.bSupportRemoteWakeup);
+ pwrctl->bHWPwrPindetect, pwrctl->bHWPowerdown, pwrctl->bSupportRemoteWakeup);
DBG_8192C("### PS params=> power_mgnt(%x),usbss_enable(%x) ###\n",Adapter->registrypriv.power_mgnt,Adapter->registrypriv.usbss_enable);
@@ -3651,6 +3667,9 @@ _func_enter_;
switch (variable)
{
+ case HW_VAR_GET_CPWM:
+ *val = rtw_read8(Adapter, REG_USB_HCPWM);
+ break;
default:
GetHwReg8723A(Adapter, variable, val);
break;
@@ -3700,22 +3719,11 @@ GetHalDefVar8192CUsb(
case HAL_DEF_DBG_DUMP_RXPKT:
*(( u8*)pValue) = pHalData->bDumpRxPkt;
break;
- case HAL_DEF_DBG_DM_FUNC:
- *(( u32*)pValue) =pHalData->odmpriv.SupportAbility;
- break;
case HW_VAR_MAX_RX_AMPDU_FACTOR:
*(( u32*)pValue) = MAX_AMPDU_FACTOR_64K;
break;
- case HW_DEF_ODM_DBG_FLAG:
- {
- u8Byte DebugComponents = *((u32*)pValue);
- PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
- printk("pDM_Odm->DebugComponents = 0x%llx \n",pDM_Odm->DebugComponents );
- }
- break;
default:
- //RT_TRACE(COMP_INIT, DBG_WARNING, ("GetHalDefVar8192CUsb(): Unkown variable: %d!\n", eVariable));
- bResult = _FAIL;
+ bResult = GetHalDefVar(Adapter, eVariable, pValue);
break;
}
@@ -3783,27 +3791,8 @@ SetHalDefVar8192CUsb(
}
}
break;
- case HW_DEF_FA_CNT_DUMP:
- {
- u8 bRSSIDump = *((u8*)pValue);
- PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
- if(bRSSIDump)
- pDM_Odm->DebugComponents = ODM_COMP_DIG|ODM_COMP_FA_CNT ;
- else
- pDM_Odm->DebugComponents = 0;
-
- }
- break;
- case HW_DEF_ODM_DBG_FLAG:
- {
- u8Byte DebugComponents = *((u8Byte*)pValue);
- PDM_ODM_T pDM_Odm = &(pHalData->odmpriv);
- pDM_Odm->DebugComponents = DebugComponents;
- }
- break;
default:
- //RT_TRACE(COMP_INIT, DBG_TRACE, ("SetHalDefVar819xUsb(): Unkown variable: %d!\n", eVariable));
- bResult = _FAIL;
+ bResult = SetHalDefVar(Adapter, eVariable, pValue);
break;
}
@@ -3857,10 +3846,6 @@ void UpdateHalRAMask8192CUsb(PADAPTER padapter, u32 mac_id,u8 rssi_level )
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
WLAN_BSSID_EX *cur_network = &(pmlmeinfo->network);
-#ifdef CONFIG_CONCURRENT_MODE
- if(rtw_buddy_adapter_up(padapter) && padapter->adapter_type > PRIMARY_ADAPTER)
- pHalData = GET_HAL_DATA(padapter->pbuddy_adapter);
-#endif //CONFIG_CONCURRENT_MODE
if (mac_id >= NUM_STA) //CAM_SIZE
{
@@ -4002,10 +3987,17 @@ void rtl8723au_set_hal_ops(_adapter * padapter)
_func_enter_;
- padapter->HalData = rtw_zmalloc(sizeof(HAL_DATA_TYPE));
- if(padapter->HalData == NULL){
- DBG_8192C("cant not alloc memory for HAL DATA \n");
+#ifdef CONFIG_CONCURRENT_MODE
+ if(padapter->isprimary)
+#endif //CONFIG_CONCURRENT_MODE
+ {
+ //set hardware operation functions
+ padapter->HalData = rtw_zmalloc(sizeof(HAL_DATA_TYPE));
+ if(padapter->HalData == NULL){
+ DBG_8192C("cant not alloc memory for HAL DATA \n");
+ }
}
+
//_rtw_memset(padapter->HalData, 0, sizeof(HAL_DATA_TYPE));
padapter->hal_data_sz = sizeof(HAL_DATA_TYPE);
diff --git a/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/usb_ops_linux.c b/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/usb_ops_linux.c
index 78c429248a85..375e87f9b618 100755
--- a/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/usb_ops_linux.c
+++ b/drivers/net/wireless/rtl8723as/hal/rtl8723a/usb/usb_ops_linux.c
@@ -66,8 +66,8 @@ static int usbctrl_vendorreq(struct intf_hdl *pintfhdl, u8 request, u16 value, u
//DBG_871X("%s %s:%d\n",__FUNCTION__, current->comm, current->pid);
- if((padapter->bSurpriseRemoved) ||(padapter->pwrctrlpriv.pnp_bstop_trx)){
- RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usbctrl_vendorreq:(padapter->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)!!!\n"));
+ if((padapter->bSurpriseRemoved) ||(dvobj_to_pwrctl(pdvobjpriv)->pnp_bstop_trx)){
+ RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usbctrl_vendorreq:(padapter->bSurpriseRemoved ||pwrctl->pnp_bstop_trx)!!!\n"));
status = -EPERM;
goto exit;
}
@@ -133,7 +133,7 @@ static int usbctrl_vendorreq(struct intf_hdl *pintfhdl, u8 request, u16 value, u
if ( status == len) // Success this control transfer.
{
- rtw_reset_continual_urb_error(pdvobjpriv);
+ rtw_reset_continual_io_error(pdvobjpriv);
if ( requesttype == 0x01 )
{ // For Control read transfer, we have to copy the read data from pIo_buf to pdata.
_rtw_memcpy( pdata, pIo_buf, len );
@@ -166,7 +166,7 @@ static int usbctrl_vendorreq(struct intf_hdl *pintfhdl, u8 request, u16 value, u
}
}
- if(rtw_inc_and_chk_continual_urb_error(pdvobjpriv) == _TRUE ){
+ if(rtw_inc_and_chk_continual_io_error(pdvobjpriv) == _TRUE ){
padapter->bSurpriseRemoved = _TRUE;
break;
}
@@ -526,7 +526,7 @@ InterruptRecognized8723AU(
if( ((pHalData->IntArray[0])&UHIMR_CPWM)){
// DBG_8192C("%s HIMR=0x%x\n",__func__,pHalData->IntArray[0]);
//cpwm_int_hdl(Adapter, &report);
- _set_workitem(&Adapter->pwrctrlpriv.cpwm_event);
+ _set_workitem(&(adapter_to_pwrctl(Adapter)->cpwm_event));
pHalData->IntArray[0]&= ~UHIMR_CPWM;
// DBG_8192C("%s HIMR=0x%x\n",__func__,pHalData->IntArray[0]);
}
@@ -710,7 +710,10 @@ static int recvbuf2recvframe(_adapter *padapter, struct recv_buf *precvbuf)
pattrib = &precvframe->u.hdr.attrib;
if(pattrib->crc_err){
- DBG_8192C("%s()-%d: RX Warning! rx CRC ERROR !!\n", __FUNCTION__, __LINE__);
+ if (padapter->registrypriv.mp_mode == 1)
+ padapter->mppriv.rx_crcerrpktcount++;
+ else
+ DBG_8192C("%s()-%d: RX Warning! rx CRC ERROR !!\n", __FUNCTION__, __LINE__);
rtw_free_recvframe(precvframe, pfree_recv_queue);
goto _exit_recvbuf2recvframe;
}
@@ -754,11 +757,8 @@ static int recvbuf2recvframe(_adapter *padapter, struct recv_buf *precvbuf)
alloc_sz += 14;
}
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
- pkt_copy = dev_alloc_skb(alloc_sz);
-#else
- pkt_copy = netdev_alloc_skb(padapter->pnetdev, alloc_sz);
-#endif
+ pkt_copy = rtw_skb_alloc(alloc_sz);
+
if(pkt_copy)
{
pkt_copy->dev = padapter->pnetdev;
@@ -773,7 +773,7 @@ static int recvbuf2recvframe(_adapter *padapter, struct recv_buf *precvbuf)
else
{
DBG_8192C("recvbuf2recvframe:can not allocate memory for skb copy\n");
- //precvframe->u.hdr.pkt = skb_clone(pskb, GFP_ATOMIC);
+ //precvframe->u.hdr.pkt = rtw_skb_clone(pskb);
//precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pbuf;
//precvframe->u.hdr.rx_end = pbuf + (pkt_offset>1612?pkt_offset:1612);
@@ -879,7 +879,7 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
}
else
{
- rtw_reset_continual_urb_error(adapter_to_dvobj(padapter));
+ rtw_reset_continual_io_error(adapter_to_dvobj(padapter));
precvbuf->transfer_len = purb->actual_length;
@@ -895,7 +895,7 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
DBG_8192C("###=> usb_read_port_complete => urb status(%d)\n", purb->status);
- if(rtw_inc_and_chk_continual_urb_error(adapter_to_dvobj(padapter)) == _TRUE ){
+ if(rtw_inc_and_chk_continual_io_error(adapter_to_dvobj(padapter)) == _TRUE ){
padapter->bSurpriseRemoved = _TRUE;
}
@@ -911,6 +911,9 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port_complete:bDriverStopped=TRUE\n"));
break;
case -EPROTO:
+ case -EILSEQ:
+ case -ETIME:
+ case -ECOMM:
case -EOVERFLOW:
#ifdef DBG_CONFIG_ERROR_DETECT
{
@@ -949,9 +952,9 @@ static u32 usb_read_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)
_func_enter_;
- if(adapter->bDriverStopped || adapter->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)
+ if(adapter->bDriverStopped || adapter->bSurpriseRemoved ||dvobj_to_pwrctl(pdvobj)->pnp_bstop_trx)
{
- RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port:( padapter->bDriverStopped ||padapter->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)!!!\n"));
+ RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port:( padapter->bDriverStopped ||padapter->bSurpriseRemoved ||pwrctl->pnp_bstop_trx)!!!\n"));
return _FAIL;
}
@@ -1158,11 +1161,8 @@ static s32 pre_recv_entry(union recv_frame *precvframe, struct recv_stat *prxsta
alloc_sz += 14;
}
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
- pkt_copy = dev_alloc_skb(alloc_sz);
-#else
- pkt_copy = netdev_alloc_skb(secondary_padapter->pnetdev, alloc_sz);
-#endif
+ pkt_copy = rtw_skb_alloc(alloc_sz);
+
if(pkt_copy)
{
pkt_copy->dev = secondary_padapter->pnetdev;
@@ -1257,7 +1257,10 @@ static int recvbuf2recvframe(_adapter *padapter, _pkt *pskb)
pattrib = &precvframe->u.hdr.attrib;
if(pattrib->crc_err){
- DBG_8192C("%s()-%d: RX Warning! rx CRC ERROR !!\n", __FUNCTION__, __LINE__);
+ if (padapter->registrypriv.mp_mode == 1)
+ padapter->mppriv.rx_crcerrpktcount++;
+ else
+ DBG_8192C("%s()-%d: RX Warning! rx CRC ERROR !!\n", __FUNCTION__, __LINE__);
rtw_free_recvframe(precvframe, pfree_recv_queue);
goto _exit_recvbuf2recvframe;
}
@@ -1301,11 +1304,8 @@ static int recvbuf2recvframe(_adapter *padapter, _pkt *pskb)
alloc_sz += 14;
}
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
- pkt_copy = dev_alloc_skb(alloc_sz);
-#else
- pkt_copy = netdev_alloc_skb(padapter->pnetdev, alloc_sz);
-#endif
+ pkt_copy = rtw_skb_alloc(alloc_sz);
+
if(pkt_copy)
{
pkt_copy->dev = padapter->pnetdev;
@@ -1326,7 +1326,7 @@ static int recvbuf2recvframe(_adapter *padapter, _pkt *pskb)
goto _exit_recvbuf2recvframe;
}
- precvframe->u.hdr.pkt = skb_clone(pskb, GFP_ATOMIC);
+ precvframe->u.hdr.pkt = rtw_skb_clone(pskb);
if(precvframe->u.hdr.pkt)
{
precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail
@@ -1335,7 +1335,7 @@ static int recvbuf2recvframe(_adapter *padapter, _pkt *pskb)
}
else
{
- DBG_8192C("recvbuf2recvframe: skb_clone fail\n");
+ DBG_8192C("recvbuf2recvframe: rtw_skb_clone fail\n");
rtw_free_recvframe(precvframe, pfree_recv_queue);
goto _exit_recvbuf2recvframe;
}
@@ -1406,7 +1406,7 @@ void rtl8192cu_recv_tasklet(void *priv)
if ((padapter->bDriverStopped == _TRUE)||(padapter->bSurpriseRemoved== _TRUE))
{
DBG_8192C("recv_tasklet => bDriverStopped or bSurpriseRemoved \n");
- dev_kfree_skb_any(pskb);
+ rtw_skb_free(pskb);
break;
}
@@ -1421,7 +1421,7 @@ void rtl8192cu_recv_tasklet(void *priv)
skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);
#else
- dev_kfree_skb_any(pskb);
+ rtw_skb_free(pskb);
#endif
}
@@ -1461,7 +1461,7 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
#else
if(precvbuf->pskb){
DBG_8192C("==> free skb(%p)\n",precvbuf->pskb);
- dev_kfree_skb_any(precvbuf->pskb);
+ rtw_skb_free(precvbuf->pskb);
}
#endif
DBG_8192C("%s()-%d: RX Warning! bDriverStopped(%d) OR bSurpriseRemoved(%d) bReadPortCancel(%d)\n",
@@ -1480,7 +1480,7 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
}
else
{
- rtw_reset_continual_urb_error(adapter_to_dvobj(padapter));
+ rtw_reset_continual_io_error(adapter_to_dvobj(padapter));
precvbuf->transfer_len = purb->actual_length;
skb_put(precvbuf->pskb, purb->actual_length);
@@ -1500,7 +1500,7 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
DBG_8192C("###=> usb_read_port_complete => urb status(%d)\n", purb->status);
- if(rtw_inc_and_chk_continual_urb_error(adapter_to_dvobj(padapter)) == _TRUE ){
+ if(rtw_inc_and_chk_continual_io_error(adapter_to_dvobj(padapter)) == _TRUE ){
padapter->bSurpriseRemoved = _TRUE;
}
@@ -1516,6 +1516,9 @@ static void usb_read_port_complete(struct urb *purb, struct pt_regs *regs)
RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port_complete:bDriverStopped=TRUE\n"));
break;
case -EPROTO:
+ case -EILSEQ:
+ case -ETIME:
+ case -ECOMM:
case -EOVERFLOW:
#ifdef DBG_CONFIG_ERROR_DETECT
{
@@ -1559,9 +1562,9 @@ static u32 usb_read_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)
_func_enter_;
- if(adapter->bDriverStopped || adapter->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)
+ if(adapter->bDriverStopped || adapter->bSurpriseRemoved ||dvobj_to_pwrctl(pdvobj)->pnp_bstop_trx)
{
- RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port:( padapter->bDriverStopped ||padapter->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)!!!\n"));
+ RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_read_port:( padapter->bDriverStopped ||padapter->bSurpriseRemoved ||pwrctl->pnp_bstop_trx)!!!\n"));
return _FAIL;
}
@@ -1583,12 +1586,8 @@ _func_enter_;
//re-assign for linux based on skb
if((precvbuf->reuse == _FALSE) || (precvbuf->pskb == NULL))
{
- //precvbuf->pskb = alloc_skb(MAX_RECVBUF_SZ, GFP_ATOMIC);//don't use this after v2.6.25
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)) // http://www.mail-archive.com/netdev@vger.kernel.org/msg17214.html
- precvbuf->pskb = dev_alloc_skb(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
-#else
- precvbuf->pskb = netdev_alloc_skb(adapter->pnetdev, MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
-#endif
+ precvbuf->pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
+
if(precvbuf->pskb == NULL)
{
RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("init_recvbuf(): alloc_skb fail!\n"));
diff --git a/drivers/net/wireless/rtl8723as/ifcfg-wlan0 b/drivers/net/wireless/rtl8723as/ifcfg-wlan0
index 7ecb7ae62c7f..20dcbec2b1ae 100755
--- a/drivers/net/wireless/rtl8723as/ifcfg-wlan0
+++ b/drivers/net/wireless/rtl8723as/ifcfg-wlan0
@@ -1,4 +1,4 @@
-#DHCP client
-DEVICE=wlan0
-BOOTPROTO=dhcp
+#DHCP client
+DEVICE=wlan0
+BOOTPROTO=dhcp
ONBOOT=yes \ No newline at end of file
diff --git a/drivers/net/wireless/rtl8723as/include/Hal8188EPhyCfg.h b/drivers/net/wireless/rtl8723as/include/Hal8188EPhyCfg.h
index 2260f18d1a83..e9b97cc15ecf 100755
--- a/drivers/net/wireless/rtl8723as/include/Hal8188EPhyCfg.h
+++ b/drivers/net/wireless/rtl8723as/include/Hal8188EPhyCfg.h
@@ -1,428 +1,429 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __INC_HAL8188EPHYCFG_H__
-#define __INC_HAL8188EPHYCFG_H__
-
-
-/*--------------------------Define Parameters-------------------------------*/
-#define LOOP_LIMIT 5
-#define MAX_STALL_TIME 50 //us
-#define AntennaDiversityValue 0x80 //(Adapter->bSoftwareAntennaDiversity ? 0x00:0x80)
-#define MAX_TXPWR_IDX_NMODE_92S 63
-#define Reset_Cnt_Limit 3
-
-#define IQK_MAC_REG_NUM 4
-#define IQK_ADDA_REG_NUM 16
-#define IQK_BB_REG_NUM 9
-#define HP_THERMAL_NUM 8
-
-#ifdef CONFIG_PCI_HCI
-#define MAX_AGGR_NUM 0x0B
-#else
-#define MAX_AGGR_NUM 0x07
-#endif // CONFIG_PCI_HCI
-
-
-/*--------------------------Define Parameters-------------------------------*/
-
-
-/*------------------------------Define structure----------------------------*/
-typedef enum _SwChnlCmdID{
- CmdID_End,
- CmdID_SetTxPowerLevel,
- CmdID_BBRegWrite10,
- CmdID_WritePortUlong,
- CmdID_WritePortUshort,
- CmdID_WritePortUchar,
- CmdID_RF_WriteReg,
-}SwChnlCmdID;
-
-
-/* 1. Switch channel related */
-typedef struct _SwChnlCmd{
- SwChnlCmdID CmdID;
- u32 Para1;
- u32 Para2;
- u32 msDelay;
-}SwChnlCmd;
-
-typedef enum _HW90_BLOCK{
- HW90_BLOCK_MAC = 0,
- HW90_BLOCK_PHY0 = 1,
- HW90_BLOCK_PHY1 = 2,
- HW90_BLOCK_RF = 3,
- HW90_BLOCK_MAXIMUM = 4, // Never use this
-}HW90_BLOCK_E, *PHW90_BLOCK_E;
-
-typedef enum _RF_RADIO_PATH{
- RF_PATH_A = 0, //Radio Path A
- RF_PATH_B = 1, //Radio Path B
- RF_PATH_C = 2, //Radio Path C
- RF_PATH_D = 3, //Radio Path D
- //RF_PATH_MAX //Max RF number 90 support
-}RF_RADIO_PATH_E, *PRF_RADIO_PATH_E;
-
-#define MAX_PG_GROUP 13
-
-#define RF_PATH_MAX 2
-#define MAX_RF_PATH RF_PATH_MAX
-#define MAX_TX_COUNT_88E 1
-#define MAX_TX_COUNT MAX_TX_COUNT_88E // 4 //path numbers
-
-#define CHANNEL_MAX_NUMBER 14 // 14 is the max channel number
-#define MAX_CHNL_GROUP_24G 6 // ch1~2, ch3~5, ch6~8,ch9~11,ch12~13,CH 14 total six groups
-#define CHANNEL_GROUP_MAX_88E 6
-
-typedef enum _WIRELESS_MODE {
- WIRELESS_MODE_UNKNOWN = 0x00,
- WIRELESS_MODE_A = BIT2,
- WIRELESS_MODE_B = BIT0,
- WIRELESS_MODE_G = BIT1,
- WIRELESS_MODE_AUTO = BIT5,
- WIRELESS_MODE_N_24G = BIT3,
- WIRELESS_MODE_N_5G = BIT4,
- WIRELESS_MODE_AC = BIT6
-} WIRELESS_MODE;
-
-
-typedef enum _PHY_Rate_Tx_Power_Offset_Area{
- RA_OFFSET_LEGACY_OFDM1,
- RA_OFFSET_LEGACY_OFDM2,
- RA_OFFSET_HT_OFDM1,
- RA_OFFSET_HT_OFDM2,
- RA_OFFSET_HT_OFDM3,
- RA_OFFSET_HT_OFDM4,
- RA_OFFSET_HT_CCK,
-}RA_OFFSET_AREA,*PRA_OFFSET_AREA;
-
-
-/* BB/RF related */
-typedef enum _RF_TYPE_8190P{
- RF_TYPE_MIN, // 0
- RF_8225=1, // 1 11b/g RF for verification only
- RF_8256=2, // 2 11b/g/n
- RF_8258=3, // 3 11a/b/g/n RF
- RF_6052=4, // 4 11b/g/n RF
- //RF_6052=5, // 4 11b/g/n RF
- // TODO: We sholud remove this psudo PHY RF after we get new RF.
- RF_PSEUDO_11N=5, // 5, It is a temporality RF.
-}RF_TYPE_8190P_E,*PRF_TYPE_8190P_E;
-
-
-typedef struct _BB_REGISTER_DEFINITION{
- u32 rfintfs; // set software control:
- // 0x870~0x877[8 bytes]
-
- u32 rfintfi; // readback data:
- // 0x8e0~0x8e7[8 bytes]
-
- u32 rfintfo; // output data:
- // 0x860~0x86f [16 bytes]
-
- u32 rfintfe; // output enable:
- // 0x860~0x86f [16 bytes]
-
- u32 rf3wireOffset; // LSSI data:
- // 0x840~0x84f [16 bytes]
-
- u32 rfLSSI_Select; // BB Band Select:
- // 0x878~0x87f [8 bytes]
-
- u32 rfTxGainStage; // Tx gain stage:
- // 0x80c~0x80f [4 bytes]
-
- u32 rfHSSIPara1; // wire parameter control1 :
- // 0x820~0x823,0x828~0x82b, 0x830~0x833, 0x838~0x83b [16 bytes]
-
- u32 rfHSSIPara2; // wire parameter control2 :
- // 0x824~0x827,0x82c~0x82f, 0x834~0x837, 0x83c~0x83f [16 bytes]
-
- u32 rfSwitchControl; //Tx Rx antenna control :
- // 0x858~0x85f [16 bytes]
-
- u32 rfAGCControl1; //AGC parameter control1 :
- // 0xc50~0xc53,0xc58~0xc5b, 0xc60~0xc63, 0xc68~0xc6b [16 bytes]
-
- u32 rfAGCControl2; //AGC parameter control2 :
- // 0xc54~0xc57,0xc5c~0xc5f, 0xc64~0xc67, 0xc6c~0xc6f [16 bytes]
-
- u32 rfRxIQImbalance; //OFDM Rx IQ imbalance matrix :
- // 0xc14~0xc17,0xc1c~0xc1f, 0xc24~0xc27, 0xc2c~0xc2f [16 bytes]
-
- u32 rfRxAFE; //Rx IQ DC ofset and Rx digital filter, Rx DC notch filter :
- // 0xc10~0xc13,0xc18~0xc1b, 0xc20~0xc23, 0xc28~0xc2b [16 bytes]
-
- u32 rfTxIQImbalance; //OFDM Tx IQ imbalance matrix
- // 0xc80~0xc83,0xc88~0xc8b, 0xc90~0xc93, 0xc98~0xc9b [16 bytes]
-
- u32 rfTxAFE; //Tx IQ DC Offset and Tx DFIR type
- // 0xc84~0xc87,0xc8c~0xc8f, 0xc94~0xc97, 0xc9c~0xc9f [16 bytes]
-
- u32 rfLSSIReadBack; //LSSI RF readback data SI mode
- // 0x8a0~0x8af [16 bytes]
-
- u32 rfLSSIReadBackPi; //LSSI RF readback data PI mode 0x8b8-8bc for Path A and B
-
-}BB_REGISTER_DEFINITION_T, *PBB_REGISTER_DEFINITION_T;
-
-typedef struct _R_ANTENNA_SELECT_OFDM{
- u32 r_tx_antenna:4;
- u32 r_ant_l:4;
- u32 r_ant_non_ht:4;
- u32 r_ant_ht1:4;
- u32 r_ant_ht2:4;
- u32 r_ant_ht_s1:4;
- u32 r_ant_non_ht_s1:4;
- u32 OFDM_TXSC:2;
- u32 Reserved:2;
-}R_ANTENNA_SELECT_OFDM;
-
-typedef struct _R_ANTENNA_SELECT_CCK{
- u8 r_cckrx_enable_2:2;
- u8 r_cckrx_enable:2;
- u8 r_ccktx_enable:4;
-}R_ANTENNA_SELECT_CCK;
-
-/*------------------------------Define structure----------------------------*/
-
-
-/*------------------------Export global variable----------------------------*/
-/*------------------------Export global variable----------------------------*/
-
-
-/*------------------------Export Marco Definition---------------------------*/
-/*------------------------Export Marco Definition---------------------------*/
-
-
-/*--------------------------Exported Function prototype---------------------*/
-//
-// BB and RF register read/write
-//
-u32 rtl8188e_PHY_QueryBBReg( IN PADAPTER Adapter,
- IN u32 RegAddr,
- IN u32 BitMask );
-void rtl8188e_PHY_SetBBReg( IN PADAPTER Adapter,
- IN u32 RegAddr,
- IN u32 BitMask,
- IN u32 Data );
-u32 rtl8188e_PHY_QueryRFReg( IN PADAPTER Adapter,
- IN RF_RADIO_PATH_E eRFPath,
- IN u32 RegAddr,
- IN u32 BitMask );
-void rtl8188e_PHY_SetRFReg( IN PADAPTER Adapter,
- IN RF_RADIO_PATH_E eRFPath,
- IN u32 RegAddr,
- IN u32 BitMask,
- IN u32 Data );
-
-//
-// Initialization related function
-//
-/* MAC/BB/RF HAL config */
-int PHY_MACConfig8188E(IN PADAPTER Adapter );
-int PHY_BBConfig8188E(IN PADAPTER Adapter );
-int PHY_RFConfig8188E(IN PADAPTER Adapter );
-
-/* RF config */
-int rtl8188e_PHY_ConfigRFWithParaFile(IN PADAPTER Adapter, IN u8 * pFileName, RF_RADIO_PATH_E eRFPath);
-int rtl8188e_PHY_ConfigRFWithHeaderFile( IN PADAPTER Adapter,
- IN RF_RADIO_PATH_E eRFPath);
-
-/* Read initi reg value for tx power setting. */
-void rtl8192c_PHY_GetHWRegOriginalValue( IN PADAPTER Adapter );
-
-//
-// RF Power setting
-//
-//extern BOOLEAN PHY_SetRFPowerState(IN PADAPTER Adapter,
-// IN RT_RF_POWER_STATE eRFPowerState);
-
-//
-// BB TX Power R/W
-//
-void PHY_GetTxPowerLevel8188E( IN PADAPTER Adapter,
- OUT u32* powerlevel );
-void PHY_SetTxPowerLevel8188E( IN PADAPTER Adapter,
- IN u8 channel );
-BOOLEAN PHY_UpdateTxPowerDbm8188E( IN PADAPTER Adapter,
- IN int powerInDbm );
-
-//
-VOID
-PHY_ScanOperationBackup8188E(IN PADAPTER Adapter,
- IN u8 Operation );
-
-//
-// Switch bandwidth for 8192S
-//
-//extern void PHY_SetBWModeCallback8192C( IN PRT_TIMER pTimer );
-void PHY_SetBWMode8188E( IN PADAPTER pAdapter,
- IN HT_CHANNEL_WIDTH ChnlWidth,
- IN unsigned char Offset );
-
-//
-// Set FW CMD IO for 8192S.
-//
-//extern BOOLEAN HalSetIO8192C( IN PADAPTER Adapter,
-// IN IO_TYPE IOType);
-
-//
-// Set A2 entry to fw for 8192S
-//
-extern void FillA2Entry8192C( IN PADAPTER Adapter,
- IN u8 index,
- IN u8* val);
-
-
-//
-// channel switch related funciton
-//
-//extern void PHY_SwChnlCallback8192C( IN PRT_TIMER pTimer );
-void PHY_SwChnl8188E( IN PADAPTER pAdapter,
- IN u8 channel );
- // Call after initialization
-void PHY_SwChnlPhy8192C( IN PADAPTER pAdapter,
- IN u8 channel );
-
-void ChkFwCmdIoDone( IN PADAPTER Adapter);
-
-//
-// BB/MAC/RF other monitor API
-//
-void PHY_SetMonitorMode8192C(IN PADAPTER pAdapter,
- IN BOOLEAN bEnableMonitorMode );
-
-BOOLEAN PHY_CheckIsLegalRfPath8192C(IN PADAPTER pAdapter,
- IN u32 eRFPath );
-
-VOID PHY_SetRFPathSwitch_8188E(IN PADAPTER pAdapter, IN BOOLEAN bMain);
-
-extern VOID
-PHY_SwitchEphyParameter(
- IN PADAPTER Adapter
- );
-
-extern VOID
-PHY_EnableHostClkReq(
- IN PADAPTER Adapter
- );
-
-BOOLEAN
-SetAntennaConfig92C(
- IN PADAPTER Adapter,
- IN u8 DefaultAnt
- );
-
-#ifdef CONFIG_PHY_SETTING_WITH_ODM
-VOID
-storePwrIndexDiffRateOffset(
- IN PADAPTER Adapter,
- IN u32 RegAddr,
- IN u32 BitMask,
- IN u32 Data
- );
-#endif //CONFIG_PHY_SETTING_WITH_ODM
-/*--------------------------Exported Function prototype---------------------*/
-
-#define PHY_QueryBBReg(Adapter, RegAddr, BitMask) rtl8188e_PHY_QueryBBReg((Adapter), (RegAddr), (BitMask))
-#define PHY_SetBBReg(Adapter, RegAddr, BitMask, Data) rtl8188e_PHY_SetBBReg((Adapter), (RegAddr), (BitMask), (Data))
-#define PHY_QueryRFReg(Adapter, eRFPath, RegAddr, BitMask) rtl8188e_PHY_QueryRFReg((Adapter), (eRFPath), (RegAddr), (BitMask))
-#define PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data) rtl8188e_PHY_SetRFReg((Adapter), (eRFPath), (RegAddr), (BitMask), (Data))
-
-#define PHY_SetMacReg PHY_SetBBReg
-
-
-//
-// Initialization related function
-//
-/* MAC/BB/RF HAL config */
-//extern s32 PHY_MACConfig8723(PADAPTER padapter);
-//s32 PHY_BBConfig8723(PADAPTER padapter);
-//s32 PHY_RFConfig8723(PADAPTER padapter);
-
-
-
-//==================================================================
-// Note: If SIC_ENABLE under PCIE, because of the slow operation
-// you should
-// 2) "#define RTL8723_FPGA_VERIFICATION 1" in Precomp.h.WlanE.Windows
-// 3) "#define RTL8190_Download_Firmware_From_Header 0" in Precomp.h.WlanE.Windows if needed.
-//
-#if (RTL8188E_SUPPORT == 1) && (RTL8188E_FPGA_TRUE_PHY_VERIFICATION == 1)
-#define SIC_ENABLE 1
-#define SIC_HW_SUPPORT 1
-#else
-#define SIC_ENABLE 0
-#define SIC_HW_SUPPORT 0
-#endif
-//==================================================================
-
-
-#define SIC_MAX_POLL_CNT 5
-
-#if(SIC_HW_SUPPORT == 1)
-#define SIC_CMD_READY 0
-#define SIC_CMD_PREWRITE 0x1
-#if(RTL8188E_SUPPORT == 1)
-#define SIC_CMD_WRITE 0x40
-#define SIC_CMD_PREREAD 0x2
-#define SIC_CMD_READ 0x80
-#define SIC_CMD_INIT 0xf0
-#define SIC_INIT_VAL 0xff
-
-#define SIC_INIT_REG 0x1b7
-#define SIC_CMD_REG 0x1EB // 1byte
-#define SIC_ADDR_REG 0x1E8 // 1b4~1b5, 2 bytes
-#define SIC_DATA_REG 0x1EC // 1b0~1b3
-#else
-#define SIC_CMD_WRITE 0x11
-#define SIC_CMD_PREREAD 0x2
-#define SIC_CMD_READ 0x12
-#define SIC_CMD_INIT 0x1f
-#define SIC_INIT_VAL 0xff
-
-#define SIC_INIT_REG 0x1b7
-#define SIC_CMD_REG 0x1b6 // 1byte
-#define SIC_ADDR_REG 0x1b4 // 1b4~1b5, 2 bytes
-#define SIC_DATA_REG 0x1b0 // 1b0~1b3
-#endif
-#else
-#define SIC_CMD_READY 0
-#define SIC_CMD_WRITE 1
-#define SIC_CMD_READ 2
-
-#if(RTL8188E_SUPPORT == 1)
-#define SIC_CMD_REG 0x1EB // 1byte
-#define SIC_ADDR_REG 0x1E8 // 1b9~1ba, 2 bytes
-#define SIC_DATA_REG 0x1EC // 1bc~1bf
-#else
-#define SIC_CMD_REG 0x1b8 // 1byte
-#define SIC_ADDR_REG 0x1b9 // 1b9~1ba, 2 bytes
-#define SIC_DATA_REG 0x1bc // 1bc~1bf
-#endif
-#endif
-
-#if(SIC_ENABLE == 1)
-VOID SIC_Init(IN PADAPTER Adapter);
-#endif
-
-
-#endif // __INC_HAL8192CPHYCFG_H
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __INC_HAL8188EPHYCFG_H__
+#define __INC_HAL8188EPHYCFG_H__
+
+
+/*--------------------------Define Parameters-------------------------------*/
+#define LOOP_LIMIT 5
+#define MAX_STALL_TIME 50 //us
+#define AntennaDiversityValue 0x80 //(Adapter->bSoftwareAntennaDiversity ? 0x00:0x80)
+#define MAX_TXPWR_IDX_NMODE_92S 63
+#define Reset_Cnt_Limit 3
+
+#define IQK_MAC_REG_NUM 4
+#define IQK_ADDA_REG_NUM 16
+#define IQK_BB_REG_NUM 9
+#define HP_THERMAL_NUM 8
+
+#ifdef CONFIG_PCI_HCI
+#define MAX_AGGR_NUM 0x0B
+#else
+#define MAX_AGGR_NUM 0x07
+#endif // CONFIG_PCI_HCI
+
+
+/*--------------------------Define Parameters-------------------------------*/
+
+
+/*------------------------------Define structure----------------------------*/
+typedef enum _SwChnlCmdID{
+ CmdID_End,
+ CmdID_SetTxPowerLevel,
+ CmdID_BBRegWrite10,
+ CmdID_WritePortUlong,
+ CmdID_WritePortUshort,
+ CmdID_WritePortUchar,
+ CmdID_RF_WriteReg,
+}SwChnlCmdID;
+
+
+/* 1. Switch channel related */
+typedef struct _SwChnlCmd{
+ SwChnlCmdID CmdID;
+ u32 Para1;
+ u32 Para2;
+ u32 msDelay;
+}SwChnlCmd;
+
+typedef enum _HW90_BLOCK{
+ HW90_BLOCK_MAC = 0,
+ HW90_BLOCK_PHY0 = 1,
+ HW90_BLOCK_PHY1 = 2,
+ HW90_BLOCK_RF = 3,
+ HW90_BLOCK_MAXIMUM = 4, // Never use this
+}HW90_BLOCK_E, *PHW90_BLOCK_E;
+
+typedef enum _RF_RADIO_PATH{
+ RF_PATH_A = 0, //Radio Path A
+ RF_PATH_B = 1, //Radio Path B
+ RF_PATH_C = 2, //Radio Path C
+ RF_PATH_D = 3, //Radio Path D
+ //RF_PATH_MAX //Max RF number 90 support
+}RF_RADIO_PATH_E, *PRF_RADIO_PATH_E;
+
+#define MAX_PG_GROUP 13
+
+#define RF_PATH_MAX 2
+#define MAX_RF_PATH RF_PATH_MAX
+#define MAX_TX_COUNT_88E 1
+#define MAX_TX_COUNT MAX_TX_COUNT_88E // 4 //path numbers
+
+#define CHANNEL_MAX_NUMBER 14 // 14 is the max channel number
+#define MAX_CHNL_GROUP_24G 6 // ch1~2, ch3~5, ch6~8,ch9~11,ch12~13,CH 14 total six groups
+#define CHANNEL_GROUP_MAX_88E 6
+
+typedef enum _WIRELESS_MODE {
+ WIRELESS_MODE_UNKNOWN = 0x00,
+ WIRELESS_MODE_A = BIT2,
+ WIRELESS_MODE_B = BIT0,
+ WIRELESS_MODE_G = BIT1,
+ WIRELESS_MODE_AUTO = BIT5,
+ WIRELESS_MODE_N_24G = BIT3,
+ WIRELESS_MODE_N_5G = BIT4,
+ WIRELESS_MODE_AC = BIT6
+} WIRELESS_MODE;
+
+
+typedef enum _PHY_Rate_Tx_Power_Offset_Area{
+ RA_OFFSET_LEGACY_OFDM1,
+ RA_OFFSET_LEGACY_OFDM2,
+ RA_OFFSET_HT_OFDM1,
+ RA_OFFSET_HT_OFDM2,
+ RA_OFFSET_HT_OFDM3,
+ RA_OFFSET_HT_OFDM4,
+ RA_OFFSET_HT_CCK,
+}RA_OFFSET_AREA,*PRA_OFFSET_AREA;
+
+
+/* BB/RF related */
+typedef enum _RF_TYPE_8190P{
+ RF_TYPE_MIN, // 0
+ RF_8225=1, // 1 11b/g RF for verification only
+ RF_8256=2, // 2 11b/g/n
+ RF_8258=3, // 3 11a/b/g/n RF
+ RF_6052=4, // 4 11b/g/n RF
+ //RF_6052=5, // 4 11b/g/n RF
+ // TODO: We sholud remove this psudo PHY RF after we get new RF.
+ RF_PSEUDO_11N=5, // 5, It is a temporality RF.
+}RF_TYPE_8190P_E,*PRF_TYPE_8190P_E;
+
+
+typedef struct _BB_REGISTER_DEFINITION{
+ u32 rfintfs; // set software control:
+ // 0x870~0x877[8 bytes]
+
+ u32 rfintfi; // readback data:
+ // 0x8e0~0x8e7[8 bytes]
+
+ u32 rfintfo; // output data:
+ // 0x860~0x86f [16 bytes]
+
+ u32 rfintfe; // output enable:
+ // 0x860~0x86f [16 bytes]
+
+ u32 rf3wireOffset; // LSSI data:
+ // 0x840~0x84f [16 bytes]
+
+ u32 rfLSSI_Select; // BB Band Select:
+ // 0x878~0x87f [8 bytes]
+
+ u32 rfTxGainStage; // Tx gain stage:
+ // 0x80c~0x80f [4 bytes]
+
+ u32 rfHSSIPara1; // wire parameter control1 :
+ // 0x820~0x823,0x828~0x82b, 0x830~0x833, 0x838~0x83b [16 bytes]
+
+ u32 rfHSSIPara2; // wire parameter control2 :
+ // 0x824~0x827,0x82c~0x82f, 0x834~0x837, 0x83c~0x83f [16 bytes]
+
+ u32 rfSwitchControl; //Tx Rx antenna control :
+ // 0x858~0x85f [16 bytes]
+
+ u32 rfAGCControl1; //AGC parameter control1 :
+ // 0xc50~0xc53,0xc58~0xc5b, 0xc60~0xc63, 0xc68~0xc6b [16 bytes]
+
+ u32 rfAGCControl2; //AGC parameter control2 :
+ // 0xc54~0xc57,0xc5c~0xc5f, 0xc64~0xc67, 0xc6c~0xc6f [16 bytes]
+
+ u32 rfRxIQImbalance; //OFDM Rx IQ imbalance matrix :
+ // 0xc14~0xc17,0xc1c~0xc1f, 0xc24~0xc27, 0xc2c~0xc2f [16 bytes]
+
+ u32 rfRxAFE; //Rx IQ DC ofset and Rx digital filter, Rx DC notch filter :
+ // 0xc10~0xc13,0xc18~0xc1b, 0xc20~0xc23, 0xc28~0xc2b [16 bytes]
+
+ u32 rfTxIQImbalance; //OFDM Tx IQ imbalance matrix
+ // 0xc80~0xc83,0xc88~0xc8b, 0xc90~0xc93, 0xc98~0xc9b [16 bytes]
+
+ u32 rfTxAFE; //Tx IQ DC Offset and Tx DFIR type
+ // 0xc84~0xc87,0xc8c~0xc8f, 0xc94~0xc97, 0xc9c~0xc9f [16 bytes]
+
+ u32 rfLSSIReadBack; //LSSI RF readback data SI mode
+ // 0x8a0~0x8af [16 bytes]
+
+ u32 rfLSSIReadBackPi; //LSSI RF readback data PI mode 0x8b8-8bc for Path A and B
+
+}BB_REGISTER_DEFINITION_T, *PBB_REGISTER_DEFINITION_T;
+
+typedef struct _R_ANTENNA_SELECT_OFDM{
+ u32 r_tx_antenna:4;
+ u32 r_ant_l:4;
+ u32 r_ant_non_ht:4;
+ u32 r_ant_ht1:4;
+ u32 r_ant_ht2:4;
+ u32 r_ant_ht_s1:4;
+ u32 r_ant_non_ht_s1:4;
+ u32 OFDM_TXSC:2;
+ u32 Reserved:2;
+}R_ANTENNA_SELECT_OFDM;
+
+typedef struct _R_ANTENNA_SELECT_CCK{
+ u8 r_cckrx_enable_2:2;
+ u8 r_cckrx_enable:2;
+ u8 r_ccktx_enable:4;
+}R_ANTENNA_SELECT_CCK;
+
+/*------------------------------Define structure----------------------------*/
+
+
+/*------------------------Export global variable----------------------------*/
+/*------------------------Export global variable----------------------------*/
+
+
+/*------------------------Export Marco Definition---------------------------*/
+/*------------------------Export Marco Definition---------------------------*/
+
+
+/*--------------------------Exported Function prototype---------------------*/
+//
+// BB and RF register read/write
+//
+u32 rtl8188e_PHY_QueryBBReg( IN PADAPTER Adapter,
+ IN u32 RegAddr,
+ IN u32 BitMask );
+void rtl8188e_PHY_SetBBReg( IN PADAPTER Adapter,
+ IN u32 RegAddr,
+ IN u32 BitMask,
+ IN u32 Data );
+u32 rtl8188e_PHY_QueryRFReg( IN PADAPTER Adapter,
+ IN RF_RADIO_PATH_E eRFPath,
+ IN u32 RegAddr,
+ IN u32 BitMask );
+void rtl8188e_PHY_SetRFReg( IN PADAPTER Adapter,
+ IN RF_RADIO_PATH_E eRFPath,
+ IN u32 RegAddr,
+ IN u32 BitMask,
+ IN u32 Data );
+
+//
+// Initialization related function
+//
+/* MAC/BB/RF HAL config */
+int PHY_MACConfig8188E(IN PADAPTER Adapter );
+int PHY_BBConfig8188E(IN PADAPTER Adapter );
+int PHY_RFConfig8188E(IN PADAPTER Adapter );
+
+/* RF config */
+int rtl8188e_PHY_ConfigRFWithParaFile(IN PADAPTER Adapter, IN u8 * pFileName, RF_RADIO_PATH_E eRFPath);
+int rtl8188e_PHY_ConfigRFWithHeaderFile( IN PADAPTER Adapter,
+ IN RF_RADIO_PATH_E eRFPath);
+
+/* Read initi reg value for tx power setting. */
+void rtl8192c_PHY_GetHWRegOriginalValue( IN PADAPTER Adapter );
+
+//
+// RF Power setting
+//
+//extern BOOLEAN PHY_SetRFPowerState(IN PADAPTER Adapter,
+// IN RT_RF_POWER_STATE eRFPowerState);
+
+//
+// BB TX Power R/W
+//
+void PHY_GetTxPowerLevel8188E( IN PADAPTER Adapter,
+ OUT u32* powerlevel );
+void PHY_SetTxPowerLevel8188E( IN PADAPTER Adapter,
+ IN u8 channel );
+BOOLEAN PHY_UpdateTxPowerDbm8188E( IN PADAPTER Adapter,
+ IN int powerInDbm );
+
+//
+VOID
+PHY_ScanOperationBackup8188E(IN PADAPTER Adapter,
+ IN u8 Operation );
+
+//
+// Switch bandwidth for 8192S
+//
+//extern void PHY_SetBWModeCallback8192C( IN PRT_TIMER pTimer );
+void PHY_SetBWMode8188E( IN PADAPTER pAdapter,
+ IN HT_CHANNEL_WIDTH ChnlWidth,
+ IN unsigned char Offset );
+
+//
+// Set FW CMD IO for 8192S.
+//
+//extern BOOLEAN HalSetIO8192C( IN PADAPTER Adapter,
+// IN IO_TYPE IOType);
+
+//
+// Set A2 entry to fw for 8192S
+//
+extern void FillA2Entry8192C( IN PADAPTER Adapter,
+ IN u8 index,
+ IN u8* val);
+
+
+//
+// channel switch related funciton
+//
+//extern void PHY_SwChnlCallback8192C( IN PRT_TIMER pTimer );
+void PHY_SwChnl8188E( IN PADAPTER pAdapter,
+ IN u8 channel );
+ // Call after initialization
+void PHY_SwChnlPhy8192C( IN PADAPTER pAdapter,
+ IN u8 channel );
+
+void ChkFwCmdIoDone( IN PADAPTER Adapter);
+
+//
+// BB/MAC/RF other monitor API
+//
+void PHY_SetMonitorMode8192C(IN PADAPTER pAdapter,
+ IN BOOLEAN bEnableMonitorMode );
+
+BOOLEAN PHY_CheckIsLegalRfPath8192C(IN PADAPTER pAdapter,
+ IN u32 eRFPath );
+
+VOID PHY_SetRFPathSwitch_8188E(IN PADAPTER pAdapter, IN BOOLEAN bMain);
+
+extern VOID
+PHY_SwitchEphyParameter(
+ IN PADAPTER Adapter
+ );
+
+extern VOID
+PHY_EnableHostClkReq(
+ IN PADAPTER Adapter
+ );
+
+BOOLEAN
+SetAntennaConfig92C(
+ IN PADAPTER Adapter,
+ IN u8 DefaultAnt
+ );
+
+#ifdef CONFIG_PHY_SETTING_WITH_ODM
+VOID
+storePwrIndexDiffRateOffset(
+ IN PADAPTER Adapter,
+ IN u32 RegAddr,
+ IN u32 BitMask,
+ IN u32 Data
+ );
+#endif //CONFIG_PHY_SETTING_WITH_ODM
+/*--------------------------Exported Function prototype---------------------*/
+
+#define PHY_QueryBBReg(Adapter, RegAddr, BitMask) rtl8188e_PHY_QueryBBReg((Adapter), (RegAddr), (BitMask))
+#define PHY_SetBBReg(Adapter, RegAddr, BitMask, Data) rtl8188e_PHY_SetBBReg((Adapter), (RegAddr), (BitMask), (Data))
+#define PHY_QueryRFReg(Adapter, eRFPath, RegAddr, BitMask) rtl8188e_PHY_QueryRFReg((Adapter), (eRFPath), (RegAddr), (BitMask))
+#define PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data) rtl8188e_PHY_SetRFReg((Adapter), (eRFPath), (RegAddr), (BitMask), (Data))
+
+#define PHY_SetMacReg PHY_SetBBReg
+#define PHY_QueryMacReg PHY_QueryBBReg
+
+
+//
+// Initialization related function
+//
+/* MAC/BB/RF HAL config */
+//extern s32 PHY_MACConfig8723(PADAPTER padapter);
+//s32 PHY_BBConfig8723(PADAPTER padapter);
+//s32 PHY_RFConfig8723(PADAPTER padapter);
+
+
+
+//==================================================================
+// Note: If SIC_ENABLE under PCIE, because of the slow operation
+// you should
+// 2) "#define RTL8723_FPGA_VERIFICATION 1" in Precomp.h.WlanE.Windows
+// 3) "#define RTL8190_Download_Firmware_From_Header 0" in Precomp.h.WlanE.Windows if needed.
+//
+#if (RTL8188E_SUPPORT == 1) && (RTL8188E_FPGA_TRUE_PHY_VERIFICATION == 1)
+#define SIC_ENABLE 1
+#define SIC_HW_SUPPORT 1
+#else
+#define SIC_ENABLE 0
+#define SIC_HW_SUPPORT 0
+#endif
+//==================================================================
+
+
+#define SIC_MAX_POLL_CNT 5
+
+#if(SIC_HW_SUPPORT == 1)
+#define SIC_CMD_READY 0
+#define SIC_CMD_PREWRITE 0x1
+#if(RTL8188E_SUPPORT == 1)
+#define SIC_CMD_WRITE 0x40
+#define SIC_CMD_PREREAD 0x2
+#define SIC_CMD_READ 0x80
+#define SIC_CMD_INIT 0xf0
+#define SIC_INIT_VAL 0xff
+
+#define SIC_INIT_REG 0x1b7
+#define SIC_CMD_REG 0x1EB // 1byte
+#define SIC_ADDR_REG 0x1E8 // 1b4~1b5, 2 bytes
+#define SIC_DATA_REG 0x1EC // 1b0~1b3
+#else
+#define SIC_CMD_WRITE 0x11
+#define SIC_CMD_PREREAD 0x2
+#define SIC_CMD_READ 0x12
+#define SIC_CMD_INIT 0x1f
+#define SIC_INIT_VAL 0xff
+
+#define SIC_INIT_REG 0x1b7
+#define SIC_CMD_REG 0x1b6 // 1byte
+#define SIC_ADDR_REG 0x1b4 // 1b4~1b5, 2 bytes
+#define SIC_DATA_REG 0x1b0 // 1b0~1b3
+#endif
+#else
+#define SIC_CMD_READY 0
+#define SIC_CMD_WRITE 1
+#define SIC_CMD_READ 2
+
+#if(RTL8188E_SUPPORT == 1)
+#define SIC_CMD_REG 0x1EB // 1byte
+#define SIC_ADDR_REG 0x1E8 // 1b9~1ba, 2 bytes
+#define SIC_DATA_REG 0x1EC // 1bc~1bf
+#else
+#define SIC_CMD_REG 0x1b8 // 1byte
+#define SIC_ADDR_REG 0x1b9 // 1b9~1ba, 2 bytes
+#define SIC_DATA_REG 0x1bc // 1bc~1bf
+#endif
+#endif
+
+#if(SIC_ENABLE == 1)
+VOID SIC_Init(IN PADAPTER Adapter);
+#endif
+
+
+#endif // __INC_HAL8192CPHYCFG_H
+
diff --git a/drivers/net/wireless/rtl8723as/include/Hal8188EPhyReg.h b/drivers/net/wireless/rtl8723as/include/Hal8188EPhyReg.h
index 56947689797e..1eddfe754e1a 100755
--- a/drivers/net/wireless/rtl8723as/include/Hal8188EPhyReg.h
+++ b/drivers/net/wireless/rtl8723as/include/Hal8188EPhyReg.h
@@ -1,1111 +1,1111 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __INC_HAL8188EPHYREG_H__
-#define __INC_HAL8188EPHYREG_H__
-/*--------------------------Define Parameters-------------------------------*/
-//
-// BB-PHY register PMAC 0x100 PHY 0x800 - 0xEFF
-// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF
-// 2. 0x800/0x900/0xA00/0xC00/0xD00/0xE00
-// 3. RF register 0x00-2E
-// 4. Bit Mask for BB/RF register
-// 5. Other defintion for BB/RF R/W
-//
-
-
-//
-// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF
-// 1. Page1(0x100)
-//
-#define rPMAC_Reset 0x100
-#define rPMAC_TxStart 0x104
-#define rPMAC_TxLegacySIG 0x108
-#define rPMAC_TxHTSIG1 0x10c
-#define rPMAC_TxHTSIG2 0x110
-#define rPMAC_PHYDebug 0x114
-#define rPMAC_TxPacketNum 0x118
-#define rPMAC_TxIdle 0x11c
-#define rPMAC_TxMACHeader0 0x120
-#define rPMAC_TxMACHeader1 0x124
-#define rPMAC_TxMACHeader2 0x128
-#define rPMAC_TxMACHeader3 0x12c
-#define rPMAC_TxMACHeader4 0x130
-#define rPMAC_TxMACHeader5 0x134
-#define rPMAC_TxDataType 0x138
-#define rPMAC_TxRandomSeed 0x13c
-#define rPMAC_CCKPLCPPreamble 0x140
-#define rPMAC_CCKPLCPHeader 0x144
-#define rPMAC_CCKCRC16 0x148
-#define rPMAC_OFDMRxCRC32OK 0x170
-#define rPMAC_OFDMRxCRC32Er 0x174
-#define rPMAC_OFDMRxParityEr 0x178
-#define rPMAC_OFDMRxCRC8Er 0x17c
-#define rPMAC_CCKCRxRC16Er 0x180
-#define rPMAC_CCKCRxRC32Er 0x184
-#define rPMAC_CCKCRxRC32OK 0x188
-#define rPMAC_TxStatus 0x18c
-
-//
-// 2. Page2(0x200)
-//
-// The following two definition are only used for USB interface.
-#define RF_BB_CMD_ADDR 0x02c0 // RF/BB read/write command address.
-#define RF_BB_CMD_DATA 0x02c4 // RF/BB read/write command data.
-
-//
-// 3. Page8(0x800)
-//
-#define rFPGA0_RFMOD 0x800 //RF mode & CCK TxSC // RF BW Setting??
-
-#define rFPGA0_TxInfo 0x804 // Status report??
-#define rFPGA0_PSDFunction 0x808
-
-#define rFPGA0_TxGainStage 0x80c // Set TX PWR init gain?
-
-#define rFPGA0_RFTiming1 0x810 // Useless now
-#define rFPGA0_RFTiming2 0x814
-
-#define rFPGA0_XA_HSSIParameter1 0x820 // RF 3 wire register
-#define rFPGA0_XA_HSSIParameter2 0x824
-#define rFPGA0_XB_HSSIParameter1 0x828
-#define rFPGA0_XB_HSSIParameter2 0x82c
-
-#define rFPGA0_XA_LSSIParameter 0x840
-#define rFPGA0_XB_LSSIParameter 0x844
-
-#define rFPGA0_RFWakeUpParameter 0x850 // Useless now
-#define rFPGA0_RFSleepUpParameter 0x854
-
-#define rFPGA0_XAB_SwitchControl 0x858 // RF Channel switch
-#define rFPGA0_XCD_SwitchControl 0x85c
-
-#define rFPGA0_XA_RFInterfaceOE 0x860 // RF Channel switch
-#define rFPGA0_XB_RFInterfaceOE 0x864
-
-#define rFPGA0_XAB_RFInterfaceSW 0x870 // RF Interface Software Control
-#define rFPGA0_XCD_RFInterfaceSW 0x874
-
-#define rFPGA0_XAB_RFParameter 0x878 // RF Parameter
-#define rFPGA0_XCD_RFParameter 0x87c
-
-#define rFPGA0_AnalogParameter1 0x880 // Crystal cap setting RF-R/W protection for parameter4??
-#define rFPGA0_AnalogParameter2 0x884
-#define rFPGA0_AnalogParameter3 0x888
-#define rFPGA0_AdDaClockEn 0x888 // enable ad/da clock1 for dual-phy
-#define rFPGA0_AnalogParameter4 0x88c
-
-#define rFPGA0_XA_LSSIReadBack 0x8a0 // Tranceiver LSSI Readback
-#define rFPGA0_XB_LSSIReadBack 0x8a4
-#define rFPGA0_XC_LSSIReadBack 0x8a8
-#define rFPGA0_XD_LSSIReadBack 0x8ac
-
-#define rFPGA0_PSDReport 0x8b4 // Useless now
-#define TransceiverA_HSPI_Readback 0x8b8 // Transceiver A HSPI Readback
-#define TransceiverB_HSPI_Readback 0x8bc // Transceiver B HSPI Readback
-#define rFPGA0_XAB_RFInterfaceRB 0x8e0 // Useless now // RF Interface Readback Value
-#define rFPGA0_XCD_RFInterfaceRB 0x8e4 // Useless now
-
-//
-// 4. Page9(0x900)
-//
-#define rFPGA1_RFMOD 0x900 //RF mode & OFDM TxSC // RF BW Setting??
-
-#define rFPGA1_TxBlock 0x904 // Useless now
-#define rFPGA1_DebugSelect 0x908 // Useless now
-#define rFPGA1_TxInfo 0x90c // Useless now // Status report??
-
-//
-// 5. PageA(0xA00)
-//
-// Set Control channel to upper or lower. These settings are required only for 40MHz
-#define rCCK0_System 0xa00
-
-#define rCCK0_AFESetting 0xa04 // Disable init gain now // Select RX path by RSSI
-#define rCCK0_CCA 0xa08 // Disable init gain now // Init gain
-
-#define rCCK0_RxAGC1 0xa0c //AGC default value, saturation level // Antenna Diversity, RX AGC, LNA Threshold, RX LNA Threshold useless now. Not the same as 90 series
-#define rCCK0_RxAGC2 0xa10 //AGC & DAGC
-
-#define rCCK0_RxHP 0xa14
-
-#define rCCK0_DSPParameter1 0xa18 //Timing recovery & Channel estimation threshold
-#define rCCK0_DSPParameter2 0xa1c //SQ threshold
-
-#define rCCK0_TxFilter1 0xa20
-#define rCCK0_TxFilter2 0xa24
-#define rCCK0_DebugPort 0xa28 //debug port and Tx filter3
-#define rCCK0_FalseAlarmReport 0xa2c //0xa2d useless now 0xa30-a4f channel report
-#define rCCK0_TRSSIReport 0xa50
-#define rCCK0_RxReport 0xa54 //0xa57
-#define rCCK0_FACounterLower 0xa5c //0xa5b
-#define rCCK0_FACounterUpper 0xa58 //0xa5c
-
-//
-// PageB(0xB00)
-//
-#define rPdp_AntA 0xb00
-#define rPdp_AntA_4 0xb04
-#define rConfig_Pmpd_AntA 0xb28
-#define rConfig_AntA 0xb68
-#define rConfig_AntB 0xb6c
-#define rPdp_AntB 0xb70
-#define rPdp_AntB_4 0xb74
-#define rConfig_Pmpd_AntB 0xb98
-#define rAPK 0xbd8
-
-
-
-//
-// 6. PageC(0xC00)
-//
-#define rOFDM0_LSTF 0xc00
-
-#define rOFDM0_TRxPathEnable 0xc04
-#define rOFDM0_TRMuxPar 0xc08
-#define rOFDM0_TRSWIsolation 0xc0c
-
-#define rOFDM0_XARxAFE 0xc10 //RxIQ DC offset, Rx digital filter, DC notch filter
-#define rOFDM0_XARxIQImbalance 0xc14 //RxIQ imblance matrix
-#define rOFDM0_XBRxAFE 0xc18
-#define rOFDM0_XBRxIQImbalance 0xc1c
-#define rOFDM0_XCRxAFE 0xc20
-#define rOFDM0_XCRxIQImbalance 0xc24
-#define rOFDM0_XDRxAFE 0xc28
-#define rOFDM0_XDRxIQImbalance 0xc2c
-
-#define rOFDM0_RxDetector1 0xc30 //PD,BW & SBD // DM tune init gain
-#define rOFDM0_RxDetector2 0xc34 //SBD & Fame Sync.
-#define rOFDM0_RxDetector3 0xc38 //Frame Sync.
-#define rOFDM0_RxDetector4 0xc3c //PD, SBD, Frame Sync & Short-GI
-
-#define rOFDM0_RxDSP 0xc40 //Rx Sync Path
-#define rOFDM0_CFOandDAGC 0xc44 //CFO & DAGC
-#define rOFDM0_CCADropThreshold 0xc48 //CCA Drop threshold
-#define rOFDM0_ECCAThreshold 0xc4c // energy CCA
-
-#define rOFDM0_XAAGCCore1 0xc50 // DIG
-#define rOFDM0_XAAGCCore2 0xc54
-#define rOFDM0_XBAGCCore1 0xc58
-#define rOFDM0_XBAGCCore2 0xc5c
-#define rOFDM0_XCAGCCore1 0xc60
-#define rOFDM0_XCAGCCore2 0xc64
-#define rOFDM0_XDAGCCore1 0xc68
-#define rOFDM0_XDAGCCore2 0xc6c
-
-#define rOFDM0_AGCParameter1 0xc70
-#define rOFDM0_AGCParameter2 0xc74
-#define rOFDM0_AGCRSSITable 0xc78
-#define rOFDM0_HTSTFAGC 0xc7c
-
-#define rOFDM0_XATxIQImbalance 0xc80 // TX PWR TRACK and DIG
-#define rOFDM0_XATxAFE 0xc84
-#define rOFDM0_XBTxIQImbalance 0xc88
-#define rOFDM0_XBTxAFE 0xc8c
-#define rOFDM0_XCTxIQImbalance 0xc90
-#define rOFDM0_XCTxAFE 0xc94
-#define rOFDM0_XDTxIQImbalance 0xc98
-#define rOFDM0_XDTxAFE 0xc9c
-
-#define rOFDM0_RxIQExtAnta 0xca0
-#define rOFDM0_TxCoeff1 0xca4
-#define rOFDM0_TxCoeff2 0xca8
-#define rOFDM0_TxCoeff3 0xcac
-#define rOFDM0_TxCoeff4 0xcb0
-#define rOFDM0_TxCoeff5 0xcb4
-#define rOFDM0_TxCoeff6 0xcb8
-#define rOFDM0_RxHPParameter 0xce0
-#define rOFDM0_TxPseudoNoiseWgt 0xce4
-#define rOFDM0_FrameSync 0xcf0
-#define rOFDM0_DFSReport 0xcf4
-
-
-//
-// 7. PageD(0xD00)
-//
-#define rOFDM1_LSTF 0xd00
-#define rOFDM1_TRxPathEnable 0xd04
-
-#define rOFDM1_CFO 0xd08 // No setting now
-#define rOFDM1_CSI1 0xd10
-#define rOFDM1_SBD 0xd14
-#define rOFDM1_CSI2 0xd18
-#define rOFDM1_CFOTracking 0xd2c
-#define rOFDM1_TRxMesaure1 0xd34
-#define rOFDM1_IntfDet 0xd3c
-#define rOFDM1_PseudoNoiseStateAB 0xd50
-#define rOFDM1_PseudoNoiseStateCD 0xd54
-#define rOFDM1_RxPseudoNoiseWgt 0xd58
-
-#define rOFDM_PHYCounter1 0xda0 //cca, parity fail
-#define rOFDM_PHYCounter2 0xda4 //rate illegal, crc8 fail
-#define rOFDM_PHYCounter3 0xda8 //MCS not support
-
-#define rOFDM_ShortCFOAB 0xdac // No setting now
-#define rOFDM_ShortCFOCD 0xdb0
-#define rOFDM_LongCFOAB 0xdb4
-#define rOFDM_LongCFOCD 0xdb8
-#define rOFDM_TailCFOAB 0xdbc
-#define rOFDM_TailCFOCD 0xdc0
-#define rOFDM_PWMeasure1 0xdc4
-#define rOFDM_PWMeasure2 0xdc8
-#define rOFDM_BWReport 0xdcc
-#define rOFDM_AGCReport 0xdd0
-#define rOFDM_RxSNR 0xdd4
-#define rOFDM_RxEVMCSI 0xdd8
-#define rOFDM_SIGReport 0xddc
-
-
-//
-// 8. PageE(0xE00)
-//
-#define rTxAGC_A_Rate18_06 0xe00
-#define rTxAGC_A_Rate54_24 0xe04
-#define rTxAGC_A_CCK1_Mcs32 0xe08
-#define rTxAGC_A_Mcs03_Mcs00 0xe10
-#define rTxAGC_A_Mcs07_Mcs04 0xe14
-#define rTxAGC_A_Mcs11_Mcs08 0xe18
-#define rTxAGC_A_Mcs15_Mcs12 0xe1c
-
-#define rTxAGC_B_Rate18_06 0x830
-#define rTxAGC_B_Rate54_24 0x834
-#define rTxAGC_B_CCK1_55_Mcs32 0x838
-#define rTxAGC_B_Mcs03_Mcs00 0x83c
-#define rTxAGC_B_Mcs07_Mcs04 0x848
-#define rTxAGC_B_Mcs11_Mcs08 0x84c
-#define rTxAGC_B_Mcs15_Mcs12 0x868
-#define rTxAGC_B_CCK11_A_CCK2_11 0x86c
-
-#define rFPGA0_IQK 0xe28
-#define rTx_IQK_Tone_A 0xe30
-#define rRx_IQK_Tone_A 0xe34
-#define rTx_IQK_PI_A 0xe38
-#define rRx_IQK_PI_A 0xe3c
-
-#define rTx_IQK 0xe40
-#define rRx_IQK 0xe44
-#define rIQK_AGC_Pts 0xe48
-#define rIQK_AGC_Rsp 0xe4c
-#define rTx_IQK_Tone_B 0xe50
-#define rRx_IQK_Tone_B 0xe54
-#define rTx_IQK_PI_B 0xe58
-#define rRx_IQK_PI_B 0xe5c
-#define rIQK_AGC_Cont 0xe60
-
-#define rBlue_Tooth 0xe6c
-#define rRx_Wait_CCA 0xe70
-#define rTx_CCK_RFON 0xe74
-#define rTx_CCK_BBON 0xe78
-#define rTx_OFDM_RFON 0xe7c
-#define rTx_OFDM_BBON 0xe80
-#define rTx_To_Rx 0xe84
-#define rTx_To_Tx 0xe88
-#define rRx_CCK 0xe8c
-
-#define rTx_Power_Before_IQK_A 0xe94
-#define rTx_Power_After_IQK_A 0xe9c
-
-#define rRx_Power_Before_IQK_A 0xea0
-#define rRx_Power_Before_IQK_A_2 0xea4
-#define rRx_Power_After_IQK_A 0xea8
-#define rRx_Power_After_IQK_A_2 0xeac
-
-#define rTx_Power_Before_IQK_B 0xeb4
-#define rTx_Power_After_IQK_B 0xebc
-
-#define rRx_Power_Before_IQK_B 0xec0
-#define rRx_Power_Before_IQK_B_2 0xec4
-#define rRx_Power_After_IQK_B 0xec8
-#define rRx_Power_After_IQK_B_2 0xecc
-
-#define rRx_OFDM 0xed0
-#define rRx_Wait_RIFS 0xed4
-#define rRx_TO_Rx 0xed8
-#define rStandby 0xedc
-#define rSleep 0xee0
-#define rPMPD_ANAEN 0xeec
-
-//
-// 7. RF Register 0x00-0x2E (RF 8256)
-// RF-0222D 0x00-3F
-//
-//Zebra1
-#define rZebra1_HSSIEnable 0x0 // Useless now
-#define rZebra1_TRxEnable1 0x1
-#define rZebra1_TRxEnable2 0x2
-#define rZebra1_AGC 0x4
-#define rZebra1_ChargePump 0x5
-#define rZebra1_Channel 0x7 // RF channel switch
-
-//#endif
-#define rZebra1_TxGain 0x8 // Useless now
-#define rZebra1_TxLPF 0x9
-#define rZebra1_RxLPF 0xb
-#define rZebra1_RxHPFCorner 0xc
-
-//Zebra4
-#define rGlobalCtrl 0 // Useless now
-#define rRTL8256_TxLPF 19
-#define rRTL8256_RxLPF 11
-
-//RTL8258
-#define rRTL8258_TxLPF 0x11 // Useless now
-#define rRTL8258_RxLPF 0x13
-#define rRTL8258_RSSILPF 0xa
-
-//
-// RL6052 Register definition
-//
-#define RF_AC 0x00 //
-
-#define RF_IQADJ_G1 0x01 //
-#define RF_IQADJ_G2 0x02 //
-
-#define RF_POW_TRSW 0x05 //
-
-#define RF_GAIN_RX 0x06 //
-#define RF_GAIN_TX 0x07 //
-
-#define RF_TXM_IDAC 0x08 //
-#define RF_IPA_G 0x09 //
-#define RF_TXBIAS_G 0x0A
-#define RF_TXPA_AG 0x0B
-#define RF_IPA_A 0x0C //
-#define RF_TXBIAS_A 0x0D
-#define RF_BS_PA_APSET_G9_G11 0x0E
-#define RF_BS_IQGEN 0x0F //
-
-#define RF_MODE1 0x10 //
-#define RF_MODE2 0x11 //
-
-#define RF_RX_AGC_HP 0x12 //
-#define RF_TX_AGC 0x13 //
-#define RF_BIAS 0x14 //
-#define RF_IPA 0x15 //
-#define RF_TXBIAS 0x16
-#define RF_POW_ABILITY 0x17 //
-#define RF_CHNLBW 0x18 // RF channel and BW switch
-#define RF_TOP 0x19 //
-
-#define RF_RX_G1 0x1A //
-#define RF_RX_G2 0x1B //
-
-#define RF_RX_BB2 0x1C //
-#define RF_RX_BB1 0x1D //
-
-#define RF_RCK1 0x1E //
-#define RF_RCK2 0x1F //
-
-#define RF_TX_G1 0x20 //
-#define RF_TX_G2 0x21 //
-#define RF_TX_G3 0x22 //
-
-#define RF_TX_BB1 0x23 //
-
-//#if HARDWARE_TYPE_IS_RTL8192D == 1
-#define RF_T_METER_92D 0x42 //
-//#else
-#define RF_T_METER_88E 0x42 //
-#define RF_T_METER 0x24 //
-
-//#endif
-
-#define RF_SYN_G1 0x25 // RF TX Power control
-#define RF_SYN_G2 0x26 // RF TX Power control
-#define RF_SYN_G3 0x27 // RF TX Power control
-#define RF_SYN_G4 0x28 // RF TX Power control
-#define RF_SYN_G5 0x29 // RF TX Power control
-#define RF_SYN_G6 0x2A // RF TX Power control
-#define RF_SYN_G7 0x2B // RF TX Power control
-#define RF_SYN_G8 0x2C // RF TX Power control
-
-#define RF_RCK_OS 0x30 // RF TX PA control
-#define RF_TXPA_G1 0x31 // RF TX PA control
-#define RF_TXPA_G2 0x32 // RF TX PA control
-#define RF_TXPA_G3 0x33 // RF TX PA control
-#define RF_TX_BIAS_A 0x35
-#define RF_TX_BIAS_D 0x36
-#define RF_LOBF_9 0x38
-#define RF_RXRF_A3 0x3C //
-#define RF_TRSW 0x3F
-
-#define RF_TXRF_A2 0x41
-#define RF_TXPA_G4 0x46
-#define RF_TXPA_A4 0x4B
-#define RF_0x52 0x52
-#define RF_WE_LUT 0xEF
-
-
-//
-//Bit Mask
-//
-// 1. Page1(0x100)
-#define bBBResetB 0x100 // Useless now?
-#define bGlobalResetB 0x200
-#define bOFDMTxStart 0x4
-#define bCCKTxStart 0x8
-#define bCRC32Debug 0x100
-#define bPMACLoopback 0x10
-#define bTxLSIG 0xffffff
-#define bOFDMTxRate 0xf
-#define bOFDMTxReserved 0x10
-#define bOFDMTxLength 0x1ffe0
-#define bOFDMTxParity 0x20000
-#define bTxHTSIG1 0xffffff
-#define bTxHTMCSRate 0x7f
-#define bTxHTBW 0x80
-#define bTxHTLength 0xffff00
-#define bTxHTSIG2 0xffffff
-#define bTxHTSmoothing 0x1
-#define bTxHTSounding 0x2
-#define bTxHTReserved 0x4
-#define bTxHTAggreation 0x8
-#define bTxHTSTBC 0x30
-#define bTxHTAdvanceCoding 0x40
-#define bTxHTShortGI 0x80
-#define bTxHTNumberHT_LTF 0x300
-#define bTxHTCRC8 0x3fc00
-#define bCounterReset 0x10000
-#define bNumOfOFDMTx 0xffff
-#define bNumOfCCKTx 0xffff0000
-#define bTxIdleInterval 0xffff
-#define bOFDMService 0xffff0000
-#define bTxMACHeader 0xffffffff
-#define bTxDataInit 0xff
-#define bTxHTMode 0x100
-#define bTxDataType 0x30000
-#define bTxRandomSeed 0xffffffff
-#define bCCKTxPreamble 0x1
-#define bCCKTxSFD 0xffff0000
-#define bCCKTxSIG 0xff
-#define bCCKTxService 0xff00
-#define bCCKLengthExt 0x8000
-#define bCCKTxLength 0xffff0000
-#define bCCKTxCRC16 0xffff
-#define bCCKTxStatus 0x1
-#define bOFDMTxStatus 0x2
-
-#define IS_BB_REG_OFFSET_92S(_Offset) ((_Offset >= 0x800) && (_Offset <= 0xfff))
-
-// 2. Page8(0x800)
-#define bRFMOD 0x1 // Reg 0x800 rFPGA0_RFMOD
-#define bJapanMode 0x2
-#define bCCKTxSC 0x30
-#define bCCKEn 0x1000000
-#define bOFDMEn 0x2000000
-
-#define bOFDMRxADCPhase 0x10000 // Useless now
-#define bOFDMTxDACPhase 0x40000
-#define bXATxAGC 0x3f
-
-#define bAntennaSelect 0x0300
-
-#define bXBTxAGC 0xf00 // Reg 80c rFPGA0_TxGainStage
-#define bXCTxAGC 0xf000
-#define bXDTxAGC 0xf0000
-
-#define bPAStart 0xf0000000 // Useless now
-#define bTRStart 0x00f00000
-#define bRFStart 0x0000f000
-#define bBBStart 0x000000f0
-#define bBBCCKStart 0x0000000f
-#define bPAEnd 0xf //Reg0x814
-#define bTREnd 0x0f000000
-#define bRFEnd 0x000f0000
-#define bCCAMask 0x000000f0 //T2R
-#define bR2RCCAMask 0x00000f00
-#define bHSSI_R2TDelay 0xf8000000
-#define bHSSI_T2RDelay 0xf80000
-#define bContTxHSSI 0x400 //chane gain at continue Tx
-#define bIGFromCCK 0x200
-#define bAGCAddress 0x3f
-#define bRxHPTx 0x7000
-#define bRxHPT2R 0x38000
-#define bRxHPCCKIni 0xc0000
-#define bAGCTxCode 0xc00000
-#define bAGCRxCode 0x300000
-
-#define b3WireDataLength 0x800 // Reg 0x820~84f rFPGA0_XA_HSSIParameter1
-#define b3WireAddressLength 0x400
-
-#define b3WireRFPowerDown 0x1 // Useless now
-//#define bHWSISelect 0x8
-#define b5GPAPEPolarity 0x40000000
-#define b2GPAPEPolarity 0x80000000
-#define bRFSW_TxDefaultAnt 0x3
-#define bRFSW_TxOptionAnt 0x30
-#define bRFSW_RxDefaultAnt 0x300
-#define bRFSW_RxOptionAnt 0x3000
-#define bRFSI_3WireData 0x1
-#define bRFSI_3WireClock 0x2
-#define bRFSI_3WireLoad 0x4
-#define bRFSI_3WireRW 0x8
-#define bRFSI_3Wire 0xf
-
-#define bRFSI_RFENV 0x10 // Reg 0x870 rFPGA0_XAB_RFInterfaceSW
-
-#define bRFSI_TRSW 0x20 // Useless now
-#define bRFSI_TRSWB 0x40
-#define bRFSI_ANTSW 0x100
-#define bRFSI_ANTSWB 0x200
-#define bRFSI_PAPE 0x400
-#define bRFSI_PAPE5G 0x800
-#define bBandSelect 0x1
-#define bHTSIG2_GI 0x80
-#define bHTSIG2_Smoothing 0x01
-#define bHTSIG2_Sounding 0x02
-#define bHTSIG2_Aggreaton 0x08
-#define bHTSIG2_STBC 0x30
-#define bHTSIG2_AdvCoding 0x40
-#define bHTSIG2_NumOfHTLTF 0x300
-#define bHTSIG2_CRC8 0x3fc
-#define bHTSIG1_MCS 0x7f
-#define bHTSIG1_BandWidth 0x80
-#define bHTSIG1_HTLength 0xffff
-#define bLSIG_Rate 0xf
-#define bLSIG_Reserved 0x10
-#define bLSIG_Length 0x1fffe
-#define bLSIG_Parity 0x20
-#define bCCKRxPhase 0x4
-
-#define bLSSIReadAddress 0x7f800000 // T65 RF
-
-#define bLSSIReadEdge 0x80000000 //LSSI "Read" edge signal
-
-#define bLSSIReadBackData 0xfffff // T65 RF
-
-#define bLSSIReadOKFlag 0x1000 // Useless now
-#define bCCKSampleRate 0x8 //0: 44MHz, 1:88MHz
-#define bRegulator0Standby 0x1
-#define bRegulatorPLLStandby 0x2
-#define bRegulator1Standby 0x4
-#define bPLLPowerUp 0x8
-#define bDPLLPowerUp 0x10
-#define bDA10PowerUp 0x20
-#define bAD7PowerUp 0x200
-#define bDA6PowerUp 0x2000
-#define bXtalPowerUp 0x4000
-#define b40MDClkPowerUP 0x8000
-#define bDA6DebugMode 0x20000
-#define bDA6Swing 0x380000
-
-#define bADClkPhase 0x4000000 // Reg 0x880 rFPGA0_AnalogParameter1 20/40 CCK support switch 40/80 BB MHZ
-
-#define b80MClkDelay 0x18000000 // Useless
-#define bAFEWatchDogEnable 0x20000000
-
-#define bXtalCap01 0xc0000000 // Reg 0x884 rFPGA0_AnalogParameter2 Crystal cap
-#define bXtalCap23 0x3
-#define bXtalCap92x 0x0f000000
-#define bXtalCap 0x0f000000
-
-#define bIntDifClkEnable 0x400 // Useless
-#define bExtSigClkEnable 0x800
-#define bBandgapMbiasPowerUp 0x10000
-#define bAD11SHGain 0xc0000
-#define bAD11InputRange 0x700000
-#define bAD11OPCurrent 0x3800000
-#define bIPathLoopback 0x4000000
-#define bQPathLoopback 0x8000000
-#define bAFELoopback 0x10000000
-#define bDA10Swing 0x7e0
-#define bDA10Reverse 0x800
-#define bDAClkSource 0x1000
-#define bAD7InputRange 0x6000
-#define bAD7Gain 0x38000
-#define bAD7OutputCMMode 0x40000
-#define bAD7InputCMMode 0x380000
-#define bAD7Current 0xc00000
-#define bRegulatorAdjust 0x7000000
-#define bAD11PowerUpAtTx 0x1
-#define bDA10PSAtTx 0x10
-#define bAD11PowerUpAtRx 0x100
-#define bDA10PSAtRx 0x1000
-#define bCCKRxAGCFormat 0x200
-#define bPSDFFTSamplepPoint 0xc000
-#define bPSDAverageNum 0x3000
-#define bIQPathControl 0xc00
-#define bPSDFreq 0x3ff
-#define bPSDAntennaPath 0x30
-#define bPSDIQSwitch 0x40
-#define bPSDRxTrigger 0x400000
-#define bPSDTxTrigger 0x80000000
-#define bPSDSineToneScale 0x7f000000
-#define bPSDReport 0xffff
-
-// 3. Page9(0x900)
-#define bOFDMTxSC 0x30000000 // Useless
-#define bCCKTxOn 0x1
-#define bOFDMTxOn 0x2
-#define bDebugPage 0xfff //reset debug page and also HWord, LWord
-#define bDebugItem 0xff //reset debug page and LWord
-#define bAntL 0x10
-#define bAntNonHT 0x100
-#define bAntHT1 0x1000
-#define bAntHT2 0x10000
-#define bAntHT1S1 0x100000
-#define bAntNonHTS1 0x1000000
-
-// 4. PageA(0xA00)
-#define bCCKBBMode 0x3 // Useless
-#define bCCKTxPowerSaving 0x80
-#define bCCKRxPowerSaving 0x40
-
-#define bCCKSideBand 0x10 // Reg 0xa00 rCCK0_System 20/40 switch
-
-#define bCCKScramble 0x8 // Useless
-#define bCCKAntDiversity 0x8000
-#define bCCKCarrierRecovery 0x4000
-#define bCCKTxRate 0x3000
-#define bCCKDCCancel 0x0800
-#define bCCKISICancel 0x0400
-#define bCCKMatchFilter 0x0200
-#define bCCKEqualizer 0x0100
-#define bCCKPreambleDetect 0x800000
-#define bCCKFastFalseCCA 0x400000
-#define bCCKChEstStart 0x300000
-#define bCCKCCACount 0x080000
-#define bCCKcs_lim 0x070000
-#define bCCKBistMode 0x80000000
-#define bCCKCCAMask 0x40000000
-#define bCCKTxDACPhase 0x4
-#define bCCKRxADCPhase 0x20000000 //r_rx_clk
-#define bCCKr_cp_mode0 0x0100
-#define bCCKTxDCOffset 0xf0
-#define bCCKRxDCOffset 0xf
-#define bCCKCCAMode 0xc000
-#define bCCKFalseCS_lim 0x3f00
-#define bCCKCS_ratio 0xc00000
-#define bCCKCorgBit_sel 0x300000
-#define bCCKPD_lim 0x0f0000
-#define bCCKNewCCA 0x80000000
-#define bCCKRxHPofIG 0x8000
-#define bCCKRxIG 0x7f00
-#define bCCKLNAPolarity 0x800000
-#define bCCKRx1stGain 0x7f0000
-#define bCCKRFExtend 0x20000000 //CCK Rx Iinital gain polarity
-#define bCCKRxAGCSatLevel 0x1f000000
-#define bCCKRxAGCSatCount 0xe0
-#define bCCKRxRFSettle 0x1f //AGCsamp_dly
-#define bCCKFixedRxAGC 0x8000
-//#define bCCKRxAGCFormat 0x4000 //remove to HSSI register 0x824
-#define bCCKAntennaPolarity 0x2000
-#define bCCKTxFilterType 0x0c00
-#define bCCKRxAGCReportType 0x0300
-#define bCCKRxDAGCEn 0x80000000
-#define bCCKRxDAGCPeriod 0x20000000
-#define bCCKRxDAGCSatLevel 0x1f000000
-#define bCCKTimingRecovery 0x800000
-#define bCCKTxC0 0x3f0000
-#define bCCKTxC1 0x3f000000
-#define bCCKTxC2 0x3f
-#define bCCKTxC3 0x3f00
-#define bCCKTxC4 0x3f0000
-#define bCCKTxC5 0x3f000000
-#define bCCKTxC6 0x3f
-#define bCCKTxC7 0x3f00
-#define bCCKDebugPort 0xff0000
-#define bCCKDACDebug 0x0f000000
-#define bCCKFalseAlarmEnable 0x8000
-#define bCCKFalseAlarmRead 0x4000
-#define bCCKTRSSI 0x7f
-#define bCCKRxAGCReport 0xfe
-#define bCCKRxReport_AntSel 0x80000000
-#define bCCKRxReport_MFOff 0x40000000
-#define bCCKRxRxReport_SQLoss 0x20000000
-#define bCCKRxReport_Pktloss 0x10000000
-#define bCCKRxReport_Lockedbit 0x08000000
-#define bCCKRxReport_RateError 0x04000000
-#define bCCKRxReport_RxRate 0x03000000
-#define bCCKRxFACounterLower 0xff
-#define bCCKRxFACounterUpper 0xff000000
-#define bCCKRxHPAGCStart 0xe000
-#define bCCKRxHPAGCFinal 0x1c00
-#define bCCKRxFalseAlarmEnable 0x8000
-#define bCCKFACounterFreeze 0x4000
-#define bCCKTxPathSel 0x10000000
-#define bCCKDefaultRxPath 0xc000000
-#define bCCKOptionRxPath 0x3000000
-
-// 5. PageC(0xC00)
-#define bNumOfSTF 0x3 // Useless
-#define bShift_L 0xc0
-#define bGI_TH 0xc
-#define bRxPathA 0x1
-#define bRxPathB 0x2
-#define bRxPathC 0x4
-#define bRxPathD 0x8
-#define bTxPathA 0x1
-#define bTxPathB 0x2
-#define bTxPathC 0x4
-#define bTxPathD 0x8
-#define bTRSSIFreq 0x200
-#define bADCBackoff 0x3000
-#define bDFIRBackoff 0xc000
-#define bTRSSILatchPhase 0x10000
-#define bRxIDCOffset 0xff
-#define bRxQDCOffset 0xff00
-#define bRxDFIRMode 0x1800000
-#define bRxDCNFType 0xe000000
-#define bRXIQImb_A 0x3ff
-#define bRXIQImb_B 0xfc00
-#define bRXIQImb_C 0x3f0000
-#define bRXIQImb_D 0xffc00000
-#define bDC_dc_Notch 0x60000
-#define bRxNBINotch 0x1f000000
-#define bPD_TH 0xf
-#define bPD_TH_Opt2 0xc000
-#define bPWED_TH 0x700
-#define bIfMF_Win_L 0x800
-#define bPD_Option 0x1000
-#define bMF_Win_L 0xe000
-#define bBW_Search_L 0x30000
-#define bwin_enh_L 0xc0000
-#define bBW_TH 0x700000
-#define bED_TH2 0x3800000
-#define bBW_option 0x4000000
-#define bRatio_TH 0x18000000
-#define bWindow_L 0xe0000000
-#define bSBD_Option 0x1
-#define bFrame_TH 0x1c
-#define bFS_Option 0x60
-#define bDC_Slope_check 0x80
-#define bFGuard_Counter_DC_L 0xe00
-#define bFrame_Weight_Short 0x7000
-#define bSub_Tune 0xe00000
-#define bFrame_DC_Length 0xe000000
-#define bSBD_start_offset 0x30000000
-#define bFrame_TH_2 0x7
-#define bFrame_GI2_TH 0x38
-#define bGI2_Sync_en 0x40
-#define bSarch_Short_Early 0x300
-#define bSarch_Short_Late 0xc00
-#define bSarch_GI2_Late 0x70000
-#define bCFOAntSum 0x1
-#define bCFOAcc 0x2
-#define bCFOStartOffset 0xc
-#define bCFOLookBack 0x70
-#define bCFOSumWeight 0x80
-#define bDAGCEnable 0x10000
-#define bTXIQImb_A 0x3ff
-#define bTXIQImb_B 0xfc00
-#define bTXIQImb_C 0x3f0000
-#define bTXIQImb_D 0xffc00000
-#define bTxIDCOffset 0xff
-#define bTxQDCOffset 0xff00
-#define bTxDFIRMode 0x10000
-#define bTxPesudoNoiseOn 0x4000000
-#define bTxPesudoNoise_A 0xff
-#define bTxPesudoNoise_B 0xff00
-#define bTxPesudoNoise_C 0xff0000
-#define bTxPesudoNoise_D 0xff000000
-#define bCCADropOption 0x20000
-#define bCCADropThres 0xfff00000
-#define bEDCCA_H 0xf
-#define bEDCCA_L 0xf0
-#define bLambda_ED 0x300
-#define bRxInitialGain 0x7f
-#define bRxAntDivEn 0x80
-#define bRxAGCAddressForLNA 0x7f00
-#define bRxHighPowerFlow 0x8000
-#define bRxAGCFreezeThres 0xc0000
-#define bRxFreezeStep_AGC1 0x300000
-#define bRxFreezeStep_AGC2 0xc00000
-#define bRxFreezeStep_AGC3 0x3000000
-#define bRxFreezeStep_AGC0 0xc000000
-#define bRxRssi_Cmp_En 0x10000000
-#define bRxQuickAGCEn 0x20000000
-#define bRxAGCFreezeThresMode 0x40000000
-#define bRxOverFlowCheckType 0x80000000
-#define bRxAGCShift 0x7f
-#define bTRSW_Tri_Only 0x80
-#define bPowerThres 0x300
-#define bRxAGCEn 0x1
-#define bRxAGCTogetherEn 0x2
-#define bRxAGCMin 0x4
-#define bRxHP_Ini 0x7
-#define bRxHP_TRLNA 0x70
-#define bRxHP_RSSI 0x700
-#define bRxHP_BBP1 0x7000
-#define bRxHP_BBP2 0x70000
-#define bRxHP_BBP3 0x700000
-#define bRSSI_H 0x7f0000 //the threshold for high power
-#define bRSSI_Gen 0x7f000000 //the threshold for ant diversity
-#define bRxSettle_TRSW 0x7
-#define bRxSettle_LNA 0x38
-#define bRxSettle_RSSI 0x1c0
-#define bRxSettle_BBP 0xe00
-#define bRxSettle_RxHP 0x7000
-#define bRxSettle_AntSW_RSSI 0x38000
-#define bRxSettle_AntSW 0xc0000
-#define bRxProcessTime_DAGC 0x300000
-#define bRxSettle_HSSI 0x400000
-#define bRxProcessTime_BBPPW 0x800000
-#define bRxAntennaPowerShift 0x3000000
-#define bRSSITableSelect 0xc000000
-#define bRxHP_Final 0x7000000
-#define bRxHTSettle_BBP 0x7
-#define bRxHTSettle_HSSI 0x8
-#define bRxHTSettle_RxHP 0x70
-#define bRxHTSettle_BBPPW 0x80
-#define bRxHTSettle_Idle 0x300
-#define bRxHTSettle_Reserved 0x1c00
-#define bRxHTRxHPEn 0x8000
-#define bRxHTAGCFreezeThres 0x30000
-#define bRxHTAGCTogetherEn 0x40000
-#define bRxHTAGCMin 0x80000
-#define bRxHTAGCEn 0x100000
-#define bRxHTDAGCEn 0x200000
-#define bRxHTRxHP_BBP 0x1c00000
-#define bRxHTRxHP_Final 0xe0000000
-#define bRxPWRatioTH 0x3
-#define bRxPWRatioEn 0x4
-#define bRxMFHold 0x3800
-#define bRxPD_Delay_TH1 0x38
-#define bRxPD_Delay_TH2 0x1c0
-#define bRxPD_DC_COUNT_MAX 0x600
-//#define bRxMF_Hold 0x3800
-#define bRxPD_Delay_TH 0x8000
-#define bRxProcess_Delay 0xf0000
-#define bRxSearchrange_GI2_Early 0x700000
-#define bRxFrame_Guard_Counter_L 0x3800000
-#define bRxSGI_Guard_L 0xc000000
-#define bRxSGI_Search_L 0x30000000
-#define bRxSGI_TH 0xc0000000
-#define bDFSCnt0 0xff
-#define bDFSCnt1 0xff00
-#define bDFSFlag 0xf0000
-#define bMFWeightSum 0x300000
-#define bMinIdxTH 0x7f000000
-#define bDAFormat 0x40000
-#define bTxChEmuEnable 0x01000000
-#define bTRSWIsolation_A 0x7f
-#define bTRSWIsolation_B 0x7f00
-#define bTRSWIsolation_C 0x7f0000
-#define bTRSWIsolation_D 0x7f000000
-#define bExtLNAGain 0x7c00
-
-// 6. PageE(0xE00)
-#define bSTBCEn 0x4 // Useless
-#define bAntennaMapping 0x10
-#define bNss 0x20
-#define bCFOAntSumD 0x200
-#define bPHYCounterReset 0x8000000
-#define bCFOReportGet 0x4000000
-#define bOFDMContinueTx 0x10000000
-#define bOFDMSingleCarrier 0x20000000
-#define bOFDMSingleTone 0x40000000
-//#define bRxPath1 0x01
-//#define bRxPath2 0x02
-//#define bRxPath3 0x04
-//#define bRxPath4 0x08
-//#define bTxPath1 0x10
-//#define bTxPath2 0x20
-#define bHTDetect 0x100
-#define bCFOEn 0x10000
-#define bCFOValue 0xfff00000
-#define bSigTone_Re 0x3f
-#define bSigTone_Im 0x7f00
-#define bCounter_CCA 0xffff
-#define bCounter_ParityFail 0xffff0000
-#define bCounter_RateIllegal 0xffff
-#define bCounter_CRC8Fail 0xffff0000
-#define bCounter_MCSNoSupport 0xffff
-#define bCounter_FastSync 0xffff
-#define bShortCFO 0xfff
-#define bShortCFOTLength 12 //total
-#define bShortCFOFLength 11 //fraction
-#define bLongCFO 0x7ff
-#define bLongCFOTLength 11
-#define bLongCFOFLength 11
-#define bTailCFO 0x1fff
-#define bTailCFOTLength 13
-#define bTailCFOFLength 12
-#define bmax_en_pwdB 0xffff
-#define bCC_power_dB 0xffff0000
-#define bnoise_pwdB 0xffff
-#define bPowerMeasTLength 10
-#define bPowerMeasFLength 3
-#define bRx_HT_BW 0x1
-#define bRxSC 0x6
-#define bRx_HT 0x8
-#define bNB_intf_det_on 0x1
-#define bIntf_win_len_cfg 0x30
-#define bNB_Intf_TH_cfg 0x1c0
-#define bRFGain 0x3f
-#define bTableSel 0x40
-#define bTRSW 0x80
-#define bRxSNR_A 0xff
-#define bRxSNR_B 0xff00
-#define bRxSNR_C 0xff0000
-#define bRxSNR_D 0xff000000
-#define bSNREVMTLength 8
-#define bSNREVMFLength 1
-#define bCSI1st 0xff
-#define bCSI2nd 0xff00
-#define bRxEVM1st 0xff0000
-#define bRxEVM2nd 0xff000000
-#define bSIGEVM 0xff
-#define bPWDB 0xff00
-#define bSGIEN 0x10000
-
-#define bSFactorQAM1 0xf // Useless
-#define bSFactorQAM2 0xf0
-#define bSFactorQAM3 0xf00
-#define bSFactorQAM4 0xf000
-#define bSFactorQAM5 0xf0000
-#define bSFactorQAM6 0xf0000
-#define bSFactorQAM7 0xf00000
-#define bSFactorQAM8 0xf000000
-#define bSFactorQAM9 0xf0000000
-#define bCSIScheme 0x100000
-
-#define bNoiseLvlTopSet 0x3 // Useless
-#define bChSmooth 0x4
-#define bChSmoothCfg1 0x38
-#define bChSmoothCfg2 0x1c0
-#define bChSmoothCfg3 0xe00
-#define bChSmoothCfg4 0x7000
-#define bMRCMode 0x800000
-#define bTHEVMCfg 0x7000000
-
-#define bLoopFitType 0x1 // Useless
-#define bUpdCFO 0x40
-#define bUpdCFOOffData 0x80
-#define bAdvUpdCFO 0x100
-#define bAdvTimeCtrl 0x800
-#define bUpdClko 0x1000
-#define bFC 0x6000
-#define bTrackingMode 0x8000
-#define bPhCmpEnable 0x10000
-#define bUpdClkoLTF 0x20000
-#define bComChCFO 0x40000
-#define bCSIEstiMode 0x80000
-#define bAdvUpdEqz 0x100000
-#define bUChCfg 0x7000000
-#define bUpdEqz 0x8000000
-
-//Rx Pseduo noise
-#define bRxPesudoNoiseOn 0x20000000 // Useless
-#define bRxPesudoNoise_A 0xff
-#define bRxPesudoNoise_B 0xff00
-#define bRxPesudoNoise_C 0xff0000
-#define bRxPesudoNoise_D 0xff000000
-#define bPesudoNoiseState_A 0xffff
-#define bPesudoNoiseState_B 0xffff0000
-#define bPesudoNoiseState_C 0xffff
-#define bPesudoNoiseState_D 0xffff0000
-
-//7. RF Register
-//Zebra1
-#define bZebra1_HSSIEnable 0x8 // Useless
-#define bZebra1_TRxControl 0xc00
-#define bZebra1_TRxGainSetting 0x07f
-#define bZebra1_RxCorner 0xc00
-#define bZebra1_TxChargePump 0x38
-#define bZebra1_RxChargePump 0x7
-#define bZebra1_ChannelNum 0xf80
-#define bZebra1_TxLPFBW 0x400
-#define bZebra1_RxLPFBW 0x600
-
-//Zebra4
-#define bRTL8256RegModeCtrl1 0x100 // Useless
-#define bRTL8256RegModeCtrl0 0x40
-#define bRTL8256_TxLPFBW 0x18
-#define bRTL8256_RxLPFBW 0x600
-
-//RTL8258
-#define bRTL8258_TxLPFBW 0xc // Useless
-#define bRTL8258_RxLPFBW 0xc00
-#define bRTL8258_RSSILPFBW 0xc0
-
-
-//
-// Other Definition
-//
-
-//byte endable for sb_write
-#define bByte0 0x1 // Useless
-#define bByte1 0x2
-#define bByte2 0x4
-#define bByte3 0x8
-#define bWord0 0x3
-#define bWord1 0xc
-#define bDWord 0xf
-
-//for PutRegsetting & GetRegSetting BitMask
-#define bMaskByte0 0xff // Reg 0xc50 rOFDM0_XAAGCCore~0xC6f
-#define bMaskByte1 0xff00
-#define bMaskByte2 0xff0000
-#define bMaskByte3 0xff000000
-#define bMaskHWord 0xffff0000
-#define bMaskLWord 0x0000ffff
-#define bMaskDWord 0xffffffff
-#define bMask12Bits 0xfff
-#define bMaskH4Bits 0xf0000000
-#define bMaskOFDM_D 0xffc00000
-#define bMaskCCK 0x3f3f3f3f
-
-//for PutRFRegsetting & GetRFRegSetting BitMask
-//#define bMask12Bits 0xfffff // RF Reg mask bits
-//#define bMask20Bits 0xfffff // RF Reg mask bits T65 RF
-#define bRFRegOffsetMask 0xfffff
-
-#define bEnable 0x1 // Useless
-#define bDisable 0x0
-
-#define LeftAntenna 0x0 // Useless
-#define RightAntenna 0x1
-
-#define tCheckTxStatus 500 //500ms // Useless
-#define tUpdateRxCounter 100 //100ms
-
-#define rateCCK 0 // Useless
-#define rateOFDM 1
-#define rateHT 2
-
-//define Register-End
-#define bPMAC_End 0x1ff // Useless
-#define bFPGAPHY0_End 0x8ff
-#define bFPGAPHY1_End 0x9ff
-#define bCCKPHY0_End 0xaff
-#define bOFDMPHY0_End 0xcff
-#define bOFDMPHY1_End 0xdff
-
-//define max debug item in each debug page
-//#define bMaxItem_FPGA_PHY0 0x9
-//#define bMaxItem_FPGA_PHY1 0x3
-//#define bMaxItem_PHY_11B 0x16
-//#define bMaxItem_OFDM_PHY0 0x29
-//#define bMaxItem_OFDM_PHY1 0x0
-
-#define bPMACControl 0x0 // Useless
-#define bWMACControl 0x1
-#define bWNICControl 0x2
-
-#define PathA 0x0 // Useless
-#define PathB 0x1
-#define PathC 0x2
-#define PathD 0x3
-
-/*--------------------------Define Parameters-------------------------------*/
-
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __INC_HAL8188EPHYREG_H__
+#define __INC_HAL8188EPHYREG_H__
+/*--------------------------Define Parameters-------------------------------*/
+//
+// BB-PHY register PMAC 0x100 PHY 0x800 - 0xEFF
+// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF
+// 2. 0x800/0x900/0xA00/0xC00/0xD00/0xE00
+// 3. RF register 0x00-2E
+// 4. Bit Mask for BB/RF register
+// 5. Other defintion for BB/RF R/W
+//
+
+
+//
+// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF
+// 1. Page1(0x100)
+//
+#define rPMAC_Reset 0x100
+#define rPMAC_TxStart 0x104
+#define rPMAC_TxLegacySIG 0x108
+#define rPMAC_TxHTSIG1 0x10c
+#define rPMAC_TxHTSIG2 0x110
+#define rPMAC_PHYDebug 0x114
+#define rPMAC_TxPacketNum 0x118
+#define rPMAC_TxIdle 0x11c
+#define rPMAC_TxMACHeader0 0x120
+#define rPMAC_TxMACHeader1 0x124
+#define rPMAC_TxMACHeader2 0x128
+#define rPMAC_TxMACHeader3 0x12c
+#define rPMAC_TxMACHeader4 0x130
+#define rPMAC_TxMACHeader5 0x134
+#define rPMAC_TxDataType 0x138
+#define rPMAC_TxRandomSeed 0x13c
+#define rPMAC_CCKPLCPPreamble 0x140
+#define rPMAC_CCKPLCPHeader 0x144
+#define rPMAC_CCKCRC16 0x148
+#define rPMAC_OFDMRxCRC32OK 0x170
+#define rPMAC_OFDMRxCRC32Er 0x174
+#define rPMAC_OFDMRxParityEr 0x178
+#define rPMAC_OFDMRxCRC8Er 0x17c
+#define rPMAC_CCKCRxRC16Er 0x180
+#define rPMAC_CCKCRxRC32Er 0x184
+#define rPMAC_CCKCRxRC32OK 0x188
+#define rPMAC_TxStatus 0x18c
+
+//
+// 2. Page2(0x200)
+//
+// The following two definition are only used for USB interface.
+#define RF_BB_CMD_ADDR 0x02c0 // RF/BB read/write command address.
+#define RF_BB_CMD_DATA 0x02c4 // RF/BB read/write command data.
+
+//
+// 3. Page8(0x800)
+//
+#define rFPGA0_RFMOD 0x800 //RF mode & CCK TxSC // RF BW Setting??
+
+#define rFPGA0_TxInfo 0x804 // Status report??
+#define rFPGA0_PSDFunction 0x808
+
+#define rFPGA0_TxGainStage 0x80c // Set TX PWR init gain?
+
+#define rFPGA0_RFTiming1 0x810 // Useless now
+#define rFPGA0_RFTiming2 0x814
+
+#define rFPGA0_XA_HSSIParameter1 0x820 // RF 3 wire register
+#define rFPGA0_XA_HSSIParameter2 0x824
+#define rFPGA0_XB_HSSIParameter1 0x828
+#define rFPGA0_XB_HSSIParameter2 0x82c
+
+#define rFPGA0_XA_LSSIParameter 0x840
+#define rFPGA0_XB_LSSIParameter 0x844
+
+#define rFPGA0_RFWakeUpParameter 0x850 // Useless now
+#define rFPGA0_RFSleepUpParameter 0x854
+
+#define rFPGA0_XAB_SwitchControl 0x858 // RF Channel switch
+#define rFPGA0_XCD_SwitchControl 0x85c
+
+#define rFPGA0_XA_RFInterfaceOE 0x860 // RF Channel switch
+#define rFPGA0_XB_RFInterfaceOE 0x864
+
+#define rFPGA0_XAB_RFInterfaceSW 0x870 // RF Interface Software Control
+#define rFPGA0_XCD_RFInterfaceSW 0x874
+
+#define rFPGA0_XAB_RFParameter 0x878 // RF Parameter
+#define rFPGA0_XCD_RFParameter 0x87c
+
+#define rFPGA0_AnalogParameter1 0x880 // Crystal cap setting RF-R/W protection for parameter4??
+#define rFPGA0_AnalogParameter2 0x884
+#define rFPGA0_AnalogParameter3 0x888
+#define rFPGA0_AdDaClockEn 0x888 // enable ad/da clock1 for dual-phy
+#define rFPGA0_AnalogParameter4 0x88c
+
+#define rFPGA0_XA_LSSIReadBack 0x8a0 // Tranceiver LSSI Readback
+#define rFPGA0_XB_LSSIReadBack 0x8a4
+#define rFPGA0_XC_LSSIReadBack 0x8a8
+#define rFPGA0_XD_LSSIReadBack 0x8ac
+
+#define rFPGA0_PSDReport 0x8b4 // Useless now
+#define TransceiverA_HSPI_Readback 0x8b8 // Transceiver A HSPI Readback
+#define TransceiverB_HSPI_Readback 0x8bc // Transceiver B HSPI Readback
+#define rFPGA0_XAB_RFInterfaceRB 0x8e0 // Useless now // RF Interface Readback Value
+#define rFPGA0_XCD_RFInterfaceRB 0x8e4 // Useless now
+
+//
+// 4. Page9(0x900)
+//
+#define rFPGA1_RFMOD 0x900 //RF mode & OFDM TxSC // RF BW Setting??
+
+#define rFPGA1_TxBlock 0x904 // Useless now
+#define rFPGA1_DebugSelect 0x908 // Useless now
+#define rFPGA1_TxInfo 0x90c // Useless now // Status report??
+
+//
+// 5. PageA(0xA00)
+//
+// Set Control channel to upper or lower. These settings are required only for 40MHz
+#define rCCK0_System 0xa00
+
+#define rCCK0_AFESetting 0xa04 // Disable init gain now // Select RX path by RSSI
+#define rCCK0_CCA 0xa08 // Disable init gain now // Init gain
+
+#define rCCK0_RxAGC1 0xa0c //AGC default value, saturation level // Antenna Diversity, RX AGC, LNA Threshold, RX LNA Threshold useless now. Not the same as 90 series
+#define rCCK0_RxAGC2 0xa10 //AGC & DAGC
+
+#define rCCK0_RxHP 0xa14
+
+#define rCCK0_DSPParameter1 0xa18 //Timing recovery & Channel estimation threshold
+#define rCCK0_DSPParameter2 0xa1c //SQ threshold
+
+#define rCCK0_TxFilter1 0xa20
+#define rCCK0_TxFilter2 0xa24
+#define rCCK0_DebugPort 0xa28 //debug port and Tx filter3
+#define rCCK0_FalseAlarmReport 0xa2c //0xa2d useless now 0xa30-a4f channel report
+#define rCCK0_TRSSIReport 0xa50
+#define rCCK0_RxReport 0xa54 //0xa57
+#define rCCK0_FACounterLower 0xa5c //0xa5b
+#define rCCK0_FACounterUpper 0xa58 //0xa5c
+
+//
+// PageB(0xB00)
+//
+#define rPdp_AntA 0xb00
+#define rPdp_AntA_4 0xb04
+#define rConfig_Pmpd_AntA 0xb28
+#define rConfig_AntA 0xb68
+#define rConfig_AntB 0xb6c
+#define rPdp_AntB 0xb70
+#define rPdp_AntB_4 0xb74
+#define rConfig_Pmpd_AntB 0xb98
+#define rAPK 0xbd8
+
+
+
+//
+// 6. PageC(0xC00)
+//
+#define rOFDM0_LSTF 0xc00
+
+#define rOFDM0_TRxPathEnable 0xc04
+#define rOFDM0_TRMuxPar 0xc08
+#define rOFDM0_TRSWIsolation 0xc0c
+
+#define rOFDM0_XARxAFE 0xc10 //RxIQ DC offset, Rx digital filter, DC notch filter
+#define rOFDM0_XARxIQImbalance 0xc14 //RxIQ imblance matrix
+#define rOFDM0_XBRxAFE 0xc18
+#define rOFDM0_XBRxIQImbalance 0xc1c
+#define rOFDM0_XCRxAFE 0xc20
+#define rOFDM0_XCRxIQImbalance 0xc24
+#define rOFDM0_XDRxAFE 0xc28
+#define rOFDM0_XDRxIQImbalance 0xc2c
+
+#define rOFDM0_RxDetector1 0xc30 //PD,BW & SBD // DM tune init gain
+#define rOFDM0_RxDetector2 0xc34 //SBD & Fame Sync.
+#define rOFDM0_RxDetector3 0xc38 //Frame Sync.
+#define rOFDM0_RxDetector4 0xc3c //PD, SBD, Frame Sync & Short-GI
+
+#define rOFDM0_RxDSP 0xc40 //Rx Sync Path
+#define rOFDM0_CFOandDAGC 0xc44 //CFO & DAGC
+#define rOFDM0_CCADropThreshold 0xc48 //CCA Drop threshold
+#define rOFDM0_ECCAThreshold 0xc4c // energy CCA
+
+#define rOFDM0_XAAGCCore1 0xc50 // DIG
+#define rOFDM0_XAAGCCore2 0xc54
+#define rOFDM0_XBAGCCore1 0xc58
+#define rOFDM0_XBAGCCore2 0xc5c
+#define rOFDM0_XCAGCCore1 0xc60
+#define rOFDM0_XCAGCCore2 0xc64
+#define rOFDM0_XDAGCCore1 0xc68
+#define rOFDM0_XDAGCCore2 0xc6c
+
+#define rOFDM0_AGCParameter1 0xc70
+#define rOFDM0_AGCParameter2 0xc74
+#define rOFDM0_AGCRSSITable 0xc78
+#define rOFDM0_HTSTFAGC 0xc7c
+
+#define rOFDM0_XATxIQImbalance 0xc80 // TX PWR TRACK and DIG
+#define rOFDM0_XATxAFE 0xc84
+#define rOFDM0_XBTxIQImbalance 0xc88
+#define rOFDM0_XBTxAFE 0xc8c
+#define rOFDM0_XCTxIQImbalance 0xc90
+#define rOFDM0_XCTxAFE 0xc94
+#define rOFDM0_XDTxIQImbalance 0xc98
+#define rOFDM0_XDTxAFE 0xc9c
+
+#define rOFDM0_RxIQExtAnta 0xca0
+#define rOFDM0_TxCoeff1 0xca4
+#define rOFDM0_TxCoeff2 0xca8
+#define rOFDM0_TxCoeff3 0xcac
+#define rOFDM0_TxCoeff4 0xcb0
+#define rOFDM0_TxCoeff5 0xcb4
+#define rOFDM0_TxCoeff6 0xcb8
+#define rOFDM0_RxHPParameter 0xce0
+#define rOFDM0_TxPseudoNoiseWgt 0xce4
+#define rOFDM0_FrameSync 0xcf0
+#define rOFDM0_DFSReport 0xcf4
+
+
+//
+// 7. PageD(0xD00)
+//
+#define rOFDM1_LSTF 0xd00
+#define rOFDM1_TRxPathEnable 0xd04
+
+#define rOFDM1_CFO 0xd08 // No setting now
+#define rOFDM1_CSI1 0xd10
+#define rOFDM1_SBD 0xd14
+#define rOFDM1_CSI2 0xd18
+#define rOFDM1_CFOTracking 0xd2c
+#define rOFDM1_TRxMesaure1 0xd34
+#define rOFDM1_IntfDet 0xd3c
+#define rOFDM1_PseudoNoiseStateAB 0xd50
+#define rOFDM1_PseudoNoiseStateCD 0xd54
+#define rOFDM1_RxPseudoNoiseWgt 0xd58
+
+#define rOFDM_PHYCounter1 0xda0 //cca, parity fail
+#define rOFDM_PHYCounter2 0xda4 //rate illegal, crc8 fail
+#define rOFDM_PHYCounter3 0xda8 //MCS not support
+
+#define rOFDM_ShortCFOAB 0xdac // No setting now
+#define rOFDM_ShortCFOCD 0xdb0
+#define rOFDM_LongCFOAB 0xdb4
+#define rOFDM_LongCFOCD 0xdb8
+#define rOFDM_TailCFOAB 0xdbc
+#define rOFDM_TailCFOCD 0xdc0
+#define rOFDM_PWMeasure1 0xdc4
+#define rOFDM_PWMeasure2 0xdc8
+#define rOFDM_BWReport 0xdcc
+#define rOFDM_AGCReport 0xdd0
+#define rOFDM_RxSNR 0xdd4
+#define rOFDM_RxEVMCSI 0xdd8
+#define rOFDM_SIGReport 0xddc
+
+
+//
+// 8. PageE(0xE00)
+//
+#define rTxAGC_A_Rate18_06 0xe00
+#define rTxAGC_A_Rate54_24 0xe04
+#define rTxAGC_A_CCK1_Mcs32 0xe08
+#define rTxAGC_A_Mcs03_Mcs00 0xe10
+#define rTxAGC_A_Mcs07_Mcs04 0xe14
+#define rTxAGC_A_Mcs11_Mcs08 0xe18
+#define rTxAGC_A_Mcs15_Mcs12 0xe1c
+
+#define rTxAGC_B_Rate18_06 0x830
+#define rTxAGC_B_Rate54_24 0x834
+#define rTxAGC_B_CCK1_55_Mcs32 0x838
+#define rTxAGC_B_Mcs03_Mcs00 0x83c
+#define rTxAGC_B_Mcs07_Mcs04 0x848
+#define rTxAGC_B_Mcs11_Mcs08 0x84c
+#define rTxAGC_B_Mcs15_Mcs12 0x868
+#define rTxAGC_B_CCK11_A_CCK2_11 0x86c
+
+#define rFPGA0_IQK 0xe28
+#define rTx_IQK_Tone_A 0xe30
+#define rRx_IQK_Tone_A 0xe34
+#define rTx_IQK_PI_A 0xe38
+#define rRx_IQK_PI_A 0xe3c
+
+#define rTx_IQK 0xe40
+#define rRx_IQK 0xe44
+#define rIQK_AGC_Pts 0xe48
+#define rIQK_AGC_Rsp 0xe4c
+#define rTx_IQK_Tone_B 0xe50
+#define rRx_IQK_Tone_B 0xe54
+#define rTx_IQK_PI_B 0xe58
+#define rRx_IQK_PI_B 0xe5c
+#define rIQK_AGC_Cont 0xe60
+
+#define rBlue_Tooth 0xe6c
+#define rRx_Wait_CCA 0xe70
+#define rTx_CCK_RFON 0xe74
+#define rTx_CCK_BBON 0xe78
+#define rTx_OFDM_RFON 0xe7c
+#define rTx_OFDM_BBON 0xe80
+#define rTx_To_Rx 0xe84
+#define rTx_To_Tx 0xe88
+#define rRx_CCK 0xe8c
+
+#define rTx_Power_Before_IQK_A 0xe94
+#define rTx_Power_After_IQK_A 0xe9c
+
+#define rRx_Power_Before_IQK_A 0xea0
+#define rRx_Power_Before_IQK_A_2 0xea4
+#define rRx_Power_After_IQK_A 0xea8
+#define rRx_Power_After_IQK_A_2 0xeac
+
+#define rTx_Power_Before_IQK_B 0xeb4
+#define rTx_Power_After_IQK_B 0xebc
+
+#define rRx_Power_Before_IQK_B 0xec0
+#define rRx_Power_Before_IQK_B_2 0xec4
+#define rRx_Power_After_IQK_B 0xec8
+#define rRx_Power_After_IQK_B_2 0xecc
+
+#define rRx_OFDM 0xed0
+#define rRx_Wait_RIFS 0xed4
+#define rRx_TO_Rx 0xed8
+#define rStandby 0xedc
+#define rSleep 0xee0
+#define rPMPD_ANAEN 0xeec
+
+//
+// 7. RF Register 0x00-0x2E (RF 8256)
+// RF-0222D 0x00-3F
+//
+//Zebra1
+#define rZebra1_HSSIEnable 0x0 // Useless now
+#define rZebra1_TRxEnable1 0x1
+#define rZebra1_TRxEnable2 0x2
+#define rZebra1_AGC 0x4
+#define rZebra1_ChargePump 0x5
+#define rZebra1_Channel 0x7 // RF channel switch
+
+//#endif
+#define rZebra1_TxGain 0x8 // Useless now
+#define rZebra1_TxLPF 0x9
+#define rZebra1_RxLPF 0xb
+#define rZebra1_RxHPFCorner 0xc
+
+//Zebra4
+#define rGlobalCtrl 0 // Useless now
+#define rRTL8256_TxLPF 19
+#define rRTL8256_RxLPF 11
+
+//RTL8258
+#define rRTL8258_TxLPF 0x11 // Useless now
+#define rRTL8258_RxLPF 0x13
+#define rRTL8258_RSSILPF 0xa
+
+//
+// RL6052 Register definition
+//
+#define RF_AC 0x00 //
+
+#define RF_IQADJ_G1 0x01 //
+#define RF_IQADJ_G2 0x02 //
+
+#define RF_POW_TRSW 0x05 //
+
+#define RF_GAIN_RX 0x06 //
+#define RF_GAIN_TX 0x07 //
+
+#define RF_TXM_IDAC 0x08 //
+#define RF_IPA_G 0x09 //
+#define RF_TXBIAS_G 0x0A
+#define RF_TXPA_AG 0x0B
+#define RF_IPA_A 0x0C //
+#define RF_TXBIAS_A 0x0D
+#define RF_BS_PA_APSET_G9_G11 0x0E
+#define RF_BS_IQGEN 0x0F //
+
+#define RF_MODE1 0x10 //
+#define RF_MODE2 0x11 //
+
+#define RF_RX_AGC_HP 0x12 //
+#define RF_TX_AGC 0x13 //
+#define RF_BIAS 0x14 //
+#define RF_IPA 0x15 //
+#define RF_TXBIAS 0x16
+#define RF_POW_ABILITY 0x17 //
+#define RF_CHNLBW 0x18 // RF channel and BW switch
+#define RF_TOP 0x19 //
+
+#define RF_RX_G1 0x1A //
+#define RF_RX_G2 0x1B //
+
+#define RF_RX_BB2 0x1C //
+#define RF_RX_BB1 0x1D //
+
+#define RF_RCK1 0x1E //
+#define RF_RCK2 0x1F //
+
+#define RF_TX_G1 0x20 //
+#define RF_TX_G2 0x21 //
+#define RF_TX_G3 0x22 //
+
+#define RF_TX_BB1 0x23 //
+
+//#if HARDWARE_TYPE_IS_RTL8192D == 1
+#define RF_T_METER_92D 0x42 //
+//#else
+#define RF_T_METER_88E 0x42 //
+#define RF_T_METER 0x24 //
+
+//#endif
+
+#define RF_SYN_G1 0x25 // RF TX Power control
+#define RF_SYN_G2 0x26 // RF TX Power control
+#define RF_SYN_G3 0x27 // RF TX Power control
+#define RF_SYN_G4 0x28 // RF TX Power control
+#define RF_SYN_G5 0x29 // RF TX Power control
+#define RF_SYN_G6 0x2A // RF TX Power control
+#define RF_SYN_G7 0x2B // RF TX Power control
+#define RF_SYN_G8 0x2C // RF TX Power control
+
+#define RF_RCK_OS 0x30 // RF TX PA control
+#define RF_TXPA_G1 0x31 // RF TX PA control
+#define RF_TXPA_G2 0x32 // RF TX PA control
+#define RF_TXPA_G3 0x33 // RF TX PA control
+#define RF_TX_BIAS_A 0x35
+#define RF_TX_BIAS_D 0x36
+#define RF_LOBF_9 0x38
+#define RF_RXRF_A3 0x3C //
+#define RF_TRSW 0x3F
+
+#define RF_TXRF_A2 0x41
+#define RF_TXPA_G4 0x46
+#define RF_TXPA_A4 0x4B
+#define RF_0x52 0x52
+#define RF_WE_LUT 0xEF
+
+
+//
+//Bit Mask
+//
+// 1. Page1(0x100)
+#define bBBResetB 0x100 // Useless now?
+#define bGlobalResetB 0x200
+#define bOFDMTxStart 0x4
+#define bCCKTxStart 0x8
+#define bCRC32Debug 0x100
+#define bPMACLoopback 0x10
+#define bTxLSIG 0xffffff
+#define bOFDMTxRate 0xf
+#define bOFDMTxReserved 0x10
+#define bOFDMTxLength 0x1ffe0
+#define bOFDMTxParity 0x20000
+#define bTxHTSIG1 0xffffff
+#define bTxHTMCSRate 0x7f
+#define bTxHTBW 0x80
+#define bTxHTLength 0xffff00
+#define bTxHTSIG2 0xffffff
+#define bTxHTSmoothing 0x1
+#define bTxHTSounding 0x2
+#define bTxHTReserved 0x4
+#define bTxHTAggreation 0x8
+#define bTxHTSTBC 0x30
+#define bTxHTAdvanceCoding 0x40
+#define bTxHTShortGI 0x80
+#define bTxHTNumberHT_LTF 0x300
+#define bTxHTCRC8 0x3fc00
+#define bCounterReset 0x10000
+#define bNumOfOFDMTx 0xffff
+#define bNumOfCCKTx 0xffff0000
+#define bTxIdleInterval 0xffff
+#define bOFDMService 0xffff0000
+#define bTxMACHeader 0xffffffff
+#define bTxDataInit 0xff
+#define bTxHTMode 0x100
+#define bTxDataType 0x30000
+#define bTxRandomSeed 0xffffffff
+#define bCCKTxPreamble 0x1
+#define bCCKTxSFD 0xffff0000
+#define bCCKTxSIG 0xff
+#define bCCKTxService 0xff00
+#define bCCKLengthExt 0x8000
+#define bCCKTxLength 0xffff0000
+#define bCCKTxCRC16 0xffff
+#define bCCKTxStatus 0x1
+#define bOFDMTxStatus 0x2
+
+#define IS_BB_REG_OFFSET_92S(_Offset) ((_Offset >= 0x800) && (_Offset <= 0xfff))
+
+// 2. Page8(0x800)
+#define bRFMOD 0x1 // Reg 0x800 rFPGA0_RFMOD
+#define bJapanMode 0x2
+#define bCCKTxSC 0x30
+#define bCCKEn 0x1000000
+#define bOFDMEn 0x2000000
+
+#define bOFDMRxADCPhase 0x10000 // Useless now
+#define bOFDMTxDACPhase 0x40000
+#define bXATxAGC 0x3f
+
+#define bAntennaSelect 0x0300
+
+#define bXBTxAGC 0xf00 // Reg 80c rFPGA0_TxGainStage
+#define bXCTxAGC 0xf000
+#define bXDTxAGC 0xf0000
+
+#define bPAStart 0xf0000000 // Useless now
+#define bTRStart 0x00f00000
+#define bRFStart 0x0000f000
+#define bBBStart 0x000000f0
+#define bBBCCKStart 0x0000000f
+#define bPAEnd 0xf //Reg0x814
+#define bTREnd 0x0f000000
+#define bRFEnd 0x000f0000
+#define bCCAMask 0x000000f0 //T2R
+#define bR2RCCAMask 0x00000f00
+#define bHSSI_R2TDelay 0xf8000000
+#define bHSSI_T2RDelay 0xf80000
+#define bContTxHSSI 0x400 //chane gain at continue Tx
+#define bIGFromCCK 0x200
+#define bAGCAddress 0x3f
+#define bRxHPTx 0x7000
+#define bRxHPT2R 0x38000
+#define bRxHPCCKIni 0xc0000
+#define bAGCTxCode 0xc00000
+#define bAGCRxCode 0x300000
+
+#define b3WireDataLength 0x800 // Reg 0x820~84f rFPGA0_XA_HSSIParameter1
+#define b3WireAddressLength 0x400
+
+#define b3WireRFPowerDown 0x1 // Useless now
+//#define bHWSISelect 0x8
+#define b5GPAPEPolarity 0x40000000
+#define b2GPAPEPolarity 0x80000000
+#define bRFSW_TxDefaultAnt 0x3
+#define bRFSW_TxOptionAnt 0x30
+#define bRFSW_RxDefaultAnt 0x300
+#define bRFSW_RxOptionAnt 0x3000
+#define bRFSI_3WireData 0x1
+#define bRFSI_3WireClock 0x2
+#define bRFSI_3WireLoad 0x4
+#define bRFSI_3WireRW 0x8
+#define bRFSI_3Wire 0xf
+
+#define bRFSI_RFENV 0x10 // Reg 0x870 rFPGA0_XAB_RFInterfaceSW
+
+#define bRFSI_TRSW 0x20 // Useless now
+#define bRFSI_TRSWB 0x40
+#define bRFSI_ANTSW 0x100
+#define bRFSI_ANTSWB 0x200
+#define bRFSI_PAPE 0x400
+#define bRFSI_PAPE5G 0x800
+#define bBandSelect 0x1
+#define bHTSIG2_GI 0x80
+#define bHTSIG2_Smoothing 0x01
+#define bHTSIG2_Sounding 0x02
+#define bHTSIG2_Aggreaton 0x08
+#define bHTSIG2_STBC 0x30
+#define bHTSIG2_AdvCoding 0x40
+#define bHTSIG2_NumOfHTLTF 0x300
+#define bHTSIG2_CRC8 0x3fc
+#define bHTSIG1_MCS 0x7f
+#define bHTSIG1_BandWidth 0x80
+#define bHTSIG1_HTLength 0xffff
+#define bLSIG_Rate 0xf
+#define bLSIG_Reserved 0x10
+#define bLSIG_Length 0x1fffe
+#define bLSIG_Parity 0x20
+#define bCCKRxPhase 0x4
+
+#define bLSSIReadAddress 0x7f800000 // T65 RF
+
+#define bLSSIReadEdge 0x80000000 //LSSI "Read" edge signal
+
+#define bLSSIReadBackData 0xfffff // T65 RF
+
+#define bLSSIReadOKFlag 0x1000 // Useless now
+#define bCCKSampleRate 0x8 //0: 44MHz, 1:88MHz
+#define bRegulator0Standby 0x1
+#define bRegulatorPLLStandby 0x2
+#define bRegulator1Standby 0x4
+#define bPLLPowerUp 0x8
+#define bDPLLPowerUp 0x10
+#define bDA10PowerUp 0x20
+#define bAD7PowerUp 0x200
+#define bDA6PowerUp 0x2000
+#define bXtalPowerUp 0x4000
+#define b40MDClkPowerUP 0x8000
+#define bDA6DebugMode 0x20000
+#define bDA6Swing 0x380000
+
+#define bADClkPhase 0x4000000 // Reg 0x880 rFPGA0_AnalogParameter1 20/40 CCK support switch 40/80 BB MHZ
+
+#define b80MClkDelay 0x18000000 // Useless
+#define bAFEWatchDogEnable 0x20000000
+
+#define bXtalCap01 0xc0000000 // Reg 0x884 rFPGA0_AnalogParameter2 Crystal cap
+#define bXtalCap23 0x3
+#define bXtalCap92x 0x0f000000
+#define bXtalCap 0x0f000000
+
+#define bIntDifClkEnable 0x400 // Useless
+#define bExtSigClkEnable 0x800
+#define bBandgapMbiasPowerUp 0x10000
+#define bAD11SHGain 0xc0000
+#define bAD11InputRange 0x700000
+#define bAD11OPCurrent 0x3800000
+#define bIPathLoopback 0x4000000
+#define bQPathLoopback 0x8000000
+#define bAFELoopback 0x10000000
+#define bDA10Swing 0x7e0
+#define bDA10Reverse 0x800
+#define bDAClkSource 0x1000
+#define bAD7InputRange 0x6000
+#define bAD7Gain 0x38000
+#define bAD7OutputCMMode 0x40000
+#define bAD7InputCMMode 0x380000
+#define bAD7Current 0xc00000
+#define bRegulatorAdjust 0x7000000
+#define bAD11PowerUpAtTx 0x1
+#define bDA10PSAtTx 0x10
+#define bAD11PowerUpAtRx 0x100
+#define bDA10PSAtRx 0x1000
+#define bCCKRxAGCFormat 0x200
+#define bPSDFFTSamplepPoint 0xc000
+#define bPSDAverageNum 0x3000
+#define bIQPathControl 0xc00
+#define bPSDFreq 0x3ff
+#define bPSDAntennaPath 0x30
+#define bPSDIQSwitch 0x40
+#define bPSDRxTrigger 0x400000
+#define bPSDTxTrigger 0x80000000
+#define bPSDSineToneScale 0x7f000000
+#define bPSDReport 0xffff
+
+// 3. Page9(0x900)
+#define bOFDMTxSC 0x30000000 // Useless
+#define bCCKTxOn 0x1
+#define bOFDMTxOn 0x2
+#define bDebugPage 0xfff //reset debug page and also HWord, LWord
+#define bDebugItem 0xff //reset debug page and LWord
+#define bAntL 0x10
+#define bAntNonHT 0x100
+#define bAntHT1 0x1000
+#define bAntHT2 0x10000
+#define bAntHT1S1 0x100000
+#define bAntNonHTS1 0x1000000
+
+// 4. PageA(0xA00)
+#define bCCKBBMode 0x3 // Useless
+#define bCCKTxPowerSaving 0x80
+#define bCCKRxPowerSaving 0x40
+
+#define bCCKSideBand 0x10 // Reg 0xa00 rCCK0_System 20/40 switch
+
+#define bCCKScramble 0x8 // Useless
+#define bCCKAntDiversity 0x8000
+#define bCCKCarrierRecovery 0x4000
+#define bCCKTxRate 0x3000
+#define bCCKDCCancel 0x0800
+#define bCCKISICancel 0x0400
+#define bCCKMatchFilter 0x0200
+#define bCCKEqualizer 0x0100
+#define bCCKPreambleDetect 0x800000
+#define bCCKFastFalseCCA 0x400000
+#define bCCKChEstStart 0x300000
+#define bCCKCCACount 0x080000
+#define bCCKcs_lim 0x070000
+#define bCCKBistMode 0x80000000
+#define bCCKCCAMask 0x40000000
+#define bCCKTxDACPhase 0x4
+#define bCCKRxADCPhase 0x20000000 //r_rx_clk
+#define bCCKr_cp_mode0 0x0100
+#define bCCKTxDCOffset 0xf0
+#define bCCKRxDCOffset 0xf
+#define bCCKCCAMode 0xc000
+#define bCCKFalseCS_lim 0x3f00
+#define bCCKCS_ratio 0xc00000
+#define bCCKCorgBit_sel 0x300000
+#define bCCKPD_lim 0x0f0000
+#define bCCKNewCCA 0x80000000
+#define bCCKRxHPofIG 0x8000
+#define bCCKRxIG 0x7f00
+#define bCCKLNAPolarity 0x800000
+#define bCCKRx1stGain 0x7f0000
+#define bCCKRFExtend 0x20000000 //CCK Rx Iinital gain polarity
+#define bCCKRxAGCSatLevel 0x1f000000
+#define bCCKRxAGCSatCount 0xe0
+#define bCCKRxRFSettle 0x1f //AGCsamp_dly
+#define bCCKFixedRxAGC 0x8000
+//#define bCCKRxAGCFormat 0x4000 //remove to HSSI register 0x824
+#define bCCKAntennaPolarity 0x2000
+#define bCCKTxFilterType 0x0c00
+#define bCCKRxAGCReportType 0x0300
+#define bCCKRxDAGCEn 0x80000000
+#define bCCKRxDAGCPeriod 0x20000000
+#define bCCKRxDAGCSatLevel 0x1f000000
+#define bCCKTimingRecovery 0x800000
+#define bCCKTxC0 0x3f0000
+#define bCCKTxC1 0x3f000000
+#define bCCKTxC2 0x3f
+#define bCCKTxC3 0x3f00
+#define bCCKTxC4 0x3f0000
+#define bCCKTxC5 0x3f000000
+#define bCCKTxC6 0x3f
+#define bCCKTxC7 0x3f00
+#define bCCKDebugPort 0xff0000
+#define bCCKDACDebug 0x0f000000
+#define bCCKFalseAlarmEnable 0x8000
+#define bCCKFalseAlarmRead 0x4000
+#define bCCKTRSSI 0x7f
+#define bCCKRxAGCReport 0xfe
+#define bCCKRxReport_AntSel 0x80000000
+#define bCCKRxReport_MFOff 0x40000000
+#define bCCKRxRxReport_SQLoss 0x20000000
+#define bCCKRxReport_Pktloss 0x10000000
+#define bCCKRxReport_Lockedbit 0x08000000
+#define bCCKRxReport_RateError 0x04000000
+#define bCCKRxReport_RxRate 0x03000000
+#define bCCKRxFACounterLower 0xff
+#define bCCKRxFACounterUpper 0xff000000
+#define bCCKRxHPAGCStart 0xe000
+#define bCCKRxHPAGCFinal 0x1c00
+#define bCCKRxFalseAlarmEnable 0x8000
+#define bCCKFACounterFreeze 0x4000
+#define bCCKTxPathSel 0x10000000
+#define bCCKDefaultRxPath 0xc000000
+#define bCCKOptionRxPath 0x3000000
+
+// 5. PageC(0xC00)
+#define bNumOfSTF 0x3 // Useless
+#define bShift_L 0xc0
+#define bGI_TH 0xc
+#define bRxPathA 0x1
+#define bRxPathB 0x2
+#define bRxPathC 0x4
+#define bRxPathD 0x8
+#define bTxPathA 0x1
+#define bTxPathB 0x2
+#define bTxPathC 0x4
+#define bTxPathD 0x8
+#define bTRSSIFreq 0x200
+#define bADCBackoff 0x3000
+#define bDFIRBackoff 0xc000
+#define bTRSSILatchPhase 0x10000
+#define bRxIDCOffset 0xff
+#define bRxQDCOffset 0xff00
+#define bRxDFIRMode 0x1800000
+#define bRxDCNFType 0xe000000
+#define bRXIQImb_A 0x3ff
+#define bRXIQImb_B 0xfc00
+#define bRXIQImb_C 0x3f0000
+#define bRXIQImb_D 0xffc00000
+#define bDC_dc_Notch 0x60000
+#define bRxNBINotch 0x1f000000
+#define bPD_TH 0xf
+#define bPD_TH_Opt2 0xc000
+#define bPWED_TH 0x700
+#define bIfMF_Win_L 0x800
+#define bPD_Option 0x1000
+#define bMF_Win_L 0xe000
+#define bBW_Search_L 0x30000
+#define bwin_enh_L 0xc0000
+#define bBW_TH 0x700000
+#define bED_TH2 0x3800000
+#define bBW_option 0x4000000
+#define bRatio_TH 0x18000000
+#define bWindow_L 0xe0000000
+#define bSBD_Option 0x1
+#define bFrame_TH 0x1c
+#define bFS_Option 0x60
+#define bDC_Slope_check 0x80
+#define bFGuard_Counter_DC_L 0xe00
+#define bFrame_Weight_Short 0x7000
+#define bSub_Tune 0xe00000
+#define bFrame_DC_Length 0xe000000
+#define bSBD_start_offset 0x30000000
+#define bFrame_TH_2 0x7
+#define bFrame_GI2_TH 0x38
+#define bGI2_Sync_en 0x40
+#define bSarch_Short_Early 0x300
+#define bSarch_Short_Late 0xc00
+#define bSarch_GI2_Late 0x70000
+#define bCFOAntSum 0x1
+#define bCFOAcc 0x2
+#define bCFOStartOffset 0xc
+#define bCFOLookBack 0x70
+#define bCFOSumWeight 0x80
+#define bDAGCEnable 0x10000
+#define bTXIQImb_A 0x3ff
+#define bTXIQImb_B 0xfc00
+#define bTXIQImb_C 0x3f0000
+#define bTXIQImb_D 0xffc00000
+#define bTxIDCOffset 0xff
+#define bTxQDCOffset 0xff00
+#define bTxDFIRMode 0x10000
+#define bTxPesudoNoiseOn 0x4000000
+#define bTxPesudoNoise_A 0xff
+#define bTxPesudoNoise_B 0xff00
+#define bTxPesudoNoise_C 0xff0000
+#define bTxPesudoNoise_D 0xff000000
+#define bCCADropOption 0x20000
+#define bCCADropThres 0xfff00000
+#define bEDCCA_H 0xf
+#define bEDCCA_L 0xf0
+#define bLambda_ED 0x300
+#define bRxInitialGain 0x7f
+#define bRxAntDivEn 0x80
+#define bRxAGCAddressForLNA 0x7f00
+#define bRxHighPowerFlow 0x8000
+#define bRxAGCFreezeThres 0xc0000
+#define bRxFreezeStep_AGC1 0x300000
+#define bRxFreezeStep_AGC2 0xc00000
+#define bRxFreezeStep_AGC3 0x3000000
+#define bRxFreezeStep_AGC0 0xc000000
+#define bRxRssi_Cmp_En 0x10000000
+#define bRxQuickAGCEn 0x20000000
+#define bRxAGCFreezeThresMode 0x40000000
+#define bRxOverFlowCheckType 0x80000000
+#define bRxAGCShift 0x7f
+#define bTRSW_Tri_Only 0x80
+#define bPowerThres 0x300
+#define bRxAGCEn 0x1
+#define bRxAGCTogetherEn 0x2
+#define bRxAGCMin 0x4
+#define bRxHP_Ini 0x7
+#define bRxHP_TRLNA 0x70
+#define bRxHP_RSSI 0x700
+#define bRxHP_BBP1 0x7000
+#define bRxHP_BBP2 0x70000
+#define bRxHP_BBP3 0x700000
+#define bRSSI_H 0x7f0000 //the threshold for high power
+#define bRSSI_Gen 0x7f000000 //the threshold for ant diversity
+#define bRxSettle_TRSW 0x7
+#define bRxSettle_LNA 0x38
+#define bRxSettle_RSSI 0x1c0
+#define bRxSettle_BBP 0xe00
+#define bRxSettle_RxHP 0x7000
+#define bRxSettle_AntSW_RSSI 0x38000
+#define bRxSettle_AntSW 0xc0000
+#define bRxProcessTime_DAGC 0x300000
+#define bRxSettle_HSSI 0x400000
+#define bRxProcessTime_BBPPW 0x800000
+#define bRxAntennaPowerShift 0x3000000
+#define bRSSITableSelect 0xc000000
+#define bRxHP_Final 0x7000000
+#define bRxHTSettle_BBP 0x7
+#define bRxHTSettle_HSSI 0x8
+#define bRxHTSettle_RxHP 0x70
+#define bRxHTSettle_BBPPW 0x80
+#define bRxHTSettle_Idle 0x300
+#define bRxHTSettle_Reserved 0x1c00
+#define bRxHTRxHPEn 0x8000
+#define bRxHTAGCFreezeThres 0x30000
+#define bRxHTAGCTogetherEn 0x40000
+#define bRxHTAGCMin 0x80000
+#define bRxHTAGCEn 0x100000
+#define bRxHTDAGCEn 0x200000
+#define bRxHTRxHP_BBP 0x1c00000
+#define bRxHTRxHP_Final 0xe0000000
+#define bRxPWRatioTH 0x3
+#define bRxPWRatioEn 0x4
+#define bRxMFHold 0x3800
+#define bRxPD_Delay_TH1 0x38
+#define bRxPD_Delay_TH2 0x1c0
+#define bRxPD_DC_COUNT_MAX 0x600
+//#define bRxMF_Hold 0x3800
+#define bRxPD_Delay_TH 0x8000
+#define bRxProcess_Delay 0xf0000
+#define bRxSearchrange_GI2_Early 0x700000
+#define bRxFrame_Guard_Counter_L 0x3800000
+#define bRxSGI_Guard_L 0xc000000
+#define bRxSGI_Search_L 0x30000000
+#define bRxSGI_TH 0xc0000000
+#define bDFSCnt0 0xff
+#define bDFSCnt1 0xff00
+#define bDFSFlag 0xf0000
+#define bMFWeightSum 0x300000
+#define bMinIdxTH 0x7f000000
+#define bDAFormat 0x40000
+#define bTxChEmuEnable 0x01000000
+#define bTRSWIsolation_A 0x7f
+#define bTRSWIsolation_B 0x7f00
+#define bTRSWIsolation_C 0x7f0000
+#define bTRSWIsolation_D 0x7f000000
+#define bExtLNAGain 0x7c00
+
+// 6. PageE(0xE00)
+#define bSTBCEn 0x4 // Useless
+#define bAntennaMapping 0x10
+#define bNss 0x20
+#define bCFOAntSumD 0x200
+#define bPHYCounterReset 0x8000000
+#define bCFOReportGet 0x4000000
+#define bOFDMContinueTx 0x10000000
+#define bOFDMSingleCarrier 0x20000000
+#define bOFDMSingleTone 0x40000000
+//#define bRxPath1 0x01
+//#define bRxPath2 0x02
+//#define bRxPath3 0x04
+//#define bRxPath4 0x08
+//#define bTxPath1 0x10
+//#define bTxPath2 0x20
+#define bHTDetect 0x100
+#define bCFOEn 0x10000
+#define bCFOValue 0xfff00000
+#define bSigTone_Re 0x3f
+#define bSigTone_Im 0x7f00
+#define bCounter_CCA 0xffff
+#define bCounter_ParityFail 0xffff0000
+#define bCounter_RateIllegal 0xffff
+#define bCounter_CRC8Fail 0xffff0000
+#define bCounter_MCSNoSupport 0xffff
+#define bCounter_FastSync 0xffff
+#define bShortCFO 0xfff
+#define bShortCFOTLength 12 //total
+#define bShortCFOFLength 11 //fraction
+#define bLongCFO 0x7ff
+#define bLongCFOTLength 11
+#define bLongCFOFLength 11
+#define bTailCFO 0x1fff
+#define bTailCFOTLength 13
+#define bTailCFOFLength 12
+#define bmax_en_pwdB 0xffff
+#define bCC_power_dB 0xffff0000
+#define bnoise_pwdB 0xffff
+#define bPowerMeasTLength 10
+#define bPowerMeasFLength 3
+#define bRx_HT_BW 0x1
+#define bRxSC 0x6
+#define bRx_HT 0x8
+#define bNB_intf_det_on 0x1
+#define bIntf_win_len_cfg 0x30
+#define bNB_Intf_TH_cfg 0x1c0
+#define bRFGain 0x3f
+#define bTableSel 0x40
+#define bTRSW 0x80
+#define bRxSNR_A 0xff
+#define bRxSNR_B 0xff00
+#define bRxSNR_C 0xff0000
+#define bRxSNR_D 0xff000000
+#define bSNREVMTLength 8
+#define bSNREVMFLength 1
+#define bCSI1st 0xff
+#define bCSI2nd 0xff00
+#define bRxEVM1st 0xff0000
+#define bRxEVM2nd 0xff000000
+#define bSIGEVM 0xff
+#define bPWDB 0xff00
+#define bSGIEN 0x10000
+
+#define bSFactorQAM1 0xf // Useless
+#define bSFactorQAM2 0xf0
+#define bSFactorQAM3 0xf00
+#define bSFactorQAM4 0xf000
+#define bSFactorQAM5 0xf0000
+#define bSFactorQAM6 0xf0000
+#define bSFactorQAM7 0xf00000
+#define bSFactorQAM8 0xf000000
+#define bSFactorQAM9 0xf0000000
+#define bCSIScheme 0x100000
+
+#define bNoiseLvlTopSet 0x3 // Useless
+#define bChSmooth 0x4
+#define bChSmoothCfg1 0x38
+#define bChSmoothCfg2 0x1c0
+#define bChSmoothCfg3 0xe00
+#define bChSmoothCfg4 0x7000
+#define bMRCMode 0x800000
+#define bTHEVMCfg 0x7000000
+
+#define bLoopFitType 0x1 // Useless
+#define bUpdCFO 0x40
+#define bUpdCFOOffData 0x80
+#define bAdvUpdCFO 0x100
+#define bAdvTimeCtrl 0x800
+#define bUpdClko 0x1000
+#define bFC 0x6000
+#define bTrackingMode 0x8000
+#define bPhCmpEnable 0x10000
+#define bUpdClkoLTF 0x20000
+#define bComChCFO 0x40000
+#define bCSIEstiMode 0x80000
+#define bAdvUpdEqz 0x100000
+#define bUChCfg 0x7000000
+#define bUpdEqz 0x8000000
+
+//Rx Pseduo noise
+#define bRxPesudoNoiseOn 0x20000000 // Useless
+#define bRxPesudoNoise_A 0xff
+#define bRxPesudoNoise_B 0xff00
+#define bRxPesudoNoise_C 0xff0000
+#define bRxPesudoNoise_D 0xff000000
+#define bPesudoNoiseState_A 0xffff
+#define bPesudoNoiseState_B 0xffff0000
+#define bPesudoNoiseState_C 0xffff
+#define bPesudoNoiseState_D 0xffff0000
+
+//7. RF Register
+//Zebra1
+#define bZebra1_HSSIEnable 0x8 // Useless
+#define bZebra1_TRxControl 0xc00
+#define bZebra1_TRxGainSetting 0x07f
+#define bZebra1_RxCorner 0xc00
+#define bZebra1_TxChargePump 0x38
+#define bZebra1_RxChargePump 0x7
+#define bZebra1_ChannelNum 0xf80
+#define bZebra1_TxLPFBW 0x400
+#define bZebra1_RxLPFBW 0x600
+
+//Zebra4
+#define bRTL8256RegModeCtrl1 0x100 // Useless
+#define bRTL8256RegModeCtrl0 0x40
+#define bRTL8256_TxLPFBW 0x18
+#define bRTL8256_RxLPFBW 0x600
+
+//RTL8258
+#define bRTL8258_TxLPFBW 0xc // Useless
+#define bRTL8258_RxLPFBW 0xc00
+#define bRTL8258_RSSILPFBW 0xc0
+
+
+//
+// Other Definition
+//
+
+//byte endable for sb_write
+#define bByte0 0x1 // Useless
+#define bByte1 0x2
+#define bByte2 0x4
+#define bByte3 0x8
+#define bWord0 0x3
+#define bWord1 0xc
+#define bDWord 0xf
+
+//for PutRegsetting & GetRegSetting BitMask
+#define bMaskByte0 0xff // Reg 0xc50 rOFDM0_XAAGCCore~0xC6f
+#define bMaskByte1 0xff00
+#define bMaskByte2 0xff0000
+#define bMaskByte3 0xff000000
+#define bMaskHWord 0xffff0000
+#define bMaskLWord 0x0000ffff
+#define bMaskDWord 0xffffffff
+#define bMask12Bits 0xfff
+#define bMaskH4Bits 0xf0000000
+#define bMaskOFDM_D 0xffc00000
+#define bMaskCCK 0x3f3f3f3f
+
+//for PutRFRegsetting & GetRFRegSetting BitMask
+//#define bMask12Bits 0xfffff // RF Reg mask bits
+//#define bMask20Bits 0xfffff // RF Reg mask bits T65 RF
+#define bRFRegOffsetMask 0xfffff
+
+#define bEnable 0x1 // Useless
+#define bDisable 0x0
+
+#define LeftAntenna 0x0 // Useless
+#define RightAntenna 0x1
+
+#define tCheckTxStatus 500 //500ms // Useless
+#define tUpdateRxCounter 100 //100ms
+
+#define rateCCK 0 // Useless
+#define rateOFDM 1
+#define rateHT 2
+
+//define Register-End
+#define bPMAC_End 0x1ff // Useless
+#define bFPGAPHY0_End 0x8ff
+#define bFPGAPHY1_End 0x9ff
+#define bCCKPHY0_End 0xaff
+#define bOFDMPHY0_End 0xcff
+#define bOFDMPHY1_End 0xdff
+
+//define max debug item in each debug page
+//#define bMaxItem_FPGA_PHY0 0x9
+//#define bMaxItem_FPGA_PHY1 0x3
+//#define bMaxItem_PHY_11B 0x16
+//#define bMaxItem_OFDM_PHY0 0x29
+//#define bMaxItem_OFDM_PHY1 0x0
+
+#define bPMACControl 0x0 // Useless
+#define bWMACControl 0x1
+#define bWNICControl 0x2
+
+#define PathA 0x0 // Useless
+#define PathB 0x1
+#define PathC 0x2
+#define PathD 0x3
+
+/*--------------------------Define Parameters-------------------------------*/
+
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/Hal8188EPwrSeq.h b/drivers/net/wireless/rtl8723as/include/Hal8188EPwrSeq.h
index c0145f6244e3..915da60456f4 100755
--- a/drivers/net/wireless/rtl8723as/include/Hal8188EPwrSeq.h
+++ b/drivers/net/wireless/rtl8723as/include/Hal8188EPwrSeq.h
@@ -1,177 +1,177 @@
-
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-#ifndef __HAL8188EPWRSEQ_H__
-#define __HAL8188EPWRSEQ_H__
-
-#include "HalPwrSeqCmd.h"
-
-/*
- Check document WM-20110607-Paul-RTL8188E_Power_Architecture-R02.vsd
- There are 6 HW Power States:
- 0: POFF--Power Off
- 1: PDN--Power Down
- 2: CARDEMU--Card Emulation
- 3: ACT--Active Mode
- 4: LPS--Low Power State
- 5: SUS--Suspend
-
- The transision from different states are defined below
- TRANS_CARDEMU_TO_ACT
- TRANS_ACT_TO_CARDEMU
- TRANS_CARDEMU_TO_SUS
- TRANS_SUS_TO_CARDEMU
- TRANS_CARDEMU_TO_PDN
- TRANS_ACT_TO_LPS
- TRANS_LPS_TO_ACT
-
- TRANS_END
-
- PWR SEQ Version: rtl8188E_PwrSeq_V09.h
-*/
-#define RTL8188E_TRANS_CARDEMU_TO_ACT_STEPS 10
-#define RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS 10
-#define RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS 10
-#define RTL8188E_TRANS_SUS_TO_CARDEMU_STEPS 10
-#define RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS 10
-#define RTL8188E_TRANS_PDN_TO_CARDEMU_STEPS 10
-#define RTL8188E_TRANS_ACT_TO_LPS_STEPS 15
-#define RTL8188E_TRANS_LPS_TO_ACT_STEPS 15
-#define RTL8188E_TRANS_END_STEPS 1
-
-
-#define RTL8188E_TRANS_CARDEMU_TO_ACT \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, BIT1},/* wait till 0x04[17] = 1 power ready*/ \
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0|BIT1, 0}, /* 0x02[1:0] = 0 reset BB*/ \
- {0x0026, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, BIT7}, /*0x24[23] = 2b'01 schmit trigger */ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0}, /* 0x04[15] = 0 disable HWPDN (control by DRV)*/\
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4|BIT3, 0}, /*0x04[12:11] = 2b'00 disable WL suspend*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0}, /*0x04[8] = 1 polling until return 0*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT0, 0}, /*wait till 0x04[8] = 0*/ \
- {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*LDO normal mode*/ \
- {0x0074, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*SDIO Driving*/ \
-
-#define RTL8188E_TRANS_ACT_TO_CARDEMU \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x001F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0},/*0x1F[7:0] = 0 turn off RF*/ \
- {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*LDO Sleep mode*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*0x04[9] = 1 turn off MAC by HW state machine*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, 0}, /*wait till 0x04[9] = 0 polling until return 0 to disable*/ \
-
-#define RTL8188E_TRANS_CARDEMU_TO_SUS \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01enable WL suspend*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3|BIT4}, /*0x04[12:11] = 2b'11enable WL suspend for PCIe*/ \
- {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, BIT7}, /* 0x04[31:30] = 2b'10 enable enable bandgap mbias in suspend */ \
- {0x0041, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*Clear SIC_EN register 0x40[12] = 1'b0 */ \
- {0xfe10, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*Set USB suspend enable local register 0xfe10[4]=1 */ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/
-
-#define RTL8188E_TRANS_SUS_TO_CARDEMU \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, 0}, /*Set SDIO suspend local register*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, BIT1}, /*wait power state to suspend*/\
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, 0}, /*0x04[12:11] = 2b'01enable WL suspend*/
-
-#define RTL8188E_TRANS_CARDEMU_TO_CARDDIS \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0026, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, BIT7}, /*0x24[23] = 2b'01 schmit trigger */ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \
- {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, /* 0x04[31:30] = 2b'10 enable enable bandgap mbias in suspend */ \
- {0x0041, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*Clear SIC_EN register 0x40[12] = 1'b0 */ \
- {0xfe10, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*Set USB suspend enable local register 0xfe10[4]=1 */ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/
-
-#define RTL8188E_TRANS_CARDDIS_TO_CARDEMU \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, 0}, /*Set SDIO suspend local register*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, BIT1}, /*wait power state to suspend*/\
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, 0}, /*0x04[12:11] = 2b'01enable WL suspend*/
-
-#define RTL8188E_TRANS_CARDEMU_TO_PDN \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/* 0x04[16] = 0*/\
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, BIT7},/* 0x04[15] = 1*/
-
-#define RTL8188E_TRANS_PDN_TO_CARDEMU \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/* 0x04[15] = 0*/
-
-//This is used by driver for LPSRadioOff Procedure, not for FW LPS Step
-#define RTL8188E_TRANS_ACT_TO_LPS \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x7F},/*Tx Pause*/ \
- {0x05F8, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
- {0x05F9, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
- {0x05FA, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
- {0x05FB, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*CCK and OFDM are disabled,and clock are gated*/ \
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_US},/*Delay 1us*/ \
- {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x3F},/*Reset MAC TRX*/ \
- {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*check if removed later*/ \
- {0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, BIT5},/*Respond TxOK to scheduler*/ \
-
-
-#define RTL8188E_TRANS_LPS_TO_ACT \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, 0xFF, 0x84}, /*SDIO RPWM*/\
- {0xFE58, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*USB RPWM*/\
- {0x0361, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*PCIe RPWM*/\
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_MS}, /*Delay*/\
- {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*. 0x08[4] = 0 switch TSF to 40M*/\
- {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT7, 0}, /*Polling 0x109[7]=0 TSF in 40M*/\
- {0x0029, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT6|BIT7, 0}, /*. 0x29[7:6] = 2b'00 enable BB clock*/\
- {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*. 0x101[1] = 1*/\
- {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF}, /*. 0x100[7:0] = 0xFF enable WMAC TRX*/\
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1|BIT0, BIT1|BIT0}, /*. 0x02[1:0] = 2b'11 enable BB macro*/\
- {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, /*. 0x522 = 0*/
-
-#define RTL8188E_TRANS_END \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0xFFFF, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,0,PWR_CMD_END, 0, 0}, //
-
-
-extern WLAN_PWR_CFG rtl8188E_power_on_flow[RTL8188E_TRANS_CARDEMU_TO_ACT_STEPS+RTL8188E_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8188E_radio_off_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8188E_card_disable_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8188E_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8188E_card_enable_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8188E_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8188E_suspend_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS+RTL8188E_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8188E_resume_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS+RTL8188E_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8188E_hwpdn_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8188E_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8188E_enter_lps_flow[RTL8188E_TRANS_ACT_TO_LPS_STEPS+RTL8188E_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8188E_leave_lps_flow[RTL8188E_TRANS_LPS_TO_ACT_STEPS+RTL8188E_TRANS_END_STEPS];
-
-#endif //__HAL8188EPWRSEQ_H__
-
+
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+#ifndef __HAL8188EPWRSEQ_H__
+#define __HAL8188EPWRSEQ_H__
+
+#include "HalPwrSeqCmd.h"
+
+/*
+ Check document WM-20110607-Paul-RTL8188E_Power_Architecture-R02.vsd
+ There are 6 HW Power States:
+ 0: POFF--Power Off
+ 1: PDN--Power Down
+ 2: CARDEMU--Card Emulation
+ 3: ACT--Active Mode
+ 4: LPS--Low Power State
+ 5: SUS--Suspend
+
+ The transision from different states are defined below
+ TRANS_CARDEMU_TO_ACT
+ TRANS_ACT_TO_CARDEMU
+ TRANS_CARDEMU_TO_SUS
+ TRANS_SUS_TO_CARDEMU
+ TRANS_CARDEMU_TO_PDN
+ TRANS_ACT_TO_LPS
+ TRANS_LPS_TO_ACT
+
+ TRANS_END
+
+ PWR SEQ Version: rtl8188E_PwrSeq_V09.h
+*/
+#define RTL8188E_TRANS_CARDEMU_TO_ACT_STEPS 10
+#define RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS 10
+#define RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS 10
+#define RTL8188E_TRANS_SUS_TO_CARDEMU_STEPS 10
+#define RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS 10
+#define RTL8188E_TRANS_PDN_TO_CARDEMU_STEPS 10
+#define RTL8188E_TRANS_ACT_TO_LPS_STEPS 15
+#define RTL8188E_TRANS_LPS_TO_ACT_STEPS 15
+#define RTL8188E_TRANS_END_STEPS 1
+
+
+#define RTL8188E_TRANS_CARDEMU_TO_ACT \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, BIT1},/* wait till 0x04[17] = 1 power ready*/ \
+ {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0|BIT1, 0}, /* 0x02[1:0] = 0 reset BB*/ \
+ {0x0026, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, BIT7}, /*0x24[23] = 2b'01 schmit trigger */ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0}, /* 0x04[15] = 0 disable HWPDN (control by DRV)*/\
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4|BIT3, 0}, /*0x04[12:11] = 2b'00 disable WL suspend*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0}, /*0x04[8] = 1 polling until return 0*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT0, 0}, /*wait till 0x04[8] = 0*/ \
+ {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*LDO normal mode*/ \
+ {0x0074, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*SDIO Driving*/ \
+
+#define RTL8188E_TRANS_ACT_TO_CARDEMU \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x001F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0},/*0x1F[7:0] = 0 turn off RF*/ \
+ {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*LDO Sleep mode*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*0x04[9] = 1 turn off MAC by HW state machine*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, 0}, /*wait till 0x04[9] = 0 polling until return 0 to disable*/ \
+
+#define RTL8188E_TRANS_CARDEMU_TO_SUS \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01enable WL suspend*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3|BIT4}, /*0x04[12:11] = 2b'11enable WL suspend for PCIe*/ \
+ {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, BIT7}, /* 0x04[31:30] = 2b'10 enable enable bandgap mbias in suspend */ \
+ {0x0041, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*Clear SIC_EN register 0x40[12] = 1'b0 */ \
+ {0xfe10, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*Set USB suspend enable local register 0xfe10[4]=1 */ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/
+
+#define RTL8188E_TRANS_SUS_TO_CARDEMU \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, 0}, /*Set SDIO suspend local register*/ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, BIT1}, /*wait power state to suspend*/\
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, 0}, /*0x04[12:11] = 2b'01enable WL suspend*/
+
+#define RTL8188E_TRANS_CARDEMU_TO_CARDDIS \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0026, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, BIT7}, /*0x24[23] = 2b'01 schmit trigger */ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \
+ {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, /* 0x04[31:30] = 2b'10 enable enable bandgap mbias in suspend */ \
+ {0x0041, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*Clear SIC_EN register 0x40[12] = 1'b0 */ \
+ {0xfe10, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*Set USB suspend enable local register 0xfe10[4]=1 */ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/
+
+#define RTL8188E_TRANS_CARDDIS_TO_CARDEMU \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, 0}, /*Set SDIO suspend local register*/ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, BIT1}, /*wait power state to suspend*/\
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, 0}, /*0x04[12:11] = 2b'01enable WL suspend*/
+
+#define RTL8188E_TRANS_CARDEMU_TO_PDN \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/* 0x04[16] = 0*/\
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, BIT7},/* 0x04[15] = 1*/
+
+#define RTL8188E_TRANS_PDN_TO_CARDEMU \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/* 0x04[15] = 0*/
+
+//This is used by driver for LPSRadioOff Procedure, not for FW LPS Step
+#define RTL8188E_TRANS_ACT_TO_LPS \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x7F},/*Tx Pause*/ \
+ {0x05F8, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
+ {0x05F9, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
+ {0x05FA, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
+ {0x05FB, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
+ {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*CCK and OFDM are disabled,and clock are gated*/ \
+ {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_US},/*Delay 1us*/ \
+ {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x3F},/*Reset MAC TRX*/ \
+ {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*check if removed later*/ \
+ {0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, BIT5},/*Respond TxOK to scheduler*/ \
+
+
+#define RTL8188E_TRANS_LPS_TO_ACT \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, 0xFF, 0x84}, /*SDIO RPWM*/\
+ {0xFE58, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*USB RPWM*/\
+ {0x0361, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*PCIe RPWM*/\
+ {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_MS}, /*Delay*/\
+ {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*. 0x08[4] = 0 switch TSF to 40M*/\
+ {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT7, 0}, /*Polling 0x109[7]=0 TSF in 40M*/\
+ {0x0029, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT6|BIT7, 0}, /*. 0x29[7:6] = 2b'00 enable BB clock*/\
+ {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*. 0x101[1] = 1*/\
+ {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF}, /*. 0x100[7:0] = 0xFF enable WMAC TRX*/\
+ {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1|BIT0, BIT1|BIT0}, /*. 0x02[1:0] = 2b'11 enable BB macro*/\
+ {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, /*. 0x522 = 0*/
+
+#define RTL8188E_TRANS_END \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0xFFFF, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,0,PWR_CMD_END, 0, 0}, //
+
+
+extern WLAN_PWR_CFG rtl8188E_power_on_flow[RTL8188E_TRANS_CARDEMU_TO_ACT_STEPS+RTL8188E_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8188E_radio_off_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8188E_card_disable_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8188E_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8188E_card_enable_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8188E_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8188E_suspend_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS+RTL8188E_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8188E_resume_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS+RTL8188E_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8188E_hwpdn_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS+RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS+RTL8188E_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8188E_enter_lps_flow[RTL8188E_TRANS_ACT_TO_LPS_STEPS+RTL8188E_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8188E_leave_lps_flow[RTL8188E_TRANS_LPS_TO_ACT_STEPS+RTL8188E_TRANS_END_STEPS];
+
+#endif //__HAL8188EPWRSEQ_H__
+
diff --git a/drivers/net/wireless/rtl8723as/include/Hal8192CPhyCfg.h b/drivers/net/wireless/rtl8723as/include/Hal8192CPhyCfg.h
index d98119a13dab..b27642c7454a 100755
--- a/drivers/net/wireless/rtl8723as/include/Hal8192CPhyCfg.h
+++ b/drivers/net/wireless/rtl8723as/include/Hal8192CPhyCfg.h
@@ -390,6 +390,7 @@ extern void PHY_Reconfig_To_1T1R(_adapter *padapter);
#define PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data) rtl8192c_PHY_SetRFReg((Adapter), (eRFPath), (RegAddr), (BitMask), (Data))
#define PHY_SetMacReg PHY_SetBBReg
+#define PHY_QueryMacReg PHY_QueryBBReg
#endif // __INC_HAL8192CPHYCFG_H
diff --git a/drivers/net/wireless/rtl8723as/include/Hal8192DPhyCfg.h b/drivers/net/wireless/rtl8723as/include/Hal8192DPhyCfg.h
index cbf7d62de05b..f2e55df8beeb 100755
--- a/drivers/net/wireless/rtl8723as/include/Hal8192DPhyCfg.h
+++ b/drivers/net/wireless/rtl8723as/include/Hal8192DPhyCfg.h
@@ -481,6 +481,7 @@ PHY_InitPABias92D(IN PADAPTER Adapter);
#define PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data) rtl8192d_PHY_SetRFReg((Adapter), (eRFPath), (RegAddr), (BitMask), (Data))
#define PHY_SetMacReg PHY_SetBBReg
+#define PHY_QueryMacReg PHY_QueryBBReg
#endif // __INC_HAL8192SPHYCFG_H
diff --git a/drivers/net/wireless/rtl8723as/include/Hal8192DPhyReg.h b/drivers/net/wireless/rtl8723as/include/Hal8192DPhyReg.h
index fa58ffd5b024..de23a415d994 100755
--- a/drivers/net/wireless/rtl8723as/include/Hal8192DPhyReg.h
+++ b/drivers/net/wireless/rtl8723as/include/Hal8192DPhyReg.h
@@ -16,1157 +16,1157 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
*
- ******************************************************************************/
-/*****************************************************************************
- *
- * Module: __INC_HAL8192DPHYREG_H
- *
- *
- * Note: 1. Define PMAC/BB register map
- * 2. Define RF register map
- * 3. PMAC/BB register bit mask.
- * 4. RF reg bit mask.
- * 5. Other BB/RF relative definition.
- *
- *
- * Export: Constants, macro, functions(API), global variables(None).
- *
- * Abbrev:
- *
- * History:
- * Data Who Remark
- * 08/07/2007 MHC 1. Porting from 9x series PHYCFG.h.
- * 2. Reorganize code architecture.
- * 09/25/2008 MH 1. Add RL6052 register definition
- *
- *****************************************************************************/
-#ifndef __INC_HAL8192DPHYREG_H
-#define __INC_HAL8192DPHYREG_H
-
-
-/*--------------------------Define Parameters-------------------------------*/
-
-//============================================================
-// 8192S Regsiter offset definition
-//============================================================
-
-//
-// BB-PHY register PMAC 0x100 PHY 0x800 - 0xEFF
-// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF
-// 2. 0x800/0x900/0xA00/0xC00/0xD00/0xE00
-// 3. RF register 0x00-2E
-// 4. Bit Mask for BB/RF register
-// 5. Other defintion for BB/RF R/W
-//
-
-
-//
-// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF
-// 1. Page1(0x100)
-//
-#define rPMAC_Reset 0x100
-#define rPMAC_TxStart 0x104
-#define rPMAC_TxLegacySIG 0x108
-#define rPMAC_TxHTSIG1 0x10c
-#define rPMAC_TxHTSIG2 0x110
-#define rPMAC_PHYDebug 0x114
-#define rPMAC_TxPacketNum 0x118
-#define rPMAC_TxIdle 0x11c
-#define rPMAC_TxMACHeader0 0x120
-#define rPMAC_TxMACHeader1 0x124
-#define rPMAC_TxMACHeader2 0x128
-#define rPMAC_TxMACHeader3 0x12c
-#define rPMAC_TxMACHeader4 0x130
-#define rPMAC_TxMACHeader5 0x134
-#define rPMAC_TxDataType 0x138
-#define rPMAC_TxRandomSeed 0x13c
-#define rPMAC_CCKPLCPPreamble 0x140
-#define rPMAC_CCKPLCPHeader 0x144
-#define rPMAC_CCKCRC16 0x148
-#define rPMAC_OFDMRxCRC32OK 0x170
-#define rPMAC_OFDMRxCRC32Er 0x174
-#define rPMAC_OFDMRxParityEr 0x178
-#define rPMAC_OFDMRxCRC8Er 0x17c
-#define rPMAC_CCKCRxRC16Er 0x180
-#define rPMAC_CCKCRxRC32Er 0x184
-#define rPMAC_CCKCRxRC32OK 0x188
-#define rPMAC_TxStatus 0x18c
-
-//
-// 2. Page2(0x200)
-//
-// The following two definition are only used for USB interface.
-#define RF_BB_CMD_ADDR 0x02c0 // RF/BB read/write command address.
-#define RF_BB_CMD_DATA 0x02c4 // RF/BB read/write command data.
-
-//
-// 3. Page8(0x800)
-//
-#define rFPGA0_RFMOD 0x800 //RF mode & CCK TxSC // RF BW Setting??
-
-#define rFPGA0_TxInfo 0x804 // Status report??
-#define rFPGA0_PSDFunction 0x808
-
-#define rFPGA0_TxGainStage 0x80c // Set TX PWR init gain?
-
-#define rFPGA0_RFTiming1 0x810 // Useless now
-#define rFPGA0_RFTiming2 0x814
-
-#define rFPGA0_XA_HSSIParameter1 0x820 // RF 3 wire register
-#define rFPGA0_XA_HSSIParameter2 0x824
-#define rFPGA0_XB_HSSIParameter1 0x828
-#define rFPGA0_XB_HSSIParameter2 0x82c
-
-#define rFPGA0_XA_LSSIParameter 0x840
-#define rFPGA0_XB_LSSIParameter 0x844
-
-#define rFPGA0_RFWakeUpParameter 0x850 // Useless now
-#define rFPGA0_RFSleepUpParameter 0x854
-
-#define rFPGA0_XAB_SwitchControl 0x858 // RF Channel switch
-#define rFPGA0_XCD_SwitchControl 0x85c
-
-#define rFPGA0_XA_RFInterfaceOE 0x860 // RF Channel switch
-#define rFPGA0_XB_RFInterfaceOE 0x864
-
-#define rFPGA0_XAB_RFInterfaceSW 0x870 // RF Interface Software Control
-#define rFPGA0_XCD_RFInterfaceSW 0x874
-
-#define rFPGA0_XAB_RFParameter 0x878 // RF Parameter
-#define rFPGA0_XCD_RFParameter 0x87c
-
-#define rFPGA0_AnalogParameter1 0x880 // Crystal cap setting RF-R/W protection for parameter4??
-#define rFPGA0_AnalogParameter2 0x884
-#define rFPGA0_AnalogParameter3 0x888
-#define rFPGA0_AdDaClockEn 0x888 // enable ad/da clock1 for dual-phy
-#define rFPGA0_AnalogParameter4 0x88c
-
-#define rFPGA0_XA_LSSIReadBack 0x8a0 // Tranceiver LSSI Readback
-#define rFPGA0_XB_LSSIReadBack 0x8a4
-#define rFPGA0_XC_LSSIReadBack 0x8a8
-#define rFPGA0_XD_LSSIReadBack 0x8ac
-
-#define rFPGA0_PSDReport 0x8b4 // Useless now
-#define TransceiverA_HSPI_Readback 0x8b8 // Transceiver A HSPI Readback
-#define TransceiverB_HSPI_Readback 0x8bc // Transceiver B HSPI Readback
-#define rFPGA0_XAB_RFInterfaceRB 0x8e0 // Useless now // RF Interface Readback Value
-#define rFPGA0_XCD_RFInterfaceRB 0x8e4 // Useless now
-
-//
-// 4. Page9(0x900)
-//
-#define rFPGA1_RFMOD 0x900 //RF mode & OFDM TxSC // RF BW Setting??
-
-#define rFPGA1_TxBlock 0x904 // Useless now
-#define rFPGA1_DebugSelect 0x908 // Useless now
-#define rFPGA1_TxInfo 0x90c // Useless now // Status report??
-
-//
-// 5. PageA(0xA00)
-//
-// Set Control channel to upper or lower. These settings are required only for 40MHz
-#define rCCK0_System 0xa00
-
-#define rCCK0_AFESetting 0xa04 // Disable init gain now // Select RX path by RSSI
-#define rCCK0_CCA 0xa08 // Disable init gain now // Init gain
-
-#define rCCK0_RxAGC1 0xa0c //AGC default value, saturation level // Antenna Diversity, RX AGC, LNA Threshold, RX LNA Threshold useless now. Not the same as 90 series
-#define rCCK0_RxAGC2 0xa10 //AGC & DAGC
-
-#define rCCK0_RxHP 0xa14
-
-#define rCCK0_DSPParameter1 0xa18 //Timing recovery & Channel estimation threshold
-#define rCCK0_DSPParameter2 0xa1c //SQ threshold
-
-#define rCCK0_TxFilter1 0xa20
-#define rCCK0_TxFilter2 0xa24
-#define rCCK0_DebugPort 0xa28 //debug port and Tx filter3
-#define rCCK0_FalseAlarmReport 0xa2c //0xa2d useless now 0xa30-a4f channel report
-#define rCCK0_TRSSIReport 0xa50
-#define rCCK0_RxReport 0xa54 //0xa57
-#define rCCK0_FACounterLower 0xa5c //0xa5b
-#define rCCK0_FACounterUpper 0xa58 //0xa5c
-
-//
-// PageB(0xB00)
-//
-#define rPdp_AntA 0xb00
-#define rPdp_AntA_4 0xb04
-#define rPdp_AntA_8 0xb08
-#define rPdp_AntA_C 0xb0c
-#define rPdp_AntA_10 0xb10
-#define rPdp_AntA_14 0xb14
-#define rPdp_AntA_18 0xb18
-#define rPdp_AntA_1C 0xb1c
-#define rPdp_AntA_20 0xb20
-#define rPdp_AntA_24 0xb24
-
-#define rConfig_Pmpd_AntA 0xb28
-#define rConfig_ram64x16 0xb2c
-
-#define rBndA 0xb30
-#define rHssiPar 0xb34
-
-#define rConfig_AntA 0xb68
-#define rConfig_AntB 0xb6c
-
-#define rPdp_AntB 0xb70
-#define rPdp_AntB_4 0xb74
-#define rPdp_AntB_8 0xb78
-#define rPdp_AntB_C 0xb7c
-#define rPdp_AntB_10 0xb80
-#define rPdp_AntB_14 0xb84
-#define rPdp_AntB_18 0xb88
-#define rPdp_AntB_1C 0xb8c
-#define rPdp_AntB_20 0xb90
-#define rPdp_AntB_24 0xb94
-
-#define rConfig_Pmpd_AntB 0xb98
-
-#define rBndB 0xba0
-
-#define rAPK 0xbd8
-#define rPm_Rx0_AntA 0xbdc
-#define rPm_Rx1_AntA 0xbe0
-#define rPm_Rx2_AntA 0xbe4
-#define rPm_Rx3_AntA 0xbe8
-#define rPm_Rx0_AntB 0xbec
-#define rPm_Rx1_AntB 0xbf0
-#define rPm_Rx2_AntB 0xbf4
-#define rPm_Rx3_AntB 0xbf8
-
-//
-// 6. PageC(0xC00)
-//
-#define rOFDM0_LSTF 0xc00
-
-#define rOFDM0_TRxPathEnable 0xc04
-#define rOFDM0_TRMuxPar 0xc08
-#define rOFDM0_TRSWIsolation 0xc0c
-
-#define rOFDM0_XARxAFE 0xc10 //RxIQ DC offset, Rx digital filter, DC notch filter
-#define rOFDM0_XARxIQImbalance 0xc14 //RxIQ imblance matrix
-#define rOFDM0_XBRxAFE 0xc18
-#define rOFDM0_XBRxIQImbalance 0xc1c
-#define rOFDM0_XCRxAFE 0xc20
-#define rOFDM0_XCRxIQImbalance 0xc24
-#define rOFDM0_XDRxAFE 0xc28
-#define rOFDM0_XDRxIQImbalance 0xc2c
-
-#define rOFDM0_RxDetector1 0xc30 //PD,BW & SBD // DM tune init gain
-#define rOFDM0_RxDetector2 0xc34 //SBD & Fame Sync.
-#define rOFDM0_RxDetector3 0xc38 //Frame Sync.
-#define rOFDM0_RxDetector4 0xc3c //PD, SBD, Frame Sync & Short-GI
-
-#define rOFDM0_RxDSP 0xc40 //Rx Sync Path
-#define rOFDM0_CFOandDAGC 0xc44 //CFO & DAGC
-#define rOFDM0_CCADropThreshold 0xc48 //CCA Drop threshold
-#define rOFDM0_ECCAThreshold 0xc4c // energy CCA
-
-#define rOFDM0_XAAGCCore1 0xc50 // DIG
-#define rOFDM0_XAAGCCore2 0xc54
-#define rOFDM0_XBAGCCore1 0xc58
-#define rOFDM0_XBAGCCore2 0xc5c
-#define rOFDM0_XCAGCCore1 0xc60
-#define rOFDM0_XCAGCCore2 0xc64
-#define rOFDM0_XDAGCCore1 0xc68
-#define rOFDM0_XDAGCCore2 0xc6c
-
-#define rOFDM0_AGCParameter1 0xc70
-#define rOFDM0_AGCParameter2 0xc74
-#define rOFDM0_AGCRSSITable 0xc78
-#define rOFDM0_HTSTFAGC 0xc7c
-
-#define rOFDM0_XATxIQImbalance 0xc80 // TX PWR TRACK and DIG
-#define rOFDM0_XATxAFE 0xc84
-#define rOFDM0_XBTxIQImbalance 0xc88
-#define rOFDM0_XBTxAFE 0xc8c
-#define rOFDM0_XCTxIQImbalance 0xc90
-#define rOFDM0_XCTxAFE 0xc94
-#define rOFDM0_XDTxIQImbalance 0xc98
-#define rOFDM0_XDTxAFE 0xc9c
-
-#define rOFDM0_RxIQExtAnta 0xca0
-#define rOFDM0_TxCoeff1 0xca4
-#define rOFDM0_TxCoeff2 0xca8
-#define rOFDM0_TxCoeff3 0xcac
-#define rOFDM0_TxCoeff4 0xcb0
-#define rOFDM0_TxCoeff5 0xcb4
-#define rOFDM0_TxCoeff6 0xcb8
-#define rOFDM0_RxHPParameter 0xce0
-#define rOFDM0_TxPseudoNoiseWgt 0xce4
-#define rOFDM0_FrameSync 0xcf0
-#define rOFDM0_DFSReport 0xcf4
-
-//
-// 7. PageD(0xD00)
-//
-#define rOFDM1_LSTF 0xd00
-#define rOFDM1_TRxPathEnable 0xd04
-
-#define rOFDM1_CFO 0xd08 // No setting now
-#define rOFDM1_CSI1 0xd10
-#define rOFDM1_SBD 0xd14
-#define rOFDM1_CSI2 0xd18
-#define rOFDM1_CFOTracking 0xd2c
-#define rOFDM1_TRxMesaure1 0xd34
-#define rOFDM1_IntfDet 0xd3c
-#define rOFDM1_PseudoNoiseStateAB 0xd50
-#define rOFDM1_PseudoNoiseStateCD 0xd54
-#define rOFDM1_RxPseudoNoiseWgt 0xd58
-
-#define rOFDM_PHYCounter1 0xda0 //cca, parity fail
-#define rOFDM_PHYCounter2 0xda4 //rate illegal, crc8 fail
-#define rOFDM_PHYCounter3 0xda8 //MCS not support
-
-#define rOFDM_ShortCFOAB 0xdac // No setting now
-#define rOFDM_ShortCFOCD 0xdb0
-#define rOFDM_LongCFOAB 0xdb4
-#define rOFDM_LongCFOCD 0xdb8
-#define rOFDM_TailCFOAB 0xdbc
-#define rOFDM_TailCFOCD 0xdc0
-#define rOFDM_PWMeasure1 0xdc4
-#define rOFDM_PWMeasure2 0xdc8
-#define rOFDM_BWReport 0xdcc
-#define rOFDM_AGCReport 0xdd0
-#define rOFDM_RxSNR 0xdd4
-#define rOFDM_RxEVMCSI 0xdd8
-#define rOFDM_SIGReport 0xddc
-
-
-//
-// 8. PageE(0xE00)
-//
-#define rTxAGC_A_Rate18_06 0xe00
-#define rTxAGC_A_Rate54_24 0xe04
-#define rTxAGC_A_CCK1_Mcs32 0xe08
-#define rTxAGC_A_Mcs03_Mcs00 0xe10
-#define rTxAGC_A_Mcs07_Mcs04 0xe14
-#define rTxAGC_A_Mcs11_Mcs08 0xe18
-#define rTxAGC_A_Mcs15_Mcs12 0xe1c
-
-#define rTxAGC_B_Rate18_06 0x830
-#define rTxAGC_B_Rate54_24 0x834
-#define rTxAGC_B_CCK1_55_Mcs32 0x838
-#define rTxAGC_B_Mcs03_Mcs00 0x83c
-#define rTxAGC_B_Mcs07_Mcs04 0x848
-#define rTxAGC_B_Mcs11_Mcs08 0x84c
-#define rTxAGC_B_Mcs15_Mcs12 0x868
-#define rTxAGC_B_CCK11_A_CCK2_11 0x86c
-
-#define rFPGA0_IQK 0xe28
-#define rTx_IQK_Tone_A 0xe30
-#define rRx_IQK_Tone_A 0xe34
-#define rTx_IQK_PI_A 0xe38
-#define rRx_IQK_PI_A 0xe3c
-
-#define rTx_IQK 0xe40
-#define rRx_IQK 0xe44
-#define rIQK_AGC_Pts 0xe48
-#define rIQK_AGC_Rsp 0xe4c
-#define rTx_IQK_Tone_B 0xe50
-#define rRx_IQK_Tone_B 0xe54
-#define rTx_IQK_PI_B 0xe58
-#define rRx_IQK_PI_B 0xe5c
-#define rIQK_AGC_Cont 0xe60
-
-#define rBlue_Tooth 0xe6c
-#define rRx_Wait_CCA 0xe70
-#define rTx_CCK_RFON 0xe74
-#define rTx_CCK_BBON 0xe78
-#define rTx_OFDM_RFON 0xe7c
-#define rTx_OFDM_BBON 0xe80
-#define rTx_To_Rx 0xe84
-#define rTx_To_Tx 0xe88
-#define rRx_CCK 0xe8c
-
-#define rTx_Power_Before_IQK_A 0xe94
-#define rTx_Power_After_IQK_A 0xe9c
-
-#define rRx_Power_Before_IQK_A 0xea0
-#define rRx_Power_Before_IQK_A_2 0xea4
-#define rRx_Power_After_IQK_A 0xea8
-#define rRx_Power_After_IQK_A_2 0xeac
-
-#define rTx_Power_Before_IQK_B 0xeb4
-#define rTx_Power_After_IQK_B 0xebc
-
-#define rRx_Power_Before_IQK_B 0xec0
-#define rRx_Power_Before_IQK_B_2 0xec4
-#define rRx_Power_After_IQK_B 0xec8
-#define rRx_Power_After_IQK_B_2 0xecc
-
-#define rRx_OFDM 0xed0
-#define rRx_Wait_RIFS 0xed4
-#define rRx_TO_Rx 0xed8
-#define rStandby 0xedc
-#define rSleep 0xee0
-#define rPMPD_ANAEN 0xeec
-
-//
-// 7. RF Register 0x00-0x2E (RF 8256)
-// RF-0222D 0x00-3F
-//
-//Zebra1
-#define rZebra1_HSSIEnable 0x0 // Useless now
-#define rZebra1_TRxEnable1 0x1
-#define rZebra1_TRxEnable2 0x2
-#define rZebra1_AGC 0x4
-#define rZebra1_ChargePump 0x5
-#define rZebra1_Channel 0x7 // RF channel switch
-
-//#endif
-#define rZebra1_TxGain 0x8 // Useless now
-#define rZebra1_TxLPF 0x9
-#define rZebra1_RxLPF 0xb
-#define rZebra1_RxHPFCorner 0xc
-
-//Zebra4
-#define rGlobalCtrl 0 // Useless now
-#define rRTL8256_TxLPF 19
-#define rRTL8256_RxLPF 11
-
-//RTL8258
-#define rRTL8258_TxLPF 0x11 // Useless now
-#define rRTL8258_RxLPF 0x13
-#define rRTL8258_RSSILPF 0xa
-
-//
-// RL6052 Register definition
-//
-#define RF_AC 0x00 //
-
-#define RF_IQADJ_G1 0x01 //
-#define RF_IQADJ_G2 0x02 //
-#define RF_BS_PA_APSET_G1_G4 0x03
-#define RF_BS_PA_APSET_G5_G8 0x04
-#define RF_POW_TRSW 0x05 //
-
-#define RF_GAIN_RX 0x06 //
-#define RF_GAIN_TX 0x07 //
-
-#define RF_TXM_IDAC 0x08 //
-#define RF_IPA_G 0x09 //
-#define RF_TXBIAS_G 0x0A
-#define RF_TXPA_AG 0x0B
-#define RF_IPA_A 0x0C //
-#define RF_TXBIAS_A 0x0D
-#define RF_BS_PA_APSET_G9_G11 0x0E
-#define RF_BS_IQGEN 0x0F //
-
-#define RF_MODE1 0x10 //
-#define RF_MODE2 0x11 //
-
-#define RF_RX_AGC_HP 0x12 //
-#define RF_TX_AGC 0x13 //
-#define RF_BIAS 0x14 //
-#define RF_IPA 0x15 //
-#define RF_TXBIAS 0x16 //
-#define RF_POW_ABILITY 0x17 //
-#define RF_MODE_AG 0x18 //
-#define rRfChannel 0x18 // RF channel and BW switch
-#define RF_CHNLBW 0x18 // RF channel and BW switch
-#define RF_TOP 0x19 //
-
-#define RF_RX_G1 0x1A //
-#define RF_RX_G2 0x1B //
-
-#define RF_RX_BB2 0x1C //
-#define RF_RX_BB1 0x1D //
-
-#define RF_RCK1 0x1E //
-#define RF_RCK2 0x1F //
-
-#define RF_TX_G1 0x20 //
-#define RF_TX_G2 0x21 //
-#define RF_TX_G3 0x22 //
-
-#define RF_TX_BB1 0x23 //
-
-#define RF_T_METER 0x42 //
-
-#define RF_SYN_G1 0x25 // RF TX Power control
-#define RF_SYN_G2 0x26 // RF TX Power control
-#define RF_SYN_G3 0x27 // RF TX Power control
-#define RF_SYN_G4 0x28 // RF TX Power control
-#define RF_SYN_G5 0x29 // RF TX Power control
-#define RF_SYN_G6 0x2A // RF TX Power control
-#define RF_SYN_G7 0x2B // RF TX Power control
-#define RF_SYN_G8 0x2C // RF TX Power control
-
-#define RF_RCK_OS 0x30 // RF TX PA control
-
-#define RF_TXPA_G1 0x31 // RF TX PA control
-#define RF_TXPA_G2 0x32 // RF TX PA control
-#define RF_TXPA_G3 0x33 // RF TX PA control
-#define RF_LOBF_9 0x38
-#define RF_RXRF_A3 0x3C //
-#define RF_TRSW 0x3F
-
-#define RF_TXRF_A2 0x41
-#define RF_TXPA_G4 0x46
-#define RF_TXPA_A4 0x4B
-
-//
-//Bit Mask
-//
-// 1. Page1(0x100)
-#define bBBResetB 0x100 // Useless now?
-#define bGlobalResetB 0x200
-#define bOFDMTxStart 0x4
-#define bCCKTxStart 0x8
-#define bCRC32Debug 0x100
-#define bPMACLoopback 0x10
-#define bTxLSIG 0xffffff
-#define bOFDMTxRate 0xf
-#define bOFDMTxReserved 0x10
-#define bOFDMTxLength 0x1ffe0
-#define bOFDMTxParity 0x20000
-#define bTxHTSIG1 0xffffff
-#define bTxHTMCSRate 0x7f
-#define bTxHTBW 0x80
-#define bTxHTLength 0xffff00
-#define bTxHTSIG2 0xffffff
-#define bTxHTSmoothing 0x1
-#define bTxHTSounding 0x2
-#define bTxHTReserved 0x4
-#define bTxHTAggreation 0x8
-#define bTxHTSTBC 0x30
-#define bTxHTAdvanceCoding 0x40
-#define bTxHTShortGI 0x80
-#define bTxHTNumberHT_LTF 0x300
-#define bTxHTCRC8 0x3fc00
-#define bCounterReset 0x10000
-#define bNumOfOFDMTx 0xffff
-#define bNumOfCCKTx 0xffff0000
-#define bTxIdleInterval 0xffff
-#define bOFDMService 0xffff0000
-#define bTxMACHeader 0xffffffff
-#define bTxDataInit 0xff
-#define bTxHTMode 0x100
-#define bTxDataType 0x30000
-#define bTxRandomSeed 0xffffffff
-#define bCCKTxPreamble 0x1
-#define bCCKTxSFD 0xffff0000
-#define bCCKTxSIG 0xff
-#define bCCKTxService 0xff00
-#define bCCKLengthExt 0x8000
-#define bCCKTxLength 0xffff0000
-#define bCCKTxCRC16 0xffff
-#define bCCKTxStatus 0x1
-#define bOFDMTxStatus 0x2
-
-#define IS_BB_REG_OFFSET_92S(_Offset) ((_Offset >= 0x800) && (_Offset <= 0xfff))
-
-// 2. Page8(0x800)
-#define bRFMOD 0x1 // Reg 0x800 rFPGA0_RFMOD
-#define bJapanMode 0x2
-#define bCCKTxSC 0x30
-#define bCCKEn 0x1000000
-#define bOFDMEn 0x2000000
-
-#define bOFDMRxADCPhase 0x10000 // Useless now
-#define bOFDMTxDACPhase 0x40000
-#define bXATxAGC 0x3f
-
-#define bAntennaSelect 0x0300
-
-#define bXBTxAGC 0xf00 // Reg 80c rFPGA0_TxGainStage
-#define bXCTxAGC 0xf000
-#define bXDTxAGC 0xf0000
-
-#define bPAStart 0xf0000000 // Useless now
-#define bTRStart 0x00f00000
-#define bRFStart 0x0000f000
-#define bBBStart 0x000000f0
-#define bBBCCKStart 0x0000000f
-#define bPAEnd 0xf //Reg0x814
-#define bTREnd 0x0f000000
-#define bRFEnd 0x000f0000
-#define bCCAMask 0x000000f0 //T2R
-#define bR2RCCAMask 0x00000f00
-#define bHSSI_R2TDelay 0xf8000000
-#define bHSSI_T2RDelay 0xf80000
-#define bContTxHSSI 0x400 //chane gain at continue Tx
-#define bIGFromCCK 0x200
-#define bAGCAddress 0x3f
-#define bRxHPTx 0x7000
-#define bRxHPT2R 0x38000
-#define bRxHPCCKIni 0xc0000
-#define bAGCTxCode 0xc00000
-#define bAGCRxCode 0x300000
-
-#define b3WireDataLength 0x800 // Reg 0x820~84f rFPGA0_XA_HSSIParameter1
-#define b3WireAddressLength 0x400
-
-#define b3WireRFPowerDown 0x1 // Useless now
-//#define bHWSISelect 0x8
-#define b5GPAPEPolarity 0x40000000
-#define b2GPAPEPolarity 0x80000000
-#define bRFSW_TxDefaultAnt 0x3
-#define bRFSW_TxOptionAnt 0x30
-#define bRFSW_RxDefaultAnt 0x300
-#define bRFSW_RxOptionAnt 0x3000
-#define bRFSI_3WireData 0x1
-#define bRFSI_3WireClock 0x2
-#define bRFSI_3WireLoad 0x4
-#define bRFSI_3WireRW 0x8
-#define bRFSI_3Wire 0xf
-
-#define bRFSI_RFENV 0x10 // Reg 0x870 rFPGA0_XAB_RFInterfaceSW
-
-#define bRFSI_TRSW 0x20 // Useless now
-#define bRFSI_TRSWB 0x40
-#define bRFSI_ANTSW 0x100
-#define bRFSI_ANTSWB 0x200
-#define bRFSI_PAPE 0x400
-#define bRFSI_PAPE5G 0x800
-#define bBandSelect 0x1
-#define bHTSIG2_GI 0x80
-#define bHTSIG2_Smoothing 0x01
-#define bHTSIG2_Sounding 0x02
-#define bHTSIG2_Aggreaton 0x08
-#define bHTSIG2_STBC 0x30
-#define bHTSIG2_AdvCoding 0x40
-#define bHTSIG2_NumOfHTLTF 0x300
-#define bHTSIG2_CRC8 0x3fc
-#define bHTSIG1_MCS 0x7f
-#define bHTSIG1_BandWidth 0x80
-#define bHTSIG1_HTLength 0xffff
-#define bLSIG_Rate 0xf
-#define bLSIG_Reserved 0x10
-#define bLSIG_Length 0x1fffe
-#define bLSIG_Parity 0x20
-#define bCCKRxPhase 0x4
-
-#define bLSSIReadAddress 0x7f800000 // T65 RF
-
-#define bLSSIReadEdge 0x80000000 //LSSI "Read" edge signal
-
-#define bLSSIReadBackData 0xfffff // T65 RF
-
-#define bLSSIReadOKFlag 0x1000 // Useless now
-#define bCCKSampleRate 0x8 //0: 44MHz, 1:88MHz
-#define bRegulator0Standby 0x1
-#define bRegulatorPLLStandby 0x2
-#define bRegulator1Standby 0x4
-#define bPLLPowerUp 0x8
-#define bDPLLPowerUp 0x10
-#define bDA10PowerUp 0x20
-#define bAD7PowerUp 0x200
-#define bDA6PowerUp 0x2000
-#define bXtalPowerUp 0x4000
-#define b40MDClkPowerUP 0x8000
-#define bDA6DebugMode 0x20000
-#define bDA6Swing 0x380000
-
-#define bADClkPhase 0x4000000 // Reg 0x880 rFPGA0_AnalogParameter1 20/40 CCK support switch 40/80 BB MHZ
-
-#define b80MClkDelay 0x18000000 // Useless
-#define bAFEWatchDogEnable 0x20000000
-
-#define bXtalCap01 0xc0000000 // Reg 0x884 rFPGA0_AnalogParameter2 Crystal cap
-#define bXtalCap23 0x3
-#define bXtalCap92x 0x0f000000
-#define bXtalCap 0x0f000000
-
-#define bIntDifClkEnable 0x400 // Useless
-#define bExtSigClkEnable 0x800
-#define bBandgapMbiasPowerUp 0x10000
-#define bAD11SHGain 0xc0000
-#define bAD11InputRange 0x700000
-#define bAD11OPCurrent 0x3800000
-#define bIPathLoopback 0x4000000
-#define bQPathLoopback 0x8000000
-#define bAFELoopback 0x10000000
-#define bDA10Swing 0x7e0
-#define bDA10Reverse 0x800
-#define bDAClkSource 0x1000
-#define bAD7InputRange 0x6000
-#define bAD7Gain 0x38000
-#define bAD7OutputCMMode 0x40000
-#define bAD7InputCMMode 0x380000
-#define bAD7Current 0xc00000
-#define bRegulatorAdjust 0x7000000
-#define bAD11PowerUpAtTx 0x1
-#define bDA10PSAtTx 0x10
-#define bAD11PowerUpAtRx 0x100
-#define bDA10PSAtRx 0x1000
-#define bCCKRxAGCFormat 0x200
-#define bPSDFFTSamplepPoint 0xc000
-#define bPSDAverageNum 0x3000
-#define bIQPathControl 0xc00
-#define bPSDFreq 0x3ff
-#define bPSDAntennaPath 0x30
-#define bPSDIQSwitch 0x40
-#define bPSDRxTrigger 0x400000
-#define bPSDTxTrigger 0x80000000
-#define bPSDSineToneScale 0x7f000000
-#define bPSDReport 0xffff
-
-// 3. Page9(0x900)
-#define bOFDMTxSC 0x30000000 // Useless
-#define bCCKTxOn 0x1
-#define bOFDMTxOn 0x2
-#define bDebugPage 0xfff //reset debug page and also HWord, LWord
-#define bDebugItem 0xff //reset debug page and LWord
-#define bAntL 0x10
-#define bAntNonHT 0x100
-#define bAntHT1 0x1000
-#define bAntHT2 0x10000
-#define bAntHT1S1 0x100000
-#define bAntNonHTS1 0x1000000
-
-// 4. PageA(0xA00)
-#define bCCKBBMode 0x3 // Useless
-#define bCCKTxPowerSaving 0x80
-#define bCCKRxPowerSaving 0x40
-
-#define bCCKSideBand 0x10 // Reg 0xa00 rCCK0_System 20/40 switch
-
-#define bCCKScramble 0x8 // Useless
-#define bCCKAntDiversity 0x8000
-#define bCCKCarrierRecovery 0x4000
-#define bCCKTxRate 0x3000
-#define bCCKDCCancel 0x0800
-#define bCCKISICancel 0x0400
-#define bCCKMatchFilter 0x0200
-#define bCCKEqualizer 0x0100
-#define bCCKPreambleDetect 0x800000
-#define bCCKFastFalseCCA 0x400000
-#define bCCKChEstStart 0x300000
-#define bCCKCCACount 0x080000
-#define bCCKcs_lim 0x070000
-#define bCCKBistMode 0x80000000
-#define bCCKCCAMask 0x40000000
-#define bCCKTxDACPhase 0x4
-#define bCCKRxADCPhase 0x20000000 //r_rx_clk
-#define bCCKr_cp_mode0 0x0100
-#define bCCKTxDCOffset 0xf0
-#define bCCKRxDCOffset 0xf
-#define bCCKCCAMode 0xc000
-#define bCCKFalseCS_lim 0x3f00
-#define bCCKCS_ratio 0xc00000
-#define bCCKCorgBit_sel 0x300000
-#define bCCKPD_lim 0x0f0000
-#define bCCKNewCCA 0x80000000
-#define bCCKRxHPofIG 0x8000
-#define bCCKRxIG 0x7f00
-#define bCCKLNAPolarity 0x800000
-#define bCCKRx1stGain 0x7f0000
-#define bCCKRFExtend 0x20000000 //CCK Rx Iinital gain polarity
-#define bCCKRxAGCSatLevel 0x1f000000
-#define bCCKRxAGCSatCount 0xe0
-#define bCCKRxRFSettle 0x1f //AGCsamp_dly
-#define bCCKFixedRxAGC 0x8000
-//#define bCCKRxAGCFormat 0x4000 //remove to HSSI register 0x824
-#define bCCKAntennaPolarity 0x2000
-#define bCCKTxFilterType 0x0c00
-#define bCCKRxAGCReportType 0x0300
-#define bCCKRxDAGCEn 0x80000000
-#define bCCKRxDAGCPeriod 0x20000000
-#define bCCKRxDAGCSatLevel 0x1f000000
-#define bCCKTimingRecovery 0x800000
-#define bCCKTxC0 0x3f0000
-#define bCCKTxC1 0x3f000000
-#define bCCKTxC2 0x3f
-#define bCCKTxC3 0x3f00
-#define bCCKTxC4 0x3f0000
-#define bCCKTxC5 0x3f000000
-#define bCCKTxC6 0x3f
-#define bCCKTxC7 0x3f00
-#define bCCKDebugPort 0xff0000
-#define bCCKDACDebug 0x0f000000
-#define bCCKFalseAlarmEnable 0x8000
-#define bCCKFalseAlarmRead 0x4000
-#define bCCKTRSSI 0x7f
-#define bCCKRxAGCReport 0xfe
-#define bCCKRxReport_AntSel 0x80000000
-#define bCCKRxReport_MFOff 0x40000000
-#define bCCKRxRxReport_SQLoss 0x20000000
-#define bCCKRxReport_Pktloss 0x10000000
-#define bCCKRxReport_Lockedbit 0x08000000
-#define bCCKRxReport_RateError 0x04000000
-#define bCCKRxReport_RxRate 0x03000000
-#define bCCKRxFACounterLower 0xff
-#define bCCKRxFACounterUpper 0xff000000
-#define bCCKRxHPAGCStart 0xe000
-#define bCCKRxHPAGCFinal 0x1c00
-#define bCCKRxFalseAlarmEnable 0x8000
-#define bCCKFACounterFreeze 0x4000
-#define bCCKTxPathSel 0x10000000
-#define bCCKDefaultRxPath 0xc000000
-#define bCCKOptionRxPath 0x3000000
-
-// 5. PageC(0xC00)
-#define bNumOfSTF 0x3 // Useless
-#define bShift_L 0xc0
-#define bGI_TH 0xc
-#define bRxPathA 0x1
-#define bRxPathB 0x2
-#define bRxPathC 0x4
-#define bRxPathD 0x8
-#define bTxPathA 0x1
-#define bTxPathB 0x2
-#define bTxPathC 0x4
-#define bTxPathD 0x8
-#define bTRSSIFreq 0x200
-#define bADCBackoff 0x3000
-#define bDFIRBackoff 0xc000
-#define bTRSSILatchPhase 0x10000
-#define bRxIDCOffset 0xff
-#define bRxQDCOffset 0xff00
-#define bRxDFIRMode 0x1800000
-#define bRxDCNFType 0xe000000
-#define bRXIQImb_A 0x3ff
-#define bRXIQImb_B 0xfc00
-#define bRXIQImb_C 0x3f0000
-#define bRXIQImb_D 0xffc00000
-#define bDC_dc_Notch 0x60000
-#define bRxNBINotch 0x1f000000
-#define bPD_TH 0xf
-#define bPD_TH_Opt2 0xc000
-#define bPWED_TH 0x700
-#define bIfMF_Win_L 0x800
-#define bPD_Option 0x1000
-#define bMF_Win_L 0xe000
-#define bBW_Search_L 0x30000
-#define bwin_enh_L 0xc0000
-#define bBW_TH 0x700000
-#define bED_TH2 0x3800000
-#define bBW_option 0x4000000
-#define bRatio_TH 0x18000000
-#define bWindow_L 0xe0000000
-#define bSBD_Option 0x1
-#define bFrame_TH 0x1c
-#define bFS_Option 0x60
-#define bDC_Slope_check 0x80
-#define bFGuard_Counter_DC_L 0xe00
-#define bFrame_Weight_Short 0x7000
-#define bSub_Tune 0xe00000
-#define bFrame_DC_Length 0xe000000
-#define bSBD_start_offset 0x30000000
-#define bFrame_TH_2 0x7
-#define bFrame_GI2_TH 0x38
-#define bGI2_Sync_en 0x40
-#define bSarch_Short_Early 0x300
-#define bSarch_Short_Late 0xc00
-#define bSarch_GI2_Late 0x70000
-#define bCFOAntSum 0x1
-#define bCFOAcc 0x2
-#define bCFOStartOffset 0xc
-#define bCFOLookBack 0x70
-#define bCFOSumWeight 0x80
-#define bDAGCEnable 0x10000
-#define bTXIQImb_A 0x3ff
-#define bTXIQImb_B 0xfc00
-#define bTXIQImb_C 0x3f0000
-#define bTXIQImb_D 0xffc00000
-#define bTxIDCOffset 0xff
-#define bTxQDCOffset 0xff00
-#define bTxDFIRMode 0x10000
-#define bTxPesudoNoiseOn 0x4000000
-#define bTxPesudoNoise_A 0xff
-#define bTxPesudoNoise_B 0xff00
-#define bTxPesudoNoise_C 0xff0000
-#define bTxPesudoNoise_D 0xff000000
-#define bCCADropOption 0x20000
-#define bCCADropThres 0xfff00000
-#define bEDCCA_H 0xf
-#define bEDCCA_L 0xf0
-#define bLambda_ED 0x300
-#define bRxInitialGain 0x7f
-#define bRxAntDivEn 0x80
-#define bRxAGCAddressForLNA 0x7f00
-#define bRxHighPowerFlow 0x8000
-#define bRxAGCFreezeThres 0xc0000
-#define bRxFreezeStep_AGC1 0x300000
-#define bRxFreezeStep_AGC2 0xc00000
-#define bRxFreezeStep_AGC3 0x3000000
-#define bRxFreezeStep_AGC0 0xc000000
-#define bRxRssi_Cmp_En 0x10000000
-#define bRxQuickAGCEn 0x20000000
-#define bRxAGCFreezeThresMode 0x40000000
-#define bRxOverFlowCheckType 0x80000000
-#define bRxAGCShift 0x7f
-#define bTRSW_Tri_Only 0x80
-#define bPowerThres 0x300
-#define bRxAGCEn 0x1
-#define bRxAGCTogetherEn 0x2
-#define bRxAGCMin 0x4
-#define bRxHP_Ini 0x7
-#define bRxHP_TRLNA 0x70
-#define bRxHP_RSSI 0x700
-#define bRxHP_BBP1 0x7000
-#define bRxHP_BBP2 0x70000
-#define bRxHP_BBP3 0x700000
-#define bRSSI_H 0x7f0000 //the threshold for high power
-#define bRSSI_Gen 0x7f000000 //the threshold for ant diversity
-#define bRxSettle_TRSW 0x7
-#define bRxSettle_LNA 0x38
-#define bRxSettle_RSSI 0x1c0
-#define bRxSettle_BBP 0xe00
-#define bRxSettle_RxHP 0x7000
-#define bRxSettle_AntSW_RSSI 0x38000
-#define bRxSettle_AntSW 0xc0000
-#define bRxProcessTime_DAGC 0x300000
-#define bRxSettle_HSSI 0x400000
-#define bRxProcessTime_BBPPW 0x800000
-#define bRxAntennaPowerShift 0x3000000
-#define bRSSITableSelect 0xc000000
-#define bRxHP_Final 0x7000000
-#define bRxHTSettle_BBP 0x7
-#define bRxHTSettle_HSSI 0x8
-#define bRxHTSettle_RxHP 0x70
-#define bRxHTSettle_BBPPW 0x80
-#define bRxHTSettle_Idle 0x300
-#define bRxHTSettle_Reserved 0x1c00
-#define bRxHTRxHPEn 0x8000
-#define bRxHTAGCFreezeThres 0x30000
-#define bRxHTAGCTogetherEn 0x40000
-#define bRxHTAGCMin 0x80000
-#define bRxHTAGCEn 0x100000
-#define bRxHTDAGCEn 0x200000
-#define bRxHTRxHP_BBP 0x1c00000
-#define bRxHTRxHP_Final 0xe0000000
-#define bRxPWRatioTH 0x3
-#define bRxPWRatioEn 0x4
-#define bRxMFHold 0x3800
-#define bRxPD_Delay_TH1 0x38
-#define bRxPD_Delay_TH2 0x1c0
-#define bRxPD_DC_COUNT_MAX 0x600
-//#define bRxMF_Hold 0x3800
-#define bRxPD_Delay_TH 0x8000
-#define bRxProcess_Delay 0xf0000
-#define bRxSearchrange_GI2_Early 0x700000
-#define bRxFrame_Guard_Counter_L 0x3800000
-#define bRxSGI_Guard_L 0xc000000
-#define bRxSGI_Search_L 0x30000000
-#define bRxSGI_TH 0xc0000000
-#define bDFSCnt0 0xff
-#define bDFSCnt1 0xff00
-#define bDFSFlag 0xf0000
-#define bMFWeightSum 0x300000
-#define bMinIdxTH 0x7f000000
-#define bDAFormat 0x40000
-#define bTxChEmuEnable 0x01000000
-#define bTRSWIsolation_A 0x7f
-#define bTRSWIsolation_B 0x7f00
-#define bTRSWIsolation_C 0x7f0000
-#define bTRSWIsolation_D 0x7f000000
-#define bExtLNAGain 0x7c00
-
-// 6. PageE(0xE00)
-#define bSTBCEn 0x4 // Useless
-#define bAntennaMapping 0x10
-#define bNss 0x20
-#define bCFOAntSumD 0x200
-#define bPHYCounterReset 0x8000000
-#define bCFOReportGet 0x4000000
-#define bOFDMContinueTx 0x10000000
-#define bOFDMSingleCarrier 0x20000000
-#define bOFDMSingleTone 0x40000000
-//#define bRxPath1 0x01
-//#define bRxPath2 0x02
-//#define bRxPath3 0x04
-//#define bRxPath4 0x08
-//#define bTxPath1 0x10
-//#define bTxPath2 0x20
-#define bHTDetect 0x100
-#define bCFOEn 0x10000
-#define bCFOValue 0xfff00000
-#define bSigTone_Re 0x3f
-#define bSigTone_Im 0x7f00
-#define bCounter_CCA 0xffff
-#define bCounter_ParityFail 0xffff0000
-#define bCounter_RateIllegal 0xffff
-#define bCounter_CRC8Fail 0xffff0000
-#define bCounter_MCSNoSupport 0xffff
-#define bCounter_FastSync 0xffff
-#define bShortCFO 0xfff
-#define bShortCFOTLength 12 //total
-#define bShortCFOFLength 11 //fraction
-#define bLongCFO 0x7ff
-#define bLongCFOTLength 11
-#define bLongCFOFLength 11
-#define bTailCFO 0x1fff
-#define bTailCFOTLength 13
-#define bTailCFOFLength 12
-#define bmax_en_pwdB 0xffff
-#define bCC_power_dB 0xffff0000
-#define bnoise_pwdB 0xffff
-#define bPowerMeasTLength 10
-#define bPowerMeasFLength 3
-#define bRx_HT_BW 0x1
-#define bRxSC 0x6
-#define bRx_HT 0x8
-#define bNB_intf_det_on 0x1
-#define bIntf_win_len_cfg 0x30
-#define bNB_Intf_TH_cfg 0x1c0
-#define bRFGain 0x3f
-#define bTableSel 0x40
-#define bTRSW 0x80
-#define bRxSNR_A 0xff
-#define bRxSNR_B 0xff00
-#define bRxSNR_C 0xff0000
-#define bRxSNR_D 0xff000000
-#define bSNREVMTLength 8
-#define bSNREVMFLength 1
-#define bCSI1st 0xff
-#define bCSI2nd 0xff00
-#define bRxEVM1st 0xff0000
-#define bRxEVM2nd 0xff000000
-#define bSIGEVM 0xff
-#define bPWDB 0xff00
-#define bSGIEN 0x10000
-
-#define bSFactorQAM1 0xf // Useless
-#define bSFactorQAM2 0xf0
-#define bSFactorQAM3 0xf00
-#define bSFactorQAM4 0xf000
-#define bSFactorQAM5 0xf0000
-#define bSFactorQAM6 0xf0000
-#define bSFactorQAM7 0xf00000
-#define bSFactorQAM8 0xf000000
-#define bSFactorQAM9 0xf0000000
-#define bCSIScheme 0x100000
-
-#define bNoiseLvlTopSet 0x3 // Useless
-#define bChSmooth 0x4
-#define bChSmoothCfg1 0x38
-#define bChSmoothCfg2 0x1c0
-#define bChSmoothCfg3 0xe00
-#define bChSmoothCfg4 0x7000
-#define bMRCMode 0x800000
-#define bTHEVMCfg 0x7000000
-
-#define bLoopFitType 0x1 // Useless
-#define bUpdCFO 0x40
-#define bUpdCFOOffData 0x80
-#define bAdvUpdCFO 0x100
-#define bAdvTimeCtrl 0x800
-#define bUpdClko 0x1000
-#define bFC 0x6000
-#define bTrackingMode 0x8000
-#define bPhCmpEnable 0x10000
-#define bUpdClkoLTF 0x20000
-#define bComChCFO 0x40000
-#define bCSIEstiMode 0x80000
-#define bAdvUpdEqz 0x100000
-#define bUChCfg 0x7000000
-#define bUpdEqz 0x8000000
-
-//Rx Pseduo noise
-#define bRxPesudoNoiseOn 0x20000000 // Useless
-#define bRxPesudoNoise_A 0xff
-#define bRxPesudoNoise_B 0xff00
-#define bRxPesudoNoise_C 0xff0000
-#define bRxPesudoNoise_D 0xff000000
-#define bPesudoNoiseState_A 0xffff
-#define bPesudoNoiseState_B 0xffff0000
-#define bPesudoNoiseState_C 0xffff
-#define bPesudoNoiseState_D 0xffff0000
-
-//7. RF Register
-//Zebra1
-#define bZebra1_HSSIEnable 0x8 // Useless
-#define bZebra1_TRxControl 0xc00
-#define bZebra1_TRxGainSetting 0x07f
-#define bZebra1_RxCorner 0xc00
-#define bZebra1_TxChargePump 0x38
-#define bZebra1_RxChargePump 0x7
-#define bZebra1_ChannelNum 0xf80
-#define bZebra1_TxLPFBW 0x400
-#define bZebra1_RxLPFBW 0x600
-
-//Zebra4
-#define bRTL8256RegModeCtrl1 0x100 // Useless
-#define bRTL8256RegModeCtrl0 0x40
-#define bRTL8256_TxLPFBW 0x18
-#define bRTL8256_RxLPFBW 0x600
-
-//RTL8258
-#define bRTL8258_TxLPFBW 0xc // Useless
-#define bRTL8258_RxLPFBW 0xc00
-#define bRTL8258_RSSILPFBW 0xc0
-
-
-//
-// Other Definition
-//
-
-//byte endable for sb_write
-#define bByte0 0x1 // Useless
-#define bByte1 0x2
-#define bByte2 0x4
-#define bByte3 0x8
-#define bWord0 0x3
-#define bWord1 0xc
-#define bDWord 0xf
-
-//for PutRegsetting & GetRegSetting BitMask
-#define bMaskByte0 0xff // Reg 0xc50 rOFDM0_XAAGCCore~0xC6f
-#define bMaskByte1 0xff00
-#define bMaskByte2 0xff0000
-#define bMaskByte3 0xff000000
-#define bMaskHWord 0xffff0000
-#define bMaskLWord 0x0000ffff
-#define bMaskDWord 0xffffffff
-#define bMask12Bits 0xfff
-#define bMaskH4Bits 0xf0000000
-#define bMaskOFDM_D 0xffc00000
-#define bMaskCCK 0x3f3f3f3f
-
-//for PutRFRegsetting & GetRFRegSetting BitMask
-//#define bMask12Bits 0xfffff // RF Reg mask bits
-//#define bMask20Bits 0xfffff // RF Reg mask bits T65 RF
-#define bRFRegOffsetMask 0xfffff
-//#define bRFRegOffsetMask 0xfff
-
-//MAC0 will wirte PHY1
-#define MAC0_ACCESS_PHY1 0x4000
-//MAC1 will wirte PHY0
-#define MAC1_ACCESS_PHY0 0x2000
-
-#define bEnable 0x1 // Useless
-#define bDisable 0x0
-
-#define LeftAntenna 0x0 // Useless
-#define RightAntenna 0x1
-
-#define tCheckTxStatus 500 //500ms // Useless
-#define tUpdateRxCounter 100 //100ms
-
-#define rateCCK 0 // Useless
-#define rateOFDM 1
-#define rateHT 2
-
-//define Register-End
-#define bPMAC_End 0x1ff // Useless
-#define bFPGAPHY0_End 0x8ff
-#define bFPGAPHY1_End 0x9ff
-#define bCCKPHY0_End 0xaff
-#define bOFDMPHY0_End 0xcff
-#define bOFDMPHY1_End 0xdff
-
-//define max debug item in each debug page
-//#define bMaxItem_FPGA_PHY0 0x9
-//#define bMaxItem_FPGA_PHY1 0x3
-//#define bMaxItem_PHY_11B 0x16
-//#define bMaxItem_OFDM_PHY0 0x29
-//#define bMaxItem_OFDM_PHY1 0x0
-
-#define bPMACControl 0x0 // Useless
-#define bWMACControl 0x1
-#define bWNICControl 0x2
-
-#define PathA 0x0 // Useless
-#define PathB 0x1
-#define PathC 0x2
-#define PathD 0x3
-
-/*--------------------------Define Parameters-------------------------------*/
-
-
-#endif //__INC_HAL8192SPHYREG_H
-
+ ******************************************************************************/
+/*****************************************************************************
+ *
+ * Module: __INC_HAL8192DPHYREG_H
+ *
+ *
+ * Note: 1. Define PMAC/BB register map
+ * 2. Define RF register map
+ * 3. PMAC/BB register bit mask.
+ * 4. RF reg bit mask.
+ * 5. Other BB/RF relative definition.
+ *
+ *
+ * Export: Constants, macro, functions(API), global variables(None).
+ *
+ * Abbrev:
+ *
+ * History:
+ * Data Who Remark
+ * 08/07/2007 MHC 1. Porting from 9x series PHYCFG.h.
+ * 2. Reorganize code architecture.
+ * 09/25/2008 MH 1. Add RL6052 register definition
+ *
+ *****************************************************************************/
+#ifndef __INC_HAL8192DPHYREG_H
+#define __INC_HAL8192DPHYREG_H
+
+
+/*--------------------------Define Parameters-------------------------------*/
+
+//============================================================
+// 8192S Regsiter offset definition
+//============================================================
+
+//
+// BB-PHY register PMAC 0x100 PHY 0x800 - 0xEFF
+// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF
+// 2. 0x800/0x900/0xA00/0xC00/0xD00/0xE00
+// 3. RF register 0x00-2E
+// 4. Bit Mask for BB/RF register
+// 5. Other defintion for BB/RF R/W
+//
+
+
+//
+// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF
+// 1. Page1(0x100)
+//
+#define rPMAC_Reset 0x100
+#define rPMAC_TxStart 0x104
+#define rPMAC_TxLegacySIG 0x108
+#define rPMAC_TxHTSIG1 0x10c
+#define rPMAC_TxHTSIG2 0x110
+#define rPMAC_PHYDebug 0x114
+#define rPMAC_TxPacketNum 0x118
+#define rPMAC_TxIdle 0x11c
+#define rPMAC_TxMACHeader0 0x120
+#define rPMAC_TxMACHeader1 0x124
+#define rPMAC_TxMACHeader2 0x128
+#define rPMAC_TxMACHeader3 0x12c
+#define rPMAC_TxMACHeader4 0x130
+#define rPMAC_TxMACHeader5 0x134
+#define rPMAC_TxDataType 0x138
+#define rPMAC_TxRandomSeed 0x13c
+#define rPMAC_CCKPLCPPreamble 0x140
+#define rPMAC_CCKPLCPHeader 0x144
+#define rPMAC_CCKCRC16 0x148
+#define rPMAC_OFDMRxCRC32OK 0x170
+#define rPMAC_OFDMRxCRC32Er 0x174
+#define rPMAC_OFDMRxParityEr 0x178
+#define rPMAC_OFDMRxCRC8Er 0x17c
+#define rPMAC_CCKCRxRC16Er 0x180
+#define rPMAC_CCKCRxRC32Er 0x184
+#define rPMAC_CCKCRxRC32OK 0x188
+#define rPMAC_TxStatus 0x18c
+
+//
+// 2. Page2(0x200)
+//
+// The following two definition are only used for USB interface.
+#define RF_BB_CMD_ADDR 0x02c0 // RF/BB read/write command address.
+#define RF_BB_CMD_DATA 0x02c4 // RF/BB read/write command data.
+
+//
+// 3. Page8(0x800)
+//
+#define rFPGA0_RFMOD 0x800 //RF mode & CCK TxSC // RF BW Setting??
+
+#define rFPGA0_TxInfo 0x804 // Status report??
+#define rFPGA0_PSDFunction 0x808
+
+#define rFPGA0_TxGainStage 0x80c // Set TX PWR init gain?
+
+#define rFPGA0_RFTiming1 0x810 // Useless now
+#define rFPGA0_RFTiming2 0x814
+
+#define rFPGA0_XA_HSSIParameter1 0x820 // RF 3 wire register
+#define rFPGA0_XA_HSSIParameter2 0x824
+#define rFPGA0_XB_HSSIParameter1 0x828
+#define rFPGA0_XB_HSSIParameter2 0x82c
+
+#define rFPGA0_XA_LSSIParameter 0x840
+#define rFPGA0_XB_LSSIParameter 0x844
+
+#define rFPGA0_RFWakeUpParameter 0x850 // Useless now
+#define rFPGA0_RFSleepUpParameter 0x854
+
+#define rFPGA0_XAB_SwitchControl 0x858 // RF Channel switch
+#define rFPGA0_XCD_SwitchControl 0x85c
+
+#define rFPGA0_XA_RFInterfaceOE 0x860 // RF Channel switch
+#define rFPGA0_XB_RFInterfaceOE 0x864
+
+#define rFPGA0_XAB_RFInterfaceSW 0x870 // RF Interface Software Control
+#define rFPGA0_XCD_RFInterfaceSW 0x874
+
+#define rFPGA0_XAB_RFParameter 0x878 // RF Parameter
+#define rFPGA0_XCD_RFParameter 0x87c
+
+#define rFPGA0_AnalogParameter1 0x880 // Crystal cap setting RF-R/W protection for parameter4??
+#define rFPGA0_AnalogParameter2 0x884
+#define rFPGA0_AnalogParameter3 0x888
+#define rFPGA0_AdDaClockEn 0x888 // enable ad/da clock1 for dual-phy
+#define rFPGA0_AnalogParameter4 0x88c
+
+#define rFPGA0_XA_LSSIReadBack 0x8a0 // Tranceiver LSSI Readback
+#define rFPGA0_XB_LSSIReadBack 0x8a4
+#define rFPGA0_XC_LSSIReadBack 0x8a8
+#define rFPGA0_XD_LSSIReadBack 0x8ac
+
+#define rFPGA0_PSDReport 0x8b4 // Useless now
+#define TransceiverA_HSPI_Readback 0x8b8 // Transceiver A HSPI Readback
+#define TransceiverB_HSPI_Readback 0x8bc // Transceiver B HSPI Readback
+#define rFPGA0_XAB_RFInterfaceRB 0x8e0 // Useless now // RF Interface Readback Value
+#define rFPGA0_XCD_RFInterfaceRB 0x8e4 // Useless now
+
+//
+// 4. Page9(0x900)
+//
+#define rFPGA1_RFMOD 0x900 //RF mode & OFDM TxSC // RF BW Setting??
+
+#define rFPGA1_TxBlock 0x904 // Useless now
+#define rFPGA1_DebugSelect 0x908 // Useless now
+#define rFPGA1_TxInfo 0x90c // Useless now // Status report??
+
+//
+// 5. PageA(0xA00)
+//
+// Set Control channel to upper or lower. These settings are required only for 40MHz
+#define rCCK0_System 0xa00
+
+#define rCCK0_AFESetting 0xa04 // Disable init gain now // Select RX path by RSSI
+#define rCCK0_CCA 0xa08 // Disable init gain now // Init gain
+
+#define rCCK0_RxAGC1 0xa0c //AGC default value, saturation level // Antenna Diversity, RX AGC, LNA Threshold, RX LNA Threshold useless now. Not the same as 90 series
+#define rCCK0_RxAGC2 0xa10 //AGC & DAGC
+
+#define rCCK0_RxHP 0xa14
+
+#define rCCK0_DSPParameter1 0xa18 //Timing recovery & Channel estimation threshold
+#define rCCK0_DSPParameter2 0xa1c //SQ threshold
+
+#define rCCK0_TxFilter1 0xa20
+#define rCCK0_TxFilter2 0xa24
+#define rCCK0_DebugPort 0xa28 //debug port and Tx filter3
+#define rCCK0_FalseAlarmReport 0xa2c //0xa2d useless now 0xa30-a4f channel report
+#define rCCK0_TRSSIReport 0xa50
+#define rCCK0_RxReport 0xa54 //0xa57
+#define rCCK0_FACounterLower 0xa5c //0xa5b
+#define rCCK0_FACounterUpper 0xa58 //0xa5c
+
+//
+// PageB(0xB00)
+//
+#define rPdp_AntA 0xb00
+#define rPdp_AntA_4 0xb04
+#define rPdp_AntA_8 0xb08
+#define rPdp_AntA_C 0xb0c
+#define rPdp_AntA_10 0xb10
+#define rPdp_AntA_14 0xb14
+#define rPdp_AntA_18 0xb18
+#define rPdp_AntA_1C 0xb1c
+#define rPdp_AntA_20 0xb20
+#define rPdp_AntA_24 0xb24
+
+#define rConfig_Pmpd_AntA 0xb28
+#define rConfig_ram64x16 0xb2c
+
+#define rBndA 0xb30
+#define rHssiPar 0xb34
+
+#define rConfig_AntA 0xb68
+#define rConfig_AntB 0xb6c
+
+#define rPdp_AntB 0xb70
+#define rPdp_AntB_4 0xb74
+#define rPdp_AntB_8 0xb78
+#define rPdp_AntB_C 0xb7c
+#define rPdp_AntB_10 0xb80
+#define rPdp_AntB_14 0xb84
+#define rPdp_AntB_18 0xb88
+#define rPdp_AntB_1C 0xb8c
+#define rPdp_AntB_20 0xb90
+#define rPdp_AntB_24 0xb94
+
+#define rConfig_Pmpd_AntB 0xb98
+
+#define rBndB 0xba0
+
+#define rAPK 0xbd8
+#define rPm_Rx0_AntA 0xbdc
+#define rPm_Rx1_AntA 0xbe0
+#define rPm_Rx2_AntA 0xbe4
+#define rPm_Rx3_AntA 0xbe8
+#define rPm_Rx0_AntB 0xbec
+#define rPm_Rx1_AntB 0xbf0
+#define rPm_Rx2_AntB 0xbf4
+#define rPm_Rx3_AntB 0xbf8
+
+//
+// 6. PageC(0xC00)
+//
+#define rOFDM0_LSTF 0xc00
+
+#define rOFDM0_TRxPathEnable 0xc04
+#define rOFDM0_TRMuxPar 0xc08
+#define rOFDM0_TRSWIsolation 0xc0c
+
+#define rOFDM0_XARxAFE 0xc10 //RxIQ DC offset, Rx digital filter, DC notch filter
+#define rOFDM0_XARxIQImbalance 0xc14 //RxIQ imblance matrix
+#define rOFDM0_XBRxAFE 0xc18
+#define rOFDM0_XBRxIQImbalance 0xc1c
+#define rOFDM0_XCRxAFE 0xc20
+#define rOFDM0_XCRxIQImbalance 0xc24
+#define rOFDM0_XDRxAFE 0xc28
+#define rOFDM0_XDRxIQImbalance 0xc2c
+
+#define rOFDM0_RxDetector1 0xc30 //PD,BW & SBD // DM tune init gain
+#define rOFDM0_RxDetector2 0xc34 //SBD & Fame Sync.
+#define rOFDM0_RxDetector3 0xc38 //Frame Sync.
+#define rOFDM0_RxDetector4 0xc3c //PD, SBD, Frame Sync & Short-GI
+
+#define rOFDM0_RxDSP 0xc40 //Rx Sync Path
+#define rOFDM0_CFOandDAGC 0xc44 //CFO & DAGC
+#define rOFDM0_CCADropThreshold 0xc48 //CCA Drop threshold
+#define rOFDM0_ECCAThreshold 0xc4c // energy CCA
+
+#define rOFDM0_XAAGCCore1 0xc50 // DIG
+#define rOFDM0_XAAGCCore2 0xc54
+#define rOFDM0_XBAGCCore1 0xc58
+#define rOFDM0_XBAGCCore2 0xc5c
+#define rOFDM0_XCAGCCore1 0xc60
+#define rOFDM0_XCAGCCore2 0xc64
+#define rOFDM0_XDAGCCore1 0xc68
+#define rOFDM0_XDAGCCore2 0xc6c
+
+#define rOFDM0_AGCParameter1 0xc70
+#define rOFDM0_AGCParameter2 0xc74
+#define rOFDM0_AGCRSSITable 0xc78
+#define rOFDM0_HTSTFAGC 0xc7c
+
+#define rOFDM0_XATxIQImbalance 0xc80 // TX PWR TRACK and DIG
+#define rOFDM0_XATxAFE 0xc84
+#define rOFDM0_XBTxIQImbalance 0xc88
+#define rOFDM0_XBTxAFE 0xc8c
+#define rOFDM0_XCTxIQImbalance 0xc90
+#define rOFDM0_XCTxAFE 0xc94
+#define rOFDM0_XDTxIQImbalance 0xc98
+#define rOFDM0_XDTxAFE 0xc9c
+
+#define rOFDM0_RxIQExtAnta 0xca0
+#define rOFDM0_TxCoeff1 0xca4
+#define rOFDM0_TxCoeff2 0xca8
+#define rOFDM0_TxCoeff3 0xcac
+#define rOFDM0_TxCoeff4 0xcb0
+#define rOFDM0_TxCoeff5 0xcb4
+#define rOFDM0_TxCoeff6 0xcb8
+#define rOFDM0_RxHPParameter 0xce0
+#define rOFDM0_TxPseudoNoiseWgt 0xce4
+#define rOFDM0_FrameSync 0xcf0
+#define rOFDM0_DFSReport 0xcf4
+
+//
+// 7. PageD(0xD00)
+//
+#define rOFDM1_LSTF 0xd00
+#define rOFDM1_TRxPathEnable 0xd04
+
+#define rOFDM1_CFO 0xd08 // No setting now
+#define rOFDM1_CSI1 0xd10
+#define rOFDM1_SBD 0xd14
+#define rOFDM1_CSI2 0xd18
+#define rOFDM1_CFOTracking 0xd2c
+#define rOFDM1_TRxMesaure1 0xd34
+#define rOFDM1_IntfDet 0xd3c
+#define rOFDM1_PseudoNoiseStateAB 0xd50
+#define rOFDM1_PseudoNoiseStateCD 0xd54
+#define rOFDM1_RxPseudoNoiseWgt 0xd58
+
+#define rOFDM_PHYCounter1 0xda0 //cca, parity fail
+#define rOFDM_PHYCounter2 0xda4 //rate illegal, crc8 fail
+#define rOFDM_PHYCounter3 0xda8 //MCS not support
+
+#define rOFDM_ShortCFOAB 0xdac // No setting now
+#define rOFDM_ShortCFOCD 0xdb0
+#define rOFDM_LongCFOAB 0xdb4
+#define rOFDM_LongCFOCD 0xdb8
+#define rOFDM_TailCFOAB 0xdbc
+#define rOFDM_TailCFOCD 0xdc0
+#define rOFDM_PWMeasure1 0xdc4
+#define rOFDM_PWMeasure2 0xdc8
+#define rOFDM_BWReport 0xdcc
+#define rOFDM_AGCReport 0xdd0
+#define rOFDM_RxSNR 0xdd4
+#define rOFDM_RxEVMCSI 0xdd8
+#define rOFDM_SIGReport 0xddc
+
+
+//
+// 8. PageE(0xE00)
+//
+#define rTxAGC_A_Rate18_06 0xe00
+#define rTxAGC_A_Rate54_24 0xe04
+#define rTxAGC_A_CCK1_Mcs32 0xe08
+#define rTxAGC_A_Mcs03_Mcs00 0xe10
+#define rTxAGC_A_Mcs07_Mcs04 0xe14
+#define rTxAGC_A_Mcs11_Mcs08 0xe18
+#define rTxAGC_A_Mcs15_Mcs12 0xe1c
+
+#define rTxAGC_B_Rate18_06 0x830
+#define rTxAGC_B_Rate54_24 0x834
+#define rTxAGC_B_CCK1_55_Mcs32 0x838
+#define rTxAGC_B_Mcs03_Mcs00 0x83c
+#define rTxAGC_B_Mcs07_Mcs04 0x848
+#define rTxAGC_B_Mcs11_Mcs08 0x84c
+#define rTxAGC_B_Mcs15_Mcs12 0x868
+#define rTxAGC_B_CCK11_A_CCK2_11 0x86c
+
+#define rFPGA0_IQK 0xe28
+#define rTx_IQK_Tone_A 0xe30
+#define rRx_IQK_Tone_A 0xe34
+#define rTx_IQK_PI_A 0xe38
+#define rRx_IQK_PI_A 0xe3c
+
+#define rTx_IQK 0xe40
+#define rRx_IQK 0xe44
+#define rIQK_AGC_Pts 0xe48
+#define rIQK_AGC_Rsp 0xe4c
+#define rTx_IQK_Tone_B 0xe50
+#define rRx_IQK_Tone_B 0xe54
+#define rTx_IQK_PI_B 0xe58
+#define rRx_IQK_PI_B 0xe5c
+#define rIQK_AGC_Cont 0xe60
+
+#define rBlue_Tooth 0xe6c
+#define rRx_Wait_CCA 0xe70
+#define rTx_CCK_RFON 0xe74
+#define rTx_CCK_BBON 0xe78
+#define rTx_OFDM_RFON 0xe7c
+#define rTx_OFDM_BBON 0xe80
+#define rTx_To_Rx 0xe84
+#define rTx_To_Tx 0xe88
+#define rRx_CCK 0xe8c
+
+#define rTx_Power_Before_IQK_A 0xe94
+#define rTx_Power_After_IQK_A 0xe9c
+
+#define rRx_Power_Before_IQK_A 0xea0
+#define rRx_Power_Before_IQK_A_2 0xea4
+#define rRx_Power_After_IQK_A 0xea8
+#define rRx_Power_After_IQK_A_2 0xeac
+
+#define rTx_Power_Before_IQK_B 0xeb4
+#define rTx_Power_After_IQK_B 0xebc
+
+#define rRx_Power_Before_IQK_B 0xec0
+#define rRx_Power_Before_IQK_B_2 0xec4
+#define rRx_Power_After_IQK_B 0xec8
+#define rRx_Power_After_IQK_B_2 0xecc
+
+#define rRx_OFDM 0xed0
+#define rRx_Wait_RIFS 0xed4
+#define rRx_TO_Rx 0xed8
+#define rStandby 0xedc
+#define rSleep 0xee0
+#define rPMPD_ANAEN 0xeec
+
+//
+// 7. RF Register 0x00-0x2E (RF 8256)
+// RF-0222D 0x00-3F
+//
+//Zebra1
+#define rZebra1_HSSIEnable 0x0 // Useless now
+#define rZebra1_TRxEnable1 0x1
+#define rZebra1_TRxEnable2 0x2
+#define rZebra1_AGC 0x4
+#define rZebra1_ChargePump 0x5
+#define rZebra1_Channel 0x7 // RF channel switch
+
+//#endif
+#define rZebra1_TxGain 0x8 // Useless now
+#define rZebra1_TxLPF 0x9
+#define rZebra1_RxLPF 0xb
+#define rZebra1_RxHPFCorner 0xc
+
+//Zebra4
+#define rGlobalCtrl 0 // Useless now
+#define rRTL8256_TxLPF 19
+#define rRTL8256_RxLPF 11
+
+//RTL8258
+#define rRTL8258_TxLPF 0x11 // Useless now
+#define rRTL8258_RxLPF 0x13
+#define rRTL8258_RSSILPF 0xa
+
+//
+// RL6052 Register definition
+//
+#define RF_AC 0x00 //
+
+#define RF_IQADJ_G1 0x01 //
+#define RF_IQADJ_G2 0x02 //
+#define RF_BS_PA_APSET_G1_G4 0x03
+#define RF_BS_PA_APSET_G5_G8 0x04
+#define RF_POW_TRSW 0x05 //
+
+#define RF_GAIN_RX 0x06 //
+#define RF_GAIN_TX 0x07 //
+
+#define RF_TXM_IDAC 0x08 //
+#define RF_IPA_G 0x09 //
+#define RF_TXBIAS_G 0x0A
+#define RF_TXPA_AG 0x0B
+#define RF_IPA_A 0x0C //
+#define RF_TXBIAS_A 0x0D
+#define RF_BS_PA_APSET_G9_G11 0x0E
+#define RF_BS_IQGEN 0x0F //
+
+#define RF_MODE1 0x10 //
+#define RF_MODE2 0x11 //
+
+#define RF_RX_AGC_HP 0x12 //
+#define RF_TX_AGC 0x13 //
+#define RF_BIAS 0x14 //
+#define RF_IPA 0x15 //
+#define RF_TXBIAS 0x16 //
+#define RF_POW_ABILITY 0x17 //
+#define RF_MODE_AG 0x18 //
+#define rRfChannel 0x18 // RF channel and BW switch
+#define RF_CHNLBW 0x18 // RF channel and BW switch
+#define RF_TOP 0x19 //
+
+#define RF_RX_G1 0x1A //
+#define RF_RX_G2 0x1B //
+
+#define RF_RX_BB2 0x1C //
+#define RF_RX_BB1 0x1D //
+
+#define RF_RCK1 0x1E //
+#define RF_RCK2 0x1F //
+
+#define RF_TX_G1 0x20 //
+#define RF_TX_G2 0x21 //
+#define RF_TX_G3 0x22 //
+
+#define RF_TX_BB1 0x23 //
+
+#define RF_T_METER 0x42 //
+
+#define RF_SYN_G1 0x25 // RF TX Power control
+#define RF_SYN_G2 0x26 // RF TX Power control
+#define RF_SYN_G3 0x27 // RF TX Power control
+#define RF_SYN_G4 0x28 // RF TX Power control
+#define RF_SYN_G5 0x29 // RF TX Power control
+#define RF_SYN_G6 0x2A // RF TX Power control
+#define RF_SYN_G7 0x2B // RF TX Power control
+#define RF_SYN_G8 0x2C // RF TX Power control
+
+#define RF_RCK_OS 0x30 // RF TX PA control
+
+#define RF_TXPA_G1 0x31 // RF TX PA control
+#define RF_TXPA_G2 0x32 // RF TX PA control
+#define RF_TXPA_G3 0x33 // RF TX PA control
+#define RF_LOBF_9 0x38
+#define RF_RXRF_A3 0x3C //
+#define RF_TRSW 0x3F
+
+#define RF_TXRF_A2 0x41
+#define RF_TXPA_G4 0x46
+#define RF_TXPA_A4 0x4B
+
+//
+//Bit Mask
+//
+// 1. Page1(0x100)
+#define bBBResetB 0x100 // Useless now?
+#define bGlobalResetB 0x200
+#define bOFDMTxStart 0x4
+#define bCCKTxStart 0x8
+#define bCRC32Debug 0x100
+#define bPMACLoopback 0x10
+#define bTxLSIG 0xffffff
+#define bOFDMTxRate 0xf
+#define bOFDMTxReserved 0x10
+#define bOFDMTxLength 0x1ffe0
+#define bOFDMTxParity 0x20000
+#define bTxHTSIG1 0xffffff
+#define bTxHTMCSRate 0x7f
+#define bTxHTBW 0x80
+#define bTxHTLength 0xffff00
+#define bTxHTSIG2 0xffffff
+#define bTxHTSmoothing 0x1
+#define bTxHTSounding 0x2
+#define bTxHTReserved 0x4
+#define bTxHTAggreation 0x8
+#define bTxHTSTBC 0x30
+#define bTxHTAdvanceCoding 0x40
+#define bTxHTShortGI 0x80
+#define bTxHTNumberHT_LTF 0x300
+#define bTxHTCRC8 0x3fc00
+#define bCounterReset 0x10000
+#define bNumOfOFDMTx 0xffff
+#define bNumOfCCKTx 0xffff0000
+#define bTxIdleInterval 0xffff
+#define bOFDMService 0xffff0000
+#define bTxMACHeader 0xffffffff
+#define bTxDataInit 0xff
+#define bTxHTMode 0x100
+#define bTxDataType 0x30000
+#define bTxRandomSeed 0xffffffff
+#define bCCKTxPreamble 0x1
+#define bCCKTxSFD 0xffff0000
+#define bCCKTxSIG 0xff
+#define bCCKTxService 0xff00
+#define bCCKLengthExt 0x8000
+#define bCCKTxLength 0xffff0000
+#define bCCKTxCRC16 0xffff
+#define bCCKTxStatus 0x1
+#define bOFDMTxStatus 0x2
+
+#define IS_BB_REG_OFFSET_92S(_Offset) ((_Offset >= 0x800) && (_Offset <= 0xfff))
+
+// 2. Page8(0x800)
+#define bRFMOD 0x1 // Reg 0x800 rFPGA0_RFMOD
+#define bJapanMode 0x2
+#define bCCKTxSC 0x30
+#define bCCKEn 0x1000000
+#define bOFDMEn 0x2000000
+
+#define bOFDMRxADCPhase 0x10000 // Useless now
+#define bOFDMTxDACPhase 0x40000
+#define bXATxAGC 0x3f
+
+#define bAntennaSelect 0x0300
+
+#define bXBTxAGC 0xf00 // Reg 80c rFPGA0_TxGainStage
+#define bXCTxAGC 0xf000
+#define bXDTxAGC 0xf0000
+
+#define bPAStart 0xf0000000 // Useless now
+#define bTRStart 0x00f00000
+#define bRFStart 0x0000f000
+#define bBBStart 0x000000f0
+#define bBBCCKStart 0x0000000f
+#define bPAEnd 0xf //Reg0x814
+#define bTREnd 0x0f000000
+#define bRFEnd 0x000f0000
+#define bCCAMask 0x000000f0 //T2R
+#define bR2RCCAMask 0x00000f00
+#define bHSSI_R2TDelay 0xf8000000
+#define bHSSI_T2RDelay 0xf80000
+#define bContTxHSSI 0x400 //chane gain at continue Tx
+#define bIGFromCCK 0x200
+#define bAGCAddress 0x3f
+#define bRxHPTx 0x7000
+#define bRxHPT2R 0x38000
+#define bRxHPCCKIni 0xc0000
+#define bAGCTxCode 0xc00000
+#define bAGCRxCode 0x300000
+
+#define b3WireDataLength 0x800 // Reg 0x820~84f rFPGA0_XA_HSSIParameter1
+#define b3WireAddressLength 0x400
+
+#define b3WireRFPowerDown 0x1 // Useless now
+//#define bHWSISelect 0x8
+#define b5GPAPEPolarity 0x40000000
+#define b2GPAPEPolarity 0x80000000
+#define bRFSW_TxDefaultAnt 0x3
+#define bRFSW_TxOptionAnt 0x30
+#define bRFSW_RxDefaultAnt 0x300
+#define bRFSW_RxOptionAnt 0x3000
+#define bRFSI_3WireData 0x1
+#define bRFSI_3WireClock 0x2
+#define bRFSI_3WireLoad 0x4
+#define bRFSI_3WireRW 0x8
+#define bRFSI_3Wire 0xf
+
+#define bRFSI_RFENV 0x10 // Reg 0x870 rFPGA0_XAB_RFInterfaceSW
+
+#define bRFSI_TRSW 0x20 // Useless now
+#define bRFSI_TRSWB 0x40
+#define bRFSI_ANTSW 0x100
+#define bRFSI_ANTSWB 0x200
+#define bRFSI_PAPE 0x400
+#define bRFSI_PAPE5G 0x800
+#define bBandSelect 0x1
+#define bHTSIG2_GI 0x80
+#define bHTSIG2_Smoothing 0x01
+#define bHTSIG2_Sounding 0x02
+#define bHTSIG2_Aggreaton 0x08
+#define bHTSIG2_STBC 0x30
+#define bHTSIG2_AdvCoding 0x40
+#define bHTSIG2_NumOfHTLTF 0x300
+#define bHTSIG2_CRC8 0x3fc
+#define bHTSIG1_MCS 0x7f
+#define bHTSIG1_BandWidth 0x80
+#define bHTSIG1_HTLength 0xffff
+#define bLSIG_Rate 0xf
+#define bLSIG_Reserved 0x10
+#define bLSIG_Length 0x1fffe
+#define bLSIG_Parity 0x20
+#define bCCKRxPhase 0x4
+
+#define bLSSIReadAddress 0x7f800000 // T65 RF
+
+#define bLSSIReadEdge 0x80000000 //LSSI "Read" edge signal
+
+#define bLSSIReadBackData 0xfffff // T65 RF
+
+#define bLSSIReadOKFlag 0x1000 // Useless now
+#define bCCKSampleRate 0x8 //0: 44MHz, 1:88MHz
+#define bRegulator0Standby 0x1
+#define bRegulatorPLLStandby 0x2
+#define bRegulator1Standby 0x4
+#define bPLLPowerUp 0x8
+#define bDPLLPowerUp 0x10
+#define bDA10PowerUp 0x20
+#define bAD7PowerUp 0x200
+#define bDA6PowerUp 0x2000
+#define bXtalPowerUp 0x4000
+#define b40MDClkPowerUP 0x8000
+#define bDA6DebugMode 0x20000
+#define bDA6Swing 0x380000
+
+#define bADClkPhase 0x4000000 // Reg 0x880 rFPGA0_AnalogParameter1 20/40 CCK support switch 40/80 BB MHZ
+
+#define b80MClkDelay 0x18000000 // Useless
+#define bAFEWatchDogEnable 0x20000000
+
+#define bXtalCap01 0xc0000000 // Reg 0x884 rFPGA0_AnalogParameter2 Crystal cap
+#define bXtalCap23 0x3
+#define bXtalCap92x 0x0f000000
+#define bXtalCap 0x0f000000
+
+#define bIntDifClkEnable 0x400 // Useless
+#define bExtSigClkEnable 0x800
+#define bBandgapMbiasPowerUp 0x10000
+#define bAD11SHGain 0xc0000
+#define bAD11InputRange 0x700000
+#define bAD11OPCurrent 0x3800000
+#define bIPathLoopback 0x4000000
+#define bQPathLoopback 0x8000000
+#define bAFELoopback 0x10000000
+#define bDA10Swing 0x7e0
+#define bDA10Reverse 0x800
+#define bDAClkSource 0x1000
+#define bAD7InputRange 0x6000
+#define bAD7Gain 0x38000
+#define bAD7OutputCMMode 0x40000
+#define bAD7InputCMMode 0x380000
+#define bAD7Current 0xc00000
+#define bRegulatorAdjust 0x7000000
+#define bAD11PowerUpAtTx 0x1
+#define bDA10PSAtTx 0x10
+#define bAD11PowerUpAtRx 0x100
+#define bDA10PSAtRx 0x1000
+#define bCCKRxAGCFormat 0x200
+#define bPSDFFTSamplepPoint 0xc000
+#define bPSDAverageNum 0x3000
+#define bIQPathControl 0xc00
+#define bPSDFreq 0x3ff
+#define bPSDAntennaPath 0x30
+#define bPSDIQSwitch 0x40
+#define bPSDRxTrigger 0x400000
+#define bPSDTxTrigger 0x80000000
+#define bPSDSineToneScale 0x7f000000
+#define bPSDReport 0xffff
+
+// 3. Page9(0x900)
+#define bOFDMTxSC 0x30000000 // Useless
+#define bCCKTxOn 0x1
+#define bOFDMTxOn 0x2
+#define bDebugPage 0xfff //reset debug page and also HWord, LWord
+#define bDebugItem 0xff //reset debug page and LWord
+#define bAntL 0x10
+#define bAntNonHT 0x100
+#define bAntHT1 0x1000
+#define bAntHT2 0x10000
+#define bAntHT1S1 0x100000
+#define bAntNonHTS1 0x1000000
+
+// 4. PageA(0xA00)
+#define bCCKBBMode 0x3 // Useless
+#define bCCKTxPowerSaving 0x80
+#define bCCKRxPowerSaving 0x40
+
+#define bCCKSideBand 0x10 // Reg 0xa00 rCCK0_System 20/40 switch
+
+#define bCCKScramble 0x8 // Useless
+#define bCCKAntDiversity 0x8000
+#define bCCKCarrierRecovery 0x4000
+#define bCCKTxRate 0x3000
+#define bCCKDCCancel 0x0800
+#define bCCKISICancel 0x0400
+#define bCCKMatchFilter 0x0200
+#define bCCKEqualizer 0x0100
+#define bCCKPreambleDetect 0x800000
+#define bCCKFastFalseCCA 0x400000
+#define bCCKChEstStart 0x300000
+#define bCCKCCACount 0x080000
+#define bCCKcs_lim 0x070000
+#define bCCKBistMode 0x80000000
+#define bCCKCCAMask 0x40000000
+#define bCCKTxDACPhase 0x4
+#define bCCKRxADCPhase 0x20000000 //r_rx_clk
+#define bCCKr_cp_mode0 0x0100
+#define bCCKTxDCOffset 0xf0
+#define bCCKRxDCOffset 0xf
+#define bCCKCCAMode 0xc000
+#define bCCKFalseCS_lim 0x3f00
+#define bCCKCS_ratio 0xc00000
+#define bCCKCorgBit_sel 0x300000
+#define bCCKPD_lim 0x0f0000
+#define bCCKNewCCA 0x80000000
+#define bCCKRxHPofIG 0x8000
+#define bCCKRxIG 0x7f00
+#define bCCKLNAPolarity 0x800000
+#define bCCKRx1stGain 0x7f0000
+#define bCCKRFExtend 0x20000000 //CCK Rx Iinital gain polarity
+#define bCCKRxAGCSatLevel 0x1f000000
+#define bCCKRxAGCSatCount 0xe0
+#define bCCKRxRFSettle 0x1f //AGCsamp_dly
+#define bCCKFixedRxAGC 0x8000
+//#define bCCKRxAGCFormat 0x4000 //remove to HSSI register 0x824
+#define bCCKAntennaPolarity 0x2000
+#define bCCKTxFilterType 0x0c00
+#define bCCKRxAGCReportType 0x0300
+#define bCCKRxDAGCEn 0x80000000
+#define bCCKRxDAGCPeriod 0x20000000
+#define bCCKRxDAGCSatLevel 0x1f000000
+#define bCCKTimingRecovery 0x800000
+#define bCCKTxC0 0x3f0000
+#define bCCKTxC1 0x3f000000
+#define bCCKTxC2 0x3f
+#define bCCKTxC3 0x3f00
+#define bCCKTxC4 0x3f0000
+#define bCCKTxC5 0x3f000000
+#define bCCKTxC6 0x3f
+#define bCCKTxC7 0x3f00
+#define bCCKDebugPort 0xff0000
+#define bCCKDACDebug 0x0f000000
+#define bCCKFalseAlarmEnable 0x8000
+#define bCCKFalseAlarmRead 0x4000
+#define bCCKTRSSI 0x7f
+#define bCCKRxAGCReport 0xfe
+#define bCCKRxReport_AntSel 0x80000000
+#define bCCKRxReport_MFOff 0x40000000
+#define bCCKRxRxReport_SQLoss 0x20000000
+#define bCCKRxReport_Pktloss 0x10000000
+#define bCCKRxReport_Lockedbit 0x08000000
+#define bCCKRxReport_RateError 0x04000000
+#define bCCKRxReport_RxRate 0x03000000
+#define bCCKRxFACounterLower 0xff
+#define bCCKRxFACounterUpper 0xff000000
+#define bCCKRxHPAGCStart 0xe000
+#define bCCKRxHPAGCFinal 0x1c00
+#define bCCKRxFalseAlarmEnable 0x8000
+#define bCCKFACounterFreeze 0x4000
+#define bCCKTxPathSel 0x10000000
+#define bCCKDefaultRxPath 0xc000000
+#define bCCKOptionRxPath 0x3000000
+
+// 5. PageC(0xC00)
+#define bNumOfSTF 0x3 // Useless
+#define bShift_L 0xc0
+#define bGI_TH 0xc
+#define bRxPathA 0x1
+#define bRxPathB 0x2
+#define bRxPathC 0x4
+#define bRxPathD 0x8
+#define bTxPathA 0x1
+#define bTxPathB 0x2
+#define bTxPathC 0x4
+#define bTxPathD 0x8
+#define bTRSSIFreq 0x200
+#define bADCBackoff 0x3000
+#define bDFIRBackoff 0xc000
+#define bTRSSILatchPhase 0x10000
+#define bRxIDCOffset 0xff
+#define bRxQDCOffset 0xff00
+#define bRxDFIRMode 0x1800000
+#define bRxDCNFType 0xe000000
+#define bRXIQImb_A 0x3ff
+#define bRXIQImb_B 0xfc00
+#define bRXIQImb_C 0x3f0000
+#define bRXIQImb_D 0xffc00000
+#define bDC_dc_Notch 0x60000
+#define bRxNBINotch 0x1f000000
+#define bPD_TH 0xf
+#define bPD_TH_Opt2 0xc000
+#define bPWED_TH 0x700
+#define bIfMF_Win_L 0x800
+#define bPD_Option 0x1000
+#define bMF_Win_L 0xe000
+#define bBW_Search_L 0x30000
+#define bwin_enh_L 0xc0000
+#define bBW_TH 0x700000
+#define bED_TH2 0x3800000
+#define bBW_option 0x4000000
+#define bRatio_TH 0x18000000
+#define bWindow_L 0xe0000000
+#define bSBD_Option 0x1
+#define bFrame_TH 0x1c
+#define bFS_Option 0x60
+#define bDC_Slope_check 0x80
+#define bFGuard_Counter_DC_L 0xe00
+#define bFrame_Weight_Short 0x7000
+#define bSub_Tune 0xe00000
+#define bFrame_DC_Length 0xe000000
+#define bSBD_start_offset 0x30000000
+#define bFrame_TH_2 0x7
+#define bFrame_GI2_TH 0x38
+#define bGI2_Sync_en 0x40
+#define bSarch_Short_Early 0x300
+#define bSarch_Short_Late 0xc00
+#define bSarch_GI2_Late 0x70000
+#define bCFOAntSum 0x1
+#define bCFOAcc 0x2
+#define bCFOStartOffset 0xc
+#define bCFOLookBack 0x70
+#define bCFOSumWeight 0x80
+#define bDAGCEnable 0x10000
+#define bTXIQImb_A 0x3ff
+#define bTXIQImb_B 0xfc00
+#define bTXIQImb_C 0x3f0000
+#define bTXIQImb_D 0xffc00000
+#define bTxIDCOffset 0xff
+#define bTxQDCOffset 0xff00
+#define bTxDFIRMode 0x10000
+#define bTxPesudoNoiseOn 0x4000000
+#define bTxPesudoNoise_A 0xff
+#define bTxPesudoNoise_B 0xff00
+#define bTxPesudoNoise_C 0xff0000
+#define bTxPesudoNoise_D 0xff000000
+#define bCCADropOption 0x20000
+#define bCCADropThres 0xfff00000
+#define bEDCCA_H 0xf
+#define bEDCCA_L 0xf0
+#define bLambda_ED 0x300
+#define bRxInitialGain 0x7f
+#define bRxAntDivEn 0x80
+#define bRxAGCAddressForLNA 0x7f00
+#define bRxHighPowerFlow 0x8000
+#define bRxAGCFreezeThres 0xc0000
+#define bRxFreezeStep_AGC1 0x300000
+#define bRxFreezeStep_AGC2 0xc00000
+#define bRxFreezeStep_AGC3 0x3000000
+#define bRxFreezeStep_AGC0 0xc000000
+#define bRxRssi_Cmp_En 0x10000000
+#define bRxQuickAGCEn 0x20000000
+#define bRxAGCFreezeThresMode 0x40000000
+#define bRxOverFlowCheckType 0x80000000
+#define bRxAGCShift 0x7f
+#define bTRSW_Tri_Only 0x80
+#define bPowerThres 0x300
+#define bRxAGCEn 0x1
+#define bRxAGCTogetherEn 0x2
+#define bRxAGCMin 0x4
+#define bRxHP_Ini 0x7
+#define bRxHP_TRLNA 0x70
+#define bRxHP_RSSI 0x700
+#define bRxHP_BBP1 0x7000
+#define bRxHP_BBP2 0x70000
+#define bRxHP_BBP3 0x700000
+#define bRSSI_H 0x7f0000 //the threshold for high power
+#define bRSSI_Gen 0x7f000000 //the threshold for ant diversity
+#define bRxSettle_TRSW 0x7
+#define bRxSettle_LNA 0x38
+#define bRxSettle_RSSI 0x1c0
+#define bRxSettle_BBP 0xe00
+#define bRxSettle_RxHP 0x7000
+#define bRxSettle_AntSW_RSSI 0x38000
+#define bRxSettle_AntSW 0xc0000
+#define bRxProcessTime_DAGC 0x300000
+#define bRxSettle_HSSI 0x400000
+#define bRxProcessTime_BBPPW 0x800000
+#define bRxAntennaPowerShift 0x3000000
+#define bRSSITableSelect 0xc000000
+#define bRxHP_Final 0x7000000
+#define bRxHTSettle_BBP 0x7
+#define bRxHTSettle_HSSI 0x8
+#define bRxHTSettle_RxHP 0x70
+#define bRxHTSettle_BBPPW 0x80
+#define bRxHTSettle_Idle 0x300
+#define bRxHTSettle_Reserved 0x1c00
+#define bRxHTRxHPEn 0x8000
+#define bRxHTAGCFreezeThres 0x30000
+#define bRxHTAGCTogetherEn 0x40000
+#define bRxHTAGCMin 0x80000
+#define bRxHTAGCEn 0x100000
+#define bRxHTDAGCEn 0x200000
+#define bRxHTRxHP_BBP 0x1c00000
+#define bRxHTRxHP_Final 0xe0000000
+#define bRxPWRatioTH 0x3
+#define bRxPWRatioEn 0x4
+#define bRxMFHold 0x3800
+#define bRxPD_Delay_TH1 0x38
+#define bRxPD_Delay_TH2 0x1c0
+#define bRxPD_DC_COUNT_MAX 0x600
+//#define bRxMF_Hold 0x3800
+#define bRxPD_Delay_TH 0x8000
+#define bRxProcess_Delay 0xf0000
+#define bRxSearchrange_GI2_Early 0x700000
+#define bRxFrame_Guard_Counter_L 0x3800000
+#define bRxSGI_Guard_L 0xc000000
+#define bRxSGI_Search_L 0x30000000
+#define bRxSGI_TH 0xc0000000
+#define bDFSCnt0 0xff
+#define bDFSCnt1 0xff00
+#define bDFSFlag 0xf0000
+#define bMFWeightSum 0x300000
+#define bMinIdxTH 0x7f000000
+#define bDAFormat 0x40000
+#define bTxChEmuEnable 0x01000000
+#define bTRSWIsolation_A 0x7f
+#define bTRSWIsolation_B 0x7f00
+#define bTRSWIsolation_C 0x7f0000
+#define bTRSWIsolation_D 0x7f000000
+#define bExtLNAGain 0x7c00
+
+// 6. PageE(0xE00)
+#define bSTBCEn 0x4 // Useless
+#define bAntennaMapping 0x10
+#define bNss 0x20
+#define bCFOAntSumD 0x200
+#define bPHYCounterReset 0x8000000
+#define bCFOReportGet 0x4000000
+#define bOFDMContinueTx 0x10000000
+#define bOFDMSingleCarrier 0x20000000
+#define bOFDMSingleTone 0x40000000
+//#define bRxPath1 0x01
+//#define bRxPath2 0x02
+//#define bRxPath3 0x04
+//#define bRxPath4 0x08
+//#define bTxPath1 0x10
+//#define bTxPath2 0x20
+#define bHTDetect 0x100
+#define bCFOEn 0x10000
+#define bCFOValue 0xfff00000
+#define bSigTone_Re 0x3f
+#define bSigTone_Im 0x7f00
+#define bCounter_CCA 0xffff
+#define bCounter_ParityFail 0xffff0000
+#define bCounter_RateIllegal 0xffff
+#define bCounter_CRC8Fail 0xffff0000
+#define bCounter_MCSNoSupport 0xffff
+#define bCounter_FastSync 0xffff
+#define bShortCFO 0xfff
+#define bShortCFOTLength 12 //total
+#define bShortCFOFLength 11 //fraction
+#define bLongCFO 0x7ff
+#define bLongCFOTLength 11
+#define bLongCFOFLength 11
+#define bTailCFO 0x1fff
+#define bTailCFOTLength 13
+#define bTailCFOFLength 12
+#define bmax_en_pwdB 0xffff
+#define bCC_power_dB 0xffff0000
+#define bnoise_pwdB 0xffff
+#define bPowerMeasTLength 10
+#define bPowerMeasFLength 3
+#define bRx_HT_BW 0x1
+#define bRxSC 0x6
+#define bRx_HT 0x8
+#define bNB_intf_det_on 0x1
+#define bIntf_win_len_cfg 0x30
+#define bNB_Intf_TH_cfg 0x1c0
+#define bRFGain 0x3f
+#define bTableSel 0x40
+#define bTRSW 0x80
+#define bRxSNR_A 0xff
+#define bRxSNR_B 0xff00
+#define bRxSNR_C 0xff0000
+#define bRxSNR_D 0xff000000
+#define bSNREVMTLength 8
+#define bSNREVMFLength 1
+#define bCSI1st 0xff
+#define bCSI2nd 0xff00
+#define bRxEVM1st 0xff0000
+#define bRxEVM2nd 0xff000000
+#define bSIGEVM 0xff
+#define bPWDB 0xff00
+#define bSGIEN 0x10000
+
+#define bSFactorQAM1 0xf // Useless
+#define bSFactorQAM2 0xf0
+#define bSFactorQAM3 0xf00
+#define bSFactorQAM4 0xf000
+#define bSFactorQAM5 0xf0000
+#define bSFactorQAM6 0xf0000
+#define bSFactorQAM7 0xf00000
+#define bSFactorQAM8 0xf000000
+#define bSFactorQAM9 0xf0000000
+#define bCSIScheme 0x100000
+
+#define bNoiseLvlTopSet 0x3 // Useless
+#define bChSmooth 0x4
+#define bChSmoothCfg1 0x38
+#define bChSmoothCfg2 0x1c0
+#define bChSmoothCfg3 0xe00
+#define bChSmoothCfg4 0x7000
+#define bMRCMode 0x800000
+#define bTHEVMCfg 0x7000000
+
+#define bLoopFitType 0x1 // Useless
+#define bUpdCFO 0x40
+#define bUpdCFOOffData 0x80
+#define bAdvUpdCFO 0x100
+#define bAdvTimeCtrl 0x800
+#define bUpdClko 0x1000
+#define bFC 0x6000
+#define bTrackingMode 0x8000
+#define bPhCmpEnable 0x10000
+#define bUpdClkoLTF 0x20000
+#define bComChCFO 0x40000
+#define bCSIEstiMode 0x80000
+#define bAdvUpdEqz 0x100000
+#define bUChCfg 0x7000000
+#define bUpdEqz 0x8000000
+
+//Rx Pseduo noise
+#define bRxPesudoNoiseOn 0x20000000 // Useless
+#define bRxPesudoNoise_A 0xff
+#define bRxPesudoNoise_B 0xff00
+#define bRxPesudoNoise_C 0xff0000
+#define bRxPesudoNoise_D 0xff000000
+#define bPesudoNoiseState_A 0xffff
+#define bPesudoNoiseState_B 0xffff0000
+#define bPesudoNoiseState_C 0xffff
+#define bPesudoNoiseState_D 0xffff0000
+
+//7. RF Register
+//Zebra1
+#define bZebra1_HSSIEnable 0x8 // Useless
+#define bZebra1_TRxControl 0xc00
+#define bZebra1_TRxGainSetting 0x07f
+#define bZebra1_RxCorner 0xc00
+#define bZebra1_TxChargePump 0x38
+#define bZebra1_RxChargePump 0x7
+#define bZebra1_ChannelNum 0xf80
+#define bZebra1_TxLPFBW 0x400
+#define bZebra1_RxLPFBW 0x600
+
+//Zebra4
+#define bRTL8256RegModeCtrl1 0x100 // Useless
+#define bRTL8256RegModeCtrl0 0x40
+#define bRTL8256_TxLPFBW 0x18
+#define bRTL8256_RxLPFBW 0x600
+
+//RTL8258
+#define bRTL8258_TxLPFBW 0xc // Useless
+#define bRTL8258_RxLPFBW 0xc00
+#define bRTL8258_RSSILPFBW 0xc0
+
+
+//
+// Other Definition
+//
+
+//byte endable for sb_write
+#define bByte0 0x1 // Useless
+#define bByte1 0x2
+#define bByte2 0x4
+#define bByte3 0x8
+#define bWord0 0x3
+#define bWord1 0xc
+#define bDWord 0xf
+
+//for PutRegsetting & GetRegSetting BitMask
+#define bMaskByte0 0xff // Reg 0xc50 rOFDM0_XAAGCCore~0xC6f
+#define bMaskByte1 0xff00
+#define bMaskByte2 0xff0000
+#define bMaskByte3 0xff000000
+#define bMaskHWord 0xffff0000
+#define bMaskLWord 0x0000ffff
+#define bMaskDWord 0xffffffff
+#define bMask12Bits 0xfff
+#define bMaskH4Bits 0xf0000000
+#define bMaskOFDM_D 0xffc00000
+#define bMaskCCK 0x3f3f3f3f
+
+//for PutRFRegsetting & GetRFRegSetting BitMask
+//#define bMask12Bits 0xfffff // RF Reg mask bits
+//#define bMask20Bits 0xfffff // RF Reg mask bits T65 RF
+#define bRFRegOffsetMask 0xfffff
+//#define bRFRegOffsetMask 0xfff
+
+//MAC0 will wirte PHY1
+#define MAC0_ACCESS_PHY1 0x4000
+//MAC1 will wirte PHY0
+#define MAC1_ACCESS_PHY0 0x2000
+
+#define bEnable 0x1 // Useless
+#define bDisable 0x0
+
+#define LeftAntenna 0x0 // Useless
+#define RightAntenna 0x1
+
+#define tCheckTxStatus 500 //500ms // Useless
+#define tUpdateRxCounter 100 //100ms
+
+#define rateCCK 0 // Useless
+#define rateOFDM 1
+#define rateHT 2
+
+//define Register-End
+#define bPMAC_End 0x1ff // Useless
+#define bFPGAPHY0_End 0x8ff
+#define bFPGAPHY1_End 0x9ff
+#define bCCKPHY0_End 0xaff
+#define bOFDMPHY0_End 0xcff
+#define bOFDMPHY1_End 0xdff
+
+//define max debug item in each debug page
+//#define bMaxItem_FPGA_PHY0 0x9
+//#define bMaxItem_FPGA_PHY1 0x3
+//#define bMaxItem_PHY_11B 0x16
+//#define bMaxItem_OFDM_PHY0 0x29
+//#define bMaxItem_OFDM_PHY1 0x0
+
+#define bPMACControl 0x0 // Useless
+#define bWMACControl 0x1
+#define bWNICControl 0x2
+
+#define PathA 0x0 // Useless
+#define PathB 0x1
+#define PathC 0x2
+#define PathD 0x3
+
+/*--------------------------Define Parameters-------------------------------*/
+
+
+#endif //__INC_HAL8192SPHYREG_H
+
diff --git a/drivers/net/wireless/rtl8723as/include/Hal8723APhyCfg.h b/drivers/net/wireless/rtl8723as/include/Hal8723APhyCfg.h
index 3dade7e81614..3ec897258dc4 100755
--- a/drivers/net/wireless/rtl8723as/include/Hal8723APhyCfg.h
+++ b/drivers/net/wireless/rtl8723as/include/Hal8723APhyCfg.h
@@ -1,30 +1,30 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __INC_HAL8723PHYCFG_H__
-#define __INC_HAL8723PHYCFG_H__
-
-#include <Hal8192CPhyCfg.h>
-/* MAC/BB/RF HAL config */
-int PHY_BBConfig8723A( IN PADAPTER Adapter );
-int PHY_RFConfig8723A( IN PADAPTER Adapter );
-s32 PHY_MACConfig8723A(PADAPTER padapter);
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __INC_HAL8723PHYCFG_H__
+#define __INC_HAL8723PHYCFG_H__
+
+#include <Hal8192CPhyCfg.h>
+/* MAC/BB/RF HAL config */
+int PHY_BBConfig8723A( IN PADAPTER Adapter );
+int PHY_RFConfig8723A( IN PADAPTER Adapter );
+s32 PHY_MACConfig8723A(PADAPTER padapter);
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/Hal8723APhyReg.h b/drivers/net/wireless/rtl8723as/include/Hal8723APhyReg.h
index fdd3422cf2d2..7b244b4d03a0 100755
--- a/drivers/net/wireless/rtl8723as/include/Hal8723APhyReg.h
+++ b/drivers/net/wireless/rtl8723as/include/Hal8723APhyReg.h
@@ -1,74 +1,74 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __INC_HAL8723APHYREG_H__
-#define __INC_HAL8723APHYREG_H__
-
-#include <Hal8192CPhyReg.h>
-
-//
-// PageB(0xB00)
-//
-#define rPdp_AntA 0xb00
-#define rPdp_AntA_4 0xb04
-#define rPdp_AntA_8 0xb08
-#define rPdp_AntA_C 0xb0c
-#define rPdp_AntA_10 0xb10
-#define rPdp_AntA_14 0xb14
-#define rPdp_AntA_18 0xb18
-#define rPdp_AntA_1C 0xb1c
-#define rPdp_AntA_20 0xb20
-#define rPdp_AntA_24 0xb24
-
-#define rConfig_Pmpd_AntA 0xb28
-#define rConfig_ram64x16 0xb2c
-
-#define rBndA 0xb30
-#define rHssiPar 0xb34
-
-#define rConfig_AntA 0xb68
-#define rConfig_AntB 0xb6c
-
-#define rPdp_AntB 0xb70
-#define rPdp_AntB_4 0xb74
-#define rPdp_AntB_8 0xb78
-#define rPdp_AntB_C 0xb7c
-#define rPdp_AntB_10 0xb80
-#define rPdp_AntB_14 0xb84
-#define rPdp_AntB_18 0xb88
-#define rPdp_AntB_1C 0xb8c
-#define rPdp_AntB_20 0xb90
-#define rPdp_AntB_24 0xb94
-
-#define rConfig_Pmpd_AntB 0xb98
-
-#define rBndB 0xba0
-
-#define rAPK 0xbd8
-#define rPm_Rx0_AntA 0xbdc
-#define rPm_Rx1_AntA 0xbe0
-#define rPm_Rx2_AntA 0xbe4
-#define rPm_Rx3_AntA 0xbe8
-#define rPm_Rx0_AntB 0xbec
-#define rPm_Rx1_AntB 0xbf0
-#define rPm_Rx2_AntB 0xbf4
-#define rPm_Rx3_AntB 0xbf8
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __INC_HAL8723APHYREG_H__
+#define __INC_HAL8723APHYREG_H__
+
+#include <Hal8192CPhyReg.h>
+
+//
+// PageB(0xB00)
+//
+#define rPdp_AntA 0xb00
+#define rPdp_AntA_4 0xb04
+#define rPdp_AntA_8 0xb08
+#define rPdp_AntA_C 0xb0c
+#define rPdp_AntA_10 0xb10
+#define rPdp_AntA_14 0xb14
+#define rPdp_AntA_18 0xb18
+#define rPdp_AntA_1C 0xb1c
+#define rPdp_AntA_20 0xb20
+#define rPdp_AntA_24 0xb24
+
+#define rConfig_Pmpd_AntA 0xb28
+#define rConfig_ram64x16 0xb2c
+
+#define rBndA 0xb30
+#define rHssiPar 0xb34
+
+#define rConfig_AntA 0xb68
+#define rConfig_AntB 0xb6c
+
+#define rPdp_AntB 0xb70
+#define rPdp_AntB_4 0xb74
+#define rPdp_AntB_8 0xb78
+#define rPdp_AntB_C 0xb7c
+#define rPdp_AntB_10 0xb80
+#define rPdp_AntB_14 0xb84
+#define rPdp_AntB_18 0xb88
+#define rPdp_AntB_1C 0xb8c
+#define rPdp_AntB_20 0xb90
+#define rPdp_AntB_24 0xb94
+
+#define rConfig_Pmpd_AntB 0xb98
+
+#define rBndB 0xba0
+
+#define rAPK 0xbd8
+#define rPm_Rx0_AntA 0xbdc
+#define rPm_Rx1_AntA 0xbe0
+#define rPm_Rx2_AntA 0xbe4
+#define rPm_Rx3_AntA 0xbe8
+#define rPm_Rx0_AntB 0xbec
+#define rPm_Rx1_AntB 0xbf0
+#define rPm_Rx2_AntB 0xbf4
+#define rPm_Rx3_AntB 0xbf8
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/Hal8723PwrSeq.h b/drivers/net/wireless/rtl8723as/include/Hal8723PwrSeq.h
index daa540209429..ab1c32a014a0 100755
--- a/drivers/net/wireless/rtl8723as/include/Hal8723PwrSeq.h
+++ b/drivers/net/wireless/rtl8723as/include/Hal8723PwrSeq.h
@@ -1,171 +1,171 @@
-#ifndef __HAL8723PWRSEQ_H__
-#define __HAL8723PWRSEQ_H__
-/*
- Check document WM-20110607-Paul-RTL8723A_Power_Architecture-R02.vsd
- There are 6 HW Power States:
- 0: POFF--Power Off
- 1: PDN--Power Down
- 2: CARDEMU--Card Emulation
- 3: ACT--Active Mode
- 4: LPS--Low Power State
- 5: SUS--Suspend
-
- The transision from different states are defined below
- TRANS_CARDEMU_TO_ACT
- TRANS_ACT_TO_CARDEMU
- TRANS_CARDEMU_TO_SUS
- TRANS_SUS_TO_CARDEMU
- TRANS_CARDEMU_TO_PDN
- TRANS_ACT_TO_LPS
- TRANS_LPS_TO_ACT
-
- TRANS_END
-*/
-#include "HalPwrSeqCmd.h"
-#include "rtl8723a_spec.h"
-
-#define RTL8723A_TRANS_CARDEMU_TO_ACT_STEPS 15
-#define RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS 15
-#define RTL8723A_TRANS_CARDEMU_TO_SUS_STEPS 15
-#define RTL8723A_TRANS_SUS_TO_CARDEMU_STEPS 15
-#define RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS 15
-#define RTL8723A_TRANS_PDN_TO_CARDEMU_STEPS 15
-#define RTL8723A_TRANS_ACT_TO_LPS_STEPS 15
-#define RTL8723A_TRANS_LPS_TO_ACT_STEPS 15
-#define RTL8723A_TRANS_END_STEPS 1
-
-
-#define RTL8723A_TRANS_CARDEMU_TO_ACT \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0}, /*0x20[0] = 1b'1 enable LDOA12 MACRO block for all interface*/ \
- {0x0067, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x67[0] = 0 to disable BT_GPS_SEL pins*/ \
- {0x0001, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 1, PWRSEQ_DELAY_MS},/*Delay 1ms*/ \
- {0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, 0}, /*0x00[5] = 1b'0 release analog Ips to digital ,1:isolation*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, 0},/* disable SW LPS 0x04[10]=0*/ \
- {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, BIT1},/* wait till 0x04[17] = 1 power ready*/ \
- {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/* release WLON reset 0x04[16]=1*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/* disable HWPDN 0x04[15]=0*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, (BIT4|BIT3), 0},/* disable WL suspend*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/* polling until return 0*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT0, 0},/**/ \
- {0x004E, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 1},/*0x4C[23] = 0x4E[7] = 1, switch DPDT_SEL_P output from WL BB */\
-
-#define RTL8723A_TRANS_ACT_TO_CARDEMU \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x001F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0},/*0x1F[7:0] = 0 turn off RF*/ \
- {0x004E, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/*0x4C[23] = 0x4E[7] = 0, switch DPDT_SEL_P output from register 0x65[2] */\
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*0x04[9] = 1 turn off MAC by HW state machine*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, 0}, /*wait till 0x04[9] = 0 polling until return 0 to disable*/ \
- {0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, BIT5}, /*0x00[5] = 1b'1 analog Ips to digital ,1:isolation*/ \
- {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0}, /*0x20[0] = 1b'0 disable LDOA12 MACRO block*/ \
-
-
-#define RTL8723A_TRANS_CARDEMU_TO_SUS \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4|BIT3, (BIT4|BIT3)}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \
- {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \
- {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07[7:0] = 0x20 SDIO SOP option to disable BG/MB/ACK/SWR*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3|BIT4}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/
-
-#define RTL8723A_TRANS_SUS_TO_CARDEMU \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3 | BIT7, 0}, /*clear suspend enable and power down enable*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, 0}, /*Set SDIO suspend local register*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, BIT1}, /*wait power state to suspend*/\
- {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x23[4] = 1b'0 12H LDO enter normal mode*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, 0}, /*0x04[12:11] = 2b'01enable WL suspend*/
-
-#define RTL8723A_TRANS_CARDEMU_TO_CARDDIS \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07=0x20 , SOP option to disable BG/MB*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, BIT2}, /*0x04[10] = 1, enable SW LPS*/ \
- {0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 1}, /*0x48[16] = 1 to enable GPIO9 as EXT WAKEUP*/ \
- {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/
-
-#define RTL8723A_TRANS_CARDDIS_TO_CARDEMU \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3 | BIT7, 0}, /*clear suspend enable and power down enable*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, 0}, /*Set SDIO suspend local register*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, BIT1}, /*wait power state to suspend*/\
- {0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0}, /*0x48[16] = 0 to disable GPIO9 as EXT WAKEUP*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, 0}, /*0x04[12:11] = 2b'01enable WL suspend*/\
- {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x23[4] = 1b'0 12H LDO enter normal mode*/ \
- {0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0},/*PCIe DMA start*/
-
-
-#define RTL8723A_TRANS_CARDEMU_TO_PDN \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \
- {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK|PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07[7:0] = 0x20 SOP option to disable BG/MB/ACK/SWR*/ \
- {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/* 0x04[16] = 0*/\
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, BIT7},/* 0x04[15] = 1*/
-
-#define RTL8723A_TRANS_PDN_TO_CARDEMU \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/* 0x04[15] = 0*/
-
-#define RTL8723A_TRANS_ACT_TO_LPS \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF},/*PCIe DMA stop*/ \
- {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF},/*Tx Pause*/ \
- {0x05F8, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
- {0x05F9, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
- {0x05FA, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
- {0x05FB, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*CCK and OFDM are disabled,and clock are gated*/ \
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_US},/*Delay 1us*/ \
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*Whole BB is reset*/ \
- {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x03},/*Reset MAC TRX*/ \
- {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*check if removed later*/ \
- {0x0093, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x00},/*When driver enter Sus/ Disable, enable LOP for BT*/ \
- {0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, BIT5},/*Respond TxOK to scheduler*/ \
-
-
-#define RTL8723A_TRANS_LPS_TO_ACT \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, 0xFF, 0x84}, /*SDIO RPWM*/\
- {0xFE58, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*USB RPWM*/\
- {0x0361, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*PCIe RPWM*/\
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_MS}, /*Delay*/\
- {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*. 0x08[4] = 0 switch TSF to 40M*/\
- {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT7, 0}, /*Polling 0x109[7]=0 TSF in 40M*/\
- {0x0029, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT6|BIT7, 0}, /*. 0x29[7:6] = 2b'00 enable BB clock*/\
- {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*. 0x101[1] = 1*/\
- {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF}, /*. 0x100[7:0] = 0xFF enable WMAC TRX*/\
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1|BIT0, BIT1|BIT0}, /*. 0x02[1:0] = 2b'11 enable BB macro*/\
- {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, /*. 0x522 = 0*/
-
-#define RTL8723A_TRANS_END \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
- {0xFFFF, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,0,PWR_CMD_END, 0, 0}, //
-
-
-extern WLAN_PWR_CFG rtl8723A_power_on_flow[RTL8723A_TRANS_CARDEMU_TO_ACT_STEPS+RTL8723A_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8723A_radio_off_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8723A_card_disable_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8723A_card_enable_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8723A_suspend_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_SUS_STEPS+RTL8723A_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8723A_resume_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_SUS_STEPS+RTL8723A_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8723A_hwpdn_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8723A_enter_lps_flow[RTL8723A_TRANS_ACT_TO_LPS_STEPS+RTL8723A_TRANS_END_STEPS];
-extern WLAN_PWR_CFG rtl8723A_leave_lps_flow[RTL8723A_TRANS_LPS_TO_ACT_STEPS+RTL8723A_TRANS_END_STEPS];
-
-#endif
-
+#ifndef __HAL8723PWRSEQ_H__
+#define __HAL8723PWRSEQ_H__
+/*
+ Check document WM-20110607-Paul-RTL8723A_Power_Architecture-R02.vsd
+ There are 6 HW Power States:
+ 0: POFF--Power Off
+ 1: PDN--Power Down
+ 2: CARDEMU--Card Emulation
+ 3: ACT--Active Mode
+ 4: LPS--Low Power State
+ 5: SUS--Suspend
+
+ The transision from different states are defined below
+ TRANS_CARDEMU_TO_ACT
+ TRANS_ACT_TO_CARDEMU
+ TRANS_CARDEMU_TO_SUS
+ TRANS_SUS_TO_CARDEMU
+ TRANS_CARDEMU_TO_PDN
+ TRANS_ACT_TO_LPS
+ TRANS_LPS_TO_ACT
+
+ TRANS_END
+*/
+#include "HalPwrSeqCmd.h"
+#include "rtl8723a_spec.h"
+
+#define RTL8723A_TRANS_CARDEMU_TO_ACT_STEPS 15
+#define RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS 15
+#define RTL8723A_TRANS_CARDEMU_TO_SUS_STEPS 15
+#define RTL8723A_TRANS_SUS_TO_CARDEMU_STEPS 15
+#define RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS 15
+#define RTL8723A_TRANS_PDN_TO_CARDEMU_STEPS 15
+#define RTL8723A_TRANS_ACT_TO_LPS_STEPS 15
+#define RTL8723A_TRANS_LPS_TO_ACT_STEPS 15
+#define RTL8723A_TRANS_END_STEPS 1
+
+
+#define RTL8723A_TRANS_CARDEMU_TO_ACT \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0}, /*0x20[0] = 1b'1 enable LDOA12 MACRO block for all interface*/ \
+ {0x0067, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x67[0] = 0 to disable BT_GPS_SEL pins*/ \
+ {0x0001, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 1, PWRSEQ_DELAY_MS},/*Delay 1ms*/ \
+ {0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, 0}, /*0x00[5] = 1b'0 release analog Ips to digital ,1:isolation*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, 0},/* disable SW LPS 0x04[10]=0*/ \
+ {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, BIT1},/* wait till 0x04[17] = 1 power ready*/ \
+ {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/* release WLON reset 0x04[16]=1*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/* disable HWPDN 0x04[15]=0*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, (BIT4|BIT3), 0},/* disable WL suspend*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/* polling until return 0*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT0, 0},/**/ \
+ {0x004E, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 1},/*0x4C[23] = 0x4E[7] = 1, switch DPDT_SEL_P output from WL BB */\
+
+#define RTL8723A_TRANS_ACT_TO_CARDEMU \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x001F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0},/*0x1F[7:0] = 0 turn off RF*/ \
+ {0x004E, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/*0x4C[23] = 0x4E[7] = 0, switch DPDT_SEL_P output from register 0x65[2] */\
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*0x04[9] = 1 turn off MAC by HW state machine*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, 0}, /*wait till 0x04[9] = 0 polling until return 0 to disable*/ \
+ {0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, BIT5}, /*0x00[5] = 1b'1 analog Ips to digital ,1:isolation*/ \
+ {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0}, /*0x20[0] = 1b'0 disable LDOA12 MACRO block*/ \
+
+
+#define RTL8723A_TRANS_CARDEMU_TO_SUS \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4|BIT3, (BIT4|BIT3)}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \
+ {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \
+ {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07[7:0] = 0x20 SDIO SOP option to disable BG/MB/ACK/SWR*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3|BIT4}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/
+
+#define RTL8723A_TRANS_SUS_TO_CARDEMU \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3 | BIT7, 0}, /*clear suspend enable and power down enable*/ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, 0}, /*Set SDIO suspend local register*/ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, BIT1}, /*wait power state to suspend*/\
+ {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x23[4] = 1b'0 12H LDO enter normal mode*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, 0}, /*0x04[12:11] = 2b'01enable WL suspend*/
+
+#define RTL8723A_TRANS_CARDEMU_TO_CARDDIS \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07=0x20 , SOP option to disable BG/MB*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, BIT2}, /*0x04[10] = 1, enable SW LPS*/ \
+ {0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 1}, /*0x48[16] = 1 to enable GPIO9 as EXT WAKEUP*/ \
+ {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/
+
+#define RTL8723A_TRANS_CARDDIS_TO_CARDEMU \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3 | BIT7, 0}, /*clear suspend enable and power down enable*/ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, 0}, /*Set SDIO suspend local register*/ \
+ {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, BIT1}, /*wait power state to suspend*/\
+ {0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0}, /*0x48[16] = 0 to disable GPIO9 as EXT WAKEUP*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, 0}, /*0x04[12:11] = 2b'01enable WL suspend*/\
+ {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x23[4] = 1b'0 12H LDO enter normal mode*/ \
+ {0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0},/*PCIe DMA start*/
+
+
+#define RTL8723A_TRANS_CARDEMU_TO_PDN \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \
+ {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK|PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07[7:0] = 0x20 SOP option to disable BG/MB/ACK/SWR*/ \
+ {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/* 0x04[16] = 0*/\
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, BIT7},/* 0x04[15] = 1*/
+
+#define RTL8723A_TRANS_PDN_TO_CARDEMU \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/* 0x04[15] = 0*/
+
+#define RTL8723A_TRANS_ACT_TO_LPS \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF},/*PCIe DMA stop*/ \
+ {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF},/*Tx Pause*/ \
+ {0x05F8, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
+ {0x05F9, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
+ {0x05FA, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
+ {0x05FB, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
+ {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*CCK and OFDM are disabled,and clock are gated*/ \
+ {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_US},/*Delay 1us*/ \
+ {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*Whole BB is reset*/ \
+ {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x03},/*Reset MAC TRX*/ \
+ {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*check if removed later*/ \
+ {0x0093, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x00},/*When driver enter Sus/ Disable, enable LOP for BT*/ \
+ {0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, BIT5},/*Respond TxOK to scheduler*/ \
+
+
+#define RTL8723A_TRANS_LPS_TO_ACT \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, 0xFF, 0x84}, /*SDIO RPWM*/\
+ {0xFE58, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*USB RPWM*/\
+ {0x0361, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*PCIe RPWM*/\
+ {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_MS}, /*Delay*/\
+ {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*. 0x08[4] = 0 switch TSF to 40M*/\
+ {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT7, 0}, /*Polling 0x109[7]=0 TSF in 40M*/\
+ {0x0029, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT6|BIT7, 0}, /*. 0x29[7:6] = 2b'00 enable BB clock*/\
+ {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*. 0x101[1] = 1*/\
+ {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF}, /*. 0x100[7:0] = 0xFF enable WMAC TRX*/\
+ {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1|BIT0, BIT1|BIT0}, /*. 0x02[1:0] = 2b'11 enable BB macro*/\
+ {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, /*. 0x522 = 0*/
+
+#define RTL8723A_TRANS_END \
+ /* format */ \
+ /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \
+ {0xFFFF, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,0,PWR_CMD_END, 0, 0}, //
+
+
+extern WLAN_PWR_CFG rtl8723A_power_on_flow[RTL8723A_TRANS_CARDEMU_TO_ACT_STEPS+RTL8723A_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8723A_radio_off_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8723A_card_disable_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8723A_card_enable_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8723A_suspend_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_SUS_STEPS+RTL8723A_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8723A_resume_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_SUS_STEPS+RTL8723A_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8723A_hwpdn_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8723A_enter_lps_flow[RTL8723A_TRANS_ACT_TO_LPS_STEPS+RTL8723A_TRANS_END_STEPS];
+extern WLAN_PWR_CFG rtl8723A_leave_lps_flow[RTL8723A_TRANS_LPS_TO_ACT_STEPS+RTL8723A_TRANS_END_STEPS];
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/HalPwrSeqCmd.h b/drivers/net/wireless/rtl8723as/include/HalPwrSeqCmd.h
index 24e4a54b4af4..5cf122fb2b5f 100755
--- a/drivers/net/wireless/rtl8723as/include/HalPwrSeqCmd.h
+++ b/drivers/net/wireless/rtl8723as/include/HalPwrSeqCmd.h
@@ -1,138 +1,138 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __HALPWRSEQCMD_H__
-#define __HALPWRSEQCMD_H__
-
-#include <drv_types.h>
-
-/*---------------------------------------------*/
-//3 The value of cmd: 4 bits
-/*---------------------------------------------*/
-#define PWR_CMD_READ 0x00
- // offset: the read register offset
- // msk: the mask of the read value
- // value: N/A, left by 0
- // note: dirver shall implement this function by read & msk
-
-#define PWR_CMD_WRITE 0x01
- // offset: the read register offset
- // msk: the mask of the write bits
- // value: write value
- // note: driver shall implement this cmd by read & msk after write
-
-#define PWR_CMD_POLLING 0x02
- // offset: the read register offset
- // msk: the mask of the polled value
- // value: the value to be polled, masked by the msd field.
- // note: driver shall implement this cmd by
- // do{
- // if( (Read(offset) & msk) == (value & msk) )
- // break;
- // } while(not timeout);
-
-#define PWR_CMD_DELAY 0x03
- // offset: the value to delay
- // msk: N/A
- // value: the unit of delay, 0: us, 1: ms
-
-#define PWR_CMD_END 0x04
- // offset: N/A
- // msk: N/A
- // value: N/A
-
-/*---------------------------------------------*/
-//3 The value of base: 4 bits
-/*---------------------------------------------*/
- // define the base address of each block
-#define PWR_BASEADDR_MAC 0x00
-#define PWR_BASEADDR_USB 0x01
-#define PWR_BASEADDR_PCIE 0x02
-#define PWR_BASEADDR_SDIO 0x03
-
-/*---------------------------------------------*/
-//3 The value of interface_msk: 4 bits
-/*---------------------------------------------*/
-#define PWR_INTF_SDIO_MSK BIT(0)
-#define PWR_INTF_USB_MSK BIT(1)
-#define PWR_INTF_PCI_MSK BIT(2)
-#define PWR_INTF_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
-
-/*---------------------------------------------*/
-//3 The value of fab_msk: 4 bits
-/*---------------------------------------------*/
-#define PWR_FAB_TSMC_MSK BIT(0)
-#define PWR_FAB_UMC_MSK BIT(1)
-#define PWR_FAB_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
-
-/*---------------------------------------------*/
-//3 The value of cut_msk: 8 bits
-/*---------------------------------------------*/
-#define PWR_CUT_TESTCHIP_MSK BIT(0)
-#define PWR_CUT_A_MSK BIT(1)
-#define PWR_CUT_B_MSK BIT(2)
-#define PWR_CUT_C_MSK BIT(3)
-#define PWR_CUT_D_MSK BIT(4)
-#define PWR_CUT_E_MSK BIT(5)
-#define PWR_CUT_F_MSK BIT(6)
-#define PWR_CUT_G_MSK BIT(7)
-#define PWR_CUT_ALL_MSK 0xFF
-
-
-typedef enum _PWRSEQ_CMD_DELAY_UNIT_
-{
- PWRSEQ_DELAY_US,
- PWRSEQ_DELAY_MS,
-} PWRSEQ_DELAY_UNIT;
-
-typedef struct _WL_PWR_CFG_
-{
- u16 offset;
- u8 cut_msk;
- u8 fab_msk:4;
- u8 interface_msk:4;
- u8 base:4;
- u8 cmd:4;
- u8 msk;
- u8 value;
-} WLAN_PWR_CFG, *PWLAN_PWR_CFG;
-
-
-#define GET_PWR_CFG_OFFSET(__PWR_CMD) __PWR_CMD.offset
-#define GET_PWR_CFG_CUT_MASK(__PWR_CMD) __PWR_CMD.cut_msk
-#define GET_PWR_CFG_FAB_MASK(__PWR_CMD) __PWR_CMD.fab_msk
-#define GET_PWR_CFG_INTF_MASK(__PWR_CMD) __PWR_CMD.interface_msk
-#define GET_PWR_CFG_BASE(__PWR_CMD) __PWR_CMD.base
-#define GET_PWR_CFG_CMD(__PWR_CMD) __PWR_CMD.cmd
-#define GET_PWR_CFG_MASK(__PWR_CMD) __PWR_CMD.msk
-#define GET_PWR_CFG_VALUE(__PWR_CMD) __PWR_CMD.value
-
-
-//================================================================================
-// Prototype of protected function.
-//================================================================================
-u8 HalPwrSeqCmdParsing(
- PADAPTER padapter,
- u8 CutVersion,
- u8 FabVersion,
- u8 InterfaceType,
- WLAN_PWR_CFG PwrCfgCmd[]);
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __HALPWRSEQCMD_H__
+#define __HALPWRSEQCMD_H__
+
+#include <drv_types.h>
+
+/*---------------------------------------------*/
+//3 The value of cmd: 4 bits
+/*---------------------------------------------*/
+#define PWR_CMD_READ 0x00
+ // offset: the read register offset
+ // msk: the mask of the read value
+ // value: N/A, left by 0
+ // note: dirver shall implement this function by read & msk
+
+#define PWR_CMD_WRITE 0x01
+ // offset: the read register offset
+ // msk: the mask of the write bits
+ // value: write value
+ // note: driver shall implement this cmd by read & msk after write
+
+#define PWR_CMD_POLLING 0x02
+ // offset: the read register offset
+ // msk: the mask of the polled value
+ // value: the value to be polled, masked by the msd field.
+ // note: driver shall implement this cmd by
+ // do{
+ // if( (Read(offset) & msk) == (value & msk) )
+ // break;
+ // } while(not timeout);
+
+#define PWR_CMD_DELAY 0x03
+ // offset: the value to delay
+ // msk: N/A
+ // value: the unit of delay, 0: us, 1: ms
+
+#define PWR_CMD_END 0x04
+ // offset: N/A
+ // msk: N/A
+ // value: N/A
+
+/*---------------------------------------------*/
+//3 The value of base: 4 bits
+/*---------------------------------------------*/
+ // define the base address of each block
+#define PWR_BASEADDR_MAC 0x00
+#define PWR_BASEADDR_USB 0x01
+#define PWR_BASEADDR_PCIE 0x02
+#define PWR_BASEADDR_SDIO 0x03
+
+/*---------------------------------------------*/
+//3 The value of interface_msk: 4 bits
+/*---------------------------------------------*/
+#define PWR_INTF_SDIO_MSK BIT(0)
+#define PWR_INTF_USB_MSK BIT(1)
+#define PWR_INTF_PCI_MSK BIT(2)
+#define PWR_INTF_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
+
+/*---------------------------------------------*/
+//3 The value of fab_msk: 4 bits
+/*---------------------------------------------*/
+#define PWR_FAB_TSMC_MSK BIT(0)
+#define PWR_FAB_UMC_MSK BIT(1)
+#define PWR_FAB_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
+
+/*---------------------------------------------*/
+//3 The value of cut_msk: 8 bits
+/*---------------------------------------------*/
+#define PWR_CUT_TESTCHIP_MSK BIT(0)
+#define PWR_CUT_A_MSK BIT(1)
+#define PWR_CUT_B_MSK BIT(2)
+#define PWR_CUT_C_MSK BIT(3)
+#define PWR_CUT_D_MSK BIT(4)
+#define PWR_CUT_E_MSK BIT(5)
+#define PWR_CUT_F_MSK BIT(6)
+#define PWR_CUT_G_MSK BIT(7)
+#define PWR_CUT_ALL_MSK 0xFF
+
+
+typedef enum _PWRSEQ_CMD_DELAY_UNIT_
+{
+ PWRSEQ_DELAY_US,
+ PWRSEQ_DELAY_MS,
+} PWRSEQ_DELAY_UNIT;
+
+typedef struct _WL_PWR_CFG_
+{
+ u16 offset;
+ u8 cut_msk;
+ u8 fab_msk:4;
+ u8 interface_msk:4;
+ u8 base:4;
+ u8 cmd:4;
+ u8 msk;
+ u8 value;
+} WLAN_PWR_CFG, *PWLAN_PWR_CFG;
+
+
+#define GET_PWR_CFG_OFFSET(__PWR_CMD) __PWR_CMD.offset
+#define GET_PWR_CFG_CUT_MASK(__PWR_CMD) __PWR_CMD.cut_msk
+#define GET_PWR_CFG_FAB_MASK(__PWR_CMD) __PWR_CMD.fab_msk
+#define GET_PWR_CFG_INTF_MASK(__PWR_CMD) __PWR_CMD.interface_msk
+#define GET_PWR_CFG_BASE(__PWR_CMD) __PWR_CMD.base
+#define GET_PWR_CFG_CMD(__PWR_CMD) __PWR_CMD.cmd
+#define GET_PWR_CFG_MASK(__PWR_CMD) __PWR_CMD.msk
+#define GET_PWR_CFG_VALUE(__PWR_CMD) __PWR_CMD.value
+
+
+//================================================================================
+// Prototype of protected function.
+//================================================================================
+u8 HalPwrSeqCmdParsing(
+ PADAPTER padapter,
+ u8 CutVersion,
+ u8 FabVersion,
+ u8 InterfaceType,
+ WLAN_PWR_CFG PwrCfgCmd[]);
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/HalVerDef.h b/drivers/net/wireless/rtl8723as/include/HalVerDef.h
index 06c6a99bb0a9..9de5d7a161f5 100755
--- a/drivers/net/wireless/rtl8723as/include/HalVerDef.h
+++ b/drivers/net/wireless/rtl8723as/include/HalVerDef.h
@@ -57,6 +57,10 @@ typedef enum tag_HAL_Cut_Version_Definition
E_CUT_VERSION = 4,
F_CUT_VERSION = 5,
G_CUT_VERSION = 6,
+ H_CUT_VERSION = 7,
+ I_CUT_VERSION = 8,
+ J_CUT_VERSION = 9,
+ K_CUT_VERSION = 10,
}HAL_CUT_VERSION_E;
// HAL_Manufacturer
@@ -120,6 +124,9 @@ typedef struct tag_HAL_VERSION
#define IS_C_CUT(version) ((GET_CVID_CUT_VERSION(version) == C_CUT_VERSION) ? TRUE : FALSE)
#define IS_D_CUT(version) ((GET_CVID_CUT_VERSION(version) == D_CUT_VERSION) ? TRUE : FALSE)
#define IS_E_CUT(version) ((GET_CVID_CUT_VERSION(version) == E_CUT_VERSION) ? TRUE : FALSE)
+#define IS_I_CUT(version) ((GET_CVID_CUT_VERSION(version) == I_CUT_VERSION) ? TRUE : FALSE)
+#define IS_J_CUT(version) ((GET_CVID_CUT_VERSION(version) == J_CUT_VERSION) ? TRUE : FALSE)
+#define IS_K_CUT(version) ((GET_CVID_CUT_VERSION(version) == K_CUT_VERSION) ? TRUE : FALSE)
//HAL_VENDOR_E
diff --git a/drivers/net/wireless/rtl8723as/include/autoconf.h b/drivers/net/wireless/rtl8723as/include/autoconf.h
index 2165c253ebd7..d34be3689d89 100755
--- a/drivers/net/wireless/rtl8723as/include/autoconf.h
+++ b/drivers/net/wireless/rtl8723as/include/autoconf.h
@@ -47,9 +47,9 @@
#define CONFIG_80211N_HT
#define CONFIG_RECV_REORDERING_CTRL
-#define CONFIG_IOCTL_CFG80211
+//#define CONFIG_IOCTL_CFG80211
#ifdef CONFIG_IOCTL_CFG80211
- #define RTW_USE_CFG80211_STA_EVENT /* Indecate new sta asoc through cfg80211_new_sta */
+ //#define RTW_USE_CFG80211_STA_EVENT /* Indecate new sta asoc through cfg80211_new_sta */
#define CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER
//#define CONFIG_DEBUG_CFG80211
#define CONFIG_SET_SCAN_DENY_TIMER
@@ -76,8 +76,9 @@
#endif
//#define CONFIG_DBG_P2P
- //#define CONFIG_P2P_PS
+ #define CONFIG_P2P_PS
//#define CONFIG_P2P_IPS
+ #define P2P_OP_CHECK_SOCIAL_CH
#endif
// Added by Kurt 20110511
@@ -119,6 +120,7 @@
#define CONFIG_LONG_DELAY_ISSUE
#define CONFIG_NEW_SIGNAL_STAT_PROCESS
#define RTW_NOTCH_FILTER 0 /* 0:Disable, 1:Enable, */
+#define CONFIG_DEAUTH_BEFORE_CONNECT
//#define CONFIG_PATCH_JOIN_WRONG_CHANNEL
@@ -141,10 +143,11 @@
#endif
-#define CONFIG_CONCURRENT_MODE
+//#define CONFIG_CONCURRENT_MODE
#ifdef CONFIG_CONCURRENT_MODE
#define CONFIG_TSF_RESET_OFFLOAD // For 2 PORT TSF SYNC.
//#define CONFIG_HWPORT_SWAP //Port0->Sec , Port1 -> Pri
+ //#define CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
#endif // CONFIG_CONCURRENT_MODE
@@ -183,6 +186,7 @@
#ifndef CONFIG_LPS
#define CONFIG_LPS // download reserved page to FW
#endif
+ #define CONFIG_CHECK_BT_HANG
#endif
@@ -191,6 +195,8 @@
//#define CONFIG_HW_ANTENNA_DIVERSITY
#endif
+//#define CONFIG_RF_GAIN_OFFSET
+
#ifndef DISABLE_BB_RF
#define DISABLE_BB_RF 0
#endif
diff --git a/drivers/net/wireless/rtl8723as/include/byteorder/swab.h b/drivers/net/wireless/rtl8723as/include/byteorder/swab.h
index 1bd067de24eb..067c8e434a1f 100755
--- a/drivers/net/wireless/rtl8723as/include/byteorder/swab.h
+++ b/drivers/net/wireless/rtl8723as/include/byteorder/swab.h
@@ -20,7 +20,7 @@
#ifndef _LINUX_BYTEORDER_SWAB_H
#define _LINUX_BYTEORDER_SWAB_H
-#if !defined(CONFIG_PLATFORM_MSTAR_TITANIA12)
+#if !defined(CONFIG_PLATFORM_MSTAR)
#ifndef __u16
typedef unsigned short __u16;
#endif
@@ -73,7 +73,7 @@ __inline static __u64 ___swab64(__u64 x)
(__u64)(((__u64)(__x) & (__u64)0x00ff000000000000ULL) >> 40) | \
(__u64)(((__u64)(__x) & (__u64)0xff00000000000000ULL) >> 56) )); \
}
-#endif // CONFIG_PLATFORM_MSTAR_TITANIA12
+#endif // CONFIG_PLATFORM_MSTAR
#ifndef __arch__swab16
__inline static __u16 __arch__swab16(__u16 x)
diff --git a/drivers/net/wireless/rtl8723as/include/drv_conf.h b/drivers/net/wireless/rtl8723as/include/drv_conf.h
index bc7c692a8ac0..13176879f666 100755
--- a/drivers/net/wireless/rtl8723as/include/drv_conf.h
+++ b/drivers/net/wireless/rtl8723as/include/drv_conf.h
@@ -39,11 +39,6 @@
//for Android here. If you are sure there is no risk on your system about this,
//mask this macro define to support non-printable ascii ssid.
//#define CONFIG_VALIDATE_SSID
-#ifdef CONFIG_PLATFORM_ARM_SUNxI
- #ifdef CONFIG_VALIDATE_SSID
- #undef CONFIG_VALIDATE_SSID
- #endif
-#endif
//Android expect dbm as the rx signal strength unit
#define CONFIG_SIGNAL_DISPLAY_DBM
diff --git a/drivers/net/wireless/rtl8723as/include/drv_types.h b/drivers/net/wireless/rtl8723as/include/drv_types.h
index cf4c3e177cb9..57bd51728a9a 100755
--- a/drivers/net/wireless/rtl8723as/include/drv_types.h
+++ b/drivers/net/wireless/rtl8723as/include/drv_types.h
@@ -81,6 +81,7 @@ typedef struct _ADAPTER _adapter, ADAPTER,*PADAPTER;
#include <rtw_p2p.h>
#include <rtw_tdls.h>
#include <rtw_ap.h>
+#include <rtw_odm.h>
#ifdef CONFIG_WAPI_SUPPORT
#include <rtw_wapi.h>
@@ -224,7 +225,7 @@ struct registry_priv
u8 force_igi;//0 normal
#endif
u8 regulatory_tid;
-
+ u8 qos_opt_enable;
};
@@ -234,7 +235,7 @@ struct registry_priv
#define BSSID_OFT(field) ((ULONG)FIELD_OFFSET(WLAN_BSSID_EX,field))
#define BSSID_SZ(field) sizeof(((PWLAN_BSSID_EX) 0)->field)
-#define MAX_CONTINUAL_URB_ERR 4
+
#ifdef CONFIG_SDIO_HCI
#include <drv_types_sdio.h>
@@ -244,6 +245,11 @@ struct registry_priv
#define INTF_DATA GSPI_DATA
#endif
+#ifdef CONFIG_CONCURRENT_MODE
+#define is_primary_adapter(adapter) (adapter->adapter_type == PRIMARY_ADAPTER)
+#else
+#define is_primary_adapter(adapter) (1)
+#endif
#define GET_PRIMARY_ADAPTER(padapter) (((_adapter *)padapter)->dvobj->if1)
#define GET_IFACE_NUMS(padapter) (((_adapter *)padapter)->dvobj->iface_nums)
@@ -261,6 +267,8 @@ struct dvobj_priv
{
_adapter *if1; //PRIMARY_ADAPTER
_adapter *if2; //SECONDARY_ADAPTER
+
+ s32 processing_dev_remove;
//for local/global synchronization
_mutex hw_init_mutex;
@@ -271,6 +279,7 @@ struct dvobj_priv
unsigned char oper_channel; //saved channel info when call set_channel_bw
unsigned char oper_bwmode;
unsigned char oper_ch_offset;//PRIME_CHNL_OFFSET
+ u32 on_oper_ch_time;
_adapter *padapters[IFACE_ID_MAX];
u8 iface_nums; // total number of ifaces used runtime
@@ -285,6 +294,9 @@ struct dvobj_priv
u8 Queue2Pipe[HW_QUEUE_ENTRY];//for out pipe mapping
u8 irq_alloc;
+ ATOMIC_T continual_io_error;
+
+ struct pwrctrl_priv pwrctl_priv;
/*-------- below is for SDIO INTERFACE --------*/
@@ -349,7 +361,7 @@ struct dvobj_priv
struct usb_interface *pusbintf;
struct usb_device *pusbdev;
#endif//PLATFORM_FREEBSD
- ATOMIC_T continual_urb_error;
+
#endif//CONFIG_USB_HCI
/*-------- below is for PCIE INTERFACE --------*/
@@ -391,6 +403,9 @@ struct dvobj_priv
#endif//CONFIG_PCI_HCI
};
+#define dvobj_to_pwrctl(dvobj) (&(dvobj->pwrctl_priv))
+#define pwrctl_to_dvobj(pwrctl) container_of(pwrctl, struct dvobj_priv, pwrctl_priv)
+
#ifdef PLATFORM_LINUX
static struct device *dvobj_to_dev(struct dvobj_priv *dvobj)
{
@@ -479,8 +494,8 @@ struct _ADAPTER{
struct recv_priv recvpriv;
struct sta_priv stapriv;
struct security_priv securitypriv;
+ _lock security_key_mutex; // add for CONFIG_IEEE80211W, none 11w also can use
struct registry_priv registrypriv;
- struct pwrctrl_priv pwrctrlpriv;
struct eeprom_priv eeprompriv;
struct led_priv ledpriv;
#if defined(CONFIG_CHECK_BT_HANG) && defined(CONFIG_BT_COEXIST)
@@ -580,6 +595,7 @@ struct _ADAPTER{
struct net_device_stats stats;
struct iw_statistics iwstats;
struct proc_dir_entry *dir_dev;// for proc directory
+ struct proc_dir_entry *dir_odm;
#ifdef CONFIG_IOCTL_CFG80211
struct wireless_dev *rtw_wdev;
@@ -665,6 +681,7 @@ struct _ADAPTER{
};
#define adapter_to_dvobj(adapter) (adapter->dvobj)
+#define adapter_to_pwrctl(adapter) (&(adapter->dvobj->pwrctl_priv))
int rtw_handle_dualmac(_adapter *adapter, bool init);
diff --git a/drivers/net/wireless/rtl8723as/include/drv_types_gspi.h b/drivers/net/wireless/rtl8723as/include/drv_types_gspi.h
index fafd0dfd78e9..4d42c9cc837c 100755
--- a/drivers/net/wireless/rtl8723as/include/drv_types_gspi.h
+++ b/drivers/net/wireless/rtl8723as/include/drv_types_gspi.h
@@ -1,49 +1,49 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __DRV_TYPES_GSPI_H__
-#define __DRV_TYPES_GSPI_H__
-
-#include <drv_conf.h>
-#include <basic_types.h>
-
-// SPI Header Files
-#ifdef PLATFORM_LINUX
-#include <linux/spi/spi.h>
-#endif
-
-
-typedef struct gspi_data
-{
- u8 func_number;
-
- u8 tx_block_mode;
- u8 rx_block_mode;
- u32 block_transfer_len;
-
-#ifdef PLATFORM_LINUX
- struct spi_device *func;
-
- struct workqueue_struct *priv_wq;
- struct delayed_work irq_work;
-#endif
-} GSPI_DATA, *PGSPI_DATA;
-
-#endif // #ifndef __DRV_TYPES_GSPI_H__
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __DRV_TYPES_GSPI_H__
+#define __DRV_TYPES_GSPI_H__
+
+#include <drv_conf.h>
+#include <basic_types.h>
+
+// SPI Header Files
+#ifdef PLATFORM_LINUX
+#include <linux/spi/spi.h>
+#endif
+
+
+typedef struct gspi_data
+{
+ u8 func_number;
+
+ u8 tx_block_mode;
+ u8 rx_block_mode;
+ u32 block_transfer_len;
+
+#ifdef PLATFORM_LINUX
+ struct spi_device *func;
+
+ struct workqueue_struct *priv_wq;
+ struct delayed_work irq_work;
+#endif
+} GSPI_DATA, *PGSPI_DATA;
+
+#endif // #ifndef __DRV_TYPES_GSPI_H__
+
diff --git a/drivers/net/wireless/rtl8723as/include/drv_types_sdio.h b/drivers/net/wireless/rtl8723as/include/drv_types_sdio.h
index 3e7dfcc2eefe..7e2b9ed2f71c 100755
--- a/drivers/net/wireless/rtl8723as/include/drv_types_sdio.h
+++ b/drivers/net/wireless/rtl8723as/include/drv_types_sdio.h
@@ -1,71 +1,71 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __DRV_TYPES_SDIO_H__
-#define __DRV_TYPES_SDIO_H__
-
-#include <drv_conf.h>
-#include <basic_types.h>
-
-// SDIO Header Files
-#ifdef PLATFORM_LINUX
-#include <linux/mmc/sdio_func.h>
-#endif
-#ifdef PLATFORM_OS_XP
-#include <wdm.h>
-#include <ntddsd.h>
-#endif
-#ifdef PLATFORM_OS_CE
-#include <sdcardddk.h>
-#endif
-
-
-typedef struct sdio_data
-{
- u8 func_number;
-
- u8 tx_block_mode;
- u8 rx_block_mode;
- u32 block_transfer_len;
-
-#ifdef PLATFORM_LINUX
- struct sdio_func *func;
- _thread_hdl_ sys_sdio_irq_thd;
-#endif
-
-#ifdef PLATFORM_OS_XP
- PDEVICE_OBJECT pphysdevobj;
- PDEVICE_OBJECT pfuncdevobj;
- PDEVICE_OBJECT pnextdevobj;
- SDBUS_INTERFACE_STANDARD sdbusinft;
- u8 nextdevstacksz;
-#endif
-
-#ifdef PLATFORM_OS_CE
- SD_DEVICE_HANDLE hDevice;
- SD_CARD_RCA sd_rca;
- SD_CARD_INTERFACE card_intf;
- BOOLEAN enableIsarWithStatus;
- WCHAR active_path[MAX_ACTIVE_REG_PATH];
- SD_HOST_BLOCK_CAPABILITY sd_host_blk_cap;
-#endif
-} SDIO_DATA, *PSDIO_DATA;
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __DRV_TYPES_SDIO_H__
+#define __DRV_TYPES_SDIO_H__
+
+#include <drv_conf.h>
+#include <basic_types.h>
+
+// SDIO Header Files
+#ifdef PLATFORM_LINUX
+#include <linux/mmc/sdio_func.h>
+#endif
+#ifdef PLATFORM_OS_XP
+#include <wdm.h>
+#include <ntddsd.h>
+#endif
+#ifdef PLATFORM_OS_CE
+#include <sdcardddk.h>
+#endif
+
+
+typedef struct sdio_data
+{
+ u8 func_number;
+
+ u8 tx_block_mode;
+ u8 rx_block_mode;
+ u32 block_transfer_len;
+
+#ifdef PLATFORM_LINUX
+ struct sdio_func *func;
+ _thread_hdl_ sys_sdio_irq_thd;
+#endif
+
+#ifdef PLATFORM_OS_XP
+ PDEVICE_OBJECT pphysdevobj;
+ PDEVICE_OBJECT pfuncdevobj;
+ PDEVICE_OBJECT pnextdevobj;
+ SDBUS_INTERFACE_STANDARD sdbusinft;
+ u8 nextdevstacksz;
+#endif
+
+#ifdef PLATFORM_OS_CE
+ SD_DEVICE_HANDLE hDevice;
+ SD_CARD_RCA sd_rca;
+ SD_CARD_INTERFACE card_intf;
+ BOOLEAN enableIsarWithStatus;
+ WCHAR active_path[MAX_ACTIVE_REG_PATH];
+ SD_HOST_BLOCK_CAPABILITY sd_host_blk_cap;
+#endif
+} SDIO_DATA, *PSDIO_DATA;
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/hal_com.h b/drivers/net/wireless/rtl8723as/include/hal_com.h
index 13f50d67d3b8..e1542783ae28 100755
--- a/drivers/net/wireless/rtl8723as/include/hal_com.h
+++ b/drivers/net/wireless/rtl8723as/include/hal_com.h
@@ -178,5 +178,8 @@ void hal_init_macaddr(_adapter *adapter);
void c2h_evt_clear(_adapter *adapter);
s32 c2h_evt_read(_adapter *adapter, u8 *buf);
+u8 SetHalDefVar(_adapter *adapter, HAL_DEF_VARIABLE variable, void *value);
+u8 GetHalDefVar(_adapter *adapter, HAL_DEF_VARIABLE variable, void *value);
+
#endif //__HAL_COMMON_H__
diff --git a/drivers/net/wireless/rtl8723as/include/hal_intf.h b/drivers/net/wireless/rtl8723as/include/hal_intf.h
index 63737c76fa2d..da9d42b4c723 100755
--- a/drivers/net/wireless/rtl8723as/include/hal_intf.h
+++ b/drivers/net/wireless/rtl8723as/include/hal_intf.h
@@ -89,6 +89,7 @@ typedef enum _HW_VARIABLES{
HW_VAR_AMPDU_FACTOR,
HW_VAR_RXDMA_AGG_PG_TH,
HW_VAR_SET_RPWM,
+ HW_VAR_GET_CPWM,
HW_VAR_H2C_FW_PWRMODE,
HW_VAR_H2C_FW_JOINBSSRPT,
HW_VAR_FWLPS_RF_ON,
@@ -123,6 +124,8 @@ typedef enum _HW_VARIABLES{
HW_VAR_H2C_MEDIA_STATUS_RPT,
HW_VAR_CHK_HI_QUEUE_EMPTY,
HW_VAR_READ_LLT_TAB,
+ HW_VAR_C2HEVT_CLEAR,
+ HW_VAR_C2HEVT_MSG_NORMAL,
}HW_VARIABLES;
typedef enum _HAL_DEF_VARIABLE{
@@ -142,6 +145,7 @@ typedef enum _HAL_DEF_VARIABLE{
HAL_DEF_DBG_DUMP_TXPKT,
HW_DEF_FA_CNT_DUMP,
HW_DEF_ODM_DBG_FLAG,
+ HW_DEF_ODM_DBG_LEVEL,
}HAL_DEF_VARIABLE;
typedef enum _HAL_ODM_VARIABLE{
@@ -210,9 +214,7 @@ struct hal_ops {
void (*SetBeaconRelatedRegistersHandler)(_adapter *padapter);
void (*Add_RateATid)(_adapter *padapter, u32 bitmap, u8 arg, u8 rssi_level);
-#ifdef CONFIG_CONCURRENT_MODE
- void (*clone_haldata)(_adapter *dst_padapter, _adapter *src_padapter);
-#endif
+
void (*run_thread)(_adapter *padapter);
void (*cancel_thread)(_adapter *padapter);
@@ -428,7 +430,7 @@ void rtw_hal_free_recv_priv(_adapter *padapter);
void rtw_hal_update_ra_mask(struct sta_info *psta, u8 rssi_level);
void rtw_hal_add_ra_tid(_adapter *padapter, u32 bitmap, u8 arg, u8 rssi_level);
-void rtw_hal_clone_data(_adapter *dst_padapter, _adapter *src_padapter);
+
void rtw_hal_start_thread(_adapter *padapter);
void rtw_hal_stop_thread(_adapter *padapter);
diff --git a/drivers/net/wireless/rtl8723as/include/ieee80211.h b/drivers/net/wireless/rtl8723as/include/ieee80211.h
index c8219783e89e..422c47aba5e6 100755
--- a/drivers/net/wireless/rtl8723as/include/ieee80211.h
+++ b/drivers/net/wireless/rtl8723as/include/ieee80211.h
@@ -821,7 +821,10 @@ struct ieee80211_softmac_stats{
#define WEP_KEYS 4
#define WEP_KEY_LEN 13
-
+#ifdef CONFIG_IEEE80211W
+#define BIP_MAX_KEYID 5
+#define BIP_AAD_SIZE 20
+#endif //CONFIG_IEEE80211W
#if defined(PLATFORM_LINUX) || defined(CONFIG_RTL8711FW)
@@ -1184,6 +1187,8 @@ enum ieee80211_state {
#define DEFAULT_FTS 2346
#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x"
#define MAC_ARG(x) ((u8*)(x))[0],((u8*)(x))[1],((u8*)(x))[2],((u8*)(x))[3],((u8*)(x))[4],((u8*)(x))[5]
+#define IP_FMT "%d.%d.%d.%d"
+#define IP_ARG(x) ((u8*)(x))[0],((u8*)(x))[1],((u8*)(x))[2],((u8*)(x))[3]
#ifdef PLATFORM_FREEBSD //Baron change func to macro
#define is_multicast_mac_addr(Addr) ((((Addr[0]) & 0x01) == 0x01) && ((Addr[0]) != 0xff))
@@ -1201,6 +1206,12 @@ extern __inline int is_broadcast_mac_addr(const u8 *addr)
return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && \
(addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
}
+
+extern __inline int is_zero_mac_addr(const u8 *addr)
+{
+ return ((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && \
+ (addr[3] == 0x00) && (addr[4] == 0x00) && (addr[5] == 0x00));
+}
#endif //PLATFORM_FREEBSD
#define CFG_IEEE80211_RESERVE_FCS (1<<0)
@@ -1248,7 +1259,9 @@ enum rtw_ieee80211_category {
RTW_WLAN_CATEGORY_FT = 6,
RTW_WLAN_CATEGORY_HT = 7,
RTW_WLAN_CATEGORY_SA_QUERY = 8,
+ RTW_WLAN_CATEGORY_UNPROTECTED_WNM = 11, // add for CONFIG_IEEE80211W, none 11w also can use
RTW_WLAN_CATEGORY_TDLS = 12,
+ RTW_WLAN_CATEGORY_SELF_PROTECTED = 15, // add for CONFIG_IEEE80211W, none 11w also can use
RTW_WLAN_CATEGORY_WMM = 17,
RTW_WLAN_CATEGORY_P2P = 0x7f,//P2P action frames
};
@@ -1513,6 +1526,7 @@ int rtw_parse_wpa2_ie(u8* wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwi
int rtw_get_sec_ie(u8 *in_ie,uint in_len,u8 *rsn_ie,u16 *rsn_len,u8 *wpa_ie,u16 *wpa_len);
u8 rtw_is_wps_ie(u8 *ie_ptr, uint *wps_ielen);
+u8 *rtw_get_wps_ie_from_scan_queue(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen, u8 frame_type);
u8 *rtw_get_wps_ie(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen);
u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_attr, u32 *len_attr);
u8 *rtw_get_wps_attr_content(u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content, uint *len_content);
@@ -1530,8 +1544,11 @@ void dump_ies(u8 *buf, u32 buf_len);
void dump_wps_ie(u8 *ie, u32 ie_len);
#ifdef CONFIG_P2P
+u32 rtw_get_p2p_merged_ies_len(u8 *in_ie, u32 in_len);
+int rtw_p2p_merge_ies(u8 *in_ie, u32 in_len, u8 *merge_ie);
void dump_p2p_ie(u8 *ie, u32 ie_len);
u8 *rtw_get_p2p_ie(u8 *in_ie, int in_len, u8 *p2p_ie, uint *p2p_ielen);
+u8 *rtw_get_p2p_ie_from_scan_queue(u8 *in_ie, int in_len, u8 *p2p_ie, uint *p2p_ielen, u8 frame_type);
u8 *rtw_get_p2p_attr(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id ,u8 *buf_attr, u32 *len_attr);
u8 *rtw_get_p2p_attr_content(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id ,u8 *buf_content, uint *len_content);
u32 rtw_set_p2p_attr_content(u8 *pbuf, u8 attr_id, u16 attr_len, u8 *pdata_attr);
@@ -1539,7 +1556,9 @@ void rtw_WLAN_BSSID_EX_remove_p2p_attr(WLAN_BSSID_EX *bss_ex, u8 attr_id);
#endif
#ifdef CONFIG_WFD
+void dump_wfd_ie(u8 *ie, u32 ie_len);
int rtw_get_wfd_ie(u8 *in_ie, int in_len, u8 *wfd_ie, uint *wfd_ielen);
+int rtw_get_wfd_ie_from_scan_queue(u8 *in_ie, int in_len, u8 *p2p_ie, uint *p2p_ielen, u8 frame_type);
int rtw_get_wfd_attr_content(u8 *wfd_ie, uint wfd_ielen, u8 target_attr_id ,u8 *attr_content, uint *attr_contentlen);
#endif // CONFIG_WFD
diff --git a/drivers/net/wireless/rtl8723as/include/ieee80211_ext.h b/drivers/net/wireless/rtl8723as/include/ieee80211_ext.h
index 3e55305e1d98..14f1b239c72f 100755
--- a/drivers/net/wireless/rtl8723as/include/ieee80211_ext.h
+++ b/drivers/net/wireless/rtl8723as/include/ieee80211_ext.h
@@ -16,462 +16,462 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
*
- ******************************************************************************/
-#ifndef __IEEE80211_EXT_H
-#define __IEEE80211_EXT_H
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-
-#define WMM_OUI_TYPE 2
-#define WMM_OUI_SUBTYPE_INFORMATION_ELEMENT 0
-#define WMM_OUI_SUBTYPE_PARAMETER_ELEMENT 1
-#define WMM_OUI_SUBTYPE_TSPEC_ELEMENT 2
-#define WMM_VERSION 1
-
-#define WPA_PROTO_WPA BIT(0)
-#define WPA_PROTO_RSN BIT(1)
-
-#define WPA_KEY_MGMT_IEEE8021X BIT(0)
-#define WPA_KEY_MGMT_PSK BIT(1)
-#define WPA_KEY_MGMT_NONE BIT(2)
-#define WPA_KEY_MGMT_IEEE8021X_NO_WPA BIT(3)
-#define WPA_KEY_MGMT_WPA_NONE BIT(4)
-
-
-#define WPA_CAPABILITY_PREAUTH BIT(0)
-#define WPA_CAPABILITY_MGMT_FRAME_PROTECTION BIT(6)
-#define WPA_CAPABILITY_PEERKEY_ENABLED BIT(9)
-
-
-#define PMKID_LEN 16
-
-
-#ifdef PLATFORM_LINUX
-struct wpa_ie_hdr {
- u8 elem_id;
- u8 len;
- u8 oui[4]; /* 24-bit OUI followed by 8-bit OUI type */
- u8 version[2]; /* little endian */
-}__attribute__ ((packed));
-
-struct rsn_ie_hdr {
- u8 elem_id; /* WLAN_EID_RSN */
- u8 len;
- u8 version[2]; /* little endian */
-}__attribute__ ((packed));
-
-struct wme_ac_parameter {
-#if defined(CONFIG_LITTLE_ENDIAN)
- /* byte 1 */
- u8 aifsn:4,
- acm:1,
- aci:2,
- reserved:1;
-
- /* byte 2 */
- u8 eCWmin:4,
- eCWmax:4;
-#elif defined(CONFIG_BIG_ENDIAN)
- /* byte 1 */
- u8 reserved:1,
- aci:2,
- acm:1,
- aifsn:4;
-
- /* byte 2 */
- u8 eCWmax:4,
- eCWmin:4;
-#else
-#error "Please fix <endian.h>"
-#endif
-
- /* bytes 3 & 4 */
- u16 txopLimit;
-} __attribute__ ((packed));
-
-struct wme_parameter_element {
- /* required fields for WME version 1 */
- u8 oui[3];
- u8 oui_type;
- u8 oui_subtype;
- u8 version;
- u8 acInfo;
- u8 reserved;
- struct wme_ac_parameter ac[4];
-
-} __attribute__ ((packed));
-
-#endif
-
-#ifdef PLATFORM_WINDOWS
-
-#pragma pack(1)
-
-struct wpa_ie_hdr {
- u8 elem_id;
- u8 len;
- u8 oui[4]; /* 24-bit OUI followed by 8-bit OUI type */
- u8 version[2]; /* little endian */
-};
-
-struct rsn_ie_hdr {
- u8 elem_id; /* WLAN_EID_RSN */
- u8 len;
- u8 version[2]; /* little endian */
-};
-
-#pragma pack()
-
-#endif
-
-#define WPA_PUT_LE16(a, val) \
- do { \
- (a)[1] = ((u16) (val)) >> 8; \
- (a)[0] = ((u16) (val)) & 0xff; \
- } while (0)
-
-#define WPA_PUT_BE32(a, val) \
- do { \
- (a)[0] = (u8) ((((u32) (val)) >> 24) & 0xff); \
- (a)[1] = (u8) ((((u32) (val)) >> 16) & 0xff); \
- (a)[2] = (u8) ((((u32) (val)) >> 8) & 0xff); \
- (a)[3] = (u8) (((u32) (val)) & 0xff); \
- } while (0)
-
-#define WPA_PUT_LE32(a, val) \
- do { \
- (a)[3] = (u8) ((((u32) (val)) >> 24) & 0xff); \
- (a)[2] = (u8) ((((u32) (val)) >> 16) & 0xff); \
- (a)[1] = (u8) ((((u32) (val)) >> 8) & 0xff); \
- (a)[0] = (u8) (((u32) (val)) & 0xff); \
- } while (0)
-
-#define RSN_SELECTOR_PUT(a, val) WPA_PUT_BE32((u8 *) (a), (val))
-//#define RSN_SELECTOR_PUT(a, val) WPA_PUT_LE32((u8 *) (a), (val))
-
-
-
-/* Action category code */
-enum ieee80211_category {
- WLAN_CATEGORY_SPECTRUM_MGMT = 0,
- WLAN_CATEGORY_QOS = 1,
- WLAN_CATEGORY_DLS = 2,
- WLAN_CATEGORY_BACK = 3,
- WLAN_CATEGORY_HT = 7,
- WLAN_CATEGORY_WMM = 17,
-};
-
-/* SPECTRUM_MGMT action code */
-enum ieee80211_spectrum_mgmt_actioncode {
- WLAN_ACTION_SPCT_MSR_REQ = 0,
- WLAN_ACTION_SPCT_MSR_RPRT = 1,
- WLAN_ACTION_SPCT_TPC_REQ = 2,
- WLAN_ACTION_SPCT_TPC_RPRT = 3,
- WLAN_ACTION_SPCT_CHL_SWITCH = 4,
- WLAN_ACTION_SPCT_EXT_CHL_SWITCH = 5,
-};
-
-/* BACK action code */
-enum ieee80211_back_actioncode {
- WLAN_ACTION_ADDBA_REQ = 0,
- WLAN_ACTION_ADDBA_RESP = 1,
- WLAN_ACTION_DELBA = 2,
-};
-
-/* HT features action code */
-enum ieee80211_ht_actioncode {
- WLAN_ACTION_NOTIFY_CH_WIDTH = 0,
- WLAN_ACTION_SM_PS = 1,
- WLAN_ACTION_PSPM = 2,
- WLAN_ACTION_PCO_PHASE = 3,
- WLAN_ACTION_MIMO_CSI_MX = 4,
- WLAN_ACTION_MIMO_NONCP_BF = 5,
- WLAN_ACTION_MIMP_CP_BF = 6,
- WLAN_ACTION_ASEL_INDICATES_FB = 7,
- WLAN_ACTION_HI_INFO_EXCHG = 8,
-};
-
-/* BACK (block-ack) parties */
-enum ieee80211_back_parties {
- WLAN_BACK_RECIPIENT = 0,
- WLAN_BACK_INITIATOR = 1,
- WLAN_BACK_TIMER = 2,
-};
-
-#ifdef PLATFORM_LINUX
-
-struct ieee80211_mgmt {
- u16 frame_control;
- u16 duration;
- u8 da[6];
- u8 sa[6];
- u8 bssid[6];
- u16 seq_ctrl;
- union {
- struct {
- u16 auth_alg;
- u16 auth_transaction;
- u16 status_code;
- /* possibly followed by Challenge text */
- u8 variable[0];
- } __attribute__ ((packed)) auth;
- struct {
- u16 reason_code;
- } __attribute__ ((packed)) deauth;
- struct {
- u16 capab_info;
- u16 listen_interval;
- /* followed by SSID and Supported rates */
- u8 variable[0];
- } __attribute__ ((packed)) assoc_req;
- struct {
- u16 capab_info;
- u16 status_code;
- u16 aid;
- /* followed by Supported rates */
- u8 variable[0];
- } __attribute__ ((packed)) assoc_resp, reassoc_resp;
- struct {
- u16 capab_info;
- u16 listen_interval;
- u8 current_ap[6];
- /* followed by SSID and Supported rates */
- u8 variable[0];
- } __attribute__ ((packed)) reassoc_req;
- struct {
- u16 reason_code;
- } __attribute__ ((packed)) disassoc;
- struct {
- __le64 timestamp;
- u16 beacon_int;
- u16 capab_info;
- /* followed by some of SSID, Supported rates,
- * FH Params, DS Params, CF Params, IBSS Params, TIM */
- u8 variable[0];
- } __attribute__ ((packed)) beacon;
- struct {
- /* only variable items: SSID, Supported rates */
- u8 variable[0];
- } __attribute__ ((packed)) probe_req;
- struct {
- __le64 timestamp;
- u16 beacon_int;
- u16 capab_info;
- /* followed by some of SSID, Supported rates,
- * FH Params, DS Params, CF Params, IBSS Params */
- u8 variable[0];
- } __attribute__ ((packed)) probe_resp;
- struct {
- u8 category;
- union {
- struct {
- u8 action_code;
- u8 dialog_token;
- u8 status_code;
- u8 variable[0];
- } __attribute__ ((packed)) wme_action;
-#if 0
- struct{
- u8 action_code;
- u8 element_id;
- u8 length;
- struct ieee80211_channel_sw_ie sw_elem;
- } __attribute__ ((packed)) chan_switch;
- struct{
- u8 action_code;
- u8 dialog_token;
- u8 element_id;
- u8 length;
- struct ieee80211_msrment_ie msr_elem;
- } __attribute__ ((packed)) measurement;
-#endif
- struct{
- u8 action_code;
- u8 dialog_token;
- u16 capab;
- u16 timeout;
- u16 start_seq_num;
- } __attribute__ ((packed)) addba_req;
- struct{
- u8 action_code;
- u8 dialog_token;
- u16 status;
- u16 capab;
- u16 timeout;
- } __attribute__ ((packed)) addba_resp;
- struct{
- u8 action_code;
- u16 params;
- u16 reason_code;
- } __attribute__ ((packed)) delba;
- struct{
- u8 action_code;
- /* capab_info for open and confirm,
- * reason for close
- */
- u16 aux;
- /* Followed in plink_confirm by status
- * code, AID and supported rates,
- * and directly by supported rates in
- * plink_open and plink_close
- */
- u8 variable[0];
- } __attribute__ ((packed)) plink_action;
- struct{
- u8 action_code;
- u8 variable[0];
- } __attribute__ ((packed)) mesh_action;
- } __attribute__ ((packed)) u;
- } __attribute__ ((packed)) action;
- } __attribute__ ((packed)) u;
-}__attribute__ ((packed));
-
-#endif
-
-
-#ifdef PLATFORM_WINDOWS
-
-#pragma pack(1)
-
-struct ieee80211_mgmt {
- u16 frame_control;
- u16 duration;
- u8 da[6];
- u8 sa[6];
- u8 bssid[6];
- u16 seq_ctrl;
- union {
- struct {
- u16 auth_alg;
- u16 auth_transaction;
- u16 status_code;
- /* possibly followed by Challenge text */
- u8 variable[0];
- } auth;
- struct {
- u16 reason_code;
- } deauth;
- struct {
- u16 capab_info;
- u16 listen_interval;
- /* followed by SSID and Supported rates */
- u8 variable[0];
- } assoc_req;
- struct {
- u16 capab_info;
- u16 status_code;
- u16 aid;
- /* followed by Supported rates */
- u8 variable[0];
- } assoc_resp, reassoc_resp;
- struct {
- u16 capab_info;
- u16 listen_interval;
- u8 current_ap[6];
- /* followed by SSID and Supported rates */
- u8 variable[0];
- } reassoc_req;
- struct {
- u16 reason_code;
- } disassoc;
-#if 0
- struct {
- __le64 timestamp;
- u16 beacon_int;
- u16 capab_info;
- /* followed by some of SSID, Supported rates,
- * FH Params, DS Params, CF Params, IBSS Params, TIM */
- u8 variable[0];
- } beacon;
- struct {
- /* only variable items: SSID, Supported rates */
- u8 variable[0];
- } probe_req;
-
- struct {
- __le64 timestamp;
- u16 beacon_int;
- u16 capab_info;
- /* followed by some of SSID, Supported rates,
- * FH Params, DS Params, CF Params, IBSS Params */
- u8 variable[0];
- } probe_resp;
-#endif
- struct {
- u8 category;
- union {
- struct {
- u8 action_code;
- u8 dialog_token;
- u8 status_code;
- u8 variable[0];
- } wme_action;
-/*
- struct{
- u8 action_code;
- u8 element_id;
- u8 length;
- struct ieee80211_channel_sw_ie sw_elem;
- } chan_switch;
- struct{
- u8 action_code;
- u8 dialog_token;
- u8 element_id;
- u8 length;
- struct ieee80211_msrment_ie msr_elem;
- } measurement;
-*/
- struct{
- u8 action_code;
- u8 dialog_token;
- u16 capab;
- u16 timeout;
- u16 start_seq_num;
- } addba_req;
- struct{
- u8 action_code;
- u8 dialog_token;
- u16 status;
- u16 capab;
- u16 timeout;
- } addba_resp;
- struct{
- u8 action_code;
- u16 params;
- u16 reason_code;
- } delba;
- struct{
- u8 action_code;
- /* capab_info for open and confirm,
- * reason for close
- */
- u16 aux;
- /* Followed in plink_confirm by status
- * code, AID and supported rates,
- * and directly by supported rates in
- * plink_open and plink_close
- */
- u8 variable[0];
- } plink_action;
- struct{
- u8 action_code;
- u8 variable[0];
- } mesh_action;
- } u;
- } action;
- } u;
-} ;
-
-#pragma pack()
-
-#endif
-
-/* mgmt header + 1 byte category code */
-#define IEEE80211_MIN_ACTION_SIZE FIELD_OFFSET(struct ieee80211_mgmt, u.action.u)
-
-
-
-#endif
-
+ ******************************************************************************/
+#ifndef __IEEE80211_EXT_H
+#define __IEEE80211_EXT_H
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+
+#define WMM_OUI_TYPE 2
+#define WMM_OUI_SUBTYPE_INFORMATION_ELEMENT 0
+#define WMM_OUI_SUBTYPE_PARAMETER_ELEMENT 1
+#define WMM_OUI_SUBTYPE_TSPEC_ELEMENT 2
+#define WMM_VERSION 1
+
+#define WPA_PROTO_WPA BIT(0)
+#define WPA_PROTO_RSN BIT(1)
+
+#define WPA_KEY_MGMT_IEEE8021X BIT(0)
+#define WPA_KEY_MGMT_PSK BIT(1)
+#define WPA_KEY_MGMT_NONE BIT(2)
+#define WPA_KEY_MGMT_IEEE8021X_NO_WPA BIT(3)
+#define WPA_KEY_MGMT_WPA_NONE BIT(4)
+
+
+#define WPA_CAPABILITY_PREAUTH BIT(0)
+#define WPA_CAPABILITY_MGMT_FRAME_PROTECTION BIT(6)
+#define WPA_CAPABILITY_PEERKEY_ENABLED BIT(9)
+
+
+#define PMKID_LEN 16
+
+
+#ifdef PLATFORM_LINUX
+struct wpa_ie_hdr {
+ u8 elem_id;
+ u8 len;
+ u8 oui[4]; /* 24-bit OUI followed by 8-bit OUI type */
+ u8 version[2]; /* little endian */
+}__attribute__ ((packed));
+
+struct rsn_ie_hdr {
+ u8 elem_id; /* WLAN_EID_RSN */
+ u8 len;
+ u8 version[2]; /* little endian */
+}__attribute__ ((packed));
+
+struct wme_ac_parameter {
+#if defined(CONFIG_LITTLE_ENDIAN)
+ /* byte 1 */
+ u8 aifsn:4,
+ acm:1,
+ aci:2,
+ reserved:1;
+
+ /* byte 2 */
+ u8 eCWmin:4,
+ eCWmax:4;
+#elif defined(CONFIG_BIG_ENDIAN)
+ /* byte 1 */
+ u8 reserved:1,
+ aci:2,
+ acm:1,
+ aifsn:4;
+
+ /* byte 2 */
+ u8 eCWmax:4,
+ eCWmin:4;
+#else
+#error "Please fix <endian.h>"
+#endif
+
+ /* bytes 3 & 4 */
+ u16 txopLimit;
+} __attribute__ ((packed));
+
+struct wme_parameter_element {
+ /* required fields for WME version 1 */
+ u8 oui[3];
+ u8 oui_type;
+ u8 oui_subtype;
+ u8 version;
+ u8 acInfo;
+ u8 reserved;
+ struct wme_ac_parameter ac[4];
+
+} __attribute__ ((packed));
+
+#endif
+
+#ifdef PLATFORM_WINDOWS
+
+#pragma pack(1)
+
+struct wpa_ie_hdr {
+ u8 elem_id;
+ u8 len;
+ u8 oui[4]; /* 24-bit OUI followed by 8-bit OUI type */
+ u8 version[2]; /* little endian */
+};
+
+struct rsn_ie_hdr {
+ u8 elem_id; /* WLAN_EID_RSN */
+ u8 len;
+ u8 version[2]; /* little endian */
+};
+
+#pragma pack()
+
+#endif
+
+#define WPA_PUT_LE16(a, val) \
+ do { \
+ (a)[1] = ((u16) (val)) >> 8; \
+ (a)[0] = ((u16) (val)) & 0xff; \
+ } while (0)
+
+#define WPA_PUT_BE32(a, val) \
+ do { \
+ (a)[0] = (u8) ((((u32) (val)) >> 24) & 0xff); \
+ (a)[1] = (u8) ((((u32) (val)) >> 16) & 0xff); \
+ (a)[2] = (u8) ((((u32) (val)) >> 8) & 0xff); \
+ (a)[3] = (u8) (((u32) (val)) & 0xff); \
+ } while (0)
+
+#define WPA_PUT_LE32(a, val) \
+ do { \
+ (a)[3] = (u8) ((((u32) (val)) >> 24) & 0xff); \
+ (a)[2] = (u8) ((((u32) (val)) >> 16) & 0xff); \
+ (a)[1] = (u8) ((((u32) (val)) >> 8) & 0xff); \
+ (a)[0] = (u8) (((u32) (val)) & 0xff); \
+ } while (0)
+
+#define RSN_SELECTOR_PUT(a, val) WPA_PUT_BE32((u8 *) (a), (val))
+//#define RSN_SELECTOR_PUT(a, val) WPA_PUT_LE32((u8 *) (a), (val))
+
+
+
+/* Action category code */
+enum ieee80211_category {
+ WLAN_CATEGORY_SPECTRUM_MGMT = 0,
+ WLAN_CATEGORY_QOS = 1,
+ WLAN_CATEGORY_DLS = 2,
+ WLAN_CATEGORY_BACK = 3,
+ WLAN_CATEGORY_HT = 7,
+ WLAN_CATEGORY_WMM = 17,
+};
+
+/* SPECTRUM_MGMT action code */
+enum ieee80211_spectrum_mgmt_actioncode {
+ WLAN_ACTION_SPCT_MSR_REQ = 0,
+ WLAN_ACTION_SPCT_MSR_RPRT = 1,
+ WLAN_ACTION_SPCT_TPC_REQ = 2,
+ WLAN_ACTION_SPCT_TPC_RPRT = 3,
+ WLAN_ACTION_SPCT_CHL_SWITCH = 4,
+ WLAN_ACTION_SPCT_EXT_CHL_SWITCH = 5,
+};
+
+/* BACK action code */
+enum ieee80211_back_actioncode {
+ WLAN_ACTION_ADDBA_REQ = 0,
+ WLAN_ACTION_ADDBA_RESP = 1,
+ WLAN_ACTION_DELBA = 2,
+};
+
+/* HT features action code */
+enum ieee80211_ht_actioncode {
+ WLAN_ACTION_NOTIFY_CH_WIDTH = 0,
+ WLAN_ACTION_SM_PS = 1,
+ WLAN_ACTION_PSPM = 2,
+ WLAN_ACTION_PCO_PHASE = 3,
+ WLAN_ACTION_MIMO_CSI_MX = 4,
+ WLAN_ACTION_MIMO_NONCP_BF = 5,
+ WLAN_ACTION_MIMP_CP_BF = 6,
+ WLAN_ACTION_ASEL_INDICATES_FB = 7,
+ WLAN_ACTION_HI_INFO_EXCHG = 8,
+};
+
+/* BACK (block-ack) parties */
+enum ieee80211_back_parties {
+ WLAN_BACK_RECIPIENT = 0,
+ WLAN_BACK_INITIATOR = 1,
+ WLAN_BACK_TIMER = 2,
+};
+
+#ifdef PLATFORM_LINUX
+
+struct ieee80211_mgmt {
+ u16 frame_control;
+ u16 duration;
+ u8 da[6];
+ u8 sa[6];
+ u8 bssid[6];
+ u16 seq_ctrl;
+ union {
+ struct {
+ u16 auth_alg;
+ u16 auth_transaction;
+ u16 status_code;
+ /* possibly followed by Challenge text */
+ u8 variable[0];
+ } __attribute__ ((packed)) auth;
+ struct {
+ u16 reason_code;
+ } __attribute__ ((packed)) deauth;
+ struct {
+ u16 capab_info;
+ u16 listen_interval;
+ /* followed by SSID and Supported rates */
+ u8 variable[0];
+ } __attribute__ ((packed)) assoc_req;
+ struct {
+ u16 capab_info;
+ u16 status_code;
+ u16 aid;
+ /* followed by Supported rates */
+ u8 variable[0];
+ } __attribute__ ((packed)) assoc_resp, reassoc_resp;
+ struct {
+ u16 capab_info;
+ u16 listen_interval;
+ u8 current_ap[6];
+ /* followed by SSID and Supported rates */
+ u8 variable[0];
+ } __attribute__ ((packed)) reassoc_req;
+ struct {
+ u16 reason_code;
+ } __attribute__ ((packed)) disassoc;
+ struct {
+ __le64 timestamp;
+ u16 beacon_int;
+ u16 capab_info;
+ /* followed by some of SSID, Supported rates,
+ * FH Params, DS Params, CF Params, IBSS Params, TIM */
+ u8 variable[0];
+ } __attribute__ ((packed)) beacon;
+ struct {
+ /* only variable items: SSID, Supported rates */
+ u8 variable[0];
+ } __attribute__ ((packed)) probe_req;
+ struct {
+ __le64 timestamp;
+ u16 beacon_int;
+ u16 capab_info;
+ /* followed by some of SSID, Supported rates,
+ * FH Params, DS Params, CF Params, IBSS Params */
+ u8 variable[0];
+ } __attribute__ ((packed)) probe_resp;
+ struct {
+ u8 category;
+ union {
+ struct {
+ u8 action_code;
+ u8 dialog_token;
+ u8 status_code;
+ u8 variable[0];
+ } __attribute__ ((packed)) wme_action;
+#if 0
+ struct{
+ u8 action_code;
+ u8 element_id;
+ u8 length;
+ struct ieee80211_channel_sw_ie sw_elem;
+ } __attribute__ ((packed)) chan_switch;
+ struct{
+ u8 action_code;
+ u8 dialog_token;
+ u8 element_id;
+ u8 length;
+ struct ieee80211_msrment_ie msr_elem;
+ } __attribute__ ((packed)) measurement;
+#endif
+ struct{
+ u8 action_code;
+ u8 dialog_token;
+ u16 capab;
+ u16 timeout;
+ u16 start_seq_num;
+ } __attribute__ ((packed)) addba_req;
+ struct{
+ u8 action_code;
+ u8 dialog_token;
+ u16 status;
+ u16 capab;
+ u16 timeout;
+ } __attribute__ ((packed)) addba_resp;
+ struct{
+ u8 action_code;
+ u16 params;
+ u16 reason_code;
+ } __attribute__ ((packed)) delba;
+ struct{
+ u8 action_code;
+ /* capab_info for open and confirm,
+ * reason for close
+ */
+ u16 aux;
+ /* Followed in plink_confirm by status
+ * code, AID and supported rates,
+ * and directly by supported rates in
+ * plink_open and plink_close
+ */
+ u8 variable[0];
+ } __attribute__ ((packed)) plink_action;
+ struct{
+ u8 action_code;
+ u8 variable[0];
+ } __attribute__ ((packed)) mesh_action;
+ } __attribute__ ((packed)) u;
+ } __attribute__ ((packed)) action;
+ } __attribute__ ((packed)) u;
+}__attribute__ ((packed));
+
+#endif
+
+
+#ifdef PLATFORM_WINDOWS
+
+#pragma pack(1)
+
+struct ieee80211_mgmt {
+ u16 frame_control;
+ u16 duration;
+ u8 da[6];
+ u8 sa[6];
+ u8 bssid[6];
+ u16 seq_ctrl;
+ union {
+ struct {
+ u16 auth_alg;
+ u16 auth_transaction;
+ u16 status_code;
+ /* possibly followed by Challenge text */
+ u8 variable[0];
+ } auth;
+ struct {
+ u16 reason_code;
+ } deauth;
+ struct {
+ u16 capab_info;
+ u16 listen_interval;
+ /* followed by SSID and Supported rates */
+ u8 variable[0];
+ } assoc_req;
+ struct {
+ u16 capab_info;
+ u16 status_code;
+ u16 aid;
+ /* followed by Supported rates */
+ u8 variable[0];
+ } assoc_resp, reassoc_resp;
+ struct {
+ u16 capab_info;
+ u16 listen_interval;
+ u8 current_ap[6];
+ /* followed by SSID and Supported rates */
+ u8 variable[0];
+ } reassoc_req;
+ struct {
+ u16 reason_code;
+ } disassoc;
+#if 0
+ struct {
+ __le64 timestamp;
+ u16 beacon_int;
+ u16 capab_info;
+ /* followed by some of SSID, Supported rates,
+ * FH Params, DS Params, CF Params, IBSS Params, TIM */
+ u8 variable[0];
+ } beacon;
+ struct {
+ /* only variable items: SSID, Supported rates */
+ u8 variable[0];
+ } probe_req;
+
+ struct {
+ __le64 timestamp;
+ u16 beacon_int;
+ u16 capab_info;
+ /* followed by some of SSID, Supported rates,
+ * FH Params, DS Params, CF Params, IBSS Params */
+ u8 variable[0];
+ } probe_resp;
+#endif
+ struct {
+ u8 category;
+ union {
+ struct {
+ u8 action_code;
+ u8 dialog_token;
+ u8 status_code;
+ u8 variable[0];
+ } wme_action;
+/*
+ struct{
+ u8 action_code;
+ u8 element_id;
+ u8 length;
+ struct ieee80211_channel_sw_ie sw_elem;
+ } chan_switch;
+ struct{
+ u8 action_code;
+ u8 dialog_token;
+ u8 element_id;
+ u8 length;
+ struct ieee80211_msrment_ie msr_elem;
+ } measurement;
+*/
+ struct{
+ u8 action_code;
+ u8 dialog_token;
+ u16 capab;
+ u16 timeout;
+ u16 start_seq_num;
+ } addba_req;
+ struct{
+ u8 action_code;
+ u8 dialog_token;
+ u16 status;
+ u16 capab;
+ u16 timeout;
+ } addba_resp;
+ struct{
+ u8 action_code;
+ u16 params;
+ u16 reason_code;
+ } delba;
+ struct{
+ u8 action_code;
+ /* capab_info for open and confirm,
+ * reason for close
+ */
+ u16 aux;
+ /* Followed in plink_confirm by status
+ * code, AID and supported rates,
+ * and directly by supported rates in
+ * plink_open and plink_close
+ */
+ u8 variable[0];
+ } plink_action;
+ struct{
+ u8 action_code;
+ u8 variable[0];
+ } mesh_action;
+ } u;
+ } action;
+ } u;
+} ;
+
+#pragma pack()
+
+#endif
+
+/* mgmt header + 1 byte category code */
+#define IEEE80211_MIN_ACTION_SIZE FIELD_OFFSET(struct ieee80211_mgmt, u.action.u)
+
+
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/ioctl_cfg80211.h b/drivers/net/wireless/rtl8723as/include/ioctl_cfg80211.h
index 6f5ad15b071b..b529b538dcd7 100755
--- a/drivers/net/wireless/rtl8723as/include/ioctl_cfg80211.h
+++ b/drivers/net/wireless/rtl8723as/include/ioctl_cfg80211.h
@@ -1,138 +1,175 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __IOCTL_CFG80211_H__
-#define __IOCTL_CFG80211_H__
-
-
-#if defined(RTW_USE_CFG80211_STA_EVENT)
- #undef CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER
-#endif
-
-struct rtw_wdev_invit_info {
- u8 token;
- u8 flags;
- u8 status;
- u8 req_op_ch;
- u8 rsp_op_ch;
-};
-
-#define rtw_wdev_invit_info_init(invit_info) \
- do { \
- (invit_info)->token = 0; \
- (invit_info)->flags = 0x00; \
- (invit_info)->status = 0xff; \
- (invit_info)->req_op_ch = 0; \
- (invit_info)->rsp_op_ch = 0; \
- } while (0)
-
-struct rtw_wdev_priv
-{
- struct wireless_dev *rtw_wdev;
-
- _adapter *padapter;
-
- struct cfg80211_scan_request *scan_request;
- _lock scan_req_lock;
-
- struct net_device *pmon_ndev;//for monitor interface
- char ifname_mon[IFNAMSIZ + 1]; //interface name for monitor interface
-
- u8 p2p_enabled;
-
- u8 provdisc_req_issued;
-
- struct rtw_wdev_invit_info invit_info;
-
- u8 bandroid_scan;
- bool block;
- bool power_mgmt;
-
-#ifdef CONFIG_CONCURRENT_MODE
- ATOMIC_T ro_ch_to;
- ATOMIC_T switch_ch_to;
-#endif
-
-};
-
-#define wdev_to_priv(w) ((struct rtw_wdev_priv *)(wdev_priv(w)))
-
-#define wiphy_to_adapter(x) (_adapter *)(((struct rtw_wdev_priv*)wiphy_priv(x))->padapter)
-
-#define wiphy_to_wdev(x) (struct wireless_dev *)(((struct rtw_wdev_priv*)wiphy_priv(x))->rtw_wdev)
-
-int rtw_wdev_alloc(_adapter *padapter, struct device *dev);
-void rtw_wdev_free(struct wireless_dev *wdev);
-void rtw_wdev_unregister(struct wireless_dev *wdev);
-
-void rtw_cfg80211_init_wiphy(_adapter *padapter);
-
-void rtw_cfg80211_surveydone_event_callback(_adapter *padapter);
-
-void rtw_cfg80211_indicate_connect(_adapter *padapter);
-void rtw_cfg80211_indicate_disconnect(_adapter *padapter);
-void rtw_cfg80211_indicate_scan_done(struct rtw_wdev_priv *pwdev_priv, bool aborted);
-
-#ifdef CONFIG_AP_MODE
-void rtw_cfg80211_indicate_sta_assoc(_adapter *padapter, u8 *pmgmt_frame, uint frame_len);
-void rtw_cfg80211_indicate_sta_disassoc(_adapter *padapter, unsigned char *da, unsigned short reason);
-#endif //CONFIG_AP_MODE
-
-void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf, size_t len);
-void rtw_cfg80211_rx_p2p_action_public(_adapter *padapter, u8 *pmgmt_frame, uint frame_len);
-void rtw_cfg80211_rx_action_p2p(_adapter *padapter, u8 *pmgmt_frame, uint frame_len);
-void rtw_cfg80211_rx_action(_adapter *adapter, u8 *frame, uint frame_len, const char*msg);
-
-int rtw_cfg80211_set_mgnt_wpsp2pie(struct net_device *net, char *buf, int len, int type);
-
-bool rtw_cfg80211_pwr_mgmt(_adapter *adapter);
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) && !defined(COMPAT_KERNEL_RELEASE)
-#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, buf, len, gfp)
-#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
-#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, sig_dbm, buf, len, gfp)
-#else
-#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len, gfp)
-#endif
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) && !defined(COMPAT_KERNEL_RELEASE)
-#define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, buf, len)
-#else
-#define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, bss, buf, len)
-#endif
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
-#define rtw_cfg80211_mgmt_tx_status(adapter, cookie, buf, len, ack, gfp) cfg80211_mgmt_tx_status((adapter)->pnetdev, cookie, buf, len, ack, gfp)
-#else
-#define rtw_cfg80211_mgmt_tx_status(adapter, cookie, buf, len, ack, gfp) cfg80211_mgmt_tx_status((adapter)->rtw_wdev, cookie, buf, len, ack, gfp)
-#endif
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
-#define rtw_cfg80211_ready_on_channel(adapter, cookie, chan, channel_type, duration, gfp) cfg80211_ready_on_channel((adapter)->pnetdev, cookie, chan, channel_type, duration, gfp)
-#define rtw_cfg80211_remain_on_channel_expired(adapter, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired((adapter)->pnetdev, cookie, chan, chan_type, gfp)
-#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
-#define rtw_cfg80211_ready_on_channel(adapter, cookie, chan, channel_type, duration, gfp) cfg80211_ready_on_channel((adapter)->rtw_wdev, cookie, chan, channel_type, duration, gfp)
-#define rtw_cfg80211_remain_on_channel_expired(adapter, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired((adapter)->rtw_wdev, cookie, chan, chan_type, gfp)
-#else
-#define rtw_cfg80211_ready_on_channel(adapter, cookie, chan, channel_type, duration, gfp) cfg80211_ready_on_channel((adapter)->rtw_wdev, cookie, chan, duration, gfp)
-#define rtw_cfg80211_remain_on_channel_expired(adapter, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired((adapter)->rtw_wdev, cookie, chan, gfp)
-#endif
-
-#endif //__IOCTL_CFG80211_H__
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __IOCTL_CFG80211_H__
+#define __IOCTL_CFG80211_H__
+
+
+#if defined(RTW_USE_CFG80211_STA_EVENT)
+ #undef CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER
+#endif
+
+struct rtw_wdev_invit_info {
+ u8 state; /* 0: req, 1:rep */
+ u8 peer_mac[ETH_ALEN];
+ u8 active;
+ u8 token;
+ u8 flags;
+ u8 status;
+ u8 req_op_ch;
+ u8 rsp_op_ch;
+};
+
+#define rtw_wdev_invit_info_init(invit_info) \
+ do { \
+ (invit_info)->state = 0xff; \
+ _rtw_memset((invit_info)->peer_mac, 0, ETH_ALEN); \
+ (invit_info)->active = 0xff; \
+ (invit_info)->token = 0; \
+ (invit_info)->flags = 0x00; \
+ (invit_info)->status = 0xff; \
+ (invit_info)->req_op_ch = 0; \
+ (invit_info)->rsp_op_ch = 0; \
+ } while (0)
+
+struct rtw_wdev_nego_info {
+ u8 state; /* 0: req, 1:rep, 3:conf */
+ u8 peer_mac[ETH_ALEN];
+ u8 active;
+ u8 token;
+ u8 status;
+ u8 req_intent;
+ u8 req_op_ch;
+ u8 req_listen_ch;
+ u8 rsp_intent;
+ u8 rsp_op_ch;
+ u8 conf_op_ch;
+};
+
+#define rtw_wdev_nego_info_init(nego_info) \
+ do { \
+ (nego_info)->state = 0xff; \
+ _rtw_memset((nego_info)->peer_mac, 0, ETH_ALEN); \
+ (nego_info)->active = 0xff; \
+ (nego_info)->token = 0; \
+ (nego_info)->status = 0xff; \
+ (nego_info)->req_intent = 0xff; \
+ (nego_info)->req_op_ch = 0; \
+ (nego_info)->req_listen_ch = 0; \
+ (nego_info)->rsp_intent = 0xff; \
+ (nego_info)->rsp_op_ch = 0; \
+ (nego_info)->conf_op_ch = 0; \
+ } while (0)
+
+struct rtw_wdev_priv
+{
+ struct wireless_dev *rtw_wdev;
+
+ _adapter *padapter;
+
+ struct cfg80211_scan_request *scan_request;
+ _lock scan_req_lock;
+
+ struct net_device *pmon_ndev;//for monitor interface
+ char ifname_mon[IFNAMSIZ + 1]; //interface name for monitor interface
+
+ u8 p2p_enabled;
+
+ u8 provdisc_req_issued;
+
+ struct rtw_wdev_invit_info invit_info;
+ struct rtw_wdev_nego_info nego_info;
+
+ u8 bandroid_scan;
+ bool block;
+ bool power_mgmt;
+
+#ifdef CONFIG_CONCURRENT_MODE
+ ATOMIC_T ro_ch_to;
+ ATOMIC_T switch_ch_to;
+#endif
+
+};
+
+#define wdev_to_priv(w) ((struct rtw_wdev_priv *)(wdev_priv(w)))
+
+#define wiphy_to_adapter(x) (_adapter *)(((struct rtw_wdev_priv*)wiphy_priv(x))->padapter)
+
+#define wiphy_to_wdev(x) (struct wireless_dev *)(((struct rtw_wdev_priv*)wiphy_priv(x))->rtw_wdev)
+
+int rtw_wdev_alloc(_adapter *padapter, struct device *dev);
+void rtw_wdev_free(struct wireless_dev *wdev);
+void rtw_wdev_unregister(struct wireless_dev *wdev);
+
+void rtw_cfg80211_init_wiphy(_adapter *padapter);
+
+void rtw_cfg80211_surveydone_event_callback(_adapter *padapter);
+struct cfg80211_bss *rtw_cfg80211_inform_bss(_adapter *padapter, struct wlan_network *pnetwork);
+int rtw_cfg80211_check_bss(_adapter *padapter);
+void rtw_cfg80211_indicate_connect(_adapter *padapter);
+void rtw_cfg80211_indicate_disconnect(_adapter *padapter);
+void rtw_cfg80211_indicate_scan_done(struct rtw_wdev_priv *pwdev_priv, bool aborted);
+
+#ifdef CONFIG_AP_MODE
+void rtw_cfg80211_indicate_sta_assoc(_adapter *padapter, u8 *pmgmt_frame, uint frame_len);
+void rtw_cfg80211_indicate_sta_disassoc(_adapter *padapter, unsigned char *da, unsigned short reason);
+#endif //CONFIG_AP_MODE
+
+void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf, size_t len);
+void rtw_cfg80211_rx_p2p_action_public(_adapter *padapter, u8 *pmgmt_frame, uint frame_len);
+void rtw_cfg80211_rx_action_p2p(_adapter *padapter, u8 *pmgmt_frame, uint frame_len);
+void rtw_cfg80211_rx_action(_adapter *adapter, u8 *frame, uint frame_len, const char*msg);
+
+int rtw_cfg80211_set_mgnt_wpsp2pie(struct net_device *net, char *buf, int len, int type);
+
+bool rtw_cfg80211_pwr_mgmt(_adapter *adapter);
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) && !defined(COMPAT_KERNEL_RELEASE)
+#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, buf, len, gfp)
+#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
+#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, sig_dbm, buf, len, gfp)
+#else
+#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len, gfp)
+#endif
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) && !defined(COMPAT_KERNEL_RELEASE)
+#define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, buf, len)
+#else
+#define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, bss, buf, len)
+#endif
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
+#define rtw_cfg80211_mgmt_tx_status(adapter, cookie, buf, len, ack, gfp) cfg80211_mgmt_tx_status((adapter)->pnetdev, cookie, buf, len, ack, gfp)
+#else
+#define rtw_cfg80211_mgmt_tx_status(adapter, cookie, buf, len, ack, gfp) cfg80211_mgmt_tx_status((adapter)->rtw_wdev, cookie, buf, len, ack, gfp)
+#endif
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
+#define rtw_cfg80211_ready_on_channel(adapter, cookie, chan, channel_type, duration, gfp) cfg80211_ready_on_channel((adapter)->pnetdev, cookie, chan, channel_type, duration, gfp)
+#define rtw_cfg80211_remain_on_channel_expired(adapter, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired((adapter)->pnetdev, cookie, chan, chan_type, gfp)
+#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
+#define rtw_cfg80211_ready_on_channel(adapter, cookie, chan, channel_type, duration, gfp) cfg80211_ready_on_channel((adapter)->rtw_wdev, cookie, chan, channel_type, duration, gfp)
+#define rtw_cfg80211_remain_on_channel_expired(adapter, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired((adapter)->rtw_wdev, cookie, chan, chan_type, gfp)
+#else
+#define rtw_cfg80211_ready_on_channel(adapter, cookie, chan, channel_type, duration, gfp) cfg80211_ready_on_channel((adapter)->rtw_wdev, cookie, chan, duration, gfp)
+#define rtw_cfg80211_remain_on_channel_expired(adapter, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired((adapter)->rtw_wdev, cookie, chan, gfp)
+#endif
+
+#endif //__IOCTL_CFG80211_H__
+
diff --git a/drivers/net/wireless/rtl8723as/include/osdep_ce_service.h b/drivers/net/wireless/rtl8723as/include/osdep_ce_service.h
index e374077fdb34..6d2cc48f958f 100755
--- a/drivers/net/wireless/rtl8723as/include/osdep_ce_service.h
+++ b/drivers/net/wireless/rtl8723as/include/osdep_ce_service.h
@@ -16,156 +16,156 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
*
- ******************************************************************************/
-
-#ifndef __OSDEP_CE_SERVICE_H_
-#define __OSDEP_CE_SERVICE_H_
-
-
-#include <ndis.h>
-#include <ntddndis.h>
-
-#ifdef CONFIG_SDIO_HCI
-#include "SDCardDDK.h"
-#endif
-
-#ifdef CONFIG_USB_HCI
-#include <usbdi.h>
-#endif
-
-typedef HANDLE _sema;
-typedef LIST_ENTRY _list;
-typedef NDIS_STATUS _OS_STATUS;
-
-typedef NDIS_SPIN_LOCK _lock;
-
-typedef HANDLE _rwlock; //Mutex
-
-typedef u32 _irqL;
-
-typedef NDIS_HANDLE _nic_hdl;
-
-
-typedef NDIS_MINIPORT_TIMER _timer;
-
-struct __queue {
- LIST_ENTRY queue;
- _lock lock;
-};
-
-typedef NDIS_PACKET _pkt;
-typedef NDIS_BUFFER _buffer;
-typedef struct __queue _queue;
-
-typedef HANDLE _thread_hdl_;
-typedef DWORD thread_return;
-typedef void* thread_context;
-typedef NDIS_WORK_ITEM _workitem;
-
-#define thread_exit() ExitThread(STATUS_SUCCESS); return 0;
-
-
-#define SEMA_UPBND (0x7FFFFFFF) //8192
-
-__inline static _list *get_prev(_list *list)
-{
- return list->Blink;
-}
-
-__inline static _list *get_next(_list *list)
-{
- return list->Flink;
-}
-
-__inline static _list *get_list_head(_queue *queue)
-{
- return (&(queue->queue));
-}
-
-#define LIST_CONTAINOR(ptr, type, member) CONTAINING_RECORD(ptr, type, member)
-
-__inline static void _enter_critical(_lock *plock, _irqL *pirqL)
-{
- NdisAcquireSpinLock(plock);
-}
-
-__inline static void _exit_critical(_lock *plock, _irqL *pirqL)
-{
- NdisReleaseSpinLock(plock);
-}
-
-__inline static _enter_critical_ex(_lock *plock, _irqL *pirqL)
-{
- NdisDprAcquireSpinLock(plock);
-}
-
-__inline static _exit_critical_ex(_lock *plock, _irqL *pirqL)
-{
- NdisDprReleaseSpinLock(plock);
-}
-
-
-__inline static void _enter_hwio_critical(_rwlock *prwlock, _irqL *pirqL)
-{
- WaitForSingleObject(*prwlock, INFINITE );
-
-}
-
-__inline static void _exit_hwio_critical(_rwlock *prwlock, _irqL *pirqL)
-{
- ReleaseMutex(*prwlock);
-}
-
-__inline static void rtw_list_delete(_list *plist)
-{
- RemoveEntryList(plist);
- InitializeListHead(plist);
-}
-
-__inline static void _init_timer(_timer *ptimer,_nic_hdl nic_hdl,void *pfunc,PVOID cntx)
-{
- NdisMInitializeTimer(ptimer, nic_hdl, pfunc, cntx);
-}
-
-__inline static void _set_timer(_timer *ptimer,u32 delay_time)
-{
- NdisMSetTimer(ptimer,delay_time);
-}
-
-__inline static void _cancel_timer(_timer *ptimer,u8 *bcancelled)
-{
- NdisMCancelTimer(ptimer,bcancelled);
-}
-
-__inline static void _init_workitem(_workitem *pwork, void *pfunc, PVOID cntx)
-{
-
- NdisInitializeWorkItem(pwork, pfunc, cntx);
-}
-
-__inline static void _set_workitem(_workitem *pwork)
-{
- NdisScheduleWorkItem(pwork);
-}
-
-#define ATOMIC_INIT(i) { (i) }
-
-//
-// Global Mutex: can only be used at PASSIVE level.
-//
-
-#define ACQUIRE_GLOBAL_MUTEX(_MutexCounter) \
-{ \
- while (NdisInterlockedIncrement((PULONG)&(_MutexCounter)) != 1)\
- { \
- NdisInterlockedDecrement((PULONG)&(_MutexCounter)); \
- NdisMSleep(10000); \
- } \
-}
-
-#define RELEASE_GLOBAL_MUTEX(_MutexCounter) \
-{ \
- NdisInterlockedDecrement((PULONG)&(_MutexCounter)); \
-}
-#endif
-
+ ******************************************************************************/
+
+#ifndef __OSDEP_CE_SERVICE_H_
+#define __OSDEP_CE_SERVICE_H_
+
+
+#include <ndis.h>
+#include <ntddndis.h>
+
+#ifdef CONFIG_SDIO_HCI
+#include "SDCardDDK.h"
+#endif
+
+#ifdef CONFIG_USB_HCI
+#include <usbdi.h>
+#endif
+
+typedef HANDLE _sema;
+typedef LIST_ENTRY _list;
+typedef NDIS_STATUS _OS_STATUS;
+
+typedef NDIS_SPIN_LOCK _lock;
+
+typedef HANDLE _rwlock; //Mutex
+
+typedef u32 _irqL;
+
+typedef NDIS_HANDLE _nic_hdl;
+
+
+typedef NDIS_MINIPORT_TIMER _timer;
+
+struct __queue {
+ LIST_ENTRY queue;
+ _lock lock;
+};
+
+typedef NDIS_PACKET _pkt;
+typedef NDIS_BUFFER _buffer;
+typedef struct __queue _queue;
+
+typedef HANDLE _thread_hdl_;
+typedef DWORD thread_return;
+typedef void* thread_context;
+typedef NDIS_WORK_ITEM _workitem;
+
+#define thread_exit() ExitThread(STATUS_SUCCESS); return 0;
+
+
+#define SEMA_UPBND (0x7FFFFFFF) //8192
+
+__inline static _list *get_prev(_list *list)
+{
+ return list->Blink;
+}
+
+__inline static _list *get_next(_list *list)
+{
+ return list->Flink;
+}
+
+__inline static _list *get_list_head(_queue *queue)
+{
+ return (&(queue->queue));
+}
+
+#define LIST_CONTAINOR(ptr, type, member) CONTAINING_RECORD(ptr, type, member)
+
+__inline static void _enter_critical(_lock *plock, _irqL *pirqL)
+{
+ NdisAcquireSpinLock(plock);
+}
+
+__inline static void _exit_critical(_lock *plock, _irqL *pirqL)
+{
+ NdisReleaseSpinLock(plock);
+}
+
+__inline static _enter_critical_ex(_lock *plock, _irqL *pirqL)
+{
+ NdisDprAcquireSpinLock(plock);
+}
+
+__inline static _exit_critical_ex(_lock *plock, _irqL *pirqL)
+{
+ NdisDprReleaseSpinLock(plock);
+}
+
+
+__inline static void _enter_hwio_critical(_rwlock *prwlock, _irqL *pirqL)
+{
+ WaitForSingleObject(*prwlock, INFINITE );
+
+}
+
+__inline static void _exit_hwio_critical(_rwlock *prwlock, _irqL *pirqL)
+{
+ ReleaseMutex(*prwlock);
+}
+
+__inline static void rtw_list_delete(_list *plist)
+{
+ RemoveEntryList(plist);
+ InitializeListHead(plist);
+}
+
+__inline static void _init_timer(_timer *ptimer,_nic_hdl nic_hdl,void *pfunc,PVOID cntx)
+{
+ NdisMInitializeTimer(ptimer, nic_hdl, pfunc, cntx);
+}
+
+__inline static void _set_timer(_timer *ptimer,u32 delay_time)
+{
+ NdisMSetTimer(ptimer,delay_time);
+}
+
+__inline static void _cancel_timer(_timer *ptimer,u8 *bcancelled)
+{
+ NdisMCancelTimer(ptimer,bcancelled);
+}
+
+__inline static void _init_workitem(_workitem *pwork, void *pfunc, PVOID cntx)
+{
+
+ NdisInitializeWorkItem(pwork, pfunc, cntx);
+}
+
+__inline static void _set_workitem(_workitem *pwork)
+{
+ NdisScheduleWorkItem(pwork);
+}
+
+#define ATOMIC_INIT(i) { (i) }
+
+//
+// Global Mutex: can only be used at PASSIVE level.
+//
+
+#define ACQUIRE_GLOBAL_MUTEX(_MutexCounter) \
+{ \
+ while (NdisInterlockedIncrement((PULONG)&(_MutexCounter)) != 1)\
+ { \
+ NdisInterlockedDecrement((PULONG)&(_MutexCounter)); \
+ NdisMSleep(10000); \
+ } \
+}
+
+#define RELEASE_GLOBAL_MUTEX(_MutexCounter) \
+{ \
+ NdisInterlockedDecrement((PULONG)&(_MutexCounter)); \
+}
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/osdep_intf.h b/drivers/net/wireless/rtl8723as/include/osdep_intf.h
index b98ea90ce5e6..6a4f1cde7c68 100755
--- a/drivers/net/wireless/rtl8723as/include/osdep_intf.h
+++ b/drivers/net/wireless/rtl8723as/include/osdep_intf.h
@@ -149,5 +149,12 @@ void rtw_drv_if2_stop(_adapter *if2);
int rtw_drv_register_netdev(_adapter *padapter);
void rtw_ndev_destructor(_nic_hdl ndev);
+int rtw_suspend_common(_adapter *padapter);
+int rtw_resume_common(_adapter *padapter);
+
+#ifdef CONFIG_ARP_KEEP_ALIVE
+int rtw_gw_addr_query(_adapter *padapter);
+#endif
+
#endif //_OSDEP_INTF_H_
diff --git a/drivers/net/wireless/rtl8723as/include/osdep_service.h b/drivers/net/wireless/rtl8723as/include/osdep_service.h
index 658373e0dfbc..36e8abe456fc 100755
--- a/drivers/net/wireless/rtl8723as/include/osdep_service.h
+++ b/drivers/net/wireless/rtl8723as/include/osdep_service.h
@@ -780,7 +780,10 @@ __inline static void _set_workitem(_workitem *pwork)
#include <linux/interrupt.h> // for struct tasklet_struct
#include <linux/ip.h>
#include <linux/kthread.h>
-
+ #include <linux/in.h>
+ #include <net/route.h>
+ #include <net/flow.h>
+ #include <net/arp.h>
#ifdef CONFIG_IOCTL_CFG80211
// #include <linux/ieee80211.h>
@@ -1275,66 +1278,157 @@ extern int RTW_STATUS_CODE(int error_code);
#define CONFIG_USE_VMALLOC
-//flags used for rtw_update_mem_stat()
-enum {
- MEM_STAT_VIR_ALLOC_SUCCESS,
- MEM_STAT_VIR_ALLOC_FAIL,
- MEM_STAT_VIR_FREE,
- MEM_STAT_PHY_ALLOC_SUCCESS,
- MEM_STAT_PHY_ALLOC_FAIL,
- MEM_STAT_PHY_FREE,
- MEM_STAT_TX, //used to distinguish TX/RX, asigned from caller
- MEM_STAT_TX_ALLOC_SUCCESS,
- MEM_STAT_TX_ALLOC_FAIL,
- MEM_STAT_TX_FREE,
- MEM_STAT_RX, //used to distinguish TX/RX, asigned from caller
- MEM_STAT_RX_ALLOC_SUCCESS,
- MEM_STAT_RX_ALLOC_FAIL,
- MEM_STAT_RX_FREE
+/* flags used for rtw_mstat_update() */
+enum mstat_f {
+ /* type: 0x00ff */
+ MSTAT_TYPE_VIR = 0x00,
+ MSTAT_TYPE_PHY= 0x01,
+ MSTAT_TYPE_SKB = 0x02,
+ MSTAT_TYPE_USB = 0x03,
+ MSTAT_TYPE_MAX = 0x04,
+
+ /* func: 0xff00 */
+ MSTAT_FUNC_UNSPECIFIED = 0x00<<8,
+ MSTAT_FUNC_IO = 0x01<<8,
+ MSTAT_FUNC_TX_IO = 0x02<<8,
+ MSTAT_FUNC_RX_IO = 0x03<<8,
+ MSTAT_FUNC_TX = 0x04<<8,
+ MSTAT_FUNC_RX = 0x05<<8,
+ MSTAT_FUNC_MAX = 0x06<<8,
};
+#define mstat_tf_idx(flags) ((flags)&0xff)
+#define mstat_ff_idx(flags) (((flags)&0xff00) >> 8)
+
+typedef enum mstat_status{
+ MSTAT_ALLOC_SUCCESS = 0,
+ MSTAT_ALLOC_FAIL,
+ MSTAT_FREE
+} MSTAT_STATUS;
+
#ifdef DBG_MEM_ALLOC
-void rtw_update_mem_stat(u8 flag, u32 sz);
-void rtw_dump_mem_stat (void);
-extern u8* dbg_rtw_vmalloc(u32 sz, const char *func, int line);
-extern u8* dbg_rtw_zvmalloc(u32 sz, const char *func, int line);
-extern void dbg_rtw_vmfree(u8 *pbuf, u32 sz, const char *func, int line);
-extern u8* dbg_rtw_malloc(u32 sz, const char *func, int line);
-extern u8* dbg_rtw_zmalloc(u32 sz, const char *func, int line);
-extern void dbg_rtw_mfree(u8 *pbuf, u32 sz, const char *func, int line);
+void rtw_mstat_update(const enum mstat_f flags, const MSTAT_STATUS status, u32 sz);
+int _rtw_mstat_dump(char *buf, int len);
+void rtw_mstat_dump (void);
+u8* dbg_rtw_vmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
+u8* dbg_rtw_zvmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
+void dbg_rtw_vmfree(u8 *pbuf, const enum mstat_f flags, u32 sz, const char *func, const int line);
+u8* dbg_rtw_malloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
+u8* dbg_rtw_zmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line);
+void dbg_rtw_mfree(u8 *pbuf, const enum mstat_f flags, u32 sz, const char *func, const int line);
+
+struct sk_buff * dbg_rtw_skb_alloc(unsigned int size, const enum mstat_f flags, const char *func, const int line);
+void dbg_rtw_skb_free(struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line);
+struct sk_buff *dbg_rtw_skb_copy(const struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line);
+struct sk_buff *dbg_rtw_skb_clone(struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line);
+int dbg_rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb, const enum mstat_f flags, const char *func, int line);
+void dbg_rtw_skb_queue_purge(struct sk_buff_head *list, enum mstat_f flags, const char *func, int line);
+
+#ifdef CONFIG_USB_HCI
+void *dbg_rtw_usb_buffer_alloc(struct usb_device *dev, size_t size, dma_addr_t *dma, const enum mstat_f flags, const char *func, const int line);
+void dbg_rtw_usb_buffer_free(struct usb_device *dev, size_t size, void *addr, dma_addr_t dma, const enum mstat_f flags, const char *func, const int line);
+#endif /* CONFIG_USB_HCI */
+
#ifdef CONFIG_USE_VMALLOC
-#define rtw_vmalloc(sz) dbg_rtw_vmalloc((sz), __FUNCTION__, __LINE__)
-#define rtw_zvmalloc(sz) dbg_rtw_zvmalloc((sz), __FUNCTION__, __LINE__)
-#define rtw_vmfree(pbuf, sz) dbg_rtw_vmfree((pbuf), (sz), __FUNCTION__, __LINE__)
-#else //CONFIG_USE_VMALLOC
-#define rtw_vmalloc(sz) dbg_rtw_malloc((sz), __FUNCTION__, __LINE__)
-#define rtw_zvmalloc(sz) dbg_rtw_zmalloc((sz), __FUNCTION__, __LINE__)
-#define rtw_vmfree(pbuf, sz) dbg_rtw_mfree((pbuf), (sz), __FUNCTION__, __LINE__)
-#endif //CONFIG_USE_VMALLOC
-#define rtw_malloc(sz) dbg_rtw_malloc((sz), __FUNCTION__, __LINE__)
-#define rtw_zmalloc(sz) dbg_rtw_zmalloc((sz), __FUNCTION__, __LINE__)
-#define rtw_mfree(pbuf, sz) dbg_rtw_mfree((pbuf), (sz), __FUNCTION__, __LINE__)
-#else
-#define rtw_update_mem_stat(flag, sz) do {} while(0)
-extern u8* _rtw_vmalloc(u32 sz);
-extern u8* _rtw_zvmalloc(u32 sz);
-extern void _rtw_vmfree(u8 *pbuf, u32 sz);
-extern u8* _rtw_zmalloc(u32 sz);
-extern u8* _rtw_malloc(u32 sz);
-extern void _rtw_mfree(u8 *pbuf, u32 sz);
+#define rtw_vmalloc(sz) dbg_rtw_vmalloc((sz), MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
+#define rtw_zvmalloc(sz) dbg_rtw_zvmalloc((sz), MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
+#define rtw_vmfree(pbuf, sz) dbg_rtw_vmfree((pbuf), (sz), MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
+#define rtw_vmalloc_f(sz, mstat_f) dbg_rtw_vmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
+#define rtw_zvmalloc_f(sz, mstat_f) dbg_rtw_zvmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
+#define rtw_vmfree_f(pbuf, sz, mstat_f) dbg_rtw_vmfree((pbuf), (sz), ((mstat_f)&0xff00)|MSTAT_TYPE_VIR, __FUNCTION__, __LINE__)
+#else /* CONFIG_USE_VMALLOC */
+#define rtw_vmalloc(sz) dbg_rtw_malloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
+#define rtw_zvmalloc(sz) dbg_rtw_zmalloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
+#define rtw_vmfree(pbuf, sz) dbg_rtw_mfree((pbuf), (sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
+#define rtw_vmalloc_f(sz, mstat_f) dbg_rtw_malloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
+#define rtw_zvmalloc_f(sz, mstat_f) dbg_rtw_zmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
+#define rtw_vmfree_f(pbuf, sz, mstat_f) dbg_rtw_mfree((pbuf), (sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
+#endif /* CONFIG_USE_VMALLOC */
+#define rtw_malloc(sz) dbg_rtw_malloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
+#define rtw_zmalloc(sz) dbg_rtw_zmalloc((sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
+#define rtw_mfree(pbuf, sz) dbg_rtw_mfree((pbuf), (sz), MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
+#define rtw_malloc_f(sz, mstat_f) dbg_rtw_malloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
+#define rtw_zmalloc_f(sz, mstat_f) dbg_rtw_zmalloc((sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
+#define rtw_mfree_f(pbuf, sz, mstat_f) dbg_rtw_mfree((pbuf), (sz), ((mstat_f)&0xff00)|MSTAT_TYPE_PHY, __FUNCTION__, __LINE__)
+
+#define rtw_skb_alloc(size) dbg_rtw_skb_alloc((size), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
+#define rtw_skb_free(skb) dbg_rtw_skb_free((skb), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
+#define rtw_skb_alloc_f(size, mstat_f) dbg_rtw_skb_alloc((size), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
+#define rtw_skb_free_f(skb, mstat_f) dbg_rtw_skb_free((skb), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
+#define rtw_skb_copy(skb) dbg_rtw_skb_copy((skb), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
+#define rtw_skb_clone(skb) dbg_rtw_skb_clone((skb), MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
+#define rtw_skb_copy_f(skb, mstat_f) dbg_rtw_skb_copy((skb), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
+#define rtw_skb_clone_f(skb, mstat_f) dbg_rtw_skb_clone((skb), ((mstat_f)&0xff00)|MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
+#define rtw_netif_rx(ndev, skb) dbg_rtw_netif_rx(ndev, skb, MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
+#define rtw_skb_queue_purge(sk_buff_head) dbg_rtw_skb_queue_purge(sk_buff_head, MSTAT_TYPE_SKB, __FUNCTION__, __LINE__)
+#ifdef CONFIG_USB_HCI
+#define rtw_usb_buffer_alloc(dev, size, dma) dbg_rtw_usb_buffer_alloc((dev), (size), (dma), MSTAT_TYPE_USB, __FUNCTION__, __LINE__)
+#define rtw_usb_buffer_free(dev, size, addr, dma) dbg_rtw_usb_buffer_free((dev), (size), (addr), (dma), MSTAT_TYPE_USB, __FUNCTION__, __LINE__)
+#define rtw_usb_buffer_alloc_f(dev, size, dma, mstat_f) dbg_rtw_usb_buffer_alloc((dev), (size), (dma), ((mstat_f)&0xff00)|MSTAT_TYPE_USB, __FUNCTION__, __LINE__)
+#define rtw_usb_buffer_free_f(dev, size, addr, dma, mstat_f) dbg_rtw_usb_buffer_free((dev), (size), (addr), (dma), ((mstat_f)&0xff00)|MSTAT_TYPE_USB, __FUNCTION__, __LINE__)
+#endif /* CONFIG_USB_HCI */
+
+#else /* DBG_MEM_ALLOC */
+#define rtw_mstat_update(flag, status, sz) do {} while(0)
+#define rtw_mstat_dump() do {} while(0)
+u8* _rtw_vmalloc(u32 sz);
+u8* _rtw_zvmalloc(u32 sz);
+void _rtw_vmfree(u8 *pbuf, u32 sz);
+u8* _rtw_zmalloc(u32 sz);
+u8* _rtw_malloc(u32 sz);
+void _rtw_mfree(u8 *pbuf, u32 sz);
+
+struct sk_buff *_rtw_skb_alloc(u32 sz);
+void _rtw_skb_free(struct sk_buff *skb);
+struct sk_buff *_rtw_skb_copy(const struct sk_buff *skb);
+struct sk_buff *_rtw_skb_clone(struct sk_buff *skb);
+int _rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb);
+void _rtw_skb_queue_purge(struct sk_buff_head *list);
+
+#ifdef CONFIG_USB_HCI
+void *_rtw_usb_buffer_alloc(struct usb_device *dev, size_t size, dma_addr_t *dma);
+void _rtw_usb_buffer_free(struct usb_device *dev, size_t size, void *addr, dma_addr_t dma);
+#endif /* CONFIG_USB_HCI */
+
#ifdef CONFIG_USE_VMALLOC
#define rtw_vmalloc(sz) _rtw_vmalloc((sz))
#define rtw_zvmalloc(sz) _rtw_zvmalloc((sz))
#define rtw_vmfree(pbuf, sz) _rtw_vmfree((pbuf), (sz))
-#else //CONFIG_USE_VMALLOC
+#define rtw_vmalloc_f(sz, mstat_f) _rtw_vmalloc((sz))
+#define rtw_zvmalloc_f(sz, mstat_f) _rtw_zvmalloc((sz))
+#define rtw_vmfree_f(pbuf, sz, mstat_f) _rtw_vmfree((pbuf), (sz))
+#else /* CONFIG_USE_VMALLOC */
#define rtw_vmalloc(sz) _rtw_malloc((sz))
#define rtw_zvmalloc(sz) _rtw_zmalloc((sz))
#define rtw_vmfree(pbuf, sz) _rtw_mfree((pbuf), (sz))
-#endif //CONFIG_USE_VMALLOC
+#define rtw_vmalloc_f(sz, mstat_f) _rtw_malloc((sz))
+#define rtw_zvmalloc_f(sz, mstat_f) _rtw_zmalloc((sz))
+#define rtw_vmfree_f(pbuf, sz, mstat_f) _rtw_mfree((pbuf), (sz))
+#endif /* CONFIG_USE_VMALLOC */
#define rtw_malloc(sz) _rtw_malloc((sz))
#define rtw_zmalloc(sz) _rtw_zmalloc((sz))
#define rtw_mfree(pbuf, sz) _rtw_mfree((pbuf), (sz))
-#endif
+#define rtw_malloc_f(sz, mstat_f) _rtw_malloc((sz))
+#define rtw_zmalloc_f(sz, mstat_f) _rtw_zmalloc((sz))
+#define rtw_mfree_f(pbuf, sz, mstat_f) _rtw_mfree((pbuf), (sz))
+
+#define rtw_skb_alloc(size) _rtw_skb_alloc((size))
+#define rtw_skb_free(skb) _rtw_skb_free((skb))
+#define rtw_skb_alloc_f(size, mstat_f) _rtw_skb_alloc((size))
+#define rtw_skb_free_f(skb, mstat_f) _rtw_skb_free((skb))
+#define rtw_skb_copy(skb) _rtw_skb_copy((skb))
+#define rtw_skb_clone(skb) _rtw_skb_clone((skb))
+#define rtw_skb_copy_f(skb, mstat_f) _rtw_skb_copy((skb))
+#define rtw_skb_clone_f(skb, mstat_f) _rtw_skb_clone((skb))
+#define rtw_netif_rx(ndev, skb) _rtw_netif_rx(ndev, skb)
+#define rtw_skb_queue_purge(sk_buff_head) _rtw_skb_queue_purge(sk_buff_head)
+#ifdef CONFIG_USB_HCI
+#define rtw_usb_buffer_alloc(dev, size, dma) _rtw_usb_buffer_alloc((dev), (size), (dma))
+#define rtw_usb_buffer_free(dev, size, addr, dma) _rtw_usb_buffer_free((dev), (size), (addr), (dma))
+#define rtw_usb_buffer_alloc_f(dev, size, dma, mstat_f) _rtw_usb_buffer_alloc((dev), (size), (dma))
+#define rtw_usb_buffer_free_f(dev, size, addr, dma, mstat_f) _rtw_usb_buffer_free((dev), (size), (addr), (dma))
+#endif /* CONFIG_USB_HCI */
+#endif /* DBG_MEM_ALLOC */
extern void* rtw_malloc2d(int h, int w, int size);
extern void rtw_mfree2d(void *pbuf, int h, int w, int size);
@@ -1462,6 +1556,19 @@ __inline static _OS_STATUS res_to_status(sint res)
}
+__inline static void rtw_dump_stack(void)
+{
+#ifdef PLATFORM_LINUX
+ dump_stack();
+#endif
+}
+
+#ifdef PLATFORM_LINUX
+#define rtw_warn_on(condition) WARN_ON(condition)
+#else
+#define rtw_warn_on(condition) do {} while (0)
+#endif
+
#define _RND(sz, r) ((((sz)+((r)-1))/(r))*(r))
#define RND4(x) (((x >> 2) + (((x & 3) == 0) ? 0: 1)) << 2)
@@ -1564,9 +1671,9 @@ extern void rtw_suspend_lock_init(void);
extern void rtw_suspend_lock_uninit(void);
extern void rtw_lock_suspend(void);
extern void rtw_unlock_suspend(void);
-#ifdef CONFIG_WOWLAN
-extern void rtw_lock_suspend_timeout(long timeout);
-#endif //CONFIG_WOWLAN
+extern void rtw_lock_suspend_timeout(u32 timeout_ms);
+extern void rtw_lock_ext_suspend_timeout(u32 timeout_ms);
+
//Atomic integer operations
#ifdef PLATFORM_LINUX
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8188e_cmd.h b/drivers/net/wireless/rtl8723as/include/rtl8188e_cmd.h
index 891a5de17e52..9899f67b84b7 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8188e_cmd.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8188e_cmd.h
@@ -77,6 +77,7 @@ typedef enum _RTL8188E_H2C_CMD_ID
H2C_COM_WWLAN =0x80,
H2C_COM_REMOTE_WAKE_CTRL =0x81,
H2C_COM_AOAC_GLOBAL_INFO =0x82,
+ H2C_COM_AOAC_RSVD_PAGE =0x83,
#endif
//Class
@@ -124,6 +125,15 @@ typedef struct _RSVDPAGE_LOC {
u8 LocNullData;
u8 LocQosNull;
u8 LocBTQosNull;
+#ifdef CONFIG_WOWLAN
+ u8 LocRemoteCtrlInfo;
+ u8 LocArpRsp;
+ u8 LocNbrAdv;
+ u8 LocGTKRsp;
+ u8 LocGTKInfo;
+ u8 LocProbeReq;
+ u8 LocNetList;
+#endif //CONFIG_WOWLAN
} RSVDPAGE_LOC, *PRSVDPAGE_LOC;
struct P2P_PS_Offload_t {
@@ -163,6 +173,9 @@ void rtl8188e_set_FwMediaStatus_cmd(PADAPTER padapter, u16 mstatus_rpt );
int reset_tsf(PADAPTER Adapter, u8 reset_port );
#endif // CONFIG_TSF_RESET_OFFLOAD
+#define H2C_8188E_RSVDPAGE_LOC_LEN 5
+#define H2C_8188E_AOAC_RSVDPAGE_LOC_LEN 7
+
#ifdef CONFIG_WOWLAN
typedef struct _SETWOWLAN_PARM{
u8 mode;
@@ -177,6 +190,31 @@ typedef struct _SETAOAC_GLOBAL_INFO{
u8 groupEncAlg;
}SETAOAC_GLOBAL_INFO, *PSETAOAC_GLOBAL_INFO;
+#define eqMacAddr(a,b) ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 )
+#define cpMacAddr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3],(des)[4]=(src)[4],(des)[5]=(src)[5])
+#define cpIpAddr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3])
+
+//
+// ARP packet
+//
+// LLC Header
+#define GET_ARP_PKT_LLC_TYPE(__pHeader) ReadEF2Byte( ((u8*)(__pHeader)) + 6)
+
+//ARP element
+#define GET_ARP_PKT_OPERATION(__pHeader) ReadEF2Byte( ((u8*)(__pHeader)) + 6)
+#define GET_ARP_PKT_SENDER_MAC_ADDR(__pHeader, _val) cpMacAddr((u8*)(_val), ((u8*)(__pHeader))+8)
+#define GET_ARP_PKT_SENDER_IP_ADDR(__pHeader, _val) cpIpAddr((u8*)(_val), ((u8*)(__pHeader))+14)
+#define GET_ARP_PKT_TARGET_MAC_ADDR(__pHeader, _val) cpMacAddr((u8*)(_val), ((u8*)(__pHeader))+18)
+#define SET_ARP_PKT_HW(__pHeader, __Value) WriteEF2Byte( ((u8*)(__pHeader)) + 0, __Value)
+#define SET_ARP_PKT_PROTOCOL(__pHeader, __Value) WriteEF2Byte( ((u8*)(__pHeader)) + 2, __Value)
+#define SET_ARP_PKT_HW_ADDR_LEN(__pHeader, __Value) WriteEF1Byte( ((u8*)(__pHeader)) + 4, __Value)
+#define SET_ARP_PKT_PROTOCOL_ADDR_LEN(__pHeader, __Value) WriteEF1Byte( ((u8*)(__pHeader)) + 5, __Value)
+#define SET_ARP_PKT_OPERATION(__pHeader, __Value) WriteEF2Byte( ((u8*)(__pHeader)) + 6, __Value)
+#define SET_ARP_PKT_SENDER_MAC_ADDR(__pHeader, _val) cpMacAddr(((u8*)(__pHeader))+8, (u8*)(_val))
+#define SET_ARP_PKT_SENDER_IP_ADDR(__pHeader, _val) cpIpAddr(((u8*)(__pHeader))+14, (u8*)(_val))
+#define SET_ARP_PKT_TARGET_MAC_ADDR(__pHeader, _val) cpMacAddr(((u8*)(__pHeader))+18, (u8*)(_val))
+#define SET_ARP_PKT_TARGET_IP_ADDR(__pHeader, _val) cpIpAddr(((u8*)(__pHeader))+24, (u8*)(_val))
+
#define FW_WOWLAN_FUN_EN BIT(0)
#define FW_WOWLAN_PATTERN_MATCH BIT(1)
#define FW_WOWLAN_MAGIC_PKT BIT(2)
@@ -189,11 +227,32 @@ typedef struct _SETAOAC_GLOBAL_INFO{
#define FW_WOWLAN_GPIO_WAKEUP_EN BIT(0)
#define FW_FW_PARSE_MAGIC_PKT BIT(1)
+#define FW_WOWLAN_KEEP_ALIVE_EN BIT(0)
+#define FW_WOWLAN_KEEP_ALIVE_PKT_TYPE BIT(2)
+
#define FW_REMOTE_WAKE_CTRL_EN BIT(0)
+#define FW_ARP_EN BIT(1)
#define FW_REALWOWLAN_EN BIT(5)
+#define FW_WOW_FW_UNICAST_EN BIT(7)
+
+#define FW_ADOPT_USER BIT(1)
void rtl8188es_set_wowlan_cmd(_adapter* padapter, u8 enable);
void SetFwRelatedForWoWLAN8188ES(_adapter* padapter, u8 bHostIsGoingtoSleep);
#endif//CONFIG_WOWLAN
+
+//---------------------------------------------------------------------------------------------------------//
+//---------------------------------- H2C CMD CONTENT --------------------------------------------------//
+//---------------------------------------------------------------------------------------------------------//
+//_RSVDPAGE_LOC_CMD_0x00
+#define SET_8188E_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
+#define SET_8188E_H2CCMD_RSVDPAGE_LOC_PSPOLL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
+#define SET_8188E_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
+#define SET_8188E_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
+
+// AOAC_RSVDPAGE_LOC_0x83
+#define SET_8188E_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value)
+#define SET_8188E_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value)
+
#endif//__RTL8188E_CMD_H__
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8188e_hal.h b/drivers/net/wireless/rtl8723as/include/rtl8188e_hal.h
index 2663303ac2ab..3bac83b737d9 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8188e_hal.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8188e_hal.h
@@ -1,720 +1,714 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __RTL8188E_HAL_H__
-#define __RTL8188E_HAL_H__
-
-
-//include HAL Related header after HAL Related compiling flags
-#include "rtl8188e_spec.h"
-#include "Hal8188EPhyReg.h"
-#include "Hal8188EPhyCfg.h"
-#include "rtl8188e_rf.h"
-#include "rtl8188e_dm.h"
-#include "rtl8188e_recv.h"
-#include "rtl8188e_xmit.h"
-#include "rtl8188e_cmd.h"
-#include "Hal8188EPwrSeq.h"
-#ifdef DBG_CONFIG_ERROR_DETECT
-#include "rtl8188e_sreset.h"
-#endif
-#include "rtw_efuse.h"
-
-#include "../hal/OUTSRC/odm_precomp.h"
-
- // Fw Array
- #define Rtl8188E_FwImageArray Rtl8188EFwImgArray
- #define Rtl8188E_FWImgArrayLength Rtl8188EFWImgArrayLength
-#ifdef CONFIG_WOWLAN
- #define Rtl8188E_FwWoWImageArray Array_8188E_FW_WoWLAN
- #define Rtl8188E_FwWoWImgArrayLength ArrayLength_8188E_FW_WoWLAN
-#endif //CONFIG_WOWLAN
-
-
-#ifdef CONFIG_SDIO_HCI
-
- //TODO: We should define 8188ES firmware related macro settings here!!
- //TODO: The following need to check!!
- #define RTL8188E_FW_UMC_IMG "rtl8188E\\rtl8188efw.bin"
- #define RTL8188E_PHY_REG "rtl8188E\\PHY_REG_1T.txt"
- #define RTL8188E_PHY_RADIO_A "rtl8188E\\radio_a_1T.txt"
- #define RTL8188E_PHY_RADIO_B "rtl8188E\\radio_b_1T.txt"
- #define RTL8188E_AGC_TAB "rtl8188E\\AGC_TAB_1T.txt"
- #define RTL8188E_PHY_MACREG "rtl8188E\\MAC_REG.txt"
- #define RTL8188E_PHY_REG_PG "rtl8188E\\PHY_REG_PG.txt"
- #define RTL8188E_PHY_REG_MP "rtl8188E\\PHY_REG_MP.txt"
-
-//---------------------------------------------------------------------
-// RTL8188E From header
-//---------------------------------------------------------------------
-#if 0
- #define Rtl8188E_PHY_REG_Array_PG Rtl8188ESPHY_REG_Array_PG
- #define Rtl8188E_PHY_REG_Array_PGLength Rtl8188ESPHY_REG_Array_PGLength
-
-#endif
-
- //---------------------------------------------------------------------
- // RTL8188E Power Configuration CMDs for USB/SDIO interfaces
- //---------------------------------------------------------------------
- #define Rtl8188E_NIC_PWR_ON_FLOW rtl8188E_power_on_flow
- #define Rtl8188E_NIC_RF_OFF_FLOW rtl8188E_radio_off_flow
- #define Rtl8188E_NIC_DISABLE_FLOW rtl8188E_card_disable_flow
- #define Rtl8188E_NIC_ENABLE_FLOW rtl8188E_card_enable_flow
- #define Rtl8188E_NIC_SUSPEND_FLOW rtl8188E_suspend_flow
- #define Rtl8188E_NIC_RESUME_FLOW rtl8188E_resume_flow
- #define Rtl8188E_NIC_PDN_FLOW rtl8188E_hwpdn_flow
- #define Rtl8188E_NIC_LPS_ENTER_FLOW rtl8188E_enter_lps_flow
- #define Rtl8188E_NIC_LPS_LEAVE_FLOW rtl8188E_leave_lps_flow
-
-#elif defined(CONFIG_USB_HCI)
- #define RTL8188E_FW_UMC_IMG "rtl8188E\\rtl8188efw.bin"
- #define RTL8188E_PHY_REG "rtl8188E\\PHY_REG_1T.txt"
- #define RTL8188E_PHY_RADIO_A "rtl8188E\\radio_a_1T.txt"
- #define RTL8188E_PHY_RADIO_B "rtl8188E\\radio_b_1T.txt"
- #define RTL8188E_AGC_TAB "rtl8188E\\AGC_TAB_1T.txt"
- #define RTL8188E_PHY_MACREG "rtl8188E\\MAC_REG.txt"
- #define RTL8188E_PHY_REG_PG "rtl8188E\\PHY_REG_PG.txt"
- #define RTL8188E_PHY_REG_MP "rtl8188E\\PHY_REG_MP.txt"
-
-#if 0
- #define Rtl8188E_PHY_REG_Array_PG Rtl8188EUPHY_REG_Array_PG
- #define Rtl8188E_PHY_REG_Array_PGLength Rtl8188EUPHY_REG_Array_PGLength
-
-#endif
-
- //---------------------------------------------------------------------
- // RTL8188E Power Configuration CMDs for USB/SDIO interfaces
- //---------------------------------------------------------------------
- #define Rtl8188E_NIC_PWR_ON_FLOW rtl8188E_power_on_flow
- #define Rtl8188E_NIC_RF_OFF_FLOW rtl8188E_radio_off_flow
- #define Rtl8188E_NIC_DISABLE_FLOW rtl8188E_card_disable_flow
- #define Rtl8188E_NIC_ENABLE_FLOW rtl8188E_card_enable_flow
- #define Rtl8188E_NIC_SUSPEND_FLOW rtl8188E_suspend_flow
- #define Rtl8188E_NIC_RESUME_FLOW rtl8188E_resume_flow
- #define Rtl8188E_NIC_PDN_FLOW rtl8188E_hwpdn_flow
- #define Rtl8188E_NIC_LPS_ENTER_FLOW rtl8188E_enter_lps_flow
- #define Rtl8188E_NIC_LPS_LEAVE_FLOW rtl8188E_leave_lps_flow
-
-#elif defined(CONFIG_PCI_HCI)
- #define RTL8188E_FW_UMC_IMG "rtl8188E\\rtl8188efw.bin"
- #define RTL8188E_PHY_REG "rtl8188E\\PHY_REG_1T.txt"
- #define RTL8188E_PHY_RADIO_A "rtl8188E\\radio_a_1T.txt"
- #define RTL8188E_PHY_RADIO_B "rtl8188E\\radio_b_1T.txt"
- #define RTL8188E_AGC_TAB "rtl8188E\\AGC_TAB_1T.txt"
- #define RTL8188E_PHY_MACREG "rtl8188E\\MAC_REG.txt"
- #define RTL8188E_PHY_REG_PG "rtl8188E\\PHY_REG_PG.txt"
- #define RTL8188E_PHY_REG_MP "rtl8188E\\PHY_REG_MP.txt"
-
- #define Rtl8188E_PHY_REG_Array_PG Rtl8188EEPHY_REG_Array_PG
- #define Rtl8188E_PHY_REG_Array_PGLength Rtl8188EEPHY_REG_Array_PGLength
-
-
- #ifndef CONFIG_PHY_SETTING_WITH_ODM
- #if MP_DRIVER == 1
- #define Rtl8188ES_PHY_REG_Array_MP Rtl8188ESPHY_REG_Array_MP
- #endif
- #endif
-
- //---------------------------------------------------------------------
- // RTL8188E Power Configuration CMDs for USB/SDIO/PCIE interfaces
- //---------------------------------------------------------------------
- #define Rtl8188E_NIC_PWR_ON_FLOW rtl8188E_power_on_flow
- #define Rtl8188E_NIC_RF_OFF_FLOW rtl8188E_radio_off_flow
- #define Rtl8188E_NIC_DISABLE_FLOW rtl8188E_card_disable_flow
- #define Rtl8188E_NIC_ENABLE_FLOW rtl8188E_card_enable_flow
- #define Rtl8188E_NIC_SUSPEND_FLOW rtl8188E_suspend_flow
- #define Rtl8188E_NIC_RESUME_FLOW rtl8188E_resume_flow
- #define Rtl8188E_NIC_PDN_FLOW rtl8188E_hwpdn_flow
- #define Rtl8188E_NIC_LPS_ENTER_FLOW rtl8188E_enter_lps_flow
- #define Rtl8188E_NIC_LPS_LEAVE_FLOW rtl8188E_leave_lps_flow
-#endif //CONFIG_***_HCI
-
-
-#define DRVINFO_SZ 4 // unit is 8bytes
-#define PageNum_128(_Len) (u32)(((_Len)>>7) + ((_Len)&0x7F ? 1:0))
-
-
-#if 1 // download firmware related data structure
-#define FW_8188E_SIZE 0x4000 //16384,16k
-#define FW_8188E_START_ADDRESS 0x1000
-#define FW_8188E_END_ADDRESS 0x1FFF //0x5FFF
-
-#define MAX_PAGE_SIZE 4096 // @ page : 4k bytes
-
-#define IS_FW_HEADER_EXIST(_pFwHdr) ((le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x92C0 ||\
- (le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x88C0 ||\
- (le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x2300 ||\
- (le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x88E0)
-
-typedef enum _FIRMWARE_SOURCE {
- FW_SOURCE_IMG_FILE = 0,
- FW_SOURCE_HEADER_FILE = 1, //from header file
-} FIRMWARE_SOURCE, *PFIRMWARE_SOURCE;
-
-typedef struct _RT_FIRMWARE {
- FIRMWARE_SOURCE eFWSource;
-#ifdef CONFIG_EMBEDDED_FWIMG
- u8* szFwBuffer;
-#else
- u8 szFwBuffer[FW_8188E_SIZE];
-#endif
- u32 ulFwLength;
-
-#ifdef CONFIG_WOWLAN
- u8* szWoWLANFwBuffer;
- u32 ulWoWLANFwLength;
-#endif //CONFIG_WOWLAN
-} RT_FIRMWARE, *PRT_FIRMWARE, RT_FIRMWARE_8188E, *PRT_FIRMWARE_8188E;
-
-//
-// This structure must be cared byte-ordering
-//
-
-typedef struct _RT_8188E_FIRMWARE_HDR
-{
- // 8-byte alinment required
-
- //--- LONG WORD 0 ----
- u16 Signature; // 92C0: test chip; 92C, 88C0: test chip; 88C1: MP A-cut; 92C1: MP A-cut
- u8 Category; // AP/NIC and USB/PCI
- u8 Function; // Reserved for different FW function indcation, for further use when driver needs to download different FW in different conditions
- u16 Version; // FW Version
- u8 Subversion; // FW Subversion, default 0x00
- u16 Rsvd1;
-
-
- //--- LONG WORD 1 ----
- u8 Month; // Release time Month field
- u8 Date; // Release time Date field
- u8 Hour; // Release time Hour field
- u8 Minute; // Release time Minute field
- u16 RamCodeSize; // The size of RAM code
- u8 Foundry;
- u8 Rsvd2;
-
- //--- LONG WORD 2 ----
- u32 SvnIdx; // The SVN entry index
- u32 Rsvd3;
-
- //--- LONG WORD 3 ----
- u32 Rsvd4;
- u32 Rsvd5;
-}RT_8188E_FIRMWARE_HDR, *PRT_8188E_FIRMWARE_HDR;
-#endif // download firmware related data structure
-
-
-#define DRIVER_EARLY_INT_TIME 0x05
-#define BCN_DMA_ATIME_INT_TIME 0x02
-
-#ifdef CONFIG_USB_RX_AGGREGATION
-
-typedef enum _USB_RX_AGG_MODE{
- USB_RX_AGG_DISABLE,
- USB_RX_AGG_DMA,
- USB_RX_AGG_USB,
- USB_RX_AGG_MIX
-}USB_RX_AGG_MODE;
-
-//#define MAX_RX_DMA_BUFFER_SIZE 10240 // 10K for 8192C RX DMA buffer
-
-#endif
-
-
-#define MAX_RX_DMA_BUFFER_SIZE_88E 0x2400 //9k for 88E nornal chip , //MaxRxBuff=10k-max(TxReportSize(64*8), WOLPattern(16*24))
-
-#define MAX_TX_REPORT_BUFFER_SIZE 0x0400 // 1k
-
-
-// BK, BE, VI, VO, HCCA, MANAGEMENT, COMMAND, HIGH, BEACON.
-#define MAX_TX_QUEUE 9
-
-#define TX_SELE_HQ BIT(0) // High Queue
-#define TX_SELE_LQ BIT(1) // Low Queue
-#define TX_SELE_NQ BIT(2) // Normal Queue
-
-// Note: We will divide number of page equally for each queue other than public queue!
-// 22k = 22528 bytes = 176 pages (@page = 128 bytes)
-// must reserved about 7 pages for LPS => 176-7 = 169 (0xA9)
-// 2*BCN / 1*ps-poll / 1*null-data /1*prob_rsp /1*QOS null-data /1*BT QOS null-data
-
-#define TX_TOTAL_PAGE_NUMBER_88E 0xA9// 169 (21632=> 21k)
-
-#ifdef RTL8188ES_MAC_LOOPBACK
-#define TX_PAGE_BOUNDARY_88E 0x48 //72
-#else //TX_PAGE_BOUNDARY_LOOPBACK_MODE
-#define TX_PAGE_BOUNDARY_88E (TX_TOTAL_PAGE_NUMBER_88E + 1)
-#endif
-
-
-//Note: For Normal Chip Setting ,modify later
-#define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER TX_TOTAL_PAGE_NUMBER_88E //0xA9 , 0xb0=>176=>22k
-#define WMM_NORMAL_TX_PAGE_BOUNDARY_88E (WMM_NORMAL_TX_TOTAL_PAGE_NUMBER + 1) //0xA9
-
-
-
-//-------------------------------------------------------------------------
-// Chip specific
-//-------------------------------------------------------------------------
-#define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3)
-#define CHIP_BONDING_92C_1T2R 0x1
-#define CHIP_BONDING_88C_USB_MCARD 0x2
-#define CHIP_BONDING_88C_USB_HP 0x1
-#include "HalVerDef.h"
-#include "hal_com.h"
-
-//-------------------------------------------------------------------------
-// Channel Plan
-//-------------------------------------------------------------------------
-enum ChannelPlan
-{
- CHPL_FCC = 0,
- CHPL_IC = 1,
- CHPL_ETSI = 2,
- CHPL_SPAIN = 3,
- CHPL_FRANCE = 4,
- CHPL_MKK = 5,
- CHPL_MKK1 = 6,
- CHPL_ISRAEL = 7,
- CHPL_TELEC = 8,
- CHPL_GLOBAL = 9,
- CHPL_WORLD = 10,
-};
-
-typedef struct _TxPowerInfo
-{
- u8 CCKIndex[RF_PATH_MAX][CHANNEL_GROUP_MAX_88E];
- u8 HT40_1SIndex[RF_PATH_MAX][CHANNEL_GROUP_MAX_88E];
- u8 HT40_2SIndexDiff[RF_PATH_MAX][CHANNEL_GROUP_MAX_88E];
- u8 HT20IndexDiff[RF_PATH_MAX][CHANNEL_GROUP_MAX_88E];
- u8 OFDMIndexDiff[RF_PATH_MAX][CHANNEL_GROUP_MAX_88E];
- u8 HT40MaxOffset[RF_PATH_MAX][CHANNEL_GROUP_MAX_88E];
- u8 HT20MaxOffset[RF_PATH_MAX][CHANNEL_GROUP_MAX_88E];
- u8 TSSI_A[3];
- u8 TSSI_B[3];
- u8 TSSI_A_5G[3]; //5GL/5GM/5GH
- u8 TSSI_B_5G[3];
-} TxPowerInfo, *PTxPowerInfo;
-
-typedef struct _TxPowerInfo24G{
- u1Byte IndexCCK_Base[MAX_RF_PATH][MAX_CHNL_GROUP_24G];
- u1Byte IndexBW40_Base[MAX_RF_PATH][MAX_CHNL_GROUP_24G-1];
- //If only one tx, only BW20 and OFDM are used.
- s1Byte CCK_Diff[MAX_RF_PATH][MAX_TX_COUNT];
- s1Byte OFDM_Diff[MAX_RF_PATH][MAX_TX_COUNT];
- s1Byte BW20_Diff[MAX_RF_PATH][MAX_TX_COUNT];
- s1Byte BW40_Diff[MAX_RF_PATH][MAX_TX_COUNT];
-}TxPowerInfo24G, *PTxPowerInfo24G;
-
-#define EFUSE_REAL_CONTENT_LEN 512
-#define EFUSE_MAP_LEN 128
-#define EFUSE_MAX_SECTION 16
-#define EFUSE_IC_ID_OFFSET 506 //For some inferiority IC purpose. added by Roger, 2009.09.02.
-#define AVAILABLE_EFUSE_ADDR(addr) (addr < EFUSE_REAL_CONTENT_LEN)
-//
-// <Roger_Notes>
-// To prevent out of boundary programming case,
-// leave 1byte and program full section
-// 9bytes + 1byt + 5bytes and pre 1byte.
-// For worst case:
-// | 1byte|----8bytes----|1byte|--5bytes--|
-// | | Reserved(14bytes) |
-//
-#define EFUSE_OOB_PROTECT_BYTES 15 // PG data exclude header, dummy 6 bytes frome CP test and reserved 1byte.
-
-#define HWSET_MAX_SIZE_88E 512
-
-#define EFUSE_REAL_CONTENT_LEN_88E 256
-#define EFUSE_MAP_LEN_88E 512
-#define EFUSE_MAX_SECTION_88E 64
-#define EFUSE_MAX_WORD_UNIT_88E 4
-#define EFUSE_IC_ID_OFFSET_88E 506 //For some inferiority IC purpose. added by Roger, 2009.09.02.
-#define AVAILABLE_EFUSE_ADDR_88E(addr) (addr < EFUSE_REAL_CONTENT_LEN_88E)
-// <Roger_Notes> To prevent out of boundary programming case, leave 1byte and program full section
-// 9bytes + 1byt + 5bytes and pre 1byte.
-// For worst case:
-// | 2byte|----8bytes----|1byte|--7bytes--| //92D
-#define EFUSE_OOB_PROTECT_BYTES_88E 18 // PG data exclude header, dummy 7 bytes frome CP test and reserved 1byte.
-#define EFUSE_PROTECT_BYTES_BANK_88E 16
-
-
-//========================================================
-// EFUSE for BT definition
-//========================================================
-#define EFUSE_BT_REAL_CONTENT_LEN 1536 // 512*3
-#define EFUSE_BT_MAP_LEN 1024 // 1k bytes
-#define EFUSE_BT_MAX_SECTION 128 // 1024/8
-
-#define EFUSE_PROTECT_BYTES_BANK 16
-
-//
-// <Roger_Notes> For RTL8723 WiFi/BT/GPS multi-function configuration. 2010.10.06.
-//
-typedef enum _RT_MULTI_FUNC {
- RT_MULTI_FUNC_NONE = 0x00,
- RT_MULTI_FUNC_WIFI = 0x01,
- RT_MULTI_FUNC_BT = 0x02,
- RT_MULTI_FUNC_GPS = 0x04,
-} RT_MULTI_FUNC, *PRT_MULTI_FUNC;
-
-//
-// <Roger_Notes> For RTL8723 WiFi PDn/GPIO polarity control configuration. 2010.10.08.
-//
-typedef enum _RT_POLARITY_CTL {
- RT_POLARITY_LOW_ACT = 0,
- RT_POLARITY_HIGH_ACT = 1,
-} RT_POLARITY_CTL, *PRT_POLARITY_CTL;
-
-// For RTL8723 regulator mode. by tynli. 2011.01.14.
-typedef enum _RT_REGULATOR_MODE {
- RT_SWITCHING_REGULATOR = 0,
- RT_LDO_REGULATOR = 1,
-} RT_REGULATOR_MODE, *PRT_REGULATOR_MODE;
-
-
-typedef struct hal_data_8188e
-{
- HAL_VERSION VersionID;
- RT_MULTI_FUNC MultiFunc; // For multi-function consideration.
- RT_POLARITY_CTL PolarityCtl; // For Wifi PDn Polarity control.
- RT_REGULATOR_MODE RegulatorMode; // switching regulator or LDO
- u16 CustomerID;
-
- u16 FirmwareVersion;
- u16 FirmwareVersionRev;
- u16 FirmwareSubVersion;
- u16 FirmwareSignature;
- u8 PGMaxGroup;
- //current WIFI_PHY values
- u32 ReceiveConfig;
- WIRELESS_MODE CurrentWirelessMode;
- HT_CHANNEL_WIDTH CurrentChannelBW;
- u8 CurrentChannel;
- u8 nCur40MhzPrimeSC;// Control channel sub-carrier
-
- u16 BasicRateSet;
-
- //rf_ctrl
- u8 rf_chip;
- u8 rf_type;
- u8 NumTotalRFPath;
-
- u8 BoardType;
-
- //
- // EEPROM setting.
- //
- u16 EEPROMVID;
- u16 EEPROMPID;
- u16 EEPROMSVID;
- u16 EEPROMSDID;
- u8 EEPROMCustomerID;
- u8 EEPROMSubCustomerID;
- u8 EEPROMVersion;
- u8 EEPROMRegulatory;
-
- u8 bTXPowerDataReadFromEEPORM;
- u8 EEPROMThermalMeter;
- u8 bAPKThermalMeterIgnore;
-
- BOOLEAN EepromOrEfuse;
- u8 EfuseMap[2][HWSET_MAX_SIZE_512]; //92C:256bytes, 88E:512bytes, we use union set (512bytes)
- u8 EfuseUsedPercentage;
- EFUSE_HAL EfuseHal;
-
- //u8 bIQKInitialized;
-
-
- u8 Index24G_CCK_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
- u8 Index24G_BW40_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
- //If only one tx, only BW20 and OFDM are used.
- s8 CCK_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
- s8 OFDM_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
- s8 BW20_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
- s8 BW40_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
-
- u8 TxPwrLevelCck[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
- u8 TxPwrLevelHT40_1S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
- u8 TxPwrLevelHT40_2S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
- u8 TxPwrHt20Diff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// HT 20<->40 Pwr diff
- u8 TxPwrLegacyHtDiff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// For HT<->legacy pwr diff
- // For power group
- u8 PwrGroupHT20[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
- u8 PwrGroupHT40[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
-
- u8 LegacyHTTxPowerDiff;// Legacy to HT rate power diff
- // The current Tx Power Level
- u8 CurrentCckTxPwrIdx;
- u8 CurrentOfdm24GTxPwrIdx;
- u8 CurrentBW2024GTxPwrIdx;
- u8 CurrentBW4024GTxPwrIdx;
-
-
- // Read/write are allow for following hardware information variables
- u8 framesync;
- u32 framesyncC34;
- u8 framesyncMonitor;
- u8 DefaultInitialGain[4];
- u8 pwrGroupCnt;
- u32 MCSTxPowerLevelOriginalOffset[MAX_PG_GROUP][16];
- u32 CCKTxPowerLevelOriginalOffset;
-
- u8 CrystalCap;
- u32 AntennaTxPath; // Antenna path Tx
- u32 AntennaRxPath; // Antenna path Rx
- u8 BluetoothCoexist;
- u8 ExternalPA;
-
- u8 bLedOpenDrain; // Support Open-drain arrangement for controlling the LED. Added by Roger, 2009.10.16.
-
- //u32 LedControlNum;
- //u32 LedControlMode;
- //u32 TxPowerTrackControl;
- u8 b1x1RecvCombine; // for 1T1R receive combining
-
- //u8 bCurrentTurboEDCA;
- u32 AcParam_BE; //Original parameter for BE, use for EDCA turbo.
-
- BB_REGISTER_DEFINITION_T PHYRegDef[4]; //Radio A/B/C/D
-
- u32 RfRegChnlVal[2];
-
- //RDG enable
- BOOLEAN bRDGEnable;
-
- //for host message to fw
- u8 LastHMEBoxNum;
-
- u8 fw_ractrl;
- u8 RegTxPause;
- // Beacon function related global variable.
- u32 RegBcnCtrlVal;
- u8 RegFwHwTxQCtrl;
- u8 RegReg542;
- u8 RegCR_1;
-
- struct dm_priv dmpriv;
- DM_ODM_T odmpriv;
- //_lock odm_stainfo_lock;
-#ifdef DBG_CONFIG_ERROR_DETECT
- struct sreset_priv srestpriv;
-#endif
-
-#ifdef CONFIG_BT_COEXIST
- struct btcoexist_priv bt_coexist;
-#endif
-
- u8 CurAntenna;
- u8 AntDivCfg;
- u8 TRxAntDivType;
-
-
- u8 bDumpRxPkt;//for debug
- u8 bDumpTxPkt;//for debug
- u8 FwRsvdPageStartOffset; //2010.06.23. Added by tynli. Reserve page start offset except beacon in TxQ.
-
- // 2010/08/09 MH Add CU power down mode.
- BOOLEAN pwrdown;
-
- // Add for dual MAC 0--Mac0 1--Mac1
- u32 interfaceIndex;
-
- u8 OutEpQueueSel;
- u8 OutEpNumber;
-
- // 2010/12/10 MH Add for USB aggreation mode dynamic shceme.
- BOOLEAN UsbRxHighSpeedMode;
-
- // 2010/11/22 MH Add for slim combo debug mode selective.
- // This is used for fix the drawback of CU TSMC-A/UMC-A cut. HW auto suspend ability. Close BT clock.
- BOOLEAN SlimComboDbg;
-
- u16 EfuseUsedBytes;
-
-#ifdef CONFIG_P2P
- struct P2P_PS_Offload_t p2p_ps_offload;
-#endif
-
- // Auto FSM to Turn On, include clock, isolation, power control for MAC only
- u8 bMacPwrCtrlOn;
-
-#ifdef CONFIG_SDIO_HCI
- //
- // For SDIO Interface HAL related
- //
-
- //
- // SDIO ISR Related
- //
-// u32 IntrMask[1];
-// u32 IntrMaskToSet[1];
-// LOG_INTERRUPT InterruptLog;
- u32 sdio_himr;
- u32 sdio_hisr;
-
- //
- // SDIO Tx FIFO related.
- //
- // HIQ, MID, LOW, PUB free pages; padapter->xmitpriv.free_txpg
- u8 SdioTxFIFOFreePage[SDIO_TX_FREE_PG_QUEUE];
- _lock SdioTxFIFOFreePageLock;
-#ifndef CONFIG_SDIO_TX_TASKLET
- _thread_hdl_ SdioXmitThread;
- _sema SdioXmitSema;
- _sema SdioXmitTerminateSema;
-#endif
-
- //
- // SDIO Rx FIFO related.
- //
- u8 SdioRxFIFOCnt;
- u16 SdioRxFIFOSize;
-#endif //CONFIG_SDIO_HCI
-
-#ifdef CONFIG_USB_HCI
- u32 UsbBulkOutSize;
-
- // Interrupt relatd register information.
- u32 IntArray[3];//HISR0,HISR1,HSISR
- u32 IntrMask[3];
- u8 C2hArray[16];
-#ifdef CONFIG_USB_TX_AGGREGATION
- u8 UsbTxAggMode;
- u8 UsbTxAggDescNum;
-#endif
-#ifdef CONFIG_USB_RX_AGGREGATION
- u16 HwRxPageSize; // Hardware setting
- u32 MaxUsbRxAggBlock;
-
- USB_RX_AGG_MODE UsbRxAggMode;
- u8 UsbRxAggBlockCount; // USB Block count. Block size is 512-byte in hight speed and 64-byte in full speed
- u8 UsbRxAggBlockTimeout;
- u8 UsbRxAggPageCount; // 8192C DMA page count
- u8 UsbRxAggPageTimeout;
-#endif
-#endif //CONFIG_USB_HCI
-
-
-#ifdef CONFIG_PCI_HCI
-
- //
- // EEPROM setting.
- //
-
- u16 EEPROMDID;
- u16 EEPROMSMID;
- u16 EEPROMChannelPlan;
-
- u8 EEPROMTSSI[2];
- u8 EEPROMBoardType;
- u32 TransmitConfig;
-
- u32 IntrMask[2];
- u32 IntrMaskToSet[2];
-
- u8 bDefaultAntenna;
- u8 bIQKInitialized;
-
- u8 bInterruptMigration;
- u8 bDisableTxInt;
- u8 bGpioHwWpsPbc;
-#endif //CONFIG_PCI_HCI
-
-
-#ifdef CONFIG_TX_EARLY_MODE
- u8 bEarlyModeEnable;
-#endif
-} HAL_DATA_8188E, *PHAL_DATA_8188E;
-
-typedef struct hal_data_8188e HAL_DATA_TYPE, *PHAL_DATA_TYPE;
-
-
-#define GET_HAL_DATA(__pAdapter) ((HAL_DATA_TYPE *)((__pAdapter)->HalData))
-#define GET_RF_TYPE(priv) (GET_HAL_DATA(priv)->rf_type)
-
-#define INCLUDE_MULTI_FUNC_BT(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_BT)
-#define INCLUDE_MULTI_FUNC_GPS(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_GPS)
-
-//#define IS_MULTI_FUNC_CHIP(_Adapter) (((((PHAL_DATA_TYPE)(_Adapter->HalData))->MultiFunc) & (RT_MULTI_FUNC_BT|RT_MULTI_FUNC_GPS)) ? _TRUE : _FALSE)
-
-//#define RT_IS_FUNC_DISABLED(__pAdapter, __FuncBits) ( (__pAdapter)->DisabledFunctions & (__FuncBits) )
-
-#ifdef CONFIG_PCI_HCI
-void InterruptRecognized8188EE(PADAPTER Adapter, PRT_ISR_CONTENT pIsrContent);
-void UpdateInterruptMask8188EE(PADAPTER Adapter, u32 AddMSR, u32 AddMSR1, u32 RemoveMSR, u32 RemoveMSR1);
-#endif //CONFIG_PCI_HCI
-
-// rtl8188e_hal_init.c
-#ifdef CONFIG_WOWLAN
-s32 rtl8188e_FirmwareDownload(PADAPTER padapter, BOOLEAN bUsedWoWLANFw);
-#else
-s32 rtl8188e_FirmwareDownload(PADAPTER padapter);
-#endif
-void _8051Reset88E(PADAPTER padapter);
-void rtl8188e_InitializeFirmwareVars(PADAPTER padapter);
-
-
-s32 InitLLTTable(PADAPTER padapter, u8 txpktbuf_bndy);
-void Read_LLT_Tab(PADAPTER padapter);
-
-// EFuse
-u8 GetEEPROMSize8188E(PADAPTER padapter);
-void Hal_InitPGData88E(PADAPTER padapter);
-void Hal_EfuseParseIDCode88E(PADAPTER padapter, u8 *hwinfo);
-void Hal_ReadTxPowerInfo88E(PADAPTER padapter,u8* hwinfo,BOOLEAN AutoLoadFail);
-
-void Hal_EfuseParseEEPROMVer88E(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
-void rtl8188e_EfuseParseChnlPlan(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
-void Hal_EfuseParseCustomerID88E(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
-void Hal_ReadAntennaDiversity88E (PADAPTER pAdapter,u8*PROMContent,BOOLEAN AutoLoadFail);
-void Hal_ReadThermalMeter_88E(PADAPTER Adapter,u8* PROMContent,BOOLEAN AutoloadFail);
-void Hal_EfuseParseXtal_8188E(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);
-void Hal_EfuseParseBoardType88E(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);
-void Hal_ReadPowerSavingMode88E(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);
-
-BOOLEAN HalDetectPwrDownMode88E(PADAPTER Adapter);
-
-#ifdef CONFIG_WOWLAN
-void Hal_DetectWoWMode(PADAPTER pAdapter);
-#endif //CONFIG_WOWLAN
-
-#ifdef CONFIG_RF_GAIN_OFFSET
-void Hal_ReadRFGainOffset(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);
-#endif //CONFIG_RF_GAIN_OFFSET
-
-//RT_CHANNEL_DOMAIN rtl8723a_HalMapChannelPlan(PADAPTER padapter, u8 HalChannelPlan);
-//VERSION_8192C rtl8723a_ReadChipVersion(PADAPTER padapter);
-//void rtl8723a_ReadBluetoothCoexistInfo(PADAPTER padapter, u8 *PROMContent, BOOLEAN AutoloadFail);
-void Hal_InitChannelPlan(PADAPTER padapter);
-
-void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc);
-
-// register
-void SetBcnCtrlReg(PADAPTER padapter, u8 SetBits, u8 ClearBits);
-
-void rtl8188e_clone_haldata(_adapter *dst_adapter, _adapter *src_adapter);
-void rtl8188e_start_thread(_adapter *padapter);
-void rtl8188e_stop_thread(_adapter *padapter);
-
-void rtw_IOL_cmd_tx_pkt_buf_dump(ADAPTER *Adapter,int data_len);
-#ifdef CONFIG_IOL_EFUSE_PATCH
-s32 rtl8188e_iol_efuse_patch(PADAPTER padapter);
-#endif//CONFIG_IOL_EFUSE_PATCH
-
-#endif //__RTL8188E_HAL_H__
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __RTL8188E_HAL_H__
+#define __RTL8188E_HAL_H__
+
+
+//include HAL Related header after HAL Related compiling flags
+#include "rtl8188e_spec.h"
+#include "Hal8188EPhyReg.h"
+#include "Hal8188EPhyCfg.h"
+#include "rtl8188e_rf.h"
+#include "rtl8188e_dm.h"
+#include "rtl8188e_recv.h"
+#include "rtl8188e_xmit.h"
+#include "rtl8188e_cmd.h"
+#include "Hal8188EPwrSeq.h"
+#ifdef DBG_CONFIG_ERROR_DETECT
+#include "rtl8188e_sreset.h"
+#endif
+#include "rtw_efuse.h"
+
+#include "../hal/OUTSRC/odm_precomp.h"
+
+ // Fw Array
+ #define Rtl8188E_FwImageArray Rtl8188EFwImgArray
+ #define Rtl8188E_FWImgArrayLength Rtl8188EFWImgArrayLength
+#ifdef CONFIG_WOWLAN
+ #define Rtl8188E_FwWoWImageArray Array_8188E_FW_WoWLAN
+ #define Rtl8188E_FwWoWImgArrayLength ArrayLength_8188E_FW_WoWLAN
+#endif //CONFIG_WOWLAN
+
+
+#ifdef CONFIG_SDIO_HCI
+
+ //TODO: We should define 8188ES firmware related macro settings here!!
+ //TODO: The following need to check!!
+ #define RTL8188E_FW_UMC_IMG "rtl8188E\\rtl8188efw.bin"
+ #define RTL8188E_PHY_REG "rtl8188E\\PHY_REG_1T.txt"
+ #define RTL8188E_PHY_RADIO_A "rtl8188E\\radio_a_1T.txt"
+ #define RTL8188E_PHY_RADIO_B "rtl8188E\\radio_b_1T.txt"
+ #define RTL8188E_AGC_TAB "rtl8188E\\AGC_TAB_1T.txt"
+ #define RTL8188E_PHY_MACREG "rtl8188E\\MAC_REG.txt"
+ #define RTL8188E_PHY_REG_PG "rtl8188E\\PHY_REG_PG.txt"
+ #define RTL8188E_PHY_REG_MP "rtl8188E\\PHY_REG_MP.txt"
+
+//---------------------------------------------------------------------
+// RTL8188E From header
+//---------------------------------------------------------------------
+#if 0
+ #define Rtl8188E_PHY_REG_Array_PG Rtl8188ESPHY_REG_Array_PG
+ #define Rtl8188E_PHY_REG_Array_PGLength Rtl8188ESPHY_REG_Array_PGLength
+
+#endif
+
+ //---------------------------------------------------------------------
+ // RTL8188E Power Configuration CMDs for USB/SDIO interfaces
+ //---------------------------------------------------------------------
+ #define Rtl8188E_NIC_PWR_ON_FLOW rtl8188E_power_on_flow
+ #define Rtl8188E_NIC_RF_OFF_FLOW rtl8188E_radio_off_flow
+ #define Rtl8188E_NIC_DISABLE_FLOW rtl8188E_card_disable_flow
+ #define Rtl8188E_NIC_ENABLE_FLOW rtl8188E_card_enable_flow
+ #define Rtl8188E_NIC_SUSPEND_FLOW rtl8188E_suspend_flow
+ #define Rtl8188E_NIC_RESUME_FLOW rtl8188E_resume_flow
+ #define Rtl8188E_NIC_PDN_FLOW rtl8188E_hwpdn_flow
+ #define Rtl8188E_NIC_LPS_ENTER_FLOW rtl8188E_enter_lps_flow
+ #define Rtl8188E_NIC_LPS_LEAVE_FLOW rtl8188E_leave_lps_flow
+
+#elif defined(CONFIG_USB_HCI)
+ #define RTL8188E_FW_UMC_IMG "rtl8188E\\rtl8188efw.bin"
+ #define RTL8188E_PHY_REG "rtl8188E\\PHY_REG_1T.txt"
+ #define RTL8188E_PHY_RADIO_A "rtl8188E\\radio_a_1T.txt"
+ #define RTL8188E_PHY_RADIO_B "rtl8188E\\radio_b_1T.txt"
+ #define RTL8188E_AGC_TAB "rtl8188E\\AGC_TAB_1T.txt"
+ #define RTL8188E_PHY_MACREG "rtl8188E\\MAC_REG.txt"
+ #define RTL8188E_PHY_REG_PG "rtl8188E\\PHY_REG_PG.txt"
+ #define RTL8188E_PHY_REG_MP "rtl8188E\\PHY_REG_MP.txt"
+
+#if 0
+ #define Rtl8188E_PHY_REG_Array_PG Rtl8188EUPHY_REG_Array_PG
+ #define Rtl8188E_PHY_REG_Array_PGLength Rtl8188EUPHY_REG_Array_PGLength
+
+#endif
+
+ //---------------------------------------------------------------------
+ // RTL8188E Power Configuration CMDs for USB/SDIO interfaces
+ //---------------------------------------------------------------------
+ #define Rtl8188E_NIC_PWR_ON_FLOW rtl8188E_power_on_flow
+ #define Rtl8188E_NIC_RF_OFF_FLOW rtl8188E_radio_off_flow
+ #define Rtl8188E_NIC_DISABLE_FLOW rtl8188E_card_disable_flow
+ #define Rtl8188E_NIC_ENABLE_FLOW rtl8188E_card_enable_flow
+ #define Rtl8188E_NIC_SUSPEND_FLOW rtl8188E_suspend_flow
+ #define Rtl8188E_NIC_RESUME_FLOW rtl8188E_resume_flow
+ #define Rtl8188E_NIC_PDN_FLOW rtl8188E_hwpdn_flow
+ #define Rtl8188E_NIC_LPS_ENTER_FLOW rtl8188E_enter_lps_flow
+ #define Rtl8188E_NIC_LPS_LEAVE_FLOW rtl8188E_leave_lps_flow
+
+#elif defined(CONFIG_PCI_HCI)
+ #define RTL8188E_FW_UMC_IMG "rtl8188E\\rtl8188efw.bin"
+ #define RTL8188E_PHY_REG "rtl8188E\\PHY_REG_1T.txt"
+ #define RTL8188E_PHY_RADIO_A "rtl8188E\\radio_a_1T.txt"
+ #define RTL8188E_PHY_RADIO_B "rtl8188E\\radio_b_1T.txt"
+ #define RTL8188E_AGC_TAB "rtl8188E\\AGC_TAB_1T.txt"
+ #define RTL8188E_PHY_MACREG "rtl8188E\\MAC_REG.txt"
+ #define RTL8188E_PHY_REG_PG "rtl8188E\\PHY_REG_PG.txt"
+ #define RTL8188E_PHY_REG_MP "rtl8188E\\PHY_REG_MP.txt"
+
+ #define Rtl8188E_PHY_REG_Array_PG Rtl8188EEPHY_REG_Array_PG
+ #define Rtl8188E_PHY_REG_Array_PGLength Rtl8188EEPHY_REG_Array_PGLength
+
+
+ #ifndef CONFIG_PHY_SETTING_WITH_ODM
+ #if MP_DRIVER == 1
+ #define Rtl8188ES_PHY_REG_Array_MP Rtl8188ESPHY_REG_Array_MP
+ #endif
+ #endif
+
+ //---------------------------------------------------------------------
+ // RTL8188E Power Configuration CMDs for USB/SDIO/PCIE interfaces
+ //---------------------------------------------------------------------
+ #define Rtl8188E_NIC_PWR_ON_FLOW rtl8188E_power_on_flow
+ #define Rtl8188E_NIC_RF_OFF_FLOW rtl8188E_radio_off_flow
+ #define Rtl8188E_NIC_DISABLE_FLOW rtl8188E_card_disable_flow
+ #define Rtl8188E_NIC_ENABLE_FLOW rtl8188E_card_enable_flow
+ #define Rtl8188E_NIC_SUSPEND_FLOW rtl8188E_suspend_flow
+ #define Rtl8188E_NIC_RESUME_FLOW rtl8188E_resume_flow
+ #define Rtl8188E_NIC_PDN_FLOW rtl8188E_hwpdn_flow
+ #define Rtl8188E_NIC_LPS_ENTER_FLOW rtl8188E_enter_lps_flow
+ #define Rtl8188E_NIC_LPS_LEAVE_FLOW rtl8188E_leave_lps_flow
+#endif //CONFIG_***_HCI
+
+
+#define DRVINFO_SZ 4 // unit is 8bytes
+#define PageNum_128(_Len) (u32)(((_Len)>>7) + ((_Len)&0x7F ? 1:0))
+
+
+#if 1 // download firmware related data structure
+#define FW_8188E_SIZE 0x4000 //16384,16k
+#define FW_8188E_START_ADDRESS 0x1000
+#define FW_8188E_END_ADDRESS 0x1FFF //0x5FFF
+
+#define MAX_PAGE_SIZE 4096 // @ page : 4k bytes
+
+#define IS_FW_HEADER_EXIST(_pFwHdr) ((le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x92C0 ||\
+ (le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x88C0 ||\
+ (le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x2300 ||\
+ (le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x88E0)
+
+typedef enum _FIRMWARE_SOURCE {
+ FW_SOURCE_IMG_FILE = 0,
+ FW_SOURCE_HEADER_FILE = 1, //from header file
+} FIRMWARE_SOURCE, *PFIRMWARE_SOURCE;
+
+typedef struct _RT_FIRMWARE {
+ FIRMWARE_SOURCE eFWSource;
+#ifdef CONFIG_EMBEDDED_FWIMG
+ u8* szFwBuffer;
+#else
+ u8 szFwBuffer[FW_8188E_SIZE];
+#endif
+ u32 ulFwLength;
+
+#ifdef CONFIG_WOWLAN
+ u8* szWoWLANFwBuffer;
+ u32 ulWoWLANFwLength;
+#endif //CONFIG_WOWLAN
+} RT_FIRMWARE, *PRT_FIRMWARE, RT_FIRMWARE_8188E, *PRT_FIRMWARE_8188E;
+
+//
+// This structure must be cared byte-ordering
+//
+
+typedef struct _RT_8188E_FIRMWARE_HDR
+{
+ // 8-byte alinment required
+
+ //--- LONG WORD 0 ----
+ u16 Signature; // 92C0: test chip; 92C, 88C0: test chip; 88C1: MP A-cut; 92C1: MP A-cut
+ u8 Category; // AP/NIC and USB/PCI
+ u8 Function; // Reserved for different FW function indcation, for further use when driver needs to download different FW in different conditions
+ u16 Version; // FW Version
+ u8 Subversion; // FW Subversion, default 0x00
+ u16 Rsvd1;
+
+
+ //--- LONG WORD 1 ----
+ u8 Month; // Release time Month field
+ u8 Date; // Release time Date field
+ u8 Hour; // Release time Hour field
+ u8 Minute; // Release time Minute field
+ u16 RamCodeSize; // The size of RAM code
+ u8 Foundry;
+ u8 Rsvd2;
+
+ //--- LONG WORD 2 ----
+ u32 SvnIdx; // The SVN entry index
+ u32 Rsvd3;
+
+ //--- LONG WORD 3 ----
+ u32 Rsvd4;
+ u32 Rsvd5;
+}RT_8188E_FIRMWARE_HDR, *PRT_8188E_FIRMWARE_HDR;
+#endif // download firmware related data structure
+
+
+#define DRIVER_EARLY_INT_TIME 0x05
+#define BCN_DMA_ATIME_INT_TIME 0x02
+
+#ifdef CONFIG_USB_RX_AGGREGATION
+
+typedef enum _USB_RX_AGG_MODE{
+ USB_RX_AGG_DISABLE,
+ USB_RX_AGG_DMA,
+ USB_RX_AGG_USB,
+ USB_RX_AGG_MIX
+}USB_RX_AGG_MODE;
+
+//#define MAX_RX_DMA_BUFFER_SIZE 10240 // 10K for 8192C RX DMA buffer
+
+#endif
+
+
+#define MAX_RX_DMA_BUFFER_SIZE_88E 0x2400 //9k for 88E nornal chip , //MaxRxBuff=10k-max(TxReportSize(64*8), WOLPattern(16*24))
+
+#define MAX_TX_REPORT_BUFFER_SIZE 0x0400 // 1k
+
+
+// BK, BE, VI, VO, HCCA, MANAGEMENT, COMMAND, HIGH, BEACON.
+#define MAX_TX_QUEUE 9
+
+#define TX_SELE_HQ BIT(0) // High Queue
+#define TX_SELE_LQ BIT(1) // Low Queue
+#define TX_SELE_NQ BIT(2) // Normal Queue
+
+// Note: We will divide number of page equally for each queue other than public queue!
+// 22k = 22528 bytes = 176 pages (@page = 128 bytes)
+// must reserved about 7 pages for LPS => 176-7 = 169 (0xA9)
+// 2*BCN / 1*ps-poll / 1*null-data /1*prob_rsp /1*QOS null-data /1*BT QOS null-data
+
+#define TX_TOTAL_PAGE_NUMBER_88E 0xA9// 169 (21632=> 21k)
+
+#ifdef RTL8188ES_MAC_LOOPBACK
+#define TX_PAGE_BOUNDARY_88E 0x48 //72
+#else //TX_PAGE_BOUNDARY_LOOPBACK_MODE
+#define TX_PAGE_BOUNDARY_88E (TX_TOTAL_PAGE_NUMBER_88E + 1)
+#endif
+
+
+//Note: For Normal Chip Setting ,modify later
+#define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER TX_TOTAL_PAGE_NUMBER_88E //0xA9 , 0xb0=>176=>22k
+#define WMM_NORMAL_TX_PAGE_BOUNDARY_88E (WMM_NORMAL_TX_TOTAL_PAGE_NUMBER + 1) //0xA9
+
+
+
+//-------------------------------------------------------------------------
+// Chip specific
+//-------------------------------------------------------------------------
+#define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3)
+#define CHIP_BONDING_92C_1T2R 0x1
+#define CHIP_BONDING_88C_USB_MCARD 0x2
+#define CHIP_BONDING_88C_USB_HP 0x1
+#include "HalVerDef.h"
+#include "hal_com.h"
+
+//-------------------------------------------------------------------------
+// Channel Plan
+//-------------------------------------------------------------------------
+enum ChannelPlan
+{
+ CHPL_FCC = 0,
+ CHPL_IC = 1,
+ CHPL_ETSI = 2,
+ CHPL_SPAIN = 3,
+ CHPL_FRANCE = 4,
+ CHPL_MKK = 5,
+ CHPL_MKK1 = 6,
+ CHPL_ISRAEL = 7,
+ CHPL_TELEC = 8,
+ CHPL_GLOBAL = 9,
+ CHPL_WORLD = 10,
+};
+
+typedef struct _TxPowerInfo
+{
+ u8 CCKIndex[RF_PATH_MAX][CHANNEL_GROUP_MAX_88E];
+ u8 HT40_1SIndex[RF_PATH_MAX][CHANNEL_GROUP_MAX_88E];
+ u8 HT40_2SIndexDiff[RF_PATH_MAX][CHANNEL_GROUP_MAX_88E];
+ u8 HT20IndexDiff[RF_PATH_MAX][CHANNEL_GROUP_MAX_88E];
+ u8 OFDMIndexDiff[RF_PATH_MAX][CHANNEL_GROUP_MAX_88E];
+ u8 HT40MaxOffset[RF_PATH_MAX][CHANNEL_GROUP_MAX_88E];
+ u8 HT20MaxOffset[RF_PATH_MAX][CHANNEL_GROUP_MAX_88E];
+ u8 TSSI_A[3];
+ u8 TSSI_B[3];
+ u8 TSSI_A_5G[3]; //5GL/5GM/5GH
+ u8 TSSI_B_5G[3];
+} TxPowerInfo, *PTxPowerInfo;
+
+typedef struct _TxPowerInfo24G{
+ u1Byte IndexCCK_Base[MAX_RF_PATH][MAX_CHNL_GROUP_24G];
+ u1Byte IndexBW40_Base[MAX_RF_PATH][MAX_CHNL_GROUP_24G-1];
+ //If only one tx, only BW20 and OFDM are used.
+ s1Byte CCK_Diff[MAX_RF_PATH][MAX_TX_COUNT];
+ s1Byte OFDM_Diff[MAX_RF_PATH][MAX_TX_COUNT];
+ s1Byte BW20_Diff[MAX_RF_PATH][MAX_TX_COUNT];
+ s1Byte BW40_Diff[MAX_RF_PATH][MAX_TX_COUNT];
+}TxPowerInfo24G, *PTxPowerInfo24G;
+
+#define EFUSE_REAL_CONTENT_LEN 512
+#define EFUSE_MAP_LEN 128
+#define EFUSE_MAX_SECTION 16
+#define EFUSE_IC_ID_OFFSET 506 //For some inferiority IC purpose. added by Roger, 2009.09.02.
+#define AVAILABLE_EFUSE_ADDR(addr) (addr < EFUSE_REAL_CONTENT_LEN)
+//
+// <Roger_Notes>
+// To prevent out of boundary programming case,
+// leave 1byte and program full section
+// 9bytes + 1byt + 5bytes and pre 1byte.
+// For worst case:
+// | 1byte|----8bytes----|1byte|--5bytes--|
+// | | Reserved(14bytes) |
+//
+#define EFUSE_OOB_PROTECT_BYTES 15 // PG data exclude header, dummy 6 bytes frome CP test and reserved 1byte.
+
+#define HWSET_MAX_SIZE_88E 512
+
+#define EFUSE_REAL_CONTENT_LEN_88E 256
+#define EFUSE_MAP_LEN_88E 512
+#define EFUSE_MAX_SECTION_88E 64
+#define EFUSE_MAX_WORD_UNIT_88E 4
+#define EFUSE_IC_ID_OFFSET_88E 506 //For some inferiority IC purpose. added by Roger, 2009.09.02.
+#define AVAILABLE_EFUSE_ADDR_88E(addr) (addr < EFUSE_REAL_CONTENT_LEN_88E)
+// <Roger_Notes> To prevent out of boundary programming case, leave 1byte and program full section
+// 9bytes + 1byt + 5bytes and pre 1byte.
+// For worst case:
+// | 2byte|----8bytes----|1byte|--7bytes--| //92D
+#define EFUSE_OOB_PROTECT_BYTES_88E 18 // PG data exclude header, dummy 7 bytes frome CP test and reserved 1byte.
+#define EFUSE_PROTECT_BYTES_BANK_88E 16
+
+
+//========================================================
+// EFUSE for BT definition
+//========================================================
+#define EFUSE_BT_REAL_CONTENT_LEN 1536 // 512*3
+#define EFUSE_BT_MAP_LEN 1024 // 1k bytes
+#define EFUSE_BT_MAX_SECTION 128 // 1024/8
+
+#define EFUSE_PROTECT_BYTES_BANK 16
+
+//
+// <Roger_Notes> For RTL8723 WiFi/BT/GPS multi-function configuration. 2010.10.06.
+//
+typedef enum _RT_MULTI_FUNC {
+ RT_MULTI_FUNC_NONE = 0x00,
+ RT_MULTI_FUNC_WIFI = 0x01,
+ RT_MULTI_FUNC_BT = 0x02,
+ RT_MULTI_FUNC_GPS = 0x04,
+} RT_MULTI_FUNC, *PRT_MULTI_FUNC;
+
+//
+// <Roger_Notes> For RTL8723 WiFi PDn/GPIO polarity control configuration. 2010.10.08.
+//
+typedef enum _RT_POLARITY_CTL {
+ RT_POLARITY_LOW_ACT = 0,
+ RT_POLARITY_HIGH_ACT = 1,
+} RT_POLARITY_CTL, *PRT_POLARITY_CTL;
+
+// For RTL8723 regulator mode. by tynli. 2011.01.14.
+typedef enum _RT_REGULATOR_MODE {
+ RT_SWITCHING_REGULATOR = 0,
+ RT_LDO_REGULATOR = 1,
+} RT_REGULATOR_MODE, *PRT_REGULATOR_MODE;
+
+
+typedef struct hal_data_8188e
+{
+ HAL_VERSION VersionID;
+ RT_MULTI_FUNC MultiFunc; // For multi-function consideration.
+ RT_POLARITY_CTL PolarityCtl; // For Wifi PDn Polarity control.
+ RT_REGULATOR_MODE RegulatorMode; // switching regulator or LDO
+ u16 CustomerID;
+
+ u16 FirmwareVersion;
+ u16 FirmwareVersionRev;
+ u16 FirmwareSubVersion;
+ u16 FirmwareSignature;
+ u8 PGMaxGroup;
+ //current WIFI_PHY values
+ u32 ReceiveConfig;
+ WIRELESS_MODE CurrentWirelessMode;
+ HT_CHANNEL_WIDTH CurrentChannelBW;
+ u8 CurrentChannel;
+ u8 nCur40MhzPrimeSC;// Control channel sub-carrier
+
+ u16 BasicRateSet;
+
+ //rf_ctrl
+ u8 rf_chip;
+ u8 rf_type;
+ u8 NumTotalRFPath;
+
+ u8 BoardType;
+
+ //
+ // EEPROM setting.
+ //
+ u16 EEPROMVID;
+ u16 EEPROMPID;
+ u16 EEPROMSVID;
+ u16 EEPROMSDID;
+ u8 EEPROMCustomerID;
+ u8 EEPROMSubCustomerID;
+ u8 EEPROMVersion;
+ u8 EEPROMRegulatory;
+
+ u8 bTXPowerDataReadFromEEPORM;
+ u8 EEPROMThermalMeter;
+ u8 bAPKThermalMeterIgnore;
+
+ BOOLEAN EepromOrEfuse;
+ u8 EfuseMap[2][HWSET_MAX_SIZE_512]; //92C:256bytes, 88E:512bytes, we use union set (512bytes)
+ u8 EfuseUsedPercentage;
+ EFUSE_HAL EfuseHal;
+
+ //u8 bIQKInitialized;
+
+
+ u8 Index24G_CCK_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
+ u8 Index24G_BW40_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
+ //If only one tx, only BW20 and OFDM are used.
+ s8 CCK_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
+ s8 OFDM_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
+ s8 BW20_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
+ s8 BW40_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
+
+ u8 TxPwrLevelCck[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
+ u8 TxPwrLevelHT40_1S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
+ u8 TxPwrLevelHT40_2S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
+ u8 TxPwrHt20Diff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// HT 20<->40 Pwr diff
+ u8 TxPwrLegacyHtDiff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// For HT<->legacy pwr diff
+ // For power group
+ u8 PwrGroupHT20[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
+ u8 PwrGroupHT40[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
+
+ u8 LegacyHTTxPowerDiff;// Legacy to HT rate power diff
+ // The current Tx Power Level
+ u8 CurrentCckTxPwrIdx;
+ u8 CurrentOfdm24GTxPwrIdx;
+ u8 CurrentBW2024GTxPwrIdx;
+ u8 CurrentBW4024GTxPwrIdx;
+
+
+ // Read/write are allow for following hardware information variables
+ u8 framesync;
+ u32 framesyncC34;
+ u8 framesyncMonitor;
+ u8 DefaultInitialGain[4];
+ u8 pwrGroupCnt;
+ u32 MCSTxPowerLevelOriginalOffset[MAX_PG_GROUP][16];
+ u32 CCKTxPowerLevelOriginalOffset;
+
+ u8 CrystalCap;
+ u32 AntennaTxPath; // Antenna path Tx
+ u32 AntennaRxPath; // Antenna path Rx
+ u8 BluetoothCoexist;
+ u8 ExternalPA;
+
+ u8 bLedOpenDrain; // Support Open-drain arrangement for controlling the LED. Added by Roger, 2009.10.16.
+
+ //u32 LedControlNum;
+ //u32 LedControlMode;
+ //u32 TxPowerTrackControl;
+ u8 b1x1RecvCombine; // for 1T1R receive combining
+
+ //u8 bCurrentTurboEDCA;
+ u32 AcParam_BE; //Original parameter for BE, use for EDCA turbo.
+
+ BB_REGISTER_DEFINITION_T PHYRegDef[4]; //Radio A/B/C/D
+
+ u32 RfRegChnlVal[2];
+
+ //RDG enable
+ BOOLEAN bRDGEnable;
+
+ //for host message to fw
+ u8 LastHMEBoxNum;
+
+ u8 fw_ractrl;
+ u8 RegTxPause;
+ // Beacon function related global variable.
+ u32 RegBcnCtrlVal;
+ u8 RegFwHwTxQCtrl;
+ u8 RegReg542;
+ u8 RegCR_1;
+
+ struct dm_priv dmpriv;
+ DM_ODM_T odmpriv;
+ //_lock odm_stainfo_lock;
+#ifdef DBG_CONFIG_ERROR_DETECT
+ struct sreset_priv srestpriv;
+#endif
+
+#ifdef CONFIG_BT_COEXIST
+ struct btcoexist_priv bt_coexist;
+#endif
+
+ u8 CurAntenna;
+ u8 AntDivCfg;
+ u8 TRxAntDivType;
+
+
+ u8 bDumpRxPkt;//for debug
+ u8 bDumpTxPkt;//for debug
+ u8 FwRsvdPageStartOffset; //2010.06.23. Added by tynli. Reserve page start offset except beacon in TxQ.
+
+ // 2010/08/09 MH Add CU power down mode.
+ BOOLEAN pwrdown;
+
+ // Add for dual MAC 0--Mac0 1--Mac1
+ u32 interfaceIndex;
+
+ u8 OutEpQueueSel;
+ u8 OutEpNumber;
+
+ // 2010/12/10 MH Add for USB aggreation mode dynamic shceme.
+ BOOLEAN UsbRxHighSpeedMode;
+
+ // 2010/11/22 MH Add for slim combo debug mode selective.
+ // This is used for fix the drawback of CU TSMC-A/UMC-A cut. HW auto suspend ability. Close BT clock.
+ BOOLEAN SlimComboDbg;
+
+ u16 EfuseUsedBytes;
+
+#ifdef CONFIG_P2P
+ struct P2P_PS_Offload_t p2p_ps_offload;
+#endif
+
+ // Auto FSM to Turn On, include clock, isolation, power control for MAC only
+ u8 bMacPwrCtrlOn;
+
+#ifdef CONFIG_SDIO_HCI
+ //
+ // For SDIO Interface HAL related
+ //
+
+ //
+ // SDIO ISR Related
+ //
+// u32 IntrMask[1];
+// u32 IntrMaskToSet[1];
+// LOG_INTERRUPT InterruptLog;
+ u32 sdio_himr;
+ u32 sdio_hisr;
+
+ //
+ // SDIO Tx FIFO related.
+ //
+ // HIQ, MID, LOW, PUB free pages; padapter->xmitpriv.free_txpg
+ u8 SdioTxFIFOFreePage[SDIO_TX_FREE_PG_QUEUE];
+ _lock SdioTxFIFOFreePageLock;
+
+ //
+ // SDIO Rx FIFO related.
+ //
+ u8 SdioRxFIFOCnt;
+ u16 SdioRxFIFOSize;
+#endif //CONFIG_SDIO_HCI
+
+#ifdef CONFIG_USB_HCI
+ u32 UsbBulkOutSize;
+
+ // Interrupt relatd register information.
+ u32 IntArray[3];//HISR0,HISR1,HSISR
+ u32 IntrMask[3];
+ u8 C2hArray[16];
+#ifdef CONFIG_USB_TX_AGGREGATION
+ u8 UsbTxAggMode;
+ u8 UsbTxAggDescNum;
+#endif
+#ifdef CONFIG_USB_RX_AGGREGATION
+ u16 HwRxPageSize; // Hardware setting
+ u32 MaxUsbRxAggBlock;
+
+ USB_RX_AGG_MODE UsbRxAggMode;
+ u8 UsbRxAggBlockCount; // USB Block count. Block size is 512-byte in hight speed and 64-byte in full speed
+ u8 UsbRxAggBlockTimeout;
+ u8 UsbRxAggPageCount; // 8192C DMA page count
+ u8 UsbRxAggPageTimeout;
+#endif
+#endif //CONFIG_USB_HCI
+
+
+#ifdef CONFIG_PCI_HCI
+
+ //
+ // EEPROM setting.
+ //
+
+ u16 EEPROMDID;
+ u16 EEPROMSMID;
+ u16 EEPROMChannelPlan;
+
+ u8 EEPROMTSSI[2];
+ u8 EEPROMBoardType;
+ u32 TransmitConfig;
+
+ u32 IntrMask[2];
+ u32 IntrMaskToSet[2];
+
+ u8 bDefaultAntenna;
+ u8 bIQKInitialized;
+
+ u8 bInterruptMigration;
+ u8 bDisableTxInt;
+ u8 bGpioHwWpsPbc;
+#endif //CONFIG_PCI_HCI
+
+
+#ifdef CONFIG_TX_EARLY_MODE
+ u8 bEarlyModeEnable;
+#endif
+} HAL_DATA_8188E, *PHAL_DATA_8188E;
+
+typedef struct hal_data_8188e HAL_DATA_TYPE, *PHAL_DATA_TYPE;
+
+
+#define GET_HAL_DATA(__pAdapter) ((HAL_DATA_TYPE *)((__pAdapter)->HalData))
+#define GET_RF_TYPE(priv) (GET_HAL_DATA(priv)->rf_type)
+
+#define INCLUDE_MULTI_FUNC_BT(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_BT)
+#define INCLUDE_MULTI_FUNC_GPS(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_GPS)
+
+//#define IS_MULTI_FUNC_CHIP(_Adapter) (((((PHAL_DATA_TYPE)(_Adapter->HalData))->MultiFunc) & (RT_MULTI_FUNC_BT|RT_MULTI_FUNC_GPS)) ? _TRUE : _FALSE)
+
+//#define RT_IS_FUNC_DISABLED(__pAdapter, __FuncBits) ( (__pAdapter)->DisabledFunctions & (__FuncBits) )
+
+#ifdef CONFIG_PCI_HCI
+void InterruptRecognized8188EE(PADAPTER Adapter, PRT_ISR_CONTENT pIsrContent);
+void UpdateInterruptMask8188EE(PADAPTER Adapter, u32 AddMSR, u32 AddMSR1, u32 RemoveMSR, u32 RemoveMSR1);
+#endif //CONFIG_PCI_HCI
+
+// rtl8188e_hal_init.c
+#ifdef CONFIG_WOWLAN
+s32 rtl8188e_FirmwareDownload(PADAPTER padapter, BOOLEAN bUsedWoWLANFw);
+#else
+s32 rtl8188e_FirmwareDownload(PADAPTER padapter);
+#endif
+void _8051Reset88E(PADAPTER padapter);
+void rtl8188e_InitializeFirmwareVars(PADAPTER padapter);
+
+
+s32 InitLLTTable(PADAPTER padapter, u8 txpktbuf_bndy);
+void Read_LLT_Tab(PADAPTER padapter);
+
+// EFuse
+u8 GetEEPROMSize8188E(PADAPTER padapter);
+void Hal_InitPGData88E(PADAPTER padapter);
+void Hal_EfuseParseIDCode88E(PADAPTER padapter, u8 *hwinfo);
+void Hal_ReadTxPowerInfo88E(PADAPTER padapter,u8* hwinfo,BOOLEAN AutoLoadFail);
+
+void Hal_EfuseParseEEPROMVer88E(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
+void rtl8188e_EfuseParseChnlPlan(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
+void Hal_EfuseParseCustomerID88E(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
+void Hal_ReadAntennaDiversity88E (PADAPTER pAdapter,u8*PROMContent,BOOLEAN AutoLoadFail);
+void Hal_ReadThermalMeter_88E(PADAPTER Adapter,u8* PROMContent,BOOLEAN AutoloadFail);
+void Hal_EfuseParseXtal_8188E(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);
+void Hal_EfuseParseBoardType88E(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);
+void Hal_ReadPowerSavingMode88E(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);
+
+BOOLEAN HalDetectPwrDownMode88E(PADAPTER Adapter);
+
+#ifdef CONFIG_WOWLAN
+void Hal_DetectWoWMode(PADAPTER pAdapter);
+#endif //CONFIG_WOWLAN
+
+#ifdef CONFIG_RF_GAIN_OFFSET
+void Hal_ReadRFGainOffset(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);
+#endif //CONFIG_RF_GAIN_OFFSET
+
+//RT_CHANNEL_DOMAIN rtl8723a_HalMapChannelPlan(PADAPTER padapter, u8 HalChannelPlan);
+//VERSION_8192C rtl8723a_ReadChipVersion(PADAPTER padapter);
+//void rtl8723a_ReadBluetoothCoexistInfo(PADAPTER padapter, u8 *PROMContent, BOOLEAN AutoloadFail);
+void Hal_InitChannelPlan(PADAPTER padapter);
+
+void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc);
+
+// register
+void SetBcnCtrlReg(PADAPTER padapter, u8 SetBits, u8 ClearBits);
+
+void rtl8188e_start_thread(_adapter *padapter);
+void rtl8188e_stop_thread(_adapter *padapter);
+
+void rtw_IOL_cmd_tx_pkt_buf_dump(ADAPTER *Adapter,int data_len);
+#ifdef CONFIG_IOL_EFUSE_PATCH
+s32 rtl8188e_iol_efuse_patch(PADAPTER padapter);
+#endif//CONFIG_IOL_EFUSE_PATCH
+
+#endif //__RTL8188E_HAL_H__
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8188e_led.h b/drivers/net/wireless/rtl8723as/include/rtl8188e_led.h
index c461410c9d1b..2bafb83fddb8 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8188e_led.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8188e_led.h
@@ -1,46 +1,46 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __RTL8188E_LED_H__
-#define __RTL8188E_LED_H__
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-
-
-//================================================================================
-// Interface to manipulate LED objects.
-//================================================================================
-#ifdef CONFIG_USB_HCI
-void rtl8188eu_InitSwLeds(PADAPTER padapter);
-void rtl8188eu_DeInitSwLeds(PADAPTER padapter);
-#endif
-#ifdef CONFIG_PCI_HCI
-void rtl8188ee_gen_RefreshLedState(PADAPTER Adapter);
-void rtl8188ee_InitSwLeds(PADAPTER padapter);
-void rtl8188ee_DeInitSwLeds(PADAPTER padapter);
-#endif
-#ifdef CONFIG_SDIO_HCI
-void rtl8188es_InitSwLeds(PADAPTER padapter);
-void rtl8188es_DeInitSwLeds(PADAPTER padapter);
-#endif
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __RTL8188E_LED_H__
+#define __RTL8188E_LED_H__
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+
+
+//================================================================================
+// Interface to manipulate LED objects.
+//================================================================================
+#ifdef CONFIG_USB_HCI
+void rtl8188eu_InitSwLeds(PADAPTER padapter);
+void rtl8188eu_DeInitSwLeds(PADAPTER padapter);
+#endif
+#ifdef CONFIG_PCI_HCI
+void rtl8188ee_gen_RefreshLedState(PADAPTER Adapter);
+void rtl8188ee_InitSwLeds(PADAPTER padapter);
+void rtl8188ee_DeInitSwLeds(PADAPTER padapter);
+#endif
+#ifdef CONFIG_SDIO_HCI
+void rtl8188es_InitSwLeds(PADAPTER padapter);
+void rtl8188es_DeInitSwLeds(PADAPTER padapter);
+#endif
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8188e_recv.h b/drivers/net/wireless/rtl8723as/include/rtl8188e_recv.h
index 664a7fca3b71..2c190d054626 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8188e_recv.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8188e_recv.h
@@ -1,146 +1,146 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __RTL8188E_RECV_H__
-#define __RTL8188E_RECV_H__
-
-#include <rtl8192c_recv.h>
-
-#define TX_RPT1_PKT_LEN 8
-
-typedef enum _RX_PACKET_TYPE{
- NORMAL_RX,//Normal rx packet
- TX_REPORT1,//CCX
- TX_REPORT2,//TX RPT
- HIS_REPORT,// USB HISR RPT
-}RX_PACKET_TYPE, *PRX_PACKET_TYPE;
-
-typedef struct rxreport_8188e
-{
- //Offset 0
- u32 pktlen:14;
- u32 crc32:1;
- u32 icverr:1;
- u32 drvinfosize:4;
- u32 security:3;
- u32 qos:1;
- u32 shift:2;
- u32 physt:1;
- u32 swdec:1;
- u32 ls:1;
- u32 fs:1;
- u32 eor:1;
- u32 own:1;
-
- //Offset 4
- u32 macid:5;
- u32 tid:4;
- u32 hwrsvd:4;
- u32 amsdu:1;
- u32 paggr:1;
- u32 faggr:1;
- u32 a1fit:4;
- u32 a2fit:4;
- u32 pam:1;
- u32 pwr:1;
- u32 md:1;
- u32 mf:1;
- u32 type:2;
- u32 mc:1;
- u32 bc:1;
-
- //Offset 8
- u32 seq:12;
- u32 frag:4;
- u32 nextpktlen:14;
- u32 nextind:1;
- u32 rsvd0831:1;
-
- //Offset 12
- u32 rxmcs:6;
- u32 rxht:1;
- u32 gf:1;
- u32 splcp:1;
- u32 bw:1;
- u32 htc:1;
- u32 eosp:1;
- u32 bssidfit:2;
- u32 rpt_sel:2;
- u32 rsvd1216:13;
- u32 pattern_match:1;
- u32 unicastwake:1;
- u32 magicwake:1;
-
- //Offset 16
- /*
- u32 pattern0match:1;
- u32 pattern1match:1;
- u32 pattern2match:1;
- u32 pattern3match:1;
- u32 pattern4match:1;
- u32 pattern5match:1;
- u32 pattern6match:1;
- u32 pattern7match:1;
- u32 pattern8match:1;
- u32 pattern9match:1;
- u32 patternamatch:1;
- u32 patternbmatch:1;
- u32 patterncmatch:1;
- u32 rsvd1613:19;
- */
- u32 rsvd16;
-
- //Offset 20
- u32 tsfl;
-
- //Offset 24
- u32 bassn:12;
- u32 bavld:1;
- u32 rsvd2413:19;
-} RXREPORT, *PRXREPORT;
-
-
-#ifdef CONFIG_SDIO_HCI
-s32 rtl8188es_init_recv_priv(PADAPTER padapter);
-void rtl8188es_free_recv_priv(PADAPTER padapter);
-void rtl8188es_recv_hdl(PADAPTER padapter, struct recv_buf *precvbuf);
-#endif
-
-#ifdef CONFIG_USB_HCI
-#define INTERRUPT_MSG_FORMAT_LEN 60
-void rtl8188eu_init_recvbuf(_adapter *padapter, struct recv_buf *precvbuf);
-s32 rtl8188eu_init_recv_priv(PADAPTER padapter);
-void rtl8188eu_free_recv_priv(PADAPTER padapter);
-void rtl8188eu_recv_hdl(PADAPTER padapter, struct recv_buf *precvbuf);
-void rtl8188eu_recv_tasklet(void *priv);
-
-#endif
-
-#ifdef CONFIG_PCI_HCI
-s32 rtl8188ee_init_recv_priv(PADAPTER padapter);
-void rtl8188ee_free_recv_priv(PADAPTER padapter);
-#endif
-
-void rtl8188e_query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pphy_stat);
-void rtl8188e_process_phy_info(PADAPTER padapter, void *prframe);
-void update_recvframe_phyinfo_88e(union recv_frame *precvframe,struct phy_stat *pphy_status);
-void update_recvframe_attrib_88e( union recv_frame *precvframe, struct recv_stat *prxstat);
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __RTL8188E_RECV_H__
+#define __RTL8188E_RECV_H__
+
+#include <rtl8192c_recv.h>
+
+#define TX_RPT1_PKT_LEN 8
+
+typedef enum _RX_PACKET_TYPE{
+ NORMAL_RX,//Normal rx packet
+ TX_REPORT1,//CCX
+ TX_REPORT2,//TX RPT
+ HIS_REPORT,// USB HISR RPT
+}RX_PACKET_TYPE, *PRX_PACKET_TYPE;
+
+typedef struct rxreport_8188e
+{
+ //Offset 0
+ u32 pktlen:14;
+ u32 crc32:1;
+ u32 icverr:1;
+ u32 drvinfosize:4;
+ u32 security:3;
+ u32 qos:1;
+ u32 shift:2;
+ u32 physt:1;
+ u32 swdec:1;
+ u32 ls:1;
+ u32 fs:1;
+ u32 eor:1;
+ u32 own:1;
+
+ //Offset 4
+ u32 macid:5;
+ u32 tid:4;
+ u32 hwrsvd:4;
+ u32 amsdu:1;
+ u32 paggr:1;
+ u32 faggr:1;
+ u32 a1fit:4;
+ u32 a2fit:4;
+ u32 pam:1;
+ u32 pwr:1;
+ u32 md:1;
+ u32 mf:1;
+ u32 type:2;
+ u32 mc:1;
+ u32 bc:1;
+
+ //Offset 8
+ u32 seq:12;
+ u32 frag:4;
+ u32 nextpktlen:14;
+ u32 nextind:1;
+ u32 rsvd0831:1;
+
+ //Offset 12
+ u32 rxmcs:6;
+ u32 rxht:1;
+ u32 gf:1;
+ u32 splcp:1;
+ u32 bw:1;
+ u32 htc:1;
+ u32 eosp:1;
+ u32 bssidfit:2;
+ u32 rpt_sel:2;
+ u32 rsvd1216:13;
+ u32 pattern_match:1;
+ u32 unicastwake:1;
+ u32 magicwake:1;
+
+ //Offset 16
+ /*
+ u32 pattern0match:1;
+ u32 pattern1match:1;
+ u32 pattern2match:1;
+ u32 pattern3match:1;
+ u32 pattern4match:1;
+ u32 pattern5match:1;
+ u32 pattern6match:1;
+ u32 pattern7match:1;
+ u32 pattern8match:1;
+ u32 pattern9match:1;
+ u32 patternamatch:1;
+ u32 patternbmatch:1;
+ u32 patterncmatch:1;
+ u32 rsvd1613:19;
+ */
+ u32 rsvd16;
+
+ //Offset 20
+ u32 tsfl;
+
+ //Offset 24
+ u32 bassn:12;
+ u32 bavld:1;
+ u32 rsvd2413:19;
+} RXREPORT, *PRXREPORT;
+
+
+#ifdef CONFIG_SDIO_HCI
+s32 rtl8188es_init_recv_priv(PADAPTER padapter);
+void rtl8188es_free_recv_priv(PADAPTER padapter);
+void rtl8188es_recv_hdl(PADAPTER padapter, struct recv_buf *precvbuf);
+#endif
+
+#ifdef CONFIG_USB_HCI
+#define INTERRUPT_MSG_FORMAT_LEN 60
+void rtl8188eu_init_recvbuf(_adapter *padapter, struct recv_buf *precvbuf);
+s32 rtl8188eu_init_recv_priv(PADAPTER padapter);
+void rtl8188eu_free_recv_priv(PADAPTER padapter);
+void rtl8188eu_recv_hdl(PADAPTER padapter, struct recv_buf *precvbuf);
+void rtl8188eu_recv_tasklet(void *priv);
+
+#endif
+
+#ifdef CONFIG_PCI_HCI
+s32 rtl8188ee_init_recv_priv(PADAPTER padapter);
+void rtl8188ee_free_recv_priv(PADAPTER padapter);
+#endif
+
+void rtl8188e_query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pphy_stat);
+void rtl8188e_process_phy_info(PADAPTER padapter, void *prframe);
+void update_recvframe_phyinfo_88e(union recv_frame *precvframe,struct phy_stat *pphy_status);
+void update_recvframe_attrib_88e( union recv_frame *precvframe, struct recv_stat *prxstat);
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8188e_spec.h b/drivers/net/wireless/rtl8723as/include/rtl8188e_spec.h
index 9633252ba9e6..0421da900700 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8188e_spec.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8188e_spec.h
@@ -1,1732 +1,1741 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *******************************************************************************/
-#ifndef __RTL8188E_SPEC_H__
-#define __RTL8188E_SPEC_H__
-
-#include <drv_conf.h>
-
-#ifndef BIT
-#define BIT(x) (1 << (x))
-#endif
-
-#define BIT0 0x00000001
-#define BIT1 0x00000002
-#define BIT2 0x00000004
-#define BIT3 0x00000008
-#define BIT4 0x00000010
-#define BIT5 0x00000020
-#define BIT6 0x00000040
-#define BIT7 0x00000080
-#define BIT8 0x00000100
-#define BIT9 0x00000200
-#define BIT10 0x00000400
-#define BIT11 0x00000800
-#define BIT12 0x00001000
-#define BIT13 0x00002000
-#define BIT14 0x00004000
-#define BIT15 0x00008000
-#define BIT16 0x00010000
-#define BIT17 0x00020000
-#define BIT18 0x00040000
-#define BIT19 0x00080000
-#define BIT20 0x00100000
-#define BIT21 0x00200000
-#define BIT22 0x00400000
-#define BIT23 0x00800000
-#define BIT24 0x01000000
-#define BIT25 0x02000000
-#define BIT26 0x04000000
-#define BIT27 0x08000000
-#define BIT28 0x10000000
-#define BIT29 0x20000000
-#define BIT30 0x40000000
-#define BIT31 0x80000000
-
-//============================================================
-// 8192C Regsiter offset definition
-//============================================================
-
-#define HAL_PS_TIMER_INT_DELAY 50 // 50 microseconds
-#define HAL_92C_NAV_UPPER_UNIT 128 // micro-second
-
-#define MAC_ADDR_LEN 6
-// 8188E PKT_BUFF_ACCESS_CTRL value
-#define TXPKT_BUF_SELECT 0x69
-#define RXPKT_BUF_SELECT 0xA5
-#define DISABLE_TRXPKT_BUF_ACCESS 0x0
-
-//============================================================
-//
-//============================================================
-
-//-----------------------------------------------------
-//
-// 0x0000h ~ 0x00FFh System Configuration
-//
-//-----------------------------------------------------
-#define REG_SYS_ISO_CTRL 0x0000
-#define REG_SYS_FUNC_EN 0x0002
-#define REG_APS_FSMCO 0x0004
-#define REG_SYS_CLKR 0x0008
-#define REG_9346CR 0x000A
-#define REG_EE_VPD 0x000C
-#define REG_AFE_MISC 0x0010
-#define REG_SPS0_CTRL 0x0011
-#define REG_SPS_OCP_CFG 0x0018
-#define REG_RSV_CTRL 0x001C
-#define REG_RF_CTRL 0x001F
-#define REG_LDOA15_CTRL 0x0020
-#define REG_LDOV12D_CTRL 0x0021
-#define REG_LDOHCI12_CTRL 0x0022
-#define REG_LPLDO_CTRL 0x0023
-#define REG_AFE_XTAL_CTRL 0x0024
-#define REG_AFE_PLL_CTRL 0x0028
-#define REG_APE_PLL_CTRL_EXT 0x002c
-#define REG_EFUSE_CTRL 0x0030
-#define REG_EFUSE_TEST 0x0034
-#define REG_GPIO_MUXCFG 0x0040
-#define REG_GPIO_IO_SEL 0x0042
-#define REG_MAC_PINMUX_CFG 0x0043
-#define REG_GPIO_PIN_CTRL 0x0044
-#define REG_GPIO_INTM 0x0048
-#define REG_LEDCFG0 0x004C
-#define REG_LEDCFG1 0x004D
-#define REG_LEDCFG2 0x004E
-#define REG_LEDCFG3 0x004F
-#define REG_FSIMR 0x0050
-#define REG_FSISR 0x0054
-#define REG_HSIMR 0x0058
-#define REG_HSISR 0x005c
-#define REG_GPIO_PIN_CTRL_2 0x0060 // RTL8723 WIFI/BT/GPS Multi-Function GPIO Pin Control.
-#define REG_GPIO_IO_SEL_2 0x0062 // RTL8723 WIFI/BT/GPS Multi-Function GPIO Select.
-#define REG_BB_PAD_CTRL 0x0064
-#define REG_MULTI_FUNC_CTRL 0x0068 // RTL8723 WIFI/BT/GPS Multi-Function control source.
-#define REG_GPIO_OUTPUT 0x006c
-#define REG_AFE_XTAL_CTRL_EXT 0x0078 //RTL8188E
-#define REG_XCK_OUT_CTRL 0x007c //RTL8188E
-#define REG_MCUFWDL 0x0080
-#define REG_WOL_EVENT 0x0081 //RTL8188E
-#define REG_MCUTSTCFG 0x0084
-#define REG_HMEBOX_E0 0x0088
-#define REG_HMEBOX_E1 0x008A
-#define REG_HMEBOX_E2 0x008C
-#define REG_HMEBOX_E3 0x008E
-#define REG_HMEBOX_EXT_0 0x01F0
-#define REG_HMEBOX_EXT_1 0x01F4
-#define REG_HMEBOX_EXT_2 0x01F8
-#define REG_HMEBOX_EXT_3 0x01FC
-#define REG_HIMR_88E 0x00B0
-#define REG_HISR_88E 0x00B4
-#define REG_HIMRE_88E 0x00B8
-#define REG_HISRE_88E 0x00BC
-#define REG_EFUSE_ACCESS 0x00CF // Efuse access protection for RTL8723
-#define REG_BIST_SCAN 0x00D0
-#define REG_BIST_RPT 0x00D4
-#define REG_BIST_ROM_RPT 0x00D8
-#define REG_USB_SIE_INTF 0x00E0
-#define REG_PCIE_MIO_INTF 0x00E4
-#define REG_PCIE_MIO_INTD 0x00E8
-#define REG_HPON_FSM 0x00EC
-#define REG_SYS_CFG 0x00F0
-#define REG_GPIO_OUTSTS 0x00F4 // For RTL8723 only.
-#define REG_TYPE_ID 0x00FC
-
-#define REG_MAC_PHY_CTRL_NORMAL 0x00f8
-
-//-----------------------------------------------------
-//
-// 0x0100h ~ 0x01FFh MACTOP General Configuration
-//
-//-----------------------------------------------------
-#define REG_CR 0x0100
-#define REG_PBP 0x0104
-#define REG_PKT_BUFF_ACCESS_CTRL 0x0106
-#define REG_TRXDMA_CTRL 0x010C
-#define REG_TRXFF_BNDY 0x0114
-#define REG_TRXFF_STATUS 0x0118
-#define REG_RXFF_PTR 0x011C
-//#define REG_HIMR 0x0120
-//#define REG_HISR 0x0124
-#define REG_HIMRE 0x0128
-#define REG_HISRE 0x012C
-#define REG_CPWM 0x012F
-#define REG_FWIMR 0x0130
-#define REG_FTIMR 0x0138
-#define REG_FWISR 0x0134
-#define REG_PKTBUF_DBG_CTRL 0x0140
-#define REG_PKTBUF_DBG_ADDR (REG_PKTBUF_DBG_CTRL)
-#define REG_RXPKTBUF_DBG (REG_PKTBUF_DBG_CTRL+2)
-#define REG_TXPKTBUF_DBG (REG_PKTBUF_DBG_CTRL+3)
-#define REG_RXPKTBUF_CTRL (REG_PKTBUF_DBG_CTRL+2)
-#define REG_PKTBUF_DBG_DATA_L 0x0144
-#define REG_PKTBUF_DBG_DATA_H 0x0148
-
-#define REG_TC0_CTRL 0x0150
-#define REG_TC1_CTRL 0x0154
-#define REG_TC2_CTRL 0x0158
-#define REG_TC3_CTRL 0x015C
-#define REG_TC4_CTRL 0x0160
-#define REG_TCUNIT_BASE 0x0164
-#define REG_MBIST_START 0x0174
-#define REG_MBIST_DONE 0x0178
-#define REG_MBIST_FAIL 0x017C
-#define REG_32K_CTRL 0x0194 //RTL8188E
-#define REG_C2HEVT_MSG_NORMAL 0x01A0
-#define REG_C2HEVT_CLEAR 0x01AF
-#define REG_MCUTST_1 0x01c0
-#ifdef CONFIG_WOWLAN
-#define REG_WOWLAN_WAKE_REASON 0x01c7
-#endif
-#define REG_FMETHR 0x01C8
-#define REG_HMETFR 0x01CC
-#define REG_HMEBOX_0 0x01D0
-#define REG_HMEBOX_1 0x01D4
-#define REG_HMEBOX_2 0x01D8
-#define REG_HMEBOX_3 0x01DC
-
-#define REG_LLT_INIT 0x01E0
-
-
-//-----------------------------------------------------
-//
-// 0x0200h ~ 0x027Fh TXDMA Configuration
-//
-//-----------------------------------------------------
-#define REG_RQPN 0x0200
-#define REG_FIFOPAGE 0x0204
-#define REG_TDECTRL 0x0208
-#define REG_TXDMA_OFFSET_CHK 0x020C
-#define REG_TXDMA_STATUS 0x0210
-#define REG_RQPN_NPQ 0x0214
-
-//-----------------------------------------------------
-//
-// 0x0280h ~ 0x02FFh RXDMA Configuration
-//
-//-----------------------------------------------------
-#define REG_RXDMA_AGG_PG_TH 0x0280
-#define REG_RXPKT_NUM 0x0284
-#define REG_RXDMA_STATUS 0x0288
-
-//-----------------------------------------------------
-//
-// 0x0300h ~ 0x03FFh PCIe
-//
-//-----------------------------------------------------
-#define REG_PCIE_CTRL_REG 0x0300
-#define REG_INT_MIG 0x0304 // Interrupt Migration
-#define REG_BCNQ_DESA 0x0308 // TX Beacon Descriptor Address
-#define REG_HQ_DESA 0x0310 // TX High Queue Descriptor Address
-#define REG_MGQ_DESA 0x0318 // TX Manage Queue Descriptor Address
-#define REG_VOQ_DESA 0x0320 // TX VO Queue Descriptor Address
-#define REG_VIQ_DESA 0x0328 // TX VI Queue Descriptor Address
-#define REG_BEQ_DESA 0x0330 // TX BE Queue Descriptor Address
-#define REG_BKQ_DESA 0x0338 // TX BK Queue Descriptor Address
-#define REG_RX_DESA 0x0340 // RX Queue Descriptor Address
-#define REG_MDIO 0x0354 // MDIO for Access PCIE PHY
-#define REG_DBG_SEL 0x0360 // Debug Selection Register
-#define REG_PCIE_HRPWM 0x0361 //PCIe RPWM
-#define REG_PCIE_HCPWM 0x0363 //PCIe CPWM
-#define REG_WATCH_DOG 0x0368
-
-// RTL8723 series -------------------------------
-#define REG_PCIE_HISR 0x03A0
-
-// spec version 11
-//-----------------------------------------------------
-//
-// 0x0400h ~ 0x047Fh Protocol Configuration
-//
-//-----------------------------------------------------
-#define REG_VOQ_INFORMATION 0x0400
-#define REG_VIQ_INFORMATION 0x0404
-#define REG_BEQ_INFORMATION 0x0408
-#define REG_BKQ_INFORMATION 0x040C
-#define REG_MGQ_INFORMATION 0x0410
-#define REG_HGQ_INFORMATION 0x0414
-#define REG_BCNQ_INFORMATION 0x0418
-#define REG_TXPKT_EMPTY 0x041A
-
-#define REG_CPU_MGQ_INFORMATION 0x041C
-#define REG_FWHW_TXQ_CTRL 0x0420
-#define REG_HWSEQ_CTRL 0x0423
-#define REG_TXPKTBUF_BCNQ_BDNY 0x0424
-#define REG_TXPKTBUF_MGQ_BDNY 0x0425
-#define REG_LIFETIME_EN 0x0426
-#define REG_MULTI_BCNQ_OFFSET 0x0427
-#define REG_SPEC_SIFS 0x0428
-#define REG_RL 0x042A
-#define REG_DARFRC 0x0430
-#define REG_RARFRC 0x0438
-#define REG_RRSR 0x0440
-#define REG_ARFR0 0x0444
-#define REG_ARFR1 0x0448
-#define REG_ARFR2 0x044C
-#define REG_ARFR3 0x0450
-#define REG_AGGLEN_LMT 0x0458
-#define REG_AMPDU_MIN_SPACE 0x045C
-#define REG_TXPKTBUF_WMAC_LBK_BF_HD 0x045D
-#define REG_FAST_EDCA_CTRL 0x0460
-#define REG_RD_RESP_PKT_TH 0x0463
-#define REG_INIRTS_RATE_SEL 0x0480
-//#define REG_INIDATA_RATE_SEL 0x0484
-#define REG_POWER_STATUS 0x04A4
-#define REG_POWER_STAGE1 0x04B4
-#define REG_POWER_STAGE2 0x04B8
-#define REG_PKT_VO_VI_LIFE_TIME 0x04C0
-#define REG_PKT_BE_BK_LIFE_TIME 0x04C2
-#define REG_STBC_SETTING 0x04C4
-#define REG_PROT_MODE_CTRL 0x04C8
-#define REG_MAX_AGGR_NUM 0x04CA
-#define REG_RTS_MAX_AGGR_NUM 0x04CB
-#define REG_BAR_MODE_CTRL 0x04CC
-#define REG_RA_TRY_RATE_AGG_LMT 0x04CF
-#define REG_EARLY_MODE_CONTROL 0x4D0
-#define REG_NQOS_SEQ 0x04DC
-#define REG_QOS_SEQ 0x04DE
-#define REG_NEED_CPU_HANDLE 0x04E0
-#define REG_PKT_LOSE_RPT 0x04E1
-#define REG_PTCL_ERR_STATUS 0x04E2
-#define REG_TX_RPT_CTRL 0x04EC
-#define REG_TX_RPT_TIME 0x04F0 // 2 byte
-#define REG_DUMMY 0x04FC
-
-//-----------------------------------------------------
-//
-// 0x0500h ~ 0x05FFh EDCA Configuration
-//
-//-----------------------------------------------------
-#define REG_EDCA_VO_PARAM 0x0500
-#define REG_EDCA_VI_PARAM 0x0504
-#define REG_EDCA_BE_PARAM 0x0508
-#define REG_EDCA_BK_PARAM 0x050C
-#define REG_BCNTCFG 0x0510
-#define REG_PIFS 0x0512
-#define REG_RDG_PIFS 0x0513
-#define REG_SIFS_CTX 0x0514
-#define REG_SIFS_TRX 0x0516
-#define REG_TSFTR_SYN_OFFSET 0x0518
-#define REG_AGGR_BREAK_TIME 0x051A
-#define REG_SLOT 0x051B
-#define REG_TX_PTCL_CTRL 0x0520
-#define REG_TXPAUSE 0x0522
-#define REG_DIS_TXREQ_CLR 0x0523
-#define REG_RD_CTRL 0x0524
-//
-// Format for offset 540h-542h:
-// [3:0]: TBTT prohibit setup in unit of 32us. The time for HW getting beacon content before TBTT.
-// [7:4]: Reserved.
-// [19:8]: TBTT prohibit hold in unit of 32us. The time for HW holding to send the beacon packet.
-// [23:20]: Reserved
-// Description:
-// |
-// |<--Setup--|--Hold------------>|
-// --------------|----------------------
-// |
-// TBTT
-// Note: We cannot update beacon content to HW or send any AC packets during the time between Setup and Hold.
-// Described by Designer Tim and Bruce, 2011-01-14.
-//
-#define REG_TBTT_PROHIBIT 0x0540
-#define REG_RD_NAV_NXT 0x0544
-#define REG_NAV_PROT_LEN 0x0546
-#define REG_BCN_CTRL 0x0550
-#define REG_BCN_CTRL_1 0x0551
-#define REG_MBID_NUM 0x0552
-#define REG_DUAL_TSF_RST 0x0553
-#define REG_BCN_INTERVAL 0x0554 // The same as REG_MBSSID_BCN_SPACE
-#define REG_DRVERLYINT 0x0558
-#define REG_BCNDMATIM 0x0559
-#define REG_ATIMWND 0x055A
-#define REG_BCN_MAX_ERR 0x055D
-#define REG_RXTSF_OFFSET_CCK 0x055E
-#define REG_RXTSF_OFFSET_OFDM 0x055F
-#define REG_TSFTR 0x0560
-#define REG_TSFTR1 0x0568
-#define REG_ATIMWND_1 0x0570
-#define REG_PSTIMER 0x0580
-#define REG_TIMER0 0x0584
-#define REG_TIMER1 0x0588
-#define REG_ACMHWCTRL 0x05C0
-
-//#define REG_FW_TSF_SYNC_CNT 0x04A0
-#define REG_FW_RESET_TSF_CNT_1 0x05FC
-#define REG_FW_RESET_TSF_CNT_0 0x05FD
-#define REG_FW_BCN_DIS_CNT 0x05FE
-
-//-----------------------------------------------------
-//
-// 0x0600h ~ 0x07FFh WMAC Configuration
-//
-//-----------------------------------------------------
-#define REG_APSD_CTRL 0x0600
-#define REG_BWOPMODE 0x0603
-#define REG_TCR 0x0604
-#define REG_RCR 0x0608
-#define REG_RX_PKT_LIMIT 0x060C
-#define REG_RX_DLK_TIME 0x060D
-#define REG_RX_DRVINFO_SZ 0x060F
-
-#define REG_MACID 0x0610
-#define REG_BSSID 0x0618
-#define REG_MAR 0x0620
-#define REG_MBIDCAMCFG 0x0628
-
-#define REG_USTIME_EDCA 0x0638
-#define REG_MAC_SPEC_SIFS 0x063A
-
-// 20100719 Joseph: Hardware register definition change. (HW datasheet v54)
-#define REG_R2T_SIFS 0x063C // [15:8]SIFS_R2T_OFDM, [7:0]SIFS_R2T_CCK
-#define REG_T2T_SIFS 0x063E // [15:8]SIFS_T2T_OFDM, [7:0]SIFS_T2T_CCK
-#define REG_ACKTO 0x0640
-#define REG_CTS2TO 0x0641
-#define REG_EIFS 0x0642
-
-
-//RXERR_RPT
-#define RXERR_TYPE_OFDM_PPDU 0
-#define RXERR_TYPE_OFDM_FALSE_ALARM 1
-#define RXERR_TYPE_OFDM_MPDU_OK 2
-#define RXERR_TYPE_OFDM_MPDU_FAIL 3
-#define RXERR_TYPE_CCK_PPDU 4
-#define RXERR_TYPE_CCK_FALSE_ALARM 5
-#define RXERR_TYPE_CCK_MPDU_OK 6
-#define RXERR_TYPE_CCK_MPDU_FAIL 7
-#define RXERR_TYPE_HT_PPDU 8
-#define RXERR_TYPE_HT_FALSE_ALARM 9
-#define RXERR_TYPE_HT_MPDU_TOTAL 10
-#define RXERR_TYPE_HT_MPDU_OK 11
-#define RXERR_TYPE_HT_MPDU_FAIL 12
-#define RXERR_TYPE_RX_FULL_DROP 15
-
-#define RXERR_COUNTER_MASK 0xFFFFF
-#define RXERR_RPT_RST BIT(27)
-#define _RXERR_RPT_SEL(type) ((type) << 28)
-
-
-//
-// Note:
-// The NAV upper value is very important to WiFi 11n 5.2.3 NAV test. The default value is
-// always too small, but the WiFi TestPlan test by 25,000 microseconds of NAV through sending
-// CTS in the air. We must update this value greater than 25,000 microseconds to pass the item.
-// The offset of NAV_UPPER in 8192C Spec is incorrect, and the offset should be 0x0652. Commented
-// by SD1 Scott.
-// By Bruce, 2011-07-18.
-//
-#define REG_NAV_UPPER 0x0652 // unit of 128
-
-//WMA, BA, CCX
-//#define REG_NAV_CTRL 0x0650
-#define REG_BACAMCMD 0x0654
-#define REG_BACAMCONTENT 0x0658
-#define REG_LBDLY 0x0660
-#define REG_FWDLY 0x0661
-#define REG_RXERR_RPT 0x0664
-#define REG_WMAC_TRXPTCL_CTL 0x0668
-
-// Security
-#define REG_CAMCMD 0x0670
-#define REG_CAMWRITE 0x0674
-#define REG_CAMREAD 0x0678
-#define REG_CAMDBG 0x067C
-#define REG_SECCFG 0x0680
-
-// Power
-#define REG_WOW_CTRL 0x0690
-#define REG_PS_RX_INFO 0x0692
-#define REG_UAPSD_TID 0x0693
-#define REG_WKFMCAM_CMD 0x0698
-#define REG_WKFMCAM_NUM_88E 0x698
-#define REG_RXFLTMAP0 0x06A0
-#define REG_RXFLTMAP1 0x06A2
-#define REG_RXFLTMAP2 0x06A4
-#define REG_BCN_PSR_RPT 0x06A8
-#define REG_BT_COEX_TABLE 0x06C0
-
-
-// Hardware Port 2
-#define REG_MACID1 0x0700
-#define REG_BSSID1 0x0708
-
-
-//-----------------------------------------------------
-//
-// 0xFE00h ~ 0xFE55h USB Configuration
-//
-//-----------------------------------------------------
-#define REG_USB_INFO 0xFE17
-#define REG_USB_SPECIAL_OPTION 0xFE55
-#define REG_USB_DMA_AGG_TO 0xFE5B
-#define REG_USB_AGG_TO 0xFE5C
-#define REG_USB_AGG_TH 0xFE5D
-
-
-// For normal chip
-#define REG_NORMAL_SIE_VID 0xFE60 // 0xFE60~0xFE61
-#define REG_NORMAL_SIE_PID 0xFE62 // 0xFE62~0xFE63
-#define REG_NORMAL_SIE_OPTIONAL 0xFE64
-#define REG_NORMAL_SIE_EP 0xFE65 // 0xFE65~0xFE67
-#define REG_NORMAL_SIE_PHY 0xFE68 // 0xFE68~0xFE6B
-#define REG_NORMAL_SIE_OPTIONAL2 0xFE6C
-#define REG_NORMAL_SIE_GPS_EP 0xFE6D // 0xFE6D, for RTL8723 only.
-#define REG_NORMAL_SIE_MAC_ADDR 0xFE70 // 0xFE70~0xFE75
-#define REG_NORMAL_SIE_STRING 0xFE80 // 0xFE80~0xFEDF
-
-
-//-----------------------------------------------------
-//
-// Redifine 8192C register definition for compatibility
-//
-//-----------------------------------------------------
-
-// TODO: use these definition when using REG_xxx naming rule.
-// NOTE: DO NOT Remove these definition. Use later.
-
-#define EFUSE_CTRL REG_EFUSE_CTRL // E-Fuse Control.
-#define EFUSE_TEST REG_EFUSE_TEST // E-Fuse Test.
-#define MSR (REG_CR + 2) // Media Status register
-#define ISR REG_HISR_88E
-#define TSFR REG_TSFTR // Timing Sync Function Timer Register.
-
-#define PBP REG_PBP
-
-// Redifine MACID register, to compatible prior ICs.
-#define IDR0 REG_MACID // MAC ID Register, Offset 0x0050-0x0053
-#define IDR4 (REG_MACID + 4) // MAC ID Register, Offset 0x0054-0x0055
-
-
-//
-// 9. Security Control Registers (Offset: )
-//
-#define RWCAM REG_CAMCMD //IN 8190 Data Sheet is called CAMcmd
-#define WCAMI REG_CAMWRITE // Software write CAM input content
-#define RCAMO REG_CAMREAD // Software read/write CAM config
-#define CAMDBG REG_CAMDBG
-#define SECR REG_SECCFG //Security Configuration Register
-
-// Unused register
-#define UnusedRegister 0x1BF
-#define DCAM UnusedRegister
-#define PSR UnusedRegister
-#define BBAddr UnusedRegister
-#define PhyDataR UnusedRegister
-
-// Min Spacing related settings.
-#define MAX_MSS_DENSITY_2T 0x13
-#define MAX_MSS_DENSITY_1T 0x0A
-
-//----------------------------------------------------------------------------
-// 8192C Cmd9346CR bits (Offset 0xA, 16bit)
-//----------------------------------------------------------------------------
-#define CmdEEPROM_En BIT5 // EEPROM enable when set 1
-#define CmdEERPOMSEL BIT4 // System EEPROM select, 0: boot from E-FUSE, 1: The EEPROM used is 9346
-#define Cmd9346CR_9356SEL BIT4
-
-//----------------------------------------------------------------------------
-// 8192C GPIO MUX Configuration Register (offset 0x40, 4 byte)
-//----------------------------------------------------------------------------
-#define GPIOSEL_GPIO 0
-#define GPIOSEL_ENBT BIT5
-
-//----------------------------------------------------------------------------
-// 8192C GPIO PIN Control Register (offset 0x44, 4 byte)
-//----------------------------------------------------------------------------
-#define GPIO_IN REG_GPIO_PIN_CTRL // GPIO pins input value
-#define GPIO_OUT (REG_GPIO_PIN_CTRL+1) // GPIO pins output value
-#define GPIO_IO_SEL (REG_GPIO_PIN_CTRL+2) // GPIO pins output enable when a bit is set to "1"; otherwise, input is configured.
-#define GPIO_MOD (REG_GPIO_PIN_CTRL+3)
-
-//----------------------------------------------------------------------------
-// 8723/8188E Host System Interrupt Mask Register (offset 0x58, 32 byte)
-//----------------------------------------------------------------------------
-#define HSIMR_GPIO12_0_INT_EN BIT0
-#define HSIMR_SPS_OCP_INT_EN BIT5
-#define HSIMR_RON_INT_EN BIT6
-#define HSIMR_PDN_INT_EN BIT7
-#define HSIMR_GPIO9_INT_EN BIT25
-
-
-//----------------------------------------------------------------------------
-// 8723/8188E Host System Interrupt Status Register (offset 0x5C, 32 byte)
-//----------------------------------------------------------------------------
-#define HSISR_GPIO12_0_INT BIT0
-#define HSISR_SPS_OCP_INT BIT5
-#define HSISR_RON_INT_EN BIT6
-#define HSISR_PDNINT BIT7
-#define HSISR_GPIO9_INT BIT25
-
-//----------------------------------------------------------------------------
-// 8192C (MSR) Media Status Register (Offset 0x4C, 8 bits)
-//----------------------------------------------------------------------------
-/*
-Network Type
-00: No link
-01: Link in ad hoc network
-10: Link in infrastructure network
-11: AP mode
-Default: 00b.
-*/
-#define MSR_NOLINK 0x00
-#define MSR_ADHOC 0x01
-#define MSR_INFRA 0x02
-#define MSR_AP 0x03
-
-//----------------------------------------------------------------------------
-// 88EU (MSR) Media Status Register (Offset 0x4C, 8 bits)
-//----------------------------------------------------------------------------
-#define USB_INTR_CONTENT_C2H_OFFSET 0
-#define USB_INTR_CONTENT_CPWM1_OFFSET 16
-#define USB_INTR_CONTENT_CPWM2_OFFSET 20
-#define USB_INTR_CONTENT_HISR_OFFSET 48
-#define USB_INTR_CONTENT_HISRE_OFFSET 52
-
-
-//----------------------------------------------------------------------------
-// 88E Driver Initialization Offload REG_FDHM0(Offset 0x88, 8 bits)
-//----------------------------------------------------------------------------
-//IOL config for REG_FDHM0(Reg0x88)
-#define CMD_INIT_LLT BIT0
-#define CMD_READ_EFUSE_MAP BIT1
-#define CMD_EFUSE_PATCH BIT2
-#define CMD_IOCONFIG BIT3
-#define CMD_INIT_LLT_ERR BIT4
-#define CMD_READ_EFUSE_MAP_ERR BIT5
-#define CMD_EFUSE_PATCH_ERR BIT6
-#define CMD_IOCONFIG_ERR BIT7
-
-//
-// 6. Adaptive Control Registers (Offset: 0x0160 - 0x01CF)
-//
-//----------------------------------------------------------------------------
-// 8192C Response Rate Set Register (offset 0x181, 24bits)
-//----------------------------------------------------------------------------
-#define RRSR_1M BIT0
-#define RRSR_2M BIT1
-#define RRSR_5_5M BIT2
-#define RRSR_11M BIT3
-#define RRSR_6M BIT4
-#define RRSR_9M BIT5
-#define RRSR_12M BIT6
-#define RRSR_18M BIT7
-#define RRSR_24M BIT8
-#define RRSR_36M BIT9
-#define RRSR_48M BIT10
-#define RRSR_54M BIT11
-#define RRSR_MCS0 BIT12
-#define RRSR_MCS1 BIT13
-#define RRSR_MCS2 BIT14
-#define RRSR_MCS3 BIT15
-#define RRSR_MCS4 BIT16
-#define RRSR_MCS5 BIT17
-#define RRSR_MCS6 BIT18
-#define RRSR_MCS7 BIT19
-
-//----------------------------------------------------------------------------
-// 8192C Response Rate Set Register (offset 0x1BF, 8bits)
-//----------------------------------------------------------------------------
-// WOL bit information
-#define HAL92C_WOL_PTK_UPDATE_EVENT BIT0
-#define HAL92C_WOL_GTK_UPDATE_EVENT BIT1
-
-//----------------------------------------------------------------------------
-// 8192C BW_OPMODE bits (Offset 0x203, 8bit)
-//----------------------------------------------------------------------------
-#define BW_OPMODE_20MHZ BIT2
-#define BW_OPMODE_5G BIT1
-
-
-//----------------------------------------------------------------------------
-// 8192C CAM Config Setting (offset 0x250, 1 byte)
-//----------------------------------------------------------------------------
-#define CAM_VALID BIT15
-#define CAM_NOTVALID 0x0000
-#define CAM_USEDK BIT5
-
-#define CAM_CONTENT_COUNT 8
-
-#define CAM_NONE 0x0
-#define CAM_WEP40 0x01
-#define CAM_TKIP 0x02
-#define CAM_AES 0x04
-#define CAM_WEP104 0x05
-#define CAM_SMS4 0x6
-
-#define TOTAL_CAM_ENTRY 32
-#define HALF_CAM_ENTRY 16
-
-#define CAM_CONFIG_USEDK _TRUE
-#define CAM_CONFIG_NO_USEDK _FALSE
-
-#define CAM_WRITE BIT16
-#define CAM_READ 0x00000000
-#define CAM_POLLINIG BIT31
-
-#define SCR_UseDK 0x01
-#define SCR_TxSecEnable 0x02
-#define SCR_RxSecEnable 0x04
-
-//
-// 10. Power Save Control Registers (Offset: 0x0260 - 0x02DF)
-//
-#define WOW_PMEN BIT0 // Power management Enable.
-#define WOW_WOMEN BIT1 // WoW function on or off.
-#define WOW_MAGIC BIT2 // Magic packet
-#define WOW_UWF BIT3 // Unicast Wakeup frame.
-
-//
-// 12. Host Interrupt Status Registers (Offset: 0x0300 - 0x030F)
-//
-//----------------------------------------------------------------------------
-//----------------------------------------------------------------------------
-// 8188 IMR/ISR bits
-//----------------------------------------------------------------------------
-#define IMR_DISABLED_88E 0x0
-// IMR DW0(0x0060-0063) Bit 0-31
-#define IMR_TXCCK_88E BIT30 // TXRPT interrupt when CCX bit of the packet is set
-#define IMR_PSTIMEOUT_88E BIT29 // Power Save Time Out Interrupt
-#define IMR_GTINT4_88E BIT28 // When GTIMER4 expires, this bit is set to 1
-#define IMR_GTINT3_88E BIT27 // When GTIMER3 expires, this bit is set to 1
-#define IMR_TBDER_88E BIT26 // Transmit Beacon0 Error
-#define IMR_TBDOK_88E BIT25 // Transmit Beacon0 OK
-#define IMR_TSF_BIT32_TOGGLE_88E BIT24 // TSF Timer BIT32 toggle indication interrupt
-#define IMR_BCNDMAINT0_88E BIT20 // Beacon DMA Interrupt 0
-#define IMR_BCNDERR0_88E BIT16 // Beacon Queue DMA Error 0
-#define IMR_HSISR_IND_ON_INT_88E BIT15 // HSISR Indicator (HSIMR & HSISR is true, this bit is set to 1)
-#define IMR_BCNDMAINT_E_88E BIT14 // Beacon DMA Interrupt Extension for Win7
-#define IMR_ATIMEND_88E BIT12 // CTWidnow End or ATIM Window End
-#define IMR_HISR1_IND_INT_88E BIT11 // HISR1 Indicator (HISR1 & HIMR1 is true, this bit is set to 1)
-#define IMR_C2HCMD_88E BIT10 // CPU to Host Command INT Status, Write 1 clear
-#define IMR_CPWM2_88E BIT9 // CPU power Mode exchange INT Status, Write 1 clear
-#define IMR_CPWM_88E BIT8 // CPU power Mode exchange INT Status, Write 1 clear
-#define IMR_HIGHDOK_88E BIT7 // High Queue DMA OK
-#define IMR_MGNTDOK_88E BIT6 // Management Queue DMA OK
-#define IMR_BKDOK_88E BIT5 // AC_BK DMA OK
-#define IMR_BEDOK_88E BIT4 // AC_BE DMA OK
-#define IMR_VIDOK_88E BIT3 // AC_VI DMA OK
-#define IMR_VODOK_88E BIT2 // AC_VO DMA OK
-#define IMR_RDU_88E BIT1 // Rx Descriptor Unavailable
-#define IMR_ROK_88E BIT0 // Receive DMA OK
-
-// IMR DW1(0x00B4-00B7) Bit 0-31
-#define IMR_BCNDMAINT7_88E BIT27 // Beacon DMA Interrupt 7
-#define IMR_BCNDMAINT6_88E BIT26 // Beacon DMA Interrupt 6
-#define IMR_BCNDMAINT5_88E BIT25 // Beacon DMA Interrupt 5
-#define IMR_BCNDMAINT4_88E BIT24 // Beacon DMA Interrupt 4
-#define IMR_BCNDMAINT3_88E BIT23 // Beacon DMA Interrupt 3
-#define IMR_BCNDMAINT2_88E BIT22 // Beacon DMA Interrupt 2
-#define IMR_BCNDMAINT1_88E BIT21 // Beacon DMA Interrupt 1
-#define IMR_BCNDERR7_88E BIT20 // Beacon Queue DMA Error Interrup 7
-#define IMR_BCNDERR6_88E BIT19 // Beacon Queue DMA Error Interrup 6
-#define IMR_BCNDERR5_88E BIT18 // Beacon Queue DMA Error Interrup 5
-#define IMR_BCNDERR4_88E BIT17 // Beacon Queue DMA Error Interrup 4
-#define IMR_BCNDERR3_88E BIT16 // Beacon Queue DMA Error Interrup 3
-#define IMR_BCNDERR2_88E BIT15 // Beacon Queue DMA Error Interrup 2
-#define IMR_BCNDERR1_88E BIT14 // Beacon Queue DMA Error Interrup 1
-#define IMR_ATIMEND_E_88E BIT13 // ATIM Window End Extension for Win7
-#define IMR_TXERR_88E BIT11 // Tx Error Flag Interrupt Status, write 1 clear.
-#define IMR_RXERR_88E BIT10 // Rx Error Flag INT Status, Write 1 clear
-#define IMR_TXFOVW_88E BIT9 // Transmit FIFO Overflow
-#define IMR_RXFOVW_88E BIT8 // Receive FIFO Overflow
-
-#define HAL_NIC_UNPLUG_ISR 0xFFFFFFFF // The value when the NIC is unplugged for PCI.
-
-
-#ifdef CONFIG_PCI_HCI
-//#define IMR_RX_MASK (IMR_ROK_88E|IMR_RDU_88E|IMR_RXFOVW_88E)
-#define IMR_TX_MASK (IMR_VODOK_88E|IMR_VIDOK_88E|IMR_BEDOK_88E|IMR_BKDOK_88E|IMR_MGNTDOK_88E|IMR_HIGHDOK_88E|IMR_BCNDERR0_88E)
-
-#ifdef CONFIG_CONCURRENT_MODE
-#define RT_IBSS_INT_MASKS (IMR_BCNDMAINT0_88E | IMR_TBDOK_88E | IMR_TBDER_88E | IMR_BCNDMAINT_E_88E)
-#else
-#define RT_IBSS_INT_MASKS (IMR_BCNDMAINT0_88E | IMR_TBDOK_88E | IMR_TBDER_88E)
-#endif
-
-#define RT_AC_INT_MASKS (IMR_VIDOK_88E | IMR_VODOK_88E | IMR_BEDOK_88E|IMR_BKDOK_88E)
-#define RT_BSS_INT_MASKS (RT_IBSS_INT_MASKS)
-#endif
-
-
-// 8192C EFUSE
-//----------------------------------------------------------------------------
-#define HWSET_MAX_SIZE 256
-#define HWSET_MAX_SIZE_88E 512
-
-
-
-/*===================================================================
-=====================================================================
-Here the register defines are for 92C. When the define is as same with 92C,
-we will use the 92C's define for the consistency
-So the following defines for 92C is not entire!!!!!!
-=====================================================================
-=====================================================================*/
-/*
-Based on Datasheet V33---090401
-Register Summary
-Current IOREG MAP
-0x0000h ~ 0x00FFh System Configuration (256 Bytes)
-0x0100h ~ 0x01FFh MACTOP General Configuration (256 Bytes)
-0x0200h ~ 0x027Fh TXDMA Configuration (128 Bytes)
-0x0280h ~ 0x02FFh RXDMA Configuration (128 Bytes)
-0x0300h ~ 0x03FFh PCIE EMAC Reserved Region (256 Bytes)
-0x0400h ~ 0x04FFh Protocol Configuration (256 Bytes)
-0x0500h ~ 0x05FFh EDCA Configuration (256 Bytes)
-0x0600h ~ 0x07FFh WMAC Configuration (512 Bytes)
-0x2000h ~ 0x3FFFh 8051 FW Download Region (8196 Bytes)
-*/
- //----------------------------------------------------------------------------
- // 8192C (TXPAUSE) transmission pause (Offset 0x522, 8 bits)
- //----------------------------------------------------------------------------
-// Note:
-// The the bits of stoping AC(VO/VI/BE/BK) queue in datasheet RTL8192S/RTL8192C are wrong,
-// the correct arragement is VO - Bit0, VI - Bit1, BE - Bit2, and BK - Bit3.
-// 8723 and 88E may be not correct either in the eralier version. Confirmed with DD Tim.
-// By Bruce, 2011-09-22.
-#define StopBecon BIT6
-#define StopHigh BIT5
-#define StopMgt BIT4
-#define StopBK BIT3
-#define StopBE BIT2
-#define StopVI BIT1
-#define StopVO BIT0
-
-//----------------------------------------------------------------------------
-// 8192C (RCR) Receive Configuration Register (Offset 0x608, 32 bits)
-//----------------------------------------------------------------------------
-#define RCR_APPFCS BIT31 //WMAC append FCS after pauload
-#define RCR_APP_MIC BIT30 //
-#define RCR_APP_PHYSTS BIT28//
-#define RCR_APP_ICV BIT29 //
-#define RCR_APP_PHYST_RXFF BIT28 //
-#define RCR_APP_BA_SSN BIT27 //Accept BA SSN
-#define RCR_ENMBID BIT24 //Enable Multiple BssId.
-#define RCR_LSIGEN BIT23
-#define RCR_MFBEN BIT22
-#define RCR_HTC_LOC_CTRL BIT14 //MFC<--HTC=1 MFC-->HTC=0
-#define RCR_AMF BIT13 //Accept management type frame
-#define RCR_ACF BIT12 //Accept control type frame
-#define RCR_ADF BIT11 //Accept data type frame
-#define RCR_AICV BIT9 //Accept ICV error packet
-#define RCR_ACRC32 BIT8 //Accept CRC32 error packet
-#define RCR_CBSSID_BCN BIT7 //Accept BSSID match packet (Rx beacon, probe rsp)
-#define RCR_CBSSID_DATA BIT6 //Accept BSSID match packet (Data)
-#define RCR_CBSSID RCR_CBSSID_DATA //Accept BSSID match packet
-#define RCR_APWRMGT BIT5 //Accept power management packet
-#define RCR_ADD3 BIT4 //Accept address 3 match packet
-#define RCR_AB BIT3 //Accept broadcast packet
-#define RCR_AM BIT2 //Accept multicast packet
-#define RCR_APM BIT1 //Accept physical match packet
-#define RCR_AAP BIT0 //Accept all unicast packet
-#define RCR_MXDMA_OFFSET 8
-#define RCR_FIFO_OFFSET 13
-
-//-----------------------------------------------------
-//
-// 0xFE00h ~ 0xFE55h USB Configuration
-//
-//-----------------------------------------------------
-#define REG_USB_INFO 0xFE17
-#define REG_USB_SPECIAL_OPTION 0xFE55
-#define REG_USB_DMA_AGG_TO 0xFE5B
-#define REG_USB_AGG_TO 0xFE5C
-#define REG_USB_AGG_TH 0xFE5D
-
-#define REG_USB_HRPWM 0xFE58
-#define REG_USB_HCPWM 0xFE57
-
-//============================================================================
-// 8192C Regsiter Bit and Content definition
-//============================================================================
-//-----------------------------------------------------
-//
-// 0x0000h ~ 0x00FFh System Configuration
-//
-//-----------------------------------------------------
-
-//2 SYS_ISO_CTRL
-#define ISO_MD2PP BIT(0)
-#define ISO_UA2USB BIT(1)
-#define ISO_UD2CORE BIT(2)
-#define ISO_PA2PCIE BIT(3)
-#define ISO_PD2CORE BIT(4)
-#define ISO_IP2MAC BIT(5)
-#define ISO_DIOP BIT(6)
-#define ISO_DIOE BIT(7)
-#define ISO_EB2CORE BIT(8)
-#define ISO_DIOR BIT(9)
-#define PWC_EV12V BIT(15)
-
-
-//2 SYS_FUNC_EN
-#define FEN_BBRSTB BIT(0)
-#define FEN_BB_GLB_RSTn BIT(1)
-#define FEN_USBA BIT(2)
-#define FEN_UPLL BIT(3)
-#define FEN_USBD BIT(4)
-#define FEN_DIO_PCIE BIT(5)
-#define FEN_PCIEA BIT(6)
-#define FEN_PPLL BIT(7)
-#define FEN_PCIED BIT(8)
-#define FEN_DIOE BIT(9)
-#define FEN_CPUEN BIT(10)
-#define FEN_DCORE BIT(11)
-#define FEN_ELDR BIT(12)
-#define FEN_DIO_RF BIT(13)
-#define FEN_HWPDN BIT(14)
-#define FEN_MREGEN BIT(15)
-
-//2 APS_FSMCO
-#define PFM_LDALL BIT(0)
-#define PFM_ALDN BIT(1)
-#define PFM_LDKP BIT(2)
-#define PFM_WOWL BIT(3)
-#define EnPDN BIT(4)
-#define PDN_PL BIT(5)
-#define APFM_ONMAC BIT(8)
-#define APFM_OFF BIT(9)
-#define APFM_RSM BIT(10)
-#define AFSM_HSUS BIT(11)
-#define AFSM_PCIE BIT(12)
-#define APDM_MAC BIT(13)
-#define APDM_HOST BIT(14)
-#define APDM_HPDN BIT(15)
-#define RDY_MACON BIT(16)
-#define SUS_HOST BIT(17)
-#define ROP_ALD BIT(20)
-#define ROP_PWR BIT(21)
-#define ROP_SPS BIT(22)
-#define SOP_MRST BIT(25)
-#define SOP_FUSE BIT(26)
-#define SOP_ABG BIT(27)
-#define SOP_AMB BIT(28)
-#define SOP_RCK BIT(29)
-#define SOP_A8M BIT(30)
-#define XOP_BTCK BIT(31)
-
-//2 SYS_CLKR
-#define ANAD16V_EN BIT(0)
-#define ANA8M BIT(1)
-#define MACSLP BIT(4)
-#define LOADER_CLK_EN BIT(5)
-
-
-//2 9346CR
-
-#define BOOT_FROM_EEPROM BIT(4)
-#define EEPROM_EN BIT(5)
-
-
-//2 SPS0_CTRL
-
-
-//2 SPS_OCP_CFG
-
-
-//2 RF_CTRL
-#define RF_EN BIT(0)
-#define RF_RSTB BIT(1)
-#define RF_SDMRSTB BIT(2)
-
-
-
-//2 LDOV12D_CTRL
-#define LDV12_EN BIT(0)
-#define LDV12_SDBY BIT(1)
-#define LPLDO_HSM BIT(2)
-#define LPLDO_LSM_DIS BIT(3)
-#define _LDV12_VADJ(x) (((x) & 0xF) << 4)
-
-
-//2EFUSE_CTRL
-#define ALD_EN BIT(18)
-#define EF_PD BIT(19)
-#define EF_FLAG BIT(31)
-
-//2 EFUSE_TEST (For RTL8723 partially)
-#define EF_TRPT BIT(7)
-#define EF_CELL_SEL (BIT(8)|BIT(9)) // 00: Wifi Efuse, 01: BT Efuse0, 10: BT Efuse1, 11: BT Efuse2
-#define LDOE25_EN BIT(31)
-#define EFUSE_SEL(x) (((x) & 0x3) << 8)
-#define EFUSE_SEL_MASK 0x300
-#define EFUSE_WIFI_SEL_0 0x0
-#define EFUSE_BT_SEL_0 0x1
-#define EFUSE_BT_SEL_1 0x2
-#define EFUSE_BT_SEL_2 0x3
-
-#define EFUSE_ACCESS_ON 0x69 // For RTL8723 only.
-#define EFUSE_ACCESS_OFF 0x00 // For RTL8723 only.
-
-
-//2 8051FWDL
-//2 MCUFWDL
-#define MCUFWDL_EN BIT(0)
-#define MCUFWDL_RDY BIT(1)
-#define FWDL_ChkSum_rpt BIT(2)
-#define MACINI_RDY BIT(3)
-#define BBINI_RDY BIT(4)
-#define RFINI_RDY BIT(5)
-#define WINTINI_RDY BIT(6)
-#define RAM_DL_SEL BIT(7) // 1:RAM, 0:ROM
-#define ROM_DLEN BIT(19)
-#define CPRST BIT(23)
-
-
-
-//2 REG_SYS_CFG
-#define XCLK_VLD BIT(0)
-#define ACLK_VLD BIT(1)
-#define UCLK_VLD BIT(2)
-#define PCLK_VLD BIT(3)
-#define PCIRSTB BIT(4)
-#define V15_VLD BIT(5)
-#define SW_OFFLOAD_EN BIT(7)
-#define SIC_IDLE BIT(8)
-#define BD_MAC2 BIT(9)
-#define BD_MAC1 BIT(10)
-#define IC_MACPHY_MODE BIT(11)
-#define CHIP_VER (BIT(12)|BIT(13)|BIT(14)|BIT(15))
-#define BT_FUNC BIT(16)
-#define VENDOR_ID BIT(19)
-#define PAD_HWPD_IDN BIT(22)
-#define TRP_VAUX_EN BIT(23) // RTL ID
-#define TRP_BT_EN BIT(24)
-#define BD_PKG_SEL BIT(25)
-#define BD_HCI_SEL BIT(26)
-#define TYPE_ID BIT(27)
-
-#define CHIP_VER_RTL_MASK 0xF000 //Bit 12 ~ 15
-#define CHIP_VER_RTL_SHIFT 12
-
-
-//2REG_GPIO_OUTSTS (For RTL8723 only)
-#define EFS_HCI_SEL (BIT(0)|BIT(1))
-#define PAD_HCI_SEL (BIT(2)|BIT(3))
-#define HCI_SEL (BIT(4)|BIT(5))
-#define PKG_SEL_HCI BIT(6)
-#define FEN_GPS BIT(7)
-#define FEN_BT BIT(8)
-#define FEN_WL BIT(9)
-#define FEN_PCI BIT(10)
-#define FEN_USB BIT(11)
-#define BTRF_HWPDN_N BIT(12)
-#define WLRF_HWPDN_N BIT(13)
-#define PDN_BT_N BIT(14)
-#define PDN_GPS_N BIT(15)
-#define BT_CTL_HWPDN BIT(16)
-#define GPS_CTL_HWPDN BIT(17)
-#define PPHY_SUSB BIT(20)
-#define UPHY_SUSB BIT(21)
-#define PCI_SUSEN BIT(22)
-#define USB_SUSEN BIT(23)
-#define RF_RL_ID (BIT(31)|BIT(30)|BIT(29)|BIT(28))
-
-
-//2SYS_CFG
-#define RTL_ID BIT(23) // TestChip ID, 1:Test(RLE); 0:MP(RL)
-
-//-----------------------------------------------------
-//
-// 0x0100h ~ 0x01FFh MACTOP General Configuration
-//
-//-----------------------------------------------------
-
-
-//2 Function Enable Registers
-//2 CR
-
-
-
-#define HCI_TXDMA_EN BIT(0)
-#define HCI_RXDMA_EN BIT(1)
-#define TXDMA_EN BIT(2)
-#define RXDMA_EN BIT(3)
-#define PROTOCOL_EN BIT(4)
-#define SCHEDULE_EN BIT(5)
-#define MACTXEN BIT(6)
-#define MACRXEN BIT(7)
-#define ENSWBCN BIT(8)
-#define ENSEC BIT(9)
-#define CALTMR_EN BIT(10) // 32k CAL TMR enable
-
-// Network type
-#define _NETTYPE(x) (((x) & 0x3) << 16)
-#define MASK_NETTYPE 0x30000
-#define NT_NO_LINK 0x0
-#define NT_LINK_AD_HOC 0x1
-#define NT_LINK_AP 0x2
-#define NT_AS_AP 0x3
-
-
-
-//2 PBP - Page Size Register
-#define GET_RX_PAGE_SIZE(value) ((value) & 0xF)
-#define GET_TX_PAGE_SIZE(value) (((value) & 0xF0) >> 4)
-#define _PSRX_MASK 0xF
-#define _PSTX_MASK 0xF0
-#define _PSRX(x) (x)
-#define _PSTX(x) ((x) << 4)
-
-#define PBP_64 0x0
-#define PBP_128 0x1
-#define PBP_256 0x2
-#define PBP_512 0x3
-#define PBP_1024 0x4
-
-
-//2 TX/RXDMA
-#define RXDMA_ARBBW_EN BIT(0)
-#define RXSHFT_EN BIT(1)
-#define RXDMA_AGG_EN BIT(2)
-#define QS_VO_QUEUE BIT(8)
-#define QS_VI_QUEUE BIT(9)
-#define QS_BE_QUEUE BIT(10)
-#define QS_BK_QUEUE BIT(11)
-#define QS_MANAGER_QUEUE BIT(12)
-#define QS_HIGH_QUEUE BIT(13)
-
-#define HQSEL_VOQ BIT(0)
-#define HQSEL_VIQ BIT(1)
-#define HQSEL_BEQ BIT(2)
-#define HQSEL_BKQ BIT(3)
-#define HQSEL_MGTQ BIT(4)
-#define HQSEL_HIQ BIT(5)
-
-// For normal driver, 0x10C
-#define _TXDMA_HIQ_MAP(x) (((x)&0x3) << 14)
-#define _TXDMA_MGQ_MAP(x) (((x)&0x3) << 12)
-#define _TXDMA_BKQ_MAP(x) (((x)&0x3) << 10)
-#define _TXDMA_BEQ_MAP(x) (((x)&0x3) << 8 )
-#define _TXDMA_VIQ_MAP(x) (((x)&0x3) << 6 )
-#define _TXDMA_VOQ_MAP(x) (((x)&0x3) << 4 )
-
-#define QUEUE_LOW 1
-#define QUEUE_NORMAL 2
-#define QUEUE_HIGH 3
-
-
-
-//2 TRXFF_BNDY
-
-
-//2 LLT_INIT
-#define _LLT_NO_ACTIVE 0x0
-#define _LLT_WRITE_ACCESS 0x1
-#define _LLT_READ_ACCESS 0x2
-
-#define _LLT_INIT_DATA(x) ((x) & 0xFF)
-#define _LLT_INIT_ADDR(x) (((x) & 0xFF) << 8)
-#define _LLT_OP(x) (((x) & 0x3) << 30)
-#define _LLT_OP_VALUE(x) (((x) >> 30) & 0x3)
-
-
-//-----------------------------------------------------
-//
-// 0x0200h ~ 0x027Fh TXDMA Configuration
-//
-//-----------------------------------------------------
-//2RQPN
-#define _HPQ(x) ((x) & 0xFF)
-#define _LPQ(x) (((x) & 0xFF) << 8)
-#define _PUBQ(x) (((x) & 0xFF) << 16)
-#define _NPQ(x) ((x) & 0xFF) // NOTE: in RQPN_NPQ register
-
-
-#define HPQ_PUBLIC_DIS BIT(24)
-#define LPQ_PUBLIC_DIS BIT(25)
-#define LD_RQPN BIT(31)
-
-
-//2TDECTRL
-#define BCN_VALID BIT(16)
-#define BCN_HEAD(x) (((x) & 0xFF) << 8)
-#define BCN_HEAD_MASK 0xFF00
-
-
-//2 TDECTL
-#define BLK_DESC_NUM_SHIFT 4
-#define BLK_DESC_NUM_MASK 0xF
-
-
-//2 TXDMA_OFFSET_CHK
-#define DROP_DATA_EN BIT(9)
-
-
-
-
-//-----------------------------------------------------
-//
-// 0x0280h ~ 0x028Bh RX DMA Configuration
-//
-//-----------------------------------------------------
-
-// REG_RXDMA_CONTROL, 0x0286h
-// Write only. When this bit is set, RXDMA will decrease RX PKT counter by one. Before
-// this bit is polled, FW shall update RXFF_RD_PTR first. This register is write pulse and auto clear.
-//#define RXPKT_RELEASE_POLL BIT(0)
-// Read only. When RXMA finishes on-going DMA operation, RXMDA will report idle state in
-// this bit. FW can start releasing packets after RXDMA entering idle mode.
-//#define RXDMA_IDLE BIT(1)
-// When this bit is set, RXDMA will enter this mode after on-going RXDMA packet to host
-// completed, and stop DMA packet to host. RXDMA will then report Default: 0;
-//#define RW_RELEASE_EN BIT(2)
-
-//2 REG_RXPKT_NUM, 0x0284
-#define RXPKT_RELEASE_POLL BIT(16)
-#define RXDMA_IDLE BIT(17)
-#define RW_RELEASE_EN BIT(18)
-
-//-----------------------------------------------------
-//
-// 0x0400h ~ 0x047Fh Protocol Configuration
-//
-//-----------------------------------------------------
-//2 FWHW_TXQ_CTRL
-#define EN_AMPDU_RTY_NEW BIT(7)
-
-
-//2 SPEC SIFS
-#define _SPEC_SIFS_CCK(x) ((x) & 0xFF)
-#define _SPEC_SIFS_OFDM(x) (((x) & 0xFF) << 8)
-
-//2 RL
-#define RETRY_LIMIT_SHORT_SHIFT 8
-#define RETRY_LIMIT_LONG_SHIFT 0
-
-
-
-
-
-//-----------------------------------------------------
-//
-// 0x0500h ~ 0x05FFh EDCA Configuration
-//
-//-----------------------------------------------------
-
-
-
-//2 EDCA setting
-#define AC_PARAM_TXOP_LIMIT_OFFSET 16
-#define AC_PARAM_ECW_MAX_OFFSET 12
-#define AC_PARAM_ECW_MIN_OFFSET 8
-#define AC_PARAM_AIFS_OFFSET 0
-
-
-
-#define _LRL(x) ((x) & 0x3F)
-#define _SRL(x) (((x) & 0x3F) << 8)
-
-
-//2 BCN_CTRL
-#define EN_MBSSID BIT(1)
-#define EN_TXBCN_RPT BIT(2)
-#define EN_BCN_FUNCTION BIT(3)
-#define DIS_TSF_UPDATE BIT(3)
-
-// The same function but different bit field.
-#define DIS_TSF_UDT0_NORMAL_CHIP BIT(4)
-#define DIS_TSF_UDT0_TEST_CHIP BIT(5)
-#define STOP_BCNQ BIT(6)
-
-
-//2 ACMHWCTRL
-#define AcmHw_HwEn BIT(0)
-#define AcmHw_BeqEn BIT(1)
-#define AcmHw_ViqEn BIT(2)
-#define AcmHw_VoqEn BIT(3)
-#define AcmHw_BeqStatus BIT(4)
-#define AcmHw_ViqStatus BIT(5)
-#define AcmHw_VoqStatus BIT(6)
-
-
-
-//-----------------------------------------------------
-//
-// 0x0600h ~ 0x07FFh WMAC Configuration
-//
-//-----------------------------------------------------
-//2APSD_CTRL
-#define APSDOFF BIT(6)
-#define APSDOFF_STATUS BIT(7)
-
-
-#define RATE_BITMAP_ALL 0xFFFFF
-
-// Only use CCK 1M rate for ACK
-#define RATE_RRSR_CCK_ONLY_1M 0xFFFF1
-
-//2 TCR
-#define TSFRST BIT(0)
-#define DIS_GCLK BIT(1)
-#define PAD_SEL BIT(2)
-#define PWR_ST BIT(6)
-#define PWRBIT_OW_EN BIT(7)
-#define ACRC BIT(8)
-#define CFENDFORM BIT(9)
-#define ICV BIT(10)
-
-
-
-//2 RCR
-#define AAP BIT(0)
-#define APM BIT(1)
-#define AM BIT(2)
-#define AB BIT(3)
-#define ADD3 BIT(4)
-#define APWRMGT BIT(5)
-#define CBSSID BIT(6)
-#define CBSSID_DATA BIT(6)
-#define CBSSID_BCN BIT(7)
-#define ACRC32 BIT(8)
-#define AICV BIT(9)
-#define ADF BIT(11)
-#define ACF BIT(12)
-#define AMF BIT(13)
-#define HTC_LOC_CTRL BIT(14)
-#define UC_DATA_EN BIT(16)
-#define BM_DATA_EN BIT(17)
-#define MFBEN BIT(22)
-#define LSIGEN BIT(23)
-#define EnMBID BIT(24)
-#define APP_BASSN BIT(27)
-#define APP_PHYSTS BIT(28)
-#define APP_ICV BIT(29)
-#define APP_MIC BIT(30)
-#define APP_FCS BIT(31)
-
-
-//2 SECCFG
-#define SCR_TxUseDK BIT(0) //Force Tx Use Default Key
-#define SCR_RxUseDK BIT(1) //Force Rx Use Default Key
-#define SCR_TxEncEnable BIT(2) //Enable Tx Encryption
-#define SCR_RxDecEnable BIT(3) //Enable Rx Decryption
-#define SCR_SKByA2 BIT(4) //Search kEY BY A2
-#define SCR_NoSKMC BIT(5) //No Key Search Multicast
-#define SCR_TXBCUSEDK BIT(6) // Force Tx Broadcast packets Use Default Key
-#define SCR_RXBCUSEDK BIT(7) // Force Rx Broadcast packets Use Default Key
-
-
-//-----------------------------------------------------
-//
-// RTL8188E SDIO Configuration
-//
-//-----------------------------------------------------
-
-// I/O bus domain address mapping
-#define SDIO_LOCAL_BASE 0x10250000
-#define WLAN_IOREG_BASE 0x10260000
-#define FIRMWARE_FIFO_BASE 0x10270000
-#define TX_HIQ_BASE 0x10310000
-#define TX_MIQ_BASE 0x10320000
-#define TX_LOQ_BASE 0x10330000
-#define RX_RX0FF_BASE 0x10340000
-
-// SDIO host local register space mapping.
-#define SDIO_LOCAL_MSK 0x0FFF
-#define WLAN_IOREG_MSK 0x7FFF
-#define WLAN_FIFO_MSK 0x1FFF // Aggregation Length[12:0]
-#define WLAN_RX0FF_MSK 0x0003
-
-#define SDIO_WITHOUT_REF_DEVICE_ID 0 // Without reference to the SDIO Device ID
-#define SDIO_LOCAL_DEVICE_ID 0 // 0b[16], 000b[15:13]
-#define WLAN_TX_HIQ_DEVICE_ID 4 // 0b[16], 100b[15:13]
-#define WLAN_TX_MIQ_DEVICE_ID 5 // 0b[16], 101b[15:13]
-#define WLAN_TX_LOQ_DEVICE_ID 6 // 0b[16], 110b[15:13]
-#define WLAN_RX0FF_DEVICE_ID 7 // 0b[16], 111b[15:13]
-#define WLAN_IOREG_DEVICE_ID 8 // 1b[16]
-
-// SDIO Tx Free Page Index
-#define HI_QUEUE_IDX 0
-#define MID_QUEUE_IDX 1
-#define LOW_QUEUE_IDX 2
-#define PUBLIC_QUEUE_IDX 3
-
-#define SDIO_MAX_TX_QUEUE 3 // HIQ, MIQ and LOQ
-#define SDIO_MAX_RX_QUEUE 1
-
-#define SDIO_REG_TX_CTRL 0x0000 // SDIO Tx Control
-#define SDIO_REG_HIMR 0x0014 // SDIO Host Interrupt Mask
-#define SDIO_REG_HISR 0x0018 // SDIO Host Interrupt Service Routine
-#define SDIO_REG_HCPWM 0x0019 // HCI Current Power Mode
-#define SDIO_REG_RX0_REQ_LEN 0x001C // RXDMA Request Length
-#define SDIO_REG_FREE_TXPG 0x0020 // Free Tx Buffer Page
-#define SDIO_REG_HCPWM1 0x0024 // HCI Current Power Mode 1
-#define SDIO_REG_HCPWM2 0x0026 // HCI Current Power Mode 2
-#define SDIO_REG_HTSFR_INFO 0x0030 // HTSF Informaion
-#define SDIO_REG_HRPWM1 0x0080 // HCI Request Power Mode 1
-#define SDIO_REG_HRPWM2 0x0082 // HCI Request Power Mode 2
-#define SDIO_REG_HPS_CLKR 0x0084 // HCI Power Save Clock
-#define SDIO_REG_HSUS_CTRL 0x0086 // SDIO HCI Suspend Control
-#define SDIO_REG_HIMR_ON 0x0090 // SDIO Host Extension Interrupt Mask Always
-#define SDIO_REG_HISR_ON 0x0091 // SDIO Host Extension Interrupt Status Always
-
-#define SDIO_HIMR_DISABLED 0
-
-// RTL8188E SDIO Host Interrupt Mask Register
-#define SDIO_HIMR_RX_REQUEST_MSK BIT0
-#define SDIO_HIMR_AVAL_MSK BIT1
-#define SDIO_HIMR_TXERR_MSK BIT2
-#define SDIO_HIMR_RXERR_MSK BIT3
-#define SDIO_HIMR_TXFOVW_MSK BIT4
-#define SDIO_HIMR_RXFOVW_MSK BIT5
-#define SDIO_HIMR_TXBCNOK_MSK BIT6
-#define SDIO_HIMR_TXBCNERR_MSK BIT7
-#define SDIO_HIMR_BCNERLY_INT_MSK BIT16
-#define SDIO_HIMR_C2HCMD_MSK BIT17
-#define SDIO_HIMR_CPWM1_MSK BIT18
-#define SDIO_HIMR_CPWM2_MSK BIT19
-#define SDIO_HIMR_HSISR_IND_MSK BIT20
-#define SDIO_HIMR_GTINT3_IND_MSK BIT21
-#define SDIO_HIMR_GTINT4_IND_MSK BIT22
-#define SDIO_HIMR_PSTIMEOUT_MSK BIT23
-#define SDIO_HIMR_OCPINT_MSK BIT24
-#define SDIO_HIMR_ATIMEND_MSK BIT25
-#define SDIO_HIMR_ATIMEND_E_MSK BIT26
-#define SDIO_HIMR_CTWEND_MSK BIT27
-
-//RTL8188E SDIO Specific
-#define SDIO_HIMR_MCU_ERR_MSK BIT28
-#define SDIO_HIMR_TSF_BIT32_TOGGLE_MSK BIT29
-
-// SDIO Host Interrupt Service Routine
-#define SDIO_HISR_RX_REQUEST BIT0
-#define SDIO_HISR_AVAL BIT1
-#define SDIO_HISR_TXERR BIT2
-#define SDIO_HISR_RXERR BIT3
-#define SDIO_HISR_TXFOVW BIT4
-#define SDIO_HISR_RXFOVW BIT5
-#define SDIO_HISR_TXBCNOK BIT6
-#define SDIO_HISR_TXBCNERR BIT7
-#define SDIO_HISR_BCNERLY_INT BIT16
-#define SDIO_HISR_C2HCMD BIT17
-#define SDIO_HISR_CPWM1 BIT18
-#define SDIO_HISR_CPWM2 BIT19
-#define SDIO_HISR_HSISR_IND BIT20
-#define SDIO_HISR_GTINT3_IND BIT21
-#define SDIO_HISR_GTINT4_IND BIT22
-#define SDIO_HISR_PSTIMEOUT BIT23
-#define SDIO_HISR_OCPINT BIT24
-#define SDIO_HISR_ATIMEND BIT25
-#define SDIO_HISR_ATIMEND_E BIT26
-#define SDIO_HISR_CTWEND BIT27
-
-//RTL8188E SDIO Specific
-#define SDIO_HISR_MCU_ERR BIT28
-#define SDIO_HISR_TSF_BIT32_TOGGLE BIT29
-
-#define MASK_SDIO_HISR_CLEAR (SDIO_HISR_TXERR |\
- SDIO_HISR_RXERR |\
- SDIO_HISR_TXFOVW |\
- SDIO_HISR_RXFOVW |\
- SDIO_HISR_TXBCNOK |\
- SDIO_HISR_TXBCNERR |\
- SDIO_HISR_C2HCMD |\
- SDIO_HISR_CPWM1 |\
- SDIO_HISR_CPWM2 |\
- SDIO_HISR_HSISR_IND |\
- SDIO_HISR_GTINT3_IND |\
- SDIO_HISR_GTINT4_IND |\
- SDIO_HISR_PSTIMEOUT |\
- SDIO_HISR_OCPINT)
-
-// SDIO HCI Suspend Control Register
-#define HCI_RESUME_PWR_RDY BIT1
-#define HCI_SUS_CTRL BIT0
-
-// SDIO Tx FIFO related
-#define SDIO_TX_FREE_PG_QUEUE 4 // The number of Tx FIFO free page
-#define SDIO_TX_FIFO_PAGE_SZ 128
-
-/* move to rtl8188e_xmit.h
-#if DEV_BUS_TYPE == RT_SDIO_INTERFACE
- #define MAX_TX_AGG_PACKET_NUMBER 0x8
-#else
- #define MAX_TX_AGG_PACKET_NUMBER 0xFF
-#endif
-*/
-
-// vivi added for new cam search flow, 20091028
-//#define SCR_TxUseBroadcastDK BIT6 // Force Tx Use Broadcast Default Key
-//#define SCR_RxUseBroadcastDK BIT7 // Force Rx Use Broadcast Default Key
-
-//-----------------------------------------------------
-//
-// 0xFE00h ~ 0xFE55h USB Configuration
-//
-//-----------------------------------------------------
-
-//2 USB Information (0xFE17)
-#define USB_IS_HIGH_SPEED 0
-#define USB_IS_FULL_SPEED 1
-#define USB_SPEED_MASK BIT(5)
-
-#define USB_NORMAL_SIE_EP_MASK 0xF
-#define USB_NORMAL_SIE_EP_SHIFT 4
-
-
-//2 Special Option
-#define USB_AGG_EN BIT(3)
-
-// 0; Use interrupt endpoint to upload interrupt pkt
-// 1; Use bulk endpoint to upload interrupt pkt,
-#define INT_BULK_SEL BIT(4)
-
-
-
-//2REG_C2HEVT_CLEAR
-#define C2H_EVT_HOST_CLOSE 0x00 // Set by driver and notify FW that the driver has read the C2H command message
-#define C2H_EVT_FW_CLOSE 0xFF // Set by FW indicating that FW had set the C2H command message and it's not yet read by driver.
-
-
-//2REG_MULTI_FUNC_CTRL(For RTL8723 Only)
-#define WL_HWPDN_EN BIT0 // Enable GPIO[9] as WiFi HW PDn source
-#define WL_HWPDN_SL BIT1 // WiFi HW PDn polarity control
-#define WL_FUNC_EN BIT2 // WiFi function enable
-#define WL_HWROF_EN BIT3 // Enable GPIO[9] as WiFi RF HW PDn source
-#define BT_HWPDN_EN BIT16 // Enable GPIO[11] as BT HW PDn source
-#define BT_HWPDN_SL BIT17 // BT HW PDn polarity control
-#define BT_FUNC_EN BIT18 // BT function enable
-#define BT_HWROF_EN BIT19 // Enable GPIO[11] as BT/GPS RF HW PDn source
-#define GPS_HWPDN_EN BIT20 // Enable GPIO[10] as GPS HW PDn source
-#define GPS_HWPDN_SL BIT21 // GPS HW PDn polarity control
-#define GPS_FUNC_EN BIT22 // GPS function enable
-
-
-//3 REG_LIFECTRL_CTRL
-#define HAL92C_EN_PKT_LIFE_TIME_BK BIT3
-#define HAL92C_EN_PKT_LIFE_TIME_BE BIT2
-#define HAL92C_EN_PKT_LIFE_TIME_VI BIT1
-#define HAL92C_EN_PKT_LIFE_TIME_VO BIT0
-
-#define HAL92C_MSDU_LIFE_TIME_UNIT 128 // in us, said by Tim.
-
-//========================================================
-// General definitions
-//========================================================
-//#if (HAL_8195A_USB == 1)
-//#define LAST_ENTRY_OF_TX_PKT_BUFFER 255
-//#else
-#define LAST_ENTRY_OF_TX_PKT_BUFFER 176 // 22k 22528 bytes
-//#endif
-
-#define POLLING_LLT_THRESHOLD 20
-//#if RTL8188E_FOR_MP_TEST == 1
-//#define POLLING_READY_TIMEOUT_COUNT 3000
-//#else
-#define POLLING_READY_TIMEOUT_COUNT 1000
-//#endif
-// GPIO BIT
-#define HAL_8192C_HW_GPIO_WPS_BIT BIT2
-
-#if 0//(RTL8188E_SUPPORT == 1)
-////////////////////////////////ONLY for 88EE/////////////////////////////////
-//
-// Host Interrupt Status Registers (Offset: 0x00B4-00B7, 0x00BC-00BF)
-// Host Interrupt Mask Registers (Offset: 0x00B0-00B3, 0x00B8-00BB)
-//
-//----------------------------------------------------------------------------
-// 8188 IMR/ISR bits
-//----------------------------------------------------------------------------
-#define IMR_DISABLED_88E 0x0
-// IMR DW0(0x00B0-00B3) Bit 0-31
-#define IMR_TXCCK_88E BIT30 // TXRPT interrupt when CCX bit of the packet is set
-#define IMR_PSTIMEOUT_88E BIT29 // Power Save Time Out Interrupt
-#define IMR_GTINT4_88E BIT28 // When GTIMER4 expires, this bit is set to 1
-#define IMR_GTINT3_88E BIT27 // When GTIMER3 expires, this bit is set to 1
-#define IMR_TBDER_88E BIT26 // Transmit Beacon0 Error
-#define IMR_TBDOK_88E BIT25 // Transmit Beacon0 OK
-#define IMR_TSF_BIT32_TOGGLE_88E BIT24 // TSF Timer BIT32 toggle indication interrupt
-#define IMR_BcnInt_88E BIT20 // Beacon DMA Interrupt 0
-#define IMR_BDOK_88E BIT16 // Beacon Queue DMA OK0
-#define IMR_HSISR_IND_ON_INT_88E BIT15 // HSISR Indicator (HSIMR & HSISR is true, this bit is set to 1)
-#define IMR_BCNDMAINT_E_88E BIT14 // Beacon DMA Interrupt Extension for Win7
-#define IMR_ATIMEND_88E BIT12 // CTWidnow End or ATIM Window End
-#define IMR_HISR1_IND_INT_88E BIT11 // HISR1 Indicator (HISR1 & HIMR1 is true, this bit is set to 1)
-#define IMR_C2HCMD_88E BIT10 // CPU to Host Command INT Status, Write 1 clear
-#define IMR_CPWM2_88E BIT9 // CPU power Mode exchange INT Status, Write 1 clear
-#define IMR_CPWM_88E BIT8 // CPU power Mode exchange INT Status, Write 1 clear
-#define IMR_HIGHDOK_88E BIT7 // High Queue DMA OK
-#define IMR_MGNTDOK_88E BIT6 // Management Queue DMA OK
-#define IMR_BKDOK_88E BIT5 // AC_BK DMA OK
-#define IMR_BEDOK_88E BIT4 // AC_BE DMA OK
-#define IMR_VIDOK_88E BIT3 // AC_VI DMA OK
-#define IMR_VODOK_88E BIT2 // AC_VO DMA OK
-#define IMR_RDU_88E BIT1 // Rx Descriptor Unavailable
-#define IMR_ROK_88E BIT0 // Receive DMA OK
-
-// IMR DW1(0x00B8-00BB) Bit 0-31
-#define IMR_BCNDMAINT7_88E BIT27 // Beacon DMA Interrupt 7
-#define IMR_BCNDMAINT6_88E BIT26 // Beacon DMA Interrupt 6
-#define IMR_BCNDMAINT5_88E BIT25 // Beacon DMA Interrupt 5
-#define IMR_BCNDMAINT4_88E BIT24 // Beacon DMA Interrupt 4
-#define IMR_BCNDMAINT3_88E BIT23 // Beacon DMA Interrupt 3
-#define IMR_BCNDMAINT2_88E BIT22 // Beacon DMA Interrupt 2
-#define IMR_BCNDMAINT1_88E BIT21 // Beacon DMA Interrupt 1
-#define IMR_BCNDOK7_88E BIT20 // Beacon Queue DMA OK Interrup 7
-#define IMR_BCNDOK6_88E BIT19 // Beacon Queue DMA OK Interrup 6
-#define IMR_BCNDOK5_88E BIT18 // Beacon Queue DMA OK Interrup 5
-#define IMR_BCNDOK4_88E BIT17 // Beacon Queue DMA OK Interrup 4
-#define IMR_BCNDOK3_88E BIT16 // Beacon Queue DMA OK Interrup 3
-#define IMR_BCNDOK2_88E BIT15 // Beacon Queue DMA OK Interrup 2
-#define IMR_BCNDOK1_88E BIT14 // Beacon Queue DMA OK Interrup 1
-#define IMR_ATIMEND_E_88E BIT13 // ATIM Window End Extension for Win7
-#define IMR_TXERR_88E BIT11 // Tx Error Flag Interrupt Status, write 1 clear.
-#define IMR_RXERR_88E BIT10 // Rx Error Flag INT Status, Write 1 clear
-#define IMR_TXFOVW_88E BIT9 // Transmit FIFO Overflow
-#define IMR_RXFOVW_88E BIT8 // Receive FIFO Overflow
-
-
-
-////////////////////////////////ONLY for 88EE/////////////////////////////////
-#endif //(RTL8188E_SUPPORT == 1)
-
-
-//----------------------------------------------------------------------------
-// 8192C EEPROM/EFUSE share register definition.
-//----------------------------------------------------------------------------
-
-//====================================================
-// EEPROM/Efuse PG Offset for 88EE/88EU/88ES
-//====================================================
-#define EEPROM_TX_PWR_INX_88E 0x10
-
-#define EEPROM_ChannelPlan_88E 0xB8
-#define EEPROM_XTAL_88E 0xB9
-#define EEPROM_THERMAL_METER_88E 0xBA
-#define EEPROM_IQK_LCK_88E 0xBB
-
-#define EEPROM_RF_BOARD_OPTION_88E 0xC1
-#define EEPROM_RF_FEATURE_OPTION_88E 0xC2
-#define EEPROM_RF_BT_SETTING_88E 0xC3
-#define EEPROM_VERSION_88E 0xC4
-#define EEPROM_CUSTOMERID_88E 0xC5
-#define EEPROM_RF_ANTENNA_OPT_88E 0xC9
-
-#ifdef CONFIG_RF_GAIN_OFFSET
-#define EEPROM_RF_GAIN_OFFSET_88E 0xFD
-#endif //CONFIG_RF_GAIN_OFFSET
-
-// RTL88EE
-#define EEPROM_MAC_ADDR_88EE 0xD0
-#define EEPROM_VID_88EE 0xD6
-#define EEPROM_DID_88EE 0xD8
-#define EEPROM_SVID_88EE 0xDA
-#define EEPROM_SMID_88EE 0xDC
-
-//RTL88EU
-#define EEPROM_MAC_ADDR_88EU 0xD7
-#define EEPROM_VID_88EU 0xD0
-#define EEPROM_PID_88EU 0xD2
-#define EEPROM_USB_OPTIONAL_FUNCTION0 0xD4
-
-// RTL88ES
-#define EEPROM_MAC_ADDR_88ES 0x11A
-
-
-
-
-//====================================================
-// EEPROM/Efuse Value Type
-//====================================================
-#define EETYPE_TX_PWR 0x0
-
-//
-// Default Value for EEPROM or EFUSE!!!
-//
-#define EEPROM_Default_TSSI 0x0
-#define EEPROM_Default_TxPowerDiff 0x0
-#define EEPROM_Default_CrystalCap 0x5
-#define EEPROM_Default_BoardType 0x02 // Default: 2X2, RTL8192CE(QFPN68)
-#define EEPROM_Default_TxPower 0x1010
-#define EEPROM_Default_HT2T_TxPwr 0x10
-
-#define EEPROM_Default_LegacyHTTxPowerDiff 0x3
-#define EEPROM_Default_ThermalMeter 0x12
-
-#define EEPROM_Default_AntTxPowerDiff 0x0
-#define EEPROM_Default_TxPwDiff_CrystalCap 0x5
-#if (RTL8188ES_SUPPORT==1) //for SDIO
-#define EEPROM_Default_TxPowerLevel 0x25
-#else //for USB/PCIE
-#define EEPROM_Default_TxPowerLevel 0x2A
-#endif
-
-#define EEPROM_Default_HT40_2SDiff 0x0
-#define EEPROM_Default_HT20_Diff 2 // HT20<->40 default Tx Power Index Difference
-#define EEPROM_Default_LegacyHTTxPowerDiff 0x3
-#define EEPROM_Default_HT40_PwrMaxOffset 0
-#define EEPROM_Default_HT20_PwrMaxOffset 0
-
-#define EEPROM_Default_CrystalCap_88E 0x20
-#define EEPROM_Default_ThermalMeter_88E 0x18
-
-#ifdef CONFIG_RF_GAIN_OFFSET
-#define EEPROM_Default_RFGainOffset 0xff
-#endif //CONFIG_RF_GAIN_OFFSET
-
-//New EFUSE deafult value
-#define EEPROM_DEFAULT_24G_INDEX 0x2D
-#define EEPROM_DEFAULT_24G_HT20_DIFF 0X02
-#define EEPROM_DEFAULT_24G_OFDM_DIFF 0X04
-
-#define EEPROM_DEFAULT_5G_INDEX 0X2A
-#define EEPROM_DEFAULT_5G_HT20_DIFF 0X00
-#define EEPROM_DEFAULT_5G_OFDM_DIFF 0X04
-
-#define EEPROM_DEFAULT_DIFF 0XFE
-#define EEPROM_DEFAULT_CHANNEL_PLAN 0x7F
-#define EEPROM_DEFAULT_BOARD_OPTION 0x00
-#define EEPROM_DEFAULT_FEATURE_OPTION 0x00
-#define EEPROM_DEFAULT_BT_OPTION 0x10
-
-
-// For debug
-#define EEPROM_Default_PID 0x1234
-#define EEPROM_Default_VID 0x5678
-#define EEPROM_Default_CustomerID 0xAB
-#define EEPROM_Default_CustomerID_8188E 0x00
-#define EEPROM_Default_SubCustomerID 0xCD
-#define EEPROM_Default_Version 0
-
-#define EEPROM_CHANNEL_PLAN_FCC 0x0
-#define EEPROM_CHANNEL_PLAN_IC 0x1
-#define EEPROM_CHANNEL_PLAN_ETSI 0x2
-#define EEPROM_CHANNEL_PLAN_SPAIN 0x3
-#define EEPROM_CHANNEL_PLAN_FRANCE 0x4
-#define EEPROM_CHANNEL_PLAN_MKK 0x5
-#define EEPROM_CHANNEL_PLAN_MKK1 0x6
-#define EEPROM_CHANNEL_PLAN_ISRAEL 0x7
-#define EEPROM_CHANNEL_PLAN_TELEC 0x8
-#define EEPROM_CHANNEL_PLAN_GLOBAL_DOMAIN 0x9
-#define EEPROM_CHANNEL_PLAN_WORLD_WIDE_13 0xA
-#define EEPROM_CHANNEL_PLAN_NCC 0xB
-#define EEPROM_USB_OPTIONAL1 0xE
-#define EEPROM_CHANNEL_PLAN_BY_HW_MASK 0x80
-
-
-#define EEPROM_CID_DEFAULT 0x0
-#define EEPROM_CID_TOSHIBA 0x4
-#define EEPROM_CID_CCX 0x10 // CCX test. By Bruce, 2009-02-25.
-#define EEPROM_CID_QMI 0x0D
-#define EEPROM_CID_WHQL 0xFE // added by chiyoko for dtm, 20090108
-
-
-#define RTL_EEPROM_ID 0x8129
-
-#endif //__RTL8188E_SPEC_H__
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *******************************************************************************/
+#ifndef __RTL8188E_SPEC_H__
+#define __RTL8188E_SPEC_H__
+
+#include <drv_conf.h>
+
+#ifndef BIT
+#define BIT(x) (1 << (x))
+#endif
+
+#define BIT0 0x00000001
+#define BIT1 0x00000002
+#define BIT2 0x00000004
+#define BIT3 0x00000008
+#define BIT4 0x00000010
+#define BIT5 0x00000020
+#define BIT6 0x00000040
+#define BIT7 0x00000080
+#define BIT8 0x00000100
+#define BIT9 0x00000200
+#define BIT10 0x00000400
+#define BIT11 0x00000800
+#define BIT12 0x00001000
+#define BIT13 0x00002000
+#define BIT14 0x00004000
+#define BIT15 0x00008000
+#define BIT16 0x00010000
+#define BIT17 0x00020000
+#define BIT18 0x00040000
+#define BIT19 0x00080000
+#define BIT20 0x00100000
+#define BIT21 0x00200000
+#define BIT22 0x00400000
+#define BIT23 0x00800000
+#define BIT24 0x01000000
+#define BIT25 0x02000000
+#define BIT26 0x04000000
+#define BIT27 0x08000000
+#define BIT28 0x10000000
+#define BIT29 0x20000000
+#define BIT30 0x40000000
+#define BIT31 0x80000000
+
+//============================================================
+// 8192C Regsiter offset definition
+//============================================================
+
+#define HAL_PS_TIMER_INT_DELAY 50 // 50 microseconds
+#define HAL_92C_NAV_UPPER_UNIT 128 // micro-second
+
+#define MAC_ADDR_LEN 6
+// 8188E PKT_BUFF_ACCESS_CTRL value
+#define TXPKT_BUF_SELECT 0x69
+#define RXPKT_BUF_SELECT 0xA5
+#define DISABLE_TRXPKT_BUF_ACCESS 0x0
+
+//============================================================
+//
+//============================================================
+
+//-----------------------------------------------------
+//
+// 0x0000h ~ 0x00FFh System Configuration
+//
+//-----------------------------------------------------
+#define REG_SYS_ISO_CTRL 0x0000
+#define REG_SYS_FUNC_EN 0x0002
+#define REG_APS_FSMCO 0x0004
+#define REG_SYS_CLKR 0x0008
+#define REG_9346CR 0x000A
+#define REG_EE_VPD 0x000C
+#define REG_AFE_MISC 0x0010
+#define REG_SPS0_CTRL 0x0011
+#define REG_SPS_OCP_CFG 0x0018
+#define REG_RSV_CTRL 0x001C
+#define REG_RF_CTRL 0x001F
+#define REG_LDOA15_CTRL 0x0020
+#define REG_LDOV12D_CTRL 0x0021
+#define REG_LDOHCI12_CTRL 0x0022
+#define REG_LPLDO_CTRL 0x0023
+#define REG_AFE_XTAL_CTRL 0x0024
+#define REG_AFE_PLL_CTRL 0x0028
+#define REG_APE_PLL_CTRL_EXT 0x002c
+#define REG_EFUSE_CTRL 0x0030
+#define REG_EFUSE_TEST 0x0034
+#define REG_GPIO_MUXCFG 0x0040
+#define REG_GPIO_IO_SEL 0x0042
+#define REG_MAC_PINMUX_CFG 0x0043
+#define REG_GPIO_PIN_CTRL 0x0044
+#define REG_GPIO_INTM 0x0048
+#define REG_LEDCFG0 0x004C
+#define REG_LEDCFG1 0x004D
+#define REG_LEDCFG2 0x004E
+#define REG_LEDCFG3 0x004F
+#define REG_FSIMR 0x0050
+#define REG_FSISR 0x0054
+#define REG_HSIMR 0x0058
+#define REG_HSISR 0x005c
+#define REG_GPIO_PIN_CTRL_2 0x0060 // RTL8723 WIFI/BT/GPS Multi-Function GPIO Pin Control.
+#define REG_GPIO_IO_SEL_2 0x0062 // RTL8723 WIFI/BT/GPS Multi-Function GPIO Select.
+#define REG_BB_PAD_CTRL 0x0064
+#define REG_MULTI_FUNC_CTRL 0x0068 // RTL8723 WIFI/BT/GPS Multi-Function control source.
+#define REG_GPIO_OUTPUT 0x006c
+#define REG_AFE_XTAL_CTRL_EXT 0x0078 //RTL8188E
+#define REG_XCK_OUT_CTRL 0x007c //RTL8188E
+#define REG_MCUFWDL 0x0080
+#define REG_WOL_EVENT 0x0081 //RTL8188E
+#define REG_MCUTSTCFG 0x0084
+#define REG_HMEBOX_E0 0x0088
+#define REG_HMEBOX_E1 0x008A
+#define REG_HMEBOX_E2 0x008C
+#define REG_HMEBOX_E3 0x008E
+#define REG_HMEBOX_EXT_0 0x01F0
+#define REG_HMEBOX_EXT_1 0x01F4
+#define REG_HMEBOX_EXT_2 0x01F8
+#define REG_HMEBOX_EXT_3 0x01FC
+#define REG_HIMR_88E 0x00B0
+#define REG_HISR_88E 0x00B4
+#define REG_HIMRE_88E 0x00B8
+#define REG_HISRE_88E 0x00BC
+#define REG_EFUSE_ACCESS 0x00CF // Efuse access protection for RTL8723
+#define REG_BIST_SCAN 0x00D0
+#define REG_BIST_RPT 0x00D4
+#define REG_BIST_ROM_RPT 0x00D8
+#define REG_USB_SIE_INTF 0x00E0
+#define REG_PCIE_MIO_INTF 0x00E4
+#define REG_PCIE_MIO_INTD 0x00E8
+#define REG_HPON_FSM 0x00EC
+#define REG_SYS_CFG 0x00F0
+#define REG_GPIO_OUTSTS 0x00F4 // For RTL8723 only.
+#define REG_TYPE_ID 0x00FC
+
+#define REG_MAC_PHY_CTRL_NORMAL 0x00f8
+
+//-----------------------------------------------------
+//
+// 0x0100h ~ 0x01FFh MACTOP General Configuration
+//
+//-----------------------------------------------------
+#define REG_CR 0x0100
+#define REG_PBP 0x0104
+#define REG_PKT_BUFF_ACCESS_CTRL 0x0106
+#define REG_TRXDMA_CTRL 0x010C
+#define REG_TRXFF_BNDY 0x0114
+#define REG_TRXFF_STATUS 0x0118
+#define REG_RXFF_PTR 0x011C
+//#define REG_HIMR 0x0120
+//#define REG_HISR 0x0124
+#define REG_HIMRE 0x0128
+#define REG_HISRE 0x012C
+#define REG_CPWM 0x012F
+#define REG_FWIMR 0x0130
+#define REG_FTIMR 0x0138
+#define REG_FWISR 0x0134
+#define REG_PKTBUF_DBG_CTRL 0x0140
+#define REG_PKTBUF_DBG_ADDR (REG_PKTBUF_DBG_CTRL)
+#define REG_RXPKTBUF_DBG (REG_PKTBUF_DBG_CTRL+2)
+#define REG_TXPKTBUF_DBG (REG_PKTBUF_DBG_CTRL+3)
+#define REG_RXPKTBUF_CTRL (REG_PKTBUF_DBG_CTRL+2)
+#define REG_PKTBUF_DBG_DATA_L 0x0144
+#define REG_PKTBUF_DBG_DATA_H 0x0148
+
+#define REG_TC0_CTRL 0x0150
+#define REG_TC1_CTRL 0x0154
+#define REG_TC2_CTRL 0x0158
+#define REG_TC3_CTRL 0x015C
+#define REG_TC4_CTRL 0x0160
+#define REG_TCUNIT_BASE 0x0164
+#define REG_MBIST_START 0x0174
+#define REG_MBIST_DONE 0x0178
+#define REG_MBIST_FAIL 0x017C
+#define REG_32K_CTRL 0x0194 //RTL8188E
+#define REG_C2HEVT_MSG_NORMAL 0x01A0
+#define REG_C2HEVT_CLEAR 0x01AF
+#define REG_MCUTST_1 0x01c0
+#ifdef CONFIG_WOWLAN
+#define REG_WOWLAN_WAKE_REASON 0x01c7
+#endif
+#define REG_FMETHR 0x01C8
+#define REG_HMETFR 0x01CC
+#define REG_HMEBOX_0 0x01D0
+#define REG_HMEBOX_1 0x01D4
+#define REG_HMEBOX_2 0x01D8
+#define REG_HMEBOX_3 0x01DC
+
+#define REG_LLT_INIT 0x01E0
+
+
+//-----------------------------------------------------
+//
+// 0x0200h ~ 0x027Fh TXDMA Configuration
+//
+//-----------------------------------------------------
+#define REG_RQPN 0x0200
+#define REG_FIFOPAGE 0x0204
+#define REG_TDECTRL 0x0208
+#define REG_TXDMA_OFFSET_CHK 0x020C
+#define REG_TXDMA_STATUS 0x0210
+#define REG_RQPN_NPQ 0x0214
+
+//-----------------------------------------------------
+//
+// 0x0280h ~ 0x02FFh RXDMA Configuration
+//
+//-----------------------------------------------------
+#define REG_RXDMA_AGG_PG_TH 0x0280
+#define REG_RXPKT_NUM 0x0284
+#define REG_RXDMA_STATUS 0x0288
+
+//-----------------------------------------------------
+//
+// 0x0300h ~ 0x03FFh PCIe
+//
+//-----------------------------------------------------
+#define REG_PCIE_CTRL_REG 0x0300
+#define REG_INT_MIG 0x0304 // Interrupt Migration
+#define REG_BCNQ_DESA 0x0308 // TX Beacon Descriptor Address
+#define REG_HQ_DESA 0x0310 // TX High Queue Descriptor Address
+#define REG_MGQ_DESA 0x0318 // TX Manage Queue Descriptor Address
+#define REG_VOQ_DESA 0x0320 // TX VO Queue Descriptor Address
+#define REG_VIQ_DESA 0x0328 // TX VI Queue Descriptor Address
+#define REG_BEQ_DESA 0x0330 // TX BE Queue Descriptor Address
+#define REG_BKQ_DESA 0x0338 // TX BK Queue Descriptor Address
+#define REG_RX_DESA 0x0340 // RX Queue Descriptor Address
+#define REG_MDIO 0x0354 // MDIO for Access PCIE PHY
+#define REG_DBG_SEL 0x0360 // Debug Selection Register
+#define REG_PCIE_HRPWM 0x0361 //PCIe RPWM
+#define REG_PCIE_HCPWM 0x0363 //PCIe CPWM
+#define REG_WATCH_DOG 0x0368
+
+// RTL8723 series -------------------------------
+#define REG_PCIE_HISR 0x03A0
+
+// spec version 11
+//-----------------------------------------------------
+//
+// 0x0400h ~ 0x047Fh Protocol Configuration
+//
+//-----------------------------------------------------
+#define REG_VOQ_INFORMATION 0x0400
+#define REG_VIQ_INFORMATION 0x0404
+#define REG_BEQ_INFORMATION 0x0408
+#define REG_BKQ_INFORMATION 0x040C
+#define REG_MGQ_INFORMATION 0x0410
+#define REG_HGQ_INFORMATION 0x0414
+#define REG_BCNQ_INFORMATION 0x0418
+#define REG_TXPKT_EMPTY 0x041A
+
+#define REG_CPU_MGQ_INFORMATION 0x041C
+#define REG_FWHW_TXQ_CTRL 0x0420
+#define REG_HWSEQ_CTRL 0x0423
+#define REG_TXPKTBUF_BCNQ_BDNY 0x0424
+#define REG_TXPKTBUF_MGQ_BDNY 0x0425
+#define REG_LIFETIME_EN 0x0426
+#define REG_MULTI_BCNQ_OFFSET 0x0427
+#define REG_SPEC_SIFS 0x0428
+#define REG_RL 0x042A
+#define REG_DARFRC 0x0430
+#define REG_RARFRC 0x0438
+#define REG_RRSR 0x0440
+#define REG_ARFR0 0x0444
+#define REG_ARFR1 0x0448
+#define REG_ARFR2 0x044C
+#define REG_ARFR3 0x0450
+#define REG_AGGLEN_LMT 0x0458
+#define REG_AMPDU_MIN_SPACE 0x045C
+#define REG_TXPKTBUF_WMAC_LBK_BF_HD 0x045D
+#define REG_FAST_EDCA_CTRL 0x0460
+#define REG_RD_RESP_PKT_TH 0x0463
+#define REG_INIRTS_RATE_SEL 0x0480
+//#define REG_INIDATA_RATE_SEL 0x0484
+#define REG_MACID_NO_LINK_0 0x0484
+#define REG_MACID_NO_LINK_1 0x0488
+
+#define REG_POWER_STATUS 0x04A4
+#define REG_POWER_STAGE1 0x04B4
+#define REG_POWER_STAGE2 0x04B8
+#define REG_PKT_VO_VI_LIFE_TIME 0x04C0
+#define REG_PKT_BE_BK_LIFE_TIME 0x04C2
+#define REG_STBC_SETTING 0x04C4
+#define REG_PROT_MODE_CTRL 0x04C8
+#define REG_MAX_AGGR_NUM 0x04CA
+#define REG_RTS_MAX_AGGR_NUM 0x04CB
+#define REG_BAR_MODE_CTRL 0x04CC
+#define REG_RA_TRY_RATE_AGG_LMT 0x04CF
+#define REG_EARLY_MODE_CONTROL 0x4D0
+#define REG_NQOS_SEQ 0x04DC
+#define REG_QOS_SEQ 0x04DE
+#define REG_NEED_CPU_HANDLE 0x04E0
+#define REG_PKT_LOSE_RPT 0x04E1
+#define REG_PTCL_ERR_STATUS 0x04E2
+#define REG_TX_RPT_CTRL 0x04EC
+#define REG_TX_RPT_TIME 0x04F0 // 2 byte
+#define REG_DUMMY 0x04FC
+
+#ifdef CONFIG_WOWLAN
+#define REG_TXPKTBUF_IV_LOW 0x0484
+#define REG_TXPKTBUF_IV_HIGH 0x0488
+#endif
+
+//-----------------------------------------------------
+//
+// 0x0500h ~ 0x05FFh EDCA Configuration
+//
+//-----------------------------------------------------
+#define REG_EDCA_VO_PARAM 0x0500
+#define REG_EDCA_VI_PARAM 0x0504
+#define REG_EDCA_BE_PARAM 0x0508
+#define REG_EDCA_BK_PARAM 0x050C
+#define REG_BCNTCFG 0x0510
+#define REG_PIFS 0x0512
+#define REG_RDG_PIFS 0x0513
+#define REG_SIFS_CTX 0x0514
+#define REG_SIFS_TRX 0x0516
+#define REG_TSFTR_SYN_OFFSET 0x0518
+#define REG_AGGR_BREAK_TIME 0x051A
+#define REG_SLOT 0x051B
+#define REG_TX_PTCL_CTRL 0x0520
+#define REG_TXPAUSE 0x0522
+#define REG_DIS_TXREQ_CLR 0x0523
+#define REG_RD_CTRL 0x0524
+//
+// Format for offset 540h-542h:
+// [3:0]: TBTT prohibit setup in unit of 32us. The time for HW getting beacon content before TBTT.
+// [7:4]: Reserved.
+// [19:8]: TBTT prohibit hold in unit of 32us. The time for HW holding to send the beacon packet.
+// [23:20]: Reserved
+// Description:
+// |
+// |<--Setup--|--Hold------------>|
+// --------------|----------------------
+// |
+// TBTT
+// Note: We cannot update beacon content to HW or send any AC packets during the time between Setup and Hold.
+// Described by Designer Tim and Bruce, 2011-01-14.
+//
+#define REG_TBTT_PROHIBIT 0x0540
+#define REG_RD_NAV_NXT 0x0544
+#define REG_NAV_PROT_LEN 0x0546
+#define REG_BCN_CTRL 0x0550
+#define REG_BCN_CTRL_1 0x0551
+#define REG_MBID_NUM 0x0552
+#define REG_DUAL_TSF_RST 0x0553
+#define REG_BCN_INTERVAL 0x0554 // The same as REG_MBSSID_BCN_SPACE
+#define REG_DRVERLYINT 0x0558
+#define REG_BCNDMATIM 0x0559
+#define REG_ATIMWND 0x055A
+#define REG_BCN_MAX_ERR 0x055D
+#define REG_RXTSF_OFFSET_CCK 0x055E
+#define REG_RXTSF_OFFSET_OFDM 0x055F
+#define REG_TSFTR 0x0560
+#define REG_TSFTR1 0x0568
+#define REG_ATIMWND_1 0x0570
+#define REG_PSTIMER 0x0580
+#define REG_TIMER0 0x0584
+#define REG_TIMER1 0x0588
+#define REG_ACMHWCTRL 0x05C0
+
+//#define REG_FW_TSF_SYNC_CNT 0x04A0
+#define REG_FW_RESET_TSF_CNT_1 0x05FC
+#define REG_FW_RESET_TSF_CNT_0 0x05FD
+#define REG_FW_BCN_DIS_CNT 0x05FE
+
+//-----------------------------------------------------
+//
+// 0x0600h ~ 0x07FFh WMAC Configuration
+//
+//-----------------------------------------------------
+#define REG_APSD_CTRL 0x0600
+#define REG_BWOPMODE 0x0603
+#define REG_TCR 0x0604
+#define REG_RCR 0x0608
+#define REG_RX_PKT_LIMIT 0x060C
+#define REG_RX_DLK_TIME 0x060D
+#define REG_RX_DRVINFO_SZ 0x060F
+
+#define REG_MACID 0x0610
+#define REG_BSSID 0x0618
+#define REG_MAR 0x0620
+#define REG_MBIDCAMCFG 0x0628
+
+#define REG_USTIME_EDCA 0x0638
+#define REG_MAC_SPEC_SIFS 0x063A
+
+// 20100719 Joseph: Hardware register definition change. (HW datasheet v54)
+#define REG_R2T_SIFS 0x063C // [15:8]SIFS_R2T_OFDM, [7:0]SIFS_R2T_CCK
+#define REG_T2T_SIFS 0x063E // [15:8]SIFS_T2T_OFDM, [7:0]SIFS_T2T_CCK
+#define REG_ACKTO 0x0640
+#define REG_CTS2TO 0x0641
+#define REG_EIFS 0x0642
+
+
+//RXERR_RPT
+#define RXERR_TYPE_OFDM_PPDU 0
+#define RXERR_TYPE_OFDM_FALSE_ALARM 1
+#define RXERR_TYPE_OFDM_MPDU_OK 2
+#define RXERR_TYPE_OFDM_MPDU_FAIL 3
+#define RXERR_TYPE_CCK_PPDU 4
+#define RXERR_TYPE_CCK_FALSE_ALARM 5
+#define RXERR_TYPE_CCK_MPDU_OK 6
+#define RXERR_TYPE_CCK_MPDU_FAIL 7
+#define RXERR_TYPE_HT_PPDU 8
+#define RXERR_TYPE_HT_FALSE_ALARM 9
+#define RXERR_TYPE_HT_MPDU_TOTAL 10
+#define RXERR_TYPE_HT_MPDU_OK 11
+#define RXERR_TYPE_HT_MPDU_FAIL 12
+#define RXERR_TYPE_RX_FULL_DROP 15
+
+#define RXERR_COUNTER_MASK 0xFFFFF
+#define RXERR_RPT_RST BIT(27)
+#define _RXERR_RPT_SEL(type) ((type) << 28)
+
+
+//
+// Note:
+// The NAV upper value is very important to WiFi 11n 5.2.3 NAV test. The default value is
+// always too small, but the WiFi TestPlan test by 25,000 microseconds of NAV through sending
+// CTS in the air. We must update this value greater than 25,000 microseconds to pass the item.
+// The offset of NAV_UPPER in 8192C Spec is incorrect, and the offset should be 0x0652. Commented
+// by SD1 Scott.
+// By Bruce, 2011-07-18.
+//
+#define REG_NAV_UPPER 0x0652 // unit of 128
+
+//WMA, BA, CCX
+//#define REG_NAV_CTRL 0x0650
+#define REG_BACAMCMD 0x0654
+#define REG_BACAMCONTENT 0x0658
+#define REG_LBDLY 0x0660
+#define REG_FWDLY 0x0661
+#define REG_RXERR_RPT 0x0664
+#define REG_WMAC_TRXPTCL_CTL 0x0668
+
+// Security
+#define REG_CAMCMD 0x0670
+#define REG_CAMWRITE 0x0674
+#define REG_CAMREAD 0x0678
+#define REG_CAMDBG 0x067C
+#define REG_SECCFG 0x0680
+
+// Power
+#define REG_WOW_CTRL 0x0690
+#define REG_PS_RX_INFO 0x0692
+#define REG_UAPSD_TID 0x0693
+#define REG_WKFMCAM_CMD 0x0698
+#define REG_WKFMCAM_NUM_88E 0x698
+#define REG_RXFLTMAP0 0x06A0
+#define REG_RXFLTMAP1 0x06A2
+#define REG_RXFLTMAP2 0x06A4
+#define REG_BCN_PSR_RPT 0x06A8
+#define REG_BT_COEX_TABLE 0x06C0
+
+
+// Hardware Port 2
+#define REG_MACID1 0x0700
+#define REG_BSSID1 0x0708
+
+
+//-----------------------------------------------------
+//
+// 0xFE00h ~ 0xFE55h USB Configuration
+//
+//-----------------------------------------------------
+#define REG_USB_INFO 0xFE17
+#define REG_USB_SPECIAL_OPTION 0xFE55
+#define REG_USB_DMA_AGG_TO 0xFE5B
+#define REG_USB_AGG_TO 0xFE5C
+#define REG_USB_AGG_TH 0xFE5D
+
+
+// For normal chip
+#define REG_NORMAL_SIE_VID 0xFE60 // 0xFE60~0xFE61
+#define REG_NORMAL_SIE_PID 0xFE62 // 0xFE62~0xFE63
+#define REG_NORMAL_SIE_OPTIONAL 0xFE64
+#define REG_NORMAL_SIE_EP 0xFE65 // 0xFE65~0xFE67
+#define REG_NORMAL_SIE_PHY 0xFE68 // 0xFE68~0xFE6B
+#define REG_NORMAL_SIE_OPTIONAL2 0xFE6C
+#define REG_NORMAL_SIE_GPS_EP 0xFE6D // 0xFE6D, for RTL8723 only.
+#define REG_NORMAL_SIE_MAC_ADDR 0xFE70 // 0xFE70~0xFE75
+#define REG_NORMAL_SIE_STRING 0xFE80 // 0xFE80~0xFEDF
+
+
+//-----------------------------------------------------
+//
+// Redifine 8192C register definition for compatibility
+//
+//-----------------------------------------------------
+
+// TODO: use these definition when using REG_xxx naming rule.
+// NOTE: DO NOT Remove these definition. Use later.
+
+#define EFUSE_CTRL REG_EFUSE_CTRL // E-Fuse Control.
+#define EFUSE_TEST REG_EFUSE_TEST // E-Fuse Test.
+#define MSR (REG_CR + 2) // Media Status register
+#define ISR REG_HISR_88E
+#define TSFR REG_TSFTR // Timing Sync Function Timer Register.
+
+#define PBP REG_PBP
+
+// Redifine MACID register, to compatible prior ICs.
+#define IDR0 REG_MACID // MAC ID Register, Offset 0x0050-0x0053
+#define IDR4 (REG_MACID + 4) // MAC ID Register, Offset 0x0054-0x0055
+
+
+//
+// 9. Security Control Registers (Offset: )
+//
+#define RWCAM REG_CAMCMD //IN 8190 Data Sheet is called CAMcmd
+#define WCAMI REG_CAMWRITE // Software write CAM input content
+#define RCAMO REG_CAMREAD // Software read/write CAM config
+#define CAMDBG REG_CAMDBG
+#define SECR REG_SECCFG //Security Configuration Register
+
+// Unused register
+#define UnusedRegister 0x1BF
+#define DCAM UnusedRegister
+#define PSR UnusedRegister
+#define BBAddr UnusedRegister
+#define PhyDataR UnusedRegister
+
+// Min Spacing related settings.
+#define MAX_MSS_DENSITY_2T 0x13
+#define MAX_MSS_DENSITY_1T 0x0A
+
+//----------------------------------------------------------------------------
+// 8192C Cmd9346CR bits (Offset 0xA, 16bit)
+//----------------------------------------------------------------------------
+#define CmdEEPROM_En BIT5 // EEPROM enable when set 1
+#define CmdEERPOMSEL BIT4 // System EEPROM select, 0: boot from E-FUSE, 1: The EEPROM used is 9346
+#define Cmd9346CR_9356SEL BIT4
+
+//----------------------------------------------------------------------------
+// 8192C GPIO MUX Configuration Register (offset 0x40, 4 byte)
+//----------------------------------------------------------------------------
+#define GPIOSEL_GPIO 0
+#define GPIOSEL_ENBT BIT5
+
+//----------------------------------------------------------------------------
+// 8192C GPIO PIN Control Register (offset 0x44, 4 byte)
+//----------------------------------------------------------------------------
+#define GPIO_IN REG_GPIO_PIN_CTRL // GPIO pins input value
+#define GPIO_OUT (REG_GPIO_PIN_CTRL+1) // GPIO pins output value
+#define GPIO_IO_SEL (REG_GPIO_PIN_CTRL+2) // GPIO pins output enable when a bit is set to "1"; otherwise, input is configured.
+#define GPIO_MOD (REG_GPIO_PIN_CTRL+3)
+
+//----------------------------------------------------------------------------
+// 8723/8188E Host System Interrupt Mask Register (offset 0x58, 32 byte)
+//----------------------------------------------------------------------------
+#define HSIMR_GPIO12_0_INT_EN BIT0
+#define HSIMR_SPS_OCP_INT_EN BIT5
+#define HSIMR_RON_INT_EN BIT6
+#define HSIMR_PDN_INT_EN BIT7
+#define HSIMR_GPIO9_INT_EN BIT25
+
+
+//----------------------------------------------------------------------------
+// 8723/8188E Host System Interrupt Status Register (offset 0x5C, 32 byte)
+//----------------------------------------------------------------------------
+#define HSISR_GPIO12_0_INT BIT0
+#define HSISR_SPS_OCP_INT BIT5
+#define HSISR_RON_INT_EN BIT6
+#define HSISR_PDNINT BIT7
+#define HSISR_GPIO9_INT BIT25
+
+//----------------------------------------------------------------------------
+// 8192C (MSR) Media Status Register (Offset 0x4C, 8 bits)
+//----------------------------------------------------------------------------
+/*
+Network Type
+00: No link
+01: Link in ad hoc network
+10: Link in infrastructure network
+11: AP mode
+Default: 00b.
+*/
+#define MSR_NOLINK 0x00
+#define MSR_ADHOC 0x01
+#define MSR_INFRA 0x02
+#define MSR_AP 0x03
+
+//----------------------------------------------------------------------------
+// 88EU (MSR) Media Status Register (Offset 0x4C, 8 bits)
+//----------------------------------------------------------------------------
+#define USB_INTR_CONTENT_C2H_OFFSET 0
+#define USB_INTR_CONTENT_CPWM1_OFFSET 16
+#define USB_INTR_CONTENT_CPWM2_OFFSET 20
+#define USB_INTR_CONTENT_HISR_OFFSET 48
+#define USB_INTR_CONTENT_HISRE_OFFSET 52
+
+
+//----------------------------------------------------------------------------
+// 88E Driver Initialization Offload REG_FDHM0(Offset 0x88, 8 bits)
+//----------------------------------------------------------------------------
+//IOL config for REG_FDHM0(Reg0x88)
+#define CMD_INIT_LLT BIT0
+#define CMD_READ_EFUSE_MAP BIT1
+#define CMD_EFUSE_PATCH BIT2
+#define CMD_IOCONFIG BIT3
+#define CMD_INIT_LLT_ERR BIT4
+#define CMD_READ_EFUSE_MAP_ERR BIT5
+#define CMD_EFUSE_PATCH_ERR BIT6
+#define CMD_IOCONFIG_ERR BIT7
+
+//
+// 6. Adaptive Control Registers (Offset: 0x0160 - 0x01CF)
+//
+//----------------------------------------------------------------------------
+// 8192C Response Rate Set Register (offset 0x181, 24bits)
+//----------------------------------------------------------------------------
+#define RRSR_1M BIT0
+#define RRSR_2M BIT1
+#define RRSR_5_5M BIT2
+#define RRSR_11M BIT3
+#define RRSR_6M BIT4
+#define RRSR_9M BIT5
+#define RRSR_12M BIT6
+#define RRSR_18M BIT7
+#define RRSR_24M BIT8
+#define RRSR_36M BIT9
+#define RRSR_48M BIT10
+#define RRSR_54M BIT11
+#define RRSR_MCS0 BIT12
+#define RRSR_MCS1 BIT13
+#define RRSR_MCS2 BIT14
+#define RRSR_MCS3 BIT15
+#define RRSR_MCS4 BIT16
+#define RRSR_MCS5 BIT17
+#define RRSR_MCS6 BIT18
+#define RRSR_MCS7 BIT19
+
+//----------------------------------------------------------------------------
+// 8192C Response Rate Set Register (offset 0x1BF, 8bits)
+//----------------------------------------------------------------------------
+// WOL bit information
+#define HAL92C_WOL_PTK_UPDATE_EVENT BIT0
+#define HAL92C_WOL_GTK_UPDATE_EVENT BIT1
+
+//----------------------------------------------------------------------------
+// 8192C BW_OPMODE bits (Offset 0x203, 8bit)
+//----------------------------------------------------------------------------
+#define BW_OPMODE_20MHZ BIT2
+#define BW_OPMODE_5G BIT1
+
+
+//----------------------------------------------------------------------------
+// 8192C CAM Config Setting (offset 0x250, 1 byte)
+//----------------------------------------------------------------------------
+#define CAM_VALID BIT15
+#define CAM_NOTVALID 0x0000
+#define CAM_USEDK BIT5
+
+#define CAM_CONTENT_COUNT 8
+
+#define CAM_NONE 0x0
+#define CAM_WEP40 0x01
+#define CAM_TKIP 0x02
+#define CAM_AES 0x04
+#define CAM_WEP104 0x05
+#define CAM_SMS4 0x6
+
+#define TOTAL_CAM_ENTRY 32
+#define HALF_CAM_ENTRY 16
+
+#define CAM_CONFIG_USEDK _TRUE
+#define CAM_CONFIG_NO_USEDK _FALSE
+
+#define CAM_WRITE BIT16
+#define CAM_READ 0x00000000
+#define CAM_POLLINIG BIT31
+
+#define SCR_UseDK 0x01
+#define SCR_TxSecEnable 0x02
+#define SCR_RxSecEnable 0x04
+
+//
+// 10. Power Save Control Registers (Offset: 0x0260 - 0x02DF)
+//
+#define WOW_PMEN BIT0 // Power management Enable.
+#define WOW_WOMEN BIT1 // WoW function on or off.
+#define WOW_MAGIC BIT2 // Magic packet
+#define WOW_UWF BIT3 // Unicast Wakeup frame.
+
+//
+// 12. Host Interrupt Status Registers (Offset: 0x0300 - 0x030F)
+//
+//----------------------------------------------------------------------------
+//----------------------------------------------------------------------------
+// 8188 IMR/ISR bits
+//----------------------------------------------------------------------------
+#define IMR_DISABLED_88E 0x0
+// IMR DW0(0x0060-0063) Bit 0-31
+#define IMR_TXCCK_88E BIT30 // TXRPT interrupt when CCX bit of the packet is set
+#define IMR_PSTIMEOUT_88E BIT29 // Power Save Time Out Interrupt
+#define IMR_GTINT4_88E BIT28 // When GTIMER4 expires, this bit is set to 1
+#define IMR_GTINT3_88E BIT27 // When GTIMER3 expires, this bit is set to 1
+#define IMR_TBDER_88E BIT26 // Transmit Beacon0 Error
+#define IMR_TBDOK_88E BIT25 // Transmit Beacon0 OK
+#define IMR_TSF_BIT32_TOGGLE_88E BIT24 // TSF Timer BIT32 toggle indication interrupt
+#define IMR_BCNDMAINT0_88E BIT20 // Beacon DMA Interrupt 0
+#define IMR_BCNDERR0_88E BIT16 // Beacon Queue DMA Error 0
+#define IMR_HSISR_IND_ON_INT_88E BIT15 // HSISR Indicator (HSIMR & HSISR is true, this bit is set to 1)
+#define IMR_BCNDMAINT_E_88E BIT14 // Beacon DMA Interrupt Extension for Win7
+#define IMR_ATIMEND_88E BIT12 // CTWidnow End or ATIM Window End
+#define IMR_HISR1_IND_INT_88E BIT11 // HISR1 Indicator (HISR1 & HIMR1 is true, this bit is set to 1)
+#define IMR_C2HCMD_88E BIT10 // CPU to Host Command INT Status, Write 1 clear
+#define IMR_CPWM2_88E BIT9 // CPU power Mode exchange INT Status, Write 1 clear
+#define IMR_CPWM_88E BIT8 // CPU power Mode exchange INT Status, Write 1 clear
+#define IMR_HIGHDOK_88E BIT7 // High Queue DMA OK
+#define IMR_MGNTDOK_88E BIT6 // Management Queue DMA OK
+#define IMR_BKDOK_88E BIT5 // AC_BK DMA OK
+#define IMR_BEDOK_88E BIT4 // AC_BE DMA OK
+#define IMR_VIDOK_88E BIT3 // AC_VI DMA OK
+#define IMR_VODOK_88E BIT2 // AC_VO DMA OK
+#define IMR_RDU_88E BIT1 // Rx Descriptor Unavailable
+#define IMR_ROK_88E BIT0 // Receive DMA OK
+
+// IMR DW1(0x00B4-00B7) Bit 0-31
+#define IMR_BCNDMAINT7_88E BIT27 // Beacon DMA Interrupt 7
+#define IMR_BCNDMAINT6_88E BIT26 // Beacon DMA Interrupt 6
+#define IMR_BCNDMAINT5_88E BIT25 // Beacon DMA Interrupt 5
+#define IMR_BCNDMAINT4_88E BIT24 // Beacon DMA Interrupt 4
+#define IMR_BCNDMAINT3_88E BIT23 // Beacon DMA Interrupt 3
+#define IMR_BCNDMAINT2_88E BIT22 // Beacon DMA Interrupt 2
+#define IMR_BCNDMAINT1_88E BIT21 // Beacon DMA Interrupt 1
+#define IMR_BCNDERR7_88E BIT20 // Beacon Queue DMA Error Interrup 7
+#define IMR_BCNDERR6_88E BIT19 // Beacon Queue DMA Error Interrup 6
+#define IMR_BCNDERR5_88E BIT18 // Beacon Queue DMA Error Interrup 5
+#define IMR_BCNDERR4_88E BIT17 // Beacon Queue DMA Error Interrup 4
+#define IMR_BCNDERR3_88E BIT16 // Beacon Queue DMA Error Interrup 3
+#define IMR_BCNDERR2_88E BIT15 // Beacon Queue DMA Error Interrup 2
+#define IMR_BCNDERR1_88E BIT14 // Beacon Queue DMA Error Interrup 1
+#define IMR_ATIMEND_E_88E BIT13 // ATIM Window End Extension for Win7
+#define IMR_TXERR_88E BIT11 // Tx Error Flag Interrupt Status, write 1 clear.
+#define IMR_RXERR_88E BIT10 // Rx Error Flag INT Status, Write 1 clear
+#define IMR_TXFOVW_88E BIT9 // Transmit FIFO Overflow
+#define IMR_RXFOVW_88E BIT8 // Receive FIFO Overflow
+
+#define HAL_NIC_UNPLUG_ISR 0xFFFFFFFF // The value when the NIC is unplugged for PCI.
+
+
+#ifdef CONFIG_PCI_HCI
+//#define IMR_RX_MASK (IMR_ROK_88E|IMR_RDU_88E|IMR_RXFOVW_88E)
+#define IMR_TX_MASK (IMR_VODOK_88E|IMR_VIDOK_88E|IMR_BEDOK_88E|IMR_BKDOK_88E|IMR_MGNTDOK_88E|IMR_HIGHDOK_88E|IMR_BCNDERR0_88E)
+
+#ifdef CONFIG_CONCURRENT_MODE
+#define RT_IBSS_INT_MASKS (IMR_BCNDMAINT0_88E | IMR_TBDOK_88E | IMR_TBDER_88E | IMR_BCNDMAINT_E_88E)
+#else
+#define RT_IBSS_INT_MASKS (IMR_BCNDMAINT0_88E | IMR_TBDOK_88E | IMR_TBDER_88E)
+#endif
+
+#define RT_AC_INT_MASKS (IMR_VIDOK_88E | IMR_VODOK_88E | IMR_BEDOK_88E|IMR_BKDOK_88E)
+#define RT_BSS_INT_MASKS (RT_IBSS_INT_MASKS)
+#endif
+
+
+// 8192C EFUSE
+//----------------------------------------------------------------------------
+#define HWSET_MAX_SIZE 256
+#define HWSET_MAX_SIZE_88E 512
+
+
+
+/*===================================================================
+=====================================================================
+Here the register defines are for 92C. When the define is as same with 92C,
+we will use the 92C's define for the consistency
+So the following defines for 92C is not entire!!!!!!
+=====================================================================
+=====================================================================*/
+/*
+Based on Datasheet V33---090401
+Register Summary
+Current IOREG MAP
+0x0000h ~ 0x00FFh System Configuration (256 Bytes)
+0x0100h ~ 0x01FFh MACTOP General Configuration (256 Bytes)
+0x0200h ~ 0x027Fh TXDMA Configuration (128 Bytes)
+0x0280h ~ 0x02FFh RXDMA Configuration (128 Bytes)
+0x0300h ~ 0x03FFh PCIE EMAC Reserved Region (256 Bytes)
+0x0400h ~ 0x04FFh Protocol Configuration (256 Bytes)
+0x0500h ~ 0x05FFh EDCA Configuration (256 Bytes)
+0x0600h ~ 0x07FFh WMAC Configuration (512 Bytes)
+0x2000h ~ 0x3FFFh 8051 FW Download Region (8196 Bytes)
+*/
+ //----------------------------------------------------------------------------
+ // 8192C (TXPAUSE) transmission pause (Offset 0x522, 8 bits)
+ //----------------------------------------------------------------------------
+// Note:
+// The the bits of stoping AC(VO/VI/BE/BK) queue in datasheet RTL8192S/RTL8192C are wrong,
+// the correct arragement is VO - Bit0, VI - Bit1, BE - Bit2, and BK - Bit3.
+// 8723 and 88E may be not correct either in the eralier version. Confirmed with DD Tim.
+// By Bruce, 2011-09-22.
+#define StopBecon BIT6
+#define StopHigh BIT5
+#define StopMgt BIT4
+#define StopBK BIT3
+#define StopBE BIT2
+#define StopVI BIT1
+#define StopVO BIT0
+
+//----------------------------------------------------------------------------
+// 8192C (RCR) Receive Configuration Register (Offset 0x608, 32 bits)
+//----------------------------------------------------------------------------
+#define RCR_APPFCS BIT31 //WMAC append FCS after pauload
+#define RCR_APP_MIC BIT30 //
+#define RCR_APP_PHYSTS BIT28//
+#define RCR_APP_ICV BIT29 //
+#define RCR_APP_PHYST_RXFF BIT28 //
+#define RCR_APP_BA_SSN BIT27 //Accept BA SSN
+#define RCR_ENMBID BIT24 //Enable Multiple BssId.
+#define RCR_LSIGEN BIT23
+#define RCR_MFBEN BIT22
+#define RCR_HTC_LOC_CTRL BIT14 //MFC<--HTC=1 MFC-->HTC=0
+#define RCR_AMF BIT13 //Accept management type frame
+#define RCR_ACF BIT12 //Accept control type frame
+#define RCR_ADF BIT11 //Accept data type frame
+#define RCR_AICV BIT9 //Accept ICV error packet
+#define RCR_ACRC32 BIT8 //Accept CRC32 error packet
+#define RCR_CBSSID_BCN BIT7 //Accept BSSID match packet (Rx beacon, probe rsp)
+#define RCR_CBSSID_DATA BIT6 //Accept BSSID match packet (Data)
+#define RCR_CBSSID RCR_CBSSID_DATA //Accept BSSID match packet
+#define RCR_APWRMGT BIT5 //Accept power management packet
+#define RCR_ADD3 BIT4 //Accept address 3 match packet
+#define RCR_AB BIT3 //Accept broadcast packet
+#define RCR_AM BIT2 //Accept multicast packet
+#define RCR_APM BIT1 //Accept physical match packet
+#define RCR_AAP BIT0 //Accept all unicast packet
+#define RCR_MXDMA_OFFSET 8
+#define RCR_FIFO_OFFSET 13
+
+//-----------------------------------------------------
+//
+// 0xFE00h ~ 0xFE55h USB Configuration
+//
+//-----------------------------------------------------
+#define REG_USB_INFO 0xFE17
+#define REG_USB_SPECIAL_OPTION 0xFE55
+#define REG_USB_DMA_AGG_TO 0xFE5B
+#define REG_USB_AGG_TO 0xFE5C
+#define REG_USB_AGG_TH 0xFE5D
+
+#define REG_USB_HRPWM 0xFE58
+#define REG_USB_HCPWM 0xFE57
+
+//============================================================================
+// 8192C Regsiter Bit and Content definition
+//============================================================================
+//-----------------------------------------------------
+//
+// 0x0000h ~ 0x00FFh System Configuration
+//
+//-----------------------------------------------------
+
+//2 SYS_ISO_CTRL
+#define ISO_MD2PP BIT(0)
+#define ISO_UA2USB BIT(1)
+#define ISO_UD2CORE BIT(2)
+#define ISO_PA2PCIE BIT(3)
+#define ISO_PD2CORE BIT(4)
+#define ISO_IP2MAC BIT(5)
+#define ISO_DIOP BIT(6)
+#define ISO_DIOE BIT(7)
+#define ISO_EB2CORE BIT(8)
+#define ISO_DIOR BIT(9)
+#define PWC_EV12V BIT(15)
+
+
+//2 SYS_FUNC_EN
+#define FEN_BBRSTB BIT(0)
+#define FEN_BB_GLB_RSTn BIT(1)
+#define FEN_USBA BIT(2)
+#define FEN_UPLL BIT(3)
+#define FEN_USBD BIT(4)
+#define FEN_DIO_PCIE BIT(5)
+#define FEN_PCIEA BIT(6)
+#define FEN_PPLL BIT(7)
+#define FEN_PCIED BIT(8)
+#define FEN_DIOE BIT(9)
+#define FEN_CPUEN BIT(10)
+#define FEN_DCORE BIT(11)
+#define FEN_ELDR BIT(12)
+#define FEN_DIO_RF BIT(13)
+#define FEN_HWPDN BIT(14)
+#define FEN_MREGEN BIT(15)
+
+//2 APS_FSMCO
+#define PFM_LDALL BIT(0)
+#define PFM_ALDN BIT(1)
+#define PFM_LDKP BIT(2)
+#define PFM_WOWL BIT(3)
+#define EnPDN BIT(4)
+#define PDN_PL BIT(5)
+#define APFM_ONMAC BIT(8)
+#define APFM_OFF BIT(9)
+#define APFM_RSM BIT(10)
+#define AFSM_HSUS BIT(11)
+#define AFSM_PCIE BIT(12)
+#define APDM_MAC BIT(13)
+#define APDM_HOST BIT(14)
+#define APDM_HPDN BIT(15)
+#define RDY_MACON BIT(16)
+#define SUS_HOST BIT(17)
+#define ROP_ALD BIT(20)
+#define ROP_PWR BIT(21)
+#define ROP_SPS BIT(22)
+#define SOP_MRST BIT(25)
+#define SOP_FUSE BIT(26)
+#define SOP_ABG BIT(27)
+#define SOP_AMB BIT(28)
+#define SOP_RCK BIT(29)
+#define SOP_A8M BIT(30)
+#define XOP_BTCK BIT(31)
+
+//2 SYS_CLKR
+#define ANAD16V_EN BIT(0)
+#define ANA8M BIT(1)
+#define MACSLP BIT(4)
+#define LOADER_CLK_EN BIT(5)
+
+
+//2 9346CR
+
+#define BOOT_FROM_EEPROM BIT(4)
+#define EEPROM_EN BIT(5)
+
+
+//2 SPS0_CTRL
+
+
+//2 SPS_OCP_CFG
+
+
+//2 RF_CTRL
+#define RF_EN BIT(0)
+#define RF_RSTB BIT(1)
+#define RF_SDMRSTB BIT(2)
+
+
+
+//2 LDOV12D_CTRL
+#define LDV12_EN BIT(0)
+#define LDV12_SDBY BIT(1)
+#define LPLDO_HSM BIT(2)
+#define LPLDO_LSM_DIS BIT(3)
+#define _LDV12_VADJ(x) (((x) & 0xF) << 4)
+
+
+//2EFUSE_CTRL
+#define ALD_EN BIT(18)
+#define EF_PD BIT(19)
+#define EF_FLAG BIT(31)
+
+//2 EFUSE_TEST (For RTL8723 partially)
+#define EF_TRPT BIT(7)
+#define EF_CELL_SEL (BIT(8)|BIT(9)) // 00: Wifi Efuse, 01: BT Efuse0, 10: BT Efuse1, 11: BT Efuse2
+#define LDOE25_EN BIT(31)
+#define EFUSE_SEL(x) (((x) & 0x3) << 8)
+#define EFUSE_SEL_MASK 0x300
+#define EFUSE_WIFI_SEL_0 0x0
+#define EFUSE_BT_SEL_0 0x1
+#define EFUSE_BT_SEL_1 0x2
+#define EFUSE_BT_SEL_2 0x3
+
+#define EFUSE_ACCESS_ON 0x69 // For RTL8723 only.
+#define EFUSE_ACCESS_OFF 0x00 // For RTL8723 only.
+
+
+//2 8051FWDL
+//2 MCUFWDL
+#define MCUFWDL_EN BIT(0)
+#define MCUFWDL_RDY BIT(1)
+#define FWDL_ChkSum_rpt BIT(2)
+#define MACINI_RDY BIT(3)
+#define BBINI_RDY BIT(4)
+#define RFINI_RDY BIT(5)
+#define WINTINI_RDY BIT(6)
+#define RAM_DL_SEL BIT(7) // 1:RAM, 0:ROM
+#define ROM_DLEN BIT(19)
+#define CPRST BIT(23)
+
+
+
+//2 REG_SYS_CFG
+#define XCLK_VLD BIT(0)
+#define ACLK_VLD BIT(1)
+#define UCLK_VLD BIT(2)
+#define PCLK_VLD BIT(3)
+#define PCIRSTB BIT(4)
+#define V15_VLD BIT(5)
+#define SW_OFFLOAD_EN BIT(7)
+#define SIC_IDLE BIT(8)
+#define BD_MAC2 BIT(9)
+#define BD_MAC1 BIT(10)
+#define IC_MACPHY_MODE BIT(11)
+#define CHIP_VER (BIT(12)|BIT(13)|BIT(14)|BIT(15))
+#define BT_FUNC BIT(16)
+#define VENDOR_ID BIT(19)
+#define PAD_HWPD_IDN BIT(22)
+#define TRP_VAUX_EN BIT(23) // RTL ID
+#define TRP_BT_EN BIT(24)
+#define BD_PKG_SEL BIT(25)
+#define BD_HCI_SEL BIT(26)
+#define TYPE_ID BIT(27)
+
+#define CHIP_VER_RTL_MASK 0xF000 //Bit 12 ~ 15
+#define CHIP_VER_RTL_SHIFT 12
+
+
+//2REG_GPIO_OUTSTS (For RTL8723 only)
+#define EFS_HCI_SEL (BIT(0)|BIT(1))
+#define PAD_HCI_SEL (BIT(2)|BIT(3))
+#define HCI_SEL (BIT(4)|BIT(5))
+#define PKG_SEL_HCI BIT(6)
+#define FEN_GPS BIT(7)
+#define FEN_BT BIT(8)
+#define FEN_WL BIT(9)
+#define FEN_PCI BIT(10)
+#define FEN_USB BIT(11)
+#define BTRF_HWPDN_N BIT(12)
+#define WLRF_HWPDN_N BIT(13)
+#define PDN_BT_N BIT(14)
+#define PDN_GPS_N BIT(15)
+#define BT_CTL_HWPDN BIT(16)
+#define GPS_CTL_HWPDN BIT(17)
+#define PPHY_SUSB BIT(20)
+#define UPHY_SUSB BIT(21)
+#define PCI_SUSEN BIT(22)
+#define USB_SUSEN BIT(23)
+#define RF_RL_ID (BIT(31)|BIT(30)|BIT(29)|BIT(28))
+
+
+//2SYS_CFG
+#define RTL_ID BIT(23) // TestChip ID, 1:Test(RLE); 0:MP(RL)
+
+//-----------------------------------------------------
+//
+// 0x0100h ~ 0x01FFh MACTOP General Configuration
+//
+//-----------------------------------------------------
+
+
+//2 Function Enable Registers
+//2 CR
+
+
+
+#define HCI_TXDMA_EN BIT(0)
+#define HCI_RXDMA_EN BIT(1)
+#define TXDMA_EN BIT(2)
+#define RXDMA_EN BIT(3)
+#define PROTOCOL_EN BIT(4)
+#define SCHEDULE_EN BIT(5)
+#define MACTXEN BIT(6)
+#define MACRXEN BIT(7)
+#define ENSWBCN BIT(8)
+#define ENSEC BIT(9)
+#define CALTMR_EN BIT(10) // 32k CAL TMR enable
+
+// Network type
+#define _NETTYPE(x) (((x) & 0x3) << 16)
+#define MASK_NETTYPE 0x30000
+#define NT_NO_LINK 0x0
+#define NT_LINK_AD_HOC 0x1
+#define NT_LINK_AP 0x2
+#define NT_AS_AP 0x3
+
+
+
+//2 PBP - Page Size Register
+#define GET_RX_PAGE_SIZE(value) ((value) & 0xF)
+#define GET_TX_PAGE_SIZE(value) (((value) & 0xF0) >> 4)
+#define _PSRX_MASK 0xF
+#define _PSTX_MASK 0xF0
+#define _PSRX(x) (x)
+#define _PSTX(x) ((x) << 4)
+
+#define PBP_64 0x0
+#define PBP_128 0x1
+#define PBP_256 0x2
+#define PBP_512 0x3
+#define PBP_1024 0x4
+
+
+//2 TX/RXDMA
+#define RXDMA_ARBBW_EN BIT(0)
+#define RXSHFT_EN BIT(1)
+#define RXDMA_AGG_EN BIT(2)
+#define QS_VO_QUEUE BIT(8)
+#define QS_VI_QUEUE BIT(9)
+#define QS_BE_QUEUE BIT(10)
+#define QS_BK_QUEUE BIT(11)
+#define QS_MANAGER_QUEUE BIT(12)
+#define QS_HIGH_QUEUE BIT(13)
+
+#define HQSEL_VOQ BIT(0)
+#define HQSEL_VIQ BIT(1)
+#define HQSEL_BEQ BIT(2)
+#define HQSEL_BKQ BIT(3)
+#define HQSEL_MGTQ BIT(4)
+#define HQSEL_HIQ BIT(5)
+
+// For normal driver, 0x10C
+#define _TXDMA_HIQ_MAP(x) (((x)&0x3) << 14)
+#define _TXDMA_MGQ_MAP(x) (((x)&0x3) << 12)
+#define _TXDMA_BKQ_MAP(x) (((x)&0x3) << 10)
+#define _TXDMA_BEQ_MAP(x) (((x)&0x3) << 8 )
+#define _TXDMA_VIQ_MAP(x) (((x)&0x3) << 6 )
+#define _TXDMA_VOQ_MAP(x) (((x)&0x3) << 4 )
+
+#define QUEUE_LOW 1
+#define QUEUE_NORMAL 2
+#define QUEUE_HIGH 3
+
+
+
+//2 TRXFF_BNDY
+
+
+//2 LLT_INIT
+#define _LLT_NO_ACTIVE 0x0
+#define _LLT_WRITE_ACCESS 0x1
+#define _LLT_READ_ACCESS 0x2
+
+#define _LLT_INIT_DATA(x) ((x) & 0xFF)
+#define _LLT_INIT_ADDR(x) (((x) & 0xFF) << 8)
+#define _LLT_OP(x) (((x) & 0x3) << 30)
+#define _LLT_OP_VALUE(x) (((x) >> 30) & 0x3)
+
+
+//-----------------------------------------------------
+//
+// 0x0200h ~ 0x027Fh TXDMA Configuration
+//
+//-----------------------------------------------------
+//2RQPN
+#define _HPQ(x) ((x) & 0xFF)
+#define _LPQ(x) (((x) & 0xFF) << 8)
+#define _PUBQ(x) (((x) & 0xFF) << 16)
+#define _NPQ(x) ((x) & 0xFF) // NOTE: in RQPN_NPQ register
+
+
+#define HPQ_PUBLIC_DIS BIT(24)
+#define LPQ_PUBLIC_DIS BIT(25)
+#define LD_RQPN BIT(31)
+
+
+//2TDECTRL
+#define BCN_VALID BIT(16)
+#define BCN_HEAD(x) (((x) & 0xFF) << 8)
+#define BCN_HEAD_MASK 0xFF00
+
+
+//2 TDECTL
+#define BLK_DESC_NUM_SHIFT 4
+#define BLK_DESC_NUM_MASK 0xF
+
+
+//2 TXDMA_OFFSET_CHK
+#define DROP_DATA_EN BIT(9)
+
+
+
+
+//-----------------------------------------------------
+//
+// 0x0280h ~ 0x028Bh RX DMA Configuration
+//
+//-----------------------------------------------------
+
+// REG_RXDMA_CONTROL, 0x0286h
+// Write only. When this bit is set, RXDMA will decrease RX PKT counter by one. Before
+// this bit is polled, FW shall update RXFF_RD_PTR first. This register is write pulse and auto clear.
+//#define RXPKT_RELEASE_POLL BIT(0)
+// Read only. When RXMA finishes on-going DMA operation, RXMDA will report idle state in
+// this bit. FW can start releasing packets after RXDMA entering idle mode.
+//#define RXDMA_IDLE BIT(1)
+// When this bit is set, RXDMA will enter this mode after on-going RXDMA packet to host
+// completed, and stop DMA packet to host. RXDMA will then report Default: 0;
+//#define RW_RELEASE_EN BIT(2)
+
+//2 REG_RXPKT_NUM, 0x0284
+#define RXPKT_RELEASE_POLL BIT(16)
+#define RXDMA_IDLE BIT(17)
+#define RW_RELEASE_EN BIT(18)
+
+//-----------------------------------------------------
+//
+// 0x0400h ~ 0x047Fh Protocol Configuration
+//
+//-----------------------------------------------------
+//2 FWHW_TXQ_CTRL
+#define EN_AMPDU_RTY_NEW BIT(7)
+
+
+//2 SPEC SIFS
+#define _SPEC_SIFS_CCK(x) ((x) & 0xFF)
+#define _SPEC_SIFS_OFDM(x) (((x) & 0xFF) << 8)
+
+//2 RL
+#define RETRY_LIMIT_SHORT_SHIFT 8
+#define RETRY_LIMIT_LONG_SHIFT 0
+
+
+
+
+
+//-----------------------------------------------------
+//
+// 0x0500h ~ 0x05FFh EDCA Configuration
+//
+//-----------------------------------------------------
+
+
+
+//2 EDCA setting
+#define AC_PARAM_TXOP_LIMIT_OFFSET 16
+#define AC_PARAM_ECW_MAX_OFFSET 12
+#define AC_PARAM_ECW_MIN_OFFSET 8
+#define AC_PARAM_AIFS_OFFSET 0
+
+
+
+#define _LRL(x) ((x) & 0x3F)
+#define _SRL(x) (((x) & 0x3F) << 8)
+
+
+//2 BCN_CTRL
+#define EN_MBSSID BIT(1)
+#define EN_TXBCN_RPT BIT(2)
+#define EN_BCN_FUNCTION BIT(3)
+#define DIS_TSF_UPDATE BIT(3)
+
+// The same function but different bit field.
+#define DIS_TSF_UDT0_NORMAL_CHIP BIT(4)
+#define DIS_TSF_UDT0_TEST_CHIP BIT(5)
+#define STOP_BCNQ BIT(6)
+
+
+//2 ACMHWCTRL
+#define AcmHw_HwEn BIT(0)
+#define AcmHw_BeqEn BIT(1)
+#define AcmHw_ViqEn BIT(2)
+#define AcmHw_VoqEn BIT(3)
+#define AcmHw_BeqStatus BIT(4)
+#define AcmHw_ViqStatus BIT(5)
+#define AcmHw_VoqStatus BIT(6)
+
+
+
+//-----------------------------------------------------
+//
+// 0x0600h ~ 0x07FFh WMAC Configuration
+//
+//-----------------------------------------------------
+//2APSD_CTRL
+#define APSDOFF BIT(6)
+#define APSDOFF_STATUS BIT(7)
+
+
+#define RATE_BITMAP_ALL 0xFFFFF
+
+// Only use CCK 1M rate for ACK
+#define RATE_RRSR_CCK_ONLY_1M 0xFFFF1
+
+//2 TCR
+#define TSFRST BIT(0)
+#define DIS_GCLK BIT(1)
+#define PAD_SEL BIT(2)
+#define PWR_ST BIT(6)
+#define PWRBIT_OW_EN BIT(7)
+#define ACRC BIT(8)
+#define CFENDFORM BIT(9)
+#define ICV BIT(10)
+
+
+
+//2 RCR
+#define AAP BIT(0)
+#define APM BIT(1)
+#define AM BIT(2)
+#define AB BIT(3)
+#define ADD3 BIT(4)
+#define APWRMGT BIT(5)
+#define CBSSID BIT(6)
+#define CBSSID_DATA BIT(6)
+#define CBSSID_BCN BIT(7)
+#define ACRC32 BIT(8)
+#define AICV BIT(9)
+#define ADF BIT(11)
+#define ACF BIT(12)
+#define AMF BIT(13)
+#define HTC_LOC_CTRL BIT(14)
+#define UC_DATA_EN BIT(16)
+#define BM_DATA_EN BIT(17)
+#define MFBEN BIT(22)
+#define LSIGEN BIT(23)
+#define EnMBID BIT(24)
+#define APP_BASSN BIT(27)
+#define APP_PHYSTS BIT(28)
+#define APP_ICV BIT(29)
+#define APP_MIC BIT(30)
+#define APP_FCS BIT(31)
+
+
+//2 SECCFG
+#define SCR_TxUseDK BIT(0) //Force Tx Use Default Key
+#define SCR_RxUseDK BIT(1) //Force Rx Use Default Key
+#define SCR_TxEncEnable BIT(2) //Enable Tx Encryption
+#define SCR_RxDecEnable BIT(3) //Enable Rx Decryption
+#define SCR_SKByA2 BIT(4) //Search kEY BY A2
+#define SCR_NoSKMC BIT(5) //No Key Search Multicast
+#define SCR_TXBCUSEDK BIT(6) // Force Tx Broadcast packets Use Default Key
+#define SCR_RXBCUSEDK BIT(7) // Force Rx Broadcast packets Use Default Key
+
+
+//-----------------------------------------------------
+//
+// RTL8188E SDIO Configuration
+//
+//-----------------------------------------------------
+
+// I/O bus domain address mapping
+#define SDIO_LOCAL_BASE 0x10250000
+#define WLAN_IOREG_BASE 0x10260000
+#define FIRMWARE_FIFO_BASE 0x10270000
+#define TX_HIQ_BASE 0x10310000
+#define TX_MIQ_BASE 0x10320000
+#define TX_LOQ_BASE 0x10330000
+#define RX_RX0FF_BASE 0x10340000
+
+// SDIO host local register space mapping.
+#define SDIO_LOCAL_MSK 0x0FFF
+#define WLAN_IOREG_MSK 0x7FFF
+#define WLAN_FIFO_MSK 0x1FFF // Aggregation Length[12:0]
+#define WLAN_RX0FF_MSK 0x0003
+
+#define SDIO_WITHOUT_REF_DEVICE_ID 0 // Without reference to the SDIO Device ID
+#define SDIO_LOCAL_DEVICE_ID 0 // 0b[16], 000b[15:13]
+#define WLAN_TX_HIQ_DEVICE_ID 4 // 0b[16], 100b[15:13]
+#define WLAN_TX_MIQ_DEVICE_ID 5 // 0b[16], 101b[15:13]
+#define WLAN_TX_LOQ_DEVICE_ID 6 // 0b[16], 110b[15:13]
+#define WLAN_RX0FF_DEVICE_ID 7 // 0b[16], 111b[15:13]
+#define WLAN_IOREG_DEVICE_ID 8 // 1b[16]
+
+// SDIO Tx Free Page Index
+#define HI_QUEUE_IDX 0
+#define MID_QUEUE_IDX 1
+#define LOW_QUEUE_IDX 2
+#define PUBLIC_QUEUE_IDX 3
+
+#define SDIO_MAX_TX_QUEUE 3 // HIQ, MIQ and LOQ
+#define SDIO_MAX_RX_QUEUE 1
+
+#define SDIO_REG_TX_CTRL 0x0000 // SDIO Tx Control
+#define SDIO_REG_HIMR 0x0014 // SDIO Host Interrupt Mask
+#define SDIO_REG_HISR 0x0018 // SDIO Host Interrupt Service Routine
+#define SDIO_REG_HCPWM 0x0019 // HCI Current Power Mode
+#define SDIO_REG_RX0_REQ_LEN 0x001C // RXDMA Request Length
+#define SDIO_REG_FREE_TXPG 0x0020 // Free Tx Buffer Page
+#define SDIO_REG_HCPWM1 0x0024 // HCI Current Power Mode 1
+#define SDIO_REG_HCPWM2 0x0026 // HCI Current Power Mode 2
+#define SDIO_REG_HTSFR_INFO 0x0030 // HTSF Informaion
+#define SDIO_REG_HRPWM1 0x0080 // HCI Request Power Mode 1
+#define SDIO_REG_HRPWM2 0x0082 // HCI Request Power Mode 2
+#define SDIO_REG_HPS_CLKR 0x0084 // HCI Power Save Clock
+#define SDIO_REG_HSUS_CTRL 0x0086 // SDIO HCI Suspend Control
+#define SDIO_REG_HIMR_ON 0x0090 // SDIO Host Extension Interrupt Mask Always
+#define SDIO_REG_HISR_ON 0x0091 // SDIO Host Extension Interrupt Status Always
+
+#define SDIO_HIMR_DISABLED 0
+
+// RTL8188E SDIO Host Interrupt Mask Register
+#define SDIO_HIMR_RX_REQUEST_MSK BIT0
+#define SDIO_HIMR_AVAL_MSK BIT1
+#define SDIO_HIMR_TXERR_MSK BIT2
+#define SDIO_HIMR_RXERR_MSK BIT3
+#define SDIO_HIMR_TXFOVW_MSK BIT4
+#define SDIO_HIMR_RXFOVW_MSK BIT5
+#define SDIO_HIMR_TXBCNOK_MSK BIT6
+#define SDIO_HIMR_TXBCNERR_MSK BIT7
+#define SDIO_HIMR_BCNERLY_INT_MSK BIT16
+#define SDIO_HIMR_C2HCMD_MSK BIT17
+#define SDIO_HIMR_CPWM1_MSK BIT18
+#define SDIO_HIMR_CPWM2_MSK BIT19
+#define SDIO_HIMR_HSISR_IND_MSK BIT20
+#define SDIO_HIMR_GTINT3_IND_MSK BIT21
+#define SDIO_HIMR_GTINT4_IND_MSK BIT22
+#define SDIO_HIMR_PSTIMEOUT_MSK BIT23
+#define SDIO_HIMR_OCPINT_MSK BIT24
+#define SDIO_HIMR_ATIMEND_MSK BIT25
+#define SDIO_HIMR_ATIMEND_E_MSK BIT26
+#define SDIO_HIMR_CTWEND_MSK BIT27
+
+//RTL8188E SDIO Specific
+#define SDIO_HIMR_MCU_ERR_MSK BIT28
+#define SDIO_HIMR_TSF_BIT32_TOGGLE_MSK BIT29
+
+// SDIO Host Interrupt Service Routine
+#define SDIO_HISR_RX_REQUEST BIT0
+#define SDIO_HISR_AVAL BIT1
+#define SDIO_HISR_TXERR BIT2
+#define SDIO_HISR_RXERR BIT3
+#define SDIO_HISR_TXFOVW BIT4
+#define SDIO_HISR_RXFOVW BIT5
+#define SDIO_HISR_TXBCNOK BIT6
+#define SDIO_HISR_TXBCNERR BIT7
+#define SDIO_HISR_BCNERLY_INT BIT16
+#define SDIO_HISR_C2HCMD BIT17
+#define SDIO_HISR_CPWM1 BIT18
+#define SDIO_HISR_CPWM2 BIT19
+#define SDIO_HISR_HSISR_IND BIT20
+#define SDIO_HISR_GTINT3_IND BIT21
+#define SDIO_HISR_GTINT4_IND BIT22
+#define SDIO_HISR_PSTIMEOUT BIT23
+#define SDIO_HISR_OCPINT BIT24
+#define SDIO_HISR_ATIMEND BIT25
+#define SDIO_HISR_ATIMEND_E BIT26
+#define SDIO_HISR_CTWEND BIT27
+
+//RTL8188E SDIO Specific
+#define SDIO_HISR_MCU_ERR BIT28
+#define SDIO_HISR_TSF_BIT32_TOGGLE BIT29
+
+#define MASK_SDIO_HISR_CLEAR (SDIO_HISR_TXERR |\
+ SDIO_HISR_RXERR |\
+ SDIO_HISR_TXFOVW |\
+ SDIO_HISR_RXFOVW |\
+ SDIO_HISR_TXBCNOK |\
+ SDIO_HISR_TXBCNERR |\
+ SDIO_HISR_C2HCMD |\
+ SDIO_HISR_CPWM1 |\
+ SDIO_HISR_CPWM2 |\
+ SDIO_HISR_HSISR_IND |\
+ SDIO_HISR_GTINT3_IND |\
+ SDIO_HISR_GTINT4_IND |\
+ SDIO_HISR_PSTIMEOUT |\
+ SDIO_HISR_OCPINT)
+
+// SDIO HCI Suspend Control Register
+#define HCI_RESUME_PWR_RDY BIT1
+#define HCI_SUS_CTRL BIT0
+
+// SDIO Tx FIFO related
+#define SDIO_TX_FREE_PG_QUEUE 4 // The number of Tx FIFO free page
+#define SDIO_TX_FIFO_PAGE_SZ 128
+
+/* move to rtl8188e_xmit.h
+#if DEV_BUS_TYPE == RT_SDIO_INTERFACE
+ #define MAX_TX_AGG_PACKET_NUMBER 0x8
+#else
+ #define MAX_TX_AGG_PACKET_NUMBER 0xFF
+#endif
+*/
+
+// vivi added for new cam search flow, 20091028
+//#define SCR_TxUseBroadcastDK BIT6 // Force Tx Use Broadcast Default Key
+//#define SCR_RxUseBroadcastDK BIT7 // Force Rx Use Broadcast Default Key
+
+//-----------------------------------------------------
+//
+// 0xFE00h ~ 0xFE55h USB Configuration
+//
+//-----------------------------------------------------
+
+//2 USB Information (0xFE17)
+#define USB_IS_HIGH_SPEED 0
+#define USB_IS_FULL_SPEED 1
+#define USB_SPEED_MASK BIT(5)
+
+#define USB_NORMAL_SIE_EP_MASK 0xF
+#define USB_NORMAL_SIE_EP_SHIFT 4
+
+
+//2 Special Option
+#define USB_AGG_EN BIT(3)
+
+// 0; Use interrupt endpoint to upload interrupt pkt
+// 1; Use bulk endpoint to upload interrupt pkt,
+#define INT_BULK_SEL BIT(4)
+
+
+
+//2REG_C2HEVT_CLEAR
+#define C2H_EVT_HOST_CLOSE 0x00 // Set by driver and notify FW that the driver has read the C2H command message
+#define C2H_EVT_FW_CLOSE 0xFF // Set by FW indicating that FW had set the C2H command message and it's not yet read by driver.
+
+
+//2REG_MULTI_FUNC_CTRL(For RTL8723 Only)
+#define WL_HWPDN_EN BIT0 // Enable GPIO[9] as WiFi HW PDn source
+#define WL_HWPDN_SL BIT1 // WiFi HW PDn polarity control
+#define WL_FUNC_EN BIT2 // WiFi function enable
+#define WL_HWROF_EN BIT3 // Enable GPIO[9] as WiFi RF HW PDn source
+#define BT_HWPDN_EN BIT16 // Enable GPIO[11] as BT HW PDn source
+#define BT_HWPDN_SL BIT17 // BT HW PDn polarity control
+#define BT_FUNC_EN BIT18 // BT function enable
+#define BT_HWROF_EN BIT19 // Enable GPIO[11] as BT/GPS RF HW PDn source
+#define GPS_HWPDN_EN BIT20 // Enable GPIO[10] as GPS HW PDn source
+#define GPS_HWPDN_SL BIT21 // GPS HW PDn polarity control
+#define GPS_FUNC_EN BIT22 // GPS function enable
+
+
+//3 REG_LIFECTRL_CTRL
+#define HAL92C_EN_PKT_LIFE_TIME_BK BIT3
+#define HAL92C_EN_PKT_LIFE_TIME_BE BIT2
+#define HAL92C_EN_PKT_LIFE_TIME_VI BIT1
+#define HAL92C_EN_PKT_LIFE_TIME_VO BIT0
+
+#define HAL92C_MSDU_LIFE_TIME_UNIT 128 // in us, said by Tim.
+
+//========================================================
+// General definitions
+//========================================================
+//#if (HAL_8195A_USB == 1)
+//#define LAST_ENTRY_OF_TX_PKT_BUFFER 255
+//#else
+#define LAST_ENTRY_OF_TX_PKT_BUFFER 176 // 22k 22528 bytes
+//#endif
+
+#define POLLING_LLT_THRESHOLD 20
+//#if RTL8188E_FOR_MP_TEST == 1
+//#define POLLING_READY_TIMEOUT_COUNT 3000
+//#else
+#define POLLING_READY_TIMEOUT_COUNT 1000
+//#endif
+// GPIO BIT
+#define HAL_8188E_HW_GPIO_WPS_BIT BIT7
+
+#if 0//(RTL8188E_SUPPORT == 1)
+////////////////////////////////ONLY for 88EE/////////////////////////////////
+//
+// Host Interrupt Status Registers (Offset: 0x00B4-00B7, 0x00BC-00BF)
+// Host Interrupt Mask Registers (Offset: 0x00B0-00B3, 0x00B8-00BB)
+//
+//----------------------------------------------------------------------------
+// 8188 IMR/ISR bits
+//----------------------------------------------------------------------------
+#define IMR_DISABLED_88E 0x0
+// IMR DW0(0x00B0-00B3) Bit 0-31
+#define IMR_TXCCK_88E BIT30 // TXRPT interrupt when CCX bit of the packet is set
+#define IMR_PSTIMEOUT_88E BIT29 // Power Save Time Out Interrupt
+#define IMR_GTINT4_88E BIT28 // When GTIMER4 expires, this bit is set to 1
+#define IMR_GTINT3_88E BIT27 // When GTIMER3 expires, this bit is set to 1
+#define IMR_TBDER_88E BIT26 // Transmit Beacon0 Error
+#define IMR_TBDOK_88E BIT25 // Transmit Beacon0 OK
+#define IMR_TSF_BIT32_TOGGLE_88E BIT24 // TSF Timer BIT32 toggle indication interrupt
+#define IMR_BcnInt_88E BIT20 // Beacon DMA Interrupt 0
+#define IMR_BDOK_88E BIT16 // Beacon Queue DMA OK0
+#define IMR_HSISR_IND_ON_INT_88E BIT15 // HSISR Indicator (HSIMR & HSISR is true, this bit is set to 1)
+#define IMR_BCNDMAINT_E_88E BIT14 // Beacon DMA Interrupt Extension for Win7
+#define IMR_ATIMEND_88E BIT12 // CTWidnow End or ATIM Window End
+#define IMR_HISR1_IND_INT_88E BIT11 // HISR1 Indicator (HISR1 & HIMR1 is true, this bit is set to 1)
+#define IMR_C2HCMD_88E BIT10 // CPU to Host Command INT Status, Write 1 clear
+#define IMR_CPWM2_88E BIT9 // CPU power Mode exchange INT Status, Write 1 clear
+#define IMR_CPWM_88E BIT8 // CPU power Mode exchange INT Status, Write 1 clear
+#define IMR_HIGHDOK_88E BIT7 // High Queue DMA OK
+#define IMR_MGNTDOK_88E BIT6 // Management Queue DMA OK
+#define IMR_BKDOK_88E BIT5 // AC_BK DMA OK
+#define IMR_BEDOK_88E BIT4 // AC_BE DMA OK
+#define IMR_VIDOK_88E BIT3 // AC_VI DMA OK
+#define IMR_VODOK_88E BIT2 // AC_VO DMA OK
+#define IMR_RDU_88E BIT1 // Rx Descriptor Unavailable
+#define IMR_ROK_88E BIT0 // Receive DMA OK
+
+// IMR DW1(0x00B8-00BB) Bit 0-31
+#define IMR_BCNDMAINT7_88E BIT27 // Beacon DMA Interrupt 7
+#define IMR_BCNDMAINT6_88E BIT26 // Beacon DMA Interrupt 6
+#define IMR_BCNDMAINT5_88E BIT25 // Beacon DMA Interrupt 5
+#define IMR_BCNDMAINT4_88E BIT24 // Beacon DMA Interrupt 4
+#define IMR_BCNDMAINT3_88E BIT23 // Beacon DMA Interrupt 3
+#define IMR_BCNDMAINT2_88E BIT22 // Beacon DMA Interrupt 2
+#define IMR_BCNDMAINT1_88E BIT21 // Beacon DMA Interrupt 1
+#define IMR_BCNDOK7_88E BIT20 // Beacon Queue DMA OK Interrup 7
+#define IMR_BCNDOK6_88E BIT19 // Beacon Queue DMA OK Interrup 6
+#define IMR_BCNDOK5_88E BIT18 // Beacon Queue DMA OK Interrup 5
+#define IMR_BCNDOK4_88E BIT17 // Beacon Queue DMA OK Interrup 4
+#define IMR_BCNDOK3_88E BIT16 // Beacon Queue DMA OK Interrup 3
+#define IMR_BCNDOK2_88E BIT15 // Beacon Queue DMA OK Interrup 2
+#define IMR_BCNDOK1_88E BIT14 // Beacon Queue DMA OK Interrup 1
+#define IMR_ATIMEND_E_88E BIT13 // ATIM Window End Extension for Win7
+#define IMR_TXERR_88E BIT11 // Tx Error Flag Interrupt Status, write 1 clear.
+#define IMR_RXERR_88E BIT10 // Rx Error Flag INT Status, Write 1 clear
+#define IMR_TXFOVW_88E BIT9 // Transmit FIFO Overflow
+#define IMR_RXFOVW_88E BIT8 // Receive FIFO Overflow
+
+
+
+////////////////////////////////ONLY for 88EE/////////////////////////////////
+#endif //(RTL8188E_SUPPORT == 1)
+
+
+//----------------------------------------------------------------------------
+// 8192C EEPROM/EFUSE share register definition.
+//----------------------------------------------------------------------------
+
+//====================================================
+// EEPROM/Efuse PG Offset for 88EE/88EU/88ES
+//====================================================
+#define EEPROM_TX_PWR_INX_88E 0x10
+
+#define EEPROM_ChannelPlan_88E 0xB8
+#define EEPROM_XTAL_88E 0xB9
+#define EEPROM_THERMAL_METER_88E 0xBA
+#define EEPROM_IQK_LCK_88E 0xBB
+
+#define EEPROM_RF_BOARD_OPTION_88E 0xC1
+#define EEPROM_RF_FEATURE_OPTION_88E 0xC2
+#define EEPROM_RF_BT_SETTING_88E 0xC3
+#define EEPROM_VERSION_88E 0xC4
+#define EEPROM_CUSTOMERID_88E 0xC5
+#define EEPROM_RF_ANTENNA_OPT_88E 0xC9
+
+#ifdef CONFIG_RF_GAIN_OFFSET
+#define EEPROM_RF_GAIN_OFFSET_88E 0xC1
+#define EEPROM_RF_GAIN_VAL_88E 0xF6 //Physical address which is the BB gain offset value
+#endif //CONFIG_RF_GAIN_OFFSET
+
+// RTL88EE
+#define EEPROM_MAC_ADDR_88EE 0xD0
+#define EEPROM_VID_88EE 0xD6
+#define EEPROM_DID_88EE 0xD8
+#define EEPROM_SVID_88EE 0xDA
+#define EEPROM_SMID_88EE 0xDC
+
+//RTL88EU
+#define EEPROM_MAC_ADDR_88EU 0xD7
+#define EEPROM_VID_88EU 0xD0
+#define EEPROM_PID_88EU 0xD2
+#define EEPROM_USB_OPTIONAL_FUNCTION0 0xD4
+
+// RTL88ES
+#define EEPROM_MAC_ADDR_88ES 0x11A
+
+
+
+
+//====================================================
+// EEPROM/Efuse Value Type
+//====================================================
+#define EETYPE_TX_PWR 0x0
+
+//
+// Default Value for EEPROM or EFUSE!!!
+//
+#define EEPROM_Default_TSSI 0x0
+#define EEPROM_Default_TxPowerDiff 0x0
+#define EEPROM_Default_CrystalCap 0x5
+#define EEPROM_Default_BoardType 0x02 // Default: 2X2, RTL8192CE(QFPN68)
+#define EEPROM_Default_TxPower 0x1010
+#define EEPROM_Default_HT2T_TxPwr 0x10
+
+#define EEPROM_Default_LegacyHTTxPowerDiff 0x3
+#define EEPROM_Default_ThermalMeter 0x12
+
+#define EEPROM_Default_AntTxPowerDiff 0x0
+#define EEPROM_Default_TxPwDiff_CrystalCap 0x5
+#if (RTL8188ES_SUPPORT==1) //for SDIO
+#define EEPROM_Default_TxPowerLevel 0x25
+#else //for USB/PCIE
+#define EEPROM_Default_TxPowerLevel 0x2A
+#endif
+
+#define EEPROM_Default_HT40_2SDiff 0x0
+#define EEPROM_Default_HT20_Diff 2 // HT20<->40 default Tx Power Index Difference
+#define EEPROM_Default_LegacyHTTxPowerDiff 0x3
+#define EEPROM_Default_HT40_PwrMaxOffset 0
+#define EEPROM_Default_HT20_PwrMaxOffset 0
+
+#define EEPROM_Default_CrystalCap_88E 0x20
+#define EEPROM_Default_ThermalMeter_88E 0x18
+
+#ifdef CONFIG_RF_GAIN_OFFSET
+#define EEPROM_Default_RFGainOffset 0xff
+#endif //CONFIG_RF_GAIN_OFFSET
+
+//New EFUSE deafult value
+#define EEPROM_DEFAULT_24G_INDEX 0x2D
+#define EEPROM_DEFAULT_24G_HT20_DIFF 0X02
+#define EEPROM_DEFAULT_24G_OFDM_DIFF 0X04
+
+#define EEPROM_DEFAULT_5G_INDEX 0X2A
+#define EEPROM_DEFAULT_5G_HT20_DIFF 0X00
+#define EEPROM_DEFAULT_5G_OFDM_DIFF 0X04
+
+#define EEPROM_DEFAULT_DIFF 0XFE
+#define EEPROM_DEFAULT_CHANNEL_PLAN 0x7F
+#define EEPROM_DEFAULT_BOARD_OPTION 0x00
+#define EEPROM_DEFAULT_FEATURE_OPTION 0x00
+#define EEPROM_DEFAULT_BT_OPTION 0x10
+
+
+// For debug
+#define EEPROM_Default_PID 0x1234
+#define EEPROM_Default_VID 0x5678
+#define EEPROM_Default_CustomerID 0xAB
+#define EEPROM_Default_CustomerID_8188E 0x00
+#define EEPROM_Default_SubCustomerID 0xCD
+#define EEPROM_Default_Version 0
+
+#define EEPROM_CHANNEL_PLAN_FCC 0x0
+#define EEPROM_CHANNEL_PLAN_IC 0x1
+#define EEPROM_CHANNEL_PLAN_ETSI 0x2
+#define EEPROM_CHANNEL_PLAN_SPAIN 0x3
+#define EEPROM_CHANNEL_PLAN_FRANCE 0x4
+#define EEPROM_CHANNEL_PLAN_MKK 0x5
+#define EEPROM_CHANNEL_PLAN_MKK1 0x6
+#define EEPROM_CHANNEL_PLAN_ISRAEL 0x7
+#define EEPROM_CHANNEL_PLAN_TELEC 0x8
+#define EEPROM_CHANNEL_PLAN_GLOBAL_DOMAIN 0x9
+#define EEPROM_CHANNEL_PLAN_WORLD_WIDE_13 0xA
+#define EEPROM_CHANNEL_PLAN_NCC 0xB
+#define EEPROM_USB_OPTIONAL1 0xE
+#define EEPROM_CHANNEL_PLAN_BY_HW_MASK 0x80
+
+
+#define EEPROM_CID_DEFAULT 0x0
+#define EEPROM_CID_TOSHIBA 0x4
+#define EEPROM_CID_CCX 0x10 // CCX test. By Bruce, 2009-02-25.
+#define EEPROM_CID_QMI 0x0D
+#define EEPROM_CID_WHQL 0xFE // added by chiyoko for dtm, 20090108
+
+
+#define RTL_EEPROM_ID 0x8129
+
+#endif //__RTL8188E_SPEC_H__
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8188e_xmit.h b/drivers/net/wireless/rtl8723as/include/rtl8188e_xmit.h
index b2b41eafbede..842afc1a9b2f 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8188e_xmit.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8188e_xmit.h
@@ -1,311 +1,311 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __RTL8188E_XMIT_H__
-#define __RTL8188E_XMIT_H__
-
-#define MAX_TX_AGG_PACKET_NUMBER 0xFF
-//
-// Queue Select Value in TxDesc
-//
-#define QSLT_BK 0x2//0x01
-#define QSLT_BE 0x0
-#define QSLT_VI 0x5//0x4
-#define QSLT_VO 0x7//0x6
-#define QSLT_BEACON 0x10
-#define QSLT_HIGH 0x11
-#define QSLT_MGNT 0x12
-#define QSLT_CMD 0x13
-
-//For 88e early mode
-#define SET_EARLYMODE_PKTNUM(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 0, 3, __Value)
-#define SET_EARLYMODE_LEN0(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 4, 12, __Value)
-#define SET_EARLYMODE_LEN1(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 16, 12, __Value)
-#define SET_EARLYMODE_LEN2_1(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 28, 4, __Value)
-#define SET_EARLYMODE_LEN2_2(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 0, 8, __Value)
-#define SET_EARLYMODE_LEN3(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 8, 12, __Value)
-#define SET_EARLYMODE_LEN4(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 20, 12, __Value)
-
-//
-//defined for TX DESC Operation
-//
-
-#define MAX_TID (15)
-
-//OFFSET 0
-#define OFFSET_SZ 0
-#define OFFSET_SHT 16
-#define BMC BIT(24)
-#define LSG BIT(26)
-#define FSG BIT(27)
-#define OWN BIT(31)
-
-
-//OFFSET 4
-#define PKT_OFFSET_SZ 0
-#define QSEL_SHT 8
-#define RATE_ID_SHT 16
-#define NAVUSEHDR BIT(20)
-#define SEC_TYPE_SHT 22
-#define PKT_OFFSET_SHT 26
-
-//OFFSET 8
-#define AGG_EN BIT(12)
-#define AGG_BK BIT(16)
-#define AMPDU_DENSITY_SHT 20
-#define ANTSEL_A BIT(24)
-#define ANTSEL_B BIT(25)
-#define TX_ANT_CCK_SHT 26
-#define TX_ANTL_SHT 28
-#define TX_ANT_HT_SHT 30
-
-//OFFSET 12
-#define SEQ_SHT 16
-#define EN_HWSEQ BIT(31)
-
-//OFFSET 16
-#define QOS BIT(6)
-#define HW_SSN BIT(7)
-#define USERATE BIT(8)
-#define DISDATAFB BIT(10)
-#define CTS_2_SELF BIT(11)
-#define RTS_EN BIT(12)
-#define HW_RTS_EN BIT(13)
-#define DATA_SHORT BIT(24)
-#define PWR_STATUS_SHT 15
-#define DATA_SC_SHT 20
-#define DATA_BW BIT(25)
-
-//OFFSET 20
-#define RTY_LMT_EN BIT(17)
-
-enum TXDESC_SC{
- SC_DONT_CARE = 0x00,
- SC_UPPER= 0x01,
- SC_LOWER=0x02,
- SC_DUPLICATE=0x03
-};
-//OFFSET 20
-#define SGI BIT(6)
-#define USB_TXAGG_NUM_SHT 24
-
-typedef struct txdesc_88e
-{
- //Offset 0
- u32 pktlen:16;
- u32 offset:8;
- u32 bmc:1;
- u32 htc:1;
- u32 ls:1;
- u32 fs:1;
- u32 linip:1;
- u32 noacm:1;
- u32 gf:1;
- u32 own:1;
-
- //Offset 4
- u32 macid:6;
- u32 rsvd0406:2;
- u32 qsel:5;
- u32 rd_nav_ext:1;
- u32 lsig_txop_en:1;
- u32 pifs:1;
- u32 rate_id:4;
- u32 navusehdr:1;
- u32 en_desc_id:1;
- u32 sectype:2;
- u32 rsvd0424:2;
- u32 pkt_offset:5; // unit: 8 bytes
- u32 rsvd0431:1;
-
- //Offset 8
- u32 rts_rc:6;
- u32 data_rc:6;
- u32 agg_en:1;
- u32 rd_en:1;
- u32 bar_rty_th:2;
- u32 bk:1;
- u32 morefrag:1;
- u32 raw:1;
- u32 ccx:1;
- u32 ampdu_density:3;
- u32 bt_null:1;
- u32 ant_sel_a:1;
- u32 ant_sel_b:1;
- u32 tx_ant_cck:2;
- u32 tx_antl:2;
- u32 tx_ant_ht:2;
-
- //Offset 12
- u32 nextheadpage:8;
- u32 tailpage:8;
- u32 seq:12;
- u32 cpu_handle:1;
- u32 tag1:1;
- u32 trigger_int:1;
- u32 hwseq_en:1;
-
- //Offset 16
- u32 rtsrate:5;
- u32 ap_dcfe:1;
- u32 hwseq_sel:2;
- u32 userate:1;
- u32 disrtsfb:1;
- u32 disdatafb:1;
- u32 cts2self:1;
- u32 rtsen:1;
- u32 hw_rts_en:1;
- u32 port_id:1;
- u32 pwr_status:3;
- u32 wait_dcts:1;
- u32 cts2ap_en:1;
- u32 data_sc:2;
- u32 data_stbc:2;
- u32 data_short:1;
- u32 data_bw:1;
- u32 rts_short:1;
- u32 rts_bw:1;
- u32 rts_sc:2;
- u32 vcs_stbc:2;
-
- //Offset 20
- u32 datarate:6;
- u32 sgi:1;
- u32 try_rate:1;
- u32 data_ratefb_lmt:5;
- u32 rts_ratefb_lmt:4;
- u32 rty_lmt_en:1;
- u32 data_rt_lmt:6;
- u32 usb_txagg_num:8;
-
- //Offset 24
- u32 txagg_a:5;
- u32 txagg_b:5;
- u32 use_max_len:1;
- u32 max_agg_num:5;
- u32 mcsg1_max_len:4;
- u32 mcsg2_max_len:4;
- u32 mcsg3_max_len:4;
- u32 mcs7_sgi_max_len:4;
-
- //Offset 28
- u32 checksum:16; // TxBuffSize(PCIe)/CheckSum(USB)
- u32 sw0:8; /* offset 30 */
- u32 sw1:4;
- u32 mcs15_sgi_max_len:4;
-}TXDESC, *PTXDESC;
-
-#define txdesc_set_ccx_sw_88e(txdesc, value) \
- do { \
- ((struct txdesc_88e *)(txdesc))->sw1 = (((value)>>8) & 0x0f); \
- ((struct txdesc_88e *)(txdesc))->sw0 = ((value) & 0xff); \
- } while (0)
-
-struct txrpt_ccx_88e {
- /* offset 0 */
- u8 tag1:1;
- u8 pkt_num:3;
- u8 txdma_underflow:1;
- u8 int_bt:1;
- u8 int_tri:1;
- u8 int_ccx:1;
-
- /* offset 1 */
- u8 mac_id:6;
- u8 pkt_ok:1;
- u8 bmc:1;
-
- /* offset 2 */
- u8 retry_cnt:6;
- u8 lifetime_over:1;
- u8 retry_over:1;
-
- /* offset 3 */
- u8 ccx_qtime0;
- u8 ccx_qtime1;
-
- /* offset 5 */
- u8 final_data_rate;
-
- /* offset 6 */
- u8 sw1:4;
- u8 qsel:4;
-
- /* offset 7 */
- u8 sw0;
-};
-
-#define txrpt_ccx_sw_88e(txrpt_ccx) ((txrpt_ccx)->sw0 + ((txrpt_ccx)->sw1<<8))
-#define txrpt_ccx_qtime_88e(txrpt_ccx) ((txrpt_ccx)->ccx_qtime0+((txrpt_ccx)->ccx_qtime1<<8))
-
-void rtl8188e_fill_fake_txdesc(PADAPTER padapter,u8*pDesc,u32 BufferLen,u8 IsPsPoll,u8 IsBTQosNull);
-#ifdef CONFIG_SDIO_HCI
-s32 rtl8188es_init_xmit_priv(PADAPTER padapter);
-void rtl8188es_free_xmit_priv(PADAPTER padapter);
-s32 rtl8188es_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe);
-s32 rtl8188es_mgnt_xmit(PADAPTER padapter, struct xmit_frame *pmgntframe);
-s32 rtl8188es_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
-thread_return rtl8188es_xmit_thread(thread_context context);
-s32 rtl8188es_xmit_buf_handler(PADAPTER padapter);
-#define hal_xmit_handler rtl8188es_xmit_buf_handler
-
-#ifdef CONFIG_SDIO_TX_TASKLET
-void rtl8188es_xmit_tasklet(void *priv);
-#endif
-#endif
-
-#ifdef CONFIG_USB_HCI
-s32 rtl8188eu_init_xmit_priv(PADAPTER padapter);
-void rtl8188eu_free_xmit_priv(PADAPTER padapter);
-s32 rtl8188eu_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe);
-s32 rtl8188eu_mgnt_xmit(PADAPTER padapter, struct xmit_frame *pmgntframe);
-s32 rtl8188eu_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
-s32 rtl8188eu_xmit_buf_handler(PADAPTER padapter);
-#define hal_xmit_handler rtl8188eu_xmit_buf_handler
-void rtl8188eu_xmit_tasklet(void *priv);
-s32 rtl8188eu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
-#endif
-
-#ifdef CONFIG_PCI_HCI
-s32 rtl8188ee_init_xmit_priv(PADAPTER padapter);
-void rtl8188ee_free_xmit_priv(PADAPTER padapter);
-struct xmit_buf *rtl8188ee_dequeue_xmitbuf(struct rtw_tx_ring *ring);
-void rtl8188ee_xmitframe_resume(_adapter *padapter);
-s32 rtl8188ee_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe);
-s32 rtl8188ee_mgnt_xmit(PADAPTER padapter, struct xmit_frame *pmgntframe);
-void rtl8188ee_xmit_tasklet(void *priv);
-#endif
-
-
-
-#ifdef CONFIG_TX_EARLY_MODE
-void UpdateEarlyModeInfo8188E(struct xmit_priv *pxmitpriv,struct xmit_buf *pxmitbuf );
-#endif
-
-#ifdef CONFIG_XMIT_ACK
-void dump_txrpt_ccx_88e(void *buf);
-void handle_txrpt_ccx_88e(_adapter *adapter, u8 *buf);
-#else
-#define dump_txrpt_ccx_88e(buf) do {} while(0)
-#define handle_txrpt_ccx_88e(adapter, buf) do {} while(0)
-#endif //CONFIG_XMIT_ACK
-
-void _dbg_dump_tx_info(_adapter *padapter,int frame_tag,struct tx_desc *ptxdesc);
-#endif //__RTL8188E_XMIT_H__
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __RTL8188E_XMIT_H__
+#define __RTL8188E_XMIT_H__
+
+#define MAX_TX_AGG_PACKET_NUMBER 0xFF
+//
+// Queue Select Value in TxDesc
+//
+#define QSLT_BK 0x2//0x01
+#define QSLT_BE 0x0
+#define QSLT_VI 0x5//0x4
+#define QSLT_VO 0x7//0x6
+#define QSLT_BEACON 0x10
+#define QSLT_HIGH 0x11
+#define QSLT_MGNT 0x12
+#define QSLT_CMD 0x13
+
+//For 88e early mode
+#define SET_EARLYMODE_PKTNUM(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 0, 3, __Value)
+#define SET_EARLYMODE_LEN0(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 4, 12, __Value)
+#define SET_EARLYMODE_LEN1(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 16, 12, __Value)
+#define SET_EARLYMODE_LEN2_1(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 28, 4, __Value)
+#define SET_EARLYMODE_LEN2_2(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 0, 8, __Value)
+#define SET_EARLYMODE_LEN3(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 8, 12, __Value)
+#define SET_EARLYMODE_LEN4(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 20, 12, __Value)
+
+//
+//defined for TX DESC Operation
+//
+
+#define MAX_TID (15)
+
+//OFFSET 0
+#define OFFSET_SZ 0
+#define OFFSET_SHT 16
+#define BMC BIT(24)
+#define LSG BIT(26)
+#define FSG BIT(27)
+#define OWN BIT(31)
+
+
+//OFFSET 4
+#define PKT_OFFSET_SZ 0
+#define QSEL_SHT 8
+#define RATE_ID_SHT 16
+#define NAVUSEHDR BIT(20)
+#define SEC_TYPE_SHT 22
+#define PKT_OFFSET_SHT 26
+
+//OFFSET 8
+#define AGG_EN BIT(12)
+#define AGG_BK BIT(16)
+#define AMPDU_DENSITY_SHT 20
+#define ANTSEL_A BIT(24)
+#define ANTSEL_B BIT(25)
+#define TX_ANT_CCK_SHT 26
+#define TX_ANTL_SHT 28
+#define TX_ANT_HT_SHT 30
+
+//OFFSET 12
+#define SEQ_SHT 16
+#define EN_HWSEQ BIT(31)
+
+//OFFSET 16
+#define QOS BIT(6)
+#define HW_SSN BIT(7)
+#define USERATE BIT(8)
+#define DISDATAFB BIT(10)
+#define CTS_2_SELF BIT(11)
+#define RTS_EN BIT(12)
+#define HW_RTS_EN BIT(13)
+#define DATA_SHORT BIT(24)
+#define PWR_STATUS_SHT 15
+#define DATA_SC_SHT 20
+#define DATA_BW BIT(25)
+
+//OFFSET 20
+#define RTY_LMT_EN BIT(17)
+
+enum TXDESC_SC{
+ SC_DONT_CARE = 0x00,
+ SC_UPPER= 0x01,
+ SC_LOWER=0x02,
+ SC_DUPLICATE=0x03
+};
+//OFFSET 20
+#define SGI BIT(6)
+#define USB_TXAGG_NUM_SHT 24
+
+typedef struct txdesc_88e
+{
+ //Offset 0
+ u32 pktlen:16;
+ u32 offset:8;
+ u32 bmc:1;
+ u32 htc:1;
+ u32 ls:1;
+ u32 fs:1;
+ u32 linip:1;
+ u32 noacm:1;
+ u32 gf:1;
+ u32 own:1;
+
+ //Offset 4
+ u32 macid:6;
+ u32 rsvd0406:2;
+ u32 qsel:5;
+ u32 rd_nav_ext:1;
+ u32 lsig_txop_en:1;
+ u32 pifs:1;
+ u32 rate_id:4;
+ u32 navusehdr:1;
+ u32 en_desc_id:1;
+ u32 sectype:2;
+ u32 rsvd0424:2;
+ u32 pkt_offset:5; // unit: 8 bytes
+ u32 rsvd0431:1;
+
+ //Offset 8
+ u32 rts_rc:6;
+ u32 data_rc:6;
+ u32 agg_en:1;
+ u32 rd_en:1;
+ u32 bar_rty_th:2;
+ u32 bk:1;
+ u32 morefrag:1;
+ u32 raw:1;
+ u32 ccx:1;
+ u32 ampdu_density:3;
+ u32 bt_null:1;
+ u32 ant_sel_a:1;
+ u32 ant_sel_b:1;
+ u32 tx_ant_cck:2;
+ u32 tx_antl:2;
+ u32 tx_ant_ht:2;
+
+ //Offset 12
+ u32 nextheadpage:8;
+ u32 tailpage:8;
+ u32 seq:12;
+ u32 cpu_handle:1;
+ u32 tag1:1;
+ u32 trigger_int:1;
+ u32 hwseq_en:1;
+
+ //Offset 16
+ u32 rtsrate:5;
+ u32 ap_dcfe:1;
+ u32 hwseq_sel:2;
+ u32 userate:1;
+ u32 disrtsfb:1;
+ u32 disdatafb:1;
+ u32 cts2self:1;
+ u32 rtsen:1;
+ u32 hw_rts_en:1;
+ u32 port_id:1;
+ u32 pwr_status:3;
+ u32 wait_dcts:1;
+ u32 cts2ap_en:1;
+ u32 data_sc:2;
+ u32 data_stbc:2;
+ u32 data_short:1;
+ u32 data_bw:1;
+ u32 rts_short:1;
+ u32 rts_bw:1;
+ u32 rts_sc:2;
+ u32 vcs_stbc:2;
+
+ //Offset 20
+ u32 datarate:6;
+ u32 sgi:1;
+ u32 try_rate:1;
+ u32 data_ratefb_lmt:5;
+ u32 rts_ratefb_lmt:4;
+ u32 rty_lmt_en:1;
+ u32 data_rt_lmt:6;
+ u32 usb_txagg_num:8;
+
+ //Offset 24
+ u32 txagg_a:5;
+ u32 txagg_b:5;
+ u32 use_max_len:1;
+ u32 max_agg_num:5;
+ u32 mcsg1_max_len:4;
+ u32 mcsg2_max_len:4;
+ u32 mcsg3_max_len:4;
+ u32 mcs7_sgi_max_len:4;
+
+ //Offset 28
+ u32 checksum:16; // TxBuffSize(PCIe)/CheckSum(USB)
+ u32 sw0:8; /* offset 30 */
+ u32 sw1:4;
+ u32 mcs15_sgi_max_len:4;
+}TXDESC, *PTXDESC;
+
+#define txdesc_set_ccx_sw_88e(txdesc, value) \
+ do { \
+ ((struct txdesc_88e *)(txdesc))->sw1 = (((value)>>8) & 0x0f); \
+ ((struct txdesc_88e *)(txdesc))->sw0 = ((value) & 0xff); \
+ } while (0)
+
+struct txrpt_ccx_88e {
+ /* offset 0 */
+ u8 tag1:1;
+ u8 pkt_num:3;
+ u8 txdma_underflow:1;
+ u8 int_bt:1;
+ u8 int_tri:1;
+ u8 int_ccx:1;
+
+ /* offset 1 */
+ u8 mac_id:6;
+ u8 pkt_ok:1;
+ u8 bmc:1;
+
+ /* offset 2 */
+ u8 retry_cnt:6;
+ u8 lifetime_over:1;
+ u8 retry_over:1;
+
+ /* offset 3 */
+ u8 ccx_qtime0;
+ u8 ccx_qtime1;
+
+ /* offset 5 */
+ u8 final_data_rate;
+
+ /* offset 6 */
+ u8 sw1:4;
+ u8 qsel:4;
+
+ /* offset 7 */
+ u8 sw0;
+};
+
+#define txrpt_ccx_sw_88e(txrpt_ccx) ((txrpt_ccx)->sw0 + ((txrpt_ccx)->sw1<<8))
+#define txrpt_ccx_qtime_88e(txrpt_ccx) ((txrpt_ccx)->ccx_qtime0+((txrpt_ccx)->ccx_qtime1<<8))
+
+void rtl8188e_fill_fake_txdesc(PADAPTER padapter,u8*pDesc,u32 BufferLen,u8 IsPsPoll,u8 IsBTQosNull);
+#ifdef CONFIG_SDIO_HCI
+s32 rtl8188es_init_xmit_priv(PADAPTER padapter);
+void rtl8188es_free_xmit_priv(PADAPTER padapter);
+s32 rtl8188es_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe);
+s32 rtl8188es_mgnt_xmit(PADAPTER padapter, struct xmit_frame *pmgntframe);
+s32 rtl8188es_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
+thread_return rtl8188es_xmit_thread(thread_context context);
+s32 rtl8188es_xmit_buf_handler(PADAPTER padapter);
+#define hal_xmit_handler rtl8188es_xmit_buf_handler
+
+#ifdef CONFIG_SDIO_TX_TASKLET
+void rtl8188es_xmit_tasklet(void *priv);
+#endif
+#endif
+
+#ifdef CONFIG_USB_HCI
+s32 rtl8188eu_init_xmit_priv(PADAPTER padapter);
+void rtl8188eu_free_xmit_priv(PADAPTER padapter);
+s32 rtl8188eu_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe);
+s32 rtl8188eu_mgnt_xmit(PADAPTER padapter, struct xmit_frame *pmgntframe);
+s32 rtl8188eu_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
+s32 rtl8188eu_xmit_buf_handler(PADAPTER padapter);
+#define hal_xmit_handler rtl8188eu_xmit_buf_handler
+void rtl8188eu_xmit_tasklet(void *priv);
+s32 rtl8188eu_xmitframe_complete(_adapter *padapter, struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
+#endif
+
+#ifdef CONFIG_PCI_HCI
+s32 rtl8188ee_init_xmit_priv(PADAPTER padapter);
+void rtl8188ee_free_xmit_priv(PADAPTER padapter);
+struct xmit_buf *rtl8188ee_dequeue_xmitbuf(struct rtw_tx_ring *ring);
+void rtl8188ee_xmitframe_resume(_adapter *padapter);
+s32 rtl8188ee_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe);
+s32 rtl8188ee_mgnt_xmit(PADAPTER padapter, struct xmit_frame *pmgntframe);
+void rtl8188ee_xmit_tasklet(void *priv);
+#endif
+
+
+
+#ifdef CONFIG_TX_EARLY_MODE
+void UpdateEarlyModeInfo8188E(struct xmit_priv *pxmitpriv,struct xmit_buf *pxmitbuf );
+#endif
+
+#ifdef CONFIG_XMIT_ACK
+void dump_txrpt_ccx_88e(void *buf);
+void handle_txrpt_ccx_88e(_adapter *adapter, u8 *buf);
+#else
+#define dump_txrpt_ccx_88e(buf) do {} while(0)
+#define handle_txrpt_ccx_88e(adapter, buf) do {} while(0)
+#endif //CONFIG_XMIT_ACK
+
+void _dbg_dump_tx_info(_adapter *padapter,int frame_tag,struct tx_desc *ptxdesc);
+#endif //__RTL8188E_XMIT_H__
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8192c_event.h b/drivers/net/wireless/rtl8723as/include/rtl8192c_event.h
index 1013f74a0be3..7596531fea0d 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8192c_event.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8192c_event.h
@@ -16,13 +16,13 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
*
- ******************************************************************************/
-#ifndef _RTL8192C_EVENT_H_
-#define _RTL8192C_EVENT_H_
-
-
-
-
-#endif
-
-
+ ******************************************************************************/
+#ifndef _RTL8192C_EVENT_H_
+#define _RTL8192C_EVENT_H_
+
+
+
+
+#endif
+
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8192c_hal.h b/drivers/net/wireless/rtl8723as/include/rtl8192c_hal.h
index 7daf7575fa84..2d54a1982fbe 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8192c_hal.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8192c_hal.h
@@ -843,7 +843,6 @@ void rtl8192c_ReadBluetoothCoexistInfo(PADAPTER Adapter, u8 *PROMContent, BOOLEA
//void rtl8192c_free_hal_data(_adapter * padapter);
VOID rtl8192c_EfuseParseIDCode(PADAPTER pAdapter, u8 *hwinfo);
void rtl8192c_set_hal_ops(struct hal_ops *pHalFunc);
-void rtl8192c_clone_haldata(_adapter* dst_adapter, _adapter* src_adapter);
s32 c2h_id_filter_ccx_8192c(u8 id);
#endif
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8192c_led.h b/drivers/net/wireless/rtl8723as/include/rtl8192c_led.h
index 1ccf93596896..df2a99988d9e 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8192c_led.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8192c_led.h
@@ -16,27 +16,27 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
*
- ******************************************************************************/
-#ifndef __RTL8192C_LED_H_
-#define __RTL8192C_LED_H_
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-
-
-//================================================================================
-// Interface to manipulate LED objects.
-//================================================================================
-#ifdef CONFIG_USB_HCI
-void rtl8192cu_InitSwLeds(_adapter *padapter);
-void rtl8192cu_DeInitSwLeds(_adapter *padapter);
-#endif
-#ifdef CONFIG_PCI_HCI
-void rtl8192ce_gen_RefreshLedState(PADAPTER Adapter);
-void rtl8192ce_InitSwLeds(_adapter *padapter);
-void rtl8192ce_DeInitSwLeds(_adapter *padapter);
-#endif
-
-#endif
-
+ ******************************************************************************/
+#ifndef __RTL8192C_LED_H_
+#define __RTL8192C_LED_H_
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+
+
+//================================================================================
+// Interface to manipulate LED objects.
+//================================================================================
+#ifdef CONFIG_USB_HCI
+void rtl8192cu_InitSwLeds(_adapter *padapter);
+void rtl8192cu_DeInitSwLeds(_adapter *padapter);
+#endif
+#ifdef CONFIG_PCI_HCI
+void rtl8192ce_gen_RefreshLedState(PADAPTER Adapter);
+void rtl8192ce_InitSwLeds(_adapter *padapter);
+void rtl8192ce_DeInitSwLeds(_adapter *padapter);
+#endif
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8192c_recv.h b/drivers/net/wireless/rtl8723as/include/rtl8192c_recv.h
index 1c26c8382eba..0a237dc18188 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8192c_recv.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8192c_recv.h
@@ -60,7 +60,7 @@
//#define MAX_RECVBUF_SZ (32768) // 32k
//#define MAX_RECVBUF_SZ (16384) //16K
//#define MAX_RECVBUF_SZ (10240) //10K
- #ifdef CONFIG_PLATFORM_MSTAR_TITANIA12
+ #ifdef CONFIG_PLATFORM_MSTAR
#define MAX_RECVBUF_SZ (8192) // 8K
#else
#define MAX_RECVBUF_SZ (15360) // 15k < 16k
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8192c_rf.h b/drivers/net/wireless/rtl8723as/include/rtl8192c_rf.h
index 26c678a8da43..2d6bd8cf5f62 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8192c_rf.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8192c_rf.h
@@ -16,77 +16,77 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
*
- ******************************************************************************/
-/******************************************************************************
- *
- *
- * Module: rtl8192c_rf.h ( Header File)
- *
- * Note: Collect every HAL RF type exter API or constant.
- *
- * Function:
- *
- * Export:
- *
- * Abbrev:
- *
- * History:
- * Data Who Remark
- *
- * 09/25/2008 MHC Create initial version.
- *
- *
-******************************************************************************/
-#ifndef _RTL8192C_RF_H_
-#define _RTL8192C_RF_H_
-/* Check to see if the file has been included already. */
-
-
-/*--------------------------Define Parameters-------------------------------*/
-
-//
-// For RF 6052 Series
-//
-#define RF6052_MAX_TX_PWR 0x3F
-#define RF6052_MAX_REG 0x3F
-#define RF6052_MAX_PATH 2
-/*--------------------------Define Parameters-------------------------------*/
-
-
-/*------------------------------Define structure----------------------------*/
-
-/*------------------------------Define structure----------------------------*/
-
-
-/*------------------------Export global variable----------------------------*/
-/*------------------------Export global variable----------------------------*/
-
-/*------------------------Export Marco Definition---------------------------*/
-
-/*------------------------Export Marco Definition---------------------------*/
-
-
-/*--------------------------Exported Function prototype---------------------*/
-
-//
-// RF RL6052 Series API
-//
-void rtl8192c_RF_ChangeTxPath( IN PADAPTER Adapter,
- IN u16 DataRate);
-void rtl8192c_PHY_RF6052SetBandwidth(
- IN PADAPTER Adapter,
- IN HT_CHANNEL_WIDTH Bandwidth);
-VOID rtl8192c_PHY_RF6052SetCckTxPower(
- IN PADAPTER Adapter,
- IN u8* pPowerlevel);
-VOID rtl8192c_PHY_RF6052SetOFDMTxPower(
- IN PADAPTER Adapter,
- IN u8* pPowerLevel,
- IN u8 Channel);
-int PHY_RF6052_Config8192C( IN PADAPTER Adapter );
-
-/*--------------------------Exported Function prototype---------------------*/
-
-
-#endif/* End of HalRf.h */
-
+ ******************************************************************************/
+/******************************************************************************
+ *
+ *
+ * Module: rtl8192c_rf.h ( Header File)
+ *
+ * Note: Collect every HAL RF type exter API or constant.
+ *
+ * Function:
+ *
+ * Export:
+ *
+ * Abbrev:
+ *
+ * History:
+ * Data Who Remark
+ *
+ * 09/25/2008 MHC Create initial version.
+ *
+ *
+******************************************************************************/
+#ifndef _RTL8192C_RF_H_
+#define _RTL8192C_RF_H_
+/* Check to see if the file has been included already. */
+
+
+/*--------------------------Define Parameters-------------------------------*/
+
+//
+// For RF 6052 Series
+//
+#define RF6052_MAX_TX_PWR 0x3F
+#define RF6052_MAX_REG 0x3F
+#define RF6052_MAX_PATH 2
+/*--------------------------Define Parameters-------------------------------*/
+
+
+/*------------------------------Define structure----------------------------*/
+
+/*------------------------------Define structure----------------------------*/
+
+
+/*------------------------Export global variable----------------------------*/
+/*------------------------Export global variable----------------------------*/
+
+/*------------------------Export Marco Definition---------------------------*/
+
+/*------------------------Export Marco Definition---------------------------*/
+
+
+/*--------------------------Exported Function prototype---------------------*/
+
+//
+// RF RL6052 Series API
+//
+void rtl8192c_RF_ChangeTxPath( IN PADAPTER Adapter,
+ IN u16 DataRate);
+void rtl8192c_PHY_RF6052SetBandwidth(
+ IN PADAPTER Adapter,
+ IN HT_CHANNEL_WIDTH Bandwidth);
+VOID rtl8192c_PHY_RF6052SetCckTxPower(
+ IN PADAPTER Adapter,
+ IN u8* pPowerlevel);
+VOID rtl8192c_PHY_RF6052SetOFDMTxPower(
+ IN PADAPTER Adapter,
+ IN u8* pPowerLevel,
+ IN u8 Channel);
+int PHY_RF6052_Config8192C( IN PADAPTER Adapter );
+
+/*--------------------------Exported Function prototype---------------------*/
+
+
+#endif/* End of HalRf.h */
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8192c_sreset.h b/drivers/net/wireless/rtl8723as/include/rtl8192c_sreset.h
index 5b8302fc0235..93c36282b720 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8192c_sreset.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8192c_sreset.h
@@ -16,18 +16,18 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
*
- ******************************************************************************/
-#ifndef _RTL8192C_SRESET_C_
-#define _RTL8192C_SRESET_C_
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <rtw_sreset.h>
-
-#ifdef DBG_CONFIG_ERROR_DETECT
-extern void rtl8192c_sreset_xmit_status_check(_adapter *padapter);
-extern void rtl8192c_sreset_linked_status_check(_adapter *padapter);
-#endif
-#endif
-
+ ******************************************************************************/
+#ifndef _RTL8192C_SRESET_C_
+#define _RTL8192C_SRESET_C_
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+#include <rtw_sreset.h>
+
+#ifdef DBG_CONFIG_ERROR_DETECT
+extern void rtl8192c_sreset_xmit_status_check(_adapter *padapter);
+extern void rtl8192c_sreset_linked_status_check(_adapter *padapter);
+#endif
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8192d_hal.h b/drivers/net/wireless/rtl8723as/include/rtl8192d_hal.h
index 954f6e749939..97083f0a134b 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8192d_hal.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8192d_hal.h
@@ -850,6 +850,5 @@ VOID PHY_SetPowerOnFor8192D(PADAPTER Adapter);
//void PHY_ConfigMacPhyMode92D(PADAPTER Adapter);
void rtl8192d_free_hal_data(_adapter * padapter);
void rtl8192d_set_hal_ops(struct hal_ops *pHalFunc);
-void rtl8192d_clone_haldata(_adapter* dst_adapter, _adapter* src_adapter);
#endif
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8192d_led.h b/drivers/net/wireless/rtl8723as/include/rtl8192d_led.h
index d736bda4e935..c75df2efd807 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8192d_led.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8192d_led.h
@@ -16,28 +16,28 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
*
- ******************************************************************************/
-#ifndef __RTL8192D_LED_H_
-#define __RTL8192D_LED_H_
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-
-
-//================================================================================
-// Interface to manipulate LED objects.
-//================================================================================
-#ifdef CONFIG_USB_HCI
-void rtl8192du_InitSwLeds(_adapter *padapter);
-void rtl8192du_DeInitSwLeds(_adapter *padapter);
-#endif
-
-#ifdef CONFIG_PCI_HCI
-void rtl8192de_gen_RefreshLedState(PADAPTER Adapter);
-void rtl8192de_InitSwLeds(_adapter *padapter);
-void rtl8192de_DeInitSwLeds(_adapter *padapter);
-#endif
-
-#endif
-
+ ******************************************************************************/
+#ifndef __RTL8192D_LED_H_
+#define __RTL8192D_LED_H_
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+
+
+//================================================================================
+// Interface to manipulate LED objects.
+//================================================================================
+#ifdef CONFIG_USB_HCI
+void rtl8192du_InitSwLeds(_adapter *padapter);
+void rtl8192du_DeInitSwLeds(_adapter *padapter);
+#endif
+
+#ifdef CONFIG_PCI_HCI
+void rtl8192de_gen_RefreshLedState(PADAPTER Adapter);
+void rtl8192de_InitSwLeds(_adapter *padapter);
+void rtl8192de_DeInitSwLeds(_adapter *padapter);
+#endif
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8192d_recv.h b/drivers/net/wireless/rtl8723as/include/rtl8192d_recv.h
index c8ef028cbc59..5ffec3952ed3 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8192d_recv.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8192d_recv.h
@@ -61,7 +61,7 @@
//#define MAX_RECVBUF_SZ (32768) // 32k
//#define MAX_RECVBUF_SZ (16384) //16K
//#define MAX_RECVBUF_SZ (10240) //10K
- #ifdef CONFIG_PLATFORM_MSTAR_TITANIA12
+ #ifdef CONFIG_PLATFORM_MSTAR
#define MAX_RECVBUF_SZ (8192) // 8K
#else
#define MAX_RECVBUF_SZ (15360) // 15k < 16k
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8192d_rf.h b/drivers/net/wireless/rtl8723as/include/rtl8192d_rf.h
index 0b439a3f0dd7..8fc17e256487 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8192d_rf.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8192d_rf.h
@@ -16,82 +16,82 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
*
- ******************************************************************************/
-/******************************************************************************
- *
- *
- * Module: rtl8192d_rf.h ( Header File)
- *
- * Note: Collect every HAL RF type exter API or constant.
- *
- * Function:
- *
- * Export:
- *
- * Abbrev:
- *
- * History:
- * Data Who Remark
- *
- * 09/25/2008 MHC Create initial version.
- *
- *
-******************************************************************************/
-#ifndef _RTL8192D_RF_H_
-#define _RTL8192D_RF_H_
-/* Check to see if the file has been included already. */
-
-
-/*--------------------------Define Parameters-------------------------------*/
-
-//
-// For RF 6052 Series
-//
-#define RF6052_MAX_TX_PWR 0x3F
-#define RF6052_MAX_REG 0x3F
-#define RF6052_MAX_PATH 2
-/*--------------------------Define Parameters-------------------------------*/
-
-
-/*------------------------------Define structure----------------------------*/
-
-/*------------------------------Define structure----------------------------*/
-
-
-/*------------------------Export global variable----------------------------*/
-/*------------------------Export global variable----------------------------*/
-
-/*------------------------Export Marco Definition---------------------------*/
-
-/*------------------------Export Marco Definition---------------------------*/
-
-
-/*--------------------------Exported Function prototype---------------------*/
-
-//
-// RF RL6052 Series API
-//
-void rtl8192d_RF_ChangeTxPath( IN PADAPTER Adapter,
- IN u16 DataRate);
-void rtl8192d_PHY_RF6052SetBandwidth(
- IN PADAPTER Adapter,
- IN HT_CHANNEL_WIDTH Bandwidth);
-VOID rtl8192d_PHY_RF6052SetCckTxPower(
- IN PADAPTER Adapter,
- IN u8* pPowerlevel);
-VOID rtl8192d_PHY_RF6052SetOFDMTxPower(
- IN PADAPTER Adapter,
- IN u8* pPowerLevel,
- IN u8 Channel);
-int PHY_RF6052_Config8192D( IN PADAPTER Adapter );
-
-BOOLEAN rtl8192d_PHY_EnableAnotherPHY(IN PADAPTER Adapter, IN BOOLEAN bMac0);
-
-void rtl8192d_PHY_PowerDownAnotherPHY(IN PADAPTER Adapter, IN BOOLEAN bMac0);
-
-
-/*--------------------------Exported Function prototype---------------------*/
-
-
-#endif/* End of HalRf.h */
-
+ ******************************************************************************/
+/******************************************************************************
+ *
+ *
+ * Module: rtl8192d_rf.h ( Header File)
+ *
+ * Note: Collect every HAL RF type exter API or constant.
+ *
+ * Function:
+ *
+ * Export:
+ *
+ * Abbrev:
+ *
+ * History:
+ * Data Who Remark
+ *
+ * 09/25/2008 MHC Create initial version.
+ *
+ *
+******************************************************************************/
+#ifndef _RTL8192D_RF_H_
+#define _RTL8192D_RF_H_
+/* Check to see if the file has been included already. */
+
+
+/*--------------------------Define Parameters-------------------------------*/
+
+//
+// For RF 6052 Series
+//
+#define RF6052_MAX_TX_PWR 0x3F
+#define RF6052_MAX_REG 0x3F
+#define RF6052_MAX_PATH 2
+/*--------------------------Define Parameters-------------------------------*/
+
+
+/*------------------------------Define structure----------------------------*/
+
+/*------------------------------Define structure----------------------------*/
+
+
+/*------------------------Export global variable----------------------------*/
+/*------------------------Export global variable----------------------------*/
+
+/*------------------------Export Marco Definition---------------------------*/
+
+/*------------------------Export Marco Definition---------------------------*/
+
+
+/*--------------------------Exported Function prototype---------------------*/
+
+//
+// RF RL6052 Series API
+//
+void rtl8192d_RF_ChangeTxPath( IN PADAPTER Adapter,
+ IN u16 DataRate);
+void rtl8192d_PHY_RF6052SetBandwidth(
+ IN PADAPTER Adapter,
+ IN HT_CHANNEL_WIDTH Bandwidth);
+VOID rtl8192d_PHY_RF6052SetCckTxPower(
+ IN PADAPTER Adapter,
+ IN u8* pPowerlevel);
+VOID rtl8192d_PHY_RF6052SetOFDMTxPower(
+ IN PADAPTER Adapter,
+ IN u8* pPowerLevel,
+ IN u8 Channel);
+int PHY_RF6052_Config8192D( IN PADAPTER Adapter );
+
+BOOLEAN rtl8192d_PHY_EnableAnotherPHY(IN PADAPTER Adapter, IN BOOLEAN bMac0);
+
+void rtl8192d_PHY_PowerDownAnotherPHY(IN PADAPTER Adapter, IN BOOLEAN bMac0);
+
+
+/*--------------------------Exported Function prototype---------------------*/
+
+
+#endif/* End of HalRf.h */
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8723a_bt-coexist.h b/drivers/net/wireless/rtl8723as/include/rtl8723a_bt-coexist.h
index e69a89179ed3..78d64b8d81b9 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8723a_bt-coexist.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8723a_bt-coexist.h
@@ -1461,6 +1461,7 @@ typedef struct _BT_COEXIST_8723A
u64 btInqPageStartTime; // for 2Ant
u8 c2hBtProfile; // for 1Ant
u8 btRetryCnt;
+ u16 AclTp;
u8 btInfoExt;
u8 bC2hBtInfoReqSent;
u8 bForceFwBtInfo;
@@ -1481,7 +1482,11 @@ void BTDM_SetFwDecBtPwr(PADAPTER padapter, u8 bDecBtPwr);
u8 BTDM_BtProfileSupport(PADAPTER padapter);
void BTDM_LpsLeave(PADAPTER padapter);
u8 BTDM_1Ant8723A(PADAPTER padapter);
+u8 BTDM_GetBtState8723A(PADAPTER padapter);
+u8 BTDM_IsBtInquiryPage8723A(PADAPTER padapter);
#define BT_1Ant BTDM_1Ant8723A
+#define BT_GetBtState BTDM_GetBtState8723A
+#define BT_IsBtInquiryPage BTDM_IsBtInquiryPage8723A
// ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc8723.h =====
#endif // __HALBTC8723_C__
@@ -1537,6 +1542,7 @@ void BTDM_DiminishWiFi(PADAPTER Adapter, u8 bDACOn, u8 bInterruptOn, u8 DACSwing
// HEADER/TypeDef.h
#define MAX_FW_SUPPORT_MACID_NUM 64
+#define WIFI_BUSY_TRAFFIC_TH 25
// ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtCoexist.h =====
@@ -1770,6 +1776,7 @@ u8 BTDM_IsActionHIDPAN(PADAPTER padapter);
u8 BTDM_IsActionPANA2DP(PADAPTER padapter);
u8 BTDM_IsBtDisabled(PADAPTER padapter);
#define BT_IsBtDisabled BTDM_IsBtDisabled
+sint BTDM_CheckFWState(PADAPTER padapter, sint state);
u32 BTDM_BtTxRxCounterH(PADAPTER padapter);
u32 BTDM_BtTxRxCounterL(PADAPTER padapter);
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8723a_cmd.h b/drivers/net/wireless/rtl8723as/include/rtl8723a_cmd.h
index 5839f932fe96..91202dc202dd 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8723a_cmd.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8723a_cmd.h
@@ -219,6 +219,8 @@ void rtl8192c_set_p2p_ps_offload_cmd(PADAPTER padapter, u8 p2p_ps_state);
void CheckFwRsvdPageContent(PADAPTER padapter);
+void rtl8723a_set_FwMediaStatus_cmd(PADAPTER padapter, u16 mstatus_rpt );
+
#endif
#ifdef CONFIG_TSF_RESET_OFFLOAD
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8723a_hal.h b/drivers/net/wireless/rtl8723as/include/rtl8723a_hal.h
index b486a92ec6d1..2111999b82f4 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8723a_hal.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8723a_hal.h
@@ -1,846 +1,849 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __RTL8723A_HAL_H__
-#define __RTL8723A_HAL_H__
-
-#include "rtl8723a_spec.h"
-#include "rtl8723a_pg.h"
-#include "Hal8723APhyReg.h"
-#include "Hal8723APhyCfg.h"
-#include "rtl8723a_rf.h"
-#ifdef CONFIG_BT_COEXIST
-#include "rtl8723a_bt-coexist.h"
-#endif
-#include "rtl8723a_dm.h"
-#include "rtl8723a_recv.h"
-#include "rtl8723a_xmit.h"
-#include "rtl8723a_cmd.h"
-#ifdef DBG_CONFIG_ERROR_DETECT
-#include "rtl8723a_sreset.h"
-#endif
-#include "rtw_efuse.h"
-
-#include "../hal/OUTSRC/odm_precomp.h"
-
-#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
-
- //2TODO: We should define 8192S firmware related macro settings here!!
- #define RTL819X_DEFAULT_RF_TYPE RF_1T2R
- #define RTL819X_TOTAL_RF_PATH 2
-
-//---------------------------------------------------------------------
-// RTL8723S From file
-//---------------------------------------------------------------------
- #define RTL8723_FW_UMC_IMG "rtl8723S\\rtl8723fw.bin"
- #define RTL8723_FW_UMC_B_IMG "rtl8723S\\rtl8723fw_B.bin"
- #define RTL8723_PHY_REG "rtl8723S\\PHY_REG_1T.txt"
- #define RTL8723_PHY_RADIO_A "rtl8723S\\radio_a_1T.txt"
- #define RTL8723_PHY_RADIO_B "rtl8723S\\radio_b_1T.txt"
- #define RTL8723_AGC_TAB "rtl8723S\\AGC_TAB_1T.txt"
- #define RTL8723_PHY_MACREG "rtl8723S\\MAC_REG.txt"
- #define RTL8723_PHY_REG_PG "rtl8723S\\PHY_REG_PG.txt"
- #define RTL8723_PHY_REG_MP "rtl8723S\\PHY_REG_MP.txt"
-
-//---------------------------------------------------------------------
-// RTL8723S From header
-//---------------------------------------------------------------------
-
- // Fw Array
- #define Rtl8723_FwImageArray Rtl8723SFwImgArray
- #define Rtl8723_FwUMCBCutImageArrayWithBT Rtl8723SFwUMCBCutImgArrayWithBT
- #define Rtl8723_FwUMCBCutImageArrayWithoutBT Rtl8723SFwUMCBCutImgArrayWithoutBT
-
- #define Rtl8723_ImgArrayLength Rtl8723SImgArrayLength
- #define Rtl8723_UMCBCutImgArrayWithBTLength Rtl8723SUMCBCutImgArrayWithBTLength
- #define Rtl8723_UMCBCutImgArrayWithoutBTLength Rtl8723SUMCBCutImgArrayWithoutBTLength
-
- #define Rtl8723_PHY_REG_Array_PG Rtl8723SPHY_REG_Array_PG
- #define Rtl8723_PHY_REG_Array_PGLength Rtl8723SPHY_REG_Array_PGLength
-#if MP_DRIVER == 1
- #define Rtl8723E_FwBTImgArray Rtl8723EFwBTImgArray
- #define Rtl8723E_FwBTImgArrayLength Rtl8723EBTImgArrayLength
-
- #define Rtl8723_FwUMCBCutMPImageArray Rtl8723SFwUMCBCutMPImgArray
- #define Rtl8723_UMCBCutMPImgArrayLength Rtl8723SUMCBCutMPImgArrayLength
-
- #define Rtl8723_PHY_REG_Array_MP Rtl8723SPHY_REG_Array_MP
- #define Rtl8723_PHY_REG_Array_MPLength Rtl8723SPHY_REG_Array_MPLength
-#endif
-
-#ifndef CONFIG_PHY_SETTING_WITH_ODM
- // MAC/BB/PHY Array
- #define Rtl8723_MAC_Array Rtl8723SMAC_2T_Array
- //#define Rtl8723_AGCTAB_2TArray Rtl8723SAGCTAB_2TArray
- #define Rtl8723_AGCTAB_1TArray Rtl8723SAGCTAB_1TArray
- //#define Rtl8723_PHY_REG_2TArray Rtl8723SPHY_REG_2TArray
- #define Rtl8723_PHY_REG_1TArray Rtl8723SPHY_REG_1TArray
- //#define Rtl8723_RadioA_2TArray Rtl8723SRadioA_2TArray
- #define Rtl8723_RadioA_1TArray Rtl8723SRadioA_1TArray
- //#define Rtl8723_RadioB_2TArray Rtl8723SRadioB_2TArray
- #define Rtl8723_RadioB_1TArray Rtl8723SRadioB_1TArray
-
- // Array length
- #define Rtl8723_MAC_ArrayLength Rtl8723SMAC_2T_ArrayLength
- #define Rtl8723_AGCTAB_1TArrayLength Rtl8723SAGCTAB_1TArrayLength
- #define Rtl8723_PHY_REG_1TArrayLength Rtl8723SPHY_REG_1TArrayLength
-
- #define Rtl8723_RadioA_1TArrayLength Rtl8723SRadioA_1TArrayLength
- #define Rtl8723_RadioB_1TArrayLength Rtl8723SRadioB_1TArrayLength
-#endif // CONFIG_PHY_SETTING_WITH_ODM
-#endif // CONFIG_SDIO_HCI
-
-#ifdef CONFIG_USB_HCI
-
- //2TODO: We should define 8192S firmware related macro settings here!!
- #define RTL819X_DEFAULT_RF_TYPE RF_1T2R
- #define RTL819X_TOTAL_RF_PATH 2
-
- //TODO: The following need to check!!
- #define RTL8723_FW_UMC_IMG "rtl8192CU\\rtl8723fw.bin"
- #define RTL8723_FW_UMC_B_IMG "rtl8192CU\\rtl8723fw_B.bin"
- #define RTL8723_PHY_REG "rtl8723S\\PHY_REG_1T.txt"
- #define RTL8723_PHY_RADIO_A "rtl8723S\\radio_a_1T.txt"
- #define RTL8723_PHY_RADIO_B "rtl8723S\\radio_b_1T.txt"
- #define RTL8723_AGC_TAB "rtl8723S\\AGC_TAB_1T.txt"
- #define RTL8723_PHY_MACREG "rtl8723S\\MAC_REG.txt"
- #define RTL8723_PHY_REG_PG "rtl8723S\\PHY_REG_PG.txt"
- #define RTL8723_PHY_REG_MP "rtl8723S\\PHY_REG_MP.txt"
-
-//---------------------------------------------------------------------
-// RTL8723S From header
-//---------------------------------------------------------------------
-
- // Fw Array
- #define Rtl8723_FwImageArray Rtl8723UFwImgArray
- #define Rtl8723_FwUMCBCutImageArrayWithBT Rtl8723UFwUMCBCutImgArrayWithBT
- #define Rtl8723_FwUMCBCutImageArrayWithoutBT Rtl8723UFwUMCBCutImgArrayWithoutBT
-
- #define Rtl8723_ImgArrayLength Rtl8723UImgArrayLength
- #define Rtl8723_UMCBCutImgArrayWithBTLength Rtl8723UUMCBCutImgArrayWithBTLength
- #define Rtl8723_UMCBCutImgArrayWithoutBTLength Rtl8723UUMCBCutImgArrayWithoutBTLength
-
- #define Rtl8723_PHY_REG_Array_PG Rtl8723UPHY_REG_Array_PG
- #define Rtl8723_PHY_REG_Array_PGLength Rtl8723UPHY_REG_Array_PGLength
-
-#if MP_DRIVER == 1
- #define Rtl8723E_FwBTImgArray Rtl8723EFwBTImgArray
- #define Rtl8723E_FwBTImgArrayLength Rtl8723EBTImgArrayLength
-
- #define Rtl8723_FwUMCBCutMPImageArray Rtl8723SFwUMCBCutMPImgArray
- #define Rtl8723_UMCBCutMPImgArrayLength Rtl8723SUMCBCutMPImgArrayLength
-
- #define Rtl8723_PHY_REG_Array_MP Rtl8723UPHY_REG_Array_MP
- #define Rtl8723_PHY_REG_Array_MPLength Rtl8723UPHY_REG_Array_MPLength
-#endif
-#ifndef CONFIG_PHY_SETTING_WITH_ODM
- // MAC/BB/PHY Array
- #define Rtl8723_MAC_Array Rtl8723UMAC_2T_Array
- //#define Rtl8723_AGCTAB_2TArray Rtl8723UAGCTAB_2TArray
- #define Rtl8723_AGCTAB_1TArray Rtl8723UAGCTAB_1TArray
- //#define Rtl8723_PHY_REG_2TArray Rtl8723UPHY_REG_2TArray
- #define Rtl8723_PHY_REG_1TArray Rtl8723UPHY_REG_1TArray
- //#define Rtl8723_RadioA_2TArray Rtl8723URadioA_2TArray
- #define Rtl8723_RadioA_1TArray Rtl8723URadioA_1TArray
- //#define Rtl8723_RadioB_2TArray Rtl8723URadioB_2TArray
- #define Rtl8723_RadioB_1TArray Rtl8723URadioB_1TArray
-
-
-
- // Array length
-
- #define Rtl8723_MAC_ArrayLength Rtl8723UMAC_2T_ArrayLength
- #define Rtl8723_AGCTAB_1TArrayLength Rtl8723UAGCTAB_1TArrayLength
- #define Rtl8723_PHY_REG_1TArrayLength Rtl8723UPHY_REG_1TArrayLength
-
-
- #define Rtl8723_RadioA_1TArrayLength Rtl8723URadioA_1TArrayLength
- #define Rtl8723_RadioB_1TArrayLength Rtl8723URadioB_1TArrayLength
-#endif
-#endif
-
-#define DRVINFO_SZ 4 // unit is 8bytes
-#define PageNum_128(_Len) (u32)(((_Len)>>7) + ((_Len)&0x7F ? 1:0))
-
-#define FW_8723A_SIZE 0x8000
-#define FW_8723A_START_ADDRESS 0x1000
-#define FW_8723A_END_ADDRESS 0x1FFF //0x5FFF
-
-#define MAX_PAGE_SIZE 4096 // @ page : 4k bytes
-
-#define IS_FW_HEADER_EXIST(_pFwHdr) ((le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x92C0 ||\
- (le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x88C0 ||\
- (le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x2300)
-
-typedef enum _FIRMWARE_SOURCE {
- FW_SOURCE_IMG_FILE = 0,
- FW_SOURCE_HEADER_FILE = 1, //from header file
-} FIRMWARE_SOURCE, *PFIRMWARE_SOURCE;
-
-typedef struct _RT_FIRMWARE {
- FIRMWARE_SOURCE eFWSource;
-#ifdef CONFIG_EMBEDDED_FWIMG
- u8* szFwBuffer;
-#else
- u8 szFwBuffer[FW_8723A_SIZE];
-#endif
- u32 ulFwLength;
-
-#ifdef CONFIG_EMBEDDED_FWIMG
- u8* szBTFwBuffer;
-#else
- u8 szBTFwBuffer[FW_8723A_SIZE];
-#endif
- u32 ulBTFwLength;
-} RT_FIRMWARE, *PRT_FIRMWARE, RT_FIRMWARE_8723A, *PRT_FIRMWARE_8723A;
-
-//
-// This structure must be cared byte-ordering
-//
-// Added by tynli. 2009.12.04.
-typedef struct _RT_8723A_FIRMWARE_HDR
-{
- // 8-byte alinment required
-
- //--- LONG WORD 0 ----
- u16 Signature; // 92C0: test chip; 92C, 88C0: test chip; 88C1: MP A-cut; 92C1: MP A-cut
- u8 Category; // AP/NIC and USB/PCI
- u8 Function; // Reserved for different FW function indcation, for further use when driver needs to download different FW in different conditions
- u16 Version; // FW Version
- u8 Subversion; // FW Subversion, default 0x00
- u16 Rsvd1;
-
-
- //--- LONG WORD 1 ----
- u8 Month; // Release time Month field
- u8 Date; // Release time Date field
- u8 Hour; // Release time Hour field
- u8 Minute; // Release time Minute field
- u16 RamCodeSize; // The size of RAM code
- u16 Rsvd2;
-
- //--- LONG WORD 2 ----
- u32 SvnIdx; // The SVN entry index
- u32 Rsvd3;
-
- //--- LONG WORD 3 ----
- u32 Rsvd4;
- u32 Rsvd5;
-}RT_8723A_FIRMWARE_HDR, *PRT_8723A_FIRMWARE_HDR;
-
-#define DRIVER_EARLY_INT_TIME 0x05
-#define BCN_DMA_ATIME_INT_TIME 0x02
-
-#ifdef CONFIG_USB_RX_AGGREGATION
-
-typedef enum _USB_RX_AGG_MODE{
- USB_RX_AGG_DISABLE,
- USB_RX_AGG_DMA,
- USB_RX_AGG_USB,
- USB_RX_AGG_MIX
-}USB_RX_AGG_MODE;
-
-#define MAX_RX_DMA_BUFFER_SIZE 10240 // 10K for 8192C RX DMA buffer
-
-#endif
-
-
-// BK, BE, VI, VO, HCCA, MANAGEMENT, COMMAND, HIGH, BEACON.
-#define MAX_TX_QUEUE 9
-
-#define TX_SELE_HQ BIT(0) // High Queue
-#define TX_SELE_LQ BIT(1) // Low Queue
-#define TX_SELE_NQ BIT(2) // Normal Queue
-
-// Note: We will divide number of page equally for each queue other than public queue!
-#define TX_TOTAL_PAGE_NUMBER 0xF8
-#define TX_PAGE_BOUNDARY (TX_TOTAL_PAGE_NUMBER + 1)
-
-// For Normal Chip Setting
-// (HPQ + LPQ + NPQ + PUBQ) shall be TX_TOTAL_PAGE_NUMBER
-#define NORMAL_PAGE_NUM_PUBQ 0xE7
-#define NORMAL_PAGE_NUM_HPQ 0x0C
-#define NORMAL_PAGE_NUM_LPQ 0x02
-#define NORMAL_PAGE_NUM_NPQ 0x02
-
-// For Test Chip Setting
-// (HPQ + LPQ + PUBQ) shall be TX_TOTAL_PAGE_NUMBER
-#define TEST_PAGE_NUM_PUBQ 0x7E
-
-// For Test Chip Setting
-#define WMM_TEST_TX_TOTAL_PAGE_NUMBER 0xF5
-#define WMM_TEST_TX_PAGE_BOUNDARY (WMM_TEST_TX_TOTAL_PAGE_NUMBER + 1) //F6
-
-#define WMM_TEST_PAGE_NUM_PUBQ 0xA3
-#define WMM_TEST_PAGE_NUM_HPQ 0x29
-#define WMM_TEST_PAGE_NUM_LPQ 0x29
-
-// Note: For Normal Chip Setting, modify later
-#define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER 0xF5
-#define WMM_NORMAL_TX_PAGE_BOUNDARY (WMM_TEST_TX_TOTAL_PAGE_NUMBER + 1) //F6
-
-#define WMM_NORMAL_PAGE_NUM_PUBQ 0xB0
-#define WMM_NORMAL_PAGE_NUM_HPQ 0x29
-#define WMM_NORMAL_PAGE_NUM_LPQ 0x1C
-#define WMM_NORMAL_PAGE_NUM_NPQ 0x1C
-
-
-//-------------------------------------------------------------------------
-// Chip specific
-//-------------------------------------------------------------------------
-#define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3)
-#define CHIP_BONDING_92C_1T2R 0x1
-#define CHIP_BONDING_88C_USB_MCARD 0x2
-#define CHIP_BONDING_88C_USB_HP 0x1
-
-#include "HalVerDef.h"
-#include "hal_com.h"
-
-//-------------------------------------------------------------------------
-// Channel Plan
-//-------------------------------------------------------------------------
-enum ChannelPlan
-{
- CHPL_FCC = 0,
- CHPL_IC = 1,
- CHPL_ETSI = 2,
- CHPL_SPAIN = 3,
- CHPL_FRANCE = 4,
- CHPL_MKK = 5,
- CHPL_MKK1 = 6,
- CHPL_ISRAEL = 7,
- CHPL_TELEC = 8,
- CHPL_GLOBAL = 9,
- CHPL_WORLD = 10,
-};
-
-#define HAL_EFUSE_MEMORY
-
-#define EFUSE_REAL_CONTENT_LEN 512
-#define EFUSE_MAP_LEN 128
-#define EFUSE_MAX_SECTION 16
-#define EFUSE_IC_ID_OFFSET 506 //For some inferiority IC purpose. added by Roger, 2009.09.02.
-#define AVAILABLE_EFUSE_ADDR(addr) (addr < EFUSE_REAL_CONTENT_LEN)
-//
-// <Roger_Notes>
-// To prevent out of boundary programming case,
-// leave 1byte and program full section
-// 9bytes + 1byt + 5bytes and pre 1byte.
-// For worst case:
-// | 1byte|----8bytes----|1byte|--5bytes--|
-// | | Reserved(14bytes) |
-//
-
-// PG data exclude header, dummy 6 bytes frome CP test and reserved 1byte.
-#define EFUSE_OOB_PROTECT_BYTES 15
-
-#define EFUSE_REAL_CONTENT_LEN_8723A 512
-#define EFUSE_MAP_LEN_8723A 256
-#define EFUSE_MAX_SECTION_8723A 32
-
-//========================================================
-// EFUSE for BT definition
-//========================================================
-#define EFUSE_BT_REAL_BANK_CONTENT_LEN 512
-#define EFUSE_BT_REAL_CONTENT_LEN 1536 // 512*3
-#define EFUSE_BT_MAP_LEN 1024 // 1k bytes
-#define EFUSE_BT_MAX_SECTION 128 // 1024/8
-
-#define EFUSE_PROTECT_BYTES_BANK 16
-
-//
-// <Roger_Notes> For RTL8723 WiFi/BT/GPS multi-function configuration. 2010.10.06.
-//
-typedef enum _RT_MULTI_FUNC {
- RT_MULTI_FUNC_NONE = 0x00,
- RT_MULTI_FUNC_WIFI = 0x01,
- RT_MULTI_FUNC_BT = 0x02,
- RT_MULTI_FUNC_GPS = 0x04,
-} RT_MULTI_FUNC, *PRT_MULTI_FUNC;
-
-//
-// <Roger_Notes> For RTL8723 WiFi PDn/GPIO polarity control configuration. 2010.10.08.
-//
-typedef enum _RT_POLARITY_CTL {
- RT_POLARITY_LOW_ACT = 0,
- RT_POLARITY_HIGH_ACT = 1,
-} RT_POLARITY_CTL, *PRT_POLARITY_CTL;
-
-// For RTL8723 regulator mode. by tynli. 2011.01.14.
-typedef enum _RT_REGULATOR_MODE {
- RT_SWITCHING_REGULATOR = 0,
- RT_LDO_REGULATOR = 1,
-} RT_REGULATOR_MODE, *PRT_REGULATOR_MODE;
-
-// Description: Determine the types of C2H events that are the same in driver and Fw.
-// Fisrt constructed by tynli. 2009.10.09.
-typedef enum _RTL8192C_C2H_EVT
-{
- C2H_DBG = 0,
- C2H_TSF = 1,
- C2H_AP_RPT_RSP = 2,
- C2H_CCX_TX_RPT = 3, // The FW notify the report of the specific tx packet.
- C2H_BT_RSSI = 4,
- C2H_BT_OP_MODE = 5,
- C2H_EXT_RA_RPT = 6,
- C2H_HW_INFO_EXCH = 10,
- C2H_C2H_H2C_TEST = 11,
- C2H_BT_INFO = 12,
- C2H_BT_MP_INFO = 15,
- MAX_C2HEVENT
-} RTL8192C_C2H_EVT;
-
-typedef struct hal_data_8723a
-{
- HAL_VERSION VersionID;
- RT_CUSTOMER_ID CustomerID;
-
- u16 FirmwareVersion;
- u16 FirmwareVersionRev;
- u16 FirmwareSubVersion;
- u16 FirmwareSignature;
-
- //current WIFI_PHY values
- u32 ReceiveConfig;
- WIRELESS_MODE CurrentWirelessMode;
- HT_CHANNEL_WIDTH CurrentChannelBW;
- u8 CurrentChannel;
- u8 nCur40MhzPrimeSC;// Control channel sub-carrier
-
- u16 BasicRateSet;
-
- //rf_ctrl
- u8 rf_chip;
- u8 rf_type;
- u8 NumTotalRFPath;
-
- u8 BoardType;
- u8 CrystalCap;
- //
- // EEPROM setting.
- //
- u8 EEPROMVersion;
- u16 EEPROMVID;
- u16 EEPROMPID;
- u16 EEPROMSVID;
- u16 EEPROMSDID;
- u8 EEPROMCustomerID;
- u8 EEPROMSubCustomerID;
- u8 EEPROMRegulatory;
- u8 EEPROMThermalMeter;
- u8 EEPROMBluetoothCoexist;
- u8 EEPROMBluetoothType;
- u8 EEPROMBluetoothAntNum;
- u8 EEPROMBluetoothAntIsolation;
- u8 EEPROMBluetoothRadioShared;
-
- u8 bTXPowerDataReadFromEEPORM;
- u8 bAPKThermalMeterIgnore;
-
- u8 bIQKInitialized;
- u8 bAntennaDetected;
-
- u8 TxPwrLevelCck[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
- u8 TxPwrLevelHT40_1S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
- u8 TxPwrLevelHT40_2S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
- u8 TxPwrHt20Diff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// HT 20<->40 Pwr diff
- u8 TxPwrLegacyHtDiff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// For HT<->legacy pwr diff
- // For power group
- u8 PwrGroupHT20[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
- u8 PwrGroupHT40[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
-
- u8 LegacyHTTxPowerDiff;// Legacy to HT rate power diff
-
- // Read/write are allow for following hardware information variables
- u8 framesync;
- u32 framesyncC34;
- u8 framesyncMonitor;
- u8 DefaultInitialGain[4];
- u8 pwrGroupCnt;
- u32 MCSTxPowerLevelOriginalOffset[7][16];
- u32 CCKTxPowerLevelOriginalOffset;
-
- u32 AntennaTxPath; // Antenna path Tx
- u32 AntennaRxPath; // Antenna path Rx
- u8 ExternalPA;
-
- u8 bLedOpenDrain; // Support Open-drain arrangement for controlling the LED. Added by Roger, 2009.10.16.
-
- //u32 LedControlNum;
- //u32 LedControlMode;
- //u32 TxPowerTrackControl;
- u8 b1x1RecvCombine; // for 1T1R receive combining
-
- // For EDCA Turbo mode
-// u8 bIsAnyNonBEPkts; // Adapter->recvpriv.bIsAnyNonBEPkts
-// u8 bCurrentTurboEDCA;
-// u8 bForcedDisableTurboEDCA;
-// u8 bIsCurRDLState; // pdmpriv->prv_traffic_idx
-
- u32 AcParam_BE; //Original parameter for BE, use for EDCA turbo.
-
- //vivi, for tx power tracking, 20080407
- //u16 TSSI_13dBm;
- //u32 Pwr_Track;
- // The current Tx Power Level
- u8 CurrentCckTxPwrIdx;
- u8 CurrentOfdm24GTxPwrIdx;
-
- BB_REGISTER_DEFINITION_T PHYRegDef[4]; //Radio A/B/C/D
-
- BOOLEAN bRFPathRxEnable[4]; // We support 4 RF path now.
-
- u32 RfRegChnlVal[2];
-
- u8 bCckHighPower;
-
- //RDG enable
- BOOLEAN bRDGEnable;
-
- //for host message to fw
- u8 LastHMEBoxNum;
-
- u8 fw_ractrl;
- u8 RegTxPause;
- // Beacon function related global variable.
- u32 RegBcnCtrlVal;
- u8 RegFwHwTxQCtrl;
- u8 RegReg542;
-
- struct dm_priv dmpriv;
- DM_ODM_T odmpriv;
- //_lock odm_stainfo_lock;
-#ifdef DBG_CONFIG_ERROR_DETECT
- struct sreset_priv srestpriv;
-#endif
-
-#ifdef CONFIG_BT_COEXIST
- u8 bBTMode;
- // BT only.
- BT30Info BtInfo;
- // For bluetooth co-existance
- BT_COEXIST_STR bt_coexist;
-#endif
-
-#ifdef CONFIG_ANTENNA_DIVERSITY
- u8 CurAntenna;
-
- // SW Antenna Switch
- s32 RSSI_sum_A;
- s32 RSSI_sum_B;
- s32 RSSI_cnt_A;
- s32 RSSI_cnt_B;
- u8 RSSI_test;
- u8 AntDivCfg;
-#endif
-
- u8 bDumpRxPkt;//for debug
- u8 FwRsvdPageStartOffset; //2010.06.23. Added by tynli. Reserve page start offset except beacon in TxQ.
-
- // 2010/08/09 MH Add CU power down mode.
- u8 pwrdown;
-
- // Add for dual MAC 0--Mac0 1--Mac1
- u32 interfaceIndex;
-
- u8 OutEpQueueSel;
- u8 OutEpNumber;
-
- // 2010/12/10 MH Add for USB aggreation mode dynamic shceme.
- BOOLEAN UsbRxHighSpeedMode;
-
- // 2010/11/22 MH Add for slim combo debug mode selective.
- // This is used for fix the drawback of CU TSMC-A/UMC-A cut. HW auto suspend ability. Close BT clock.
- BOOLEAN SlimComboDbg;
-
- //
- // Add For EEPROM Efuse switch and Efuse Shadow map Setting
- //
- u8 EepromOrEfuse;
-// u8 EfuseMap[2][HWSET_MAX_SIZE_512]; //92C:256bytes, 88E:512bytes, we use union set (512bytes)
- u16 EfuseUsedBytes;
- u8 EfuseUsedPercentage;
-#ifdef HAL_EFUSE_MEMORY
- EFUSE_HAL EfuseHal;
-#endif
-
- // Interrupt relatd register information.
- u32 SysIntrStatus;
- u32 SysIntrMask;
-
- //
- // 2011/02/23 MH Add for 8723 mylti function definition. The define should be moved to an
- // independent file in the future.
- //
- //------------------------8723-----------------------------------------//
- RT_MULTI_FUNC MultiFunc; // For multi-function consideration.
- RT_POLARITY_CTL PolarityCtl; // For Wifi PDn Polarity control.
- RT_REGULATOR_MODE RegulatorMode; // switching regulator or LDO
- //------------------------8723-----------------------------------------//
- //
- // 2011/02/23 MH Add for 8723 mylti function definition. The define should be moved to an
- // independent file in the future.
-
- BOOLEAN bMACFuncEnable;
-
-#ifdef CONFIG_P2P
- struct P2P_PS_Offload_t p2p_ps_offload;
-#endif
-
-
- //
- // For USB Interface HAL related
- //
-#ifdef CONFIG_USB_HCI
- u32 UsbBulkOutSize;
-
- // Interrupt relatd register information.
- u32 IntArray[2];
- u32 IntrMask[2];
-#endif
-
-
- //
- // For SDIO Interface HAL related
- //
-
- // Auto FSM to Turn On, include clock, isolation, power control for MAC only
- u8 bMacPwrCtrlOn;
-
-#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
- //
- // SDIO ISR Related
- //
-// u32 IntrMask[1];
-// u32 IntrMaskToSet[1];
-// LOG_INTERRUPT InterruptLog;
- u32 sdio_himr;
- u32 sdio_hisr;
-
- //
- // SDIO Tx FIFO related.
- //
- // HIQ, MID, LOW, PUB free pages; padapter->xmitpriv.free_txpg
- u8 SdioTxFIFOFreePage[SDIO_TX_FREE_PG_QUEUE];
- _lock SdioTxFIFOFreePageLock;
- _thread_hdl_ SdioXmitThread;
- _sema SdioXmitSema;
- _sema SdioXmitTerminateSema;
-
- //
- // SDIO Rx FIFO related.
- //
- u8 SdioRxFIFOCnt;
- u16 SdioRxFIFOSize;
-#endif
-} HAL_DATA_8723A, *PHAL_DATA_8723A;
-
-#if 0
-#define HAL_DATA_TYPE HAL_DATA_8723A
-#define PHAL_DATA_TYPE PHAL_DATA_8723A
-#else
-typedef struct hal_data_8723a HAL_DATA_TYPE, *PHAL_DATA_TYPE;
-#endif
-
-#define GET_HAL_DATA(__pAdapter) ((HAL_DATA_TYPE *)((__pAdapter)->HalData))
-#define GET_RF_TYPE(priv) (GET_HAL_DATA(priv)->rf_type)
-
-#define INCLUDE_MULTI_FUNC_BT(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_BT)
-#define INCLUDE_MULTI_FUNC_GPS(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_GPS)
-
-typedef struct rxreport_8723a
-{
- u32 pktlen:14;
- u32 crc32:1;
- u32 icverr:1;
- u32 drvinfosize:4;
- u32 security:3;
- u32 qos:1;
- u32 shift:2;
- u32 physt:1;
- u32 swdec:1;
- u32 ls:1;
- u32 fs:1;
- u32 eor:1;
- u32 own:1;
-
- u32 macid:5;
- u32 tid:4;
- u32 hwrsvd:4;
- u32 amsdu:1;
- u32 paggr:1;
- u32 faggr:1;
- u32 a1fit:4;
- u32 a2fit:4;
- u32 pam:1;
- u32 pwr:1;
- u32 md:1;
- u32 mf:1;
- u32 type:2;
- u32 mc:1;
- u32 bc:1;
-
- u32 seq:12;
- u32 frag:4;
- u32 nextpktlen:14;
- u32 nextind:1;
- u32 rsvd0831:1;
-
- u32 rxmcs:6;
- u32 rxht:1;
- u32 gf:1;
- u32 splcp:1;
- u32 bw:1;
- u32 htc:1;
- u32 eosp:1;
- u32 bssidfit:2;
- u32 rsvd1214:16;
- u32 unicastwake:1;
- u32 magicwake:1;
-
- u32 pattern0match:1;
- u32 pattern1match:1;
- u32 pattern2match:1;
- u32 pattern3match:1;
- u32 pattern4match:1;
- u32 pattern5match:1;
- u32 pattern6match:1;
- u32 pattern7match:1;
- u32 pattern8match:1;
- u32 pattern9match:1;
- u32 patternamatch:1;
- u32 patternbmatch:1;
- u32 patterncmatch:1;
- u32 rsvd1613:19;
-
- u32 tsfl;
-
- u32 bassn:12;
- u32 bavld:1;
- u32 rsvd2413:19;
-} RXREPORT, *PRXREPORT;
-
-typedef struct phystatus_8723a
-{
- u32 rxgain_a:7;
- u32 trsw_a:1;
- u32 rxgain_b:7;
- u32 trsw_b:1;
- u32 chcorr_l:16;
-
- u32 sigqualcck:8;
- u32 cfo_a:8;
- u32 cfo_b:8;
- u32 chcorr_h:8;
-
- u32 noisepwrdb_h:8;
- u32 cfo_tail_a:8;
- u32 cfo_tail_b:8;
- u32 rsvd0824:8;
-
- u32 rsvd1200:8;
- u32 rxevm_a:8;
- u32 rxevm_b:8;
- u32 rxsnr_a:8;
-
- u32 rxsnr_b:8;
- u32 noisepwrdb_l:8;
- u32 rsvd1616:8;
- u32 postsnr_a:8;
-
- u32 postsnr_b:8;
- u32 csi_a:8;
- u32 csi_b:8;
- u32 targetcsi_a:8;
-
- u32 targetcsi_b:8;
- u32 sigevm:8;
- u32 maxexpwr:8;
- u32 exintflag:1;
- u32 sgien:1;
- u32 rxsc:2;
- u32 idlelong:1;
- u32 anttrainen:1;
- u32 antselb:1;
- u32 antsel:1;
-} PHYSTATUS, *PPHYSTATUS;
-
-
-// rtl8723a_hal_init.c
-int FirmwareDownloadBT(IN PADAPTER Adapter, PRT_FIRMWARE_8723A pFirmware);
-s32 rtl8723a_FirmwareDownload(PADAPTER padapter);
-void rtl8723a_FirmwareSelfReset(PADAPTER padapter);
-void rtl8723a_InitializeFirmwareVars(PADAPTER padapter);
-
-void rtl8723a_InitAntenna_Selection(PADAPTER padapter);
-void rtl8723a_DeinitAntenna_Selection(PADAPTER padapter);
-void rtl8723a_CheckAntenna_Selection(PADAPTER padapter);
-void rtl8723a_init_default_value(PADAPTER padapter);
-
-s32 InitLLTTable(PADAPTER padapter, u32 boundary);
-
-s32 CardDisableHWSM(PADAPTER padapter, u8 resetMCU);
-s32 CardDisableWithoutHWSM(PADAPTER padapter);
-
-// EFuse
-u8 GetEEPROMSize8723A(PADAPTER padapter);
-void Hal_InitPGData(PADAPTER padapter, u8 *PROMContent);
-void Hal_EfuseParseIDCode(PADAPTER padapter, u8 *hwinfo);
-void Hal_EfuseParseTxPowerInfo_8723A(PADAPTER padapter, u8 *PROMContent, BOOLEAN AutoLoadFail);
-void Hal_EfuseParseBTCoexistInfo_8723A(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
-void Hal_EfuseParseEEPROMVer(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
-void rtl8723a_EfuseParseChnlPlan(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
-void Hal_EfuseParseCustomerID(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
-void Hal_EfuseParseAntennaDiversity(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
-void Hal_EfuseParseRateIndicationOption(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
-void Hal_EfuseParseXtal_8723A(PADAPTER pAdapter, u8 *hwinfo, u8 AutoLoadFail);
-void Hal_EfuseParseThermalMeter_8723A(PADAPTER padapter, u8 *hwinfo, u8 AutoLoadFail);
-
-//RT_CHANNEL_DOMAIN rtl8723a_HalMapChannelPlan(PADAPTER padapter, u8 HalChannelPlan);
-//VERSION_8192C rtl8723a_ReadChipVersion(PADAPTER padapter);
-//void rtl8723a_ReadBluetoothCoexistInfo(PADAPTER padapter, u8 *PROMContent, BOOLEAN AutoloadFail);
-void Hal_InitChannelPlan(PADAPTER padapter);
-
-void rtl8723a_set_hal_ops(struct hal_ops *pHalFunc);
-void SetHwReg8723A(PADAPTER padapter, u8 variable, u8 *val);
-void GetHwReg8723A(PADAPTER padapter, u8 variable, u8 *val);
-#ifdef CONFIG_BT_COEXIST
-void rtl8723a_SingleDualAntennaDetection(PADAPTER padapter);
-#endif
-
-// register
-void SetBcnCtrlReg(PADAPTER padapter, u8 SetBits, u8 ClearBits);
-void rtl8723a_InitBeaconParameters(PADAPTER padapter);
-void rtl8723a_InitBeaconMaxError(PADAPTER padapter, u8 InfraMode);
-
-void rtl8723a_clone_haldata(_adapter *dst_adapter, _adapter *src_adapter);
-void rtl8723a_start_thread(_adapter *padapter);
-void rtl8723a_stop_thread(_adapter *padapter);
-
-s32 c2h_id_filter_ccx_8723a(u8 id);
-
-
-#if defined(CONFIG_CHECK_BT_HANG) && defined(CONFIG_BT_COEXIST)
-void rtl8723a_init_checkbthang_workqueue(_adapter * padapter);
-void rtl8723a_free_checkbthang_workqueue(_adapter * padapter);
-void rtl8723a_cancel_checkbthang_workqueue(_adapter * padapter);
-void rtl8723a_hal_check_bt_hang(_adapter * padapter);
-#endif
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __RTL8723A_HAL_H__
+#define __RTL8723A_HAL_H__
+
+#include "rtl8723a_spec.h"
+#include "rtl8723a_pg.h"
+#include "Hal8723APhyReg.h"
+#include "Hal8723APhyCfg.h"
+#include "rtl8723a_rf.h"
+#ifdef CONFIG_BT_COEXIST
+#include "rtl8723a_bt-coexist.h"
+#endif
+#include "rtl8723a_dm.h"
+#include "rtl8723a_recv.h"
+#include "rtl8723a_xmit.h"
+#include "rtl8723a_cmd.h"
+#ifdef DBG_CONFIG_ERROR_DETECT
+#include "rtl8723a_sreset.h"
+#endif
+#include "rtw_efuse.h"
+
+#include "../hal/OUTSRC/odm_precomp.h"
+
+#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+
+ //2TODO: We should define 8192S firmware related macro settings here!!
+ #define RTL819X_DEFAULT_RF_TYPE RF_1T2R
+ #define RTL819X_TOTAL_RF_PATH 2
+
+//---------------------------------------------------------------------
+// RTL8723S From file
+//---------------------------------------------------------------------
+ #define RTL8723_FW_UMC_IMG "rtl8723S\\rtl8723fw.bin"
+ #define RTL8723_FW_UMC_B_IMG "rtl8723S\\rtl8723fw_B.bin"
+ #define RTL8723_PHY_REG "rtl8723S\\PHY_REG_1T.txt"
+ #define RTL8723_PHY_RADIO_A "rtl8723S\\radio_a_1T.txt"
+ #define RTL8723_PHY_RADIO_B "rtl8723S\\radio_b_1T.txt"
+ #define RTL8723_AGC_TAB "rtl8723S\\AGC_TAB_1T.txt"
+ #define RTL8723_PHY_MACREG "rtl8723S\\MAC_REG.txt"
+ #define RTL8723_PHY_REG_PG "rtl8723S\\PHY_REG_PG.txt"
+ #define RTL8723_PHY_REG_MP "rtl8723S\\PHY_REG_MP.txt"
+
+//---------------------------------------------------------------------
+// RTL8723S From header
+//---------------------------------------------------------------------
+
+ // Fw Array
+ #define Rtl8723_FwImageArray Rtl8723SFwImgArray
+ #define Rtl8723_FwUMCBCutImageArrayWithBT Rtl8723SFwUMCBCutImgArrayWithBT
+ #define Rtl8723_FwUMCBCutImageArrayWithoutBT Rtl8723SFwUMCBCutImgArrayWithoutBT
+
+ #define Rtl8723_ImgArrayLength Rtl8723SImgArrayLength
+ #define Rtl8723_UMCBCutImgArrayWithBTLength Rtl8723SUMCBCutImgArrayWithBTLength
+ #define Rtl8723_UMCBCutImgArrayWithoutBTLength Rtl8723SUMCBCutImgArrayWithoutBTLength
+
+ #define Rtl8723_PHY_REG_Array_PG Rtl8723SPHY_REG_Array_PG
+ #define Rtl8723_PHY_REG_Array_PGLength Rtl8723SPHY_REG_Array_PGLength
+#if MP_DRIVER == 1
+ #define Rtl8723E_FwBTImgArray Rtl8723EFwBTImgArray
+ #define Rtl8723E_FwBTImgArrayLength Rtl8723EBTImgArrayLength
+
+ #define Rtl8723_FwUMCBCutMPImageArray Rtl8723SFwUMCBCutMPImgArray
+ #define Rtl8723_UMCBCutMPImgArrayLength Rtl8723SUMCBCutMPImgArrayLength
+
+ #define Rtl8723_PHY_REG_Array_MP Rtl8723SPHY_REG_Array_MP
+ #define Rtl8723_PHY_REG_Array_MPLength Rtl8723SPHY_REG_Array_MPLength
+#endif
+
+#ifndef CONFIG_PHY_SETTING_WITH_ODM
+ // MAC/BB/PHY Array
+ #define Rtl8723_MAC_Array Rtl8723SMAC_2T_Array
+ //#define Rtl8723_AGCTAB_2TArray Rtl8723SAGCTAB_2TArray
+ #define Rtl8723_AGCTAB_1TArray Rtl8723SAGCTAB_1TArray
+ //#define Rtl8723_PHY_REG_2TArray Rtl8723SPHY_REG_2TArray
+ #define Rtl8723_PHY_REG_1TArray Rtl8723SPHY_REG_1TArray
+ //#define Rtl8723_RadioA_2TArray Rtl8723SRadioA_2TArray
+ #define Rtl8723_RadioA_1TArray Rtl8723SRadioA_1TArray
+ //#define Rtl8723_RadioB_2TArray Rtl8723SRadioB_2TArray
+ #define Rtl8723_RadioB_1TArray Rtl8723SRadioB_1TArray
+
+ // Array length
+ #define Rtl8723_MAC_ArrayLength Rtl8723SMAC_2T_ArrayLength
+ #define Rtl8723_AGCTAB_1TArrayLength Rtl8723SAGCTAB_1TArrayLength
+ #define Rtl8723_PHY_REG_1TArrayLength Rtl8723SPHY_REG_1TArrayLength
+
+ #define Rtl8723_RadioA_1TArrayLength Rtl8723SRadioA_1TArrayLength
+ #define Rtl8723_RadioB_1TArrayLength Rtl8723SRadioB_1TArrayLength
+#endif // CONFIG_PHY_SETTING_WITH_ODM
+#endif // CONFIG_SDIO_HCI
+
+#ifdef CONFIG_USB_HCI
+
+ //2TODO: We should define 8192S firmware related macro settings here!!
+ #define RTL819X_DEFAULT_RF_TYPE RF_1T2R
+ #define RTL819X_TOTAL_RF_PATH 2
+
+ //TODO: The following need to check!!
+ #define RTL8723_FW_UMC_IMG "rtl8192CU\\rtl8723fw.bin"
+ #define RTL8723_FW_UMC_B_IMG "rtl8192CU\\rtl8723fw_B.bin"
+ #define RTL8723_PHY_REG "rtl8723S\\PHY_REG_1T.txt"
+ #define RTL8723_PHY_RADIO_A "rtl8723S\\radio_a_1T.txt"
+ #define RTL8723_PHY_RADIO_B "rtl8723S\\radio_b_1T.txt"
+ #define RTL8723_AGC_TAB "rtl8723S\\AGC_TAB_1T.txt"
+ #define RTL8723_PHY_MACREG "rtl8723S\\MAC_REG.txt"
+ #define RTL8723_PHY_REG_PG "rtl8723S\\PHY_REG_PG.txt"
+ #define RTL8723_PHY_REG_MP "rtl8723S\\PHY_REG_MP.txt"
+
+//---------------------------------------------------------------------
+// RTL8723S From header
+//---------------------------------------------------------------------
+
+ // Fw Array
+ #define Rtl8723_FwImageArray Rtl8723UFwImgArray
+ #define Rtl8723_FwUMCBCutImageArrayWithBT Rtl8723UFwUMCBCutImgArrayWithBT
+ #define Rtl8723_FwUMCBCutImageArrayWithoutBT Rtl8723UFwUMCBCutImgArrayWithoutBT
+
+ #define Rtl8723_ImgArrayLength Rtl8723UImgArrayLength
+ #define Rtl8723_UMCBCutImgArrayWithBTLength Rtl8723UUMCBCutImgArrayWithBTLength
+ #define Rtl8723_UMCBCutImgArrayWithoutBTLength Rtl8723UUMCBCutImgArrayWithoutBTLength
+
+ #define Rtl8723_PHY_REG_Array_PG Rtl8723UPHY_REG_Array_PG
+ #define Rtl8723_PHY_REG_Array_PGLength Rtl8723UPHY_REG_Array_PGLength
+
+#if MP_DRIVER == 1
+ #define Rtl8723E_FwBTImgArray Rtl8723EFwBTImgArray
+ #define Rtl8723E_FwBTImgArrayLength Rtl8723EBTImgArrayLength
+
+ #define Rtl8723_FwUMCBCutMPImageArray Rtl8723SFwUMCBCutMPImgArray
+ #define Rtl8723_UMCBCutMPImgArrayLength Rtl8723SUMCBCutMPImgArrayLength
+
+ #define Rtl8723_PHY_REG_Array_MP Rtl8723UPHY_REG_Array_MP
+ #define Rtl8723_PHY_REG_Array_MPLength Rtl8723UPHY_REG_Array_MPLength
+#endif
+#ifndef CONFIG_PHY_SETTING_WITH_ODM
+ // MAC/BB/PHY Array
+ #define Rtl8723_MAC_Array Rtl8723UMAC_2T_Array
+ //#define Rtl8723_AGCTAB_2TArray Rtl8723UAGCTAB_2TArray
+ #define Rtl8723_AGCTAB_1TArray Rtl8723UAGCTAB_1TArray
+ //#define Rtl8723_PHY_REG_2TArray Rtl8723UPHY_REG_2TArray
+ #define Rtl8723_PHY_REG_1TArray Rtl8723UPHY_REG_1TArray
+ //#define Rtl8723_RadioA_2TArray Rtl8723URadioA_2TArray
+ #define Rtl8723_RadioA_1TArray Rtl8723URadioA_1TArray
+ //#define Rtl8723_RadioB_2TArray Rtl8723URadioB_2TArray
+ #define Rtl8723_RadioB_1TArray Rtl8723URadioB_1TArray
+
+
+
+ // Array length
+
+ #define Rtl8723_MAC_ArrayLength Rtl8723UMAC_2T_ArrayLength
+ #define Rtl8723_AGCTAB_1TArrayLength Rtl8723UAGCTAB_1TArrayLength
+ #define Rtl8723_PHY_REG_1TArrayLength Rtl8723UPHY_REG_1TArrayLength
+
+
+ #define Rtl8723_RadioA_1TArrayLength Rtl8723URadioA_1TArrayLength
+ #define Rtl8723_RadioB_1TArrayLength Rtl8723URadioB_1TArrayLength
+#endif
+#endif
+
+#define DRVINFO_SZ 4 // unit is 8bytes
+#define PageNum_128(_Len) (u32)(((_Len)>>7) + ((_Len)&0x7F ? 1:0))
+
+#define FW_8723A_SIZE 0x8000
+#define FW_8723A_START_ADDRESS 0x1000
+#define FW_8723A_END_ADDRESS 0x1FFF //0x5FFF
+
+#define MAX_PAGE_SIZE 4096 // @ page : 4k bytes
+
+#define IS_FW_HEADER_EXIST(_pFwHdr) ((le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x92C0 ||\
+ (le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x88C0 ||\
+ (le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x2300)
+
+typedef enum _FIRMWARE_SOURCE {
+ FW_SOURCE_IMG_FILE = 0,
+ FW_SOURCE_HEADER_FILE = 1, //from header file
+} FIRMWARE_SOURCE, *PFIRMWARE_SOURCE;
+
+typedef struct _RT_FIRMWARE {
+ FIRMWARE_SOURCE eFWSource;
+#ifdef CONFIG_EMBEDDED_FWIMG
+ u8* szFwBuffer;
+#else
+ u8 szFwBuffer[FW_8723A_SIZE];
+#endif
+ u32 ulFwLength;
+
+#ifdef CONFIG_EMBEDDED_FWIMG
+ u8* szBTFwBuffer;
+#else
+ u8 szBTFwBuffer[FW_8723A_SIZE];
+#endif
+ u32 ulBTFwLength;
+} RT_FIRMWARE, *PRT_FIRMWARE, RT_FIRMWARE_8723A, *PRT_FIRMWARE_8723A;
+
+//
+// This structure must be cared byte-ordering
+//
+// Added by tynli. 2009.12.04.
+typedef struct _RT_8723A_FIRMWARE_HDR
+{
+ // 8-byte alinment required
+
+ //--- LONG WORD 0 ----
+ u16 Signature; // 92C0: test chip; 92C, 88C0: test chip; 88C1: MP A-cut; 92C1: MP A-cut
+ u8 Category; // AP/NIC and USB/PCI
+ u8 Function; // Reserved for different FW function indcation, for further use when driver needs to download different FW in different conditions
+ u16 Version; // FW Version
+ u8 Subversion; // FW Subversion, default 0x00
+ u16 Rsvd1;
+
+
+ //--- LONG WORD 1 ----
+ u8 Month; // Release time Month field
+ u8 Date; // Release time Date field
+ u8 Hour; // Release time Hour field
+ u8 Minute; // Release time Minute field
+ u16 RamCodeSize; // The size of RAM code
+ u16 Rsvd2;
+
+ //--- LONG WORD 2 ----
+ u32 SvnIdx; // The SVN entry index
+ u32 Rsvd3;
+
+ //--- LONG WORD 3 ----
+ u32 Rsvd4;
+ u32 Rsvd5;
+}RT_8723A_FIRMWARE_HDR, *PRT_8723A_FIRMWARE_HDR;
+
+#define DRIVER_EARLY_INT_TIME 0x05
+#define BCN_DMA_ATIME_INT_TIME 0x02
+
+#ifdef CONFIG_USB_RX_AGGREGATION
+
+typedef enum _USB_RX_AGG_MODE{
+ USB_RX_AGG_DISABLE,
+ USB_RX_AGG_DMA,
+ USB_RX_AGG_USB,
+ USB_RX_AGG_MIX
+}USB_RX_AGG_MODE;
+
+#define MAX_RX_DMA_BUFFER_SIZE 10240 // 10K for 8192C RX DMA buffer
+
+#endif
+
+
+// BK, BE, VI, VO, HCCA, MANAGEMENT, COMMAND, HIGH, BEACON.
+#define MAX_TX_QUEUE 9
+
+#define TX_SELE_HQ BIT(0) // High Queue
+#define TX_SELE_LQ BIT(1) // Low Queue
+#define TX_SELE_NQ BIT(2) // Normal Queue
+
+// Note: We will divide number of page equally for each queue other than public queue!
+#define TX_TOTAL_PAGE_NUMBER 0xF8
+#define TX_PAGE_BOUNDARY (TX_TOTAL_PAGE_NUMBER + 1)
+
+// For Normal Chip Setting
+// (HPQ + LPQ + NPQ + PUBQ) shall be TX_TOTAL_PAGE_NUMBER
+#define NORMAL_PAGE_NUM_PUBQ 0xE7
+#define NORMAL_PAGE_NUM_HPQ 0x0C
+#define NORMAL_PAGE_NUM_LPQ 0x02
+#define NORMAL_PAGE_NUM_NPQ 0x02
+
+// For Test Chip Setting
+// (HPQ + LPQ + PUBQ) shall be TX_TOTAL_PAGE_NUMBER
+#define TEST_PAGE_NUM_PUBQ 0x7E
+
+// For Test Chip Setting
+#define WMM_TEST_TX_TOTAL_PAGE_NUMBER 0xF5
+#define WMM_TEST_TX_PAGE_BOUNDARY (WMM_TEST_TX_TOTAL_PAGE_NUMBER + 1) //F6
+
+#define WMM_TEST_PAGE_NUM_PUBQ 0xA3
+#define WMM_TEST_PAGE_NUM_HPQ 0x29
+#define WMM_TEST_PAGE_NUM_LPQ 0x29
+
+// Note: For Normal Chip Setting, modify later
+#define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER 0xF5
+#define WMM_NORMAL_TX_PAGE_BOUNDARY (WMM_TEST_TX_TOTAL_PAGE_NUMBER + 1) //F6
+
+#define WMM_NORMAL_PAGE_NUM_PUBQ 0xB0
+#define WMM_NORMAL_PAGE_NUM_HPQ 0x29
+#define WMM_NORMAL_PAGE_NUM_LPQ 0x1C
+#define WMM_NORMAL_PAGE_NUM_NPQ 0x1C
+
+
+//-------------------------------------------------------------------------
+// Chip specific
+//-------------------------------------------------------------------------
+#define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3)
+#define CHIP_BONDING_92C_1T2R 0x1
+#define CHIP_BONDING_88C_USB_MCARD 0x2
+#define CHIP_BONDING_88C_USB_HP 0x1
+
+#include "HalVerDef.h"
+#include "hal_com.h"
+
+//-------------------------------------------------------------------------
+// Channel Plan
+//-------------------------------------------------------------------------
+enum ChannelPlan
+{
+ CHPL_FCC = 0,
+ CHPL_IC = 1,
+ CHPL_ETSI = 2,
+ CHPL_SPAIN = 3,
+ CHPL_FRANCE = 4,
+ CHPL_MKK = 5,
+ CHPL_MKK1 = 6,
+ CHPL_ISRAEL = 7,
+ CHPL_TELEC = 8,
+ CHPL_GLOBAL = 9,
+ CHPL_WORLD = 10,
+};
+
+#define HAL_EFUSE_MEMORY
+
+#define EFUSE_REAL_CONTENT_LEN 512
+#define EFUSE_MAP_LEN 128
+#define EFUSE_MAX_SECTION 16
+#define EFUSE_IC_ID_OFFSET 506 //For some inferiority IC purpose. added by Roger, 2009.09.02.
+#define AVAILABLE_EFUSE_ADDR(addr) (addr < EFUSE_REAL_CONTENT_LEN)
+//
+// <Roger_Notes>
+// To prevent out of boundary programming case,
+// leave 1byte and program full section
+// 9bytes + 1byt + 5bytes and pre 1byte.
+// For worst case:
+// | 1byte|----8bytes----|1byte|--5bytes--|
+// | | Reserved(14bytes) |
+//
+
+// PG data exclude header, dummy 6 bytes frome CP test and reserved 1byte.
+#define EFUSE_OOB_PROTECT_BYTES 15
+
+#define EFUSE_REAL_CONTENT_LEN_8723A 512
+#define EFUSE_MAP_LEN_8723A 256
+#define EFUSE_MAX_SECTION_8723A 32
+
+//========================================================
+// EFUSE for BT definition
+//========================================================
+#define EFUSE_BT_REAL_BANK_CONTENT_LEN 512
+#define EFUSE_BT_REAL_CONTENT_LEN 1536 // 512*3
+#define EFUSE_BT_MAP_LEN 1024 // 1k bytes
+#define EFUSE_BT_MAX_SECTION 128 // 1024/8
+
+#define EFUSE_PROTECT_BYTES_BANK 16
+
+//
+// <Roger_Notes> For RTL8723 WiFi/BT/GPS multi-function configuration. 2010.10.06.
+//
+typedef enum _RT_MULTI_FUNC {
+ RT_MULTI_FUNC_NONE = 0x00,
+ RT_MULTI_FUNC_WIFI = 0x01,
+ RT_MULTI_FUNC_BT = 0x02,
+ RT_MULTI_FUNC_GPS = 0x04,
+} RT_MULTI_FUNC, *PRT_MULTI_FUNC;
+
+//
+// <Roger_Notes> For RTL8723 WiFi PDn/GPIO polarity control configuration. 2010.10.08.
+//
+typedef enum _RT_POLARITY_CTL {
+ RT_POLARITY_LOW_ACT = 0,
+ RT_POLARITY_HIGH_ACT = 1,
+} RT_POLARITY_CTL, *PRT_POLARITY_CTL;
+
+// For RTL8723 regulator mode. by tynli. 2011.01.14.
+typedef enum _RT_REGULATOR_MODE {
+ RT_SWITCHING_REGULATOR = 0,
+ RT_LDO_REGULATOR = 1,
+} RT_REGULATOR_MODE, *PRT_REGULATOR_MODE;
+
+// Description: Determine the types of C2H events that are the same in driver and Fw.
+// Fisrt constructed by tynli. 2009.10.09.
+typedef enum _RTL8192C_C2H_EVT
+{
+ C2H_DBG = 0,
+ C2H_TSF = 1,
+ C2H_AP_RPT_RSP = 2,
+ C2H_CCX_TX_RPT = 3, // The FW notify the report of the specific tx packet.
+ C2H_BT_RSSI = 4,
+ C2H_BT_OP_MODE = 5,
+ C2H_EXT_RA_RPT = 6,
+ C2H_HW_INFO_EXCH = 10,
+ C2H_C2H_H2C_TEST = 11,
+ C2H_BT_INFO = 12,
+ C2H_BT_MP_INFO = 15,
+ MAX_C2HEVENT
+} RTL8192C_C2H_EVT;
+
+typedef struct hal_data_8723a
+{
+ HAL_VERSION VersionID;
+ RT_CUSTOMER_ID CustomerID;
+
+ u16 FirmwareVersion;
+ u16 FirmwareVersionRev;
+ u16 FirmwareSubVersion;
+ u16 FirmwareSignature;
+
+ //current WIFI_PHY values
+ u32 ReceiveConfig;
+ WIRELESS_MODE CurrentWirelessMode;
+ HT_CHANNEL_WIDTH CurrentChannelBW;
+ u8 CurrentChannel;
+ u8 nCur40MhzPrimeSC;// Control channel sub-carrier
+
+ u16 BasicRateSet;
+
+ //rf_ctrl
+ u8 rf_chip;
+ u8 rf_type;
+ u8 NumTotalRFPath;
+
+ u8 BoardType;
+ u8 CrystalCap;
+ //
+ // EEPROM setting.
+ //
+ u8 EEPROMVersion;
+ u16 EEPROMVID;
+ u16 EEPROMPID;
+ u16 EEPROMSVID;
+ u16 EEPROMSDID;
+ u8 EEPROMCustomerID;
+ u8 EEPROMSubCustomerID;
+ u8 EEPROMRegulatory;
+ u8 EEPROMThermalMeter;
+ u8 EEPROMBluetoothCoexist;
+ u8 EEPROMBluetoothType;
+ u8 EEPROMBluetoothAntNum;
+ u8 EEPROMBluetoothAntIsolation;
+ u8 EEPROMBluetoothRadioShared;
+
+ u8 bTXPowerDataReadFromEEPORM;
+ u8 bAPKThermalMeterIgnore;
+
+ u8 bIQKInitialized;
+ u8 bAntennaDetected;
+
+ u8 TxPwrLevelCck[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
+ u8 TxPwrLevelHT40_1S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
+ u8 TxPwrLevelHT40_2S[RF_PATH_MAX][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr
+ u8 TxPwrHt20Diff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// HT 20<->40 Pwr diff
+ u8 TxPwrLegacyHtDiff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];// For HT<->legacy pwr diff
+ // For power group
+ u8 PwrGroupHT20[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
+ u8 PwrGroupHT40[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
+
+ u8 LegacyHTTxPowerDiff;// Legacy to HT rate power diff
+
+ // Read/write are allow for following hardware information variables
+ u8 framesync;
+ u32 framesyncC34;
+ u8 framesyncMonitor;
+ u8 DefaultInitialGain[4];
+ u8 pwrGroupCnt;
+ u32 MCSTxPowerLevelOriginalOffset[7][16];
+ u32 CCKTxPowerLevelOriginalOffset;
+
+ u32 AntennaTxPath; // Antenna path Tx
+ u32 AntennaRxPath; // Antenna path Rx
+ u8 ExternalPA;
+
+ u8 bLedOpenDrain; // Support Open-drain arrangement for controlling the LED. Added by Roger, 2009.10.16.
+
+ //u32 LedControlNum;
+ //u32 LedControlMode;
+ //u32 TxPowerTrackControl;
+ u8 b1x1RecvCombine; // for 1T1R receive combining
+
+ // For EDCA Turbo mode
+// u8 bIsAnyNonBEPkts; // Adapter->recvpriv.bIsAnyNonBEPkts
+// u8 bCurrentTurboEDCA;
+// u8 bForcedDisableTurboEDCA;
+// u8 bIsCurRDLState; // pdmpriv->prv_traffic_idx
+
+ u32 AcParam_BE; //Original parameter for BE, use for EDCA turbo.
+
+ //vivi, for tx power tracking, 20080407
+ //u16 TSSI_13dBm;
+ //u32 Pwr_Track;
+ // The current Tx Power Level
+ u8 CurrentCckTxPwrIdx;
+ u8 CurrentOfdm24GTxPwrIdx;
+
+ BB_REGISTER_DEFINITION_T PHYRegDef[4]; //Radio A/B/C/D
+
+ BOOLEAN bRFPathRxEnable[4]; // We support 4 RF path now.
+
+ u32 RfRegChnlVal[2];
+
+ u8 bCckHighPower;
+
+ //RDG enable
+ BOOLEAN bRDGEnable;
+
+ //for host message to fw
+ u8 LastHMEBoxNum;
+
+ u8 fw_ractrl;
+ u8 RegTxPause;
+ // Beacon function related global variable.
+ u32 RegBcnCtrlVal;
+ u8 RegFwHwTxQCtrl;
+ u8 RegReg542;
+
+ struct dm_priv dmpriv;
+ DM_ODM_T odmpriv;
+ //_lock odm_stainfo_lock;
+#ifdef DBG_CONFIG_ERROR_DETECT
+ struct sreset_priv srestpriv;
+#endif
+
+#ifdef CONFIG_BT_COEXIST
+ u8 bBTMode;
+ // BT only.
+ BT30Info BtInfo;
+ // For bluetooth co-existance
+ BT_COEXIST_STR bt_coexist;
+#endif
+
+#ifdef CONFIG_ANTENNA_DIVERSITY
+ u8 CurAntenna;
+
+ // SW Antenna Switch
+ s32 RSSI_sum_A;
+ s32 RSSI_sum_B;
+ s32 RSSI_cnt_A;
+ s32 RSSI_cnt_B;
+ u8 RSSI_test;
+ u8 AntDivCfg;
+#endif
+
+ u8 bDumpRxPkt;//for debug
+ u8 FwRsvdPageStartOffset; //2010.06.23. Added by tynli. Reserve page start offset except beacon in TxQ.
+
+ // 2010/08/09 MH Add CU power down mode.
+ u8 pwrdown;
+
+ // Add for dual MAC 0--Mac0 1--Mac1
+ u32 interfaceIndex;
+
+ u8 OutEpQueueSel;
+ u8 OutEpNumber;
+
+ // 2010/12/10 MH Add for USB aggreation mode dynamic shceme.
+ BOOLEAN UsbRxHighSpeedMode;
+
+ // 2010/11/22 MH Add for slim combo debug mode selective.
+ // This is used for fix the drawback of CU TSMC-A/UMC-A cut. HW auto suspend ability. Close BT clock.
+ BOOLEAN SlimComboDbg;
+
+ //
+ // Add For EEPROM Efuse switch and Efuse Shadow map Setting
+ //
+ u8 EepromOrEfuse;
+// u8 EfuseMap[2][HWSET_MAX_SIZE_512]; //92C:256bytes, 88E:512bytes, we use union set (512bytes)
+ u16 EfuseUsedBytes;
+ u8 EfuseUsedPercentage;
+#ifdef HAL_EFUSE_MEMORY
+ EFUSE_HAL EfuseHal;
+#endif
+
+ // Interrupt relatd register information.
+ u32 SysIntrStatus;
+ u32 SysIntrMask;
+
+ //
+ // 2011/02/23 MH Add for 8723 mylti function definition. The define should be moved to an
+ // independent file in the future.
+ //
+ //------------------------8723-----------------------------------------//
+ RT_MULTI_FUNC MultiFunc; // For multi-function consideration.
+ RT_POLARITY_CTL PolarityCtl; // For Wifi PDn Polarity control.
+ RT_REGULATOR_MODE RegulatorMode; // switching regulator or LDO
+ //------------------------8723-----------------------------------------//
+ //
+ // 2011/02/23 MH Add for 8723 mylti function definition. The define should be moved to an
+ // independent file in the future.
+
+ BOOLEAN bMACFuncEnable;
+
+#ifdef CONFIG_P2P
+ struct P2P_PS_Offload_t p2p_ps_offload;
+#endif
+
+
+ //
+ // For USB Interface HAL related
+ //
+#ifdef CONFIG_USB_HCI
+ u32 UsbBulkOutSize;
+
+ // Interrupt relatd register information.
+ u32 IntArray[2];
+ u32 IntrMask[2];
+#endif
+
+
+ //
+ // For SDIO Interface HAL related
+ //
+
+ // Auto FSM to Turn On, include clock, isolation, power control for MAC only
+ u8 bMacPwrCtrlOn;
+
+#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+ //
+ // SDIO ISR Related
+ //
+// u32 IntrMask[1];
+// u32 IntrMaskToSet[1];
+// LOG_INTERRUPT InterruptLog;
+ u32 sdio_himr;
+ u32 sdio_hisr;
+
+ //
+ // SDIO Tx FIFO related.
+ //
+ // HIQ, MID, LOW, PUB free pages; padapter->xmitpriv.free_txpg
+ u8 SdioTxFIFOFreePage[SDIO_TX_FREE_PG_QUEUE];
+ _lock SdioTxFIFOFreePageLock;
+
+ //
+ // SDIO Rx FIFO related.
+ //
+ u8 SdioRxFIFOCnt;
+ u16 SdioRxFIFOSize;
+#endif
+} HAL_DATA_8723A, *PHAL_DATA_8723A;
+
+#if 0
+#define HAL_DATA_TYPE HAL_DATA_8723A
+#define PHAL_DATA_TYPE PHAL_DATA_8723A
+#else
+typedef struct hal_data_8723a HAL_DATA_TYPE, *PHAL_DATA_TYPE;
+#endif
+
+#define GET_HAL_DATA(__pAdapter) ((HAL_DATA_TYPE *)((__pAdapter)->HalData))
+#define GET_RF_TYPE(priv) (GET_HAL_DATA(priv)->rf_type)
+
+#define INCLUDE_MULTI_FUNC_BT(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_BT)
+#define INCLUDE_MULTI_FUNC_GPS(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_GPS)
+
+typedef struct rxreport_8723a
+{
+ u32 pktlen:14;
+ u32 crc32:1;
+ u32 icverr:1;
+ u32 drvinfosize:4;
+ u32 security:3;
+ u32 qos:1;
+ u32 shift:2;
+ u32 physt:1;
+ u32 swdec:1;
+ u32 ls:1;
+ u32 fs:1;
+ u32 eor:1;
+ u32 own:1;
+
+ u32 macid:5;
+ u32 tid:4;
+ u32 hwrsvd:4;
+ u32 amsdu:1;
+ u32 paggr:1;
+ u32 faggr:1;
+ u32 a1fit:4;
+ u32 a2fit:4;
+ u32 pam:1;
+ u32 pwr:1;
+ u32 md:1;
+ u32 mf:1;
+ u32 type:2;
+ u32 mc:1;
+ u32 bc:1;
+
+ u32 seq:12;
+ u32 frag:4;
+ u32 nextpktlen:14;
+ u32 nextind:1;
+ u32 rsvd0831:1;
+
+ u32 rxmcs:6;
+ u32 rxht:1;
+ u32 gf:1;
+ u32 splcp:1;
+ u32 bw:1;
+ u32 htc:1;
+ u32 eosp:1;
+ u32 bssidfit:2;
+ u32 rsvd1214:16;
+ u32 unicastwake:1;
+ u32 magicwake:1;
+
+ u32 pattern0match:1;
+ u32 pattern1match:1;
+ u32 pattern2match:1;
+ u32 pattern3match:1;
+ u32 pattern4match:1;
+ u32 pattern5match:1;
+ u32 pattern6match:1;
+ u32 pattern7match:1;
+ u32 pattern8match:1;
+ u32 pattern9match:1;
+ u32 patternamatch:1;
+ u32 patternbmatch:1;
+ u32 patterncmatch:1;
+ u32 rsvd1613:19;
+
+ u32 tsfl;
+
+ u32 bassn:12;
+ u32 bavld:1;
+ u32 rsvd2413:19;
+} RXREPORT, *PRXREPORT;
+
+typedef struct phystatus_8723a
+{
+ u32 rxgain_a:7;
+ u32 trsw_a:1;
+ u32 rxgain_b:7;
+ u32 trsw_b:1;
+ u32 chcorr_l:16;
+
+ u32 sigqualcck:8;
+ u32 cfo_a:8;
+ u32 cfo_b:8;
+ u32 chcorr_h:8;
+
+ u32 noisepwrdb_h:8;
+ u32 cfo_tail_a:8;
+ u32 cfo_tail_b:8;
+ u32 rsvd0824:8;
+
+ u32 rsvd1200:8;
+ u32 rxevm_a:8;
+ u32 rxevm_b:8;
+ u32 rxsnr_a:8;
+
+ u32 rxsnr_b:8;
+ u32 noisepwrdb_l:8;
+ u32 rsvd1616:8;
+ u32 postsnr_a:8;
+
+ u32 postsnr_b:8;
+ u32 csi_a:8;
+ u32 csi_b:8;
+ u32 targetcsi_a:8;
+
+ u32 targetcsi_b:8;
+ u32 sigevm:8;
+ u32 maxexpwr:8;
+ u32 exintflag:1;
+ u32 sgien:1;
+ u32 rxsc:2;
+ u32 idlelong:1;
+ u32 anttrainen:1;
+ u32 antselb:1;
+ u32 antsel:1;
+} PHYSTATUS, *PPHYSTATUS;
+
+
+// rtl8723a_hal_init.c
+int FirmwareDownloadBT(IN PADAPTER Adapter, PRT_FIRMWARE_8723A pFirmware);
+s32 rtl8723a_FirmwareDownload(PADAPTER padapter);
+void rtl8723a_FirmwareSelfReset(PADAPTER padapter);
+void rtl8723a_InitializeFirmwareVars(PADAPTER padapter);
+void _8051Reset8723A(PADAPTER padapter);
+
+void rtl8723a_InitAntenna_Selection(PADAPTER padapter);
+void rtl8723a_DeinitAntenna_Selection(PADAPTER padapter);
+void rtl8723a_CheckAntenna_Selection(PADAPTER padapter);
+void rtl8723a_init_default_value(PADAPTER padapter);
+
+s32 InitLLTTable(PADAPTER padapter, u32 boundary);
+
+s32 CardDisableHWSM(PADAPTER padapter, u8 resetMCU);
+s32 CardDisableWithoutHWSM(PADAPTER padapter);
+
+// EFuse
+u8 GetEEPROMSize8723A(PADAPTER padapter);
+void Hal_InitPGData(PADAPTER padapter, u8 *PROMContent);
+void Hal_EfuseParseIDCode(PADAPTER padapter, u8 *hwinfo);
+void Hal_EfuseParseTxPowerInfo_8723A(PADAPTER padapter, u8 *PROMContent, BOOLEAN AutoLoadFail);
+void Hal_EfuseParseBTCoexistInfo_8723A(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
+void Hal_EfuseParseEEPROMVer(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
+void rtl8723a_EfuseParseChnlPlan(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
+void Hal_EfuseParseCustomerID(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
+void Hal_EfuseParseAntennaDiversity(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
+void Hal_EfuseParseRateIndicationOption(PADAPTER padapter, u8 *hwinfo, BOOLEAN AutoLoadFail);
+void Hal_EfuseParseXtal_8723A(PADAPTER pAdapter, u8 *hwinfo, u8 AutoLoadFail);
+void Hal_EfuseParseThermalMeter_8723A(PADAPTER padapter, u8 *hwinfo, u8 AutoLoadFail);
+
+//RT_CHANNEL_DOMAIN rtl8723a_HalMapChannelPlan(PADAPTER padapter, u8 HalChannelPlan);
+//VERSION_8192C rtl8723a_ReadChipVersion(PADAPTER padapter);
+//void rtl8723a_ReadBluetoothCoexistInfo(PADAPTER padapter, u8 *PROMContent, BOOLEAN AutoloadFail);
+void Hal_InitChannelPlan(PADAPTER padapter);
+
+void rtl8723a_set_hal_ops(struct hal_ops *pHalFunc);
+void SetHwReg8723A(PADAPTER padapter, u8 variable, u8 *val);
+void GetHwReg8723A(PADAPTER padapter, u8 variable, u8 *val);
+#ifdef CONFIG_BT_COEXIST
+void rtl8723a_SingleDualAntennaDetection(PADAPTER padapter);
+#endif
+
+// register
+void SetBcnCtrlReg(PADAPTER padapter, u8 SetBits, u8 ClearBits);
+void rtl8723a_InitBeaconParameters(PADAPTER padapter);
+void rtl8723a_InitBeaconMaxError(PADAPTER padapter, u8 InfraMode);
+
+void rtl8723a_start_thread(_adapter *padapter);
+void rtl8723a_stop_thread(_adapter *padapter);
+
+s32 c2h_id_filter_ccx_8723a(u8 id);
+
+
+#if defined(CONFIG_CHECK_BT_HANG) && defined(CONFIG_BT_COEXIST)
+void rtl8723a_init_checkbthang_workqueue(_adapter * padapter);
+void rtl8723a_free_checkbthang_workqueue(_adapter * padapter);
+void rtl8723a_cancel_checkbthang_workqueue(_adapter * padapter);
+void rtl8723a_hal_check_bt_hang(_adapter * padapter);
+#endif
+
+
+#ifdef CONFIG_RF_GAIN_OFFSET
+void Hal_ReadRFGainOffset(PADAPTER pAdapter,u8* hwinfo,BOOLEAN AutoLoadFail);
+#endif //CONFIG_RF_GAIN_OFFSET
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8723a_led.h b/drivers/net/wireless/rtl8723as/include/rtl8723a_led.h
index f0adfa50628b..1af419937025 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8723a_led.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8723a_led.h
@@ -1,50 +1,50 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __RTL8723A_LED_H__
-#define __RTL8723A_LED_H__
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-
-
-//================================================================================
-// Interface to manipulate LED objects.
-//================================================================================
-#ifdef CONFIG_USB_HCI
-void rtl8723au_InitSwLeds(PADAPTER padapter);
-void rtl8723au_DeInitSwLeds(PADAPTER padapter);
-#endif
-#ifdef CONFIG_PCI_HCI
-void rtl8723ae_gen_RefreshLedState(PADAPTER Adapter);
-void rtl8723ae_InitSwLeds(PADAPTER padapter);
-void rtl8723ae_DeInitSwLeds(PADAPTER padapter);
-#endif
-#ifdef CONFIG_SDIO_HCI
-void rtl8723as_InitSwLeds(PADAPTER padapter);
-void rtl8723as_DeInitSwLeds(PADAPTER padapter);
-#endif
-#ifdef CONFIG_GSPI_HCI
-void rtl8723as_InitSwLeds(PADAPTER padapter);
-void rtl8723as_DeInitSwLeds(PADAPTER padapter);
-#endif
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __RTL8723A_LED_H__
+#define __RTL8723A_LED_H__
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+
+
+//================================================================================
+// Interface to manipulate LED objects.
+//================================================================================
+#ifdef CONFIG_USB_HCI
+void rtl8723au_InitSwLeds(PADAPTER padapter);
+void rtl8723au_DeInitSwLeds(PADAPTER padapter);
+#endif
+#ifdef CONFIG_PCI_HCI
+void rtl8723ae_gen_RefreshLedState(PADAPTER Adapter);
+void rtl8723ae_InitSwLeds(PADAPTER padapter);
+void rtl8723ae_DeInitSwLeds(PADAPTER padapter);
+#endif
+#ifdef CONFIG_SDIO_HCI
+void rtl8723as_InitSwLeds(PADAPTER padapter);
+void rtl8723as_DeInitSwLeds(PADAPTER padapter);
+#endif
+#ifdef CONFIG_GSPI_HCI
+void rtl8723as_InitSwLeds(PADAPTER padapter);
+void rtl8723as_DeInitSwLeds(PADAPTER padapter);
+#endif
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8723a_recv.h b/drivers/net/wireless/rtl8723as/include/rtl8723a_recv.h
index c7765cc7f12d..988316788325 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8723a_recv.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8723a_recv.h
@@ -1,41 +1,41 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __RTL8723A_RECV_H__
-#define __RTL8723A_RECV_H__
-
-#include <rtl8192c_recv.h>
-
-
-#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
-#ifdef CONFIG_DIRECT_RECV
-void rtl8723as_recv(PADAPTER padapter, struct recv_buf *precvbuf);
-#endif
-s32 rtl8723as_init_recv_priv(PADAPTER padapter);
-void rtl8723as_free_recv_priv(PADAPTER padapter);
-#endif
-
-void rtl8192c_query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pphy_stat);
-void rtl8192c_process_phy_info(PADAPTER padapter, void *prframe);
-#ifdef CONFIG_USB_HCI
-void update_recvframe_attrib(union recv_frame *precvframe, struct recv_stat *prxstat);
-void update_recvframe_phyinfo(union recv_frame *precvframe, struct phy_stat *pphy_info);
-#endif
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __RTL8723A_RECV_H__
+#define __RTL8723A_RECV_H__
+
+#include <rtl8192c_recv.h>
+
+
+#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+#ifdef CONFIG_DIRECT_RECV
+void rtl8723as_recv(PADAPTER padapter, struct recv_buf *precvbuf);
+#endif
+s32 rtl8723as_init_recv_priv(PADAPTER padapter);
+void rtl8723as_free_recv_priv(PADAPTER padapter);
+#endif
+
+void rtl8192c_query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pphy_stat);
+void rtl8192c_process_phy_info(PADAPTER padapter, void *prframe);
+#ifdef CONFIG_USB_HCI
+void update_recvframe_attrib(union recv_frame *precvframe, struct recv_stat *prxstat);
+void update_recvframe_phyinfo(union recv_frame *precvframe, struct phy_stat *pphy_info);
+#endif
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8723a_spec.h b/drivers/net/wireless/rtl8723as/include/rtl8723a_spec.h
index e631962125b1..a51bc5a0096f 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8723a_spec.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8723a_spec.h
@@ -1,531 +1,538 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *******************************************************************************/
-#ifndef __RTL8723A_SPEC_H__
-#define __RTL8723A_SPEC_H__
-
-#include <rtl8192c_spec.h>
-
-
-//============================================================================
-// 8723A Regsiter offset definition
-//============================================================================
-#define HAL_8723A_NAV_UPPER_UNIT 128 // micro-second
-
-//-----------------------------------------------------
-//
-// 0x0000h ~ 0x00FFh System Configuration
-//
-//-----------------------------------------------------
-#define REG_SYSON_REG_LOCK 0x001C
-
-
-//-----------------------------------------------------
-//
-// 0x0100h ~ 0x01FFh MACTOP General Configuration
-//
-//-----------------------------------------------------
-#define REG_FTIMR 0x0138
-
-
-//-----------------------------------------------------
-//
-// 0x0200h ~ 0x027Fh TXDMA Configuration
-//
-//-----------------------------------------------------
-
-
-//-----------------------------------------------------
-//
-// 0x0280h ~ 0x02FFh RXDMA Configuration
-//
-//-----------------------------------------------------
-
-
-//-----------------------------------------------------
-//
-// 0x0300h ~ 0x03FFh PCIe
-//
-//-----------------------------------------------------
-
-
-//-----------------------------------------------------
-//
-// 0x0400h ~ 0x047Fh Protocol Configuration
-//
-//-----------------------------------------------------
-#define REG_EARLY_MODE_CONTROL 0x4D0
-
-
-//-----------------------------------------------------
-//
-// 0x0500h ~ 0x05FFh EDCA Configuration
-//
-//-----------------------------------------------------
-
-//2 BCN_CTRL
-#define DIS_ATIM BIT(0)
-#define DIS_BCNQ_SUB BIT(1)
-#define DIS_TSF_UDT BIT(4)
-
-
-//-----------------------------------------------------
-//
-// 0x0600h ~ 0x07FFh WMAC Configuration
-//
-//-----------------------------------------------------
-//
-// Note:
-// The NAV upper value is very important to WiFi 11n 5.2.3 NAV test. The default value is
-// always too small, but the WiFi TestPlan test by 25,000 microseconds of NAV through sending
-// CTS in the air. We must update this value greater than 25,000 microseconds to pass the item.
-// The offset of NAV_UPPER in 8192C Spec is incorrect, and the offset should be 0x0652. Commented
-// by SD1 Scott.
-// By Bruce, 2011-07-18.
-//
-#define REG_NAV_UPPER 0x0652 // unit of 128
-
-
-//============================================================================
-// 8723 Regsiter Bit and Content definition
-//============================================================================
-
-//-----------------------------------------------------
-//
-// 0x0000h ~ 0x00FFh System Configuration
-//
-//-----------------------------------------------------
-
-//2 SPS0_CTRL
-
-//2 SYS_ISO_CTRL
-
-//2 SYS_FUNC_EN
-
-//2 APS_FSMCO
-#define EN_WLON BIT(16)
-
-//2 SYS_CLKR
-
-//2 9346CR
-
-//2 AFE_MISC
-
-//2 SPS0_CTRL
-
-//2 SPS_OCP_CFG
-
-//2 SYSON_REG_LOCK
-#define WLOCK_ALL BIT(0)
-#define WLOCK_00 BIT(1)
-#define WLOCK_04 BIT(2)
-#define WLOCK_08 BIT(3)
-#define WLOCK_40 BIT(4)
-#define WLOCK_1C_B6 BIT(5)
-#define R_DIS_PRST_1 BIT(6)
-#define LOCK_ALL_EN BIT(7)
-
-//2 RF_CTRL
-
-//2 LDOA15_CTRL
-
-//2 LDOV12D_CTRL
-
-//2 AFE_XTAL_CTRL
-
-//2 AFE_PLL_CTRL
-
-//2 EFUSE_CTRL
-
-//2 EFUSE_TEST (For RTL8723 partially)
-
-//2 PWR_DATA
-
-//2 CAL_TIMER
-
-//2 ACLK_MON
-
-//2 GPIO_MUXCFG
-
-//2 GPIO_PIN_CTRL
-
-//2 GPIO_INTM
-
-//2 LEDCFG
-
-//2 FSIMR
-
-//2 FSISR
-
-//2 HSIMR
-// 8723 Host System Interrupt Mask Register (offset 0x58, 32 byte)
-#define HSIMR_GPIO12_0_INT_EN BIT(0)
-#define HSIMR_SPS_OCP_INT_EN BIT(5)
-#define HSIMR_RON_INT_EN BIT(6)
-#define HSIMR_PDNINT_EN BIT(7)
-#define HSIMR_GPIO9_INT_EN BIT(25)
-
-//2 HSISR
-// 8723 Host System Interrupt Status Register (offset 0x5C, 32 byte)
-#define HSISR_GPIO12_0_INT BIT(0)
-#define HSISR_SPS_OCP_INT BIT(5)
-#define HSISR_RON_INT BIT(6)
-#define HSISR_PDNINT BIT(7)
-#define HSISR_GPIO9_INT BIT(25)
-
-// interrupt mask which needs to clear
-#define MASK_HSISR_CLEAR (HSISR_GPIO12_0_INT |\
- HSISR_SPS_OCP_INT |\
- HSISR_RON_INT |\
- HSISR_PDNINT |\
- HSISR_GPIO9_INT)
-
-//2 MCUFWDL
-#define RAM_DL_SEL BIT7 // 1:RAM, 0:ROM
-
-//2 HPON_FSM
-
-//2 SYS_CFG
-#define RTL_ID BIT(23) // TestChip ID, 1:Test(RLE); 0:MP(RL)
-#define SPS_SEL BIT(24) // 1:LDO regulator mode; 0:Switching regulator mode
-
-
-//-----------------------------------------------------
-//
-// 0x0100h ~ 0x01FFh MACTOP General Configuration
-//
-//-----------------------------------------------------
-
-//2 Function Enable Registers
-
-//2 CR
-#define CALTMR_EN BIT(10)
-
-//2 PBP - Page Size Register
-
-//2 TX/RXDMA
-
-//2 TRXFF_BNDY
-
-//2 LLT_INIT
-
-//2 BB_ACCESS_CTRL
-
-
-//-----------------------------------------------------
-//
-// 0x0200h ~ 0x027Fh TXDMA Configuration
-//
-//-----------------------------------------------------
-
-//2 RQPN
-
-//2 TDECTRL
-
-//2 TDECTL
-
-//2 TXDMA_OFFSET_CHK
-
-
-//-----------------------------------------------------
-//
-// 0x0400h ~ 0x047Fh Protocol Configuration
-//
-//-----------------------------------------------------
-
-//2 FWHW_TXQ_CTRL
-
-//2 INIRTSMCS_SEL
-
-//2 SPEC SIFS
-
-//2 RRSR
-
-//2 ARFR
-
-//2 AGGLEN_LMT_L
-
-//2 RL
-
-//2 DARFRC
-
-//2 RARFRC
-
-
-//-----------------------------------------------------
-//
-// 0x0500h ~ 0x05FFh EDCA Configuration
-//
-//-----------------------------------------------------
-
-//2 EDCA setting
-
-//2 EDCA_VO_PARAM
-
-//2 SIFS_CCK
-
-//2 SIFS_OFDM
-
-//2 TBTT PROHIBIT
-
-//2 REG_RD_CTRL
-
-//2 BCN_CTRL
-
-//2 ACMHWCTRL
-
-
-//-----------------------------------------------------
-//
-// 0x0600h ~ 0x07FFh WMAC Configuration
-//
-//-----------------------------------------------------
-
-//2 APSD_CTRL
-
-//2 BWOPMODE
-
-//2 TCR
-
-//2 RCR
-
-//2 RX_PKT_LIMIT
-
-//2 RX_DLK_TIME
-
-//2 MBIDCAMCFG
-
-//2 AMPDU_MIN_SPACE
-
-//2 RXERR_RPT
-
-//2 SECCFG
-
-
-//-----------------------------------------------------
-//
-// 0xFE00h ~ 0xFE55h RTL8723 SDIO Configuration
-//
-//-----------------------------------------------------
-
-// I/O bus domain address mapping
-#define SDIO_LOCAL_BASE 0x10250000
-#define WLAN_IOREG_BASE 0x10260000
-#define FIRMWARE_FIFO_BASE 0x10270000
-#define TX_HIQ_BASE 0x10310000
-#define TX_MIQ_BASE 0x10320000
-#define TX_LOQ_BASE 0x10330000
-#define RX_RX0FF_BASE 0x10340000
-
-// SDIO host local register space mapping.
-#define SDIO_LOCAL_MSK 0x0FFF
-#define WLAN_IOREG_MSK 0x7FFF
-#define WLAN_FIFO_MSK 0x1FFF // Aggregation Length[12:0]
-#define WLAN_RX0FF_MSK 0x0003
-
-#define SDIO_WITHOUT_REF_DEVICE_ID 0 // Without reference to the SDIO Device ID
-#define SDIO_LOCAL_DEVICE_ID 0 // 0b[16], 000b[15:13]
-#define WLAN_TX_HIQ_DEVICE_ID 4 // 0b[16], 100b[15:13]
-#define WLAN_TX_MIQ_DEVICE_ID 5 // 0b[16], 101b[15:13]
-#define WLAN_TX_LOQ_DEVICE_ID 6 // 0b[16], 110b[15:13]
-#define WLAN_RX0FF_DEVICE_ID 7 // 0b[16], 111b[15:13]
-#define WLAN_IOREG_DEVICE_ID 8 // 1b[16]
-
-// SDIO Tx Free Page Index
-#define HI_QUEUE_IDX 0
-#define MID_QUEUE_IDX 1
-#define LOW_QUEUE_IDX 2
-#define PUBLIC_QUEUE_IDX 3
-
-#define SDIO_MAX_TX_QUEUE 3 // HIQ, MIQ and LOQ
-#define SDIO_MAX_RX_QUEUE 1
-
-#define SDIO_REG_TX_CTRL 0x0000 // SDIO Tx Control
-#define SDIO_REG_HIMR 0x0014 // SDIO Host Interrupt Mask
-#define SDIO_REG_HISR 0x0018 // SDIO Host Interrupt Service Routine
-#define SDIO_REG_HCPWM 0x0019 // HCI Current Power Mode
-#define SDIO_REG_RX0_REQ_LEN 0x001C // RXDMA Request Length
-#define SDIO_REG_FREE_TXPG 0x0020 // Free Tx Buffer Page
-#define SDIO_REG_HCPWM1 0x0024 // HCI Current Power Mode 1
-#define SDIO_REG_HCPWM2 0x0026 // HCI Current Power Mode 2
-#define SDIO_REG_HTSFR_INFO 0x0030 // HTSF Informaion
-#define SDIO_REG_HRPWM1 0x0080 // HCI Request Power Mode 1
-#define SDIO_REG_HRPWM2 0x0082 // HCI Request Power Mode 2
-#define SDIO_REG_HPS_CLKR 0x0084 // HCI Power Save Clock
-#define SDIO_REG_HSUS_CTRL 0x0086 // SDIO HCI Suspend Control
-#define SDIO_REG_HIMR_ON 0x0090 // SDIO Host Extension Interrupt Mask Always
-#define SDIO_REG_HISR_ON 0x0091 // SDIO Host Extension Interrupt Status Always
-
-#define SDIO_HIMR_DISABLED 0
-
-// SDIO Host Interrupt Mask Register
-#define SDIO_HIMR_RX_REQUEST_MSK BIT0
-#define SDIO_HIMR_AVAL_MSK BIT1
-#define SDIO_HIMR_TXERR_MSK BIT2
-#define SDIO_HIMR_RXERR_MSK BIT3
-#define SDIO_HIMR_TXFOVW_MSK BIT4
-#define SDIO_HIMR_RXFOVW_MSK BIT5
-#define SDIO_HIMR_TXBCNOK_MSK BIT6
-#define SDIO_HIMR_TXBCNERR_MSK BIT7
-#define SDIO_HIMR_BCNERLY_INT_MSK BIT16
-#define SDIO_HIMR_C2HCMD_MSK BIT17
-#define SDIO_HIMR_CPWM1_MSK BIT18
-#define SDIO_HIMR_CPWM2_MSK BIT19
-#define SDIO_HIMR_HSISR_IND_MSK BIT20
-#define SDIO_HIMR_GTINT3_IND_MSK BIT21
-#define SDIO_HIMR_GTINT4_IND_MSK BIT22
-#define SDIO_HIMR_PSTIMEOUT_MSK BIT23
-#define SDIO_HIMR_OCPINT_MSK BIT24
-#define SDIO_HIMR_ATIMEND_MSK BIT25
-#define SDIO_HIMR_ATIMEND_E_MSK BIT26
-#define SDIO_HIMR_CTWEND_MSK BIT27
-
-// SDIO Host Interrupt Service Routine
-#define SDIO_HISR_RX_REQUEST BIT0
-#define SDIO_HISR_AVAL BIT1
-#define SDIO_HISR_TXERR BIT2
-#define SDIO_HISR_RXERR BIT3
-#define SDIO_HISR_TXFOVW BIT4
-#define SDIO_HISR_RXFOVW BIT5
-#define SDIO_HISR_TXBCNOK BIT6
-#define SDIO_HISR_TXBCNERR BIT7
-#define SDIO_HISR_BCNERLY_INT BIT16
-#define SDIO_HISR_C2HCMD BIT17
-#define SDIO_HISR_CPWM1 BIT18
-#define SDIO_HISR_CPWM2 BIT19
-#define SDIO_HISR_HSISR_IND BIT20
-#define SDIO_HISR_GTINT3_IND BIT21
-#define SDIO_HISR_GTINT4_IND BIT22
-#define SDIO_HISR_PSTIMEOUT BIT23
-#define SDIO_HISR_OCPINT BIT24
-#define SDIO_HISR_ATIMEND BIT25
-#define SDIO_HISR_ATIMEND_E BIT26
-#define SDIO_HISR_CTWEND BIT27
-
-#define MASK_SDIO_HISR_CLEAR (SDIO_HISR_TXERR |\
- SDIO_HISR_RXERR |\
- SDIO_HISR_TXFOVW |\
- SDIO_HISR_RXFOVW |\
- SDIO_HISR_TXBCNOK |\
- SDIO_HISR_TXBCNERR |\
- SDIO_HISR_C2HCMD |\
- SDIO_HISR_CPWM1 |\
- SDIO_HISR_CPWM2 |\
- SDIO_HISR_HSISR_IND |\
- SDIO_HISR_GTINT3_IND |\
- SDIO_HISR_GTINT4_IND |\
- SDIO_HISR_PSTIMEOUT |\
- SDIO_HISR_OCPINT)
-
-// SDIO HCI Suspend Control Register
-#define HCI_RESUME_PWR_RDY BIT1
-#define HCI_SUS_CTRL BIT0
-
-// SDIO Tx FIFO related
-#define SDIO_TX_FREE_PG_QUEUE 4 // The number of Tx FIFO free page
-#define SDIO_TX_FIFO_PAGE_SZ 128
-
-// vivi added for new cam search flow, 20091028
-#define SCR_TxUseBroadcastDK BIT6 // Force Tx Use Broadcast Default Key
-#define SCR_RxUseBroadcastDK BIT7 // Force Rx Use Broadcast Default Key
-
-
-//----------------------------------------------------------------------------
-// 8723 EFUSE
-//----------------------------------------------------------------------------
-#ifdef HWSET_MAX_SIZE
-#undef HWSET_MAX_SIZE
-#endif
-#define HWSET_MAX_SIZE 256
-
-
-//-----------------------------------------------------------------------------
-//USB interrupt
-//-----------------------------------------------------------------------------
-#define UHIMR_TIMEOUT2 BIT31
-#define UHIMR_TIMEOUT1 BIT30
-#define UHIMR_PSTIMEOUT BIT29
-#define UHIMR_GTINT4 BIT28
-#define UHIMR_GTINT3 BIT27
-#define UHIMR_TXBCNERR BIT26
-#define UHIMR_TXBCNOK BIT25
-#define UHIMR_TSF_BIT32_TOGGLE BIT24
-#define UHIMR_BCNDMAINT3 BIT23
-#define UHIMR_BCNDMAINT2 BIT22
-#define UHIMR_BCNDMAINT1 BIT21
-#define UHIMR_BCNDMAINT0 BIT20
-#define UHIMR_BCNDOK3 BIT19
-#define UHIMR_BCNDOK2 BIT18
-#define UHIMR_BCNDOK1 BIT17
-#define UHIMR_BCNDOK0 BIT16
-#define UHIMR_HSISR_IND BIT15
-#define UHIMR_BCNDMAINT_E BIT14
-//RSVD BIT13
-#define UHIMR_CTW_END BIT12
-//RSVD BIT11
-#define UHIMR_C2HCMD BIT10
-#define UHIMR_CPWM2 BIT9
-#define UHIMR_CPWM BIT8
-#define UHIMR_HIGHDOK BIT7 // High Queue DMA OK Interrupt
-#define UHIMR_MGNTDOK BIT6 // Management Queue DMA OK Interrupt
-#define UHIMR_BKDOK BIT5 // AC_BK DMA OK Interrupt
-#define UHIMR_BEDOK BIT4 // AC_BE DMA OK Interrupt
-#define UHIMR_VIDOK BIT3 // AC_VI DMA OK Interrupt
-#define UHIMR_VODOK BIT2 // AC_VO DMA Interrupt
-#define UHIMR_RDU BIT1 // Receive Descriptor Unavailable
-#define UHIMR_ROK BIT0 // Receive DMA OK Interrupt
-
-// USB Host Interrupt Status Extension bit
-#define UHIMR_BCNDMAINT7 BIT23
-#define UHIMR_BCNDMAINT6 BIT22
-#define UHIMR_BCNDMAINT5 BIT21
-#define UHIMR_BCNDMAINT4 BIT20
-#define UHIMR_BCNDOK7 BIT19
-#define UHIMR_BCNDOK6 BIT18
-#define UHIMR_BCNDOK5 BIT17
-#define UHIMR_BCNDOK4 BIT16
-// bit14-15: RSVD
-#define UHIMR_ATIMEND_E BIT13
-#define UHIMR_ATIMEND BIT12
-#define UHIMR_TXERR BIT11
-#define UHIMR_RXERR BIT10
-#define UHIMR_TXFOVW BIT9
-#define UHIMR_RXFOVW BIT8
-// bit2-7: RSVD
-#define UHIMR_OCPINT BIT1
-// bit0: RSVD
-
-#define REG_USB_HIMR 0xFE38
-#define REG_USB_HIMRE 0xFE3C
-#define REG_USB_HISR 0xFE78
-#define REG_USB_HISRE 0xFE7C
-
-#define USB_INTR_CPWM_OFFSET 16
-#define USB_INTR_CONTENT_HISR_OFFSET 48
-#define USB_INTR_CONTENT_HISRE_OFFSET 52
-#define USB_INTR_CONTENT_LENGTH 56
-#define USB_C2H_CMDID_OFFSET 0
-#define USB_C2H_SEQ_OFFSET 1
-#define USB_C2H_EVENT_OFFSET 2
-//============================================================================
-// General definitions
-//============================================================================
-
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *******************************************************************************/
+#ifndef __RTL8723A_SPEC_H__
+#define __RTL8723A_SPEC_H__
+
+#include <rtl8192c_spec.h>
+
+
+//============================================================================
+// 8723A Regsiter offset definition
+//============================================================================
+#define HAL_8723A_NAV_UPPER_UNIT 128 // micro-second
+
+//-----------------------------------------------------
+//
+// 0x0000h ~ 0x00FFh System Configuration
+//
+//-----------------------------------------------------
+#define REG_SYSON_REG_LOCK 0x001C
+
+
+//-----------------------------------------------------
+//
+// 0x0100h ~ 0x01FFh MACTOP General Configuration
+//
+//-----------------------------------------------------
+#define REG_FTIMR 0x0138
+
+
+//-----------------------------------------------------
+//
+// 0x0200h ~ 0x027Fh TXDMA Configuration
+//
+//-----------------------------------------------------
+
+
+//-----------------------------------------------------
+//
+// 0x0280h ~ 0x02FFh RXDMA Configuration
+//
+//-----------------------------------------------------
+
+
+//-----------------------------------------------------
+//
+// 0x0300h ~ 0x03FFh PCIe
+//
+//-----------------------------------------------------
+
+
+//-----------------------------------------------------
+//
+// 0x0400h ~ 0x047Fh Protocol Configuration
+//
+//-----------------------------------------------------
+//#define REG_EARLY_MODE_CONTROL 0x4D0
+#define REG_MACID_NO_LINK 0x4D0
+
+//-----------------------------------------------------
+//
+// 0x0500h ~ 0x05FFh EDCA Configuration
+//
+//-----------------------------------------------------
+
+//2 BCN_CTRL
+#define DIS_ATIM BIT(0)
+#define DIS_BCNQ_SUB BIT(1)
+#define DIS_TSF_UDT BIT(4)
+
+
+//-----------------------------------------------------
+//
+// 0x0600h ~ 0x07FFh WMAC Configuration
+//
+//-----------------------------------------------------
+//
+// Note:
+// The NAV upper value is very important to WiFi 11n 5.2.3 NAV test. The default value is
+// always too small, but the WiFi TestPlan test by 25,000 microseconds of NAV through sending
+// CTS in the air. We must update this value greater than 25,000 microseconds to pass the item.
+// The offset of NAV_UPPER in 8192C Spec is incorrect, and the offset should be 0x0652. Commented
+// by SD1 Scott.
+// By Bruce, 2011-07-18.
+//
+#define REG_NAV_UPPER 0x0652 // unit of 128
+
+#define REG_BT_COEX_TABLE_1 0x06C0
+#define REG_BT_COEX_TABLE_2 0x06C4
+
+//============================================================================
+// 8723 Regsiter Bit and Content definition
+//============================================================================
+
+//-----------------------------------------------------
+//
+// 0x0000h ~ 0x00FFh System Configuration
+//
+//-----------------------------------------------------
+
+//2 SPS0_CTRL
+
+//2 SYS_ISO_CTRL
+
+//2 SYS_FUNC_EN
+
+//2 APS_FSMCO
+#define EN_WLON BIT(16)
+
+//2 SYS_CLKR
+
+//2 9346CR
+
+//2 AFE_MISC
+
+//2 SPS0_CTRL
+
+//2 SPS_OCP_CFG
+
+//2 SYSON_REG_LOCK
+#define WLOCK_ALL BIT(0)
+#define WLOCK_00 BIT(1)
+#define WLOCK_04 BIT(2)
+#define WLOCK_08 BIT(3)
+#define WLOCK_40 BIT(4)
+#define WLOCK_1C_B6 BIT(5)
+#define R_DIS_PRST_1 BIT(6)
+#define LOCK_ALL_EN BIT(7)
+
+//2 RF_CTRL
+
+//2 LDOA15_CTRL
+
+//2 LDOV12D_CTRL
+
+//2 AFE_XTAL_CTRL
+
+//2 AFE_PLL_CTRL
+
+//2 EFUSE_CTRL
+
+//2 EFUSE_TEST (For RTL8723 partially)
+
+//2 PWR_DATA
+
+//2 CAL_TIMER
+
+//2 ACLK_MON
+
+//2 GPIO_MUXCFG
+
+//2 GPIO_PIN_CTRL
+
+//2 GPIO_INTM
+
+//2 LEDCFG
+
+//2 FSIMR
+
+//2 FSISR
+
+//2 HSIMR
+// 8723 Host System Interrupt Mask Register (offset 0x58, 32 byte)
+#define HSIMR_GPIO12_0_INT_EN BIT(0)
+#define HSIMR_SPS_OCP_INT_EN BIT(5)
+#define HSIMR_RON_INT_EN BIT(6)
+#define HSIMR_PDNINT_EN BIT(7)
+#define HSIMR_GPIO9_INT_EN BIT(25)
+
+//2 HSISR
+// 8723 Host System Interrupt Status Register (offset 0x5C, 32 byte)
+#define HSISR_GPIO12_0_INT BIT(0)
+#define HSISR_SPS_OCP_INT BIT(5)
+#define HSISR_RON_INT BIT(6)
+#define HSISR_PDNINT BIT(7)
+#define HSISR_GPIO9_INT BIT(25)
+
+// interrupt mask which needs to clear
+#define MASK_HSISR_CLEAR (HSISR_GPIO12_0_INT |\
+ HSISR_SPS_OCP_INT |\
+ HSISR_RON_INT |\
+ HSISR_PDNINT |\
+ HSISR_GPIO9_INT)
+
+//2 MCUFWDL
+#define RAM_DL_SEL BIT7 // 1:RAM, 0:ROM
+
+//2 HPON_FSM
+
+//2 SYS_CFG
+#define RTL_ID BIT(23) // TestChip ID, 1:Test(RLE); 0:MP(RL)
+#define SPS_SEL BIT(24) // 1:LDO regulator mode; 0:Switching regulator mode
+
+
+//-----------------------------------------------------
+//
+// 0x0100h ~ 0x01FFh MACTOP General Configuration
+//
+//-----------------------------------------------------
+
+//2 Function Enable Registers
+
+//2 CR
+#define CALTMR_EN BIT(10)
+
+//2 PBP - Page Size Register
+
+//2 TX/RXDMA
+
+//2 TRXFF_BNDY
+
+//2 LLT_INIT
+
+//2 BB_ACCESS_CTRL
+
+
+//-----------------------------------------------------
+//
+// 0x0200h ~ 0x027Fh TXDMA Configuration
+//
+//-----------------------------------------------------
+
+//2 RQPN
+
+//2 TDECTRL
+
+//2 TDECTL
+
+//2 TXDMA_OFFSET_CHK
+
+
+//-----------------------------------------------------
+//
+// 0x0400h ~ 0x047Fh Protocol Configuration
+//
+//-----------------------------------------------------
+
+//2 FWHW_TXQ_CTRL
+
+//2 INIRTSMCS_SEL
+
+//2 SPEC SIFS
+
+//2 RRSR
+
+//2 ARFR
+
+//2 AGGLEN_LMT_L
+
+//2 RL
+
+//2 DARFRC
+
+//2 RARFRC
+
+
+//-----------------------------------------------------
+//
+// 0x0500h ~ 0x05FFh EDCA Configuration
+//
+//-----------------------------------------------------
+
+//2 EDCA setting
+
+//2 EDCA_VO_PARAM
+
+//2 SIFS_CCK
+
+//2 SIFS_OFDM
+
+//2 TBTT PROHIBIT
+
+//2 REG_RD_CTRL
+
+//2 BCN_CTRL
+
+//2 ACMHWCTRL
+
+
+//-----------------------------------------------------
+//
+// 0x0600h ~ 0x07FFh WMAC Configuration
+//
+//-----------------------------------------------------
+
+//2 APSD_CTRL
+
+//2 BWOPMODE
+
+//2 TCR
+
+//2 RCR
+
+//2 RX_PKT_LIMIT
+
+//2 RX_DLK_TIME
+
+//2 MBIDCAMCFG
+
+//2 AMPDU_MIN_SPACE
+
+//2 RXERR_RPT
+
+//2 SECCFG
+
+
+//-----------------------------------------------------
+//
+// 0xFE00h ~ 0xFE55h RTL8723 SDIO Configuration
+//
+//-----------------------------------------------------
+
+// I/O bus domain address mapping
+#define SDIO_LOCAL_BASE 0x10250000
+#define WLAN_IOREG_BASE 0x10260000
+#define FIRMWARE_FIFO_BASE 0x10270000
+#define TX_HIQ_BASE 0x10310000
+#define TX_MIQ_BASE 0x10320000
+#define TX_LOQ_BASE 0x10330000
+#define RX_RX0FF_BASE 0x10340000
+
+// SDIO host local register space mapping.
+#define SDIO_LOCAL_MSK 0x0FFF
+#define WLAN_IOREG_MSK 0x7FFF
+#define WLAN_FIFO_MSK 0x1FFF // Aggregation Length[12:0]
+#define WLAN_RX0FF_MSK 0x0003
+
+#define SDIO_WITHOUT_REF_DEVICE_ID 0 // Without reference to the SDIO Device ID
+#define SDIO_LOCAL_DEVICE_ID 0 // 0b[16], 000b[15:13]
+#define WLAN_TX_HIQ_DEVICE_ID 4 // 0b[16], 100b[15:13]
+#define WLAN_TX_MIQ_DEVICE_ID 5 // 0b[16], 101b[15:13]
+#define WLAN_TX_LOQ_DEVICE_ID 6 // 0b[16], 110b[15:13]
+#define WLAN_RX0FF_DEVICE_ID 7 // 0b[16], 111b[15:13]
+#define WLAN_IOREG_DEVICE_ID 8 // 1b[16]
+
+// SDIO Tx Free Page Index
+#define HI_QUEUE_IDX 0
+#define MID_QUEUE_IDX 1
+#define LOW_QUEUE_IDX 2
+#define PUBLIC_QUEUE_IDX 3
+
+#define SDIO_MAX_TX_QUEUE 3 // HIQ, MIQ and LOQ
+#define SDIO_MAX_RX_QUEUE 1
+
+#define SDIO_REG_TX_CTRL 0x0000 // SDIO Tx Control
+#define SDIO_REG_HIMR 0x0014 // SDIO Host Interrupt Mask
+#define SDIO_REG_HISR 0x0018 // SDIO Host Interrupt Service Routine
+#define SDIO_REG_HCPWM 0x0019 // HCI Current Power Mode
+#define SDIO_REG_RX0_REQ_LEN 0x001C // RXDMA Request Length
+#define SDIO_REG_FREE_TXPG 0x0020 // Free Tx Buffer Page
+#define SDIO_REG_HCPWM1 0x0024 // HCI Current Power Mode 1
+#define SDIO_REG_HCPWM2 0x0026 // HCI Current Power Mode 2
+#define SDIO_REG_HTSFR_INFO 0x0030 // HTSF Informaion
+#define SDIO_REG_HRPWM1 0x0080 // HCI Request Power Mode 1
+#define SDIO_REG_HRPWM2 0x0082 // HCI Request Power Mode 2
+#define SDIO_REG_HPS_CLKR 0x0084 // HCI Power Save Clock
+#define SDIO_REG_HSUS_CTRL 0x0086 // SDIO HCI Suspend Control
+#define SDIO_REG_HIMR_ON 0x0090 // SDIO Host Extension Interrupt Mask Always
+#define SDIO_REG_HISR_ON 0x0091 // SDIO Host Extension Interrupt Status Always
+
+#define SDIO_HIMR_DISABLED 0
+
+// SDIO Host Interrupt Mask Register
+#define SDIO_HIMR_RX_REQUEST_MSK BIT0
+#define SDIO_HIMR_AVAL_MSK BIT1
+#define SDIO_HIMR_TXERR_MSK BIT2
+#define SDIO_HIMR_RXERR_MSK BIT3
+#define SDIO_HIMR_TXFOVW_MSK BIT4
+#define SDIO_HIMR_RXFOVW_MSK BIT5
+#define SDIO_HIMR_TXBCNOK_MSK BIT6
+#define SDIO_HIMR_TXBCNERR_MSK BIT7
+#define SDIO_HIMR_BCNERLY_INT_MSK BIT16
+#define SDIO_HIMR_C2HCMD_MSK BIT17
+#define SDIO_HIMR_CPWM1_MSK BIT18
+#define SDIO_HIMR_CPWM2_MSK BIT19
+#define SDIO_HIMR_HSISR_IND_MSK BIT20
+#define SDIO_HIMR_GTINT3_IND_MSK BIT21
+#define SDIO_HIMR_GTINT4_IND_MSK BIT22
+#define SDIO_HIMR_PSTIMEOUT_MSK BIT23
+#define SDIO_HIMR_OCPINT_MSK BIT24
+#define SDIO_HIMR_ATIMEND_MSK BIT25
+#define SDIO_HIMR_ATIMEND_E_MSK BIT26
+#define SDIO_HIMR_CTWEND_MSK BIT27
+
+// SDIO Host Interrupt Service Routine
+#define SDIO_HISR_RX_REQUEST BIT0
+#define SDIO_HISR_AVAL BIT1
+#define SDIO_HISR_TXERR BIT2
+#define SDIO_HISR_RXERR BIT3
+#define SDIO_HISR_TXFOVW BIT4
+#define SDIO_HISR_RXFOVW BIT5
+#define SDIO_HISR_TXBCNOK BIT6
+#define SDIO_HISR_TXBCNERR BIT7
+#define SDIO_HISR_BCNERLY_INT BIT16
+#define SDIO_HISR_C2HCMD BIT17
+#define SDIO_HISR_CPWM1 BIT18
+#define SDIO_HISR_CPWM2 BIT19
+#define SDIO_HISR_HSISR_IND BIT20
+#define SDIO_HISR_GTINT3_IND BIT21
+#define SDIO_HISR_GTINT4_IND BIT22
+#define SDIO_HISR_PSTIMEOUT BIT23
+#define SDIO_HISR_OCPINT BIT24
+#define SDIO_HISR_ATIMEND BIT25
+#define SDIO_HISR_ATIMEND_E BIT26
+#define SDIO_HISR_CTWEND BIT27
+
+#define MASK_SDIO_HISR_CLEAR (SDIO_HISR_TXERR |\
+ SDIO_HISR_RXERR |\
+ SDIO_HISR_TXFOVW |\
+ SDIO_HISR_RXFOVW |\
+ SDIO_HISR_TXBCNOK |\
+ SDIO_HISR_TXBCNERR |\
+ SDIO_HISR_C2HCMD |\
+ SDIO_HISR_CPWM1 |\
+ SDIO_HISR_CPWM2 |\
+ SDIO_HISR_HSISR_IND |\
+ SDIO_HISR_GTINT3_IND |\
+ SDIO_HISR_GTINT4_IND |\
+ SDIO_HISR_PSTIMEOUT |\
+ SDIO_HISR_OCPINT)
+
+// SDIO HCI Suspend Control Register
+#define HCI_RESUME_PWR_RDY BIT1
+#define HCI_SUS_CTRL BIT0
+
+// SDIO Tx FIFO related
+#define SDIO_TX_FREE_PG_QUEUE 4 // The number of Tx FIFO free page
+#define SDIO_TX_FIFO_PAGE_SZ 128
+
+// vivi added for new cam search flow, 20091028
+#define SCR_TxUseBroadcastDK BIT6 // Force Tx Use Broadcast Default Key
+#define SCR_RxUseBroadcastDK BIT7 // Force Rx Use Broadcast Default Key
+
+
+//----------------------------------------------------------------------------
+// 8723 EFUSE
+//----------------------------------------------------------------------------
+#ifdef HWSET_MAX_SIZE
+#undef HWSET_MAX_SIZE
+#endif
+#define HWSET_MAX_SIZE 256
+
+
+//-----------------------------------------------------------------------------
+//USB interrupt
+//-----------------------------------------------------------------------------
+#define UHIMR_TIMEOUT2 BIT31
+#define UHIMR_TIMEOUT1 BIT30
+#define UHIMR_PSTIMEOUT BIT29
+#define UHIMR_GTINT4 BIT28
+#define UHIMR_GTINT3 BIT27
+#define UHIMR_TXBCNERR BIT26
+#define UHIMR_TXBCNOK BIT25
+#define UHIMR_TSF_BIT32_TOGGLE BIT24
+#define UHIMR_BCNDMAINT3 BIT23
+#define UHIMR_BCNDMAINT2 BIT22
+#define UHIMR_BCNDMAINT1 BIT21
+#define UHIMR_BCNDMAINT0 BIT20
+#define UHIMR_BCNDOK3 BIT19
+#define UHIMR_BCNDOK2 BIT18
+#define UHIMR_BCNDOK1 BIT17
+#define UHIMR_BCNDOK0 BIT16
+#define UHIMR_HSISR_IND BIT15
+#define UHIMR_BCNDMAINT_E BIT14
+//RSVD BIT13
+#define UHIMR_CTW_END BIT12
+//RSVD BIT11
+#define UHIMR_C2HCMD BIT10
+#define UHIMR_CPWM2 BIT9
+#define UHIMR_CPWM BIT8
+#define UHIMR_HIGHDOK BIT7 // High Queue DMA OK Interrupt
+#define UHIMR_MGNTDOK BIT6 // Management Queue DMA OK Interrupt
+#define UHIMR_BKDOK BIT5 // AC_BK DMA OK Interrupt
+#define UHIMR_BEDOK BIT4 // AC_BE DMA OK Interrupt
+#define UHIMR_VIDOK BIT3 // AC_VI DMA OK Interrupt
+#define UHIMR_VODOK BIT2 // AC_VO DMA Interrupt
+#define UHIMR_RDU BIT1 // Receive Descriptor Unavailable
+#define UHIMR_ROK BIT0 // Receive DMA OK Interrupt
+
+// USB Host Interrupt Status Extension bit
+#define UHIMR_BCNDMAINT7 BIT23
+#define UHIMR_BCNDMAINT6 BIT22
+#define UHIMR_BCNDMAINT5 BIT21
+#define UHIMR_BCNDMAINT4 BIT20
+#define UHIMR_BCNDOK7 BIT19
+#define UHIMR_BCNDOK6 BIT18
+#define UHIMR_BCNDOK5 BIT17
+#define UHIMR_BCNDOK4 BIT16
+// bit14-15: RSVD
+#define UHIMR_ATIMEND_E BIT13
+#define UHIMR_ATIMEND BIT12
+#define UHIMR_TXERR BIT11
+#define UHIMR_RXERR BIT10
+#define UHIMR_TXFOVW BIT9
+#define UHIMR_RXFOVW BIT8
+// bit2-7: RSVD
+#define UHIMR_OCPINT BIT1
+// bit0: RSVD
+
+#define REG_USB_HIMR 0xFE38
+#define REG_USB_HIMRE 0xFE3C
+#define REG_USB_HISR 0xFE78
+#define REG_USB_HISRE 0xFE7C
+
+#define USB_INTR_CPWM_OFFSET 16
+#define USB_INTR_CONTENT_HISR_OFFSET 48
+#define USB_INTR_CONTENT_HISRE_OFFSET 52
+#define USB_INTR_CONTENT_LENGTH 56
+#define USB_C2H_CMDID_OFFSET 0
+#define USB_C2H_SEQ_OFFSET 1
+#define USB_C2H_EVENT_OFFSET 2
+//============================================================================
+// General definitions
+//============================================================================
+
+#ifdef CONFIG_RF_GAIN_OFFSET
+#define EEPROM_RF_GAIN_OFFSET 0x2F
+#define EEPROM_RF_GAIN_VAL 0x1F6
+#endif //CONFIG_RF_GAIN_OFFSET
+
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtl8723a_xmit.h b/drivers/net/wireless/rtl8723as/include/rtl8723a_xmit.h
index d1ead94b94da..c3658435169a 100755
--- a/drivers/net/wireless/rtl8723as/include/rtl8723a_xmit.h
+++ b/drivers/net/wireless/rtl8723as/include/rtl8723a_xmit.h
@@ -1,238 +1,238 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __RTL8723A_XMIT_H__
-#define __RTL8723A_XMIT_H__
-
-#include <rtl8192c_xmit.h>
-
-//
-//defined for TX DESC Operation
-//
-
-#define MAX_TID (15)
-
-//OFFSET 0
-#define OFFSET_SZ 0
-#define OFFSET_SHT 16
-#define BMC BIT(24)
-#define LSG BIT(26)
-#define FSG BIT(27)
-#define OWN BIT(31)
-
-
-//OFFSET 4
-#define PKT_OFFSET_SZ 0
-#define BK BIT(6)
-#define QSEL_SHT 8
-#define Rate_ID_SHT 16
-#define NAVUSEHDR BIT(20)
-#define PKT_OFFSET_SHT 26
-#define HWPC BIT(31)
-
-//OFFSET 8
-#define AGG_EN BIT(29)
-
-//OFFSET 12
-#define SEQ_SHT 16
-
-//OFFSET 16
-#define QoS BIT(6)
-#define HW_SEQ_EN BIT(7)
-#define USERATE BIT(8)
-#define DISDATAFB BIT(10)
-#define DATA_SHORT BIT(24)
-#define DATA_BW BIT(25)
-
-//OFFSET 20
-#define SGI BIT(6)
-
-typedef struct txdesc_8723a
-{
- u32 pktlen:16;
- u32 offset:8;
- u32 bmc:1;
- u32 htc:1;
- u32 ls:1;
- u32 fs:1;
- u32 linip:1;
- u32 noacm:1;
- u32 gf:1;
- u32 own:1;
-
- u32 macid:5;
- u32 agg_en:1;
- u32 bk:1;
- u32 rd_en:1;
- u32 qsel:5;
- u32 rd_nav_ext:1;
- u32 lsig_txop_en:1;
- u32 pifs:1;
- u32 rate_id:4;
- u32 navusehdr:1;
- u32 en_desc_id:1;
- u32 sectype:2;
- u32 rsvd0424:2;
- u32 pkt_offset:5; // unit: 8 bytes
- u32 rsvd0431:1;
-
- u32 rts_rc:6;
- u32 data_rc:6;
- u32 rsvd0812:2;
- u32 bar_rty_th:2;
- u32 rsvd0816:1;
- u32 morefrag:1;
- u32 raw:1;
- u32 ccx:1;
- u32 ampdu_density:3;
- u32 bt_null:1;
- u32 ant_sel_a:1;
- u32 ant_sel_b:1;
- u32 tx_ant_cck:2;
- u32 tx_antl:2;
- u32 tx_ant_ht:2;
-
- u32 nextheadpage:8;
- u32 tailpage:8;
- u32 seq:12;
- u32 cpu_handle:1;
- u32 tag1:1;
- u32 trigger_int:1;
- u32 hwseq_en:1;
-
- u32 rtsrate:5;
- u32 ap_dcfe:1;
- u32 hwseq_sel:2;
- u32 userate:1;
- u32 disrtsfb:1;
- u32 disdatafb:1;
- u32 cts2self:1;
- u32 rtsen:1;
- u32 hw_rts_en:1;
- u32 port_id:1;
- u32 rsvd1615:3;
- u32 wait_dcts:1;
- u32 cts2ap_en:1;
- u32 data_sc:2;
- u32 data_stbc:2;
- u32 data_short:1;
- u32 data_bw:1;
- u32 rts_short:1;
- u32 rts_bw:1;
- u32 rts_sc:2;
- u32 vcs_stbc:2;
-
- u32 datarate:6;
- u32 sgi:1;
- u32 try_rate:1;
- u32 data_ratefb_lmt:5;
- u32 rts_ratefb_lmt:4;
- u32 rty_lmt_en:1;
- u32 data_rt_lmt:6;
- u32 usb_txagg_num:8;
-
- u32 txagg_a:5;
- u32 txagg_b:5;
- u32 use_max_len:1;
- u32 max_agg_num:5;
- u32 mcsg1_max_len:4;
- u32 mcsg2_max_len:4;
- u32 mcsg3_max_len:4;
- u32 mcs7_sgi_max_len:4;
-
- u32 checksum:16; // TxBuffSize(PCIe)/CheckSum(USB)
- u32 mcsg4_max_len:4;
- u32 mcsg5_max_len:4;
- u32 mcsg6_max_len:4;
- u32 mcs15_sgi_max_len:4;
-}TXDESC, *PTXDESC;
-
-#define txdesc_set_ccx_sw_8723a(txdesc, value) \
- do { \
- ((struct txdesc_8723a *)(txdesc))->mcsg4_max_len = (((value)>>8) & 0x0f); \
- ((struct txdesc_8723a *)(txdesc))->mcs15_sgi_max_len= (((value)>>4) & 0x0f); \
- ((struct txdesc_8723a *)(txdesc))->mcsg6_max_len = ((value) & 0x0f); \
- } while (0)
-
-struct txrpt_ccx_8723a {
- /* offset 0 */
- u8 tag1:1;
- u8 rsvd:4;
- u8 int_bt:1;
- u8 int_tri:1;
- u8 int_ccx:1;
-
- /* offset 1 */
- u8 mac_id:5;
- u8 pkt_drop:1;
- u8 pkt_ok:1;
- u8 bmc:1;
-
- /* offset 2 */
- u8 retry_cnt:6;
- u8 lifetime_over:1;
- u8 retry_over:1;
-
- /* offset 3 */
- u8 ccx_qtime0;
- u8 ccx_qtime1;
-
- /* offset 5 */
- u8 final_data_rate;
-
- /* offset 6 */
- u8 sw1:4;
- u8 qsel:4;
-
- /* offset 7 */
- u8 sw0;
-};
-
-#define txrpt_ccx_sw_8723a(txrpt_ccx) ((txrpt_ccx)->sw0 + ((txrpt_ccx)->sw1<<8))
-#define txrpt_ccx_qtime_8723a(txrpt_ccx) ((txrpt_ccx)->ccx_qtime0+((txrpt_ccx)->ccx_qtime1<<8))
-
-#ifdef CONFIG_XMIT_ACK
-void dump_txrpt_ccx_8723a(void *buf);
-void handle_txrpt_ccx_8723a(_adapter *adapter, void *buf);
-#else
-#define dump_txrpt_ccx_8723a(buf) do {} while(0)
-#define handle_txrpt_ccx_8723a(adapter, buf) do {} while(0)
-#endif //CONFIG_XMIT_ACK
-
-void rtl8723a_update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem);
-void rtl8723a_fill_fake_txdesc(PADAPTER padapter, u8 *pDesc, u32 BufferLen, u8 IsPsPoll, u8 IsBTQosNull);
-
-#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
-s32 rtl8723as_init_xmit_priv(PADAPTER padapter);
-void rtl8723as_free_xmit_priv(PADAPTER padapter);
-s32 rtl8723as_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe);
-s32 rtl8723as_mgnt_xmit(PADAPTER padapter, struct xmit_frame *pmgntframe);
-s32 rtl8723as_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
-s32 rtl8723as_xmit_buf_handler(PADAPTER padapter);
-thread_return rtl8723as_xmit_thread(thread_context context);
-#define hal_xmit_handler rtl8723as_xmit_buf_handler
-#endif
-
-#ifdef CONFIG_USB_HCI
-s32 rtl8723au_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
-s32 rtl8723au_xmit_buf_handler(PADAPTER padapter);
-#define hal_xmit_handler rtl8723au_xmit_buf_handler
-#endif
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __RTL8723A_XMIT_H__
+#define __RTL8723A_XMIT_H__
+
+#include <rtl8192c_xmit.h>
+
+//
+//defined for TX DESC Operation
+//
+
+#define MAX_TID (15)
+
+//OFFSET 0
+#define OFFSET_SZ 0
+#define OFFSET_SHT 16
+#define BMC BIT(24)
+#define LSG BIT(26)
+#define FSG BIT(27)
+#define OWN BIT(31)
+
+
+//OFFSET 4
+#define PKT_OFFSET_SZ 0
+#define BK BIT(6)
+#define QSEL_SHT 8
+#define Rate_ID_SHT 16
+#define NAVUSEHDR BIT(20)
+#define PKT_OFFSET_SHT 26
+#define HWPC BIT(31)
+
+//OFFSET 8
+#define AGG_EN BIT(29)
+
+//OFFSET 12
+#define SEQ_SHT 16
+
+//OFFSET 16
+#define QoS BIT(6)
+#define HW_SEQ_EN BIT(7)
+#define USERATE BIT(8)
+#define DISDATAFB BIT(10)
+#define DATA_SHORT BIT(24)
+#define DATA_BW BIT(25)
+
+//OFFSET 20
+#define SGI BIT(6)
+
+typedef struct txdesc_8723a
+{
+ u32 pktlen:16;
+ u32 offset:8;
+ u32 bmc:1;
+ u32 htc:1;
+ u32 ls:1;
+ u32 fs:1;
+ u32 linip:1;
+ u32 noacm:1;
+ u32 gf:1;
+ u32 own:1;
+
+ u32 macid:5;
+ u32 agg_en:1;
+ u32 bk:1;
+ u32 rd_en:1;
+ u32 qsel:5;
+ u32 rd_nav_ext:1;
+ u32 lsig_txop_en:1;
+ u32 pifs:1;
+ u32 rate_id:4;
+ u32 navusehdr:1;
+ u32 en_desc_id:1;
+ u32 sectype:2;
+ u32 rsvd0424:2;
+ u32 pkt_offset:5; // unit: 8 bytes
+ u32 rsvd0431:1;
+
+ u32 rts_rc:6;
+ u32 data_rc:6;
+ u32 rsvd0812:2;
+ u32 bar_rty_th:2;
+ u32 rsvd0816:1;
+ u32 morefrag:1;
+ u32 raw:1;
+ u32 ccx:1;
+ u32 ampdu_density:3;
+ u32 bt_null:1;
+ u32 ant_sel_a:1;
+ u32 ant_sel_b:1;
+ u32 tx_ant_cck:2;
+ u32 tx_antl:2;
+ u32 tx_ant_ht:2;
+
+ u32 nextheadpage:8;
+ u32 tailpage:8;
+ u32 seq:12;
+ u32 cpu_handle:1;
+ u32 tag1:1;
+ u32 trigger_int:1;
+ u32 hwseq_en:1;
+
+ u32 rtsrate:5;
+ u32 ap_dcfe:1;
+ u32 hwseq_sel:2;
+ u32 userate:1;
+ u32 disrtsfb:1;
+ u32 disdatafb:1;
+ u32 cts2self:1;
+ u32 rtsen:1;
+ u32 hw_rts_en:1;
+ u32 port_id:1;
+ u32 rsvd1615:3;
+ u32 wait_dcts:1;
+ u32 cts2ap_en:1;
+ u32 data_sc:2;
+ u32 data_stbc:2;
+ u32 data_short:1;
+ u32 data_bw:1;
+ u32 rts_short:1;
+ u32 rts_bw:1;
+ u32 rts_sc:2;
+ u32 vcs_stbc:2;
+
+ u32 datarate:6;
+ u32 sgi:1;
+ u32 try_rate:1;
+ u32 data_ratefb_lmt:5;
+ u32 rts_ratefb_lmt:4;
+ u32 rty_lmt_en:1;
+ u32 data_rt_lmt:6;
+ u32 usb_txagg_num:8;
+
+ u32 txagg_a:5;
+ u32 txagg_b:5;
+ u32 use_max_len:1;
+ u32 max_agg_num:5;
+ u32 mcsg1_max_len:4;
+ u32 mcsg2_max_len:4;
+ u32 mcsg3_max_len:4;
+ u32 mcs7_sgi_max_len:4;
+
+ u32 checksum:16; // TxBuffSize(PCIe)/CheckSum(USB)
+ u32 mcsg4_max_len:4;
+ u32 mcsg5_max_len:4;
+ u32 mcsg6_max_len:4;
+ u32 mcs15_sgi_max_len:4;
+}TXDESC, *PTXDESC;
+
+#define txdesc_set_ccx_sw_8723a(txdesc, value) \
+ do { \
+ ((struct txdesc_8723a *)(txdesc))->mcsg4_max_len = (((value)>>8) & 0x0f); \
+ ((struct txdesc_8723a *)(txdesc))->mcs15_sgi_max_len= (((value)>>4) & 0x0f); \
+ ((struct txdesc_8723a *)(txdesc))->mcsg6_max_len = ((value) & 0x0f); \
+ } while (0)
+
+struct txrpt_ccx_8723a {
+ /* offset 0 */
+ u8 tag1:1;
+ u8 rsvd:4;
+ u8 int_bt:1;
+ u8 int_tri:1;
+ u8 int_ccx:1;
+
+ /* offset 1 */
+ u8 mac_id:5;
+ u8 pkt_drop:1;
+ u8 pkt_ok:1;
+ u8 bmc:1;
+
+ /* offset 2 */
+ u8 retry_cnt:6;
+ u8 lifetime_over:1;
+ u8 retry_over:1;
+
+ /* offset 3 */
+ u8 ccx_qtime0;
+ u8 ccx_qtime1;
+
+ /* offset 5 */
+ u8 final_data_rate;
+
+ /* offset 6 */
+ u8 sw1:4;
+ u8 qsel:4;
+
+ /* offset 7 */
+ u8 sw0;
+};
+
+#define txrpt_ccx_sw_8723a(txrpt_ccx) ((txrpt_ccx)->sw0 + ((txrpt_ccx)->sw1<<8))
+#define txrpt_ccx_qtime_8723a(txrpt_ccx) ((txrpt_ccx)->ccx_qtime0+((txrpt_ccx)->ccx_qtime1<<8))
+
+#ifdef CONFIG_XMIT_ACK
+void dump_txrpt_ccx_8723a(void *buf);
+void handle_txrpt_ccx_8723a(_adapter *adapter, void *buf);
+#else
+#define dump_txrpt_ccx_8723a(buf) do {} while(0)
+#define handle_txrpt_ccx_8723a(adapter, buf) do {} while(0)
+#endif //CONFIG_XMIT_ACK
+
+void rtl8723a_update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem);
+void rtl8723a_fill_fake_txdesc(PADAPTER padapter, u8 *pDesc, u32 BufferLen, u8 IsPsPoll, u8 IsBTQosNull);
+
+#if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+s32 rtl8723as_init_xmit_priv(PADAPTER padapter);
+void rtl8723as_free_xmit_priv(PADAPTER padapter);
+s32 rtl8723as_hal_xmit(PADAPTER padapter, struct xmit_frame *pxmitframe);
+s32 rtl8723as_mgnt_xmit(PADAPTER padapter, struct xmit_frame *pmgntframe);
+s32 rtl8723as_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
+s32 rtl8723as_xmit_buf_handler(PADAPTER padapter);
+thread_return rtl8723as_xmit_thread(thread_context context);
+#define hal_xmit_handler rtl8723as_xmit_buf_handler
+#endif
+
+#ifdef CONFIG_USB_HCI
+s32 rtl8723au_hal_xmitframe_enqueue(_adapter *padapter, struct xmit_frame *pxmitframe);
+s32 rtl8723au_xmit_buf_handler(PADAPTER padapter);
+#define hal_xmit_handler rtl8723au_xmit_buf_handler
+#endif
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_ap.h b/drivers/net/wireless/rtl8723as/include/rtw_ap.h
index 02a14da5fbd0..a93e1e8da886 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_ap.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_ap.h
@@ -1,65 +1,65 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __RTW_AP_H_
-#define __RTW_AP_H_
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-
-
-#ifdef CONFIG_AP_MODE
-
-//external function
-extern void rtw_indicate_sta_assoc_event(_adapter *padapter, struct sta_info *psta);
-extern void rtw_indicate_sta_disassoc_event(_adapter *padapter, struct sta_info *psta);
-
-
-void init_mlme_ap_info(_adapter *padapter);
-void free_mlme_ap_info(_adapter *padapter);
-//void update_BCNTIM(_adapter *padapter);
-void rtw_add_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index, u8 *data, u8 len);
-void rtw_remove_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index);
-void update_beacon(_adapter *padapter, u8 ie_id, u8 *oui, u8 tx);
-void add_RATid(_adapter *padapter, struct sta_info *psta, u8 rssi_level);
-void expire_timeout_chk(_adapter *padapter);
-void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta);
-int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len);
-void rtw_ap_restore_network(_adapter *padapter);
-void rtw_set_macaddr_acl(_adapter *padapter, int mode);
-int rtw_acl_add_sta(_adapter *padapter, u8 *addr);
-int rtw_acl_remove_sta(_adapter *padapter, u8 *addr);
-
-#ifdef CONFIG_NATIVEAP_MLME
-void associated_clients_update(_adapter *padapter, u8 updated);
-void bss_cap_update_on_sta_join(_adapter *padapter, struct sta_info *psta);
-u8 bss_cap_update_on_sta_leave(_adapter *padapter, struct sta_info *psta);
-void sta_info_update(_adapter *padapter, struct sta_info *psta);
-void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta);
-u8 ap_free_sta(_adapter *padapter, struct sta_info *psta, bool active, u16 reason);
-int rtw_sta_flush(_adapter *padapter);
-int rtw_ap_inform_ch_switch(_adapter *padapter, u8 new_ch, u8 ch_offset);
-void start_ap_mode(_adapter *padapter);
-void stop_ap_mode(_adapter *padapter);
-#endif
-#endif //end of CONFIG_AP_MODE
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __RTW_AP_H_
+#define __RTW_AP_H_
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+
+
+#ifdef CONFIG_AP_MODE
+
+//external function
+extern void rtw_indicate_sta_assoc_event(_adapter *padapter, struct sta_info *psta);
+extern void rtw_indicate_sta_disassoc_event(_adapter *padapter, struct sta_info *psta);
+
+
+void init_mlme_ap_info(_adapter *padapter);
+void free_mlme_ap_info(_adapter *padapter);
+//void update_BCNTIM(_adapter *padapter);
+void rtw_add_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index, u8 *data, u8 len);
+void rtw_remove_bcn_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 index);
+void update_beacon(_adapter *padapter, u8 ie_id, u8 *oui, u8 tx);
+void add_RATid(_adapter *padapter, struct sta_info *psta, u8 rssi_level);
+void expire_timeout_chk(_adapter *padapter);
+void update_sta_info_apmode(_adapter *padapter, struct sta_info *psta);
+int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len);
+void rtw_ap_restore_network(_adapter *padapter);
+void rtw_set_macaddr_acl(_adapter *padapter, int mode);
+int rtw_acl_add_sta(_adapter *padapter, u8 *addr);
+int rtw_acl_remove_sta(_adapter *padapter, u8 *addr);
+
+#ifdef CONFIG_NATIVEAP_MLME
+void associated_clients_update(_adapter *padapter, u8 updated);
+void bss_cap_update_on_sta_join(_adapter *padapter, struct sta_info *psta);
+u8 bss_cap_update_on_sta_leave(_adapter *padapter, struct sta_info *psta);
+void sta_info_update(_adapter *padapter, struct sta_info *psta);
+void ap_sta_info_defer_update(_adapter *padapter, struct sta_info *psta);
+u8 ap_free_sta(_adapter *padapter, struct sta_info *psta, bool active, u16 reason);
+int rtw_sta_flush(_adapter *padapter);
+int rtw_ap_inform_ch_switch(_adapter *padapter, u8 new_ch, u8 ch_offset);
+void start_ap_mode(_adapter *padapter);
+void stop_ap_mode(_adapter *padapter);
+#endif
+#endif //end of CONFIG_AP_MODE
+
+#endif
+void update_bmc_sta(_adapter *padapter);
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_bt_mp.h b/drivers/net/wireless/rtl8723as/include/rtw_bt_mp.h
index 9a73aa3d1f33..15746616f470 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_bt_mp.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_bt_mp.h
@@ -1,318 +1,318 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-
-#ifndef __RTW_BT_MP_H
-#define __RTW_BT_MP_H
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <rtw_mp.h>
-
-
-#if(MP_DRIVER == 1)
-
-#pragma pack(1)
-
-// definition for BT_UP_OP_BT_READY
-#define MP_BT_NOT_READY 0
-#define MP_BT_READY 1
-
-// definition for BT_UP_OP_BT_SET_MODE
-typedef enum _MP_BT_MODE{
- MP_BT_MODE_RF_TXRX_TEST_MODE = 0,
- MP_BT_MODE_BT20_DUT_TEST_MODE = 1,
- MP_BT_MODE_BT40_DIRECT_TEST_MODE = 2,
- MP_BT_MODE_CONNECT_TEST_MODE = 3,
- MP_BT_MODE_MAX
-}MP_BT_MODE,*PMP_BT_MODE;
-
-
-// definition for BT_UP_OP_BT_SET_TX_RX_PARAMETER
-typedef struct _BT_TXRX_PARAMETERS{
- u1Byte txrxChannel;
- u4Byte txrxTxPktCnt;
- u1Byte txrxTxPktInterval;
- u1Byte txrxPayloadType;
- u1Byte txrxPktType;
- u2Byte txrxPayloadLen;
- u4Byte txrxPktHeader;
- u1Byte txrxWhitenCoeff;
- u1Byte txrxBdaddr[6];
- u1Byte txrxTxGainIndex;
-} BT_TXRX_PARAMETERS, *PBT_TXRX_PARAMETERS;
-
-// txrxPktType
-typedef enum _MP_BT_PKT_TYPE{
- MP_BT_PKT_DH1 = 0,
- MP_BT_PKT_DH3 = 1,
- MP_BT_PKT_DH5 = 2,
- MP_BT_PKT_2DH1 = 3,
- MP_BT_PKT_2DH3 = 4,
- MP_BT_PKT_2DH5 = 5,
- MP_BT_PKT_3DH1 = 6,
- MP_BT_PKT_3DH3 = 7,
- MP_BT_PKT_3DH5 = 8,
- MP_BT_PKT_LE = 9,
- MP_BT_PKT_MAX
-}MP_BT_PKT_TYPE,*PMP_BT_PKT_TYPE;
-// txrxPayloadType
-typedef enum _MP_BT_PAYLOAD_TYPE{
- MP_BT_PAYLOAD_01010101 = 0,
- MP_BT_PAYLOAD_ALL_1 = 1,
- MP_BT_PAYLOAD_ALL_0 = 2,
- MP_BT_PAYLOAD_11110000 = 3,
- MP_BT_PAYLOAD_PRBS9 = 4,
- MP_BT_PAYLOAD_MAX
-}MP_BT_PAYLOAD_TYPE,*PMP_BT_PAYLOAD_TYPE;
-
-
-// definition for BT_UP_OP_BT_TEST_CTRL
-typedef enum _MP_BT_TEST_CTRL{
- MP_BT_TEST_STOP_ALL_TESTS = 0,
- MP_BT_TEST_START_RX_TEST = 1,
- MP_BT_TEST_START_PACKET_TX_TEST = 2,
- MP_BT_TEST_START_CONTINUOUS_TX_TEST = 3,
- MP_BT_TEST_START_INQUIRY_SCAN_TEST = 4,
- MP_BT_TEST_START_PAGE_SCAN_TEST = 5,
- MP_BT_TEST_START_INQUIRY_PAGE_SCAN_TEST = 6,
- MP_BT_TEST_START_LEGACY_CONNECT_TEST = 7,
- MP_BT_TEST_START_LE_CONNECT_TEST_INITIATOR = 8,
- MP_BT_TEST_START_LE_CONNECT_TEST_ADVERTISER = 9,
- MP_BT_TEST_MAX
-}MP_BT_TEST_CTRL,*PMP_BT_TEST_CTRL;
-
-
-typedef enum _RTL_EXT_C2H_EVT
-{
- EXT_C2H_WIFI_FW_ACTIVE_RSP = 0,
- EXT_C2H_TRIG_BY_BT_FW = 1,
- MAX_EXT_C2HEVENT
-}RTL_EXT_C2H_EVT;
-
-
-// return status definition to the user layer
-typedef enum _BT_CTRL_STATUS{
- BT_STATUS_SUCCESS = 0x00, // Success
- BT_STATUS_BT_OP_SUCCESS = 0x01, // bt fw op execution success
- BT_STATUS_H2C_SUCCESS = 0x02, // H2c success
- BT_STATUS_H2C_TIMTOUT = 0x03, // H2c timeout
- BT_STATUS_H2C_BT_NO_RSP = 0x04, // H2c sent, bt no rsp
- BT_STATUS_C2H_SUCCESS = 0x05, // C2h success
- BT_STATUS_C2H_REQNUM_MISMATCH = 0x06, // bt fw wrong rsp
- BT_STATUS_OPCODE_U_VERSION_MISMATCH = 0x07, // Upper layer OP code version mismatch.
- BT_STATUS_OPCODE_L_VERSION_MISMATCH = 0x08, // Lower layer OP code version mismatch.
- BT_STATUS_UNKNOWN_OPCODE_U = 0x09, // Unknown Upper layer OP code
- BT_STATUS_UNKNOWN_OPCODE_L = 0x0a, // Unknown Lower layer OP code
- BT_STATUS_PARAMETER_FORMAT_ERROR_U = 0x0b, // Wrong parameters sent by upper layer.
- BT_STATUS_PARAMETER_FORMAT_ERROR_L = 0x0c, // bt fw parameter format is not consistency
- BT_STATUS_PARAMETER_OUT_OF_RANGE_U = 0x0d, // uppery layer parameter value is out of range
- BT_STATUS_PARAMETER_OUT_OF_RANGE_L = 0x0e, // bt fw parameter value is out of range
- BT_STATUS_UNKNOWN_STATUS_L = 0x0f, // bt returned an defined status code
- BT_STATUS_UNKNOWN_STATUS_H = 0x10, // driver need to do error handle or not handle-well.
- BT_STATUS_WRONG_LEVEL = 0x11, // should be under passive level
- BT_STATUS_MAX
-}BT_CTRL_STATUS,*PBT_CTRL_STATUS;
-
-// OP codes definition between the user layer and driver
-typedef enum _BT_CTRL_OPCODE_UPPER{
- BT_UP_OP_BT_READY = 0x00,
- BT_UP_OP_BT_SET_MODE = 0x01,
- BT_UP_OP_BT_SET_TX_RX_PARAMETER = 0x02,
- BT_UP_OP_BT_SET_GENERAL = 0x03,
- BT_UP_OP_BT_GET_GENERAL = 0x04,
- BT_UP_OP_BT_TEST_CTRL = 0x05,
- BT_UP_OP_TEST_BT = 0x06,
- BT_UP_OP_MAX
-}BT_CTRL_OPCODE_UPPER,*PBT_CTRL_OPCODE_UPPER;
-
-
-typedef enum _BT_SET_GENERAL{
- BT_GSET_REG = 0x00,
- BT_GSET_RESET = 0x01,
- BT_GSET_TARGET_BD_ADDR = 0x02,
- BT_GSET_TX_PWR_FINETUNE = 0x03,
- BT_SET_TRACKING_INTERVAL = 0x04,
- BT_SET_THERMAL_METER = 0x05,
- BT_ENABLE_CFO_TRACKING = 0x06,
- BT_GSET_UPDATE_BT_PATCH = 0x07,
- BT_GSET_MAX
-}BT_SET_GENERAL,*PBT_SET_GENERAL;
-
-typedef enum _BT_GET_GENERAL{
- BT_GGET_REG = 0x00,
- BT_GGET_STATUS = 0x01,
- BT_GGET_REPORT = 0x02,
- BT_GGET_AFH_MAP = 0x03,
- BT_GGET_AFH_STATUS = 0x04,
- BT_GGET_MAX
-}BT_GET_GENERAL,*PBT_GET_GENERAL;
-
-// definition for BT_UP_OP_BT_SET_GENERAL
-typedef enum _BT_REG_TYPE{
- BT_REG_RF = 0,
- BT_REG_MODEM = 1,
- BT_REG_BLUEWIZE = 2,
- BT_REG_VENDOR = 3,
- BT_REG_LE = 4,
- BT_REG_MAX
-}BT_REG_TYPE,*PBT_REG_TYPE;
-
-// definition for BT_LO_OP_GET_AFH_MAP
-typedef enum _BT_AFH_MAP_TYPE{
- BT_AFH_MAP_RESULT = 0,
- BT_AFH_MAP_WIFI_PSD_ONLY = 1,
- BT_AFH_MAP_WIFI_CH_BW_ONLY = 2,
- BT_AFH_MAP_BT_PSD_ONLY = 3,
- BT_AFH_MAP_HOST_CLASSIFICATION_ONLY = 4,
- BT_AFH_MAP_MAX
-}BT_AFH_MAP_TYPE,*PBT_AFH_MAP_TYPE;
-
-// definition for BT_UP_OP_BT_GET_GENERAL
-typedef enum _BT_REPORT_TYPE{
- BT_REPORT_RX_PACKET_CNT = 0,
- BT_REPORT_RX_ERROR_BITS = 1,
- BT_REPORT_RSSI = 2,
- BT_REPORT_CFO_HDR_QUALITY = 3,
- BT_REPORT_CONNECT_TARGET_BD_ADDR = 4,
- BT_REPORT_MAX
-}BT_REPORT_TYPE,*PBT_REPORT_TYPE;
-
-VOID
-MPTBT_Test(
- IN PADAPTER Adapter,
- IN u1Byte opCode,
- IN u1Byte byte1,
- IN u1Byte byte2,
- IN u1Byte byte3
- );
-
-NDIS_STATUS
-MPTBT_SendOidBT(
- IN PADAPTER pAdapter,
- IN PVOID InformationBuffer,
- IN ULONG InformationBufferLength,
- OUT PULONG BytesRead,
- OUT PULONG BytesNeeded
- );
-
-VOID
-MPTBT_FwC2hBtMpCtrl(
- PADAPTER Adapter,
- pu1Byte tmpBuf,
- u1Byte length
- );
-
-void MPh2c_timeout_handle(void *FunctionContext);
-
-VOID mptbt_BtControlProcess(
- PADAPTER Adapter,
- PVOID pInBuf
- );
-
-#define BT_H2C_MAX_RETRY 1
-#define BT_MAX_C2H_LEN 20
-
-typedef struct _BT_REQ_CMD{
- UCHAR opCodeVer;
- UCHAR OpCode;
- USHORT paraLength;
- UCHAR pParamStart[100];
-} BT_REQ_CMD, *PBT_REQ_CMD;
-
-typedef struct _BT_RSP_CMD{
- USHORT status;
- USHORT paraLength;
- UCHAR pParamStart[100];
-} BT_RSP_CMD, *PBT_RSP_CMD;
-
-
-typedef struct _BT_H2C{
- u1Byte opCodeVer:4;
- u1Byte reqNum:4;
- u1Byte opCode;
- u1Byte buf[100];
-}BT_H2C, *PBT_H2C;
-
-
-
-typedef struct _BT_EXT_C2H{
- u1Byte extendId;
- u1Byte statusCode:4;
- u1Byte retLen:4;
- u1Byte opCodeVer:4;
- u1Byte reqNum:4;
- u1Byte buf[100];
-}BT_EXT_C2H, *PBT_EXT_C2H;
-
-typedef enum _BT_OPCODE_STATUS{
- BT_OP_STATUS_SUCCESS = 0x00, // Success
- BT_OP_STATUS_VERSION_MISMATCH = 0x01,
- BT_OP_STATUS_UNKNOWN_OPCODE = 0x02,
- BT_OP_STATUS_ERROR_PARAMETER = 0x03,
- BT_OP_STATUS_MAX
-}BT_OPCODE_STATUS,*PBT_OPCODE_STATUS;
-
-
-//OP codes definition between driver and bt fw
-typedef enum _BT_CTRL_OPCODE_LOWER{
- BT_LO_OP_GET_BT_VERSION = 0x00,
- BT_LO_OP_RESET = 0x01,
- BT_LO_OP_TEST_CTRL = 0x02,
- BT_LO_OP_SET_BT_MODE = 0x03,
- BT_LO_OP_SET_CHNL_TX_GAIN = 0x04,
- BT_LO_OP_SET_PKT_TYPE_LEN = 0x05,
- BT_LO_OP_SET_PKT_CNT_L_PL_TYPE = 0x06,
- BT_LO_OP_SET_PKT_CNT_H_PKT_INTV = 0x07,
- BT_LO_OP_SET_PKT_HEADER = 0x08,
- BT_LO_OP_SET_WHITENCOEFF = 0x09,
- BT_LO_OP_SET_BD_ADDR_L = 0x0a,
- BT_LO_OP_SET_BD_ADDR_H = 0x0b,
- BT_LO_OP_WRITE_REG_ADDR = 0x0c,
- BT_LO_OP_WRITE_REG_VALUE = 0x0d,
- BT_LO_OP_GET_BT_STATUS = 0x0e,
- BT_LO_OP_GET_BD_ADDR_L = 0x0f,
- BT_LO_OP_GET_BD_ADDR_H = 0x10,
- BT_LO_OP_READ_REG = 0x11,
- BT_LO_OP_SET_TARGET_BD_ADDR_L = 0x12,
- BT_LO_OP_SET_TARGET_BD_ADDR_H = 0x13,
- BT_LO_OP_SET_TX_POWER_CALIBRATION = 0x14,
- BT_LO_OP_GET_RX_PKT_CNT_L = 0x15,
- BT_LO_OP_GET_RX_PKT_CNT_H = 0x16,
- BT_LO_OP_GET_RX_ERROR_BITS_L = 0x17,
- BT_LO_OP_GET_RX_ERROR_BITS_H = 0x18,
- BT_LO_OP_GET_RSSI = 0x19,
- BT_LO_OP_GET_CFO_HDR_QUALITY_L = 0x1a,
- BT_LO_OP_GET_CFO_HDR_QUALITY_H = 0x1b,
- BT_LO_OP_GET_TARGET_BD_ADDR_L = 0x1c,
- BT_LO_OP_GET_TARGET_BD_ADDR_H = 0x1d,
- BT_LO_OP_GET_AFH_MAP_L = 0x1e,
- BT_LO_OP_GET_AFH_MAP_M = 0x1f,
- BT_LO_OP_GET_AFH_MAP_H = 0x20,
- BT_LO_OP_GET_AFH_STATUS = 0x21,
- BT_LO_OP_SET_TRACKING_INTERVAL = 0x22,
- BT_LO_OP_SET_THERMAL_METER = 0x23,
- BT_LO_OP_ENABLE_CFO_TRACKING = 0x24,
- BT_LO_OP_MAX
-}BT_CTRL_OPCODE_LOWER,*PBT_CTRL_OPCODE_LOWER;
-
-#endif /* #if(MP_DRIVER == 1) */
-
-#endif // #ifndef __INC_MPT_BT_H
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+
+#ifndef __RTW_BT_MP_H
+#define __RTW_BT_MP_H
+
+#include <osdep_service.h>
+#include <drv_types.h>
+#include <rtw_mp.h>
+
+
+#if(MP_DRIVER == 1)
+
+#pragma pack(1)
+
+// definition for BT_UP_OP_BT_READY
+#define MP_BT_NOT_READY 0
+#define MP_BT_READY 1
+
+// definition for BT_UP_OP_BT_SET_MODE
+typedef enum _MP_BT_MODE{
+ MP_BT_MODE_RF_TXRX_TEST_MODE = 0,
+ MP_BT_MODE_BT20_DUT_TEST_MODE = 1,
+ MP_BT_MODE_BT40_DIRECT_TEST_MODE = 2,
+ MP_BT_MODE_CONNECT_TEST_MODE = 3,
+ MP_BT_MODE_MAX
+}MP_BT_MODE,*PMP_BT_MODE;
+
+
+// definition for BT_UP_OP_BT_SET_TX_RX_PARAMETER
+typedef struct _BT_TXRX_PARAMETERS{
+ u1Byte txrxChannel;
+ u4Byte txrxTxPktCnt;
+ u1Byte txrxTxPktInterval;
+ u1Byte txrxPayloadType;
+ u1Byte txrxPktType;
+ u2Byte txrxPayloadLen;
+ u4Byte txrxPktHeader;
+ u1Byte txrxWhitenCoeff;
+ u1Byte txrxBdaddr[6];
+ u1Byte txrxTxGainIndex;
+} BT_TXRX_PARAMETERS, *PBT_TXRX_PARAMETERS;
+
+// txrxPktType
+typedef enum _MP_BT_PKT_TYPE{
+ MP_BT_PKT_DH1 = 0,
+ MP_BT_PKT_DH3 = 1,
+ MP_BT_PKT_DH5 = 2,
+ MP_BT_PKT_2DH1 = 3,
+ MP_BT_PKT_2DH3 = 4,
+ MP_BT_PKT_2DH5 = 5,
+ MP_BT_PKT_3DH1 = 6,
+ MP_BT_PKT_3DH3 = 7,
+ MP_BT_PKT_3DH5 = 8,
+ MP_BT_PKT_LE = 9,
+ MP_BT_PKT_MAX
+}MP_BT_PKT_TYPE,*PMP_BT_PKT_TYPE;
+// txrxPayloadType
+typedef enum _MP_BT_PAYLOAD_TYPE{
+ MP_BT_PAYLOAD_01010101 = 0,
+ MP_BT_PAYLOAD_ALL_1 = 1,
+ MP_BT_PAYLOAD_ALL_0 = 2,
+ MP_BT_PAYLOAD_11110000 = 3,
+ MP_BT_PAYLOAD_PRBS9 = 4,
+ MP_BT_PAYLOAD_MAX
+}MP_BT_PAYLOAD_TYPE,*PMP_BT_PAYLOAD_TYPE;
+
+
+// definition for BT_UP_OP_BT_TEST_CTRL
+typedef enum _MP_BT_TEST_CTRL{
+ MP_BT_TEST_STOP_ALL_TESTS = 0,
+ MP_BT_TEST_START_RX_TEST = 1,
+ MP_BT_TEST_START_PACKET_TX_TEST = 2,
+ MP_BT_TEST_START_CONTINUOUS_TX_TEST = 3,
+ MP_BT_TEST_START_INQUIRY_SCAN_TEST = 4,
+ MP_BT_TEST_START_PAGE_SCAN_TEST = 5,
+ MP_BT_TEST_START_INQUIRY_PAGE_SCAN_TEST = 6,
+ MP_BT_TEST_START_LEGACY_CONNECT_TEST = 7,
+ MP_BT_TEST_START_LE_CONNECT_TEST_INITIATOR = 8,
+ MP_BT_TEST_START_LE_CONNECT_TEST_ADVERTISER = 9,
+ MP_BT_TEST_MAX
+}MP_BT_TEST_CTRL,*PMP_BT_TEST_CTRL;
+
+
+typedef enum _RTL_EXT_C2H_EVT
+{
+ EXT_C2H_WIFI_FW_ACTIVE_RSP = 0,
+ EXT_C2H_TRIG_BY_BT_FW = 1,
+ MAX_EXT_C2HEVENT
+}RTL_EXT_C2H_EVT;
+
+
+// return status definition to the user layer
+typedef enum _BT_CTRL_STATUS{
+ BT_STATUS_SUCCESS = 0x00, // Success
+ BT_STATUS_BT_OP_SUCCESS = 0x01, // bt fw op execution success
+ BT_STATUS_H2C_SUCCESS = 0x02, // H2c success
+ BT_STATUS_H2C_TIMTOUT = 0x03, // H2c timeout
+ BT_STATUS_H2C_BT_NO_RSP = 0x04, // H2c sent, bt no rsp
+ BT_STATUS_C2H_SUCCESS = 0x05, // C2h success
+ BT_STATUS_C2H_REQNUM_MISMATCH = 0x06, // bt fw wrong rsp
+ BT_STATUS_OPCODE_U_VERSION_MISMATCH = 0x07, // Upper layer OP code version mismatch.
+ BT_STATUS_OPCODE_L_VERSION_MISMATCH = 0x08, // Lower layer OP code version mismatch.
+ BT_STATUS_UNKNOWN_OPCODE_U = 0x09, // Unknown Upper layer OP code
+ BT_STATUS_UNKNOWN_OPCODE_L = 0x0a, // Unknown Lower layer OP code
+ BT_STATUS_PARAMETER_FORMAT_ERROR_U = 0x0b, // Wrong parameters sent by upper layer.
+ BT_STATUS_PARAMETER_FORMAT_ERROR_L = 0x0c, // bt fw parameter format is not consistency
+ BT_STATUS_PARAMETER_OUT_OF_RANGE_U = 0x0d, // uppery layer parameter value is out of range
+ BT_STATUS_PARAMETER_OUT_OF_RANGE_L = 0x0e, // bt fw parameter value is out of range
+ BT_STATUS_UNKNOWN_STATUS_L = 0x0f, // bt returned an defined status code
+ BT_STATUS_UNKNOWN_STATUS_H = 0x10, // driver need to do error handle or not handle-well.
+ BT_STATUS_WRONG_LEVEL = 0x11, // should be under passive level
+ BT_STATUS_MAX
+}BT_CTRL_STATUS,*PBT_CTRL_STATUS;
+
+// OP codes definition between the user layer and driver
+typedef enum _BT_CTRL_OPCODE_UPPER{
+ BT_UP_OP_BT_READY = 0x00,
+ BT_UP_OP_BT_SET_MODE = 0x01,
+ BT_UP_OP_BT_SET_TX_RX_PARAMETER = 0x02,
+ BT_UP_OP_BT_SET_GENERAL = 0x03,
+ BT_UP_OP_BT_GET_GENERAL = 0x04,
+ BT_UP_OP_BT_TEST_CTRL = 0x05,
+ BT_UP_OP_TEST_BT = 0x06,
+ BT_UP_OP_MAX
+}BT_CTRL_OPCODE_UPPER,*PBT_CTRL_OPCODE_UPPER;
+
+
+typedef enum _BT_SET_GENERAL{
+ BT_GSET_REG = 0x00,
+ BT_GSET_RESET = 0x01,
+ BT_GSET_TARGET_BD_ADDR = 0x02,
+ BT_GSET_TX_PWR_FINETUNE = 0x03,
+ BT_SET_TRACKING_INTERVAL = 0x04,
+ BT_SET_THERMAL_METER = 0x05,
+ BT_ENABLE_CFO_TRACKING = 0x06,
+ BT_GSET_UPDATE_BT_PATCH = 0x07,
+ BT_GSET_MAX
+}BT_SET_GENERAL,*PBT_SET_GENERAL;
+
+typedef enum _BT_GET_GENERAL{
+ BT_GGET_REG = 0x00,
+ BT_GGET_STATUS = 0x01,
+ BT_GGET_REPORT = 0x02,
+ BT_GGET_AFH_MAP = 0x03,
+ BT_GGET_AFH_STATUS = 0x04,
+ BT_GGET_MAX
+}BT_GET_GENERAL,*PBT_GET_GENERAL;
+
+// definition for BT_UP_OP_BT_SET_GENERAL
+typedef enum _BT_REG_TYPE{
+ BT_REG_RF = 0,
+ BT_REG_MODEM = 1,
+ BT_REG_BLUEWIZE = 2,
+ BT_REG_VENDOR = 3,
+ BT_REG_LE = 4,
+ BT_REG_MAX
+}BT_REG_TYPE,*PBT_REG_TYPE;
+
+// definition for BT_LO_OP_GET_AFH_MAP
+typedef enum _BT_AFH_MAP_TYPE{
+ BT_AFH_MAP_RESULT = 0,
+ BT_AFH_MAP_WIFI_PSD_ONLY = 1,
+ BT_AFH_MAP_WIFI_CH_BW_ONLY = 2,
+ BT_AFH_MAP_BT_PSD_ONLY = 3,
+ BT_AFH_MAP_HOST_CLASSIFICATION_ONLY = 4,
+ BT_AFH_MAP_MAX
+}BT_AFH_MAP_TYPE,*PBT_AFH_MAP_TYPE;
+
+// definition for BT_UP_OP_BT_GET_GENERAL
+typedef enum _BT_REPORT_TYPE{
+ BT_REPORT_RX_PACKET_CNT = 0,
+ BT_REPORT_RX_ERROR_BITS = 1,
+ BT_REPORT_RSSI = 2,
+ BT_REPORT_CFO_HDR_QUALITY = 3,
+ BT_REPORT_CONNECT_TARGET_BD_ADDR = 4,
+ BT_REPORT_MAX
+}BT_REPORT_TYPE,*PBT_REPORT_TYPE;
+
+VOID
+MPTBT_Test(
+ IN PADAPTER Adapter,
+ IN u1Byte opCode,
+ IN u1Byte byte1,
+ IN u1Byte byte2,
+ IN u1Byte byte3
+ );
+
+NDIS_STATUS
+MPTBT_SendOidBT(
+ IN PADAPTER pAdapter,
+ IN PVOID InformationBuffer,
+ IN ULONG InformationBufferLength,
+ OUT PULONG BytesRead,
+ OUT PULONG BytesNeeded
+ );
+
+VOID
+MPTBT_FwC2hBtMpCtrl(
+ PADAPTER Adapter,
+ pu1Byte tmpBuf,
+ u1Byte length
+ );
+
+void MPh2c_timeout_handle(void *FunctionContext);
+
+VOID mptbt_BtControlProcess(
+ PADAPTER Adapter,
+ PVOID pInBuf
+ );
+
+#define BT_H2C_MAX_RETRY 1
+#define BT_MAX_C2H_LEN 20
+
+typedef struct _BT_REQ_CMD{
+ UCHAR opCodeVer;
+ UCHAR OpCode;
+ USHORT paraLength;
+ UCHAR pParamStart[100];
+} BT_REQ_CMD, *PBT_REQ_CMD;
+
+typedef struct _BT_RSP_CMD{
+ USHORT status;
+ USHORT paraLength;
+ UCHAR pParamStart[100];
+} BT_RSP_CMD, *PBT_RSP_CMD;
+
+
+typedef struct _BT_H2C{
+ u1Byte opCodeVer:4;
+ u1Byte reqNum:4;
+ u1Byte opCode;
+ u1Byte buf[100];
+}BT_H2C, *PBT_H2C;
+
+
+
+typedef struct _BT_EXT_C2H{
+ u1Byte extendId;
+ u1Byte statusCode:4;
+ u1Byte retLen:4;
+ u1Byte opCodeVer:4;
+ u1Byte reqNum:4;
+ u1Byte buf[100];
+}BT_EXT_C2H, *PBT_EXT_C2H;
+
+typedef enum _BT_OPCODE_STATUS{
+ BT_OP_STATUS_SUCCESS = 0x00, // Success
+ BT_OP_STATUS_VERSION_MISMATCH = 0x01,
+ BT_OP_STATUS_UNKNOWN_OPCODE = 0x02,
+ BT_OP_STATUS_ERROR_PARAMETER = 0x03,
+ BT_OP_STATUS_MAX
+}BT_OPCODE_STATUS,*PBT_OPCODE_STATUS;
+
+
+//OP codes definition between driver and bt fw
+typedef enum _BT_CTRL_OPCODE_LOWER{
+ BT_LO_OP_GET_BT_VERSION = 0x00,
+ BT_LO_OP_RESET = 0x01,
+ BT_LO_OP_TEST_CTRL = 0x02,
+ BT_LO_OP_SET_BT_MODE = 0x03,
+ BT_LO_OP_SET_CHNL_TX_GAIN = 0x04,
+ BT_LO_OP_SET_PKT_TYPE_LEN = 0x05,
+ BT_LO_OP_SET_PKT_CNT_L_PL_TYPE = 0x06,
+ BT_LO_OP_SET_PKT_CNT_H_PKT_INTV = 0x07,
+ BT_LO_OP_SET_PKT_HEADER = 0x08,
+ BT_LO_OP_SET_WHITENCOEFF = 0x09,
+ BT_LO_OP_SET_BD_ADDR_L = 0x0a,
+ BT_LO_OP_SET_BD_ADDR_H = 0x0b,
+ BT_LO_OP_WRITE_REG_ADDR = 0x0c,
+ BT_LO_OP_WRITE_REG_VALUE = 0x0d,
+ BT_LO_OP_GET_BT_STATUS = 0x0e,
+ BT_LO_OP_GET_BD_ADDR_L = 0x0f,
+ BT_LO_OP_GET_BD_ADDR_H = 0x10,
+ BT_LO_OP_READ_REG = 0x11,
+ BT_LO_OP_SET_TARGET_BD_ADDR_L = 0x12,
+ BT_LO_OP_SET_TARGET_BD_ADDR_H = 0x13,
+ BT_LO_OP_SET_TX_POWER_CALIBRATION = 0x14,
+ BT_LO_OP_GET_RX_PKT_CNT_L = 0x15,
+ BT_LO_OP_GET_RX_PKT_CNT_H = 0x16,
+ BT_LO_OP_GET_RX_ERROR_BITS_L = 0x17,
+ BT_LO_OP_GET_RX_ERROR_BITS_H = 0x18,
+ BT_LO_OP_GET_RSSI = 0x19,
+ BT_LO_OP_GET_CFO_HDR_QUALITY_L = 0x1a,
+ BT_LO_OP_GET_CFO_HDR_QUALITY_H = 0x1b,
+ BT_LO_OP_GET_TARGET_BD_ADDR_L = 0x1c,
+ BT_LO_OP_GET_TARGET_BD_ADDR_H = 0x1d,
+ BT_LO_OP_GET_AFH_MAP_L = 0x1e,
+ BT_LO_OP_GET_AFH_MAP_M = 0x1f,
+ BT_LO_OP_GET_AFH_MAP_H = 0x20,
+ BT_LO_OP_GET_AFH_STATUS = 0x21,
+ BT_LO_OP_SET_TRACKING_INTERVAL = 0x22,
+ BT_LO_OP_SET_THERMAL_METER = 0x23,
+ BT_LO_OP_ENABLE_CFO_TRACKING = 0x24,
+ BT_LO_OP_MAX
+}BT_CTRL_OPCODE_LOWER,*PBT_CTRL_OPCODE_LOWER;
+
+#endif /* #if(MP_DRIVER == 1) */
+
+#endif // #ifndef __INC_MPT_BT_H
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_byteorder.h b/drivers/net/wireless/rtl8723as/include/rtw_byteorder.h
index 0f06b7acb3aa..ad72188ea549 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_byteorder.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_byteorder.h
@@ -27,7 +27,7 @@
#endif
#if defined (CONFIG_LITTLE_ENDIAN)
-#ifndef CONFIG_PLATFORM_MSTAR389
+#ifndef CONFIG_PLATFORM_MSTAR
# include <byteorder/little_endian.h>
#endif
#elif defined (CONFIG_BIG_ENDIAN)
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_cmd.h b/drivers/net/wireless/rtl8723as/include/rtw_cmd.h
index d081b1b6e6ce..97a468c04b27 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_cmd.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_cmd.h
@@ -71,6 +71,7 @@
u32 cmd_done_cnt;
u32 rsp_cnt;
u8 cmdthd_running;
+ u8 stop_req;
_adapter *padapter;
};
@@ -148,6 +149,7 @@ extern struct evt_obj *rtw_dequeue_evt(_queue *queue);
extern void rtw_free_evt_obj(struct evt_obj *pcmd);
#endif
+void rtw_stop_cmd_thread(_adapter *adapter);
thread_return rtw_cmd_thread(thread_context context);
extern u32 rtw_init_cmd_priv (struct cmd_priv *pcmdpriv);
@@ -180,6 +182,11 @@ enum rtw_drvextra_cmd_id
INTEl_WIDI_WK_CID,
C2H_WK_CID,
RTP_TIMER_CFG_WK_CID,
+ RESET_SECURITYPRIV, // add for CONFIG_IEEE80211W, none 11w also can use
+ FREE_ASSOC_RESOURCES, // add for CONFIG_IEEE80211W, none 11w also can use
+#ifdef CONFIG_DETECT_C2H_BY_POLLING
+ EVENT_POLLING_CID,
+#endif
MAX_WK_CID
};
@@ -938,11 +945,11 @@ u8 rtw_sitesurvey_cmd(_adapter *padapter, NDIS_802_11_SSID *ssid, int ssid_num,
extern u8 rtw_createbss_cmd(_adapter *padapter);
extern u8 rtw_createbss_cmd_ex(_adapter *padapter, unsigned char *pbss, unsigned int sz);
extern u8 rtw_setphy_cmd(_adapter *padapter, u8 modem, u8 ch);
-extern u8 rtw_setstakey_cmd(_adapter *padapter, u8 *psta, u8 unicast_key);
+extern u8 rtw_setstakey_cmd(_adapter *padapter, u8 *psta, u8 unicast_key, bool enqueue);
extern u8 rtw_clearstakey_cmd(_adapter *padapter, u8 *psta, u8 entry, u8 enqueue);
extern u8 rtw_joinbss_cmd(_adapter *padapter, struct wlan_network* pnetwork);
u8 rtw_disassoc_cmd(_adapter *padapter, u32 deauth_timeout_ms, bool enqueue);
-extern u8 rtw_setopmode_cmd(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype);
+extern u8 rtw_setopmode_cmd(_adapter *padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype, bool enqueue);
extern u8 rtw_setdatarate_cmd(_adapter *padapter, u8 *rateset);
extern u8 rtw_setbasicrate_cmd(_adapter *padapter, u8 *rateset);
extern u8 rtw_setbbreg_cmd(_adapter * padapter, u8 offset, u8 val);
@@ -958,7 +965,9 @@ extern u8 rtw_setfwdig_cmd(_adapter*padapter, u8 type);
extern u8 rtw_setfwra_cmd(_adapter*padapter, u8 type);
extern u8 rtw_addbareq_cmd(_adapter*padapter, u8 tid, u8 *addr);
-
+// add for CONFIG_IEEE80211W, none 11w also can use
+extern u8 rtw_reset_securitypriv_cmd(_adapter*padapter);
+extern u8 rtw_free_assoc_resources_cmd(_adapter *padapter);
extern u8 rtw_dynamic_chk_wk_cmd(_adapter *adapter);
u8 rtw_lps_ctrl_wk_cmd(_adapter*padapter, u8 lps_ctrl_type, u8 enqueue);
@@ -984,6 +993,10 @@ extern u8 rtw_tdls_cmd(_adapter*padapter, u8 *addr, u8 option);
extern u8 rtw_c2h_wk_cmd(PADAPTER padapter, u8 *c2h_evt);
+#ifdef CONFIG_DETECT_C2H_BY_POLLING
+extern u8 rtw_event_polling_cmd(_adapter*padapter);
+#endif
+
u8 rtw_drvextra_cmd_hdl(_adapter *padapter, unsigned char *pbuf);
extern void rtw_survey_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd);
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_debug.h b/drivers/net/wireless/rtl8723as/include/rtw_debug.h
index 3d94efbc99d4..f9f6941605a0 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_debug.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_debug.h
@@ -286,6 +286,12 @@ extern void rtl871x_cedbg(const char *fmt, ...);
off_t offset, int count,
int *eof, void *data);
+#ifdef DBG_MEM_ALLOC
+ int proc_get_mstat(char *page, char **start,
+ off_t offset, int count,
+ int *eof, void *data);
+#endif /* DBG_MEM_ALLOC */
+
int proc_get_write_reg(char *page, char **start,
off_t offset, int count,
int *eof, void *data);
@@ -395,6 +401,8 @@ extern void rtl871x_cedbg(const char *fmt, ...);
int proc_get_best_channel(char *page, char **start,
off_t offset, int count,
int *eof, void *data);
+ int proc_set_best_channel(struct file *file, const char *buffer,
+ unsigned long count, void *data);
#endif
int proc_get_rx_signal(char *page, char **start,
@@ -460,6 +468,14 @@ int proc_get_sreset(char *page, char **start, off_t offset, int count, int *eof,
int proc_set_sreset(struct file *file, const char *buffer, unsigned long count, void *data);
#endif /* DBG_CONFIG_ERROR_DETECT */
+int proc_get_odm_dbg_comp(char *page, char **start, off_t offset, int count, int *eof, void *data);
+int proc_set_odm_dbg_comp(struct file *file, const char *buffer, unsigned long count, void *data);
+int proc_get_odm_dbg_level(char *page, char **start, off_t offset, int count, int *eof, void *data);
+int proc_set_odm_dbg_level(struct file *file, const char *buffer, unsigned long count, void *data);
+
+int proc_get_odm_adaptivity(char *page, char **start, off_t offset, int count, int *eof, void *data);
+int proc_set_odm_adaptivity(struct file *file, const char *buffer, unsigned long count, void *data);
+
#endif //CONFIG_PROC_DEBUG
#endif //__RTW_DEBUG_H__
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_eeprom.h b/drivers/net/wireless/rtl8723as/include/rtw_eeprom.h
index e00a5068e5ab..564f5cd2d569 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_eeprom.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_eeprom.h
@@ -138,6 +138,7 @@ struct eeprom_priv
#ifdef CONFIG_RF_GAIN_OFFSET
u8 EEPROMRFGainOffset;
+ u8 EEPROMRFGainVal;
#endif //CONFIG_RF_GAIN_OFFSET
#ifdef CONFIG_SDIO_HCI
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_io.h b/drivers/net/wireless/rtl8723as/include/rtw_io.h
index c48f44f6c2c7..bc09b0d8d5f1 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_io.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_io.h
@@ -45,15 +45,6 @@
#include <linux/usb/ch9.h>
#endif
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
-#define rtw_usb_buffer_alloc(dev, size, dma) usb_alloc_coherent((dev), (size), (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL), (dma))
-#define rtw_usb_buffer_free(dev, size, addr, dma) usb_free_coherent((dev), (size), (addr), (dma))
-#else
-#define rtw_usb_buffer_alloc(dev, size, dma) usb_buffer_alloc((dev), (size), (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL), (dma))
-#define rtw_usb_buffer_free(dev, size, addr, dma) usb_buffer_free((dev), (size), (addr), (dma))
-#endif
-
-
#endif //CONFIG_USB_HCI
#endif //PLATFORM_LINUX
@@ -333,8 +324,22 @@ struct reg_protocol_wt {
#endif
};
+#ifdef CONFIG_PCI_HCI
+#define MAX_CONTINUAL_IO_ERR 4
+#endif
+
+#ifdef CONFIG_USB_HCI
+#define MAX_CONTINUAL_IO_ERR 4
+#endif
+
+#ifdef CONFIG_SDIO_HCI
+#define SD_IO_TRY_CNT (8)
+#define MAX_CONTINUAL_IO_ERR SD_IO_TRY_CNT
+#endif
+int rtw_inc_and_chk_continual_io_error(struct dvobj_priv *dvobj);
+void rtw_reset_continual_io_error(struct dvobj_priv *dvobj);
/*
Below is the data structure used by _io_handler
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_ioctl_set.h b/drivers/net/wireless/rtl8723as/include/rtw_ioctl_set.h
index 61e9b65647ee..5f755bd2131b 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_ioctl_set.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_ioctl_set.h
@@ -63,9 +63,10 @@ u8 rtw_set_802_11_bssid_list_scan(_adapter* padapter, NDIS_802_11_SSID *pssid, i
u8 rtw_set_802_11_infrastructure_mode(_adapter * padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype);
u8 rtw_set_802_11_remove_wep(_adapter * padapter, u32 keyindex);
u8 rtw_set_802_11_ssid(_adapter * padapter, NDIS_802_11_SSID * ssid);
+u8 rtw_set_802_11_connect(_adapter* padapter, u8 *bssid, NDIS_802_11_SSID *ssid);
u8 rtw_set_802_11_remove_key(_adapter * padapter, NDIS_802_11_REMOVE_KEY * key);
-
+u8 rtw_validate_bssid(u8 *bssid);
u8 rtw_validate_ssid(NDIS_802_11_SSID *ssid);
u16 rtw_get_cur_max_rate(_adapter *adapter);
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_iol.h b/drivers/net/wireless/rtl8723as/include/rtw_iol.h
index 7e6cbcf7ad28..0b0672a1a18d 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_iol.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_iol.h
@@ -1,139 +1,139 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __RTW_IOL_H_
-#define __RTW_IOL_H_
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-struct xmit_frame *rtw_IOL_accquire_xmit_frame(ADAPTER *adapter);
-int rtw_IOL_append_cmds(struct xmit_frame *xmit_frame, u8 *IOL_cmds, u32 cmd_len);
-int rtw_IOL_append_LLT_cmd(struct xmit_frame *xmit_frame, u8 page_boundary);
-int rtw_IOL_exec_cmds_sync(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms, u32 bndy_cnt);
-bool rtw_IOL_applied(ADAPTER *adapter);
-int rtw_IOL_append_DELAY_US_cmd(struct xmit_frame *xmit_frame, u16 us);
-int rtw_IOL_append_DELAY_MS_cmd(struct xmit_frame *xmit_frame, u16 ms);
-int rtw_IOL_append_END_cmd(struct xmit_frame *xmit_frame);
-
-
-#ifdef CONFIG_IOL_NEW_GENERATION
-#define IOREG_CMD_END_LEN 4
-
-struct ioreg_cfg{
- u8 length;
- u8 cmd_id;
- u16 address;
- u32 data;
- u32 mask;
-};
-enum ioreg_cmd{
- IOREG_CMD_LLT = 0x01,
- IOREG_CMD_REFUSE = 0x02,
- IOREG_CMD_EFUSE_PATH = 0x03,
- IOREG_CMD_WB_REG = 0x04,
- IOREG_CMD_WW_REG = 0x05,
- IOREG_CMD_WD_REG = 0x06,
- IOREG_CMD_W_RF = 0x07,
- IOREG_CMD_DELAY_US = 0x10,
- IOREG_CMD_DELAY_MS = 0x11,
- IOREG_CMD_END = 0xFF,
-};
-void read_efuse_from_txpktbuf(ADAPTER *adapter, int bcnhead, u8 *content, u16 *size);
-
-int _rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr, u8 value, u8 mask);
-int _rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr, u16 value, u16 mask);
-int _rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr, u32 value, u32 mask);
-int _rtw_IOL_append_WRF_cmd(struct xmit_frame *xmit_frame, u8 rf_path, u16 addr, u32 value, u32 mask);
-#define rtw_IOL_append_WB_cmd(xmit_frame, addr, value,mask) _rtw_IOL_append_WB_cmd((xmit_frame), (addr), (value) ,(mask))
-#define rtw_IOL_append_WW_cmd(xmit_frame, addr, value,mask) _rtw_IOL_append_WW_cmd((xmit_frame), (addr), (value),(mask))
-#define rtw_IOL_append_WD_cmd(xmit_frame, addr, value,mask) _rtw_IOL_append_WD_cmd((xmit_frame), (addr), (value),(mask))
-#define rtw_IOL_append_WRF_cmd(xmit_frame, rf_path, addr, value,mask) _rtw_IOL_append_WRF_cmd((xmit_frame),(rf_path), (addr), (value),(mask))
-
-u8 rtw_IOL_cmd_boundary_handle(struct xmit_frame *pxmit_frame);
-void rtw_IOL_cmd_buf_dump(ADAPTER *Adapter,int buf_len,u8 *pbuf);
-
-#ifdef CONFIG_IOL_IOREG_CFG_DBG
- struct cmd_cmp{
- u16 addr;
- u32 value;
- };
-#endif
-
-#else //CONFIG_IOL_NEW_GENERATION
-
-typedef struct _io_offload_cmd {
- u8 rsvd0;
- u8 cmd;
- u16 address;
- u32 value;
-} IO_OFFLOAD_CMD, IOL_CMD;
-
-#define IOL_CMD_LLT 0x00
-//#define IOL_CMD_R_EFUSE 0x01
-#define IOL_CMD_WB_REG 0x02
-#define IOL_CMD_WW_REG 0x03
-#define IOL_CMD_WD_REG 0x04
-//#define IOL_CMD_W_RF 0x05
-#define IOL_CMD_DELAY_US 0x80
-#define IOL_CMD_DELAY_MS 0x81
-//#define IOL_CMD_DELAY_S 0x82
-#define IOL_CMD_END 0x83
-
-/*****************************************************
-CMD Address Value
-(B1) (B2/B3:H/L addr) (B4:B7 : MSB:LSB)
-******************************************************
-IOL_CMD_LLT - B7: PGBNDY
-//IOL_CMD_R_EFUSE - -
-IOL_CMD_WB_REG 0x0~0xFFFF B7
-IOL_CMD_WW_REG 0x0~0xFFFF B6~B7
-IOL_CMD_WD_REG 0x0~0xFFFF B4~B7
-//IOL_CMD_W_RF RF Reg B5~B7
-IOL_CMD_DELAY_US - B6~B7
-IOL_CMD_DELAY_MS - B6~B7
-//IOL_CMD_DELAY_S - B6~B7
-IOL_CMD_END - -
-******************************************************/
-int _rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr, u8 value);
-int _rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr, u16 value);
-int _rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr, u32 value);
-
-
-int rtw_IOL_exec_cmd_array_sync(PADAPTER adapter, u8 *IOL_cmds, u32 cmd_num, u32 max_wating_ms);
-int rtw_IOL_exec_empty_cmds_sync(ADAPTER *adapter, u32 max_wating_ms);
-
-#ifdef DBG_IO
-int dbg_rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr, u8 value, const char *caller, const int line);
-int dbg_rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr, u16 value, const char *caller, const int line);
-int dbg_rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr, u32 value, const char *caller, const int line);
-#define rtw_IOL_append_WB_cmd(xmit_frame, addr, value) dbg_rtw_IOL_append_WB_cmd((xmit_frame), (addr), (value), __FUNCTION__, __LINE__)
-#define rtw_IOL_append_WW_cmd(xmit_frame, addr, value) dbg_rtw_IOL_append_WW_cmd((xmit_frame), (addr), (value), __FUNCTION__, __LINE__)
-#define rtw_IOL_append_WD_cmd(xmit_frame, addr, value) dbg_rtw_IOL_append_WD_cmd((xmit_frame), (addr), (value), __FUNCTION__, __LINE__)
-#else
-#define rtw_IOL_append_WB_cmd(xmit_frame, addr, value) _rtw_IOL_append_WB_cmd((xmit_frame), (addr), (value))
-#define rtw_IOL_append_WW_cmd(xmit_frame, addr, value) _rtw_IOL_append_WW_cmd((xmit_frame), (addr), (value))
-#define rtw_IOL_append_WD_cmd(xmit_frame, addr, value) _rtw_IOL_append_WD_cmd((xmit_frame), (addr), (value))
-#endif // DBG_IO
-#endif // CONFIG_IOL_NEW_GENERATION
-
-
-
-#endif //__RTW_IOL_H_
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __RTW_IOL_H_
+#define __RTW_IOL_H_
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+struct xmit_frame *rtw_IOL_accquire_xmit_frame(ADAPTER *adapter);
+int rtw_IOL_append_cmds(struct xmit_frame *xmit_frame, u8 *IOL_cmds, u32 cmd_len);
+int rtw_IOL_append_LLT_cmd(struct xmit_frame *xmit_frame, u8 page_boundary);
+int rtw_IOL_exec_cmds_sync(ADAPTER *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms, u32 bndy_cnt);
+bool rtw_IOL_applied(ADAPTER *adapter);
+int rtw_IOL_append_DELAY_US_cmd(struct xmit_frame *xmit_frame, u16 us);
+int rtw_IOL_append_DELAY_MS_cmd(struct xmit_frame *xmit_frame, u16 ms);
+int rtw_IOL_append_END_cmd(struct xmit_frame *xmit_frame);
+
+
+#ifdef CONFIG_IOL_NEW_GENERATION
+#define IOREG_CMD_END_LEN 4
+
+struct ioreg_cfg{
+ u8 length;
+ u8 cmd_id;
+ u16 address;
+ u32 data;
+ u32 mask;
+};
+enum ioreg_cmd{
+ IOREG_CMD_LLT = 0x01,
+ IOREG_CMD_REFUSE = 0x02,
+ IOREG_CMD_EFUSE_PATH = 0x03,
+ IOREG_CMD_WB_REG = 0x04,
+ IOREG_CMD_WW_REG = 0x05,
+ IOREG_CMD_WD_REG = 0x06,
+ IOREG_CMD_W_RF = 0x07,
+ IOREG_CMD_DELAY_US = 0x10,
+ IOREG_CMD_DELAY_MS = 0x11,
+ IOREG_CMD_END = 0xFF,
+};
+void read_efuse_from_txpktbuf(ADAPTER *adapter, int bcnhead, u8 *content, u16 *size);
+
+int _rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr, u8 value, u8 mask);
+int _rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr, u16 value, u16 mask);
+int _rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr, u32 value, u32 mask);
+int _rtw_IOL_append_WRF_cmd(struct xmit_frame *xmit_frame, u8 rf_path, u16 addr, u32 value, u32 mask);
+#define rtw_IOL_append_WB_cmd(xmit_frame, addr, value,mask) _rtw_IOL_append_WB_cmd((xmit_frame), (addr), (value) ,(mask))
+#define rtw_IOL_append_WW_cmd(xmit_frame, addr, value,mask) _rtw_IOL_append_WW_cmd((xmit_frame), (addr), (value),(mask))
+#define rtw_IOL_append_WD_cmd(xmit_frame, addr, value,mask) _rtw_IOL_append_WD_cmd((xmit_frame), (addr), (value),(mask))
+#define rtw_IOL_append_WRF_cmd(xmit_frame, rf_path, addr, value,mask) _rtw_IOL_append_WRF_cmd((xmit_frame),(rf_path), (addr), (value),(mask))
+
+u8 rtw_IOL_cmd_boundary_handle(struct xmit_frame *pxmit_frame);
+void rtw_IOL_cmd_buf_dump(ADAPTER *Adapter,int buf_len,u8 *pbuf);
+
+#ifdef CONFIG_IOL_IOREG_CFG_DBG
+ struct cmd_cmp{
+ u16 addr;
+ u32 value;
+ };
+#endif
+
+#else //CONFIG_IOL_NEW_GENERATION
+
+typedef struct _io_offload_cmd {
+ u8 rsvd0;
+ u8 cmd;
+ u16 address;
+ u32 value;
+} IO_OFFLOAD_CMD, IOL_CMD;
+
+#define IOL_CMD_LLT 0x00
+//#define IOL_CMD_R_EFUSE 0x01
+#define IOL_CMD_WB_REG 0x02
+#define IOL_CMD_WW_REG 0x03
+#define IOL_CMD_WD_REG 0x04
+//#define IOL_CMD_W_RF 0x05
+#define IOL_CMD_DELAY_US 0x80
+#define IOL_CMD_DELAY_MS 0x81
+//#define IOL_CMD_DELAY_S 0x82
+#define IOL_CMD_END 0x83
+
+/*****************************************************
+CMD Address Value
+(B1) (B2/B3:H/L addr) (B4:B7 : MSB:LSB)
+******************************************************
+IOL_CMD_LLT - B7: PGBNDY
+//IOL_CMD_R_EFUSE - -
+IOL_CMD_WB_REG 0x0~0xFFFF B7
+IOL_CMD_WW_REG 0x0~0xFFFF B6~B7
+IOL_CMD_WD_REG 0x0~0xFFFF B4~B7
+//IOL_CMD_W_RF RF Reg B5~B7
+IOL_CMD_DELAY_US - B6~B7
+IOL_CMD_DELAY_MS - B6~B7
+//IOL_CMD_DELAY_S - B6~B7
+IOL_CMD_END - -
+******************************************************/
+int _rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr, u8 value);
+int _rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr, u16 value);
+int _rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr, u32 value);
+
+
+int rtw_IOL_exec_cmd_array_sync(PADAPTER adapter, u8 *IOL_cmds, u32 cmd_num, u32 max_wating_ms);
+int rtw_IOL_exec_empty_cmds_sync(ADAPTER *adapter, u32 max_wating_ms);
+
+#ifdef DBG_IO
+int dbg_rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr, u8 value, const char *caller, const int line);
+int dbg_rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr, u16 value, const char *caller, const int line);
+int dbg_rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr, u32 value, const char *caller, const int line);
+#define rtw_IOL_append_WB_cmd(xmit_frame, addr, value) dbg_rtw_IOL_append_WB_cmd((xmit_frame), (addr), (value), __FUNCTION__, __LINE__)
+#define rtw_IOL_append_WW_cmd(xmit_frame, addr, value) dbg_rtw_IOL_append_WW_cmd((xmit_frame), (addr), (value), __FUNCTION__, __LINE__)
+#define rtw_IOL_append_WD_cmd(xmit_frame, addr, value) dbg_rtw_IOL_append_WD_cmd((xmit_frame), (addr), (value), __FUNCTION__, __LINE__)
+#else
+#define rtw_IOL_append_WB_cmd(xmit_frame, addr, value) _rtw_IOL_append_WB_cmd((xmit_frame), (addr), (value))
+#define rtw_IOL_append_WW_cmd(xmit_frame, addr, value) _rtw_IOL_append_WW_cmd((xmit_frame), (addr), (value))
+#define rtw_IOL_append_WD_cmd(xmit_frame, addr, value) _rtw_IOL_append_WD_cmd((xmit_frame), (addr), (value))
+#endif // DBG_IO
+#endif // CONFIG_IOL_NEW_GENERATION
+
+
+
+#endif //__RTW_IOL_H_
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_led.h b/drivers/net/wireless/rtl8723as/include/rtw_led.h
index b017eb19138d..2bba754ca81f 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_led.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_led.h
@@ -16,222 +16,222 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
*
- ******************************************************************************/
-#ifndef __RTW_LED_H_
-#define __RTW_LED_H_
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-
-#define MSECS(t) (HZ * ((t) / 1000) + (HZ * ((t) % 1000)) / 1000)
-
-#define LED_BLINK_NORMAL_INTERVAL 100
-#define LED_BLINK_SLOWLY_INTERVAL 200
-#define LED_BLINK_LONG_INTERVAL 400
-
-#define LED_BLINK_NO_LINK_INTERVAL_ALPHA 1000
-#define LED_BLINK_LINK_INTERVAL_ALPHA 500 //500
-#define LED_BLINK_SCAN_INTERVAL_ALPHA 180 //150
-#define LED_BLINK_FASTER_INTERVAL_ALPHA 50
-#define LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA 5000
-
-#define LED_BLINK_NORMAL_INTERVAL_NETTRONIX 100
-#define LED_BLINK_SLOWLY_INTERVAL_NETTRONIX 2000
-
-#define LED_BLINK_SLOWLY_INTERVAL_PORNET 1000
-#define LED_BLINK_NORMAL_INTERVAL_PORNET 100
-
-#define LED_BLINK_FAST_INTERVAL_BITLAND 30
-
-// 060403, rcnjko: Customized for AzWave.
-#define LED_CM2_BLINK_ON_INTERVAL 250
-#define LED_CM2_BLINK_OFF_INTERVAL 4750
-
-#define LED_CM8_BLINK_INTERVAL 500 //for QMI
-#define LED_CM8_BLINK_OFF_INTERVAL 3750 //for QMI
-
-// 080124, lanhsin: Customized for RunTop
-#define LED_RunTop_BLINK_INTERVAL 300
-
-// 060421, rcnjko: Customized for Sercomm Printer Server case.
-#define LED_CM3_BLINK_INTERVAL 1500
-
-typedef enum _LED_CTL_MODE{
- LED_CTL_POWER_ON = 1,
- LED_CTL_LINK = 2,
- LED_CTL_NO_LINK = 3,
- LED_CTL_TX = 4,
- LED_CTL_RX = 5,
- LED_CTL_SITE_SURVEY = 6,
- LED_CTL_POWER_OFF = 7,
- LED_CTL_START_TO_LINK = 8,
- LED_CTL_START_WPS = 9,
- LED_CTL_STOP_WPS = 10,
- LED_CTL_START_WPS_BOTTON = 11, //added for runtop
- LED_CTL_STOP_WPS_FAIL = 12, //added for ALPHA
- LED_CTL_STOP_WPS_FAIL_OVERLAP = 13, //added for BELKIN
- LED_CTL_CONNECTION_NO_TRANSFER = 14,
-}LED_CTL_MODE;
-
-typedef enum _LED_STATE_871x{
- LED_UNKNOWN = 0,
- RTW_LED_ON = 1,
- RTW_LED_OFF = 2,
- LED_BLINK_NORMAL = 3,
- LED_BLINK_SLOWLY = 4,
- LED_BLINK_POWER_ON = 5,
- LED_BLINK_SCAN = 6, // LED is blinking during scanning period, the # of times to blink is depend on time for scanning.
- LED_BLINK_NO_LINK = 7, // LED is blinking during no link state.
- LED_BLINK_StartToBlink = 8,// Customzied for Sercomm Printer Server case
- LED_BLINK_TXRX = 9,
- LED_BLINK_WPS = 10, // LED is blinkg during WPS communication
- LED_BLINK_WPS_STOP = 11, //for ALPHA
- LED_BLINK_WPS_STOP_OVERLAP = 12, //for BELKIN
- LED_BLINK_RUNTOP = 13, // Customized for RunTop
- LED_BLINK_CAMEO = 14,
- LED_BLINK_XAVI = 15,
- LED_BLINK_ALWAYS_ON = 16,
-}LED_STATE_871x;
-
-typedef enum _LED_PIN_871x{
- LED_PIN_NULL = 0,
- LED_PIN_LED0 = 1,
- LED_PIN_LED1 = 2,
- LED_PIN_LED2 = 3,
- LED_PIN_GPIO0 = 4,
-}LED_PIN_871x;
-
-typedef struct _LED_871x{
- _adapter *padapter;
-
- LED_PIN_871x LedPin; // Identify how to implement this SW led.
- LED_STATE_871x CurrLedState; // Current LED state.
- LED_STATE_871x BlinkingLedState; // Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are.
-
- u8 bLedOn; // true if LED is ON, false if LED is OFF.
-
- u8 bLedBlinkInProgress; // true if it is blinking, false o.w..
-
- u8 bLedWPSBlinkInProgress;
-
- u32 BlinkTimes; // Number of times to toggle led state for blinking.
-
- _timer BlinkTimer; // Timer object for led blinking.
-
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
- u8 bSWLedCtrl;
-
- // ALPHA, added by chiyoko, 20090106
- u8 bLedNoLinkBlinkInProgress;
- u8 bLedLinkBlinkInProgress;
- u8 bLedStartToLinkBlinkInProgress;
- u8 bLedScanBlinkInProgress;
-
- #if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)|| defined PLATFORM_FREEBSD
- _workitem BlinkWorkItem; // Workitem used by BlinkTimer to manipulate H/W to blink LED.
- #endif
-#endif //defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
-
-#if defined(CONFIG_PCI_HCI)
- u8 bLedSlowBlinkInProgress;//added by vivi, for led new mode
-#endif
-
-} LED_871x, *PLED_871x;
-
-#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
-
-#define IS_LED_WPS_BLINKING(_LED_871x) (((PLED_871x)_LED_871x)->CurrLedState==LED_BLINK_WPS \
- || ((PLED_871x)_LED_871x)->CurrLedState==LED_BLINK_WPS_STOP \
- || ((PLED_871x)_LED_871x)->bLedWPSBlinkInProgress)
-
-#define IS_LED_BLINKING(_LED_871x) (((PLED_871x)_LED_871x)->bLedWPSBlinkInProgress \
- ||((PLED_871x)_LED_871x)->bLedScanBlinkInProgress)
-
-//================================================================================
-// LED customization.
-//================================================================================
-
-typedef enum _LED_STRATEGY_871x{
- SW_LED_MODE0 = 0, // SW control 1 LED via GPIO0. It is default option.
- SW_LED_MODE1= 1, // 2 LEDs, through LED0 and LED1. For ALPHA.
- SW_LED_MODE2 = 2, // SW control 1 LED via GPIO0, customized for AzWave 8187 minicard.
- SW_LED_MODE3 = 3, // SW control 1 LED via GPIO0, customized for Sercomm Printer Server case.
- SW_LED_MODE4 = 4, //for Edimax / Belkin
- SW_LED_MODE5 = 5, //for Sercomm / Belkin
- SW_LED_MODE6 = 6, //for 88CU minicard, porting from ce SW_LED_MODE7
- HW_LED = 50, // HW control 2 LEDs, LED0 and LED1 (there are 4 different control modes, see MAC.CONFIG1 for details.)
- LED_ST_NONE = 99,
-}LED_STRATEGY_871x, *PLED_STRATEGY_871x;
-
-void
-LedControl871x(
- _adapter *padapter,
- LED_CTL_MODE LedAction
- );
-#endif //defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
-
-#if defined(CONFIG_PCI_HCI)
-//================================================================================
-// LED customization.
-//================================================================================
-
-typedef enum _LED_STRATEGY_871x{
- SW_LED_MODE0 = 0, // SW control 1 LED via GPIO0. It is default option.
- SW_LED_MODE1 = 1, // SW control for PCI Express
- SW_LED_MODE2 = 2, // SW control for Cameo.
- SW_LED_MODE3 = 3, // SW contorl for RunTop.
- SW_LED_MODE4 = 4, // SW control for Netcore
- SW_LED_MODE5 = 5, //added by vivi, for led new mode, DLINK
- SW_LED_MODE6 = 6, //added by vivi, for led new mode, PRONET
- SW_LED_MODE7 = 7, //added by chiyokolin, for Lenovo, PCI Express Minicard Spec Rev.1.2 spec
- SW_LED_MODE8 = 8, //added by chiyokolin, for QMI
- SW_LED_MODE9 = 9, //added by chiyokolin, for BITLAND, PCI Express Minicard Spec Rev.1.1
- SW_LED_MODE10 = 10, //added by chiyokolin, for Edimax-ASUS
- HW_LED = 50, // HW control 2 LEDs, LED0 and LED1 (there are 4 different control modes)
- LED_ST_NONE = 99,
-}LED_STRATEGY_871x, *PLED_STRATEGY_871x;
-#endif //defined(CONFIG_PCI_HCI)
-
-struct led_priv{
- /* add for led controll */
- LED_871x SwLed0;
- LED_871x SwLed1;
- LED_STRATEGY_871x LedStrategy;
- u8 bRegUseLed;
- void (*LedControlHandler)(_adapter *padapter, LED_CTL_MODE LedAction);
- /* add for led controll */
-};
-
-#ifdef CONFIG_SW_LED
-#define rtw_led_control(adapter, LedAction) \
- do { \
- if((adapter)->ledpriv.LedControlHandler) \
- (adapter)->ledpriv.LedControlHandler((adapter), (LedAction)); \
- } while(0)
-#else //CONFIG_SW_LED
-#define rtw_led_control(adapter, LedAction)
-#endif //CONFIG_SW_LED
-
-void BlinkTimerCallback(void *data);
-void BlinkWorkItemCallback(struct work_struct *work);
-
-void ResetLedStatus(PLED_871x pLed);
-
-void
-InitLed871x(
- _adapter *padapter,
- PLED_871x pLed,
- LED_PIN_871x LedPin
- );
-
-void
-DeInitLed871x(
- PLED_871x pLed
- );
-
-//hal...
-extern void BlinkHandler(PLED_871x pLed);
-
-#endif //__RTW_LED_H_
-
+ ******************************************************************************/
+#ifndef __RTW_LED_H_
+#define __RTW_LED_H_
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+
+#define MSECS(t) (HZ * ((t) / 1000) + (HZ * ((t) % 1000)) / 1000)
+
+#define LED_BLINK_NORMAL_INTERVAL 100
+#define LED_BLINK_SLOWLY_INTERVAL 200
+#define LED_BLINK_LONG_INTERVAL 400
+
+#define LED_BLINK_NO_LINK_INTERVAL_ALPHA 1000
+#define LED_BLINK_LINK_INTERVAL_ALPHA 500 //500
+#define LED_BLINK_SCAN_INTERVAL_ALPHA 180 //150
+#define LED_BLINK_FASTER_INTERVAL_ALPHA 50
+#define LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA 5000
+
+#define LED_BLINK_NORMAL_INTERVAL_NETTRONIX 100
+#define LED_BLINK_SLOWLY_INTERVAL_NETTRONIX 2000
+
+#define LED_BLINK_SLOWLY_INTERVAL_PORNET 1000
+#define LED_BLINK_NORMAL_INTERVAL_PORNET 100
+
+#define LED_BLINK_FAST_INTERVAL_BITLAND 30
+
+// 060403, rcnjko: Customized for AzWave.
+#define LED_CM2_BLINK_ON_INTERVAL 250
+#define LED_CM2_BLINK_OFF_INTERVAL 4750
+
+#define LED_CM8_BLINK_INTERVAL 500 //for QMI
+#define LED_CM8_BLINK_OFF_INTERVAL 3750 //for QMI
+
+// 080124, lanhsin: Customized for RunTop
+#define LED_RunTop_BLINK_INTERVAL 300
+
+// 060421, rcnjko: Customized for Sercomm Printer Server case.
+#define LED_CM3_BLINK_INTERVAL 1500
+
+typedef enum _LED_CTL_MODE{
+ LED_CTL_POWER_ON = 1,
+ LED_CTL_LINK = 2,
+ LED_CTL_NO_LINK = 3,
+ LED_CTL_TX = 4,
+ LED_CTL_RX = 5,
+ LED_CTL_SITE_SURVEY = 6,
+ LED_CTL_POWER_OFF = 7,
+ LED_CTL_START_TO_LINK = 8,
+ LED_CTL_START_WPS = 9,
+ LED_CTL_STOP_WPS = 10,
+ LED_CTL_START_WPS_BOTTON = 11, //added for runtop
+ LED_CTL_STOP_WPS_FAIL = 12, //added for ALPHA
+ LED_CTL_STOP_WPS_FAIL_OVERLAP = 13, //added for BELKIN
+ LED_CTL_CONNECTION_NO_TRANSFER = 14,
+}LED_CTL_MODE;
+
+typedef enum _LED_STATE_871x{
+ LED_UNKNOWN = 0,
+ RTW_LED_ON = 1,
+ RTW_LED_OFF = 2,
+ LED_BLINK_NORMAL = 3,
+ LED_BLINK_SLOWLY = 4,
+ LED_BLINK_POWER_ON = 5,
+ LED_BLINK_SCAN = 6, // LED is blinking during scanning period, the # of times to blink is depend on time for scanning.
+ LED_BLINK_NO_LINK = 7, // LED is blinking during no link state.
+ LED_BLINK_StartToBlink = 8,// Customzied for Sercomm Printer Server case
+ LED_BLINK_TXRX = 9,
+ LED_BLINK_WPS = 10, // LED is blinkg during WPS communication
+ LED_BLINK_WPS_STOP = 11, //for ALPHA
+ LED_BLINK_WPS_STOP_OVERLAP = 12, //for BELKIN
+ LED_BLINK_RUNTOP = 13, // Customized for RunTop
+ LED_BLINK_CAMEO = 14,
+ LED_BLINK_XAVI = 15,
+ LED_BLINK_ALWAYS_ON = 16,
+}LED_STATE_871x;
+
+typedef enum _LED_PIN_871x{
+ LED_PIN_NULL = 0,
+ LED_PIN_LED0 = 1,
+ LED_PIN_LED1 = 2,
+ LED_PIN_LED2 = 3,
+ LED_PIN_GPIO0 = 4,
+}LED_PIN_871x;
+
+typedef struct _LED_871x{
+ _adapter *padapter;
+
+ LED_PIN_871x LedPin; // Identify how to implement this SW led.
+ LED_STATE_871x CurrLedState; // Current LED state.
+ LED_STATE_871x BlinkingLedState; // Next state for blinking, either RTW_LED_ON or RTW_LED_OFF are.
+
+ u8 bLedOn; // true if LED is ON, false if LED is OFF.
+
+ u8 bLedBlinkInProgress; // true if it is blinking, false o.w..
+
+ u8 bLedWPSBlinkInProgress;
+
+ u32 BlinkTimes; // Number of times to toggle led state for blinking.
+
+ _timer BlinkTimer; // Timer object for led blinking.
+
+#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+ u8 bSWLedCtrl;
+
+ // ALPHA, added by chiyoko, 20090106
+ u8 bLedNoLinkBlinkInProgress;
+ u8 bLedLinkBlinkInProgress;
+ u8 bLedStartToLinkBlinkInProgress;
+ u8 bLedScanBlinkInProgress;
+
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0)|| defined PLATFORM_FREEBSD
+ _workitem BlinkWorkItem; // Workitem used by BlinkTimer to manipulate H/W to blink LED.
+ #endif
+#endif //defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+
+#if defined(CONFIG_PCI_HCI)
+ u8 bLedSlowBlinkInProgress;//added by vivi, for led new mode
+#endif
+
+} LED_871x, *PLED_871x;
+
+#if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+
+#define IS_LED_WPS_BLINKING(_LED_871x) (((PLED_871x)_LED_871x)->CurrLedState==LED_BLINK_WPS \
+ || ((PLED_871x)_LED_871x)->CurrLedState==LED_BLINK_WPS_STOP \
+ || ((PLED_871x)_LED_871x)->bLedWPSBlinkInProgress)
+
+#define IS_LED_BLINKING(_LED_871x) (((PLED_871x)_LED_871x)->bLedWPSBlinkInProgress \
+ ||((PLED_871x)_LED_871x)->bLedScanBlinkInProgress)
+
+//================================================================================
+// LED customization.
+//================================================================================
+
+typedef enum _LED_STRATEGY_871x{
+ SW_LED_MODE0 = 0, // SW control 1 LED via GPIO0. It is default option.
+ SW_LED_MODE1= 1, // 2 LEDs, through LED0 and LED1. For ALPHA.
+ SW_LED_MODE2 = 2, // SW control 1 LED via GPIO0, customized for AzWave 8187 minicard.
+ SW_LED_MODE3 = 3, // SW control 1 LED via GPIO0, customized for Sercomm Printer Server case.
+ SW_LED_MODE4 = 4, //for Edimax / Belkin
+ SW_LED_MODE5 = 5, //for Sercomm / Belkin
+ SW_LED_MODE6 = 6, //for 88CU minicard, porting from ce SW_LED_MODE7
+ HW_LED = 50, // HW control 2 LEDs, LED0 and LED1 (there are 4 different control modes, see MAC.CONFIG1 for details.)
+ LED_ST_NONE = 99,
+}LED_STRATEGY_871x, *PLED_STRATEGY_871x;
+
+void
+LedControl871x(
+ _adapter *padapter,
+ LED_CTL_MODE LedAction
+ );
+#endif //defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+
+#if defined(CONFIG_PCI_HCI)
+//================================================================================
+// LED customization.
+//================================================================================
+
+typedef enum _LED_STRATEGY_871x{
+ SW_LED_MODE0 = 0, // SW control 1 LED via GPIO0. It is default option.
+ SW_LED_MODE1 = 1, // SW control for PCI Express
+ SW_LED_MODE2 = 2, // SW control for Cameo.
+ SW_LED_MODE3 = 3, // SW contorl for RunTop.
+ SW_LED_MODE4 = 4, // SW control for Netcore
+ SW_LED_MODE5 = 5, //added by vivi, for led new mode, DLINK
+ SW_LED_MODE6 = 6, //added by vivi, for led new mode, PRONET
+ SW_LED_MODE7 = 7, //added by chiyokolin, for Lenovo, PCI Express Minicard Spec Rev.1.2 spec
+ SW_LED_MODE8 = 8, //added by chiyokolin, for QMI
+ SW_LED_MODE9 = 9, //added by chiyokolin, for BITLAND, PCI Express Minicard Spec Rev.1.1
+ SW_LED_MODE10 = 10, //added by chiyokolin, for Edimax-ASUS
+ HW_LED = 50, // HW control 2 LEDs, LED0 and LED1 (there are 4 different control modes)
+ LED_ST_NONE = 99,
+}LED_STRATEGY_871x, *PLED_STRATEGY_871x;
+#endif //defined(CONFIG_PCI_HCI)
+
+struct led_priv{
+ /* add for led controll */
+ LED_871x SwLed0;
+ LED_871x SwLed1;
+ LED_STRATEGY_871x LedStrategy;
+ u8 bRegUseLed;
+ void (*LedControlHandler)(_adapter *padapter, LED_CTL_MODE LedAction);
+ /* add for led controll */
+};
+
+#ifdef CONFIG_SW_LED
+#define rtw_led_control(adapter, LedAction) \
+ do { \
+ if((adapter)->ledpriv.LedControlHandler) \
+ (adapter)->ledpriv.LedControlHandler((adapter), (LedAction)); \
+ } while(0)
+#else //CONFIG_SW_LED
+#define rtw_led_control(adapter, LedAction)
+#endif //CONFIG_SW_LED
+
+void BlinkTimerCallback(void *data);
+void BlinkWorkItemCallback(struct work_struct *work);
+
+void ResetLedStatus(PLED_871x pLed);
+
+void
+InitLed871x(
+ _adapter *padapter,
+ PLED_871x pLed,
+ LED_PIN_871x LedPin
+ );
+
+void
+DeInitLed871x(
+ PLED_871x pLed
+ );
+
+//hal...
+extern void BlinkHandler(PLED_871x pLed);
+
+#endif //__RTW_LED_H_
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_mlme.h b/drivers/net/wireless/rtl8723as/include/rtw_mlme.h
index 0ed99f769786..bdb47cb88130 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_mlme.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_mlme.h
@@ -122,6 +122,11 @@ enum _BAND
GHZ_24,
};
+enum DriverInterface {
+ DRIVER_WEXT = 1,
+ DRIVER_CFG80211 = 2
+};
+
enum SCAN_RESULT_TYPE
{
SCAN_RESULT_P2P_ONLY = 0, // Will return all the P2P devices.
@@ -242,7 +247,11 @@ struct group_id_info{
struct scan_limit_info{
u8 scan_op_ch_only; // When this flag is set, the driver should just scan the operation channel
+#ifndef P2P_OP_CHECK_SOCIAL_CH
u8 operation_ch[2]; // Store the operation channel of invitation request frame
+#else
+ u8 operation_ch[5]; // Store additional channel 1,6,11 for Android 4.2 IOT & Nexus 4
+#endif //P2P_OP_CHECK_SOCIAL_CH
};
#ifdef CONFIG_IOCTL_CFG80211
@@ -329,9 +338,13 @@ struct wifidirect_info{
enum P2P_WPSINFO ui_got_wps_info; // This field will store the WPS value (PIN value or PBC) that UI had got from the user.
u16 supported_wps_cm; // This field describes the WPS config method which this driver supported.
// The value should be the combination of config method defined in page104 of WPS v2.0 spec.
+ u8 external_uuid; // UUID flag
+ u8 uuid[16]; // UUID
uint channel_list_attr_len; // This field will contain the length of body of P2P Channel List attribute of group negotitation response frame.
u8 channel_list_attr[100]; // This field will contain the body of P2P Channel List attribute of group negotitation response frame.
// We will use the channel_cnt and channel_list fields when constructing the group negotitation confirm frame.
+ u8 driver_interface; // Indicate DRIVER_WEXT or DRIVER_CFG80211
+
#ifdef CONFIG_CONCURRENT_MODE
u16 ext_listen_interval; // The interval to be available with legacy AP (ms)
u16 ext_listen_period; // The time period to be available for P2P listen state (ms)
@@ -401,6 +414,12 @@ struct mlme_priv {
u8 assoc_bssid[6];
struct wlan_network cur_network;
+ struct wlan_network *cur_network_scanned;
+#ifdef CONFIG_ARP_KEEP_ALIVE
+ // for arp offload keep alive
+ u8 gw_mac_addr[6];
+ u8 gw_ip[4];
+#endif
//uint wireless_mode; no used, remove it
@@ -419,6 +438,10 @@ struct mlme_priv {
ATOMIC_T set_scan_deny; //0: allowed, 1: deny
#endif
+ #ifdef CONFIG_DETECT_C2H_BY_POLLING
+ _timer event_polling_timer;
+ #endif
+
struct qos_priv qospriv;
#ifdef CONFIG_80211N_HT
@@ -439,7 +462,6 @@ struct mlme_priv {
RT_LINK_DETECT_T LinkDetectInfo;
_timer dynamic_chk_timer; //dynamic/periodic check timer
- u8 key_mask; //use for ips to set wep key after ips_leave
u8 acm_mask; // for wmm acm mask
u8 ChannelPlan;
RT_SCAN_TYPE scan_mode; // active: 1, passive: 0
@@ -554,6 +576,22 @@ struct mlme_priv {
u8 channel_idx;
u8 group_cnt; //In WiDi 3.5, they specified another scan algo. for WFD/RDS co-existed
u8 sa_ext[L2SDTA_SERVICE_VE_LEN];
+
+ u8 widi_enable;
+ /**
+ * For WiDi 4; upper layer would set
+ * p2p_primary_device_type_category_id
+ * p2p_primary_device_type_sub_category_id
+ * p2p_secondary_device_type_category_id
+ * p2p_secondary_device_type_sub_category_id
+ */
+ u16 p2p_pdt_cid;
+ u16 p2p_pdt_scid;
+ u8 num_p2p_sdt;
+ u16 p2p_sdt_cid[MAX_NUM_P2P_SDT];
+ u16 p2p_sdt_scid[MAX_NUM_P2P_SDT];
+ u8 p2p_reject_disable; //When starting NL80211 wpa_supplicant/hostapd, it will call netdev_close
+ //such that it will cause p2p disabled. Use this flag to reject.
#endif // CONFIG_INTEL_WIDI
#ifdef CONFIG_CONCURRENT_MODE
@@ -624,7 +662,7 @@ extern void rtw_free_mlme_priv (struct mlme_priv *pmlmepriv);
extern sint rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv);
-extern sint rtw_set_key(_adapter *adapter,struct security_priv *psecuritypriv,sint keyid, u8 set_tx);
+extern sint rtw_set_key(_adapter *adapter,struct security_priv *psecuritypriv,sint keyid, u8 set_tx, bool enqueue);
extern sint rtw_set_auth(_adapter *adapter,struct security_priv *psecuritypriv);
__inline static u8 *get_bssid(struct mlme_priv *pmlmepriv)
@@ -763,6 +801,9 @@ void rtw_set_scan_deny(_adapter *adapter, u32 ms);
#define rtw_set_scan_deny(adapter, ms) do {} while (0)
#endif
+#ifdef CONFIG_DETECT_C2H_BY_POLLING
+extern void rtw_event_polling_timer_hdl(_adapter *adapter);
+#endif
extern int _rtw_init_mlme_priv(_adapter *padapter);
@@ -803,7 +844,7 @@ void rtw_issue_addbareq_cmd(_adapter *padapter, struct xmit_frame *pxmitframe);
#endif
int rtw_is_same_ibss(_adapter *adapter, struct wlan_network *pnetwork);
-int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst);
+int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst, u8 feature);
#ifdef CONFIG_LAYER2_ROAMING
void _rtw_roaming(_adapter *adapter, struct wlan_network *tgt_network);
@@ -817,7 +858,8 @@ u8 rtw_to_roaming(_adapter *adapter);
#define rtw_to_roaming(adapter) 0
#endif
-void rtw_stassoc_hw_rpt(_adapter *adapter,struct sta_info *psta);
+void rtw_sta_media_status_rpt(_adapter *adapter,struct sta_info *psta, u32 mstatus);
+
#ifdef CONFIG_INTEL_PROXIM
void rtw_proxim_enable(_adapter *padapter);
void rtw_proxim_disable(_adapter *padapter);
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_mlme_ext.h b/drivers/net/wireless/rtl8723as/include/rtw_mlme_ext.h
index 61f808ee20c0..284e99c27b68 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_mlme_ext.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_mlme_ext.h
@@ -504,7 +504,11 @@ struct mlme_ext_priv
u8 mlmeext_init;
ATOMIC_T event_seq;
u16 mgnt_seq;
-
+#ifdef CONFIG_IEEE80211W
+ u16 sa_query_seq;
+ u64 mgnt_80211w_IPN;
+ u64 mgnt_80211w_IPN_rx;
+#endif //CONFIG_IEEE80211W
//struct fw_priv fwpriv;
unsigned char cur_channel;
@@ -523,6 +527,9 @@ struct mlme_ext_priv
//for ap mode, network includes ap's cap_info
_timer survey_timer;
_timer link_timer;
+#ifdef CONFIG_IEEE80211W
+ _timer sa_query_timer;
+#endif //CONFIG_IEEE80211W
//_timer ADDBA_timer;
u16 chan_scan_time;
@@ -583,13 +590,15 @@ u8 rtw_get_oper_bw(_adapter *adapter);
void rtw_set_oper_bw(_adapter *adapter, u8 bw);
u8 rtw_get_oper_choffset(_adapter *adapter);
void rtw_set_oper_choffset(_adapter *adapter, u8 offset);
+u32 rtw_get_on_oper_ch_time(_adapter *adapter);
+u32 rtw_get_on_cur_ch_time(_adapter *adapter);
void set_channel_bwmode(_adapter *padapter, unsigned char channel, unsigned char channel_offset, unsigned short bwmode);
void SelectChannel(_adapter *padapter, unsigned char channel);
void SetBWMode(_adapter *padapter, unsigned short bwmode, unsigned char channel_offset);
unsigned int decide_wait_for_beacon_timeout(unsigned int bcn_interval);
-
+void read_cam(_adapter *padapter ,u8 entry);
void write_cam(_adapter *padapter, u8 entry, u16 ctrl, u8 *mac, u8 *key);
void clear_cam_entry(_adapter *padapter, u8 entry);
@@ -641,6 +650,11 @@ void update_tx_basic_rate(_adapter *padapter, u8 modulation);
void update_bmc_sta_support_rate(_adapter *padapter, u32 mac_id);
int update_sta_support_rate(_adapter *padapter, u8* pvar_ie, uint var_ie_len, int cam_idx);
+#ifdef CONFIG_WOWLAN
+void rtw_get_current_ip_address(PADAPTER padapter, u8 *pcurrentip);
+void rtw_get_sec_iv(PADAPTER padapter, u8*pcur_dot11txpn, u8 *StaAddr);
+#endif
+
//for sta/adhoc mode
void update_sta_info(_adapter *padapter, struct sta_info *psta);
unsigned int update_basic_rate(unsigned char *ptn, unsigned int ptn_sz);
@@ -694,6 +708,9 @@ int issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason);
int issue_deauth_ex(_adapter *padapter, u8 *da, unsigned short reason, int try_cnt, int wait_ms);
void issue_action_spct_ch_switch(_adapter *padapter, u8 *ra, u8 new_ch, u8 ch_offset);
void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short status);
+#ifdef CONFIG_IEEE80211W
+void issue_action_SA_Query(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short tid);
+#endif //CONFIG_IEEE80211W
unsigned int send_delba(_adapter *padapter, u8 initiator, u8 *addr);
unsigned int send_beacon(_adapter *padapter);
@@ -721,6 +738,9 @@ unsigned int OnAction_dls(_adapter *padapter, union recv_frame *precv_frame);
unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame);
unsigned int on_action_public(_adapter *padapter, union recv_frame *precv_frame);
unsigned int OnAction_ht(_adapter *padapter, union recv_frame *precv_frame);
+#ifdef CONFIG_IEEE80211W
+unsigned int OnAction_sa_query(_adapter *padapter, union recv_frame *precv_frame);
+#endif //CONFIG_IEEE80211W
unsigned int OnAction_wmm(_adapter *padapter, union recv_frame *precv_frame);
unsigned int OnAction_p2p(_adapter *padapter, union recv_frame *precv_frame);
@@ -734,6 +754,9 @@ void linked_status_chk(_adapter *padapter);
void survey_timer_hdl (_adapter *padapter);
void link_timer_hdl (_adapter *padapter);
void addba_timer_hdl(struct sta_info *psta);
+#ifdef CONFIG_IEEE80211W
+void sa_query_timer_hdl(_adapter *padapter);
+#endif //CONFIG_IEEE80211W
//void reauth_timer_hdl(_adapter *padapter);
//void reassoc_timer_hdl(_adapter *padapter);
@@ -748,7 +771,13 @@ void addba_timer_hdl(struct sta_info *psta);
/*DBG_871X("%s set_link_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms));*/ \
_set_timer(&(mlmeext)->link_timer, (ms)); \
} while(0)
-
+#ifdef CONFIG_IEEE80211W
+#define set_sa_query_timer(mlmeext, ms) \
+ do { \
+ DBG_871X("%s set_sa_query_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms)); \
+ _set_timer(&(mlmeext)->sa_query_timer, (ms)); \
+ } while(0)
+#endif //CONFIG_IEEE80211W
extern int cckrates_included(unsigned char *rate, int ratelen);
extern int cckratesonly_included(unsigned char *rate, int ratelen);
@@ -760,7 +789,6 @@ extern void correct_TSF(_adapter *padapter, struct mlme_ext_priv *pmlmeext);
#ifdef CONFIG_CONCURRENT_MODE
sint check_buddy_mlmeinfo_state(_adapter *padapter, u32 state);
-int concurrent_chk_start_clnt_join(_adapter *padapter);
void concurrent_chk_joinbss_done(_adapter *padapter, int join_res);
#endif //CONFIG_CONCURRENT_MODE
@@ -779,6 +807,9 @@ void dc_resume_xmit(_adapter *padapter);
u8 dc_check_xmit(_adapter *padapter);
#endif
+int rtw_chk_start_clnt_join(_adapter *padapter);
+int rtw_get_ch_setting_union(_adapter *adapter, u8 *ch, u8 *bw, u8 *offset);
+
struct cmd_hdl {
uint parmsize;
u8 (*h2cfuns)(struct _ADAPTER *padapter, u8 *pbuf);
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_mp.h b/drivers/net/wireless/rtl8723as/include/rtw_mp.h
index cda76083f0c0..9a017a46db4a 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_mp.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_mp.h
@@ -403,6 +403,9 @@ enum {
CTA_TEST,
MP_DISABLE_BT_COEXIST,
MP_PwrCtlDM,
+#ifdef CONFIG_WOWLAN
+ MP_WOW_ENABLE,
+#endif
MP_NULL,
};
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_odm.h b/drivers/net/wireless/rtl8723as/include/rtw_odm.h
new file mode 100755
index 000000000000..d01acd64b20b
--- /dev/null
+++ b/drivers/net/wireless/rtl8723as/include/rtw_odm.h
@@ -0,0 +1,42 @@
+/******************************************************************************
+ *
+ * Copyright(c) 2013 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __RTW_ODM_H__
+#define __RTW_ODM_H__
+
+#include <drv_types.h>
+
+/*
+* This file provides utilities/wrappers for rtw driver to use ODM
+*/
+
+int _rtw_odm_dbg_comp_msg(_adapter *adapter, char *buf, int len);
+void rtw_odm_dbg_comp_msg(_adapter *adapter);
+void rtw_odm_dbg_comp_set(_adapter *adapter, u64 comps);
+int _rtw_odm_dbg_level_msg(_adapter *adapter, char *buf, int len);
+void rtw_odm_dbg_level_msg(_adapter *adapter);
+void rtw_odm_dbg_level_set(_adapter *adapter, u32 level);
+
+int _rtw_odm_adaptivity_parm_msg(_adapter *adapter, char *buf, int len);
+void rtw_odm_adaptivity_parm_msg(_adapter *adapter);
+void rtw_odm_adaptivity_parm_set(_adapter *adapter, s8 TH_L2H_ini, s8 TH_EDCCA_HL_diff,
+ s8 IGI_Base, bool ForceEDCCA, u8 AdapEn_RSSI, u8 IGI_LowerBound);
+
+#endif // __RTW_ODM_H__
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_pwrctrl.h b/drivers/net/wireless/rtl8723as/include/rtw_pwrctrl.h
index 3d3dc8275e8f..4b63a1e056cf 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_pwrctrl.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_pwrctrl.h
@@ -257,6 +257,7 @@ struct pwrctrl_priv
u8 wowlan_pattern_idx;
u8 wowlan_wake_reason;
u32 wowlan_pattern_context[8][5];
+ u64 wowlan_fw_iv;
#endif // CONFIG_WOWLAN
_timer pwr_state_check_timer;
int pwr_state_check_interval;
@@ -268,7 +269,6 @@ struct pwrctrl_priv
//rt_rf_power_state current_rfpwrstate;
rt_rf_power_state change_rfpwrstate;
- u8 wepkeymask;
u8 bHWPowerdown;//if support hw power down
u8 bHWPwrPindetect;
u8 bkeepfwalive;
@@ -295,22 +295,22 @@ struct pwrctrl_priv
#endif
};
-#define rtw_get_ips_mode_req(pwrctrlpriv) \
- (pwrctrlpriv)->ips_mode_req
+#define rtw_get_ips_mode_req(pwrctl) \
+ (pwrctl)->ips_mode_req
-#define rtw_ips_mode_req(pwrctrlpriv, ips_mode) \
- (pwrctrlpriv)->ips_mode_req = (ips_mode)
+#define rtw_ips_mode_req(pwrctl, ips_mode) \
+ (pwrctl)->ips_mode_req = (ips_mode)
#define RTW_PWR_STATE_CHK_INTERVAL 2000
-#define _rtw_set_pwr_state_check_timer(pwrctrlpriv, ms) \
+#define _rtw_set_pwr_state_check_timer(pwrctl, ms) \
do { \
- /*DBG_871X("%s _rtw_set_pwr_state_check_timer(%p, %d)\n", __FUNCTION__, (pwrctrlpriv), (ms));*/ \
- _set_timer(&(pwrctrlpriv)->pwr_state_check_timer, (ms)); \
+ /*DBG_871X("%s _rtw_set_pwr_state_check_timer(%p, %d)\n", __FUNCTION__, (pwrctl), (ms));*/ \
+ _set_timer(&(pwrctl)->pwr_state_check_timer, (ms)); \
} while(0)
-#define rtw_set_pwr_state_check_timer(pwrctrlpriv) \
- _rtw_set_pwr_state_check_timer((pwrctrlpriv), (pwrctrlpriv)->pwr_state_check_interval)
+#define rtw_set_pwr_state_check_timer(pwrctl) \
+ _rtw_set_pwr_state_check_timer((pwrctl), (pwrctl)->pwr_state_check_interval)
extern void rtw_init_pwrctrl_priv(_adapter *adapter);
extern void rtw_free_pwrctrl_priv(_adapter * adapter);
@@ -332,7 +332,9 @@ extern void rtw_set_ps_mode(PADAPTER padapter, u8 ps_mode, u8 smart_ps, u8 bcn_a
extern void rtw_set_rpwm(_adapter * padapter, u8 val8);
extern void LeaveAllPowerSaveMode(PADAPTER Adapter);
#ifdef CONFIG_IPS
+void _ips_enter(_adapter * padapter);
void ips_enter(_adapter * padapter);
+int _ips_leave(_adapter * padapter);
int ips_leave(_adapter * padapter);
#endif
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_recv.h b/drivers/net/wireless/rtl8723as/include/rtw_recv.h
index 340413169e26..97ffea34a063 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_recv.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_recv.h
@@ -101,6 +101,26 @@ struct signal_stat {
u32 total_num; //num of valid elements
u32 total_val; //sum of valid elements
};
+/*
+#define MAX_PATH_NUM_92CS 2
+
+typedef struct _ODM_Phy_Status_Info_
+{
+ u1Byte RxPWDBAll;
+ u1Byte SignalQuality; // in 0-100 index.
+ u1Byte RxMIMOSignalQuality[MAX_PATH_NUM_92CS]; //EVM
+ u1Byte RxMIMOSignalStrength[MAX_PATH_NUM_92CS];// in 0~100 index
+#if (DM_ODM_SUPPORT_TYPE & (ODM_MP|ODM_CE))
+ s1Byte RxPower; // in dBm Translate from PWdB
+ s1Byte RecvSignalPower;// Real power in dBm for this packet, no beautification and aggregation. Keep this raw info to be used for the other procedures.
+ u1Byte BTRxRSSIPercentage;
+ u1Byte SignalStrength; // in 0-100 index.
+ u1Byte RxPwr[MAX_PATH_NUM_92CS];//per-path's pwdb
+#endif
+ u1Byte RxSNR[MAX_PATH_NUM_92CS];//per-path's SNR
+}ODM_PHY_INFO_T,*PODM_PHY_INFO_T;
+*/
+
#define MAX_PATH_NUM_92CS 2
struct phy_info //ODM_PHY_INFO_T
{
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_security.h b/drivers/net/wireless/rtl8723as/include/rtw_security.h
index e0790f95edbe..730857c2b97e 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_security.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_security.h
@@ -34,7 +34,9 @@
#define _WEP104_ 0x5
#define _WEP_WPA_MIXED_ 0x07 // WEP + WPA
#define _SMS4_ 0x06
-
+#ifdef CONFIG_IEEE80211W
+#define _BIP_ 0x8
+#endif //CONFIG_IEEE80211W
#define is_wep_enc(alg) (((alg) == _WEP40_) || ((alg) == _WEP104_))
#define _WPA_IE_ID_ 0xdd
@@ -122,6 +124,7 @@ struct security_priv
u32 dot11PrivacyKeyIndex; // this is only valid for legendary wep, 0~3 for key id. (tx key index)
union Keytype dot11DefKey[4]; // this is only valid for def. key
u32 dot11DefKeylen[4];
+ u8 key_mask; /* use to restore wep key after hal_init */
u32 dot118021XGrpPrivacy; // This specify the privacy algthm. used for Grp key
u32 dot118021XGrpKeyid; // key id used for Grp Key ( tx key index)
@@ -130,7 +133,12 @@ struct security_priv
union Keytype dot118021XGrprxmickey[4];
union pn48 dot11Grptxpn; // PN48 used for Grp Key xmit.
union pn48 dot11Grprxpn; // PN48 used for Grp Key recv.
-
+#ifdef CONFIG_IEEE80211W
+ u32 dot11wBIPKeyid; // key id used for BIP Key ( tx key index)
+ union Keytype dot11wBIPKey[6]; // BIP Key, for index4 and index5
+ union pn48 dot11wBIPtxpn; // PN48 used for Grp Key xmit.
+ union pn48 dot11wBIPrxpn; // PN48 used for Grp Key recv.
+#endif //CONFIG_IEEE80211W
#ifdef CONFIG_AP_MODE
//extend security capabilities for AP_MODE
unsigned int dot8021xalg;//0:disable, 1:psk, 2:802.1x
@@ -146,6 +154,9 @@ struct security_priv
u8 binstallGrpkey;
+#ifdef CONFIG_IEEE80211W
+ u8 binstallBIPkey;
+#endif //CONFIG_IEEE80211W
u8 busetkipkey;
//_timer tkip_timer;
u8 bcheck_grpkey;
@@ -397,7 +408,9 @@ static const unsigned long K[64] = {
#ifndef MIN
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
#endif
-
+#ifdef CONFIG_IEEE80211W
+int omac1_aes_128(u8 *key, u8 *data, size_t data_len, u8 *mac);
+#endif //CONFIG_IEEE80211W
void rtw_secmicsetkey(struct mic_data *pmicdata, u8 * key );
void rtw_secmicappendbyte(struct mic_data *pmicdata, u8 b );
void rtw_secmicappend(struct mic_data *pmicdata, u8 * src, u32 nBytes );
@@ -418,7 +431,9 @@ void rtw_wep_encrypt(_adapter *padapter, u8 *pxmitframe);
u32 rtw_aes_decrypt(_adapter *padapter, u8 *precvframe);
u32 rtw_tkip_decrypt(_adapter *padapter, u8 *precvframe);
void rtw_wep_decrypt(_adapter *padapter, u8 *precvframe);
-
+#ifdef CONFIG_IEEE80211W
+u32 rtw_BIP_verify(_adapter *padapter, u8 *precvframe);
+#endif //CONFIG_IEEE80211W
#ifdef CONFIG_TDLS
void wpa_tdls_generate_tpk(_adapter *padapter, struct sta_info *psta);
int wpa_tdls_ftie_mic(u8 *kck, u8 trans_seq,
@@ -443,5 +458,9 @@ void rtw_use_tkipkey_handler(void* FunctionContext);
#ifdef PLATFORM_FREEBSD
void rtw_use_tkipkey_handler(void* FunctionContext);
#endif //PLATFORM_FREEBSD
+
+void rtw_sec_restore_wep_key(_adapter *adapter);
+u8 rtw_handle_tkip_countermeasure(_adapter* adapter, const char *caller);
+
#endif //__RTL871X_SECURITY_H_
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_tdls.h b/drivers/net/wireless/rtl8723as/include/rtw_tdls.h
index 72ecc209f7b6..bc22cfee2958 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_tdls.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_tdls.h
@@ -1,143 +1,143 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#ifndef __RTW_TDLS_H_
-#define __RTW_TDLS_H_
-
-#include <drv_types.h>
-
-#ifdef CONFIG_TDLS
-/* TDLS STA state */
-#define TDLS_STATE_NONE 0x00000000 //default state
-#define TDLS_INITIATOR_STATE 0x10000000
-#define TDLS_RESPONDER_STATE 0x20000000
-#define TDLS_LINKED_STATE 0x40000000
-#define TDLS_CH_SWITCH_ON_STATE 0x01000000
-#define TDLS_PEER_AT_OFF_STATE 0x02000000 //could send pkt on target ch
-#define TDLS_AT_OFF_CH_STATE 0x04000000
-#define TDLS_CH_SW_INITIATOR_STATE 0x08000000 //avoiding duplicated or unconditional ch. switch rsp.
-#define TDLS_APSD_CHSW_STATE 0x00100000 //in APSD and want to setup channel switch
-#define TDLS_PEER_SLEEP_STATE 0x00200000 //peer sta is sleeping
-#define TDLS_SW_OFF_STATE 0x00400000 //terminate channel swithcing
-#define TDLS_ALIVE_STATE 0x00010000 //Check if peer sta is alived.
-
-#define TPK_RESEND_COUNT 301
-#define CH_SWITCH_TIME 10
-#define CH_SWITCH_TIMEOUT 30
-#define TDLS_STAY_TIME 500
-#define TDLS_SIGNAL_THRESH 0x20
-#define TDLS_WATCHDOG_PERIOD 10 //Periodically sending tdls discovery request in TDLS_WATCHDOG_PERIOD * 2 sec
-#define TDLS_ALIVE_TIMER_PH1 5000
-#define TDLS_ALIVE_TIMER_PH2 2000
-#define TDLS_STAY_TIME 500
-#define TDLS_HANDSHAKE_TIME 8000
-#define TDLS_ALIVE_COUNT 3
-#define TDLS_INI_MACID_ENTRY 6
-
-/* TDLS */
-#define TDLS_MIC_LEN 16
-#define WPA_NONCE_LEN 32
-#define TDLS_TIMEOUT_LEN 4
-
-struct wpa_tdls_ftie {
- u8 ie_type; /* FTIE */
- u8 ie_len;
- u8 mic_ctrl[2];
- u8 mic[TDLS_MIC_LEN];
- u8 Anonce[WPA_NONCE_LEN]; /* Responder Nonce in TDLS */
- u8 Snonce[WPA_NONCE_LEN]; /* Initiator Nonce in TDLS */
- /* followed by optional elements */
-} ;
-
-struct wpa_tdls_lnkid {
- u8 ie_type; /* Link Identifier IE */
- u8 ie_len;
- u8 bssid[ETH_ALEN];
- u8 init_sta[ETH_ALEN];
- u8 resp_sta[ETH_ALEN];
-} ;
-
-static u8 TDLS_RSNIE[]={ 0x01, 0x00, //version shall be set to 1
- 0x00, 0x0f, 0xac, 0x07, //group sipher suite
- 0x01, 0x00, //pairwise cipher suite count
- 0x00, 0x0f, 0xac, 0x04, //pairwise cipher suite list; CCMP only
- 0x01, 0x00, //AKM suite count
- 0x00, 0x0f, 0xac, 0x07, //TPK Handshake
- 0x00, 0x02,
- //PMKID shall not be present
- };
-
-static u8 TDLS_WMMIE[]={0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00}; //Qos info all set zero
-
-static u8 TDLS_EXT_CAPIE[] = {0x00, 0x00, 0x00, 0x50, 0x20}; //bit(28), bit(30), bit(37)
-
-// SRC: Supported Regulatory Classes
-static u8 TDLS_SRC[] = { 0x01, 0x01, 0x02, 0x03, 0x04, 0x0c, 0x16, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, 0x1e, 0x20, 0x21 };
-
-void rtw_reset_tdls_info(_adapter* padapter);
-int rtw_init_tdls_info(_adapter* padapter);
-void rtw_free_tdls_info(struct tdls_info *ptdlsinfo);
-void issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, struct sta_info *ptdls_sta, unsigned int power_mode);
-void init_TPK_timer(_adapter *padapter, struct sta_info *psta);
-void init_ch_switch_timer(_adapter *padapter, struct sta_info *psta);
-void init_base_ch_timer(_adapter *padapter, struct sta_info *psta);
-void init_off_ch_timer(_adapter *padapter, struct sta_info *psta);
-void init_tdls_alive_timer(_adapter *padapter, struct sta_info *psta);
-void init_handshake_timer(_adapter *padapter, struct sta_info *psta);
-void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta);
-#ifdef CONFIG_WFD
-void issue_tunneled_probe_req(_adapter *padapter);
-void issue_tunneled_probe_rsp(_adapter *padapter, union recv_frame *precv_frame);
-#endif //CONFIG_WFD
-void issue_tdls_dis_req(_adapter *padapter, u8 *mac_addr);
-void issue_tdls_setup_req(_adapter *padapter, u8 *mac_addr);
-void issue_tdls_setup_rsp(_adapter *padapter, union recv_frame *precv_frame);
-void issue_tdls_setup_cfm(_adapter *padapter, union recv_frame *precv_frame);
-void issue_tdls_dis_rsp(_adapter * padapter, union recv_frame * precv_frame, u8 dialog);
-void issue_tdls_teardown(_adapter *padapter, u8 *mac_addr);
-void issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *psta);
-void issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr);
-void issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr);
-sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame);
-sint On_TDLS_Setup_Req(_adapter *adapter, union recv_frame *precv_frame);
-sint On_TDLS_Setup_Rsp(_adapter *adapter, union recv_frame *precv_frame);
-sint On_TDLS_Setup_Cfm(_adapter *adapter, union recv_frame *precv_frame);
-sint On_TDLS_Dis_Req(_adapter *adapter, union recv_frame *precv_frame);
-sint On_TDLS_Teardown(_adapter *adapter, union recv_frame *precv_frame);
-sint On_TDLS_Peer_Traffic_Rsp(_adapter *adapter, union recv_frame *precv_frame);
-sint On_TDLS_Ch_Switch_Req(_adapter *adapter, union recv_frame *precv_frame);
-sint On_TDLS_Ch_Switch_Rsp(_adapter *adapter, union recv_frame *precv_frame);
-void rtw_build_tdls_setup_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
-void rtw_build_tdls_setup_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
-void rtw_build_tdls_setup_cfm_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
-void rtw_build_tdls_teardown_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
-void rtw_build_tdls_dis_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
-void rtw_build_tdls_dis_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 dialog);
-void rtw_build_tdls_peer_traffic_indication_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
-void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
-void rtw_build_tdls_ch_switch_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
-void rtw_build_tunneled_probe_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
-void rtw_build_tunneled_probe_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
-
-int update_sgi_tdls(_adapter *padapter, struct sta_info *psta);
-u32 update_mask_tdls(_adapter *padapter, struct sta_info *psta);
-#endif //CONFIG_TDLS
-
-#endif
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#ifndef __RTW_TDLS_H_
+#define __RTW_TDLS_H_
+
+#include <drv_types.h>
+
+#ifdef CONFIG_TDLS
+/* TDLS STA state */
+#define TDLS_STATE_NONE 0x00000000 //default state
+#define TDLS_INITIATOR_STATE 0x10000000
+#define TDLS_RESPONDER_STATE 0x20000000
+#define TDLS_LINKED_STATE 0x40000000
+#define TDLS_CH_SWITCH_ON_STATE 0x01000000
+#define TDLS_PEER_AT_OFF_STATE 0x02000000 //could send pkt on target ch
+#define TDLS_AT_OFF_CH_STATE 0x04000000
+#define TDLS_CH_SW_INITIATOR_STATE 0x08000000 //avoiding duplicated or unconditional ch. switch rsp.
+#define TDLS_APSD_CHSW_STATE 0x00100000 //in APSD and want to setup channel switch
+#define TDLS_PEER_SLEEP_STATE 0x00200000 //peer sta is sleeping
+#define TDLS_SW_OFF_STATE 0x00400000 //terminate channel swithcing
+#define TDLS_ALIVE_STATE 0x00010000 //Check if peer sta is alived.
+
+#define TPK_RESEND_COUNT 301
+#define CH_SWITCH_TIME 10
+#define CH_SWITCH_TIMEOUT 30
+#define TDLS_STAY_TIME 500
+#define TDLS_SIGNAL_THRESH 0x20
+#define TDLS_WATCHDOG_PERIOD 10 //Periodically sending tdls discovery request in TDLS_WATCHDOG_PERIOD * 2 sec
+#define TDLS_ALIVE_TIMER_PH1 5000
+#define TDLS_ALIVE_TIMER_PH2 2000
+#define TDLS_STAY_TIME 500
+#define TDLS_HANDSHAKE_TIME 8000
+#define TDLS_ALIVE_COUNT 3
+#define TDLS_INI_MACID_ENTRY 6
+
+/* TDLS */
+#define TDLS_MIC_LEN 16
+#define WPA_NONCE_LEN 32
+#define TDLS_TIMEOUT_LEN 4
+
+struct wpa_tdls_ftie {
+ u8 ie_type; /* FTIE */
+ u8 ie_len;
+ u8 mic_ctrl[2];
+ u8 mic[TDLS_MIC_LEN];
+ u8 Anonce[WPA_NONCE_LEN]; /* Responder Nonce in TDLS */
+ u8 Snonce[WPA_NONCE_LEN]; /* Initiator Nonce in TDLS */
+ /* followed by optional elements */
+} ;
+
+struct wpa_tdls_lnkid {
+ u8 ie_type; /* Link Identifier IE */
+ u8 ie_len;
+ u8 bssid[ETH_ALEN];
+ u8 init_sta[ETH_ALEN];
+ u8 resp_sta[ETH_ALEN];
+} ;
+
+static u8 TDLS_RSNIE[]={ 0x01, 0x00, //version shall be set to 1
+ 0x00, 0x0f, 0xac, 0x07, //group sipher suite
+ 0x01, 0x00, //pairwise cipher suite count
+ 0x00, 0x0f, 0xac, 0x04, //pairwise cipher suite list; CCMP only
+ 0x01, 0x00, //AKM suite count
+ 0x00, 0x0f, 0xac, 0x07, //TPK Handshake
+ 0x00, 0x02,
+ //PMKID shall not be present
+ };
+
+static u8 TDLS_WMMIE[]={0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00}; //Qos info all set zero
+
+static u8 TDLS_EXT_CAPIE[] = {0x00, 0x00, 0x00, 0x50, 0x20}; //bit(28), bit(30), bit(37)
+
+// SRC: Supported Regulatory Classes
+static u8 TDLS_SRC[] = { 0x01, 0x01, 0x02, 0x03, 0x04, 0x0c, 0x16, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, 0x1e, 0x20, 0x21 };
+
+void rtw_reset_tdls_info(_adapter* padapter);
+int rtw_init_tdls_info(_adapter* padapter);
+void rtw_free_tdls_info(struct tdls_info *ptdlsinfo);
+void issue_nulldata_to_TDLS_peer_STA(_adapter *padapter, struct sta_info *ptdls_sta, unsigned int power_mode);
+void init_TPK_timer(_adapter *padapter, struct sta_info *psta);
+void init_ch_switch_timer(_adapter *padapter, struct sta_info *psta);
+void init_base_ch_timer(_adapter *padapter, struct sta_info *psta);
+void init_off_ch_timer(_adapter *padapter, struct sta_info *psta);
+void init_tdls_alive_timer(_adapter *padapter, struct sta_info *psta);
+void init_handshake_timer(_adapter *padapter, struct sta_info *psta);
+void free_tdls_sta(_adapter *padapter, struct sta_info *ptdls_sta);
+#ifdef CONFIG_WFD
+void issue_tunneled_probe_req(_adapter *padapter);
+void issue_tunneled_probe_rsp(_adapter *padapter, union recv_frame *precv_frame);
+#endif //CONFIG_WFD
+void issue_tdls_dis_req(_adapter *padapter, u8 *mac_addr);
+void issue_tdls_setup_req(_adapter *padapter, u8 *mac_addr);
+void issue_tdls_setup_rsp(_adapter *padapter, union recv_frame *precv_frame);
+void issue_tdls_setup_cfm(_adapter *padapter, union recv_frame *precv_frame);
+void issue_tdls_dis_rsp(_adapter * padapter, union recv_frame * precv_frame, u8 dialog);
+void issue_tdls_teardown(_adapter *padapter, u8 *mac_addr);
+void issue_tdls_peer_traffic_indication(_adapter *padapter, struct sta_info *psta);
+void issue_tdls_ch_switch_req(_adapter *padapter, u8 *mac_addr);
+void issue_tdls_ch_switch_rsp(_adapter *padapter, u8 *mac_addr);
+sint On_TDLS_Dis_Rsp(_adapter *adapter, union recv_frame *precv_frame);
+sint On_TDLS_Setup_Req(_adapter *adapter, union recv_frame *precv_frame);
+sint On_TDLS_Setup_Rsp(_adapter *adapter, union recv_frame *precv_frame);
+sint On_TDLS_Setup_Cfm(_adapter *adapter, union recv_frame *precv_frame);
+sint On_TDLS_Dis_Req(_adapter *adapter, union recv_frame *precv_frame);
+sint On_TDLS_Teardown(_adapter *adapter, union recv_frame *precv_frame);
+sint On_TDLS_Peer_Traffic_Rsp(_adapter *adapter, union recv_frame *precv_frame);
+sint On_TDLS_Ch_Switch_Req(_adapter *adapter, union recv_frame *precv_frame);
+sint On_TDLS_Ch_Switch_Rsp(_adapter *adapter, union recv_frame *precv_frame);
+void rtw_build_tdls_setup_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
+void rtw_build_tdls_setup_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
+void rtw_build_tdls_setup_cfm_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
+void rtw_build_tdls_teardown_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
+void rtw_build_tdls_dis_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
+void rtw_build_tdls_dis_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe, u8 dialog);
+void rtw_build_tdls_peer_traffic_indication_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
+void rtw_build_tdls_ch_switch_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
+void rtw_build_tdls_ch_switch_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
+void rtw_build_tunneled_probe_req_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
+void rtw_build_tunneled_probe_rsp_ies(_adapter * padapter, struct xmit_frame * pxmitframe, u8 *pframe);
+
+int update_sgi_tdls(_adapter *padapter, struct sta_info *psta);
+u32 update_mask_tdls(_adapter *padapter, struct sta_info *psta);
+#endif //CONFIG_TDLS
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_version.h b/drivers/net/wireless/rtl8723as/include/rtw_version.h
index c947733a3e3e..de07ed041ffd 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_version.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_version.h
@@ -1 +1 @@
-#define DRIVERVERSION "v4.1.6_7336.20130426"
+#define DRIVERVERSION "v4.1.8_9180.20130927_BTCOEX20130528_ver3.3_beta"
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_wapi.h b/drivers/net/wireless/rtl8723as/include/rtw_wapi.h
index 2d583b587c60..f72c666dd226 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_wapi.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_wapi.h
@@ -1,229 +1,229 @@
-#ifndef __INC_WAPI_H
-#define __INC_WAPI_H
-
-#include <linux/kernel.h>
-#include <linux/list.h>
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <wlan_bssdef.h>
-//#include "rtl819x_Qos.h"
-
-#define CONFIG_WAPI_SW_SMS4
-#define WAPI_DEBUG
-
-#define SMS4_MIC_LEN 16
-#define WAPI_EXT_LEN 18
-#define MAX_WAPI_IE_LEN 256
-#define sMacHdrLng 24 // octets in data header, no WEP
-
-#ifdef WAPI_DEBUG
-
-/* WAPI trace debug */
-extern u32 wapi_debug_component;
-
-static inline void dump_buf(u8 *buf, u32 len)
-{
- u32 i;
- printk("-----------------Len %d----------------\n", len);
- for(i=0; i<len; i++)
- printk("%2.2x-", *(buf+i));
- printk("\n");
-}
-
-#define WAPI_TRACE(component, x, args...) \
-do { if(wapi_debug_component & (component)) \
- printk(KERN_DEBUG "WAPI" ":" x "" , \
- ##args);\
-}while(0);
-
-#define WAPI_DATA(component, x, buf, len) \
-do { if(wapi_debug_component & (component)){ \
- printk("%s:\n", x);\
- dump_buf((buf), (len));}\
-}while(0);
-
-#define RT_ASSERT_RET(_Exp) \
- if(!(_Exp)) \
- { \
- printk("RTWLAN: "); \
- printk( "Assertion failed! %s,%s,line=%d\n", \
- #_Exp,__FUNCTION__,__LINE__); \
- return; \
- }
-#define RT_ASSERT_RET_VALUE(_Exp,Ret) \
- if(!(_Exp)) \
- { \
- printk("RTWLAN: "); \
- printk( "Assertion failed! %s,%s,line=%d\n", \
- #_Exp,__FUNCTION__,__LINE__); \
- return (Ret); \
- }
-
-#else
-#define RT_ASSERT_RET(_Exp) do {} while(0)
-#define RT_ASSERT_RET_VALUE(_Exp,Ret) do {} while(0)
-#define WAPI_TRACE(component, x, args...) do {} while(0)
-#define WAPI_DATA(component, x, buf, len) do {} while(0)
-#endif
-
-
-enum WAPI_DEBUG {
- WAPI_INIT = 1,
- WAPI_API = 1<<1,
- WAPI_TX = 1<<2,
- WAPI_RX = 1<<3,
- WAPI_MLME = 1<<4,
- WAPI_IOCTL = 1<<5,
- WAPI_ERR = 1<<31
-};
-
-#define WAPI_MAX_BKID_NUM 4
-#define WAPI_MAX_STAINFO_NUM 4
-#define WAPI_CAM_ENTRY_NUM 14 // 28/2=14
-
-typedef struct _RT_WAPI_BKID
-{
- struct list_head list;
- u8 bkid[16];
-}RT_WAPI_BKID,*PRT_WAPI_BKID;
-
-typedef struct _RT_WAPI_KEY
-{
- u8 dataKey[16];
- u8 micKey[16];
- u8 keyId;
- bool bSet;
- bool bTxEnable;
-}RT_WAPI_KEY,*PRT_WAPI_KEY;
-
-typedef enum _RT_WAPI_PACKET_TYPE
-{
- WAPI_NONE = 0,
- WAPI_PREAUTHENTICATE=1,
- WAPI_STAKEY_REQUEST=2,
- WAPI_AUTHENTICATE_ACTIVE=3,
- WAPI_ACCESS_AUTHENTICATE_REQUEST=4,
- WAPI_ACCESS_AUTHENTICATE_RESPONSE=5,
- WAPI_CERTIFICATE_AUTHENTICATE_REQUEST=6,
- WAPI_CERTIFICATE_AUTHENTICATE_RESPONSE=7,
- WAPI_USK_REQUEST=8,
- WAPI_USK_RESPONSE=9,
- WAPI_USK_CONFIRM=10,
- WAPI_MSK_NOTIFICATION=11,
- WAPI_MSK_RESPONSE=12
-}RT_WAPI_PACKET_TYPE;
-
-typedef struct _RT_WAPI_STA_INFO
-{
- struct list_head list;
- u8 PeerMacAddr[6];
- RT_WAPI_KEY wapiUsk;
- RT_WAPI_KEY wapiUskUpdate;
- RT_WAPI_KEY wapiMsk;
- RT_WAPI_KEY wapiMskUpdate;
- u8 lastRxUnicastPN[16];
- u8 lastTxUnicastPN[16];
- u8 lastRxMulticastPN[16];
- u8 lastRxUnicastPNBEQueue[16];
- u8 lastRxUnicastPNBKQueue[16];
- u8 lastRxUnicastPNVIQueue[16];
- u8 lastRxUnicastPNVOQueue[16];
- bool bSetkeyOk;
- bool bAuthenticateInProgress;
- bool bAuthenticatorInUpdata;
-}RT_WAPI_STA_INFO,*PRT_WAPI_STA_INFO;
-
-//Added for HW wapi en/decryption
-typedef struct _RT_WAPI_CAM_ENTRY{
- //RT_LIST_ENTRY list;
- u8 IsUsed;
- u8 entry_idx;//for cam entry
- u8 keyidx; // 0 or 1,new or old key
- u8 PeerMacAddr[6];
- u8 type; //should be 110,wapi
-}RT_WAPI_CAM_ENTRY,*PRT_WAPI_CAM_ENTRY;
-
-typedef struct _RT_WAPI_T
-{
-//BKID
- RT_WAPI_BKID wapiBKID[WAPI_MAX_BKID_NUM];
- struct list_head wapiBKIDIdleList;
- struct list_head wapiBKIDStoreList;
-//Key for Tx Multicast/Broadcast
- RT_WAPI_KEY wapiTxMsk;
-
-//sec related
- u8 lastTxMulticastPN[16];
-//STA list
- RT_WAPI_STA_INFO wapiSta[WAPI_MAX_STAINFO_NUM];
- struct list_head wapiSTAIdleList;
- struct list_head wapiSTAUsedList;
-//
- bool bWapiEnable;
-
-//store WAPI IE
- u8 wapiIE[256];
- u8 wapiIELength;
- bool bWapiPSK;
-//last sequece number for wai packet
- u16 wapiSeqnumAndFragNum;
- int extra_prefix_len;
- int extra_postfix_len;
-
- RT_WAPI_CAM_ENTRY wapiCamEntry[WAPI_CAM_ENTRY_NUM];
-}RT_WAPI_T,*PRT_WAPI_T;
-
-typedef struct _WLAN_HEADER_WAPI_EXTENSION
-{
- u8 KeyIdx;
- u8 Reserved;
- u8 PN[16];
-} WLAN_HEADER_WAPI_EXTENSION, *PWLAN_HEADER_WAPI_EXTENSION;
-
-u32 WapiComparePN(u8 *PN1, u8 *PN2);
-
-
-void rtw_wapi_init(_adapter *padapter);
-
-void rtw_wapi_free(_adapter *padapter);
-
-void rtw_wapi_disable_tx(_adapter *padapter);
-
-u8 rtw_wapi_is_wai_packet(_adapter* padapter,u8 *pkt_data);
-
-void rtw_wapi_update_info(_adapter *padapter, union recv_frame *precv_frame);
-
-u8 rtw_wapi_check_for_drop(_adapter *padapter, union recv_frame *precv_frame);
-
-void rtw_build_probe_resp_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);
-
-void rtw_build_beacon_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);
-
-void rtw_build_assoc_req_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);
-
-void rtw_wapi_on_assoc_ok(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
-
-void rtw_wapi_return_one_sta_info(_adapter *padapter, u8 *MacAddr);
-
-void rtw_wapi_return_all_sta_info(_adapter *padapter);
-
-void rtw_wapi_clear_cam_entry(_adapter *padapter, u8 *pMacAddr);
-
-void rtw_wapi_clear_all_cam_entry(_adapter *padapter);
-
-void rtw_wapi_set_key(_adapter *padapter, RT_WAPI_KEY *pWapiKey, RT_WAPI_STA_INFO *pWapiSta, u8 bGroupKey, u8 bUseDefaultKey);
-
-int rtw_wapi_create_event_send(_adapter *padapter, u8 EventId, u8 *MacAddr, u8 *Buff, u16 BufLen);
-
-u32 rtw_sms4_encrypt(_adapter *padapter, u8 *pxmitframe);
-
-u32 rtw_sms4_decrypt(_adapter *padapter, u8 *precvframe);
-
-void rtw_wapi_get_iv(_adapter *padapter, u8*pRA, u8*IV);
-
-u8 WapiIncreasePN(u8 *PN, u8 AddCount);
-
-bool rtw_wapi_drop_for_key_absent(_adapter *padapter,u8 *pRA);
-
-#endif
+#ifndef __INC_WAPI_H
+#define __INC_WAPI_H
+
+#include <linux/kernel.h>
+#include <linux/list.h>
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+#include <wlan_bssdef.h>
+//#include "rtl819x_Qos.h"
+
+#define CONFIG_WAPI_SW_SMS4
+#define WAPI_DEBUG
+
+#define SMS4_MIC_LEN 16
+#define WAPI_EXT_LEN 18
+#define MAX_WAPI_IE_LEN 256
+#define sMacHdrLng 24 // octets in data header, no WEP
+
+#ifdef WAPI_DEBUG
+
+/* WAPI trace debug */
+extern u32 wapi_debug_component;
+
+static inline void dump_buf(u8 *buf, u32 len)
+{
+ u32 i;
+ printk("-----------------Len %d----------------\n", len);
+ for(i=0; i<len; i++)
+ printk("%2.2x-", *(buf+i));
+ printk("\n");
+}
+
+#define WAPI_TRACE(component, x, args...) \
+do { if(wapi_debug_component & (component)) \
+ printk(KERN_DEBUG "WAPI" ":" x "" , \
+ ##args);\
+}while(0);
+
+#define WAPI_DATA(component, x, buf, len) \
+do { if(wapi_debug_component & (component)){ \
+ printk("%s:\n", x);\
+ dump_buf((buf), (len));}\
+}while(0);
+
+#define RT_ASSERT_RET(_Exp) \
+ if(!(_Exp)) \
+ { \
+ printk("RTWLAN: "); \
+ printk( "Assertion failed! %s,%s,line=%d\n", \
+ #_Exp,__FUNCTION__,__LINE__); \
+ return; \
+ }
+#define RT_ASSERT_RET_VALUE(_Exp,Ret) \
+ if(!(_Exp)) \
+ { \
+ printk("RTWLAN: "); \
+ printk( "Assertion failed! %s,%s,line=%d\n", \
+ #_Exp,__FUNCTION__,__LINE__); \
+ return (Ret); \
+ }
+
+#else
+#define RT_ASSERT_RET(_Exp) do {} while(0)
+#define RT_ASSERT_RET_VALUE(_Exp,Ret) do {} while(0)
+#define WAPI_TRACE(component, x, args...) do {} while(0)
+#define WAPI_DATA(component, x, buf, len) do {} while(0)
+#endif
+
+
+enum WAPI_DEBUG {
+ WAPI_INIT = 1,
+ WAPI_API = 1<<1,
+ WAPI_TX = 1<<2,
+ WAPI_RX = 1<<3,
+ WAPI_MLME = 1<<4,
+ WAPI_IOCTL = 1<<5,
+ WAPI_ERR = 1<<31
+};
+
+#define WAPI_MAX_BKID_NUM 4
+#define WAPI_MAX_STAINFO_NUM 4
+#define WAPI_CAM_ENTRY_NUM 14 // 28/2=14
+
+typedef struct _RT_WAPI_BKID
+{
+ struct list_head list;
+ u8 bkid[16];
+}RT_WAPI_BKID,*PRT_WAPI_BKID;
+
+typedef struct _RT_WAPI_KEY
+{
+ u8 dataKey[16];
+ u8 micKey[16];
+ u8 keyId;
+ bool bSet;
+ bool bTxEnable;
+}RT_WAPI_KEY,*PRT_WAPI_KEY;
+
+typedef enum _RT_WAPI_PACKET_TYPE
+{
+ WAPI_NONE = 0,
+ WAPI_PREAUTHENTICATE=1,
+ WAPI_STAKEY_REQUEST=2,
+ WAPI_AUTHENTICATE_ACTIVE=3,
+ WAPI_ACCESS_AUTHENTICATE_REQUEST=4,
+ WAPI_ACCESS_AUTHENTICATE_RESPONSE=5,
+ WAPI_CERTIFICATE_AUTHENTICATE_REQUEST=6,
+ WAPI_CERTIFICATE_AUTHENTICATE_RESPONSE=7,
+ WAPI_USK_REQUEST=8,
+ WAPI_USK_RESPONSE=9,
+ WAPI_USK_CONFIRM=10,
+ WAPI_MSK_NOTIFICATION=11,
+ WAPI_MSK_RESPONSE=12
+}RT_WAPI_PACKET_TYPE;
+
+typedef struct _RT_WAPI_STA_INFO
+{
+ struct list_head list;
+ u8 PeerMacAddr[6];
+ RT_WAPI_KEY wapiUsk;
+ RT_WAPI_KEY wapiUskUpdate;
+ RT_WAPI_KEY wapiMsk;
+ RT_WAPI_KEY wapiMskUpdate;
+ u8 lastRxUnicastPN[16];
+ u8 lastTxUnicastPN[16];
+ u8 lastRxMulticastPN[16];
+ u8 lastRxUnicastPNBEQueue[16];
+ u8 lastRxUnicastPNBKQueue[16];
+ u8 lastRxUnicastPNVIQueue[16];
+ u8 lastRxUnicastPNVOQueue[16];
+ bool bSetkeyOk;
+ bool bAuthenticateInProgress;
+ bool bAuthenticatorInUpdata;
+}RT_WAPI_STA_INFO,*PRT_WAPI_STA_INFO;
+
+//Added for HW wapi en/decryption
+typedef struct _RT_WAPI_CAM_ENTRY{
+ //RT_LIST_ENTRY list;
+ u8 IsUsed;
+ u8 entry_idx;//for cam entry
+ u8 keyidx; // 0 or 1,new or old key
+ u8 PeerMacAddr[6];
+ u8 type; //should be 110,wapi
+}RT_WAPI_CAM_ENTRY,*PRT_WAPI_CAM_ENTRY;
+
+typedef struct _RT_WAPI_T
+{
+//BKID
+ RT_WAPI_BKID wapiBKID[WAPI_MAX_BKID_NUM];
+ struct list_head wapiBKIDIdleList;
+ struct list_head wapiBKIDStoreList;
+//Key for Tx Multicast/Broadcast
+ RT_WAPI_KEY wapiTxMsk;
+
+//sec related
+ u8 lastTxMulticastPN[16];
+//STA list
+ RT_WAPI_STA_INFO wapiSta[WAPI_MAX_STAINFO_NUM];
+ struct list_head wapiSTAIdleList;
+ struct list_head wapiSTAUsedList;
+//
+ bool bWapiEnable;
+
+//store WAPI IE
+ u8 wapiIE[256];
+ u8 wapiIELength;
+ bool bWapiPSK;
+//last sequece number for wai packet
+ u16 wapiSeqnumAndFragNum;
+ int extra_prefix_len;
+ int extra_postfix_len;
+
+ RT_WAPI_CAM_ENTRY wapiCamEntry[WAPI_CAM_ENTRY_NUM];
+}RT_WAPI_T,*PRT_WAPI_T;
+
+typedef struct _WLAN_HEADER_WAPI_EXTENSION
+{
+ u8 KeyIdx;
+ u8 Reserved;
+ u8 PN[16];
+} WLAN_HEADER_WAPI_EXTENSION, *PWLAN_HEADER_WAPI_EXTENSION;
+
+u32 WapiComparePN(u8 *PN1, u8 *PN2);
+
+
+void rtw_wapi_init(_adapter *padapter);
+
+void rtw_wapi_free(_adapter *padapter);
+
+void rtw_wapi_disable_tx(_adapter *padapter);
+
+u8 rtw_wapi_is_wai_packet(_adapter* padapter,u8 *pkt_data);
+
+void rtw_wapi_update_info(_adapter *padapter, union recv_frame *precv_frame);
+
+u8 rtw_wapi_check_for_drop(_adapter *padapter, union recv_frame *precv_frame);
+
+void rtw_build_probe_resp_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);
+
+void rtw_build_beacon_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);
+
+void rtw_build_assoc_req_wapi_ie(_adapter *padapter, unsigned char *pframe, struct pkt_attrib *pattrib);
+
+void rtw_wapi_on_assoc_ok(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
+
+void rtw_wapi_return_one_sta_info(_adapter *padapter, u8 *MacAddr);
+
+void rtw_wapi_return_all_sta_info(_adapter *padapter);
+
+void rtw_wapi_clear_cam_entry(_adapter *padapter, u8 *pMacAddr);
+
+void rtw_wapi_clear_all_cam_entry(_adapter *padapter);
+
+void rtw_wapi_set_key(_adapter *padapter, RT_WAPI_KEY *pWapiKey, RT_WAPI_STA_INFO *pWapiSta, u8 bGroupKey, u8 bUseDefaultKey);
+
+int rtw_wapi_create_event_send(_adapter *padapter, u8 EventId, u8 *MacAddr, u8 *Buff, u16 BufLen);
+
+u32 rtw_sms4_encrypt(_adapter *padapter, u8 *pxmitframe);
+
+u32 rtw_sms4_decrypt(_adapter *padapter, u8 *precvframe);
+
+void rtw_wapi_get_iv(_adapter *padapter, u8*pRA, u8*IV);
+
+u8 WapiIncreasePN(u8 *PN, u8 AddCount);
+
+bool rtw_wapi_drop_for_key_absent(_adapter *padapter,u8 *pRA);
+
+#endif
diff --git a/drivers/net/wireless/rtl8723as/include/rtw_xmit.h b/drivers/net/wireless/rtl8723as/include/rtw_xmit.h
index 3a62e5f82137..df1cef62e06f 100755
--- a/drivers/net/wireless/rtl8723as/include/rtw_xmit.h
+++ b/drivers/net/wireless/rtl8723as/include/rtw_xmit.h
@@ -45,13 +45,13 @@
#elif defined (CONFIG_USB_HCI)
#ifdef CONFIG_USB_TX_AGGREGATION
-#ifdef CONFIG_PLATFORM_ARM_SUNxI
-#define MAX_XMITBUF_SZ (12288) //12k 1536*8
- #elif defined (CONFIG_PLATFORM_MSTAR_TITANIA12)
+ #if defined(CONFIG_PLATFORM_ARM_SUNxI) || defined(CONFIG_PLATFORM_ARM_SUN6I)
+ #define MAX_XMITBUF_SZ (12288) //12k 1536*8
+ #elif defined (CONFIG_PLATFORM_MSTAR)
#define MAX_XMITBUF_SZ 7680 // 7.5k
-#else
-#define MAX_XMITBUF_SZ (20480) // 20k
-#endif
+ #else
+ #define MAX_XMITBUF_SZ (20480) // 20k
+ #endif
#else
#define MAX_XMITBUF_SZ (2048)
#endif
@@ -644,11 +644,15 @@ struct xmit_priv {
#ifdef CONFIG_SDIO_HCI
#ifdef CONFIG_SDIO_TX_TASKLET
-#ifdef PLATFORM_LINUX
+ #ifdef PLATFORM_LINUX
struct tasklet_struct xmit_tasklet;
-#endif
-#endif
-#endif
+ #endif /* PLATFORM_LINUX */
+#else
+ _thread_hdl_ SdioXmitThread;
+ _sema SdioXmitSema;
+ _sema SdioXmitTerminateSema;
+#endif /* CONFIG_SDIO_TX_TASKLET */
+#endif /* CONFIG_SDIO_HCI */
_queue free_xmitbuf_queue;
_queue pending_xmitbuf_queue;
@@ -705,6 +709,9 @@ extern s32 rtw_xmit_classifier(_adapter *padapter, struct xmit_frame *pxmitframe
extern u32 rtw_calculate_wlan_pkt_size_by_attribue(struct pkt_attrib *pattrib);
#define rtw_wlan_pkt_size(f) rtw_calculate_wlan_pkt_size_by_attribue(&f->attrib)
extern s32 rtw_xmitframe_coalesce(_adapter *padapter, _pkt *pkt, struct xmit_frame *pxmitframe);
+#ifdef CONFIG_IEEE80211W
+extern s32 rtw_mgmt_xmitframe_coalesce(_adapter *padapter, _pkt *pkt, struct xmit_frame *pxmitframe);
+#endif //CONFIG_IEEE80211W
#ifdef CONFIG_TDLS
s32 rtw_xmit_tdls_coalesce(_adapter *padapter, struct xmit_frame *pxmitframe, u8 action);
#endif
diff --git a/drivers/net/wireless/rtl8723as/include/sdio_ops_ce.h b/drivers/net/wireless/rtl8723as/include/sdio_ops_ce.h
index 6dfc774188ee..d2da29331f28 100755
--- a/drivers/net/wireless/rtl8723as/include/sdio_ops_ce.h
+++ b/drivers/net/wireless/rtl8723as/include/sdio_ops_ce.h
@@ -16,40 +16,40 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*
*
- ******************************************************************************/
-#ifndef _SDIO_OPS_WINCE_H_
-#define _SDIO_OPS_WINCE_H_
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <osdep_intf.h>
-
-
-#ifdef PLATFORM_OS_CE
-
-
-extern u8 sdbus_cmd52r_ce(struct intf_priv *pintfpriv, u32 addr);
-
-
-extern void sdbus_cmd52w_ce(struct intf_priv *pintfpriv, u32 addr,u8 val8);
-
-
-uint sdbus_read_blocks_to_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
-
-extern uint sdbus_read_bytes_to_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
-
-
-extern uint sdbus_write_blocks_from_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf,u8 async);
-
-extern uint sdbus_write_bytes_from_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
-extern u8 sdbus_func1cmd52r_ce(struct intf_priv *pintfpriv, u32 addr);
-extern void sdbus_func1cmd52w_ce(struct intf_priv *pintfpriv, u32 addr, u8 val8);
-extern uint sdbus_read_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
-extern uint sdbus_write_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
-extern void sdio_read_int(_adapter *padapter, u32 addr,u8 sz,void *pdata);
-
-#endif
-
-#endif
-
+ ******************************************************************************/
+#ifndef _SDIO_OPS_WINCE_H_
+#define _SDIO_OPS_WINCE_H_
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+#include <osdep_intf.h>
+
+
+#ifdef PLATFORM_OS_CE
+
+
+extern u8 sdbus_cmd52r_ce(struct intf_priv *pintfpriv, u32 addr);
+
+
+extern void sdbus_cmd52w_ce(struct intf_priv *pintfpriv, u32 addr,u8 val8);
+
+
+uint sdbus_read_blocks_to_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
+
+extern uint sdbus_read_bytes_to_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
+
+
+extern uint sdbus_write_blocks_from_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf,u8 async);
+
+extern uint sdbus_write_bytes_from_membuf_ce(struct intf_priv *pintfpriv, u32 addr, u32 cnt, u8 *pbuf);
+extern u8 sdbus_func1cmd52r_ce(struct intf_priv *pintfpriv, u32 addr);
+extern void sdbus_func1cmd52w_ce(struct intf_priv *pintfpriv, u32 addr, u8 val8);
+extern uint sdbus_read_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
+extern uint sdbus_write_reg(struct intf_priv *pintfpriv, u32 addr, u32 cnt,void *pdata);
+extern void sdio_read_int(_adapter *padapter, u32 addr,u8 sz,void *pdata);
+
+#endif
+
+#endif
+
diff --git a/drivers/net/wireless/rtl8723as/include/sdio_ops_linux.h b/drivers/net/wireless/rtl8723as/include/sdio_ops_linux.h
index e6ebd38c6578..008c5bf0cabc 100755
--- a/drivers/net/wireless/rtl8723as/include/sdio_ops_linux.h
+++ b/drivers/net/wireless/rtl8723as/include/sdio_ops_linux.h
@@ -20,7 +20,33 @@
#ifndef __SDIO_OPS_LINUX_H__
#define __SDIO_OPS_LINUX_H__
-void rtw_sdio_set_irq_thd(struct dvobj_priv *dvobj, _thread_hdl_ thd_hdl);
+#define SDIO_ERR_VAL8 0xEA
+#define SDIO_ERR_VAL16 0xEAEA
+#define SDIO_ERR_VAL32 0xEAEAEAEA
+
+u8 sd_f0_read8(struct intf_hdl *pintfhdl, u32 addr, s32 *err);
+void sd_f0_write8(struct intf_hdl *pintfhdl, u32 addr, u8 v, s32 *err);
+
+s32 _sd_cmd52_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata);
+s32 _sd_cmd52_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata);
+s32 sd_cmd52_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata);
+s32 sd_cmd52_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata);
+u8 _sd_read8(struct intf_hdl *pintfhdl, u32 addr, s32 *err);
+u8 sd_read8(struct intf_hdl *pintfhdl, u32 addr, s32 *err);
+u16 sd_read16(struct intf_hdl *pintfhdl, u32 addr, s32 *err);
+u32 _sd_read32(struct intf_hdl *pintfhdl, u32 addr, s32 *err);
+u32 sd_read32(struct intf_hdl *pintfhdl, u32 addr, s32 *err);
+s32 _sd_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata);
+s32 sd_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata);
+void sd_write8(struct intf_hdl *pintfhdl, u32 addr, u8 v, s32 *err);
+void sd_write16(struct intf_hdl *pintfhdl, u32 addr, u16 v, s32 *err);
+void _sd_write32(struct intf_hdl *pintfhdl, u32 addr, u32 v, s32 *err);
+void sd_write32(struct intf_hdl *pintfhdl, u32 addr, u32 v, s32 *err);
+s32 _sd_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata);
+s32 sd_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata);
+
+
+void rtw_sdio_set_irq_thd(struct dvobj_priv *dvobj, _thread_hdl_ thd_hdl);
#endif
diff --git a/drivers/net/wireless/rtl8723as/include/sta_info.h b/drivers/net/wireless/rtl8723as/include/sta_info.h
index c0de35e4d103..5f2fca33b4f6 100755
--- a/drivers/net/wireless/rtl8723as/include/sta_info.h
+++ b/drivers/net/wireless/rtl8723as/include/sta_info.h
@@ -120,6 +120,9 @@ struct sta_info {
union Keytype dot11tkiprxmickey;
union Keytype dot118021x_UncstKey;
union pn48 dot11txpn; // PN48 used for Unicast xmit.
+#ifdef CONFIG_IEEE80211W
+ union pn48 dot11wtxpn; // PN48 used for Unicast mgmt xmit.
+#endif //CONFIG_IEEE80211W
union pn48 dot11rxpn; // PN48 used for Unicast recv.
@@ -261,10 +264,22 @@ struct sta_info {
u32 assoc_req_len;
#endif
+#ifdef DBG_TRX_STA_PKTS
+ //per AC dbg irp cnts
+ int rx_be_cnt;
+ int rx_bk_cnt;
+ int rx_vi_cnt;
+ int rx_vo_cnt;
+ //per AC dbg irp cnts
+ int tx_be_cnt;
+ int tx_bk_cnt;
+ int tx_vi_cnt;
+ int tx_vo_cnt;
+#endif
//for DM
RSSI_STA rssi_stat;
- //
+ //ODM_STA_INFO_T
// ================ODM Relative Info=======================
// Please be care, dont declare too much structure here. It will cost memory * STA support num.
//
@@ -274,15 +289,15 @@ struct sta_info {
// Driver Write
u8 bValid; // record the sta status link or not?
//u8 WirelessMode; //
- u8 IOTPeer; // Enum value. HT_IOT_PEER_E
- u8 rssi_level; //for Refresh RA mask
+ u8 IOTPeer; // Enum value. HT_IOT_PEER_E
// ODM Write
//1 PHY_STATUS_INFO
u8 RSSI_Path[4]; //
u8 RSSI_Ave;
u8 RXEVM[4];
u8 RXSNR[4];
-
+
+ u8 rssi_level; //for Refresh RA mask
// ODM Write
//1 TX_INFO (may changed by IC)
//TX_INFO_T pTxInfo; // Define in IC folder. Move lower layer.
diff --git a/drivers/net/wireless/rtl8723as/include/usb_ops.h b/drivers/net/wireless/rtl8723as/include/usb_ops.h
index d80dba860fe1..bb0a2b6d7699 100755
--- a/drivers/net/wireless/rtl8723as/include/usb_ops.h
+++ b/drivers/net/wireless/rtl8723as/include/usb_ops.h
@@ -103,32 +103,6 @@ void rtl8188eu_set_intf_ops(struct _io_ops *pops);
#define usb_set_intf_ops rtl8188eu_set_intf_ops
#endif
-/*
-* Increase and check if the continual_urb_error of this @param dvobjprive is larger than MAX_CONTINUAL_URB_ERR
-* @return _TRUE:
-* @return _FALSE:
-*/
-static inline int rtw_inc_and_chk_continual_urb_error(struct dvobj_priv *dvobj)
-{
- int ret = _FALSE;
- int value;
- if( (value=ATOMIC_INC_RETURN(&dvobj->continual_urb_error)) > MAX_CONTINUAL_URB_ERR) {
- DBG_871X("[dvobj:%p][ERROR] continual_urb_error:%d > %d\n", dvobj, value, MAX_CONTINUAL_URB_ERR);
- ret = _TRUE;
- } else {
- //DBG_871X("[dvobj:%p] continual_urb_error:%d\n", dvobj, value);
- }
- return ret;
-}
-
-/*
-* Set the continual_urb_error of this @param dvobjprive to 0
-*/
-static inline void rtw_reset_continual_urb_error(struct dvobj_priv *dvobj)
-{
- ATOMIC_SET(&dvobj->continual_urb_error, 0);
-}
-
#define USB_HIGH_SPEED_BULK_SIZE 512
#define USB_FULL_SPEED_BULK_SIZE 64
diff --git a/drivers/net/wireless/rtl8723as/include/wifi.h b/drivers/net/wireless/rtl8723as/include/wifi.h
index ffefdd9aa31d..39f46186b189 100755
--- a/drivers/net/wireless/rtl8723as/include/wifi.h
+++ b/drivers/net/wireless/rtl8723as/include/wifi.h
@@ -573,7 +573,9 @@ __inline static int IsFrameTypeCtrl(unsigned char *pframe)
#define EID_BSSCoexistence 72 // 20/40 BSS Coexistence
#define EID_BSSIntolerantChlReport 73
#define _RIC_Descriptor_IE_ 75
-
+#ifdef CONFIG_IEEE80211W
+#define _MME_IE_ 76 //802.11w Management MIC element
+#endif //CONFIG_IEEE80211W
#define _LINK_ID_IE_ 101
#define _CH_SWITCH_TIMING_ 104
#define _PTI_BUFFER_STATUS_ 106
@@ -630,7 +632,10 @@ __inline static int IsFrameTypeCtrl(unsigned char *pframe)
#define _WEP_104_PRIVACY_ 5
#define _WEP_WPA_MIXED_PRIVACY_ 6 // WEP + WPA
*/
-
+
+#ifdef CONFIG_IEEE80211W
+#define _MME_IE_LENGTH_ 18
+#endif //CONFIG_IEEE80211W
/*-----------------------------------------------------------------------------
Below is the definition for WMM
------------------------------------------------------------------------------*/
diff --git a/drivers/net/wireless/rtl8723as/include/xmit_osdep.h b/drivers/net/wireless/rtl8723as/include/xmit_osdep.h
index fd8a4b97b197..090a4475f4a9 100755
--- a/drivers/net/wireless/rtl8723as/include/xmit_osdep.h
+++ b/drivers/net/wireless/rtl8723as/include/xmit_osdep.h
@@ -75,6 +75,7 @@ struct sta_xmit_priv;
struct xmit_frame;
struct xmit_buf;
+extern int _rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev);
extern int rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev);
#endif
diff --git a/drivers/net/wireless/rtl8723as/os_dep/linux/custom_gpio_linux.c b/drivers/net/wireless/rtl8723as/os_dep/linux/custom_gpio_linux.c
index 4604d006db93..eaf2e14e70c1 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/linux/custom_gpio_linux.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/linux/custom_gpio_linux.c
@@ -30,9 +30,30 @@
#if !(defined ANDROID_2X)
+#ifdef CONFIG_RTL8188E
+#include <mach/regulator.h>
+#include <linux/regulator/consumer.h>
+#endif // CONFIG_RTL8188E
+
+#ifndef GPIO_WIFI_POWER
+#define GPIO_WIFI_POWER -1
+#endif // !GPIO_WIFI_POWER
+
+#ifndef GPIO_WIFI_RESET
+#define GPIO_WIFI_RESET -1
+#endif // !GPIO_WIFI_RESET
+
+#ifndef GPIO_WIFI_PWDN
+#define GPIO_WIFI_PWDN -1
+#endif // !GPIO_WIFI_RESET
#ifdef CONFIG_GSPI_HCI
extern unsigned int oob_irq;
-#endif //CONFIG_GSPI_HCI
+#endif // CONFIG_GSPI_HCI
+
+#ifdef CONFIG_SDIO_HCI
+extern int rtw_mp_mode;
+#else // !CONFIG_SDIO_HCI
+#endif // !CONFIG_SDIO_HCI
int rtw_wifi_gpio_init(void)
{
@@ -70,15 +91,17 @@ void rtw_wifi_gpio_wlan_ctrl(int onoff)
{
switch (onoff) {
case WLAN_PWDN_OFF:
- DBG_8192C("%s: call customer specific GPIO to set wifi power down pin to 0\n",
- __FUNCTION__);
+ DBG_8192C("%s: call customer specific GPIO(%d) to set wifi power down pin to 0\n",
+ __FUNCTION__, GPIO_WIFI_RESET);
+
if (GPIO_WIFI_RESET > 0)
gpio_direction_output(GPIO_WIFI_RESET , 0);
break;
case WLAN_PWDN_ON:
- DBG_8192C("%s: callc customer specific GPIO to set wifi power down pin to 1\n",
- __FUNCTION__);
+ DBG_8192C("%s: callc customer specific GPIO(%d) to set wifi power down pin to 1\n",
+ __FUNCTION__, GPIO_WIFI_RESET);
+
if (GPIO_WIFI_RESET > 0)
gpio_direction_output(GPIO_WIFI_RESET , 1);
break;
diff --git a/drivers/net/wireless/rtl8723as/os_dep/linux/gspi_intf.c b/drivers/net/wireless/rtl8723as/os_dep/linux/gspi_intf.c
index af5d6a143f76..aa08f2b1e4eb 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/linux/gspi_intf.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/linux/gspi_intf.c
@@ -192,7 +192,7 @@ _func_enter_;
_rtw_mutex_init(&dvobj->h2c_fwcmd_mutex);
_rtw_mutex_init(&dvobj->setch_mutex);
_rtw_mutex_init(&dvobj->setbw_mutex);
-
+ dvobj->processing_dev_remove = _FALSE;
//spi init
/* This is the only SPI value that we need to set here, the rest
* comes from the board-peripherals file */
@@ -223,7 +223,7 @@ _func_enter_;
DBG_871X("%s: initialize GSPI Failed!\n", __FUNCTION__);
goto free_dvobj;
}
-
+ rtw_reset_continual_io_error(dvobj);
status = _SUCCESS;
free_dvobj:
@@ -331,7 +331,7 @@ static void gspi_intf_stop(PADAPTER padapter)
/*
* Do deinit job corresponding to netdev_open()
*/
-static void rtw_dev_unload(PADAPTER padapter)
+void rtw_dev_unload(PADAPTER padapter)
{
struct net_device *pnetdev = (struct net_device*)padapter->pnetdev;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
@@ -354,7 +354,7 @@ static void rtw_dev_unload(PADAPTER padapter)
#endif
RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("@ rtw_dev_unload: stop intf complete!\n"));
- if (!padapter->pwrctrlpriv.bInternalAutoSuspend)
+ if (!adapter_to_pwrctl(padapter)->bInternalAutoSuspend)
rtw_stop_drv_threads(padapter);
RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("@ rtw_dev_unload: stop thread complete!\n"));
@@ -362,7 +362,7 @@ static void rtw_dev_unload(PADAPTER padapter)
if (padapter->bSurpriseRemoved == _FALSE)
{
#ifdef CONFIG_WOWLAN
- if (padapter->pwrctrlpriv.bSupportRemoteWakeup == _TRUE) {
+ if (adapter_to_pwrctl(padapter)->bSupportRemoteWakeup == _TRUE) {
DBG_871X("%s bSupportRemoteWakeup==_TRUE do not run rtw_hal_deinit()\n",__FUNCTION__);
}
else
@@ -528,14 +528,14 @@ static void rtw_gspi_if1_deinit(PADAPTER if1)
hostapd_mode_unload(if1);
#endif
#endif
-
+/*
if(if1->DriverState != DRIVER_DISAPPEAR) {
if(pnetdev) {
unregister_netdev(pnetdev); //will call netdev_close()
rtw_proc_remove_one(pnetdev);
}
}
-
+*/
rtw_cancel_all_timer(if1);
rtw_dev_unload(if1);
@@ -546,7 +546,7 @@ static void rtw_gspi_if1_deinit(PADAPTER if1)
#ifdef CONFIG_IOCTL_CFG80211
if (if1->rtw_wdev)
{
- rtw_wdev_unregister(if1->rtw_wdev);
+ //rtw_wdev_unregister(if1->rtw_wdev);
rtw_wdev_free(if1->rtw_wdev);
}
#endif
@@ -641,7 +641,7 @@ free_dvobj:
exit:
return status == _SUCCESS?0:-ENODEV;
}
-
+extern void rtw_unregister_netdevs(struct dvobj_priv *dvobj);
static int /*__devexit*/ rtw_dev_remove(struct spi_device *spi)
{
struct dvobj_priv *dvobj = spi_get_drvdata(spi);
@@ -651,8 +651,11 @@ _func_enter_;
RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("+rtw_dev_remove\n"));
+ dvobj->processing_dev_remove = _TRUE;
+ rtw_unregister_netdevs(dvobj);
+
#if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
- rtw_unregister_early_suspend(&padapter->pwrctrlpriv);
+ rtw_unregister_early_suspend(dvobj_to_pwrctl(dvobj));
#endif
rtw_pm_set_ips(padapter, IPS_NONE);
@@ -683,7 +686,7 @@ static int rtw_gspi_suspend(struct spi_device *spi, pm_message_t mesg)
{
struct dvobj_priv *dvobj = spi_get_drvdata(spi);
PADAPTER padapter = dvobj->if1;
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(dvobj);
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct net_device *pnetdev = padapter->pnetdev;
int ret = 0;
@@ -717,7 +720,7 @@ static int rtw_gspi_suspend(struct spi_device *spi, pm_message_t mesg)
rtw_netif_stop_queue(pnetdev);
}
#ifdef CONFIG_WOWLAN
- padapter->pwrctrlpriv.bSupportRemoteWakeup=_TRUE;
+ pwrpriv->bSupportRemoteWakeup=_TRUE;
#else
//s2.
rtw_disassoc_cmd(padapter, 0, _FALSE);
@@ -798,7 +801,7 @@ int rtw_resume_process(_adapter *padapter)
if (padapter) {
pnetdev = padapter->pnetdev;
- pwrpriv = &padapter->pwrctrlpriv;
+ pwrpriv = adapter_to_pwrctl(padapter);
} else {
ret = -1;
goto exit;
@@ -858,7 +861,7 @@ static int rtw_gspi_resume(struct spi_device *spi)
{
struct dvobj_priv *dvobj = spi_get_drvdata(spi);
PADAPTER padapter = dvobj->if1;
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(dvobj);
int ret = 0;
@@ -923,8 +926,7 @@ static void __exit rtw_drv_halt(void)
{
RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("+rtw_drv_halt\n"));
DBG_8192C("RTW: rtw_drv_halt enter\n");
-
- rtw_suspend_lock_uninit();
+
drvpriv.drv_registered = _FALSE;
spi_unregister_driver(&rtw_spi_drv);
@@ -933,8 +935,11 @@ static void __exit rtw_drv_halt(void)
rtw_wifi_gpio_wlan_ctrl(WLAN_PWDN_OFF);
rtw_wifi_gpio_deinit();
+ rtw_suspend_lock_uninit();
DBG_8192C("RTW: rtw_drv_halt enter\n");
RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("-rtw_drv_halt\n"));
+
+ rtw_mstat_dump();
}
module_init(rtw_drv_entry);
module_exit(rtw_drv_halt);
diff --git a/drivers/net/wireless/rtl8723as/os_dep/linux/ioctl_cfg80211.c b/drivers/net/wireless/rtl8723as/os_dep/linux/ioctl_cfg80211.c
index cf079c0bc2b1..1e64c2de06a4 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/linux/ioctl_cfg80211.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/linux/ioctl_cfg80211.c
@@ -1,5466 +1,5651 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *
- ******************************************************************************/
-#define _IOCTL_CFG80211_C_
-
-#include <drv_conf.h>
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <rtw_ioctl.h>
-#include <rtw_ioctl_set.h>
-#include <rtw_ioctl_query.h>
-#include <xmit_osdep.h>
-
-#ifdef CONFIG_IOCTL_CFG80211
-
-#include "ioctl_cfg80211.h"
-
-#define RTW_MAX_MGMT_TX_CNT (8)
-
-#define RTW_SCAN_IE_LEN_MAX 2304
-#define RTW_MAX_REMAIN_ON_CHANNEL_DURATION 65535 //ms
-#define RTW_MAX_NUM_PMKIDS 4
-
-#define RTW_CH_MAX_2G_CHANNEL 14 /* Max channel in 2G band */
-
-static const u32 rtw_cipher_suites[] = {
- WLAN_CIPHER_SUITE_WEP40,
- WLAN_CIPHER_SUITE_WEP104,
- WLAN_CIPHER_SUITE_TKIP,
- WLAN_CIPHER_SUITE_CCMP,
-};
-
-#define RATETAB_ENT(_rate, _rateid, _flags) \
- { \
- .bitrate = (_rate), \
- .hw_value = (_rateid), \
- .flags = (_flags), \
- }
-
-#define CHAN2G(_channel, _freq, _flags) { \
- .band = IEEE80211_BAND_2GHZ, \
- .center_freq = (_freq), \
- .hw_value = (_channel), \
- .flags = (_flags), \
- .max_antenna_gain = 0, \
- .max_power = 30, \
-}
-
-#define CHAN5G(_channel, _flags) { \
- .band = IEEE80211_BAND_5GHZ, \
- .center_freq = 5000 + (5 * (_channel)), \
- .hw_value = (_channel), \
- .flags = (_flags), \
- .max_antenna_gain = 0, \
- .max_power = 30, \
-}
-
-static struct ieee80211_rate rtw_rates[] = {
- RATETAB_ENT(10, 0x1, 0),
- RATETAB_ENT(20, 0x2, 0),
- RATETAB_ENT(55, 0x4, 0),
- RATETAB_ENT(110, 0x8, 0),
- RATETAB_ENT(60, 0x10, 0),
- RATETAB_ENT(90, 0x20, 0),
- RATETAB_ENT(120, 0x40, 0),
- RATETAB_ENT(180, 0x80, 0),
- RATETAB_ENT(240, 0x100, 0),
- RATETAB_ENT(360, 0x200, 0),
- RATETAB_ENT(480, 0x400, 0),
- RATETAB_ENT(540, 0x800, 0),
-};
-
-#define rtw_a_rates (rtw_rates + 4)
-#define RTW_A_RATES_NUM 8
-#define rtw_g_rates (rtw_rates + 0)
-#define RTW_G_RATES_NUM 12
-
-#define RTW_2G_CHANNELS_NUM 14
-#define RTW_5G_CHANNELS_NUM 37
-
-static struct ieee80211_channel rtw_2ghz_channels[] = {
- CHAN2G(1, 2412, 0),
- CHAN2G(2, 2417, 0),
- CHAN2G(3, 2422, 0),
- CHAN2G(4, 2427, 0),
- CHAN2G(5, 2432, 0),
- CHAN2G(6, 2437, 0),
- CHAN2G(7, 2442, 0),
- CHAN2G(8, 2447, 0),
- CHAN2G(9, 2452, 0),
- CHAN2G(10, 2457, 0),
- CHAN2G(11, 2462, 0),
- CHAN2G(12, 2467, 0),
- CHAN2G(13, 2472, 0),
- CHAN2G(14, 2484, 0),
-};
-
-static struct ieee80211_channel rtw_5ghz_a_channels[] = {
- CHAN5G(34, 0), CHAN5G(36, 0),
- CHAN5G(38, 0), CHAN5G(40, 0),
- CHAN5G(42, 0), CHAN5G(44, 0),
- CHAN5G(46, 0), CHAN5G(48, 0),
- CHAN5G(52, 0), CHAN5G(56, 0),
- CHAN5G(60, 0), CHAN5G(64, 0),
- CHAN5G(100, 0), CHAN5G(104, 0),
- CHAN5G(108, 0), CHAN5G(112, 0),
- CHAN5G(116, 0), CHAN5G(120, 0),
- CHAN5G(124, 0), CHAN5G(128, 0),
- CHAN5G(132, 0), CHAN5G(136, 0),
- CHAN5G(140, 0), CHAN5G(149, 0),
- CHAN5G(153, 0), CHAN5G(157, 0),
- CHAN5G(161, 0), CHAN5G(165, 0),
- CHAN5G(184, 0), CHAN5G(188, 0),
- CHAN5G(192, 0), CHAN5G(196, 0),
- CHAN5G(200, 0), CHAN5G(204, 0),
- CHAN5G(208, 0), CHAN5G(212, 0),
- CHAN5G(216, 0),
-};
-
-
-void rtw_2g_channels_init(struct ieee80211_channel *channels)
-{
- _rtw_memcpy((void*)channels, (void*)rtw_2ghz_channels,
- sizeof(struct ieee80211_channel)*RTW_2G_CHANNELS_NUM
- );
-}
-
-void rtw_5g_channels_init(struct ieee80211_channel *channels)
-{
- _rtw_memcpy((void*)channels, (void*)rtw_5ghz_a_channels,
- sizeof(struct ieee80211_channel)*RTW_5G_CHANNELS_NUM
- );
-}
-
-void rtw_2g_rates_init(struct ieee80211_rate *rates)
-{
- _rtw_memcpy(rates, rtw_g_rates,
- sizeof(struct ieee80211_rate)*RTW_G_RATES_NUM
- );
-}
-
-void rtw_5g_rates_init(struct ieee80211_rate *rates)
-{
- _rtw_memcpy(rates, rtw_a_rates,
- sizeof(struct ieee80211_rate)*RTW_A_RATES_NUM
- );
-}
-
-struct ieee80211_supported_band *rtw_spt_band_alloc(
- enum ieee80211_band band
- )
-{
- struct ieee80211_supported_band *spt_band = NULL;
- int n_channels, n_bitrates;
-
- if(band == IEEE80211_BAND_2GHZ)
- {
- n_channels = RTW_2G_CHANNELS_NUM;
- n_bitrates = RTW_G_RATES_NUM;
- }
- else if(band == IEEE80211_BAND_5GHZ)
- {
- n_channels = RTW_5G_CHANNELS_NUM;
- n_bitrates = RTW_A_RATES_NUM;
- }
- else
- {
- goto exit;
- }
-
- spt_band = (struct ieee80211_supported_band *)rtw_zmalloc(
- sizeof(struct ieee80211_supported_band)
- + sizeof(struct ieee80211_channel)*n_channels
- + sizeof(struct ieee80211_rate)*n_bitrates
- );
- if(!spt_band)
- goto exit;
-
- spt_band->channels = (struct ieee80211_channel*)(((u8*)spt_band)+sizeof(struct ieee80211_supported_band));
- spt_band->bitrates= (struct ieee80211_rate*)(((u8*)spt_band->channels)+sizeof(struct ieee80211_channel)*n_channels);
- spt_band->band = band;
- spt_band->n_channels = n_channels;
- spt_band->n_bitrates = n_bitrates;
-
- if(band == IEEE80211_BAND_2GHZ)
- {
- rtw_2g_channels_init(spt_band->channels);
- rtw_2g_rates_init(spt_band->bitrates);
- }
- else if(band == IEEE80211_BAND_5GHZ)
- {
- rtw_5g_channels_init(spt_band->channels);
- rtw_5g_rates_init(spt_band->bitrates);
- }
-
- //spt_band.ht_cap
-
-exit:
-
- return spt_band;
-}
-
-void rtw_spt_band_free(struct ieee80211_supported_band *spt_band)
-{
- u32 size;
-
- if(!spt_band)
- return;
-
- if(spt_band->band == IEEE80211_BAND_2GHZ)
- {
- size = sizeof(struct ieee80211_supported_band)
- + sizeof(struct ieee80211_channel)*RTW_2G_CHANNELS_NUM
- + sizeof(struct ieee80211_rate)*RTW_G_RATES_NUM;
- }
- else if(spt_band->band == IEEE80211_BAND_5GHZ)
- {
- size = sizeof(struct ieee80211_supported_band)
- + sizeof(struct ieee80211_channel)*RTW_5G_CHANNELS_NUM
- + sizeof(struct ieee80211_rate)*RTW_A_RATES_NUM;
- }
- else
- {
-
- }
- rtw_mfree((u8*)spt_band, size);
-}
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
-static const struct ieee80211_txrx_stypes
-rtw_cfg80211_default_mgmt_stypes[NUM_NL80211_IFTYPES] = {
- [NL80211_IFTYPE_ADHOC] = {
- .tx = 0xffff,
- .rx = BIT(IEEE80211_STYPE_ACTION >> 4)
- },
- [NL80211_IFTYPE_STATION] = {
- .tx = 0xffff,
- .rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
- BIT(IEEE80211_STYPE_PROBE_REQ >> 4)
- },
- [NL80211_IFTYPE_AP] = {
- .tx = 0xffff,
- .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
- BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
- BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
- BIT(IEEE80211_STYPE_DISASSOC >> 4) |
- BIT(IEEE80211_STYPE_AUTH >> 4) |
- BIT(IEEE80211_STYPE_DEAUTH >> 4) |
- BIT(IEEE80211_STYPE_ACTION >> 4)
- },
- [NL80211_IFTYPE_AP_VLAN] = {
- /* copy AP */
- .tx = 0xffff,
- .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
- BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
- BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
- BIT(IEEE80211_STYPE_DISASSOC >> 4) |
- BIT(IEEE80211_STYPE_AUTH >> 4) |
- BIT(IEEE80211_STYPE_DEAUTH >> 4) |
- BIT(IEEE80211_STYPE_ACTION >> 4)
- },
- [NL80211_IFTYPE_P2P_CLIENT] = {
- .tx = 0xffff,
- .rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
- BIT(IEEE80211_STYPE_PROBE_REQ >> 4)
- },
- [NL80211_IFTYPE_P2P_GO] = {
- .tx = 0xffff,
- .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
- BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
- BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
- BIT(IEEE80211_STYPE_DISASSOC >> 4) |
- BIT(IEEE80211_STYPE_AUTH >> 4) |
- BIT(IEEE80211_STYPE_DEAUTH >> 4) |
- BIT(IEEE80211_STYPE_ACTION >> 4)
- },
-};
-#endif
-
-static int rtw_ieee80211_channel_to_frequency(int chan, int band)
-{
- /* see 802.11 17.3.8.3.2 and Annex J
- * there are overlapping channel numbers in 5GHz and 2GHz bands */
-
- if (band == IEEE80211_BAND_5GHZ) {
- if (chan >= 182 && chan <= 196)
- return 4000 + chan * 5;
- else
- return 5000 + chan * 5;
- } else { /* IEEE80211_BAND_2GHZ */
- if (chan == 14)
- return 2484;
- else if (chan < 14)
- return 2407 + chan * 5;
- else
- return 0; /* not supported */
- }
-}
-
-#define MAX_BSSINFO_LEN 1000
-static int rtw_cfg80211_inform_bss(_adapter *padapter, struct wlan_network *pnetwork)
-{
- int ret=0;
- struct ieee80211_channel *notify_channel;
- struct cfg80211_bss *bss;
- //struct ieee80211_supported_band *band;
- u16 channel;
- u32 freq;
- u64 notify_timestamp;
- u16 notify_capability;
- u16 notify_interval;
- u8 *notify_ie;
- size_t notify_ielen;
- s32 notify_signal;
- u8 buf[MAX_BSSINFO_LEN], *pbuf;
- size_t len,bssinf_len=0;
- struct rtw_ieee80211_hdr *pwlanhdr;
- unsigned short *fctrl;
- u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
- struct wireless_dev *wdev = padapter->rtw_wdev;
- struct wiphy *wiphy = wdev->wiphy;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-
-
- //DBG_8192C("%s\n", __func__);
-
- bssinf_len = pnetwork->network.IELength+sizeof (struct rtw_ieee80211_hdr_3addr);
- if(bssinf_len > MAX_BSSINFO_LEN){
- DBG_871X("%s IE Length too long > %d byte \n",__FUNCTION__,MAX_BSSINFO_LEN);
- goto exit;
- }
-
- channel = pnetwork->network.Configuration.DSConfig;
- if (channel <= RTW_CH_MAX_2G_CHANNEL)
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
- else
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
-
- notify_channel = ieee80211_get_channel(wiphy, freq);
-
- //rtw_get_timestampe_from_ie()
- notify_timestamp = jiffies_to_msecs(jiffies)*1000; /* uSec */
-
- notify_interval = le16_to_cpu(*(u16*)rtw_get_beacon_interval_from_ie(pnetwork->network.IEs));
- notify_capability = le16_to_cpu(*(u16*)rtw_get_capability_from_ie(pnetwork->network.IEs));
-
-
- notify_ie = pnetwork->network.IEs+_FIXED_IE_LENGTH_;
- notify_ielen = pnetwork->network.IELength-_FIXED_IE_LENGTH_;
-
- //We've set wiphy's signal_type as CFG80211_SIGNAL_TYPE_MBM: signal strength in mBm (100*dBm)
- if ( check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE &&
- is_same_network(&pmlmepriv->cur_network.network, &pnetwork->network)) {
- notify_signal = 100*translate_percentage_to_dbm(padapter->recvpriv.signal_strength);//dbm
- } else {
- notify_signal = 100*translate_percentage_to_dbm(pnetwork->network.PhyInfo.SignalStrength);//dbm
- }
-
-/*
- DBG_8192C("bssid: %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n",
- pnetwork->network.MacAddress[0], pnetwork->network.MacAddress[1], pnetwork->network.MacAddress[2],
- pnetwork->network.MacAddress[3], pnetwork->network.MacAddress[4], pnetwork->network.MacAddress[5]);
- DBG_8192C("Channel: %d(%d)\n", channel, freq);
- DBG_8192C("Capability: %X\n", notify_capability);
- DBG_8192C("Beacon interval: %d\n", notify_interval);
- DBG_8192C("Signal: %d\n", notify_signal);
- DBG_8192C("notify_timestamp: %#018llx\n", notify_timestamp);
-*/
-
- pbuf = buf;
-
- pwlanhdr = (struct rtw_ieee80211_hdr *)pbuf;
- fctrl = &(pwlanhdr->frame_ctl);
- *(fctrl) = 0;
-
- SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
- //pmlmeext->mgnt_seq++;
-
- if (pnetwork->network.Reserved[0] == 1) { // WIFI_BEACON
- _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
- SetFrameSubType(pbuf, WIFI_BEACON);
- } else {
- _rtw_memcpy(pwlanhdr->addr1, myid(&(padapter->eeprompriv)), ETH_ALEN);
- SetFrameSubType(pbuf, WIFI_PROBERSP);
- }
-
- _rtw_memcpy(pwlanhdr->addr2, pnetwork->network.MacAddress, ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr3, pnetwork->network.MacAddress, ETH_ALEN);
-
-
- pbuf += sizeof(struct rtw_ieee80211_hdr_3addr);
- len = sizeof (struct rtw_ieee80211_hdr_3addr);
-
- _rtw_memcpy(pbuf, pnetwork->network.IEs, pnetwork->network.IELength);
- len += pnetwork->network.IELength;
-
- //#ifdef CONFIG_P2P
- //if(rtw_get_p2p_ie(pnetwork->network.IEs+12, pnetwork->network.IELength-12, NULL, NULL))
- //{
- // DBG_8192C("%s, got p2p_ie\n", __func__);
- //}
- //#endif
-
-
-#if 1
- bss = cfg80211_inform_bss_frame(wiphy, notify_channel, (struct ieee80211_mgmt *)buf,
- len, notify_signal, GFP_ATOMIC);
-#else
-
- bss = cfg80211_inform_bss(wiphy, notify_channel, (const u8 *)pnetwork->network.MacAddress,
- notify_timestamp, notify_capability, notify_interval, notify_ie,
- notify_ielen, notify_signal, GFP_ATOMIC/*GFP_KERNEL*/);
-#endif
-
- if (unlikely(!bss)) {
- DBG_8192C("rtw_cfg80211_inform_bss error\n");
- return -EINVAL;
- }
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
-#ifndef COMPAT_KERNEL_RELEASE
- //patch for cfg80211, update beacon ies to information_elements
- if (pnetwork->network.Reserved[0] == 1) { // WIFI_BEACON
-
- if(bss->len_information_elements != bss->len_beacon_ies)
- {
- bss->information_elements = bss->beacon_ies;
- bss->len_information_elements = bss->len_beacon_ies;
- }
- }
-#endif //COMPAT_KERNEL_RELEASE
-#endif //LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
-
-/*
- {
- if( bss->information_elements == bss->proberesp_ies)
- {
- if( bss->len_information_elements != bss->len_proberesp_ies)
- {
- DBG_8192C("error!, len_information_elements != bss->len_proberesp_ies\n");
- }
-
- }
- else if(bss->len_information_elements < bss->len_beacon_ies)
- {
- bss->information_elements = bss->beacon_ies;
- bss->len_information_elements = bss->len_beacon_ies;
- }
- }
-*/
-
- cfg80211_put_bss(bss);
-
-exit:
- return ret;
-
-}
-
-void rtw_cfg80211_indicate_connect(_adapter *padapter)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct wlan_network *cur_network = &(pmlmepriv->cur_network);
- struct wireless_dev *pwdev = padapter->rtw_wdev;
-#ifdef CONFIG_P2P
- struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
-#endif
-
-
- DBG_8192C("%s(padapter=%p)\n", __func__, padapter);
-
- if (pwdev->iftype != NL80211_IFTYPE_STATION
- #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- && pwdev->iftype != NL80211_IFTYPE_P2P_CLIENT
- #endif
- ) {
- return;
- }
-
- if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
- return;
-
-#ifdef CONFIG_P2P
- if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
- {
- rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
- rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
- rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
- DBG_8192C("%s, role=%d, p2p_state=%d, pre_p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), rtw_p2p_pre_state(pwdinfo));
- }
-#endif //CONFIG_P2P
-
- #ifdef CONFIG_LAYER2_ROAMING
- if (rtw_to_roaming(padapter) > 0) {
- #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39) || defined(COMPAT_KERNEL_RELEASE)
- struct wiphy *wiphy = pwdev->wiphy;
- struct ieee80211_channel *notify_channel;
- u32 freq;
- u16 channel = cur_network->network.Configuration.DSConfig;
-
- if (channel <= RTW_CH_MAX_2G_CHANNEL)
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
- else
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
-
- notify_channel = ieee80211_get_channel(wiphy, freq);
- #endif
-
- DBG_871X("%s call cfg80211_roamed\n", __FUNCTION__);
- cfg80211_roamed(padapter->pnetdev
- #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39) || defined(COMPAT_KERNEL_RELEASE)
- , notify_channel
- #endif
- , cur_network->network.MacAddress
- , pmlmepriv->assoc_req+sizeof(struct rtw_ieee80211_hdr_3addr)+2
- , pmlmepriv->assoc_req_len-sizeof(struct rtw_ieee80211_hdr_3addr)-2
- , pmlmepriv->assoc_rsp+sizeof(struct rtw_ieee80211_hdr_3addr)+6
- , pmlmepriv->assoc_rsp_len-sizeof(struct rtw_ieee80211_hdr_3addr)-6
- , GFP_ATOMIC);
- }
- else
- #endif
- {
- DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state);
- cfg80211_connect_result(padapter->pnetdev, cur_network->network.MacAddress
- , pmlmepriv->assoc_req+sizeof(struct rtw_ieee80211_hdr_3addr)+2
- , pmlmepriv->assoc_req_len-sizeof(struct rtw_ieee80211_hdr_3addr)-2
- , pmlmepriv->assoc_rsp+sizeof(struct rtw_ieee80211_hdr_3addr)+6
- , pmlmepriv->assoc_rsp_len-sizeof(struct rtw_ieee80211_hdr_3addr)-6
- , WLAN_STATUS_SUCCESS, GFP_ATOMIC);
- DBG_8192C("pwdev->sme_state(a)=%d\n", pwdev->sme_state);
- }
-}
-
-void rtw_cfg80211_indicate_disconnect(_adapter *padapter)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct wireless_dev *pwdev = padapter->rtw_wdev;
-#ifdef CONFIG_P2P
- struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
-#endif
-
- DBG_8192C("%s(padapter=%p)\n", __func__, padapter);
-
- if (pwdev->iftype != NL80211_IFTYPE_STATION
- #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- && pwdev->iftype != NL80211_IFTYPE_P2P_CLIENT
- #endif
- ) {
- return;
- }
-
- if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
- return;
-
-#ifdef CONFIG_P2P
- if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
- {
- _cancel_timer_ex( &pwdinfo->find_phase_timer );
- _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
- _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
-
- rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
- rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
-
- DBG_8192C("%s, role=%d, p2p_state=%d, pre_p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), rtw_p2p_pre_state(pwdinfo));
- }
-#endif //CONFIG_P2P
-
- if (!padapter->mlmepriv.not_indic_disco) {
- DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state);
-
- if(pwdev->sme_state==CFG80211_SME_CONNECTING)
- cfg80211_connect_result(padapter->pnetdev, NULL, NULL, 0, NULL, 0,
- WLAN_STATUS_UNSPECIFIED_FAILURE, GFP_ATOMIC/*GFP_KERNEL*/);
- else if(pwdev->sme_state==CFG80211_SME_CONNECTED)
- cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0, GFP_ATOMIC);
- //else
- //DBG_8192C("pwdev->sme_state=%d\n", pwdev->sme_state);
-
- DBG_8192C("pwdev->sme_state(a)=%d\n", pwdev->sme_state);
- }
-}
-
-
-#ifdef CONFIG_AP_MODE
-static u8 set_pairwise_key(_adapter *padapter, struct sta_info *psta)
-{
- struct cmd_obj* ph2c;
- struct set_stakey_parm *psetstakey_para;
- struct cmd_priv *pcmdpriv=&padapter->cmdpriv;
- u8 res=_SUCCESS;
-
- ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
- if ( ph2c == NULL){
- res= _FAIL;
- goto exit;
- }
-
- psetstakey_para = (struct set_stakey_parm*)rtw_zmalloc(sizeof(struct set_stakey_parm));
- if(psetstakey_para==NULL){
- rtw_mfree((u8 *) ph2c, sizeof(struct cmd_obj));
- res=_FAIL;
- goto exit;
- }
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, _SetStaKey_CMD_);
-
-
- psetstakey_para->algorithm = (u8)psta->dot118021XPrivacy;
-
- _rtw_memcpy(psetstakey_para->addr, psta->hwaddr, ETH_ALEN);
-
- _rtw_memcpy(psetstakey_para->key, &psta->dot118021x_UncstKey, 16);
-
-
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-exit:
-
- return res;
-
-}
-
-static int set_group_key(_adapter *padapter, u8 *key, u8 alg, int keyid)
-{
- u8 keylen;
- struct cmd_obj* pcmd;
- struct setkey_parm *psetkeyparm;
- struct cmd_priv *pcmdpriv=&(padapter->cmdpriv);
- int res=_SUCCESS;
-
- DBG_8192C("%s\n", __FUNCTION__);
-
- pcmd = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
- if(pcmd==NULL){
- res= _FAIL;
- goto exit;
- }
- psetkeyparm=(struct setkey_parm*)rtw_zmalloc(sizeof(struct setkey_parm));
- if(psetkeyparm==NULL){
- rtw_mfree((unsigned char *)pcmd, sizeof(struct cmd_obj));
- res= _FAIL;
- goto exit;
- }
-
- _rtw_memset(psetkeyparm, 0, sizeof(struct setkey_parm));
-
- psetkeyparm->keyid=(u8)keyid;
- if (is_wep_enc(alg))
- padapter->mlmepriv.key_mask |= BIT(psetkeyparm->keyid);
-
- psetkeyparm->algorithm = alg;
-
- psetkeyparm->set_tx = 1;
-
- switch(alg)
- {
- case _WEP40_:
- keylen = 5;
- break;
- case _WEP104_:
- keylen = 13;
- break;
- case _TKIP_:
- case _TKIP_WTMIC_:
- case _AES_:
- keylen = 16;
- default:
- keylen = 16;
- }
-
- _rtw_memcpy(&(psetkeyparm->key[0]), key, keylen);
-
- pcmd->cmdcode = _SetKey_CMD_;
- pcmd->parmbuf = (u8 *)psetkeyparm;
- pcmd->cmdsz = (sizeof(struct setkey_parm));
- pcmd->rsp = NULL;
- pcmd->rspsz = 0;
-
-
- _rtw_init_listhead(&pcmd->list);
-
- res = rtw_enqueue_cmd(pcmdpriv, pcmd);
-
-exit:
-
- return res;
-
-
-}
-
-static int set_wep_key(_adapter *padapter, u8 *key, u8 keylen, int keyid)
-{
- u8 alg;
-
- switch(keylen)
- {
- case 5:
- alg =_WEP40_;
- break;
- case 13:
- alg =_WEP104_;
- break;
- default:
- alg =_NO_PRIVACY_;
- }
-
- return set_group_key(padapter, key, alg, keyid);
-
-}
-
-static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, struct ieee_param *param, u32 param_len)
-{
- int ret = 0;
- u32 wep_key_idx, wep_key_len,wep_total_len;
- struct sta_info *psta = NULL, *pbcmc_sta = NULL;
- _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct security_priv* psecuritypriv=&(padapter->securitypriv);
- struct sta_priv *pstapriv = &padapter->stapriv;
-
- DBG_8192C("%s\n", __FUNCTION__);
-
- param->u.crypt.err = 0;
- param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0';
-
- //sizeof(struct ieee_param) = 64 bytes;
- //if (param_len != (u32) ((u8 *) param->u.crypt.key - (u8 *) param) + param->u.crypt.key_len)
- if (param_len != sizeof(struct ieee_param) + param->u.crypt.key_len)
- {
- ret = -EINVAL;
- goto exit;
- }
-
- if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
- param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
- param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
- {
- if (param->u.crypt.idx >= WEP_KEYS)
- {
- ret = -EINVAL;
- goto exit;
- }
- }
- else
- {
- psta = rtw_get_stainfo(pstapriv, param->sta_addr);
- if(!psta)
- {
- //ret = -EINVAL;
- DBG_8192C("rtw_set_encryption(), sta has already been removed or never been added\n");
- goto exit;
- }
- }
-
- if (strcmp(param->u.crypt.alg, "none") == 0 && (psta==NULL))
- {
- //todo:clear default encryption keys
-
- DBG_8192C("clear default encryption keys, keyid=%d\n", param->u.crypt.idx);
-
- goto exit;
- }
-
-
- if (strcmp(param->u.crypt.alg, "WEP") == 0 && (psta==NULL))
- {
- DBG_8192C("r871x_set_encryption, crypt.alg = WEP\n");
-
- wep_key_idx = param->u.crypt.idx;
- wep_key_len = param->u.crypt.key_len;
-
- DBG_8192C("r871x_set_encryption, wep_key_idx=%d, len=%d\n", wep_key_idx, wep_key_len);
-
- if((wep_key_idx >= WEP_KEYS) || (wep_key_len<=0))
- {
- ret = -EINVAL;
- goto exit;
- }
-
- if (wep_key_len > 0)
- {
- wep_key_len = wep_key_len <= 5 ? 5 : 13;
- }
-
- if (psecuritypriv->bWepDefaultKeyIdxSet == 0)
- {
- //wep default key has not been set, so use this key index as default key.
-
- psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
- psecuritypriv->dot11PrivacyAlgrthm=_WEP40_;
- psecuritypriv->dot118021XGrpPrivacy=_WEP40_;
-
- if(wep_key_len == 13)
- {
- psecuritypriv->dot11PrivacyAlgrthm=_WEP104_;
- psecuritypriv->dot118021XGrpPrivacy=_WEP104_;
- }
-
- psecuritypriv->dot11PrivacyKeyIndex = wep_key_idx;
- }
-
- _rtw_memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), param->u.crypt.key, wep_key_len);
-
- psecuritypriv->dot11DefKeylen[wep_key_idx] = wep_key_len;
-
- set_wep_key(padapter, param->u.crypt.key, wep_key_len, wep_key_idx);
-
- goto exit;
-
- }
-
-
- if(!psta && check_fwstate(pmlmepriv, WIFI_AP_STATE)) // //group key
- {
- if(param->u.crypt.set_tx == 0) //group key
- {
- if(strcmp(param->u.crypt.alg, "WEP") == 0)
- {
- DBG_8192C("%s, set group_key, WEP\n", __FUNCTION__);
-
- _rtw_memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
-
- psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
- if(param->u.crypt.key_len==13)
- {
- psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
- }
-
- }
- else if(strcmp(param->u.crypt.alg, "TKIP") == 0)
- {
- DBG_8192C("%s, set group_key, TKIP\n", __FUNCTION__);
-
- psecuritypriv->dot118021XGrpPrivacy = _TKIP_;
-
- _rtw_memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
-
- //DEBUG_ERR("set key length :param->u.crypt.key_len=%d\n", param->u.crypt.key_len);
- //set mic key
- _rtw_memcpy(psecuritypriv->dot118021XGrptxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[16]), 8);
- _rtw_memcpy(psecuritypriv->dot118021XGrprxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[24]), 8);
-
- psecuritypriv->busetkipkey = _TRUE;
-
- }
- else if(strcmp(param->u.crypt.alg, "CCMP") == 0)
- {
- DBG_8192C("%s, set group_key, CCMP\n", __FUNCTION__);
-
- psecuritypriv->dot118021XGrpPrivacy = _AES_;
-
- _rtw_memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
- }
- else
- {
- DBG_8192C("%s, set group_key, none\n", __FUNCTION__);
-
- psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
- }
-
- psecuritypriv->dot118021XGrpKeyid = param->u.crypt.idx;
-
- psecuritypriv->binstallGrpkey = _TRUE;
-
- psecuritypriv->dot11PrivacyAlgrthm = psecuritypriv->dot118021XGrpPrivacy;//!!!
-
- set_group_key(padapter, param->u.crypt.key, psecuritypriv->dot118021XGrpPrivacy, param->u.crypt.idx);
-
- pbcmc_sta=rtw_get_bcmc_stainfo(padapter);
- if(pbcmc_sta)
- {
- pbcmc_sta->ieee8021x_blocked = _FALSE;
- pbcmc_sta->dot118021XPrivacy= psecuritypriv->dot118021XGrpPrivacy;//rx will use bmc_sta's dot118021XPrivacy
- }
-
- }
-
- goto exit;
-
- }
-
- if(psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X && psta) // psk/802_1x
- {
- if(check_fwstate(pmlmepriv, WIFI_AP_STATE))
- {
- if(param->u.crypt.set_tx ==1) //pairwise key
- {
- _rtw_memcpy(psta->dot118021x_UncstKey.skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
-
- if(strcmp(param->u.crypt.alg, "WEP") == 0)
- {
- DBG_8192C("%s, set pairwise key, WEP\n", __FUNCTION__);
-
- psta->dot118021XPrivacy = _WEP40_;
- if(param->u.crypt.key_len==13)
- {
- psta->dot118021XPrivacy = _WEP104_;
- }
- }
- else if(strcmp(param->u.crypt.alg, "TKIP") == 0)
- {
- DBG_8192C("%s, set pairwise key, TKIP\n", __FUNCTION__);
-
- psta->dot118021XPrivacy = _TKIP_;
-
- //DEBUG_ERR("set key length :param->u.crypt.key_len=%d\n", param->u.crypt.key_len);
- //set mic key
- _rtw_memcpy(psta->dot11tkiptxmickey.skey, &(param->u.crypt.key[16]), 8);
- _rtw_memcpy(psta->dot11tkiprxmickey.skey, &(param->u.crypt.key[24]), 8);
-
- psecuritypriv->busetkipkey = _TRUE;
-
- }
- else if(strcmp(param->u.crypt.alg, "CCMP") == 0)
- {
-
- DBG_8192C("%s, set pairwise key, CCMP\n", __FUNCTION__);
-
- psta->dot118021XPrivacy = _AES_;
- }
- else
- {
- DBG_8192C("%s, set pairwise key, none\n", __FUNCTION__);
-
- psta->dot118021XPrivacy = _NO_PRIVACY_;
- }
-
- set_pairwise_key(padapter, psta);
-
- psta->ieee8021x_blocked = _FALSE;
-
- psta->bpairwise_key_installed = _TRUE;
-
- }
- else//group key???
- {
- if(strcmp(param->u.crypt.alg, "WEP") == 0)
- {
- _rtw_memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
-
- psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
- if(param->u.crypt.key_len==13)
- {
- psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
- }
- }
- else if(strcmp(param->u.crypt.alg, "TKIP") == 0)
- {
- psecuritypriv->dot118021XGrpPrivacy = _TKIP_;
-
- _rtw_memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
-
- //DEBUG_ERR("set key length :param->u.crypt.key_len=%d\n", param->u.crypt.key_len);
- //set mic key
- _rtw_memcpy(psecuritypriv->dot118021XGrptxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[16]), 8);
- _rtw_memcpy(psecuritypriv->dot118021XGrprxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[24]), 8);
-
- psecuritypriv->busetkipkey = _TRUE;
-
- }
- else if(strcmp(param->u.crypt.alg, "CCMP") == 0)
- {
- psecuritypriv->dot118021XGrpPrivacy = _AES_;
-
- _rtw_memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
- }
- else
- {
- psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
- }
-
- psecuritypriv->dot118021XGrpKeyid = param->u.crypt.idx;
-
- psecuritypriv->binstallGrpkey = _TRUE;
-
- psecuritypriv->dot11PrivacyAlgrthm = psecuritypriv->dot118021XGrpPrivacy;//!!!
-
- set_group_key(padapter, param->u.crypt.key, psecuritypriv->dot118021XGrpPrivacy, param->u.crypt.idx);
-
- pbcmc_sta=rtw_get_bcmc_stainfo(padapter);
- if(pbcmc_sta)
- {
- pbcmc_sta->ieee8021x_blocked = _FALSE;
- pbcmc_sta->dot118021XPrivacy= psecuritypriv->dot118021XGrpPrivacy;//rx will use bmc_sta's dot118021XPrivacy
- }
-
- }
-
- }
-
- }
-
-exit:
-
- return ret;
-
-}
-#endif
-
-static int rtw_cfg80211_set_encryption(struct net_device *dev, struct ieee_param *param, u32 param_len)
-{
- int ret = 0;
- u32 wep_key_idx, wep_key_len,wep_total_len;
- _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
-#ifdef CONFIG_P2P
- struct wifidirect_info* pwdinfo = &padapter->wdinfo;
-#endif //CONFIG_P2P
-
-_func_enter_;
-
- DBG_8192C("%s\n", __func__);
-
- param->u.crypt.err = 0;
- param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0';
-
- if (param_len < (u32) ((u8 *) param->u.crypt.key - (u8 *) param) + param->u.crypt.key_len)
- {
- ret = -EINVAL;
- goto exit;
- }
-
- if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
- param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
- param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
- {
- if (param->u.crypt.idx >= WEP_KEYS)
- {
- ret = -EINVAL;
- goto exit;
- }
- } else {
-#ifdef CONFIG_WAPI_SUPPORT
- if (strcmp(param->u.crypt.alg, "SMS4"))
-#endif
- {
- ret = -EINVAL;
- goto exit;
- }
- }
-
- if (strcmp(param->u.crypt.alg, "WEP") == 0)
- {
- RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,("wpa_set_encryption, crypt.alg = WEP\n"));
- DBG_8192C("wpa_set_encryption, crypt.alg = WEP\n");
-
- wep_key_idx = param->u.crypt.idx;
- wep_key_len = param->u.crypt.key_len;
-
- if ((wep_key_idx > WEP_KEYS) || (wep_key_len <= 0))
- {
- ret = -EINVAL;
- goto exit;
- }
-
- if (psecuritypriv->bWepDefaultKeyIdxSet == 0)
- {
- //wep default key has not been set, so use this key index as default key.
-
- wep_key_len = wep_key_len <= 5 ? 5 : 13;
-
- psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
- psecuritypriv->dot11PrivacyAlgrthm = _WEP40_;
- psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
-
- if(wep_key_len==13)
- {
- psecuritypriv->dot11PrivacyAlgrthm = _WEP104_;
- psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
- }
-
- psecuritypriv->dot11PrivacyKeyIndex = wep_key_idx;
- }
-
- _rtw_memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), param->u.crypt.key, wep_key_len);
-
- psecuritypriv->dot11DefKeylen[wep_key_idx] = wep_key_len;
-
- rtw_set_key(padapter, psecuritypriv, wep_key_idx, 0);
-
- goto exit;
- }
-
- if(padapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X) // 802_1x
- {
- struct sta_info * psta,*pbcmc_sta;
- struct sta_priv * pstapriv = &padapter->stapriv;
-
- //DBG_8192C("%s, : dot11AuthAlgrthm == dot11AuthAlgrthm_8021X \n", __func__);
-
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_MP_STATE) == _TRUE) //sta mode
- {
- psta = rtw_get_stainfo(pstapriv, get_bssid(pmlmepriv));
- if (psta == NULL) {
- //DEBUG_ERR( ("Set wpa_set_encryption: Obtain Sta_info fail \n"));
- DBG_8192C("%s, : Obtain Sta_info fail \n", __func__);
- }
- else
- {
- //Jeff: don't disable ieee8021x_blocked while clearing key
- if (strcmp(param->u.crypt.alg, "none") != 0)
- psta->ieee8021x_blocked = _FALSE;
-
-
- if((padapter->securitypriv.ndisencryptstatus == Ndis802_11Encryption2Enabled)||
- (padapter->securitypriv.ndisencryptstatus == Ndis802_11Encryption3Enabled))
- {
- psta->dot118021XPrivacy = padapter->securitypriv.dot11PrivacyAlgrthm;
- }
-
- if(param->u.crypt.set_tx ==1)//pairwise key
- {
-
- DBG_8192C("%s, : param->u.crypt.set_tx ==1 \n", __func__);
-
- _rtw_memcpy(psta->dot118021x_UncstKey.skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
-
- if(strcmp(param->u.crypt.alg, "TKIP") == 0)//set mic key
- {
- //DEBUG_ERR(("\nset key length :param->u.crypt.key_len=%d\n", param->u.crypt.key_len));
- _rtw_memcpy(psta->dot11tkiptxmickey.skey, &(param->u.crypt.key[16]), 8);
- _rtw_memcpy(psta->dot11tkiprxmickey.skey, &(param->u.crypt.key[24]), 8);
-
- padapter->securitypriv.busetkipkey=_FALSE;
- //_set_timer(&padapter->securitypriv.tkip_timer, 50);
- }
-
- //DEBUG_ERR((" param->u.crypt.key_len=%d\n",param->u.crypt.key_len));
- DBG_871X(" ~~~~set sta key:unicastkey\n");
-
- rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE);
- }
- else//group key
- {
- _rtw_memcpy(padapter->securitypriv.dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key,(param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
- _rtw_memcpy(padapter->securitypriv.dot118021XGrptxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[16]),8);
- _rtw_memcpy(padapter->securitypriv.dot118021XGrprxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[24]),8);
- padapter->securitypriv.binstallGrpkey = _TRUE;
- //DEBUG_ERR((" param->u.crypt.key_len=%d\n", param->u.crypt.key_len));
- DBG_871X(" ~~~~set sta key:groupkey\n");
-
- padapter->securitypriv.dot118021XGrpKeyid = param->u.crypt.idx;
-
- rtw_set_key(padapter,&padapter->securitypriv,param->u.crypt.idx, 1);
-#ifdef CONFIG_P2P
- if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
- {
- rtw_p2p_set_state(pwdinfo, P2P_STATE_PROVISIONING_DONE);
- }
-#endif //CONFIG_P2P
-
- }
- }
-
- pbcmc_sta=rtw_get_bcmc_stainfo(padapter);
- if(pbcmc_sta==NULL)
- {
- //DEBUG_ERR( ("Set OID_802_11_ADD_KEY: bcmc stainfo is null \n"));
- }
- else
- {
- //Jeff: don't disable ieee8021x_blocked while clearing key
- if (strcmp(param->u.crypt.alg, "none") != 0)
- pbcmc_sta->ieee8021x_blocked = _FALSE;
-
- if((padapter->securitypriv.ndisencryptstatus == Ndis802_11Encryption2Enabled)||
- (padapter->securitypriv.ndisencryptstatus == Ndis802_11Encryption3Enabled))
- {
- pbcmc_sta->dot118021XPrivacy = padapter->securitypriv.dot11PrivacyAlgrthm;
- }
- }
- }
- else if(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) //adhoc mode
- {
- }
- }
-
-#ifdef CONFIG_WAPI_SUPPORT
- if (strcmp(param->u.crypt.alg, "SMS4") == 0)
- {
- PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
- PRT_WAPI_STA_INFO pWapiSta;
- u8 WapiASUEPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
- u8 WapiAEPNInitialValueSrc[16] = {0x37,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
- u8 WapiAEMultiCastPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
-
- if(param->u.crypt.set_tx == 1)
- {
- list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
- if(_rtw_memcmp(pWapiSta->PeerMacAddr,param->sta_addr,6))
- {
- _rtw_memcpy(pWapiSta->lastTxUnicastPN,WapiASUEPNInitialValueSrc,16);
-
- pWapiSta->wapiUsk.bSet = true;
- _rtw_memcpy(pWapiSta->wapiUsk.dataKey,param->u.crypt.key,16);
- _rtw_memcpy(pWapiSta->wapiUsk.micKey,param->u.crypt.key+16,16);
- pWapiSta->wapiUsk.keyId = param->u.crypt.idx ;
- pWapiSta->wapiUsk.bTxEnable = true;
-
- _rtw_memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiAEPNInitialValueSrc,16);
- _rtw_memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiAEPNInitialValueSrc,16);
- _rtw_memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiAEPNInitialValueSrc,16);
- _rtw_memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiAEPNInitialValueSrc,16);
- _rtw_memcpy(pWapiSta->lastRxUnicastPN,WapiAEPNInitialValueSrc,16);
- pWapiSta->wapiUskUpdate.bTxEnable = false;
- pWapiSta->wapiUskUpdate.bSet = false;
-
- if (psecuritypriv->sw_encrypt== false || psecuritypriv->sw_decrypt == false)
- {
- //set unicast key for ASUE
- rtw_wapi_set_key(padapter, &pWapiSta->wapiUsk, pWapiSta, false, false);
- }
- }
- }
- }
- else
- {
- list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
- if(_rtw_memcmp(pWapiSta->PeerMacAddr,get_bssid(pmlmepriv),6))
- {
- pWapiSta->wapiMsk.bSet = true;
- _rtw_memcpy(pWapiSta->wapiMsk.dataKey,param->u.crypt.key,16);
- _rtw_memcpy(pWapiSta->wapiMsk.micKey,param->u.crypt.key+16,16);
- pWapiSta->wapiMsk.keyId = param->u.crypt.idx ;
- pWapiSta->wapiMsk.bTxEnable = false;
- if(!pWapiSta->bSetkeyOk)
- pWapiSta->bSetkeyOk = true;
- pWapiSta->bAuthenticateInProgress = false;
-
- _rtw_memcpy(pWapiSta->lastRxMulticastPN, WapiAEMultiCastPNInitialValueSrc, 16);
-
- if (psecuritypriv->sw_decrypt == false)
- {
- //set rx broadcast key for ASUE
- rtw_wapi_set_key(padapter, &pWapiSta->wapiMsk, pWapiSta, true, false);
- }
- }
-
- }
- }
- }
-#endif
-
-
-exit:
-
- DBG_8192C("%s, ret=%d\n", __func__, ret);
-
- _func_exit_;
-
- return ret;
-}
-
-static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- u8 key_index, bool pairwise, const u8 *mac_addr,
-#else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
- u8 key_index, const u8 *mac_addr,
-#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
- struct key_params *params)
-{
- char *alg_name;
- u32 param_len;
- struct ieee_param *param = NULL;
- int ret=0;
- struct wireless_dev *rtw_wdev = wiphy_to_wdev(wiphy);
- _adapter *padapter = wiphy_to_adapter(wiphy);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
- DBG_871X(FUNC_NDEV_FMT" adding key for %pM\n", FUNC_NDEV_ARG(ndev), mac_addr);
- DBG_871X("cipher=0x%x\n", params->cipher);
- DBG_871X("key_len=0x%x\n", params->key_len);
- DBG_871X("seq_len=0x%x\n", params->seq_len);
- DBG_871X("key_index=%d\n", key_index);
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- DBG_871X("pairwise=%d\n", pairwise);
-#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
-
- param_len = sizeof(struct ieee_param) + params->key_len;
- param = (struct ieee_param *)rtw_malloc(param_len);
- if (param == NULL)
- return -1;
-
- _rtw_memset(param, 0, param_len);
-
- param->cmd = IEEE_CMD_SET_ENCRYPTION;
- _rtw_memset(param->sta_addr, 0xff, ETH_ALEN);
-
- switch (params->cipher) {
- case IW_AUTH_CIPHER_NONE:
- //todo: remove key
- //remove = 1;
- alg_name = "none";
- break;
- case WLAN_CIPHER_SUITE_WEP40:
- case WLAN_CIPHER_SUITE_WEP104:
- alg_name = "WEP";
- break;
- case WLAN_CIPHER_SUITE_TKIP:
- alg_name = "TKIP";
- break;
- case WLAN_CIPHER_SUITE_CCMP:
- alg_name = "CCMP";
- break;
-
-#ifdef CONFIG_WAPI_SUPPORT
- case WLAN_CIPHER_SUITE_SMS4:
- alg_name= "SMS4";
- if(pairwise == NL80211_KEYTYPE_PAIRWISE) {
- if (key_index != 0 && key_index != 1) {
- ret = -ENOTSUPP;
- goto addkey_end;
- }
- _rtw_memcpy((void*)param->sta_addr, (void*)mac_addr, ETH_ALEN);
- } else {
- DBG_871X("mac_addr is null \n");
- }
- DBG_871X("rtw_wx_set_enc_ext: SMS4 case \n");
- break;
-#endif
-
- default:
- ret = -ENOTSUPP;
- goto addkey_end;
- }
-
- strncpy((char *)param->u.crypt.alg, alg_name, IEEE_CRYPT_ALG_NAME_LEN);
-
-
- if (!mac_addr || is_broadcast_ether_addr(mac_addr))
- {
- param->u.crypt.set_tx = 0; //for wpa/wpa2 group key
- } else {
- param->u.crypt.set_tx = 1; //for wpa/wpa2 pairwise key
- }
-
-
- //param->u.crypt.idx = key_index - 1;
- param->u.crypt.idx = key_index;
-
- if (params->seq_len && params->seq)
- {
- _rtw_memcpy(param->u.crypt.seq, params->seq, params->seq_len);
- }
-
- if(params->key_len && params->key)
- {
- param->u.crypt.key_len = params->key_len;
- _rtw_memcpy(param->u.crypt.key, params->key, params->key_len);
- }
-
- if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
- {
- ret = rtw_cfg80211_set_encryption(ndev, param, param_len);
- }
- else if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
- {
-#ifdef CONFIG_AP_MODE
- if(mac_addr)
- _rtw_memcpy(param->sta_addr, (void*)mac_addr, ETH_ALEN);
-
- ret = rtw_cfg80211_ap_set_encryption(ndev, param, param_len);
-#endif
- }
- else
- {
- DBG_8192C("error! fw_state=0x%x, iftype=%d\n", pmlmepriv->fw_state, rtw_wdev->iftype);
-
- }
-
-addkey_end:
- if(param)
- {
- rtw_mfree((u8*)param, param_len);
- }
-
- return ret;
-
-}
-
-static int cfg80211_rtw_get_key(struct wiphy *wiphy, struct net_device *ndev,
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- u8 key_index, bool pairwise, const u8 *mac_addr,
-#else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
- u8 key_index, const u8 *mac_addr,
-#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
- void *cookie,
- void (*callback)(void *cookie,
- struct key_params*))
-{
-#if 0
- struct iwm_priv *iwm = ndev_to_iwm(ndev);
- struct iwm_key *key = &iwm->keys[key_index];
- struct key_params params;
-
- IWM_DBG_WEXT(iwm, DBG, "Getting key %d\n", key_index);
-
- memset(&params, 0, sizeof(params));
-
- params.cipher = key->cipher;
- params.key_len = key->key_len;
- params.seq_len = key->seq_len;
- params.seq = key->seq;
- params.key = key->key;
-
- callback(cookie, &params);
-
- return key->key_len ? 0 : -ENOENT;
-#endif
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
- return 0;
-}
-
-static int cfg80211_rtw_del_key(struct wiphy *wiphy, struct net_device *ndev,
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- u8 key_index, bool pairwise, const u8 *mac_addr)
-#else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
- u8 key_index, const u8 *mac_addr)
-#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
-{
- _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
- struct security_priv *psecuritypriv = &padapter->securitypriv;
-
- DBG_871X(FUNC_NDEV_FMT" key_index=%d\n", FUNC_NDEV_ARG(ndev), key_index);
-
- if (key_index == psecuritypriv->dot11PrivacyKeyIndex)
- {
- //clear the flag of wep default key set.
- psecuritypriv->bWepDefaultKeyIdxSet = 0;
- }
-
- return 0;
-}
-
-static int cfg80211_rtw_set_default_key(struct wiphy *wiphy,
- struct net_device *ndev, u8 key_index
- #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
- , bool unicast, bool multicast
- #endif
- )
-{
- _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
- struct security_priv *psecuritypriv = &padapter->securitypriv;
-
- DBG_871X(FUNC_NDEV_FMT" key_index=%d"
- #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
- ", unicast=%d, multicast=%d"
- #endif
- ".\n", FUNC_NDEV_ARG(ndev), key_index
- #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
- , unicast, multicast
- #endif
- );
-
- if ((key_index < WEP_KEYS) && ((psecuritypriv->dot11PrivacyAlgrthm == _WEP40_) || (psecuritypriv->dot11PrivacyAlgrthm == _WEP104_))) //set wep default key
- {
- psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
-
- psecuritypriv->dot11PrivacyKeyIndex = key_index;
-
- psecuritypriv->dot11PrivacyAlgrthm = _WEP40_;
- psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
- if (psecuritypriv->dot11DefKeylen[key_index] == 13)
- {
- psecuritypriv->dot11PrivacyAlgrthm = _WEP104_;
- psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
- }
-
- psecuritypriv->bWepDefaultKeyIdxSet = 1; //set the flag to represent that wep default key has been set
- }
-
- return 0;
-
-}
-
-static int cfg80211_rtw_get_station(struct wiphy *wiphy,
- struct net_device *ndev,
- u8 *mac, struct station_info *sinfo)
-{
- int ret = 0;
- _adapter *padapter = wiphy_to_adapter(wiphy);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct sta_info *psta = NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
-
- sinfo->filled = 0;
-
- if (!mac) {
- DBG_871X(FUNC_NDEV_FMT" mac==%p\n", FUNC_NDEV_ARG(ndev), mac);
- ret = -ENOENT;
- goto exit;
- }
-
- psta = rtw_get_stainfo(pstapriv, mac);
- if (psta == NULL) {
- DBG_8192C("%s, sta_info is null\n", __func__);
- ret = -ENOENT;
- goto exit;
- }
-
-#ifdef CONFIG_DEBUG_CFG80211
- DBG_871X(FUNC_NDEV_FMT" mac="MAC_FMT"\n", FUNC_NDEV_ARG(ndev), MAC_ARG(mac));
-#endif
-
- //for infra./P2PClient mode
- if( check_fwstate(pmlmepriv, WIFI_STATION_STATE)
- && check_fwstate(pmlmepriv, _FW_LINKED)
- )
- {
- struct wlan_network *cur_network = &(pmlmepriv->cur_network);
-
- if (_rtw_memcmp(mac, cur_network->network.MacAddress, ETH_ALEN) == _FALSE) {
- DBG_871X("%s, mismatch bssid="MAC_FMT"\n", __func__, MAC_ARG(cur_network->network.MacAddress));
- ret = -ENOENT;
- goto exit;
- }
-
- sinfo->filled |= STATION_INFO_SIGNAL;
- sinfo->signal = translate_percentage_to_dbm(padapter->recvpriv.signal_strength);
-
- sinfo->filled |= STATION_INFO_TX_BITRATE;
- sinfo->txrate.legacy = rtw_get_cur_max_rate(padapter);
-
- sinfo->filled |= STATION_INFO_RX_PACKETS;
- sinfo->rx_packets = sta_rx_data_pkts(psta);
-
- sinfo->filled |= STATION_INFO_TX_PACKETS;
- sinfo->tx_packets = psta->sta_stats.tx_pkts;
-
- }
-
- //for Ad-Hoc/AP mode
- if ((check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)
- ||check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)
- ||check_fwstate(pmlmepriv, WIFI_AP_STATE))
- && check_fwstate(pmlmepriv, _FW_LINKED)
- )
- {
- //TODO: should acquire station info...
- }
-
-exit:
- return ret;
-}
-
-extern int netdev_open(struct net_device *pnetdev);
-#ifdef CONFIG_CONCURRENT_MODE
-extern int netdev_if2_open(struct net_device *pnetdev);
-#endif
-
-/*
-enum nl80211_iftype {
- NL80211_IFTYPE_UNSPECIFIED,
- NL80211_IFTYPE_ADHOC, //1
- NL80211_IFTYPE_STATION, //2
- NL80211_IFTYPE_AP, //3
- NL80211_IFTYPE_AP_VLAN,
- NL80211_IFTYPE_WDS,
- NL80211_IFTYPE_MONITOR, //6
- NL80211_IFTYPE_MESH_POINT,
- NL80211_IFTYPE_P2P_CLIENT, //8
- NL80211_IFTYPE_P2P_GO, //9
- //keep last
- NUM_NL80211_IFTYPES,
- NL80211_IFTYPE_MAX = NUM_NL80211_IFTYPES - 1
-};
-*/
-static int cfg80211_rtw_change_iface(struct wiphy *wiphy,
- struct net_device *ndev,
- enum nl80211_iftype type, u32 *flags,
- struct vif_params *params)
-{
- enum nl80211_iftype old_type;
- NDIS_802_11_NETWORK_INFRASTRUCTURE networkType ;
- _adapter *padapter = wiphy_to_adapter(wiphy);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct wireless_dev *rtw_wdev = wiphy_to_wdev(wiphy);
-#ifdef CONFIG_P2P
- struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
-#endif
- int ret = 0;
- u8 change = _FALSE;
-
-#ifdef CONFIG_CONCURRENT_MODE
- if(padapter->adapter_type == SECONDARY_ADAPTER)
- {
- DBG_871X(FUNC_NDEV_FMT" call netdev_if2_open\n", FUNC_NDEV_ARG(ndev));
- if(netdev_if2_open(ndev) != 0) {
- ret= -EPERM;
- goto exit;
- }
- }
- else if(padapter->adapter_type == PRIMARY_ADAPTER)
-#endif //CONFIG_CONCURRENT_MODE
- {
- DBG_871X(FUNC_NDEV_FMT" call netdev_open\n", FUNC_NDEV_ARG(ndev));
- if(netdev_open(ndev) != 0) {
- ret= -EPERM;
- goto exit;
- }
- }
-
- if(_FAIL == rtw_pwr_wakeup(padapter)) {
- ret= -EPERM;
- goto exit;
- }
-
- old_type = rtw_wdev->iftype;
- DBG_871X(FUNC_NDEV_FMT" old_iftype=%d, new_iftype=%d\n",
- FUNC_NDEV_ARG(ndev), old_type, type);
-
- if(old_type != type)
- {
- change = _TRUE;
- pmlmeext->action_public_rxseq = 0xffff;
- pmlmeext->action_public_dialog_token = 0xff;
- }
-
- switch (type) {
- case NL80211_IFTYPE_ADHOC:
- networkType = Ndis802_11IBSS;
- break;
-#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
- case NL80211_IFTYPE_P2P_CLIENT:
-#endif
- case NL80211_IFTYPE_STATION:
- networkType = Ndis802_11Infrastructure;
- #ifdef CONFIG_P2P
- if(change && rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
- {
- _cancel_timer_ex( &pwdinfo->find_phase_timer );
- _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
- _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
-
- //it means remove GO and change mode from AP(GO) to station(P2P DEVICE)
- rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
- rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
-
- DBG_8192C("%s, role=%d, p2p_state=%d, pre_p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), rtw_p2p_pre_state(pwdinfo));
- }
- #endif //CONFIG_P2P
- break;
-#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
- case NL80211_IFTYPE_P2P_GO:
-#endif
- case NL80211_IFTYPE_AP:
- networkType = Ndis802_11APMode;
- #ifdef CONFIG_P2P
- if(change && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
- {
- //it means P2P Group created, we will be GO and change mode from P2P DEVICE to AP(GO)
- rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
- }
- #endif //CONFIG_P2P
- break;
- default:
- return -EOPNOTSUPP;
- }
-
- rtw_wdev->iftype = type;
-
- if (rtw_set_802_11_infrastructure_mode(padapter, networkType) ==_FALSE)
- {
- rtw_wdev->iftype = old_type;
- ret = -EPERM;
- goto exit;
- }
-
- rtw_setopmode_cmd(padapter, networkType);
-
-exit:
-
- return ret;
-}
-
-void rtw_cfg80211_indicate_scan_done(struct rtw_wdev_priv *pwdev_priv, bool aborted)
-{
- _irqL irqL;
-
- _enter_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
- if(pwdev_priv->scan_request != NULL)
- {
- //struct cfg80211_scan_request *scan_request = pwdev_priv->scan_request;
-
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_871X("%s with scan req\n", __FUNCTION__);
- #endif
-
- //avoid WARN_ON(request != wiphy_to_dev(request->wiphy)->scan_req);
- //if(scan_request == wiphy_to_dev(scan_request->wiphy)->scan_req)
- if(pwdev_priv->scan_request->wiphy != pwdev_priv->rtw_wdev->wiphy)
- {
- DBG_8192C("error wiphy compare\n");
- }
- else
- {
- cfg80211_scan_done(pwdev_priv->scan_request, aborted);
- }
-
- pwdev_priv->scan_request = NULL;
-
- } else {
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_871X("%s without scan req\n", __FUNCTION__);
- #endif
- }
- _exit_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
-}
-
-void rtw_cfg80211_surveydone_event_callback(_adapter *padapter)
-{
- _irqL irqL;
- _list *plist, *phead;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- _queue *queue = &(pmlmepriv->scanned_queue);
- struct wlan_network *pnetwork = NULL;
- u32 cnt=0;
- u32 wait_for_surveydone;
- sint wait_status;
-#ifdef CONFIG_P2P
- struct wifidirect_info* pwdinfo = &padapter->wdinfo;
-#endif //CONFIG_P2P
- struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-
-#ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("%s\n", __func__);
-#endif
-
- _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
-
- phead = get_list_head(queue);
- plist = get_next(phead);
-
- while(1)
- {
- if (rtw_end_of_queue_search(phead,plist)== _TRUE)
- break;
-
- pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
-
- //report network only if the current channel set contains the channel to which this network belongs
- if(rtw_ch_set_search_ch(padapter->mlmeextpriv.channel_set, pnetwork->network.Configuration.DSConfig) >= 0
- #ifdef CONFIG_VALIDATE_SSID
- && _TRUE == rtw_validate_ssid(&(pnetwork->network.Ssid))
- #endif
- )
- {
- //ev=translate_scan(padapter, a, pnetwork, ev, stop);
- rtw_cfg80211_inform_bss(padapter, pnetwork);
- }
-
- plist = get_next(plist);
-
- }
-
- _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
-
- //call this after other things have been done
- rtw_cfg80211_indicate_scan_done(wdev_to_priv(padapter->rtw_wdev), _FALSE);
-}
-
-static int rtw_cfg80211_set_probe_req_wpsp2pie(_adapter *padapter, char *buf, int len)
-{
- int ret = 0;
- uint wps_ielen = 0;
- u8 *wps_ie;
- u32 p2p_ielen = 0;
- u8 *p2p_ie;
- u32 wfd_ielen = 0;
- u8 *wfd_ie;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-
-#ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("%s, ielen=%d\n", __func__, len);
-#endif
-
- if(len>0)
- {
- if((wps_ie = rtw_get_wps_ie(buf, len, NULL, &wps_ielen)))
- {
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("probe_req_wps_ielen=%d\n", wps_ielen);
- #endif
-
- if(pmlmepriv->wps_probe_req_ie)
- {
- u32 free_len = pmlmepriv->wps_probe_req_ie_len;
- pmlmepriv->wps_probe_req_ie_len = 0;
- rtw_mfree(pmlmepriv->wps_probe_req_ie, free_len);
- pmlmepriv->wps_probe_req_ie = NULL;
- }
-
- pmlmepriv->wps_probe_req_ie = rtw_malloc(wps_ielen);
- if ( pmlmepriv->wps_probe_req_ie == NULL) {
- DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
- return -EINVAL;
-
- }
- _rtw_memcpy(pmlmepriv->wps_probe_req_ie, wps_ie, wps_ielen);
- pmlmepriv->wps_probe_req_ie_len = wps_ielen;
- }
-
- //buf += wps_ielen;
- //len -= wps_ielen;
-
- #ifdef CONFIG_P2P
- if((p2p_ie=rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen)))
- {
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("probe_req_p2p_ielen=%d\n", p2p_ielen);
- #endif
-
- if(pmlmepriv->p2p_probe_req_ie)
- {
- u32 free_len = pmlmepriv->p2p_probe_req_ie_len;
- pmlmepriv->p2p_probe_req_ie_len = 0;
- rtw_mfree(pmlmepriv->p2p_probe_req_ie, free_len);
- pmlmepriv->p2p_probe_req_ie = NULL;
- }
-
- pmlmepriv->p2p_probe_req_ie = rtw_malloc(p2p_ielen);
- if ( pmlmepriv->p2p_probe_req_ie == NULL) {
- DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
- return -EINVAL;
-
- }
- _rtw_memcpy(pmlmepriv->p2p_probe_req_ie, p2p_ie, p2p_ielen);
- pmlmepriv->p2p_probe_req_ie_len = p2p_ielen;
- }
- #endif //CONFIG_P2P
-
- //buf += p2p_ielen;
- //len -= p2p_ielen;
-
- #ifdef CONFIG_WFD
- if(rtw_get_wfd_ie(buf, len, NULL, &wfd_ielen))
- {
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("probe_req_wfd_ielen=%d\n", wfd_ielen);
- #endif
-
- if(pmlmepriv->wfd_probe_req_ie)
- {
- u32 free_len = pmlmepriv->wfd_probe_req_ie_len;
- pmlmepriv->wfd_probe_req_ie_len = 0;
- rtw_mfree(pmlmepriv->wfd_probe_req_ie, free_len);
- pmlmepriv->wfd_probe_req_ie = NULL;
- }
-
- pmlmepriv->wfd_probe_req_ie = rtw_malloc(wfd_ielen);
- if ( pmlmepriv->wfd_probe_req_ie == NULL) {
- DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
- return -EINVAL;
-
- }
- rtw_get_wfd_ie(buf, len, pmlmepriv->wfd_probe_req_ie, &pmlmepriv->wfd_probe_req_ie_len);
- }
- #endif //CONFIG_WFD
-
- }
-
- return ret;
-
-}
-
-static int cfg80211_rtw_scan(struct wiphy *wiphy
- #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0))
- , struct net_device *ndev
- #endif
- , struct cfg80211_scan_request *request)
-{
- int i;
- u8 _status = _FALSE;
- int ret = 0;
- _adapter *padapter = wiphy_to_adapter(wiphy);
- struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
- NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT];
- struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
- _irqL irqL;
- u8 *wps_ie=NULL;
- uint wps_ielen=0;
- u8 *p2p_ie=NULL;
- uint p2p_ielen=0;
-#ifdef CONFIG_P2P
- struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
-#endif //CONFIG_P2P
- struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
- struct cfg80211_ssid *ssids = request->ssids;
- int social_channel = 0, j = 0;
- bool need_indicate_scan_done = _FALSE;
-#ifdef CONFIG_CONCURRENT_MODE
- PADAPTER pbuddy_adapter = NULL;
- struct mlme_priv *pbuddy_mlmepriv = NULL;
-#endif //CONFIG_CONCURRENT_MODE
-
-#ifdef CONFIG_DEBUG_CFG80211
- DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
-#endif
-
-#ifdef CONFIG_CONCURRENT_MODE
- if(rtw_buddy_adapter_up(padapter))
- {
- pbuddy_adapter = padapter->pbuddy_adapter;
- pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
- }
-#endif //CONFIG_CONCURRENT_MODE
-
-#ifdef CONFIG_MP_INCLUDED
-if (padapter->registrypriv.mp_mode == 1)
-{
- if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE)
- {
- ret = -EPERM;
- goto exit;
- }
-}
-#endif
-
- _enter_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
- pwdev_priv->scan_request = request;
- _exit_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
-
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
- {
-
-#ifdef CONFIG_DEBUG_CFG80211
- DBG_871X("%s under WIFI_AP_STATE\n", __FUNCTION__);
-#endif
- //need_indicate_scan_done = _TRUE;
- //goto check_need_indicate_scan_done;
- }
-
- if(_FAIL == rtw_pwr_wakeup(padapter)) {
- need_indicate_scan_done = _TRUE;
- goto check_need_indicate_scan_done;
- }
-
- #ifdef CONFIG_P2P
- if(ssids->ssid != NULL
- && _rtw_memcmp(ssids->ssid, "DIRECT-", 7)
- && rtw_get_p2p_ie((u8 *)request->ie, request->ie_len, NULL, NULL)
- )
- {
- if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
- {
- rtw_p2p_enable(padapter, P2P_ROLE_DEVICE);
- wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _TRUE;
- }
- else
- {
- rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
- #endif
- }
- rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
-
- if(request->n_channels == 3 &&
- request->channels[0]->hw_value == 1 &&
- request->channels[1]->hw_value == 6 &&
- request->channels[2]->hw_value == 11
- )
- {
- social_channel = 1;
- }
- }
- #endif //CONFIG_P2P
-
- if(request->ie && request->ie_len>0)
- {
- rtw_cfg80211_set_probe_req_wpsp2pie(padapter, (u8 *)request->ie, request->ie_len );
- }
-
- if (pmlmepriv->LinkDetectInfo.bBusyTraffic == _TRUE)
- {
- DBG_8192C("%s, bBusyTraffic == _TRUE\n", __func__);
- need_indicate_scan_done = _TRUE;
- goto check_need_indicate_scan_done;
- }
- if (rtw_is_scan_deny(padapter)){
- DBG_871X(FUNC_ADPT_FMT ": scan deny\n", FUNC_ADPT_ARG(padapter));
- need_indicate_scan_done = _TRUE;
- goto check_need_indicate_scan_done;
- }
-
-#ifdef CONFIG_CONCURRENT_MODE
- if(pbuddy_mlmepriv && (pbuddy_mlmepriv->LinkDetectInfo.bBusyTraffic == _TRUE))
- {
- DBG_8192C("%s, bBusyTraffic == _TRUE at buddy_intf\n", __func__);
- need_indicate_scan_done = _TRUE;
- goto check_need_indicate_scan_done;
- }
-#endif //CONFIG_CONCURRENT_MODE
-
- if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
- {
- DBG_8192C("%s, fwstate=0x%x\n", __func__, pmlmepriv->fw_state);
- need_indicate_scan_done = _TRUE;
- goto check_need_indicate_scan_done;
- }
-
-#ifdef CONFIG_CONCURRENT_MODE
- if (check_buddy_fwstate(padapter,
- _FW_UNDER_SURVEY|_FW_UNDER_LINKING|WIFI_UNDER_WPS) == _TRUE)
- {
- if(check_buddy_fwstate(padapter, _FW_UNDER_SURVEY))
- {
- DBG_8192C("scanning_via_buddy_intf\n");
- pmlmepriv->scanning_via_buddy_intf = _TRUE;
- }
-
- DBG_8192C("buddy_intf's mlme state:0x%x\n", pbuddy_mlmepriv->fw_state);
-
- need_indicate_scan_done = _TRUE;
- goto check_need_indicate_scan_done;
- }
-#endif
-
-
-#ifdef CONFIG_P2P
- if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
- {
- rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);
- rtw_free_network_queue(padapter, _TRUE);
-
- if(social_channel == 0)
- rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
- else
- rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_SOCIAL_LAST);
- }
-#endif //CONFIG_P2P
-
-
- _rtw_memset(ssid, 0, sizeof(NDIS_802_11_SSID)*RTW_SSID_SCAN_AMOUNT);
- //parsing request ssids, n_ssids
- for (i = 0; i < request->n_ssids && i < RTW_SSID_SCAN_AMOUNT; i++) {
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("ssid=%s, len=%d\n", ssids[i].ssid, ssids[i].ssid_len);
- #endif
- _rtw_memcpy(ssid[i].Ssid, ssids[i].ssid, ssids[i].ssid_len);
- ssid[i].SsidLength = ssids[i].ssid_len;
- }
-
-
- /* parsing channels, n_channels */
- _rtw_memset(ch, 0, sizeof(struct rtw_ieee80211_channel)*RTW_CHANNEL_SCAN_AMOUNT);
- if (request->n_channels == 1)
- for (i=0;i<request->n_channels && i<RTW_CHANNEL_SCAN_AMOUNT;i++) {
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_871X(FUNC_ADPT_FMT CHAN_FMT"\n", FUNC_ADPT_ARG(padapter), CHAN_ARG(request->channels[i]));
- #endif
- ch[i].hw_value = request->channels[i]->hw_value;
- ch[i].flags = request->channels[i]->flags;
- }
-
- _enter_critical_bh(&pmlmepriv->lock, &irqL);
- if (request->n_channels == 1) {
- _rtw_memcpy(&ch[1], &ch[0], sizeof(struct rtw_ieee80211_channel));
- _rtw_memcpy(&ch[2], &ch[0], sizeof(struct rtw_ieee80211_channel));
- _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, ch, 3);
- } else {
- _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, NULL, 0);
- }
- _exit_critical_bh(&pmlmepriv->lock, &irqL);
-
-
- if(_status == _FALSE)
- {
- ret = -1;
- }
-
-check_need_indicate_scan_done:
- if(need_indicate_scan_done)
- rtw_cfg80211_surveydone_event_callback(padapter);
-
-exit:
-
- return ret;
-
-}
-
-static int cfg80211_rtw_set_wiphy_params(struct wiphy *wiphy, u32 changed)
-{
-#if 0
- struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
-
- if (changed & WIPHY_PARAM_RTS_THRESHOLD &&
- (iwm->conf.rts_threshold != wiphy->rts_threshold)) {
- int ret;
-
- iwm->conf.rts_threshold = wiphy->rts_threshold;
-
- ret = iwm_umac_set_config_fix(iwm, UMAC_PARAM_TBL_CFG_FIX,
- CFG_RTS_THRESHOLD,
- iwm->conf.rts_threshold);
- if (ret < 0)
- return ret;
- }
-
- if (changed & WIPHY_PARAM_FRAG_THRESHOLD &&
- (iwm->conf.frag_threshold != wiphy->frag_threshold)) {
- int ret;
-
- iwm->conf.frag_threshold = wiphy->frag_threshold;
-
- ret = iwm_umac_set_config_fix(iwm, UMAC_PARAM_TBL_FA_CFG_FIX,
- CFG_FRAG_THRESHOLD,
- iwm->conf.frag_threshold);
- if (ret < 0)
- return ret;
- }
-#endif
- DBG_8192C("%s\n", __func__);
- return 0;
-}
-
-static int cfg80211_rtw_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
- struct cfg80211_ibss_params *params)
-{
-#if 0
- struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
- struct ieee80211_channel *chan = params->channel;
-
- if (!test_bit(IWM_STATUS_READY, &iwm->status))
- return -EIO;
-
- /* UMAC doesn't support creating or joining an IBSS network
- * with specified bssid. */
- if (params->bssid)
- return -EOPNOTSUPP;
-
- iwm->channel = ieee80211_frequency_to_channel(chan->center_freq);
- iwm->umac_profile->ibss.band = chan->band;
- iwm->umac_profile->ibss.channel = iwm->channel;
- iwm->umac_profile->ssid.ssid_len = params->ssid_len;
- memcpy(iwm->umac_profile->ssid.ssid, params->ssid, params->ssid_len);
-
- return iwm_send_mlme_profile(iwm);
-#endif
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
- return 0;
-}
-
-static int cfg80211_rtw_leave_ibss(struct wiphy *wiphy, struct net_device *ndev)
-{
-#if 0
- struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
-
- if (iwm->umac_profile_active)
- return iwm_invalidate_mlme_profile(iwm);
-#endif
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
- return 0;
-}
-
-static int rtw_cfg80211_set_wpa_version(struct security_priv *psecuritypriv, u32 wpa_version)
-{
- DBG_8192C("%s, wpa_version=%d\n", __func__, wpa_version);
-
- if (!wpa_version) {
- psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
- return 0;
- }
-
-
- if (wpa_version & (NL80211_WPA_VERSION_1 | NL80211_WPA_VERSION_2))
- {
- psecuritypriv->ndisauthtype = Ndis802_11AuthModeWPAPSK;
- }
-
-/*
- if (wpa_version & NL80211_WPA_VERSION_2)
- {
- psecuritypriv->ndisauthtype = Ndis802_11AuthModeWPA2PSK;
- }
-*/
-
- return 0;
-
-}
-
-static int rtw_cfg80211_set_auth_type(struct security_priv *psecuritypriv,
- enum nl80211_auth_type sme_auth_type)
-{
- DBG_8192C("%s, nl80211_auth_type=%d\n", __func__, sme_auth_type);
-
-
- switch (sme_auth_type) {
- case NL80211_AUTHTYPE_AUTOMATIC:
-
- psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Auto;
-
- break;
- case NL80211_AUTHTYPE_OPEN_SYSTEM:
-
- psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open;
-
- if(psecuritypriv->ndisauthtype>Ndis802_11AuthModeWPA)
- psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
-
-#ifdef CONFIG_WAPI_SUPPORT
- if(psecuritypriv->ndisauthtype == Ndis802_11AuthModeWAPI)
- psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_WAPI;
-#endif
-
- break;
- case NL80211_AUTHTYPE_SHARED_KEY:
-
- psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Shared;
-
- psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
-
-
- break;
- default:
- psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open;
- //return -ENOTSUPP;
- }
-
- return 0;
-
-}
-
-static int rtw_cfg80211_set_cipher(struct security_priv *psecuritypriv, u32 cipher, bool ucast)
-{
- u32 ndisencryptstatus = Ndis802_11EncryptionDisabled;
-
- u32 *profile_cipher = ucast ? &psecuritypriv->dot11PrivacyAlgrthm :
- &psecuritypriv->dot118021XGrpPrivacy;
-
- DBG_8192C("%s, ucast=%d, cipher=0x%x\n", __func__, ucast, cipher);
-
-
- if (!cipher) {
- *profile_cipher = _NO_PRIVACY_;
- psecuritypriv->ndisencryptstatus = ndisencryptstatus;
- return 0;
- }
-
- switch (cipher) {
- case IW_AUTH_CIPHER_NONE:
- *profile_cipher = _NO_PRIVACY_;
- ndisencryptstatus = Ndis802_11EncryptionDisabled;
-#ifdef CONFIG_WAPI_SUPPORT
- if(psecuritypriv->dot11PrivacyAlgrthm ==_SMS4_ )
- {
- *profile_cipher = _SMS4_;
- }
-#endif
- break;
- case WLAN_CIPHER_SUITE_WEP40:
- *profile_cipher = _WEP40_;
- ndisencryptstatus = Ndis802_11Encryption1Enabled;
- break;
- case WLAN_CIPHER_SUITE_WEP104:
- *profile_cipher = _WEP104_;
- ndisencryptstatus = Ndis802_11Encryption1Enabled;
- break;
- case WLAN_CIPHER_SUITE_TKIP:
- *profile_cipher = _TKIP_;
- ndisencryptstatus = Ndis802_11Encryption2Enabled;
- break;
- case WLAN_CIPHER_SUITE_CCMP:
- *profile_cipher = _AES_;
- ndisencryptstatus = Ndis802_11Encryption3Enabled;
- break;
-#ifdef CONFIG_WAPI_SUPPORT
- case WLAN_CIPHER_SUITE_SMS4:
- *profile_cipher = _SMS4_;
- ndisencryptstatus = Ndis802_11_EncrypteionWAPI;
- break;
-#endif
- default:
- DBG_8192C("Unsupported cipher: 0x%x\n", cipher);
- return -ENOTSUPP;
- }
-
- if(ucast)
- {
- psecuritypriv->ndisencryptstatus = ndisencryptstatus;
-
- //if(psecuritypriv->dot11PrivacyAlgrthm >= _AES_)
- // psecuritypriv->ndisauthtype = Ndis802_11AuthModeWPA2PSK;
- }
-
- return 0;
-}
-
-static int rtw_cfg80211_set_key_mgt(struct security_priv *psecuritypriv, u32 key_mgt)
-{
- DBG_8192C("%s, key_mgt=0x%x\n", __func__, key_mgt);
-
- if (key_mgt == WLAN_AKM_SUITE_8021X)
- //*auth_type = UMAC_AUTH_TYPE_8021X;
- psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
- else if (key_mgt == WLAN_AKM_SUITE_PSK) {
- psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
- }
-#ifdef CONFIG_WAPI_SUPPORT
- else if(key_mgt ==WLAN_AKM_SUITE_WAPI_PSK){
- psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_WAPI;
- }
- else if(key_mgt ==WLAN_AKM_SUITE_WAPI_CERT){
- psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_WAPI;
- }
-#endif
-
-
- else {
- DBG_8192C("Invalid key mgt: 0x%x\n", key_mgt);
- //return -EINVAL;
- }
-
- return 0;
-}
-
-static int rtw_cfg80211_set_wpa_ie(_adapter *padapter, u8 *pie, size_t ielen)
-{
- u8 *buf=NULL, *pos=NULL;
- u32 left;
- int group_cipher = 0, pairwise_cipher = 0;
- int ret = 0;
- int wpa_ielen=0;
- int wpa2_ielen=0;
- u8 *pwpa, *pwpa2;
- u8 null_addr[]= {0,0,0,0,0,0};
-
- if (pie == NULL || !ielen) {
- /* Treat this as normal case, but need to clear WIFI_UNDER_WPS */
- _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
- goto exit;
- }
-
- if (ielen > MAX_WPA_IE_LEN+MAX_WPS_IE_LEN+MAX_P2P_IE_LEN) {
- ret = -EINVAL;
- goto exit;
- }
-
- buf = rtw_zmalloc(ielen);
- if (buf == NULL){
- ret = -ENOMEM;
- goto exit;
- }
-
- _rtw_memcpy(buf, pie , ielen);
-
- //dump
- {
- int i;
- DBG_8192C("set wpa_ie(length:%zu):\n", ielen);
- for(i=0;i<ielen;i=i+8)
- DBG_8192C("0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x \n",buf[i],buf[i+1],buf[i+2],buf[i+3],buf[i+4],buf[i+5],buf[i+6],buf[i+7]);
- }
-
- pos = buf;
- if(ielen < RSN_HEADER_LEN){
- RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,("Ie len too short %d\n", ielen));
- ret = -1;
- goto exit;
- }
-
- pwpa = rtw_get_wpa_ie(buf, &wpa_ielen, ielen);
- if(pwpa && wpa_ielen>0)
- {
- if(rtw_parse_wpa_ie(pwpa, wpa_ielen+2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS)
- {
- padapter->securitypriv.dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
- padapter->securitypriv.ndisauthtype=Ndis802_11AuthModeWPAPSK;
- _rtw_memcpy(padapter->securitypriv.supplicant_ie, &pwpa[0], wpa_ielen+2);
-
- DBG_8192C("got wpa_ie, wpa_ielen:%u\n", wpa_ielen);
- }
- }
-
- pwpa2 = rtw_get_wpa2_ie(buf, &wpa2_ielen, ielen);
- if(pwpa2 && wpa2_ielen>0)
- {
- if(rtw_parse_wpa2_ie(pwpa2, wpa2_ielen+2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS)
- {
- padapter->securitypriv.dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
- padapter->securitypriv.ndisauthtype=Ndis802_11AuthModeWPA2PSK;
- _rtw_memcpy(padapter->securitypriv.supplicant_ie, &pwpa2[0], wpa2_ielen+2);
-
- DBG_8192C("got wpa2_ie, wpa2_ielen:%u\n", wpa2_ielen);
- }
- }
-
- if (group_cipher == 0)
- {
- group_cipher = WPA_CIPHER_NONE;
- }
- if (pairwise_cipher == 0)
- {
- pairwise_cipher = WPA_CIPHER_NONE;
- }
-
- switch(group_cipher)
- {
- case WPA_CIPHER_NONE:
- padapter->securitypriv.dot118021XGrpPrivacy=_NO_PRIVACY_;
- padapter->securitypriv.ndisencryptstatus=Ndis802_11EncryptionDisabled;
- break;
- case WPA_CIPHER_WEP40:
- padapter->securitypriv.dot118021XGrpPrivacy=_WEP40_;
- padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
- break;
- case WPA_CIPHER_TKIP:
- padapter->securitypriv.dot118021XGrpPrivacy=_TKIP_;
- padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled;
- break;
- case WPA_CIPHER_CCMP:
- padapter->securitypriv.dot118021XGrpPrivacy=_AES_;
- padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
- break;
- case WPA_CIPHER_WEP104:
- padapter->securitypriv.dot118021XGrpPrivacy=_WEP104_;
- padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
- break;
- }
-
- switch(pairwise_cipher)
- {
- case WPA_CIPHER_NONE:
- padapter->securitypriv.dot11PrivacyAlgrthm=_NO_PRIVACY_;
- padapter->securitypriv.ndisencryptstatus=Ndis802_11EncryptionDisabled;
- break;
- case WPA_CIPHER_WEP40:
- padapter->securitypriv.dot11PrivacyAlgrthm=_WEP40_;
- padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
- break;
- case WPA_CIPHER_TKIP:
- padapter->securitypriv.dot11PrivacyAlgrthm=_TKIP_;
- padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled;
- break;
- case WPA_CIPHER_CCMP:
- padapter->securitypriv.dot11PrivacyAlgrthm=_AES_;
- padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
- break;
- case WPA_CIPHER_WEP104:
- padapter->securitypriv.dot11PrivacyAlgrthm=_WEP104_;
- padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
- break;
- }
-
- {/* handle wps_ie */
- uint wps_ielen;
- u8 *wps_ie;
-
- wps_ie = rtw_get_wps_ie(buf, ielen, NULL, &wps_ielen);
- if (wps_ie && wps_ielen > 0) {
- DBG_8192C("got wps_ie, wps_ielen:%u\n", wps_ielen);
- padapter->securitypriv.wps_ie_len = wps_ielen<MAX_WPS_IE_LEN?wps_ielen:MAX_WPS_IE_LEN;
- _rtw_memcpy(padapter->securitypriv.wps_ie, wps_ie, padapter->securitypriv.wps_ie_len);
- set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS);
- } else {
- _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
- }
- }
-
- #ifdef CONFIG_P2P
- {//check p2p_ie for assoc req;
- uint p2p_ielen=0;
- u8 *p2p_ie;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-
- if((p2p_ie=rtw_get_p2p_ie(buf, ielen, NULL, &p2p_ielen)))
- {
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("%s p2p_assoc_req_ielen=%d\n", __FUNCTION__, p2p_ielen);
- #endif
-
- if(pmlmepriv->p2p_assoc_req_ie)
- {
- u32 free_len = pmlmepriv->p2p_assoc_req_ie_len;
- pmlmepriv->p2p_assoc_req_ie_len = 0;
- rtw_mfree(pmlmepriv->p2p_assoc_req_ie, free_len);
- pmlmepriv->p2p_assoc_req_ie = NULL;
- }
-
- pmlmepriv->p2p_assoc_req_ie = rtw_malloc(p2p_ielen);
- if ( pmlmepriv->p2p_assoc_req_ie == NULL) {
- DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
- goto exit;
- }
- _rtw_memcpy(pmlmepriv->p2p_assoc_req_ie, p2p_ie, p2p_ielen);
- pmlmepriv->p2p_assoc_req_ie_len = p2p_ielen;
- }
- }
- #endif //CONFIG_P2P
-
- #ifdef CONFIG_WFD
- {//check wfd_ie for assoc req;
- uint wfd_ielen=0;
- u8 *wfd_ie;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-
- if(rtw_get_wfd_ie(buf, ielen, NULL, &wfd_ielen))
- {
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("%s wfd_assoc_req_ielen=%d\n", __FUNCTION__, wfd_ielen);
- #endif
-
- if(pmlmepriv->wfd_assoc_req_ie)
- {
- u32 free_len = pmlmepriv->wfd_assoc_req_ie_len;
- pmlmepriv->wfd_assoc_req_ie_len = 0;
- rtw_mfree(pmlmepriv->wfd_assoc_req_ie, free_len);
- pmlmepriv->wfd_assoc_req_ie = NULL;
- }
-
- pmlmepriv->wfd_assoc_req_ie = rtw_malloc(wfd_ielen);
- if ( pmlmepriv->wfd_assoc_req_ie == NULL) {
- DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
- goto exit;
- }
- rtw_get_wfd_ie(buf, ielen, pmlmepriv->wfd_assoc_req_ie, &pmlmepriv->wfd_assoc_req_ie_len);
- }
- }
- #endif //CONFIG_WFD
-
- //TKIP and AES disallow multicast packets until installing group key
- if(padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_
- || padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_WTMIC_
- || padapter->securitypriv.dot11PrivacyAlgrthm == _AES_)
- //WPS open need to enable multicast
- //|| check_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS) == _TRUE)
- rtw_hal_set_hwreg(padapter, HW_VAR_OFF_RCR_AM, null_addr);
-
- RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_,
- ("rtw_set_wpa_ie: pairwise_cipher=0x%08x padapter->securitypriv.ndisencryptstatus=%d padapter->securitypriv.ndisauthtype=%d\n",
- pairwise_cipher, padapter->securitypriv.ndisencryptstatus, padapter->securitypriv.ndisauthtype));
-
-exit:
- if (buf)
- rtw_mfree(buf, ielen);
- if (ret)
- _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
- return ret;
-}
-
-static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
- struct cfg80211_connect_params *sme)
-{
- int ret=0;
- _irqL irqL;
- _list *phead;
- struct wlan_network *pnetwork = NULL;
- NDIS_802_11_AUTHENTICATION_MODE authmode;
- NDIS_802_11_SSID ndis_ssid;
- u8 *dst_ssid, *src_ssid;
- u8 *dst_bssid, *src_bssid;
- //u8 matched_by_bssid=_FALSE;
- //u8 matched_by_ssid=_FALSE;
- u8 matched=_FALSE;
- _adapter *padapter = wiphy_to_adapter(wiphy);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- _queue *queue = &pmlmepriv->scanned_queue;
-
- DBG_871X("=>"FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
- DBG_871X("privacy=%d, key=%p, key_len=%d, key_idx=%d\n",
- sme->privacy, sme->key, sme->key_len, sme->key_idx);
-
-
- if(wdev_to_priv(padapter->rtw_wdev)->block == _TRUE)
- {
- ret = -EBUSY;
- DBG_871X("%s wdev_priv.block is set\n", __FUNCTION__);
- goto exit;
- }
-
-#ifdef CONFIG_PLATFORM_MSTAR_TITANIA12
- printk("MStar Android!\n");
- if((wdev_to_priv(padapter->rtw_wdev))->bandroid_scan == _FALSE)
- {
-#ifdef CONFIG_P2P
- struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
- if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
-#endif //CONFIG_P2P
- {
- ret = -EBUSY;
- printk("Android hasn't attached yet!\n");
- goto exit;
- }
- }
-#endif
-
- if(_FAIL == rtw_pwr_wakeup(padapter)) {
- ret= -EPERM;
- goto exit;
- }
-
- if(check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- ret = -EPERM;
- goto exit;
- }
-
-#ifdef CONFIG_CONCURRENT_MODE
- if (check_buddy_fwstate(padapter, _FW_UNDER_LINKING) == _TRUE) {
- DBG_8192C("%s, but buddy_intf is under linking\n", __FUNCTION__);
- ret = -EINVAL;
- goto exit;
- }
- if (check_buddy_fwstate(padapter, _FW_UNDER_SURVEY) == _TRUE) {
- rtw_scan_abort(padapter->pbuddy_adapter);
- }
-#endif
-
- if (!sme->ssid || !sme->ssid_len)
- {
- ret = -EINVAL;
- goto exit;
- }
-
- if (sme->ssid_len > IW_ESSID_MAX_SIZE){
-
- ret= -E2BIG;
- goto exit;
- }
-
-
- _rtw_memset(&ndis_ssid, 0, sizeof(NDIS_802_11_SSID));
- ndis_ssid.SsidLength = sme->ssid_len;
- _rtw_memcpy(ndis_ssid.Ssid, sme->ssid, sme->ssid_len);
-
- DBG_8192C("ssid=%s, len=%zu\n", ndis_ssid.Ssid, sme->ssid_len);
-
-
- if (sme->bssid)
- DBG_8192C("bssid="MAC_FMT"\n", MAC_ARG(sme->bssid));
-
-
- if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE) {
- ret = -EBUSY;
- DBG_8192C("%s, fw_state=0x%x, goto exit\n", __FUNCTION__, pmlmepriv->fw_state);
- goto exit;
- }
- if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) {
- rtw_scan_abort(padapter);
- }
-
- _enter_critical_bh(&queue->lock, &irqL);
-
- phead = get_list_head(queue);
- pmlmepriv->pscanned = get_next(phead);
-
- while (1)
- {
- if (rtw_end_of_queue_search(phead, pmlmepriv->pscanned) == _TRUE)
- {
- break;
- }
-
- pnetwork = LIST_CONTAINOR(pmlmepriv->pscanned, struct wlan_network, list);
- pmlmepriv->pscanned = get_next(pmlmepriv->pscanned);
-
- dst_ssid = pnetwork->network.Ssid.Ssid;
- dst_bssid = pnetwork->network.MacAddress;
-
- if(sme->bssid) {
- if(_rtw_memcmp(pnetwork->network.MacAddress, sme->bssid, ETH_ALEN) == _FALSE)
- continue;
- }
-
- if(sme->ssid && sme->ssid_len) {
- if( pnetwork->network.Ssid.SsidLength != sme->ssid_len
- || _rtw_memcmp(pnetwork->network.Ssid.Ssid, sme->ssid, sme->ssid_len) == _FALSE
- )
- continue;
- }
-
-
- if (sme->bssid)
- {
- src_bssid = sme->bssid;
-
- if ((_rtw_memcmp(dst_bssid, src_bssid, ETH_ALEN)) == _TRUE)
- {
- DBG_8192C("matched by bssid\n");
-
- ndis_ssid.SsidLength = pnetwork->network.Ssid.SsidLength;
- _rtw_memcpy(ndis_ssid.Ssid, pnetwork->network.Ssid.Ssid, pnetwork->network.Ssid.SsidLength);
-
- matched=_TRUE;
- break;
- }
-
- }
- else if (sme->ssid && sme->ssid_len)
- {
- src_ssid = ndis_ssid.Ssid;
-
- if ((_rtw_memcmp(dst_ssid, src_ssid, ndis_ssid.SsidLength) == _TRUE) &&
- (pnetwork->network.Ssid.SsidLength==ndis_ssid.SsidLength))
- {
- DBG_8192C("matched by ssid\n");
- matched=_TRUE;
- break;
- }
- }
-
- }
-
- _exit_critical_bh(&queue->lock, &irqL);
-
- if((matched == _FALSE) || (pnetwork== NULL))
- {
- ret = -ENOENT;
- DBG_8192C("connect, matched == _FALSE, goto exit\n");
- goto exit;
- }
-
-
- if (rtw_set_802_11_infrastructure_mode(padapter, pnetwork->network.InfrastructureMode) == _FALSE)
- {
- ret = -EPERM;
- goto exit;
- }
-
- psecuritypriv->ndisencryptstatus = Ndis802_11EncryptionDisabled;
- psecuritypriv->dot11PrivacyAlgrthm = _NO_PRIVACY_;
- psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
- psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open; //open system
- psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
-
-#ifdef CONFIG_WAPI_SUPPORT
- padapter->wapiInfo.bWapiEnable = false;
-#endif
-
- ret = rtw_cfg80211_set_wpa_version(psecuritypriv, sme->crypto.wpa_versions);
- if (ret < 0)
- goto exit;
-
-#ifdef CONFIG_WAPI_SUPPORT
- if(sme->crypto.wpa_versions & NL80211_WAPI_VERSION_1)
- {
- padapter->wapiInfo.bWapiEnable = true;
- padapter->wapiInfo.extra_prefix_len = WAPI_EXT_LEN;
- padapter->wapiInfo.extra_postfix_len = SMS4_MIC_LEN;
- }
-#endif
-
- ret = rtw_cfg80211_set_auth_type(psecuritypriv, sme->auth_type);
-
-#ifdef CONFIG_WAPI_SUPPORT
- if(psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_WAPI)
- padapter->mlmeextpriv.mlmext_info.auth_algo = psecuritypriv->dot11AuthAlgrthm;
-#endif
-
-
- if (ret < 0)
- goto exit;
-
- DBG_8192C("%s, ie_len=%zu\n", __func__, sme->ie_len);
-
- ret = rtw_cfg80211_set_wpa_ie(padapter, sme->ie, sme->ie_len);
- if (ret < 0)
- goto exit;
-
- if (sme->crypto.n_ciphers_pairwise) {
- ret = rtw_cfg80211_set_cipher(psecuritypriv, sme->crypto.ciphers_pairwise[0], _TRUE);
- if (ret < 0)
- goto exit;
- }
-
- //For WEP Shared auth
- if((psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_Shared
- || psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_Auto) && sme->key
- )
- {
- u32 wep_key_idx, wep_key_len,wep_total_len;
- NDIS_802_11_WEP *pwep = NULL;
- DBG_871X("%s(): Shared/Auto WEP\n",__FUNCTION__);
-
- wep_key_idx = sme->key_idx;
- wep_key_len = sme->key_len;
-
- if (sme->key_idx > WEP_KEYS) {
- ret = -EINVAL;
- goto exit;
- }
-
- if (wep_key_len > 0)
- {
- wep_key_len = wep_key_len <= 5 ? 5 : 13;
- wep_total_len = wep_key_len + FIELD_OFFSET(NDIS_802_11_WEP, KeyMaterial);
- pwep =(NDIS_802_11_WEP *) rtw_malloc(wep_total_len);
- if(pwep == NULL){
- DBG_871X(" wpa_set_encryption: pwep allocate fail !!!\n");
- ret = -ENOMEM;
- goto exit;
- }
-
- _rtw_memset(pwep, 0, wep_total_len);
-
- pwep->KeyLength = wep_key_len;
- pwep->Length = wep_total_len;
-
- if(wep_key_len==13)
- {
- padapter->securitypriv.dot11PrivacyAlgrthm=_WEP104_;
- padapter->securitypriv.dot118021XGrpPrivacy=_WEP104_;
- }
- }
- else {
- ret = -EINVAL;
- goto exit;
- }
-
- pwep->KeyIndex = wep_key_idx;
- pwep->KeyIndex |= 0x80000000;
-
- _rtw_memcpy(pwep->KeyMaterial, (void *)sme->key, pwep->KeyLength);
-
- if(rtw_set_802_11_add_wep(padapter, pwep) == (u8)_FAIL)
- {
- ret = -EOPNOTSUPP ;
- }
-
- if (pwep) {
- rtw_mfree((u8 *)pwep,wep_total_len);
- }
-
- if(ret < 0)
- goto exit;
- }
-
- ret = rtw_cfg80211_set_cipher(psecuritypriv, sme->crypto.cipher_group, _FALSE);
- if (ret < 0)
- return ret;
-
- if (sme->crypto.n_akm_suites) {
- ret = rtw_cfg80211_set_key_mgt(psecuritypriv, sme->crypto.akm_suites[0]);
- if (ret < 0)
- goto exit;
- }
-
-#ifdef CONFIG_WAPI_SUPPORT
- if(sme->crypto.akm_suites[0] ==WLAN_AKM_SUITE_WAPI_PSK){
- padapter->wapiInfo.bWapiPSK = true;
- }
- else if(sme->crypto.akm_suites[0] ==WLAN_AKM_SUITE_WAPI_CERT){
- padapter->wapiInfo.bWapiPSK = false;
- }
-#endif
-
- authmode = psecuritypriv->ndisauthtype;
- rtw_set_802_11_authentication_mode(padapter, authmode);
-
- //rtw_set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus);
-
- if (rtw_set_802_11_ssid(padapter, &ndis_ssid) == _FALSE) {
- ret = -1;
- goto exit;
- }
-
-
- DBG_8192C("set ssid:dot11AuthAlgrthm=%d, dot11PrivacyAlgrthm=%d, dot118021XGrpPrivacy=%d\n", psecuritypriv->dot11AuthAlgrthm, psecuritypriv->dot11PrivacyAlgrthm, psecuritypriv->dot118021XGrpPrivacy);
-
-exit:
-
- DBG_8192C("<=%s, ret %d\n",__FUNCTION__, ret);
-
- return ret;
-}
-
-static int cfg80211_rtw_disconnect(struct wiphy *wiphy, struct net_device *ndev,
- u16 reason_code)
-{
- _adapter *padapter = wiphy_to_adapter(wiphy);
-
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
-
- rtw_set_roaming(padapter, 0);
-
- if(check_fwstate(&padapter->mlmepriv, _FW_LINKED))
- {
- rtw_scan_abort(padapter);
- LeaveAllPowerSaveMode(padapter);
- rtw_disassoc_cmd(padapter, 500, _FALSE);
-
- DBG_871X("%s...call rtw_indicate_disconnect\n", __FUNCTION__);
-
- padapter->mlmepriv.not_indic_disco = _TRUE;
- rtw_indicate_disconnect(padapter);
- padapter->mlmepriv.not_indic_disco = _FALSE;
-
- rtw_free_assoc_resources(padapter, 1);
- }
-
- return 0;
-}
-
-static int cfg80211_rtw_set_txpower(struct wiphy *wiphy,
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
- struct wireless_dev *wdev,
-#endif
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) || defined(COMPAT_KERNEL_RELEASE)
- enum nl80211_tx_power_setting type, int mbm)
-#else
- enum tx_power_setting type, int dbm)
-#endif
-{
-#if 0
- struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
- int ret;
-
- switch (type) {
- case NL80211_TX_POWER_AUTOMATIC:
- return 0;
- case NL80211_TX_POWER_FIXED:
- if (mbm < 0 || (mbm % 100))
- return -EOPNOTSUPP;
-
- if (!test_bit(IWM_STATUS_READY, &iwm->status))
- return 0;
-
- ret = iwm_umac_set_config_fix(iwm, UMAC_PARAM_TBL_CFG_FIX,
- CFG_TX_PWR_LIMIT_USR,
- MBM_TO_DBM(mbm) * 2);
- if (ret < 0)
- return ret;
-
- return iwm_tx_power_trigger(iwm);
- default:
- IWM_ERR(iwm, "Unsupported power type: %d\n", type);
- return -EOPNOTSUPP;
- }
-#endif
- DBG_8192C("%s\n", __func__);
- return 0;
-}
-
-static int cfg80211_rtw_get_txpower(struct wiphy *wiphy,
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
- struct wireless_dev *wdev,
-#endif
- int *dbm)
-{
- //_adapter *padapter = wiphy_to_adapter(wiphy);
-
- DBG_8192C("%s\n", __func__);
-
- *dbm = (12);
-
- return 0;
-}
-
-inline bool rtw_cfg80211_pwr_mgmt(_adapter *adapter)
-{
- struct rtw_wdev_priv *rtw_wdev_priv = wdev_to_priv(adapter->rtw_wdev);
- return rtw_wdev_priv->power_mgmt;
-}
-
-static int cfg80211_rtw_set_power_mgmt(struct wiphy *wiphy,
- struct net_device *ndev,
- bool enabled, int timeout)
-{
- _adapter *padapter = wiphy_to_adapter(wiphy);
- struct rtw_wdev_priv *rtw_wdev_priv = wdev_to_priv(padapter->rtw_wdev);
-
- DBG_871X(FUNC_NDEV_FMT" enabled:%u, timeout:%d\n", FUNC_NDEV_ARG(ndev),
- enabled, timeout);
-
- rtw_wdev_priv->power_mgmt = enabled;
-
- #ifdef CONFIG_LPS
- if (!enabled)
- LPS_Leave(padapter);
- #endif
-
- return 0;
-}
-
-static int cfg80211_rtw_set_pmksa(struct wiphy *wiphy,
- struct net_device *netdev,
- struct cfg80211_pmksa *pmksa)
-{
- u8 index,blInserted = _FALSE;
- _adapter *padapter = wiphy_to_adapter(wiphy);
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- u8 strZeroMacAddress[ ETH_ALEN ] = { 0x00 };
-
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(netdev));
-
- if ( _rtw_memcmp( pmksa->bssid, strZeroMacAddress, ETH_ALEN ) == _TRUE )
- {
- return -EINVAL;
- }
-
- blInserted = _FALSE;
-
- //overwrite PMKID
- for(index=0 ; index<NUM_PMKID_CACHE; index++)
- {
- if( _rtw_memcmp( psecuritypriv->PMKIDList[index].Bssid, pmksa->bssid, ETH_ALEN) ==_TRUE )
- { // BSSID is matched, the same AP => rewrite with new PMKID.
- DBG_871X(FUNC_NDEV_FMT" BSSID exists in the PMKList.\n", FUNC_NDEV_ARG(netdev));
-
- _rtw_memcpy( psecuritypriv->PMKIDList[index].PMKID, pmksa->pmkid, WLAN_PMKID_LEN);
- psecuritypriv->PMKIDList[index].bUsed = _TRUE;
- psecuritypriv->PMKIDIndex = index+1;
- blInserted = _TRUE;
- break;
- }
- }
-
- if(!blInserted)
- {
- // Find a new entry
- DBG_871X(FUNC_NDEV_FMT" Use the new entry index = %d for this PMKID.\n",
- FUNC_NDEV_ARG(netdev), psecuritypriv->PMKIDIndex );
-
- _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].Bssid, pmksa->bssid, ETH_ALEN);
- _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].PMKID, pmksa->pmkid, WLAN_PMKID_LEN);
-
- psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].bUsed = _TRUE;
- psecuritypriv->PMKIDIndex++ ;
- if(psecuritypriv->PMKIDIndex==16)
- {
- psecuritypriv->PMKIDIndex =0;
- }
- }
-
- return 0;
-}
-
-static int cfg80211_rtw_del_pmksa(struct wiphy *wiphy,
- struct net_device *netdev,
- struct cfg80211_pmksa *pmksa)
-{
- u8 index, bMatched = _FALSE;
- _adapter *padapter = wiphy_to_adapter(wiphy);
- struct security_priv *psecuritypriv = &padapter->securitypriv;
-
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(netdev));
-
- for(index=0 ; index<NUM_PMKID_CACHE; index++)
- {
- if( _rtw_memcmp( psecuritypriv->PMKIDList[index].Bssid, pmksa->bssid, ETH_ALEN) ==_TRUE )
- { // BSSID is matched, the same AP => Remove this PMKID information and reset it.
- _rtw_memset( psecuritypriv->PMKIDList[index].Bssid, 0x00, ETH_ALEN );
- _rtw_memset( psecuritypriv->PMKIDList[index].PMKID, 0x00, WLAN_PMKID_LEN );
- psecuritypriv->PMKIDList[index].bUsed = _FALSE;
- bMatched = _TRUE;
- break;
- }
- }
-
- if(_FALSE == bMatched)
- {
- DBG_871X(FUNC_NDEV_FMT" do not have matched BSSID\n"
- , FUNC_NDEV_ARG(netdev));
- return -EINVAL;
- }
-
- return 0;
-}
-
-static int cfg80211_rtw_flush_pmksa(struct wiphy *wiphy,
- struct net_device *netdev)
-{
- _adapter *padapter = wiphy_to_adapter(wiphy);
- struct security_priv *psecuritypriv = &padapter->securitypriv;
-
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(netdev));
-
- _rtw_memset( &psecuritypriv->PMKIDList[ 0 ], 0x00, sizeof( RT_PMKID_LIST ) * NUM_PMKID_CACHE );
- psecuritypriv->PMKIDIndex = 0;
-
- return 0;
-}
-
-#ifdef CONFIG_AP_MODE
-void rtw_cfg80211_indicate_sta_assoc(_adapter *padapter, u8 *pmgmt_frame, uint frame_len)
-{
- s32 freq;
- int channel;
- struct wireless_dev *pwdev = padapter->rtw_wdev;
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct net_device *ndev = padapter->pnetdev;
-
- DBG_8192C("%s(padapter=%p,%s)\n", __func__, padapter, ndev->name);
-
-#if defined(RTW_USE_CFG80211_STA_EVENT) || defined(COMPAT_KERNEL_RELEASE)
- {
- struct station_info sinfo;
- u8 ie_offset;
- if (GetFrameSubType(pmgmt_frame) == WIFI_ASSOCREQ)
- ie_offset = _ASOCREQ_IE_OFFSET_;
- else // WIFI_REASSOCREQ
- ie_offset = _REASOCREQ_IE_OFFSET_;
-
- sinfo.filled = 0;
- sinfo.filled = STATION_INFO_ASSOC_REQ_IES;
- sinfo.assoc_req_ies = pmgmt_frame + WLAN_HDR_A3_LEN + ie_offset;
- sinfo.assoc_req_ies_len = frame_len - WLAN_HDR_A3_LEN - ie_offset;
- cfg80211_new_sta(ndev, GetAddr2Ptr(pmgmt_frame), &sinfo, GFP_ATOMIC);
- }
-#else /* defined(RTW_USE_CFG80211_STA_EVENT) */
- channel = pmlmeext->cur_channel;
- if (channel <= RTW_CH_MAX_2G_CHANNEL)
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
- else
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
-
- #ifdef COMPAT_KERNEL_RELEASE
- rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
- #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
- rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
- #else //COMPAT_KERNEL_RELEASE
- {
- //to avoid WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION) when calling cfg80211_send_rx_assoc()
- #ifndef CONFIG_PLATFORM_MSTAR_TITANIA12
- pwdev->iftype = NL80211_IFTYPE_STATION;
- #endif //CONFIG_PLATFORM_MSTAR_TITANIA12
- DBG_8192C("iftype=%d before call cfg80211_send_rx_assoc()\n", pwdev->iftype);
- rtw_cfg80211_send_rx_assoc(padapter, NULL, pmgmt_frame, frame_len);
- DBG_8192C("iftype=%d after call cfg80211_send_rx_assoc()\n", pwdev->iftype);
- pwdev->iftype = NL80211_IFTYPE_AP;
- //cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
- }
- #endif //COMPAT_KERNEL_RELEASE
-#endif /* defined(RTW_USE_CFG80211_STA_EVENT) */
-
-}
-
-void rtw_cfg80211_indicate_sta_disassoc(_adapter *padapter, unsigned char *da, unsigned short reason)
-{
- s32 freq;
- int channel;
- u8 *pmgmt_frame;
- uint frame_len;
- struct rtw_ieee80211_hdr *pwlanhdr;
- unsigned short *fctrl;
- u8 mgmt_buf[128] = {0};
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- struct net_device *ndev = padapter->pnetdev;
-
- DBG_8192C("%s(padapter=%p,%s)\n", __func__, padapter, ndev->name);
-
-#if defined(RTW_USE_CFG80211_STA_EVENT) || defined(COMPAT_KERNEL_RELEASE)
- cfg80211_del_sta(ndev, da, GFP_ATOMIC);
-#else /* defined(RTW_USE_CFG80211_STA_EVENT) */
- channel = pmlmeext->cur_channel;
- if (channel <= RTW_CH_MAX_2G_CHANNEL)
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
- else
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
-
- pmgmt_frame = mgmt_buf;
- pwlanhdr = (struct rtw_ieee80211_hdr *)pmgmt_frame;
-
- fctrl = &(pwlanhdr->frame_ctl);
- *(fctrl) = 0;
-
- //_rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
- //_rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr1, myid(&(padapter->eeprompriv)), ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr2, da, ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
-
- SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
- pmlmeext->mgnt_seq++;
- SetFrameSubType(pmgmt_frame, WIFI_DEAUTH);
-
- pmgmt_frame += sizeof(struct rtw_ieee80211_hdr_3addr);
- frame_len = sizeof(struct rtw_ieee80211_hdr_3addr);
-
- reason = cpu_to_le16(reason);
- pmgmt_frame = rtw_set_fixed_ie(pmgmt_frame, _RSON_CODE_ , (unsigned char *)&reason, &frame_len);
-
- #ifdef COMPAT_KERNEL_RELEASE
- rtw_cfg80211_rx_mgmt(padapter, freq, 0, mgmt_buf, frame_len, GFP_ATOMIC);
- #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
- rtw_cfg80211_rx_mgmt(padapter, freq, 0, mgmt_buf, frame_len, GFP_ATOMIC);
- #else //COMPAT_KERNEL_RELEASE
- cfg80211_send_disassoc(padapter->pnetdev, mgmt_buf, frame_len);
- //cfg80211_rx_action(padapter->pnetdev, freq, mgmt_buf, frame_len, GFP_ATOMIC);
- #endif //COMPAT_KERNEL_RELEASE
-#endif /* defined(RTW_USE_CFG80211_STA_EVENT) */
-}
-
-static int rtw_cfg80211_monitor_if_open(struct net_device *ndev)
-{
- int ret = 0;
-
- DBG_8192C("%s\n", __func__);
-
- return ret;
-}
-
-static int rtw_cfg80211_monitor_if_close(struct net_device *ndev)
-{
- int ret = 0;
-
- DBG_8192C("%s\n", __func__);
-
- return ret;
-}
-
-static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb, struct net_device *ndev)
-{
- int ret = 0;
- int rtap_len;
- int qos_len = 0;
- int dot11_hdr_len = 24;
- int snap_len = 6;
- unsigned char *pdata;
- u16 frame_ctl;
- unsigned char src_mac_addr[6];
- unsigned char dst_mac_addr[6];
- struct ieee80211_hdr *dot11_hdr;
- struct ieee80211_radiotap_header *rtap_hdr;
- _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
-
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
-
- if (unlikely(skb->len < sizeof(struct ieee80211_radiotap_header)))
- goto fail;
-
- rtap_hdr = (struct ieee80211_radiotap_header *)skb->data;
- if (unlikely(rtap_hdr->it_version))
- goto fail;
-
- rtap_len = ieee80211_get_radiotap_len(skb->data);
- if (unlikely(skb->len < rtap_len))
- goto fail;
-
- if(rtap_len != 14)
- {
- DBG_8192C("radiotap len (should be 14): %d\n", rtap_len);
- goto fail;
- }
-
- /* Skip the ratio tap header */
- skb_pull(skb, rtap_len);
-
- dot11_hdr = (struct ieee80211_hdr *)skb->data;
- frame_ctl = le16_to_cpu(dot11_hdr->frame_control);
- /* Check if the QoS bit is set */
- if ((frame_ctl & RTW_IEEE80211_FCTL_FTYPE) == RTW_IEEE80211_FTYPE_DATA) {
- /* Check if this ia a Wireless Distribution System (WDS) frame
- * which has 4 MAC addresses
- */
- if (dot11_hdr->frame_control & 0x0080)
- qos_len = 2;
- if ((dot11_hdr->frame_control & 0x0300) == 0x0300)
- dot11_hdr_len += 6;
-
- memcpy(dst_mac_addr, dot11_hdr->addr1, sizeof(dst_mac_addr));
- memcpy(src_mac_addr, dot11_hdr->addr2, sizeof(src_mac_addr));
-
- /* Skip the 802.11 header, QoS (if any) and SNAP, but leave spaces for
- * for two MAC addresses
- */
- skb_pull(skb, dot11_hdr_len + qos_len + snap_len - sizeof(src_mac_addr) * 2);
- pdata = (unsigned char*)skb->data;
- memcpy(pdata, dst_mac_addr, sizeof(dst_mac_addr));
- memcpy(pdata + sizeof(dst_mac_addr), src_mac_addr, sizeof(src_mac_addr));
-
- DBG_8192C("should be eapol packet\n");
-
- /* Use the real net device to transmit the packet */
- ret = rtw_xmit_entry(skb, padapter->pnetdev);
-
- return ret;
-
- }
- else if ((frame_ctl & (RTW_IEEE80211_FCTL_FTYPE|RTW_IEEE80211_FCTL_STYPE))
- == (RTW_IEEE80211_FTYPE_MGMT|RTW_IEEE80211_STYPE_ACTION)
- )
- {
- //only for action frames
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- unsigned char *pframe;
- //u8 category, action, OUI_Subtype, dialogToken=0;
- //unsigned char *frame_body;
- struct rtw_ieee80211_hdr *pwlanhdr;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- u8 *buf = skb->data;
- u32 len = skb->len;
- u8 category, action;
- int type = -1;
-
- if (rtw_action_frame_parse(buf, len, &category, &action) == _FALSE) {
- DBG_8192C(FUNC_NDEV_FMT" frame_control:0x%x\n", FUNC_NDEV_ARG(ndev),
- le16_to_cpu(((struct rtw_ieee80211_hdr_3addr *)buf)->frame_ctl));
- goto fail;
- }
-
- DBG_8192C("RTW_Tx:da="MAC_FMT" via "FUNC_NDEV_FMT"\n",
- MAC_ARG(GetAddr1Ptr(buf)), FUNC_NDEV_ARG(ndev));
- #ifdef CONFIG_P2P
- if((type = rtw_p2p_check_frames(padapter, buf, len, _TRUE)) >= 0)
- goto dump;
- #endif
- if (category == RTW_WLAN_CATEGORY_PUBLIC)
- DBG_871X("RTW_Tx:%s\n", action_public_str(action));
- else
- DBG_871X("RTW_Tx:category(%u), action(%u)\n", category, action);
-
-dump:
- //starting alloc mgmt frame to dump it
- if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
- {
- goto fail;
- }
-
- //update attribute
- pattrib = &pmgntframe->attrib;
- update_mgntframe_attrib(padapter, pattrib);
- pattrib->retry_ctrl = _FALSE;
-
- _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
- pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-
- _rtw_memcpy(pframe, (void*)buf, len);
- #ifdef CONFIG_WFD
- if (type >= 0)
- {
- struct wifi_display_info *pwfd_info;
-
- pwfd_info = padapter->wdinfo.wfd_info;
-
- if ( _TRUE == pwfd_info->wfd_enable )
- {
- rtw_append_wfd_ie( padapter, pframe, &len );
- }
- }
- #endif // CONFIG_WFD
- pattrib->pktlen = len;
-
- pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
- //update seq number
- pmlmeext->mgnt_seq = GetSequence(pwlanhdr);
- pattrib->seqnum = pmlmeext->mgnt_seq;
- pmlmeext->mgnt_seq++;
-
-
- pattrib->last_txcmdsz = pattrib->pktlen;
-
- dump_mgntframe(padapter, pmgntframe);
-
- }
- else
- {
- DBG_8192C("frame_ctl=0x%x\n", frame_ctl & (RTW_IEEE80211_FCTL_FTYPE|RTW_IEEE80211_FCTL_STYPE));
- }
-
-
-fail:
-
- dev_kfree_skb(skb);
-
- return 0;
-
-}
-
-static void rtw_cfg80211_monitor_if_set_multicast_list(struct net_device *ndev)
-{
- DBG_8192C("%s\n", __func__);
-}
-
-static int rtw_cfg80211_monitor_if_set_mac_address(struct net_device *ndev, void *addr)
-{
- int ret = 0;
-
- DBG_8192C("%s\n", __func__);
-
- return ret;
-}
-
-#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
-static const struct net_device_ops rtw_cfg80211_monitor_if_ops = {
- .ndo_open = rtw_cfg80211_monitor_if_open,
- .ndo_stop = rtw_cfg80211_monitor_if_close,
- .ndo_start_xmit = rtw_cfg80211_monitor_if_xmit_entry,
- #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0))
- .ndo_set_multicast_list = rtw_cfg80211_monitor_if_set_multicast_list,
- #endif
- .ndo_set_mac_address = rtw_cfg80211_monitor_if_set_mac_address,
-};
-#endif
-
-static int rtw_cfg80211_add_monitor_if(_adapter *padapter, char *name, struct net_device **ndev)
-{
- int ret = 0;
- struct net_device* mon_ndev = NULL;
- struct wireless_dev* mon_wdev = NULL;
- struct rtw_netdev_priv_indicator *pnpi;
- struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
-
- if (!name ) {
- DBG_871X(FUNC_ADPT_FMT" without specific name\n", FUNC_ADPT_ARG(padapter));
- ret = -EINVAL;
- goto out;
- }
-
- if (pwdev_priv->pmon_ndev) {
- DBG_871X(FUNC_ADPT_FMT" monitor interface exist: "NDEV_FMT"\n",
- FUNC_ADPT_ARG(padapter), NDEV_ARG(pwdev_priv->pmon_ndev));
- ret = -EBUSY;
- goto out;
- }
-
- mon_ndev = alloc_etherdev(sizeof(struct rtw_netdev_priv_indicator));
- if (!mon_ndev) {
- DBG_871X(FUNC_ADPT_FMT" allocate ndev fail\n", FUNC_ADPT_ARG(padapter));
- ret = -ENOMEM;
- goto out;
- }
-
- mon_ndev->type = ARPHRD_IEEE80211_RADIOTAP;
- strncpy(mon_ndev->name, name, IFNAMSIZ);
- mon_ndev->name[IFNAMSIZ - 1] = 0;
- mon_ndev->destructor = rtw_ndev_destructor;
-
-#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
- mon_ndev->netdev_ops = &rtw_cfg80211_monitor_if_ops;
-#else
- mon_ndev->open = rtw_cfg80211_monitor_if_open;
- mon_ndev->stop = rtw_cfg80211_monitor_if_close;
- mon_ndev->hard_start_xmit = rtw_cfg80211_monitor_if_xmit_entry;
- mon_ndev->set_mac_address = rtw_cfg80211_monitor_if_set_mac_address;
-#endif
-
- pnpi = netdev_priv(mon_ndev);
- pnpi->priv = padapter;
- pnpi->sizeof_priv = sizeof(_adapter);
-
- /* wdev */
- mon_wdev = (struct wireless_dev *)rtw_zmalloc(sizeof(struct wireless_dev));
- if (!mon_wdev) {
- DBG_871X(FUNC_ADPT_FMT" allocate mon_wdev fail\n", FUNC_ADPT_ARG(padapter));
- ret = -ENOMEM;
- goto out;
- }
-
- mon_wdev->wiphy = padapter->rtw_wdev->wiphy;
- mon_wdev->netdev = mon_ndev;
- mon_wdev->iftype = NL80211_IFTYPE_MONITOR;
- mon_ndev->ieee80211_ptr = mon_wdev;
-
- ret = register_netdevice(mon_ndev);
- if (ret) {
- goto out;
- }
-
- *ndev = pwdev_priv->pmon_ndev = mon_ndev;
- _rtw_memcpy(pwdev_priv->ifname_mon, name, IFNAMSIZ+1);
-
-out:
- if (ret && mon_wdev) {
- rtw_mfree((u8*)mon_wdev, sizeof(struct wireless_dev));
- mon_wdev = NULL;
- }
-
- if (ret && mon_ndev) {
- free_netdev(mon_ndev);
- *ndev = mon_ndev = NULL;
- }
-
- return ret;
-}
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
-static struct wireless_dev *
-#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
-static struct net_device *
-#else
-static int
-#endif
- cfg80211_rtw_add_virtual_intf(
- struct wiphy *wiphy,
- #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0))
- const char *name,
- #else
- char *name,
- #endif
- enum nl80211_iftype type, u32 *flags, struct vif_params *params)
-{
- int ret = 0;
- struct net_device* ndev = NULL;
- _adapter *padapter = wiphy_to_adapter(wiphy);
-
- DBG_871X(FUNC_ADPT_FMT " wiphy:%s, name:%s, type:%d\n",
- FUNC_ADPT_ARG(padapter), wiphy_name(wiphy), name, type);
-
- switch (type) {
- case NL80211_IFTYPE_ADHOC:
- case NL80211_IFTYPE_AP_VLAN:
- case NL80211_IFTYPE_WDS:
- case NL80211_IFTYPE_MESH_POINT:
- ret = -ENODEV;
- break;
- case NL80211_IFTYPE_MONITOR:
- ret = rtw_cfg80211_add_monitor_if(padapter, (char *)name, &ndev);
- break;
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- case NL80211_IFTYPE_P2P_CLIENT:
-#endif
- case NL80211_IFTYPE_STATION:
- ret = -ENODEV;
- break;
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- case NL80211_IFTYPE_P2P_GO:
-#endif
- case NL80211_IFTYPE_AP:
- ret = -ENODEV;
- break;
- default:
- ret = -ENODEV;
- DBG_871X("Unsupported interface type\n");
- break;
- }
-
- DBG_871X(FUNC_ADPT_FMT" ndev:%p, ret:%d\n", FUNC_ADPT_ARG(padapter), ndev, ret);
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
- return ndev ? ndev->ieee80211_ptr : ERR_PTR(ret);
-#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
- return ndev ? ndev : ERR_PTR(ret);
-#else
- return ret;
-#endif
-}
-
-static int cfg80211_rtw_del_virtual_intf(struct wiphy *wiphy,
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
- struct wireless_dev *wdev
-#else
- struct net_device *ndev
-#endif
-)
-{
- struct rtw_wdev_priv *pwdev_priv = (struct rtw_wdev_priv *)wiphy_priv(wiphy);
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
- struct net_device *ndev;
- ndev = wdev ? wdev->netdev : NULL;
-#endif
-
- if (!ndev)
- goto exit;
-
- unregister_netdevice(ndev);
-
- if (ndev == pwdev_priv->pmon_ndev) {
- pwdev_priv->pmon_ndev = NULL;
- pwdev_priv->ifname_mon[0] = '\0';
- DBG_871X(FUNC_NDEV_FMT" remove monitor interface\n", FUNC_NDEV_ARG(ndev));
- }
-
-exit:
- return 0;
-}
-
-static int rtw_add_beacon(_adapter *adapter, const u8 *head, size_t head_len, const u8 *tail, size_t tail_len)
-{
- int ret=0;
- u8 *pbuf = NULL;
- uint len, wps_ielen=0;
- uint p2p_ielen=0;
- u8 *p2p_ie;
- u8 got_p2p_ie = _FALSE;
- struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
- //struct sta_priv *pstapriv = &padapter->stapriv;
-
-
- DBG_8192C("%s beacon_head_len=%zu, beacon_tail_len=%zu\n", __FUNCTION__, head_len, tail_len);
-
-
- if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
- return -EINVAL;
-
- if(head_len<24)
- return -EINVAL;
-
-
- pbuf = rtw_zmalloc(head_len+tail_len);
- if(!pbuf)
- return -ENOMEM;
-
-
- //_rtw_memcpy(&pstapriv->max_num_sta, param->u.bcn_ie.reserved, 2);
-
- //if((pstapriv->max_num_sta>NUM_STA) || (pstapriv->max_num_sta<=0))
- // pstapriv->max_num_sta = NUM_STA;
-
-
- _rtw_memcpy(pbuf, (void *)head+24, head_len-24);// 24=beacon header len.
- _rtw_memcpy(pbuf+head_len-24, (void *)tail, tail_len);
-
- len = head_len+tail_len-24;
-
- //check wps ie if inclued
- if(rtw_get_wps_ie(pbuf+_FIXED_IE_LENGTH_, len-_FIXED_IE_LENGTH_, NULL, &wps_ielen))
- DBG_8192C("add bcn, wps_ielen=%d\n", wps_ielen);
-
-#ifdef CONFIG_P2P
- //check p2p ie if inclued
- if(rtw_get_p2p_ie(pbuf+_FIXED_IE_LENGTH_, len-_FIXED_IE_LENGTH_, NULL, &p2p_ielen))
- {
- DBG_8192C("got p2p_ie, len=%d\n", p2p_ielen);
- got_p2p_ie = _TRUE;
- }
-#endif
-
- /* pbss_network->IEs will not include p2p_ie, wfd ie */
- rtw_ies_remove_ie(pbuf, &len, _BEACON_IE_OFFSET_, _VENDOR_SPECIFIC_IE_, P2P_OUI, 4);
- rtw_ies_remove_ie(pbuf, &len, _BEACON_IE_OFFSET_, _VENDOR_SPECIFIC_IE_, WFD_OUI, 4);
-
- if (rtw_check_beacon_data(adapter, pbuf, len) == _SUCCESS) {
-#ifdef CONFIG_P2P
- //check p2p if enable
- if(got_p2p_ie == _TRUE)
- {
- struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
- struct wifidirect_info *pwdinfo= &(adapter->wdinfo);
-
- if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
- {
- DBG_8192C("Enable P2P function for the first time\n");
- rtw_p2p_enable(adapter, P2P_ROLE_GO);
- wdev_to_priv(adapter->rtw_wdev)->p2p_enabled = _TRUE;
- }
- else
- {
- _cancel_timer_ex( &pwdinfo->find_phase_timer );
- _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
- _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
-
- DBG_8192C("enter GO Mode, p2p_ielen=%d\n", p2p_ielen);
-
- rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
- rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
- pwdinfo->intent = 15;
- }
-
- pwdinfo->operating_channel = pmlmeext->cur_channel;
-
- }
-#endif //CONFIG_P2P
-
- ret = 0;
-
- }
- else
- {
- ret = -EINVAL;
- }
-
-
- rtw_mfree(pbuf, head_len+tail_len);
-
- return ret;
-}
-
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) && !defined(COMPAT_KERNEL_RELEASE)
-static int cfg80211_rtw_add_beacon(struct wiphy *wiphy, struct net_device *ndev,
- struct beacon_parameters *info)
-{
- int ret=0;
- _adapter *adapter = wiphy_to_adapter(wiphy);
-
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
- ret = rtw_add_beacon(adapter, info->head, info->head_len, info->tail, info->tail_len);
-
- return ret;
-}
-
-static int cfg80211_rtw_set_beacon(struct wiphy *wiphy, struct net_device *ndev,
- struct beacon_parameters *info)
-{
- _adapter *padapter = wiphy_to_adapter(wiphy);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
-
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
-
- pmlmeext->bstart_bss = _TRUE;
-
- cfg80211_rtw_add_beacon(wiphy, ndev, info);
-
- return 0;
-}
-
-static int cfg80211_rtw_del_beacon(struct wiphy *wiphy, struct net_device *ndev)
-{
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
-
- return 0;
-}
-#else
-static int cfg80211_rtw_start_ap(struct wiphy *wiphy, struct net_device *ndev,
- struct cfg80211_ap_settings *settings)
-{
- int ret = 0;
- _adapter *adapter = wiphy_to_adapter(wiphy);
-
- DBG_871X(FUNC_NDEV_FMT" hidden_ssid:%d, auth_type:%d\n", FUNC_NDEV_ARG(ndev),
- settings->hidden_ssid, settings->auth_type);
-
- ret = rtw_add_beacon(adapter, settings->beacon.head, settings->beacon.head_len,
- settings->beacon.tail, settings->beacon.tail_len);
-
- adapter->mlmeextpriv.mlmext_info.hidden_ssid_mode = settings->hidden_ssid;
-
- if (settings->ssid && settings->ssid_len) {
- WLAN_BSSID_EX *pbss_network = &adapter->mlmepriv.cur_network.network;
- WLAN_BSSID_EX *pbss_network_ext = &adapter->mlmeextpriv.mlmext_info.network;
-
- if(0)
- DBG_871X(FUNC_ADPT_FMT" ssid:(%s,%d), from ie:(%s,%d)\n", FUNC_ADPT_ARG(adapter),
- settings->ssid, settings->ssid_len,
- pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength);
-
- _rtw_memcpy(pbss_network->Ssid.Ssid, (void *)settings->ssid, settings->ssid_len);
- pbss_network->Ssid.SsidLength = settings->ssid_len;
- _rtw_memcpy(pbss_network_ext->Ssid.Ssid, (void *)settings->ssid, settings->ssid_len);
- pbss_network_ext->Ssid.SsidLength = settings->ssid_len;
-
- if(0)
- DBG_871X(FUNC_ADPT_FMT" after ssid:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),
- pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,
- pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);
- }
-
- return ret;
-}
-
-static int cfg80211_rtw_change_beacon(struct wiphy *wiphy, struct net_device *ndev,
- struct cfg80211_beacon_data *info)
-{
- int ret = 0;
- _adapter *adapter = wiphy_to_adapter(wiphy);
-
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
-
- ret = rtw_add_beacon(adapter, info->head, info->head_len, info->tail, info->tail_len);
-
- return ret;
-}
-
-static int cfg80211_rtw_stop_ap(struct wiphy *wiphy, struct net_device *ndev)
-{
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
- return 0;
-}
-
-#endif //(LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0))
-
-static int cfg80211_rtw_add_station(struct wiphy *wiphy, struct net_device *ndev,
- u8 *mac, struct station_parameters *params)
-{
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
-
- return 0;
-}
-
-static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev,
- u8 *mac)
-{
- int ret=0;
- _irqL irqL;
- _list *phead, *plist;
- u8 updated;
- struct sta_info *psta = NULL;
- _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct sta_priv *pstapriv = &padapter->stapriv;
-
- DBG_871X("+"FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
-
- if(check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != _TRUE)
- {
- DBG_8192C("%s, fw_state != FW_LINKED|WIFI_AP_STATE\n", __func__);
- return -EINVAL;
- }
-
-
- if(!mac)
- {
- DBG_8192C("flush all sta, and cam_entry\n");
-
- flush_all_cam_entry(padapter); //clear CAM
-
- ret = rtw_sta_flush(padapter);
-
- return ret;
- }
-
-
- DBG_8192C("free sta macaddr =" MAC_FMT "\n", MAC_ARG(mac));
-
- if (mac[0] == 0xff && mac[1] == 0xff &&
- mac[2] == 0xff && mac[3] == 0xff &&
- mac[4] == 0xff && mac[5] == 0xff)
- {
- return -EINVAL;
- }
-
-
- _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
-
- phead = &pstapriv->asoc_list;
- plist = get_next(phead);
-
- //check asoc_queue
- while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
- {
- psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
-
- plist = get_next(plist);
-
- if(_rtw_memcmp(mac, psta->hwaddr, ETH_ALEN))
- {
- if(psta->dot8021xalg == 1 && psta->bpairwise_key_installed == _FALSE)
- {
- DBG_8192C("%s, sta's dot8021xalg = 1 and key_installed = _FALSE\n", __func__);
- }
- else
- {
- DBG_8192C("free psta=%p, aid=%d\n", psta, psta->aid);
-
- rtw_list_delete(&psta->asoc_list);
- pstapriv->asoc_list_cnt--;
-
- //_exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
- updated = ap_free_sta(padapter, psta, _TRUE, WLAN_REASON_DEAUTH_LEAVING);
- //_enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
-
- psta = NULL;
-
- break;
- }
-
- }
-
- }
-
- _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
-
- associated_clients_update(padapter, updated);
-
- DBG_871X("-"FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
-
- return ret;
-
-}
-
-static int cfg80211_rtw_change_station(struct wiphy *wiphy, struct net_device *ndev,
- u8 *mac, struct station_parameters *params)
-{
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
-
- return 0;
-}
-
-static int cfg80211_rtw_dump_station(struct wiphy *wiphy, struct net_device *ndev,
- int idx, u8 *mac, struct station_info *sinfo)
-{
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
-
- //TODO: dump scanned queue
-
- return -ENOENT;
-}
-
-static int cfg80211_rtw_change_bss(struct wiphy *wiphy, struct net_device *ndev,
- struct bss_parameters *params)
-{
- u8 i;
-
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
-/*
- DBG_8192C("use_cts_prot=%d\n", params->use_cts_prot);
- DBG_8192C("use_short_preamble=%d\n", params->use_short_preamble);
- DBG_8192C("use_short_slot_time=%d\n", params->use_short_slot_time);
- DBG_8192C("ap_isolate=%d\n", params->ap_isolate);
-
- DBG_8192C("basic_rates_len=%d\n", params->basic_rates_len);
- for(i=0; i<params->basic_rates_len; i++)
- {
- DBG_8192C("basic_rates=%d\n", params->basic_rates[i]);
-
- }
-*/
- return 0;
-
-}
-
-static int cfg80211_rtw_set_channel(struct wiphy *wiphy
- #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
- , struct net_device *ndev
- #endif
- , struct ieee80211_channel *chan, enum nl80211_channel_type channel_type)
-{
- #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
- #endif
-
- return 0;
-}
-
-static int cfg80211_rtw_auth(struct wiphy *wiphy, struct net_device *ndev,
- struct cfg80211_auth_request *req)
-{
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
-
- return 0;
-}
-
-static int cfg80211_rtw_assoc(struct wiphy *wiphy, struct net_device *ndev,
- struct cfg80211_assoc_request *req)
-{
- DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
-
- return 0;
-}
-#endif //CONFIG_AP_MODE
-
-void rtw_cfg80211_rx_action_p2p(_adapter *padapter, u8 *pmgmt_frame, uint frame_len)
-{
- int type;
- s32 freq;
- int channel;
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- u8 category, action;
-
- channel = rtw_get_oper_ch(padapter);
-
- DBG_8192C("RTW_Rx:cur_ch=%d\n", channel);
- #ifdef CONFIG_P2P
- type = rtw_p2p_check_frames(padapter, pmgmt_frame, frame_len, _FALSE);
- if (type >= 0)
- goto indicate;
- #endif
- rtw_action_frame_parse(pmgmt_frame, frame_len, &category, &action);
- DBG_871X("RTW_Rx:category(%u), action(%u)\n", category, action);
-
-indicate:
- if (channel <= RTW_CH_MAX_2G_CHANNEL)
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
- else
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
-#else
- cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
-#endif
-}
-
-void rtw_cfg80211_rx_p2p_action_public(_adapter *padapter, u8 *pmgmt_frame, uint frame_len)
-{
- int type;
- s32 freq;
- int channel;
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- u8 category, action;
-
- channel = rtw_get_oper_ch(padapter);
-
- DBG_8192C("RTW_Rx:cur_ch=%d\n", channel);
- #ifdef CONFIG_P2P
- type = rtw_p2p_check_frames(padapter, pmgmt_frame, frame_len, _FALSE);
- if (type >= 0) {
- switch (type) {
- case P2P_GO_NEGO_CONF:
- case P2P_PROVISION_DISC_RESP:
- rtw_clear_scan_deny(padapter);
- }
- goto indicate;
- }
- #endif
- rtw_action_frame_parse(pmgmt_frame, frame_len, &category, &action);
- DBG_871X("RTW_Rx:category(%u), action(%u)\n", category, action);
-
-indicate:
- if (channel <= RTW_CH_MAX_2G_CHANNEL)
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
- else
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
-#else
- cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
-#endif
-}
-
-void rtw_cfg80211_rx_action(_adapter *adapter, u8 *frame, uint frame_len, const char*msg)
-{
- s32 freq;
- int channel;
- struct mlme_ext_priv *pmlmeext = &(adapter->mlmeextpriv);
- struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(adapter->rtw_wdev);
- u8 category, action;
-
- channel = rtw_get_oper_ch(adapter);
-
- rtw_action_frame_parse(frame, frame_len, &category, &action);
-
- DBG_8192C("RTW_Rx:cur_ch=%d\n", channel);
- if (msg)
- DBG_871X("RTW_Rx:%s\n", msg);
- else
- DBG_871X("RTW_Rx:category(%u), action(%u)\n", category, action);
-
- if (channel <= RTW_CH_MAX_2G_CHANNEL)
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
- else
- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- rtw_cfg80211_rx_mgmt(adapter, freq, 0, frame, frame_len, GFP_ATOMIC);
-#else
- cfg80211_rx_action(adapter->pnetdev, freq, frame, frame_len, GFP_ATOMIC);
-#endif
-
-}
-
-#ifdef CONFIG_P2P
-void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf, size_t len)
-{
- u16 wps_devicepassword_id = 0x0000;
- uint wps_devicepassword_id_len = 0;
- u8 wpsie[ 255 ] = { 0x00 }, p2p_ie[ 255 ] = { 0x00 };
- uint p2p_ielen = 0;
- uint wpsielen = 0;
- u32 devinfo_contentlen = 0;
- u8 devinfo_content[64] = { 0x00 };
- u16 capability = 0;
- uint capability_len = 0;
-
- unsigned char category = RTW_WLAN_CATEGORY_PUBLIC;
- u8 action = P2P_PUB_ACTION_ACTION;
- u8 dialogToken = 1;
- u32 p2poui = cpu_to_be32(P2POUI);
- u8 oui_subtype = P2P_PROVISION_DISC_REQ;
- u32 p2pielen = 0;
-#ifdef CONFIG_WFD
- u32 wfdielen = 0;
-#endif //CONFIG_WFD
-
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- unsigned char *pframe;
- struct rtw_ieee80211_hdr *pwlanhdr;
- unsigned short *fctrl;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
- struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
- u8 *frame_body = (unsigned char *)(buf + sizeof(struct rtw_ieee80211_hdr_3addr));
- size_t frame_body_len = len - sizeof(struct rtw_ieee80211_hdr_3addr);
-
-
- DBG_871X( "[%s] In\n", __FUNCTION__ );
-
- //prepare for building provision_request frame
- _rtw_memcpy(pwdinfo->tx_prov_disc_info.peerIFAddr, GetAddr1Ptr(buf), ETH_ALEN);
- _rtw_memcpy(pwdinfo->tx_prov_disc_info.peerDevAddr, GetAddr1Ptr(buf), ETH_ALEN);
-
- pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_PUSH_BUTTON;
-
- rtw_get_wps_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, frame_body_len - _PUBLIC_ACTION_IE_OFFSET_, wpsie, &wpsielen);
- rtw_get_wps_attr_content( wpsie, wpsielen, WPS_ATTR_DEVICE_PWID, (u8*) &wps_devicepassword_id, &wps_devicepassword_id_len);
- wps_devicepassword_id = be16_to_cpu( wps_devicepassword_id );
-
- switch(wps_devicepassword_id)
- {
- case WPS_DPID_PIN:
- pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_LABEL;
- break;
- case WPS_DPID_USER_SPEC:
- pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_DISPLYA;
- break;
- case WPS_DPID_MACHINE_SPEC:
- break;
- case WPS_DPID_REKEY:
- break;
- case WPS_DPID_PBC:
- pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_PUSH_BUTTON;
- break;
- case WPS_DPID_REGISTRAR_SPEC:
- pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_KEYPAD;
- break;
- default:
- break;
- }
-
-
- if ( rtw_get_p2p_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, frame_body_len - _PUBLIC_ACTION_IE_OFFSET_, p2p_ie, &p2p_ielen ) )
- {
-
- rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_DEVICE_INFO, devinfo_content, &devinfo_contentlen);
- rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&capability, &capability_len);
-
- }
-
-
- //start to build provision_request frame
- _rtw_memset(wpsie, 0, sizeof(wpsie));
- _rtw_memset(p2p_ie, 0, sizeof(p2p_ie));
- p2p_ielen = 0;
-
- if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
- {
- return;
- }
-
-
- //update attribute
- pattrib = &pmgntframe->attrib;
- update_mgntframe_attrib(padapter, pattrib);
-
- _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
- pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
- pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
-
- fctrl = &(pwlanhdr->frame_ctl);
- *(fctrl) = 0;
-
- _rtw_memcpy(pwlanhdr->addr1, pwdinfo->tx_prov_disc_info.peerDevAddr, ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
- _rtw_memcpy(pwlanhdr->addr3, pwdinfo->tx_prov_disc_info.peerDevAddr, ETH_ALEN);
-
- SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
- pmlmeext->mgnt_seq++;
- SetFrameSubType(pframe, WIFI_ACTION);
-
- pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
- pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
-
- pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *) &(p2poui), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(oui_subtype), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 1, &(dialogToken), &(pattrib->pktlen));
-
-
- //build_prov_disc_request_p2p_ie
- // P2P OUI
- p2pielen = 0;
- p2p_ie[ p2pielen++ ] = 0x50;
- p2p_ie[ p2pielen++ ] = 0x6F;
- p2p_ie[ p2pielen++ ] = 0x9A;
- p2p_ie[ p2pielen++ ] = 0x09; // WFA P2P v1.0
-
- // Commented by Albert 20110301
- // According to the P2P Specification, the provision discovery request frame should contain 3 P2P attributes
- // 1. P2P Capability
- // 2. Device Info
- // 3. Group ID ( When joining an operating P2P Group )
-
- // P2P Capability ATTR
- // Type:
- p2p_ie[ p2pielen++ ] = P2P_ATTR_CAPABILITY;
-
- // Length:
- //*(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0002 );
- RTW_PUT_LE16(p2p_ie + p2pielen, 0x0002);
- p2pielen += 2;
-
- // Value:
- // Device Capability Bitmap, 1 byte
- // Group Capability Bitmap, 1 byte
- _rtw_memcpy(p2p_ie + p2pielen, &capability, 2);
- p2pielen += 2;
-
-
- // Device Info ATTR
- // Type:
- p2p_ie[ p2pielen++ ] = P2P_ATTR_DEVICE_INFO;
-
- // Length:
- // 21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes)
- // + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes)
- //*(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 21 + pwdinfo->device_name_len );
- RTW_PUT_LE16(p2p_ie + p2pielen, devinfo_contentlen);
- p2pielen += 2;
-
- // Value:
- _rtw_memcpy(p2p_ie + p2pielen, devinfo_content, devinfo_contentlen);
- p2pielen += devinfo_contentlen;
-
-
- pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2p_ie, &p2p_ielen);
- //p2pielen = build_prov_disc_request_p2p_ie( pwdinfo, pframe, NULL, 0, pwdinfo->tx_prov_disc_info.peerDevAddr);
- //pframe += p2pielen;
- pattrib->pktlen += p2p_ielen;
-
- wpsielen = 0;
- // WPS OUI
- *(u32*) ( wpsie ) = cpu_to_be32( WPSOUI );
- wpsielen += 4;
-
- // WPS version
- // Type:
- *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_VER1 );
- wpsielen += 2;
-
- // Length:
- *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( 0x0001 );
- wpsielen += 2;
-
- // Value:
- wpsie[wpsielen++] = WPS_VERSION_1; // Version 1.0
-
- // Config Method
- // Type:
- *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_CONF_METHOD );
- wpsielen += 2;
-
- // Length:
- *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( 0x0002 );
- wpsielen += 2;
-
- // Value:
- *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( pwdinfo->tx_prov_disc_info.wps_config_method_request );
- wpsielen += 2;
-
- pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *) wpsie, &pattrib->pktlen );
-
-
-#ifdef CONFIG_WFD
- wfdielen = build_provdisc_req_wfd_ie(pwdinfo, pframe);
- pframe += wfdielen;
- pattrib->pktlen += wfdielen;
-#endif //CONFIG_WFD
-
- pattrib->last_txcmdsz = pattrib->pktlen;
-
- //dump_mgntframe(padapter, pmgntframe);
- if (dump_mgntframe_and_wait_ack(padapter, pmgntframe) != _SUCCESS)
- DBG_8192C("%s, ack to\n", __func__);
-
- //if(wps_devicepassword_id == WPS_DPID_REGISTRAR_SPEC)
- //{
- // DBG_8192C("waiting for p2p peer key-in PIN CODE\n");
- // rtw_msleep_os(15000); // 15 sec for key in PIN CODE, workaround for GS2 before issuing Nego Req.
- //}
-
-}
-
-static s32 cfg80211_rtw_remain_on_channel(struct wiphy *wiphy,
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
- struct wireless_dev *wdev,
-#else
- struct net_device *ndev,
-#endif
- struct ieee80211_channel * channel,
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
- enum nl80211_channel_type channel_type,
-#endif
- unsigned int duration, u64 *cookie)
-{
- s32 err = 0;
- _adapter *padapter = wiphy_to_adapter(wiphy);
- struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct wifidirect_info *pwdinfo = &padapter->wdinfo;
- struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
- u8 remain_ch = (u8) ieee80211_frequency_to_channel(channel->center_freq);
- u8 ready_on_channel = _FALSE;
-
- DBG_871X(FUNC_ADPT_FMT" ch:%u duration:%d\n", FUNC_ADPT_ARG(padapter), remain_ch, duration);
-
- if(pcfg80211_wdinfo->is_ro_ch == _TRUE)
- {
- DBG_8192C("%s, cancel ro ch timer\n", __func__);
-
- _cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);
-
-#ifdef CONFIG_CONCURRENT_MODE
- ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);
-#endif //CONFIG_CONCURRENT_MODE
-
- p2p_protocol_wk_hdl(padapter, P2P_RO_CH_WK);
- }
-
- pcfg80211_wdinfo->is_ro_ch = _TRUE;
-
- if(_FAIL == rtw_pwr_wakeup(padapter)) {
- err = -EFAULT;
- goto exit;
- }
-
- _rtw_memcpy(&pcfg80211_wdinfo->remain_on_ch_channel, channel, sizeof(struct ieee80211_channel));
- #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
- pcfg80211_wdinfo->remain_on_ch_type= channel_type;
- #endif
- pcfg80211_wdinfo->remain_on_ch_cookie= *cookie;
-
- rtw_scan_abort(padapter);
-#ifdef CONFIG_CONCURRENT_MODE
- if(rtw_buddy_adapter_up(padapter))
- rtw_scan_abort(padapter->pbuddy_adapter);
-#endif //CONFIG_CONCURRENT_MODE
-
- //if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) && !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
- if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
- {
- rtw_p2p_enable(padapter, P2P_ROLE_DEVICE);
- wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _TRUE;
- }
- else
- {
- rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
-#ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
-#endif
- }
-
-
- rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
-
-
- if(duration < 400)
- duration = duration*3;//extend from exper.
-
-
-#ifdef CONFIG_CONCURRENT_MODE
- if(check_buddy_fwstate(padapter, _FW_LINKED) &&
- (duration<pwdinfo->ext_listen_interval))
- {
- duration = duration + pwdinfo->ext_listen_interval;
- }
-#endif
-
- pcfg80211_wdinfo->restore_channel = pmlmeext->cur_channel;
-
- if(rtw_ch_set_search_ch(pmlmeext->channel_set, remain_ch) >= 0) {
-#ifdef CONFIG_CONCURRENT_MODE
- if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
- {
- PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
- struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
-
- if(remain_ch != pbuddy_mlmeext->cur_channel)
- {
- if(ATOMIC_READ(&pwdev_priv->switch_ch_to)==1 ||
- (remain_ch != pmlmeext->cur_channel))
- {
- DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);
- issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);
-
- ATOMIC_SET(&pwdev_priv->switch_ch_to, 0);
-
- DBG_8192C("%s, set switch ch timer, duration=%d\n", __func__, duration-pwdinfo->ext_listen_interval);
- _set_timer(&pwdinfo->ap_p2p_switch_timer, duration-pwdinfo->ext_listen_interval);
- }
- }
-
- ready_on_channel = _TRUE;
- //pmlmeext->cur_channel = remain_ch;
- //set_channel_bwmode(padapter, remain_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
- }else
-#endif //CONFIG_CONCURRENT_MODE
- if(remain_ch != pmlmeext->cur_channel )
- {
- ready_on_channel = _TRUE;
- //pmlmeext->cur_channel = remain_ch;
- //set_channel_bwmode(padapter, remain_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
- }
- } else {
- DBG_871X("%s remain_ch:%u not in channel plan!!!!\n", __FUNCTION__, remain_ch);
- }
-
-
- //call this after other things have been done
-#ifdef CONFIG_CONCURRENT_MODE
- if(ATOMIC_READ(&pwdev_priv->ro_ch_to)==1 ||
- (remain_ch != pmlmeext->cur_channel))
- {
- u8 co_channel = 0xff;
- ATOMIC_SET(&pwdev_priv->ro_ch_to, 0);
-#endif
-
- if(ready_on_channel == _TRUE)
- {
- if ( !check_fwstate(&padapter->mlmepriv, _FW_LINKED ) )
- {
- pmlmeext->cur_channel = remain_ch;
-
-
- set_channel_bwmode(padapter, remain_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
- }
- }
- DBG_8192C("%s, set ro ch timer, duration=%d\n", __func__, duration);
- _set_timer( &pcfg80211_wdinfo->remain_on_ch_timer, duration);
-
-#ifdef CONFIG_CONCURRENT_MODE
- }
-#endif
-
- rtw_cfg80211_ready_on_channel(padapter, *cookie, channel, channel_type, duration, GFP_KERNEL);
-
- pwdinfo->listen_channel = pmlmeext->cur_channel;
-
-exit:
- if (err)
- pcfg80211_wdinfo->is_ro_ch = _FALSE;
-
- return err;
-}
-
-static s32 cfg80211_rtw_cancel_remain_on_channel(struct wiphy *wiphy,
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
- struct wireless_dev *wdev,
-#else
- struct net_device *ndev,
-#endif
- u64 cookie)
-{
- s32 err = 0;
- _adapter *padapter = wiphy_to_adapter(wiphy);
- struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
- struct wifidirect_info *pwdinfo = &padapter->wdinfo;
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
- struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
-
- DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
-
- if (pcfg80211_wdinfo->is_ro_ch == _TRUE) {
- DBG_8192C("%s, cancel ro ch timer\n", __func__);
- _cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);
- #ifdef CONFIG_CONCURRENT_MODE
- ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);
- #endif
- p2p_protocol_wk_hdl(padapter, P2P_RO_CH_WK);
- }
-
- #if 0
- // Disable P2P Listen State
- if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) && !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
- {
- if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
- {
- _cancel_timer_ex( &pwdinfo->find_phase_timer );
- _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
- _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
-
- rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
- _rtw_memset(pwdinfo, 0x00, sizeof(struct wifidirect_info));
- }
- }
- else
- #endif
- {
- rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
-#ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
-#endif
- }
- pcfg80211_wdinfo->is_ro_ch = _FALSE;
-
- return err;
-}
-
-#endif //CONFIG_P2P
-
-static int _cfg80211_rtw_mgmt_tx(_adapter *padapter, u8 tx_ch, const u8 *buf, size_t len)
-{
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- unsigned char *pframe;
- int ret = _FAIL;
- bool ack = _TRUE;
- struct rtw_ieee80211_hdr *pwlanhdr;
- struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- struct wifidirect_info *pwdinfo = &padapter->wdinfo;
- //struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
-
- if(_FAIL == rtw_pwr_wakeup(padapter)) {
- ret = -EFAULT;
- goto exit;
- }
-
- rtw_set_scan_deny(padapter, 1000);
-
- rtw_scan_abort(padapter);
- #ifdef CONFIG_CONCURRENT_MODE
- if(rtw_buddy_adapter_up(padapter))
- rtw_scan_abort(padapter->pbuddy_adapter);
- #endif /* CONFIG_CONCURRENT_MODE */
-
- if (padapter->cfg80211_wdinfo.is_ro_ch == _TRUE) {
- //DBG_8192C("%s, cancel ro ch timer\n", __func__);
- //_cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);
- //padapter->cfg80211_wdinfo.is_ro_ch = _FALSE;
- #ifdef CONFIG_CONCURRENT_MODE
- DBG_8192C("%s, extend ro ch time\n", __func__);
- _set_timer( &padapter->cfg80211_wdinfo.remain_on_ch_timer, pwdinfo->ext_listen_period);
- #endif //CONFIG_CONCURRENT_MODE
- }
-
-#ifdef CONFIG_CONCURRENT_MODE
- if (check_buddy_fwstate(padapter, _FW_LINKED )) {
- u8 co_channel=0xff;
- PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
- struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
-
- co_channel = rtw_get_oper_ch(padapter);
-
- if (tx_ch != pbuddy_mlmeext->cur_channel) {
- if (ATOMIC_READ(&pwdev_priv->switch_ch_to)==1) {
- DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);
- issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);
-
- ATOMIC_SET(&pwdev_priv->switch_ch_to, 0);
-
- //DBG_8192C("%s, set switch ch timer, period=%d\n", __func__, pwdinfo->ext_listen_period);
- //_set_timer(&pwdinfo->ap_p2p_switch_timer, pwdinfo->ext_listen_period);
- }
-
- DBG_8192C("%s, set switch ch timer, period=%d\n", __func__, pwdinfo->ext_listen_period);
- _set_timer(&pwdinfo->ap_p2p_switch_timer, pwdinfo->ext_listen_period);
- }
-
- if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED ))
- pmlmeext->cur_channel = tx_ch;
-
- if (tx_ch != co_channel)
- set_channel_bwmode(padapter, tx_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
- }else
-#endif //CONFIG_CONCURRENT_MODE
- //if (tx_ch != pmlmeext->cur_channel) {
- if(tx_ch != rtw_get_oper_ch(padapter)) {
- if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED ))
- pmlmeext->cur_channel = tx_ch;
- set_channel_bwmode(padapter, tx_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
- }
-
- //starting alloc mgmt frame to dump it
- if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
- {
- //ret = -ENOMEM;
- ret = _FAIL;
- goto exit;
- }
-
- //update attribute
- pattrib = &pmgntframe->attrib;
- update_mgntframe_attrib(padapter, pattrib);
- pattrib->retry_ctrl = _FALSE;
-
- _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
- pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-
- _rtw_memcpy(pframe, (void*)buf, len);
- pattrib->pktlen = len;
-
- pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
- //update seq number
- pmlmeext->mgnt_seq = GetSequence(pwlanhdr);
- pattrib->seqnum = pmlmeext->mgnt_seq;
- pmlmeext->mgnt_seq++;
-
-#ifdef CONFIG_WFD
- {
- struct wifi_display_info *pwfd_info;
-
- pwfd_info = padapter->wdinfo.wfd_info;
-
- if ( _TRUE == pwfd_info->wfd_enable )
- {
- rtw_append_wfd_ie( padapter, pframe, &pattrib->pktlen );
- }
- }
-#endif // CONFIG_WFD
-
- pattrib->last_txcmdsz = pattrib->pktlen;
-
- if (dump_mgntframe_and_wait_ack(padapter, pmgntframe) != _SUCCESS)
- {
- ack = _FALSE;
- ret = _FAIL;
-
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("%s, ack == _FAIL\n", __func__);
- #endif
- }
- else
- {
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("%s, ack=%d, ok!\n", __func__, ack);
- #endif
- ret = _SUCCESS;
- }
-
-exit:
-
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("%s, ret=%d\n", __func__, ret);
- #endif
-
- return ret;
-
-}
-
-static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy,
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
- struct wireless_dev *wdev,
-#else
- struct net_device *ndev,
-#endif
- struct ieee80211_channel *chan,
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
- bool offchan,
-#endif
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
- enum nl80211_channel_type channel_type,
- #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- bool channel_type_valid,
- #endif
-#endif
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
- unsigned int wait,
-#endif
- const u8 *buf, size_t len,
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
- bool no_cck,
-#endif
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
- bool dont_wait_for_ack,
-#endif
- u64 *cookie)
-{
- _adapter *padapter = (_adapter *)wiphy_to_adapter(wiphy);
- struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
- int ret = 0;
- int tx_ret;
- u32 dump_limit = RTW_MAX_MGMT_TX_CNT;
- u32 dump_cnt = 0;
- bool ack = _TRUE;
- u8 tx_ch = (u8)ieee80211_frequency_to_channel(chan->center_freq);
- u8 category, action;
- int type = (-1);
- u32 start = rtw_get_current_time();
-
- /* cookie generation */
- *cookie = (unsigned long) buf;
-
-#ifdef CONFIG_DEBUG_CFG80211
- DBG_871X(FUNC_ADPT_FMT" len=%zu, ch=%d"
- #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
- ", ch_type=%d"
- #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- ", channel_type_valid=%d"
- #endif
- #endif
- "\n", FUNC_ADPT_ARG(padapter),
- len, tx_ch
- #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
- , channel_type
- #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- , channel_type_valid
- #endif
- #endif
- );
-#endif /* CONFIG_DEBUG_CFG80211 */
-
- /* indicate ack before issue frame to avoid racing with rsp frame */
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- rtw_cfg80211_mgmt_tx_status(padapter, *cookie, buf, len, ack, GFP_KERNEL);
-#elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,34) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,35))
- cfg80211_action_tx_status(ndev, *cookie, buf, len, ack, GFP_KERNEL);
-#endif
-
- if (rtw_action_frame_parse(buf, len, &category, &action) == _FALSE) {
- DBG_8192C(FUNC_ADPT_FMT" frame_control:0x%x\n", FUNC_ADPT_ARG(padapter),
- le16_to_cpu(((struct rtw_ieee80211_hdr_3addr *)buf)->frame_ctl));
- goto exit;
- }
-
- DBG_8192C("RTW_Tx:tx_ch=%d, da="MAC_FMT"\n", tx_ch, MAC_ARG(GetAddr1Ptr(buf)));
- #ifdef CONFIG_P2P
- if((type = rtw_p2p_check_frames(padapter, buf, len, _TRUE)) >= 0)
- goto dump;
- #endif
- if (category == RTW_WLAN_CATEGORY_PUBLIC)
- DBG_871X("RTW_Tx:%s\n", action_public_str(action));
- else
- DBG_871X("RTW_Tx:category(%u), action(%u)\n", category, action);
-
-dump:
- do {
- dump_cnt++;
- tx_ret = _cfg80211_rtw_mgmt_tx(padapter, tx_ch, buf, len);
- } while (dump_cnt < dump_limit && tx_ret != _SUCCESS);
-
- if (tx_ret != _SUCCESS || dump_cnt > 1) {
- DBG_871X(FUNC_ADPT_FMT" %s (%d/%d) in %d ms\n", FUNC_ADPT_ARG(padapter),
- tx_ret==_SUCCESS?"OK":"FAIL", dump_cnt, dump_limit, rtw_get_passing_time_ms(start));
- }
-
- switch (type) {
- case P2P_GO_NEGO_CONF:
- rtw_clear_scan_deny(padapter);
- break;
- case P2P_INVIT_RESP:
- if (pwdev_priv->invit_info.flags & BIT(0)
- && pwdev_priv->invit_info.status == 0)
- {
- DBG_871X(FUNC_ADPT_FMT" agree with invitation of persistent group\n",
- FUNC_ADPT_ARG(padapter));
- rtw_set_scan_deny(padapter, 5000);
- rtw_pwr_wakeup_ex(padapter, 5000);
- rtw_clear_scan_deny(padapter);
- }
- break;
- }
-
-exit:
- return ret;
-}
-
-static void cfg80211_rtw_mgmt_frame_register(struct wiphy *wiphy,
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0))
- struct wireless_dev *wdev,
-#else
- struct net_device *ndev,
-#endif
- u16 frame_type, bool reg)
-{
- _adapter *adapter = wiphy_to_adapter(wiphy);
-
-#ifdef CONFIG_DEBUG_CFG80211
- DBG_871X(FUNC_ADPT_FMT" frame_type:%x, reg:%d\n", FUNC_ADPT_ARG(adapter),
- frame_type, reg);
-#endif
-
- if (frame_type != (IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_REQ))
- return;
-
- return;
-}
-
-static int rtw_cfg80211_set_beacon_wpsp2pie(struct net_device *ndev, char *buf, int len)
-{
- int ret = 0;
- uint wps_ielen = 0;
- u8 *wps_ie;
- u32 p2p_ielen = 0;
- u8 wps_oui[8]={0x0,0x50,0xf2,0x04};
- u8 *p2p_ie;
- u32 wfd_ielen = 0;
- u8 *wfd_ie;
- _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
-
- DBG_871X(FUNC_NDEV_FMT" ielen=%d\n", FUNC_NDEV_ARG(ndev), len);
-
- if(len>0)
- {
- if((wps_ie = rtw_get_wps_ie(buf, len, NULL, &wps_ielen)))
- {
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("bcn_wps_ielen=%d\n", wps_ielen);
- #endif
-
- if(pmlmepriv->wps_beacon_ie)
- {
- u32 free_len = pmlmepriv->wps_beacon_ie_len;
- pmlmepriv->wps_beacon_ie_len = 0;
- rtw_mfree(pmlmepriv->wps_beacon_ie, free_len);
- pmlmepriv->wps_beacon_ie = NULL;
- }
-
- pmlmepriv->wps_beacon_ie = rtw_malloc(wps_ielen);
- if ( pmlmepriv->wps_beacon_ie == NULL) {
- DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
- return -EINVAL;
-
- }
-
- _rtw_memcpy(pmlmepriv->wps_beacon_ie, wps_ie, wps_ielen);
- pmlmepriv->wps_beacon_ie_len = wps_ielen;
-
- update_beacon(padapter, _VENDOR_SPECIFIC_IE_, wps_oui, _TRUE);
-
- }
-
- //buf += wps_ielen;
- //len -= wps_ielen;
-
- #ifdef CONFIG_P2P
- if((p2p_ie=rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen)))
- {
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("bcn_p2p_ielen=%d\n", p2p_ielen);
- #endif
-
- if(pmlmepriv->p2p_beacon_ie)
- {
- u32 free_len = pmlmepriv->p2p_beacon_ie_len;
- pmlmepriv->p2p_beacon_ie_len = 0;
- rtw_mfree(pmlmepriv->p2p_beacon_ie, free_len);
- pmlmepriv->p2p_beacon_ie = NULL;
- }
-
- pmlmepriv->p2p_beacon_ie = rtw_malloc(p2p_ielen);
- if ( pmlmepriv->p2p_beacon_ie == NULL) {
- DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
- return -EINVAL;
-
- }
-
- _rtw_memcpy(pmlmepriv->p2p_beacon_ie, p2p_ie, p2p_ielen);
- pmlmepriv->p2p_beacon_ie_len = p2p_ielen;
-
- }
- #endif //CONFIG_P2P
-
- //buf += p2p_ielen;
- //len -= p2p_ielen;
-
- #ifdef CONFIG_WFD
- if(rtw_get_wfd_ie(buf, len, NULL, &wfd_ielen))
- {
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("bcn_wfd_ielen=%d\n", wfd_ielen);
- #endif
-
- if(pmlmepriv->wfd_beacon_ie)
- {
- u32 free_len = pmlmepriv->wfd_beacon_ie_len;
- pmlmepriv->wfd_beacon_ie_len = 0;
- rtw_mfree(pmlmepriv->wfd_beacon_ie, free_len);
- pmlmepriv->wfd_beacon_ie = NULL;
- }
-
- pmlmepriv->wfd_beacon_ie = rtw_malloc(wfd_ielen);
- if ( pmlmepriv->wfd_beacon_ie == NULL) {
- DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
- return -EINVAL;
-
- }
- rtw_get_wfd_ie(buf, len, pmlmepriv->wfd_beacon_ie, &pmlmepriv->wfd_beacon_ie_len);
- }
- #endif //CONFIG_WFD
-
- pmlmeext->bstart_bss = _TRUE;
-
- }
-
- return ret;
-
-}
-
-static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *buf, int len)
-{
- int ret = 0;
- uint wps_ielen = 0;
- u8 *wps_ie;
- u32 p2p_ielen = 0;
- u8 *p2p_ie;
- u32 wfd_ielen = 0;
- u8 *wfd_ie;
- _adapter *padapter = (_adapter *)rtw_netdev_priv(net);
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-
-#ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("%s, ielen=%d\n", __func__, len);
-#endif
-
- if(len>0)
- {
- if((wps_ie = rtw_get_wps_ie(buf, len, NULL, &wps_ielen)))
- {
- uint attr_contentlen = 0;
- u16 uconfig_method, *puconfig_method = NULL;
-
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("probe_resp_wps_ielen=%d\n", wps_ielen);
- #endif
-
- if(pmlmepriv->wps_probe_resp_ie)
- {
- u32 free_len = pmlmepriv->wps_probe_resp_ie_len;
- pmlmepriv->wps_probe_resp_ie_len = 0;
- rtw_mfree(pmlmepriv->wps_probe_resp_ie, free_len);
- pmlmepriv->wps_probe_resp_ie = NULL;
- }
-
- pmlmepriv->wps_probe_resp_ie = rtw_malloc(wps_ielen);
- if ( pmlmepriv->wps_probe_resp_ie == NULL) {
- DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
- return -EINVAL;
-
- }
-
- //add PUSH_BUTTON config_method by driver self in wpsie of probe_resp at GO Mode
- if ( (puconfig_method = (u16*)rtw_get_wps_attr_content( wps_ie, wps_ielen, WPS_ATTR_CONF_METHOD , NULL, &attr_contentlen)) != NULL )
- {
- #ifdef CONFIG_DEBUG_CFG80211
- //printk("config_method in wpsie of probe_resp = 0x%x\n", be16_to_cpu(*puconfig_method));
- #endif
-
- uconfig_method = WPS_CM_PUSH_BUTTON;
- uconfig_method = cpu_to_be16( uconfig_method );
-
- *puconfig_method |= uconfig_method;
- }
-
- _rtw_memcpy(pmlmepriv->wps_probe_resp_ie, wps_ie, wps_ielen);
- pmlmepriv->wps_probe_resp_ie_len = wps_ielen;
-
- }
-
- //buf += wps_ielen;
- //len -= wps_ielen;
-
- #ifdef CONFIG_P2P
- if((p2p_ie=rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen)))
- {
- u8 is_GO = _FALSE;
- u32 attr_contentlen = 0;
- u16 cap_attr=0;
-
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("probe_resp_p2p_ielen=%d\n", p2p_ielen);
- #endif
-
- //Check P2P Capability ATTR
- if( rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&cap_attr, (uint*) &attr_contentlen) )
- {
- u8 grp_cap=0;
- //DBG_8192C( "[%s] Got P2P Capability Attr!!\n", __FUNCTION__ );
- cap_attr = le16_to_cpu(cap_attr);
- grp_cap = (u8)((cap_attr >> 8)&0xff);
-
- is_GO = (grp_cap&BIT(0)) ? _TRUE:_FALSE;
-
- if(is_GO)
- DBG_8192C("Got P2P Capability Attr, grp_cap=0x%x, is_GO\n", grp_cap);
- }
-
-
- if(is_GO == _FALSE)
- {
- if(pmlmepriv->p2p_probe_resp_ie)
- {
- u32 free_len = pmlmepriv->p2p_probe_resp_ie_len;
- pmlmepriv->p2p_probe_resp_ie_len = 0;
- rtw_mfree(pmlmepriv->p2p_probe_resp_ie, free_len);
- pmlmepriv->p2p_probe_resp_ie = NULL;
- }
-
- pmlmepriv->p2p_probe_resp_ie = rtw_malloc(p2p_ielen);
- if ( pmlmepriv->p2p_probe_resp_ie == NULL) {
- DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
- return -EINVAL;
-
- }
- _rtw_memcpy(pmlmepriv->p2p_probe_resp_ie, p2p_ie, p2p_ielen);
- pmlmepriv->p2p_probe_resp_ie_len = p2p_ielen;
- }
- else
- {
- if(pmlmepriv->p2p_go_probe_resp_ie)
- {
- u32 free_len = pmlmepriv->p2p_go_probe_resp_ie_len;
- pmlmepriv->p2p_go_probe_resp_ie_len = 0;
- rtw_mfree(pmlmepriv->p2p_go_probe_resp_ie, free_len);
- pmlmepriv->p2p_go_probe_resp_ie = NULL;
- }
-
- pmlmepriv->p2p_go_probe_resp_ie = rtw_malloc(p2p_ielen);
- if ( pmlmepriv->p2p_go_probe_resp_ie == NULL) {
- DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
- return -EINVAL;
-
- }
- _rtw_memcpy(pmlmepriv->p2p_go_probe_resp_ie, p2p_ie, p2p_ielen);
- pmlmepriv->p2p_go_probe_resp_ie_len = p2p_ielen;
- }
-
- }
- #endif //CONFIG_P2P
-
- //buf += p2p_ielen;
- //len -= p2p_ielen;
-
- #ifdef CONFIG_WFD
- if(rtw_get_wfd_ie(buf, len, NULL, &wfd_ielen))
- {
- #ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("probe_resp_wfd_ielen=%d\n", wfd_ielen);
- #endif
-
- if(pmlmepriv->wfd_probe_resp_ie)
- {
- u32 free_len = pmlmepriv->wfd_probe_resp_ie_len;
- pmlmepriv->wfd_probe_resp_ie_len = 0;
- rtw_mfree(pmlmepriv->wfd_probe_resp_ie, free_len);
- pmlmepriv->wfd_probe_resp_ie = NULL;
- }
-
- pmlmepriv->wfd_probe_resp_ie = rtw_malloc(wfd_ielen);
- if ( pmlmepriv->wfd_probe_resp_ie == NULL) {
- DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
- return -EINVAL;
-
- }
- rtw_get_wfd_ie(buf, len, pmlmepriv->wfd_probe_resp_ie, &pmlmepriv->wfd_probe_resp_ie_len);
- }
- #endif //CONFIG_WFD
-
- }
-
- return ret;
-
-}
-
-static int rtw_cfg80211_set_assoc_resp_wpsp2pie(struct net_device *net, char *buf, int len)
-{
- int ret = 0;
- _adapter *padapter = (_adapter *)rtw_netdev_priv(net);
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-
- DBG_8192C("%s, ielen=%d\n", __func__, len);
-
- if(len>0)
- {
- if(pmlmepriv->wps_assoc_resp_ie)
- {
- u32 free_len = pmlmepriv->wps_assoc_resp_ie_len;
- pmlmepriv->wps_assoc_resp_ie_len = 0;
- rtw_mfree(pmlmepriv->wps_assoc_resp_ie, free_len);
- pmlmepriv->wps_assoc_resp_ie = NULL;
- }
-
- pmlmepriv->wps_assoc_resp_ie = rtw_malloc(len);
- if ( pmlmepriv->wps_assoc_resp_ie == NULL) {
- DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
- return -EINVAL;
-
- }
- _rtw_memcpy(pmlmepriv->wps_assoc_resp_ie, buf, len);
- pmlmepriv->wps_assoc_resp_ie_len = len;
- }
-
- return ret;
-
-}
-
-int rtw_cfg80211_set_mgnt_wpsp2pie(struct net_device *net, char *buf, int len,
- int type)
-{
- int ret = 0;
- uint wps_ielen = 0;
- u32 p2p_ielen = 0;
-
-#ifdef CONFIG_DEBUG_CFG80211
- DBG_8192C("%s, ielen=%d\n", __func__, len);
-#endif
-
- if( (rtw_get_wps_ie(buf, len, NULL, &wps_ielen) && (wps_ielen>0))
- #ifdef CONFIG_P2P
- || (rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen) && (p2p_ielen>0))
- #endif
- )
- {
- if (net != NULL)
- {
- switch (type)
- {
- case 0x1: //BEACON
- ret = rtw_cfg80211_set_beacon_wpsp2pie(net, buf, len);
- break;
- case 0x2: //PROBE_RESP
- ret = rtw_cfg80211_set_probe_resp_wpsp2pie(net, buf, len);
- break;
- case 0x4: //ASSOC_RESP
- ret = rtw_cfg80211_set_assoc_resp_wpsp2pie(net, buf, len);
- break;
- }
- }
- }
-
- return ret;
-
-}
-
-static struct cfg80211_ops rtw_cfg80211_ops = {
- .change_virtual_intf = cfg80211_rtw_change_iface,
- .add_key = cfg80211_rtw_add_key,
- .get_key = cfg80211_rtw_get_key,
- .del_key = cfg80211_rtw_del_key,
- .set_default_key = cfg80211_rtw_set_default_key,
- .get_station = cfg80211_rtw_get_station,
- .scan = cfg80211_rtw_scan,
- .set_wiphy_params = cfg80211_rtw_set_wiphy_params,
- .connect = cfg80211_rtw_connect,
- .disconnect = cfg80211_rtw_disconnect,
- .join_ibss = cfg80211_rtw_join_ibss,
- .leave_ibss = cfg80211_rtw_leave_ibss,
- .set_tx_power = cfg80211_rtw_set_txpower,
- .get_tx_power = cfg80211_rtw_get_txpower,
- .set_power_mgmt = cfg80211_rtw_set_power_mgmt,
- .set_pmksa = cfg80211_rtw_set_pmksa,
- .del_pmksa = cfg80211_rtw_del_pmksa,
- .flush_pmksa = cfg80211_rtw_flush_pmksa,
-
-#ifdef CONFIG_AP_MODE
- .add_virtual_intf = cfg80211_rtw_add_virtual_intf,
- .del_virtual_intf = cfg80211_rtw_del_virtual_intf,
-
- #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 4, 0)) && !defined(COMPAT_KERNEL_RELEASE)
- .add_beacon = cfg80211_rtw_add_beacon,
- .set_beacon = cfg80211_rtw_set_beacon,
- .del_beacon = cfg80211_rtw_del_beacon,
- #else
- .start_ap = cfg80211_rtw_start_ap,
- .change_beacon = cfg80211_rtw_change_beacon,
- .stop_ap = cfg80211_rtw_stop_ap,
- #endif
-
- .add_station = cfg80211_rtw_add_station,
- .del_station = cfg80211_rtw_del_station,
- .change_station = cfg80211_rtw_change_station,
- .dump_station = cfg80211_rtw_dump_station,
- .change_bss = cfg80211_rtw_change_bss,
- #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0))
- .set_channel = cfg80211_rtw_set_channel,
- #endif
- //.auth = cfg80211_rtw_auth,
- //.assoc = cfg80211_rtw_assoc,
-#endif //CONFIG_AP_MODE
-
-#ifdef CONFIG_P2P
- .remain_on_channel = cfg80211_rtw_remain_on_channel,
- .cancel_remain_on_channel = cfg80211_rtw_cancel_remain_on_channel,
-#endif
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
- .mgmt_tx = cfg80211_rtw_mgmt_tx,
- .mgmt_frame_register = cfg80211_rtw_mgmt_frame_register,
-#elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,34) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,35))
- .action = cfg80211_rtw_mgmt_tx,
-#endif
-};
-
-static void rtw_cfg80211_init_ht_capab(struct ieee80211_sta_ht_cap *ht_cap, enum ieee80211_band band, u8 rf_type)
-{
-
-#define MAX_BIT_RATE_40MHZ_MCS15 300 /* Mbps */
-#define MAX_BIT_RATE_40MHZ_MCS7 150 /* Mbps */
-
- ht_cap->ht_supported = _TRUE;
-
- ht_cap->cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
- IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_SGI_20 |
- IEEE80211_HT_CAP_DSSSCCK40 | IEEE80211_HT_CAP_MAX_AMSDU;
-
- /*
- *Maximum length of AMPDU that the STA can receive.
- *Length = 2 ^ (13 + max_ampdu_length_exp) - 1 (octets)
- */
- ht_cap->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
-
- /*Minimum MPDU start spacing , */
- ht_cap->ampdu_density = IEEE80211_HT_MPDU_DENSITY_16;
-
- ht_cap->mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
-
- /*
- *hw->wiphy->bands[IEEE80211_BAND_2GHZ]
- *base on ant_num
- *rx_mask: RX mask
- *if rx_ant =1 rx_mask[0]=0xff;==>MCS0-MCS7
- *if rx_ant =2 rx_mask[1]=0xff;==>MCS8-MCS15
- *if rx_ant >=3 rx_mask[2]=0xff;
- *if BW_40 rx_mask[4]=0x01;
- *highest supported RX rate
- */
- if(rf_type == RF_1T1R)
- {
- ht_cap->mcs.rx_mask[0] = 0xFF;
- ht_cap->mcs.rx_mask[1] = 0x00;
- ht_cap->mcs.rx_mask[4] = 0x01;
-
- ht_cap->mcs.rx_highest = MAX_BIT_RATE_40MHZ_MCS7;
- }
- else if((rf_type == RF_1T2R) || (rf_type==RF_2T2R))
- {
- ht_cap->mcs.rx_mask[0] = 0xFF;
- ht_cap->mcs.rx_mask[1] = 0xFF;
- ht_cap->mcs.rx_mask[4] = 0x01;
-
- ht_cap->mcs.rx_highest = MAX_BIT_RATE_40MHZ_MCS15;
- }
- else
- {
- DBG_8192C("%s, error rf_type=%d\n", __func__, rf_type);
- }
-
-}
-
-void rtw_cfg80211_init_wiphy(_adapter *padapter)
-{
- u8 rf_type;
- struct ieee80211_supported_band *bands;
- struct wireless_dev *pwdev = padapter->rtw_wdev;
- struct wiphy *wiphy = pwdev->wiphy;
-
- rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
-
- DBG_8192C("%s:rf_type=%d\n", __func__, rf_type);
-
- /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */
- {
- bands = wiphy->bands[IEEE80211_BAND_2GHZ];
- if(bands)
- rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_2GHZ, rf_type);
- }
-
- /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */
- {
- bands = wiphy->bands[IEEE80211_BAND_5GHZ];
- if(bands)
- rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_5GHZ, rf_type);
- }
-}
-
-/*
-struct ieee80211_iface_limit rtw_limits[] = {
- { .max = 1, .types = BIT(NL80211_IFTYPE_STATION)
- | BIT(NL80211_IFTYPE_ADHOC)
-#ifdef CONFIG_AP_MODE
- | BIT(NL80211_IFTYPE_AP)
-#endif
-#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
- | BIT(NL80211_IFTYPE_P2P_CLIENT)
- | BIT(NL80211_IFTYPE_P2P_GO)
-#endif
- },
- {.max = 1, .types = BIT(NL80211_IFTYPE_MONITOR)},
-};
-
-struct ieee80211_iface_combination rtw_combinations = {
- .limits = rtw_limits,
- .n_limits = ARRAY_SIZE(rtw_limits),
- .max_interfaces = 2,
- .num_different_channels = 1,
-};
-*/
-
-static void rtw_cfg80211_preinit_wiphy(_adapter *padapter, struct wiphy *wiphy)
-{
-
- wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM;
-
- wiphy->max_scan_ssids = RTW_SSID_SCAN_AMOUNT;
- wiphy->max_scan_ie_len = RTW_SCAN_IE_LEN_MAX;
- wiphy->max_num_pmkids = RTW_MAX_NUM_PMKIDS;
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
- wiphy->max_remain_on_channel_duration = RTW_MAX_REMAIN_ON_CHANNEL_DURATION;
-#endif
-
- wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION)
- | BIT(NL80211_IFTYPE_ADHOC)
-#ifdef CONFIG_AP_MODE
- | BIT(NL80211_IFTYPE_AP)
- | BIT(NL80211_IFTYPE_MONITOR)
-#endif
-#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
- | BIT(NL80211_IFTYPE_P2P_CLIENT)
- | BIT(NL80211_IFTYPE_P2P_GO)
-#endif
- ;
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
-#ifdef CONFIG_AP_MODE
- wiphy->mgmt_stypes = rtw_cfg80211_default_mgmt_stypes;
-#endif //CONFIG_AP_MODE
-#endif
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0))
- wiphy->software_iftypes |= BIT(NL80211_IFTYPE_MONITOR);
-#endif
-
- /*
- wiphy->iface_combinations = &rtw_combinations;
- wiphy->n_iface_combinations = 1;
- */
-
- wiphy->cipher_suites = rtw_cipher_suites;
- wiphy->n_cipher_suites = ARRAY_SIZE(rtw_cipher_suites);
-
- /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */
- wiphy->bands[IEEE80211_BAND_2GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_2GHZ);
- /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */
- wiphy->bands[IEEE80211_BAND_5GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_5GHZ);
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) && LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0))
- wiphy->flags |= WIPHY_FLAG_SUPPORTS_SEPARATE_DEFAULT_KEYS;
-#endif
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
- wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
- wiphy->flags |= WIPHY_FLAG_OFFCHAN_TX | WIPHY_FLAG_HAVE_AP_SME;
-#endif
-
- if(padapter->registrypriv.power_mgnt != PS_MODE_ACTIVE)
- wiphy->flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT;
- else
- wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
-}
-
-int rtw_wdev_alloc(_adapter *padapter, struct device *dev)
-{
- int ret = 0;
- struct wiphy *wiphy;
- struct wireless_dev *wdev;
- struct rtw_wdev_priv *pwdev_priv;
- struct net_device *pnetdev = padapter->pnetdev;
-
- DBG_8192C("%s(padapter=%p)\n", __func__, padapter);
-
- /* wiphy */
- wiphy = wiphy_new(&rtw_cfg80211_ops, sizeof(struct rtw_wdev_priv));
- if (!wiphy) {
- DBG_8192C("Couldn't allocate wiphy device\n");
- ret = -ENOMEM;
- goto exit;
- }
- set_wiphy_dev(wiphy, dev);
- rtw_cfg80211_preinit_wiphy(padapter, wiphy);
-
- ret = wiphy_register(wiphy);
- if (ret < 0) {
- DBG_8192C("Couldn't register wiphy device\n");
- goto free_wiphy;
- }
-
- /* wdev */
- wdev = (struct wireless_dev *)rtw_zmalloc(sizeof(struct wireless_dev));
- if (!wdev) {
- DBG_8192C("Couldn't allocate wireless device\n");
- ret = -ENOMEM;
- goto unregister_wiphy;
- }
- wdev->wiphy = wiphy;
- wdev->netdev = pnetdev;
- //wdev->iftype = NL80211_IFTYPE_STATION;
- wdev->iftype = NL80211_IFTYPE_MONITOR; // for rtw_setopmode_cmd() in cfg80211_rtw_change_iface()
- padapter->rtw_wdev = wdev;
- pnetdev->ieee80211_ptr = wdev;
-
- //init pwdev_priv
- pwdev_priv = wdev_to_priv(wdev);
- pwdev_priv->rtw_wdev = wdev;
- pwdev_priv->pmon_ndev = NULL;
- pwdev_priv->ifname_mon[0] = '\0';
- pwdev_priv->padapter = padapter;
- pwdev_priv->scan_request = NULL;
- _rtw_spinlock_init(&pwdev_priv->scan_req_lock);
-
- pwdev_priv->p2p_enabled = _FALSE;
- pwdev_priv->provdisc_req_issued = _FALSE;
- rtw_wdev_invit_info_init(&pwdev_priv->invit_info);
-
- pwdev_priv->bandroid_scan = _FALSE;
-
- if(padapter->registrypriv.power_mgnt != PS_MODE_ACTIVE)
- pwdev_priv->power_mgmt = _TRUE;
- else
- pwdev_priv->power_mgmt = _FALSE;
-
-#ifdef CONFIG_CONCURRENT_MODE
- ATOMIC_SET(&pwdev_priv->switch_ch_to, 1);
- ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);
-#endif
-
- return ret;
-
- rtw_mfree((u8*)wdev, sizeof(struct wireless_dev));
-unregister_wiphy:
- wiphy_unregister(wiphy);
- free_wiphy:
- wiphy_free(wiphy);
-exit:
- return ret;
-
-}
-
-void rtw_wdev_free(struct wireless_dev *wdev)
-{
- struct rtw_wdev_priv *pwdev_priv;
-
- DBG_8192C("%s(wdev=%p)\n", __func__, wdev);
-
- if (!wdev)
- return;
-
- pwdev_priv = wdev_to_priv(wdev);
-
- rtw_spt_band_free(wdev->wiphy->bands[IEEE80211_BAND_2GHZ]);
- rtw_spt_band_free(wdev->wiphy->bands[IEEE80211_BAND_5GHZ]);
-
- wiphy_free(wdev->wiphy);
-
- rtw_mfree((u8*)wdev, sizeof(struct wireless_dev));
-}
-
-void rtw_wdev_unregister(struct wireless_dev *wdev)
-{
- struct rtw_wdev_priv *pwdev_priv;
-
- DBG_8192C("%s(wdev=%p)\n", __func__, wdev);
-
- if (!wdev)
- return;
-
- pwdev_priv = wdev_to_priv(wdev);
-
- rtw_cfg80211_indicate_scan_done(pwdev_priv, _TRUE);
-
- if (pwdev_priv->pmon_ndev) {
- DBG_8192C("%s, unregister monitor interface\n", __func__);
- unregister_netdev(pwdev_priv->pmon_ndev);
- }
-
- wiphy_unregister(wdev->wiphy);
-}
-
-#endif //CONFIG_IOCTL_CFG80211
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *
+ ******************************************************************************/
+#define _IOCTL_CFG80211_C_
+
+#include <drv_conf.h>
+#include <osdep_service.h>
+#include <drv_types.h>
+#include <rtw_ioctl.h>
+#include <rtw_ioctl_set.h>
+#include <rtw_ioctl_query.h>
+#include <xmit_osdep.h>
+
+#ifdef CONFIG_IOCTL_CFG80211
+
+#include "ioctl_cfg80211.h"
+
+#define RTW_MAX_MGMT_TX_CNT (8)
+
+#define RTW_SCAN_IE_LEN_MAX 2304
+#define RTW_MAX_REMAIN_ON_CHANNEL_DURATION 65535 //ms
+#define RTW_MAX_NUM_PMKIDS 4
+
+#define RTW_CH_MAX_2G_CHANNEL 14 /* Max channel in 2G band */
+
+static const u32 rtw_cipher_suites[] = {
+ WLAN_CIPHER_SUITE_WEP40,
+ WLAN_CIPHER_SUITE_WEP104,
+ WLAN_CIPHER_SUITE_TKIP,
+ WLAN_CIPHER_SUITE_CCMP,
+#ifdef CONFIG_IEEE80211W
+ WLAN_CIPHER_SUITE_AES_CMAC,
+#endif //CONFIG_IEEE80211W
+};
+
+#define RATETAB_ENT(_rate, _rateid, _flags) \
+ { \
+ .bitrate = (_rate), \
+ .hw_value = (_rateid), \
+ .flags = (_flags), \
+ }
+
+#define CHAN2G(_channel, _freq, _flags) { \
+ .band = IEEE80211_BAND_2GHZ, \
+ .center_freq = (_freq), \
+ .hw_value = (_channel), \
+ .flags = (_flags), \
+ .max_antenna_gain = 0, \
+ .max_power = 30, \
+}
+
+#define CHAN5G(_channel, _flags) { \
+ .band = IEEE80211_BAND_5GHZ, \
+ .center_freq = 5000 + (5 * (_channel)), \
+ .hw_value = (_channel), \
+ .flags = (_flags), \
+ .max_antenna_gain = 0, \
+ .max_power = 30, \
+}
+
+static struct ieee80211_rate rtw_rates[] = {
+ RATETAB_ENT(10, 0x1, 0),
+ RATETAB_ENT(20, 0x2, 0),
+ RATETAB_ENT(55, 0x4, 0),
+ RATETAB_ENT(110, 0x8, 0),
+ RATETAB_ENT(60, 0x10, 0),
+ RATETAB_ENT(90, 0x20, 0),
+ RATETAB_ENT(120, 0x40, 0),
+ RATETAB_ENT(180, 0x80, 0),
+ RATETAB_ENT(240, 0x100, 0),
+ RATETAB_ENT(360, 0x200, 0),
+ RATETAB_ENT(480, 0x400, 0),
+ RATETAB_ENT(540, 0x800, 0),
+};
+
+#define rtw_a_rates (rtw_rates + 4)
+#define RTW_A_RATES_NUM 8
+#define rtw_g_rates (rtw_rates + 0)
+#define RTW_G_RATES_NUM 12
+
+#define RTW_2G_CHANNELS_NUM 14
+#define RTW_5G_CHANNELS_NUM 37
+
+static struct ieee80211_channel rtw_2ghz_channels[] = {
+ CHAN2G(1, 2412, 0),
+ CHAN2G(2, 2417, 0),
+ CHAN2G(3, 2422, 0),
+ CHAN2G(4, 2427, 0),
+ CHAN2G(5, 2432, 0),
+ CHAN2G(6, 2437, 0),
+ CHAN2G(7, 2442, 0),
+ CHAN2G(8, 2447, 0),
+ CHAN2G(9, 2452, 0),
+ CHAN2G(10, 2457, 0),
+ CHAN2G(11, 2462, 0),
+ CHAN2G(12, 2467, 0),
+ CHAN2G(13, 2472, 0),
+ CHAN2G(14, 2484, 0),
+};
+
+static struct ieee80211_channel rtw_5ghz_a_channels[] = {
+ CHAN5G(34, 0), CHAN5G(36, 0),
+ CHAN5G(38, 0), CHAN5G(40, 0),
+ CHAN5G(42, 0), CHAN5G(44, 0),
+ CHAN5G(46, 0), CHAN5G(48, 0),
+ CHAN5G(52, 0), CHAN5G(56, 0),
+ CHAN5G(60, 0), CHAN5G(64, 0),
+ CHAN5G(100, 0), CHAN5G(104, 0),
+ CHAN5G(108, 0), CHAN5G(112, 0),
+ CHAN5G(116, 0), CHAN5G(120, 0),
+ CHAN5G(124, 0), CHAN5G(128, 0),
+ CHAN5G(132, 0), CHAN5G(136, 0),
+ CHAN5G(140, 0), CHAN5G(149, 0),
+ CHAN5G(153, 0), CHAN5G(157, 0),
+ CHAN5G(161, 0), CHAN5G(165, 0),
+ CHAN5G(184, 0), CHAN5G(188, 0),
+ CHAN5G(192, 0), CHAN5G(196, 0),
+ CHAN5G(200, 0), CHAN5G(204, 0),
+ CHAN5G(208, 0), CHAN5G(212, 0),
+ CHAN5G(216, 0),
+};
+
+
+void rtw_2g_channels_init(struct ieee80211_channel *channels)
+{
+ _rtw_memcpy((void*)channels, (void*)rtw_2ghz_channels,
+ sizeof(struct ieee80211_channel)*RTW_2G_CHANNELS_NUM
+ );
+}
+
+void rtw_5g_channels_init(struct ieee80211_channel *channels)
+{
+ _rtw_memcpy((void*)channels, (void*)rtw_5ghz_a_channels,
+ sizeof(struct ieee80211_channel)*RTW_5G_CHANNELS_NUM
+ );
+}
+
+void rtw_2g_rates_init(struct ieee80211_rate *rates)
+{
+ _rtw_memcpy(rates, rtw_g_rates,
+ sizeof(struct ieee80211_rate)*RTW_G_RATES_NUM
+ );
+}
+
+void rtw_5g_rates_init(struct ieee80211_rate *rates)
+{
+ _rtw_memcpy(rates, rtw_a_rates,
+ sizeof(struct ieee80211_rate)*RTW_A_RATES_NUM
+ );
+}
+
+struct ieee80211_supported_band *rtw_spt_band_alloc(
+ enum ieee80211_band band
+ )
+{
+ struct ieee80211_supported_band *spt_band = NULL;
+ int n_channels, n_bitrates;
+
+ if(band == IEEE80211_BAND_2GHZ)
+ {
+ n_channels = RTW_2G_CHANNELS_NUM;
+ n_bitrates = RTW_G_RATES_NUM;
+ }
+ else if(band == IEEE80211_BAND_5GHZ)
+ {
+ n_channels = RTW_5G_CHANNELS_NUM;
+ n_bitrates = RTW_A_RATES_NUM;
+ }
+ else
+ {
+ goto exit;
+ }
+
+ spt_band = (struct ieee80211_supported_band *)rtw_zmalloc(
+ sizeof(struct ieee80211_supported_band)
+ + sizeof(struct ieee80211_channel)*n_channels
+ + sizeof(struct ieee80211_rate)*n_bitrates
+ );
+ if(!spt_band)
+ goto exit;
+
+ spt_band->channels = (struct ieee80211_channel*)(((u8*)spt_band)+sizeof(struct ieee80211_supported_band));
+ spt_band->bitrates= (struct ieee80211_rate*)(((u8*)spt_band->channels)+sizeof(struct ieee80211_channel)*n_channels);
+ spt_band->band = band;
+ spt_band->n_channels = n_channels;
+ spt_band->n_bitrates = n_bitrates;
+
+ if(band == IEEE80211_BAND_2GHZ)
+ {
+ rtw_2g_channels_init(spt_band->channels);
+ rtw_2g_rates_init(spt_band->bitrates);
+ }
+ else if(band == IEEE80211_BAND_5GHZ)
+ {
+ rtw_5g_channels_init(spt_band->channels);
+ rtw_5g_rates_init(spt_band->bitrates);
+ }
+
+ //spt_band.ht_cap
+
+exit:
+
+ return spt_band;
+}
+
+void rtw_spt_band_free(struct ieee80211_supported_band *spt_band)
+{
+ u32 size;
+
+ if(!spt_band)
+ return;
+
+ if(spt_band->band == IEEE80211_BAND_2GHZ)
+ {
+ size = sizeof(struct ieee80211_supported_band)
+ + sizeof(struct ieee80211_channel)*RTW_2G_CHANNELS_NUM
+ + sizeof(struct ieee80211_rate)*RTW_G_RATES_NUM;
+ }
+ else if(spt_band->band == IEEE80211_BAND_5GHZ)
+ {
+ size = sizeof(struct ieee80211_supported_band)
+ + sizeof(struct ieee80211_channel)*RTW_5G_CHANNELS_NUM
+ + sizeof(struct ieee80211_rate)*RTW_A_RATES_NUM;
+ }
+ else
+ {
+
+ }
+ rtw_mfree((u8*)spt_band, size);
+}
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+static const struct ieee80211_txrx_stypes
+rtw_cfg80211_default_mgmt_stypes[NUM_NL80211_IFTYPES] = {
+ [NL80211_IFTYPE_ADHOC] = {
+ .tx = 0xffff,
+ .rx = BIT(IEEE80211_STYPE_ACTION >> 4)
+ },
+ [NL80211_IFTYPE_STATION] = {
+ .tx = 0xffff,
+ .rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
+ BIT(IEEE80211_STYPE_PROBE_REQ >> 4)
+ },
+ [NL80211_IFTYPE_AP] = {
+ .tx = 0xffff,
+ .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
+ BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
+ BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
+ BIT(IEEE80211_STYPE_DISASSOC >> 4) |
+ BIT(IEEE80211_STYPE_AUTH >> 4) |
+ BIT(IEEE80211_STYPE_DEAUTH >> 4) |
+ BIT(IEEE80211_STYPE_ACTION >> 4)
+ },
+ [NL80211_IFTYPE_AP_VLAN] = {
+ /* copy AP */
+ .tx = 0xffff,
+ .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
+ BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
+ BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
+ BIT(IEEE80211_STYPE_DISASSOC >> 4) |
+ BIT(IEEE80211_STYPE_AUTH >> 4) |
+ BIT(IEEE80211_STYPE_DEAUTH >> 4) |
+ BIT(IEEE80211_STYPE_ACTION >> 4)
+ },
+ [NL80211_IFTYPE_P2P_CLIENT] = {
+ .tx = 0xffff,
+ .rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
+ BIT(IEEE80211_STYPE_PROBE_REQ >> 4)
+ },
+ [NL80211_IFTYPE_P2P_GO] = {
+ .tx = 0xffff,
+ .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
+ BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
+ BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
+ BIT(IEEE80211_STYPE_DISASSOC >> 4) |
+ BIT(IEEE80211_STYPE_AUTH >> 4) |
+ BIT(IEEE80211_STYPE_DEAUTH >> 4) |
+ BIT(IEEE80211_STYPE_ACTION >> 4)
+ },
+};
+#endif
+
+static int rtw_ieee80211_channel_to_frequency(int chan, int band)
+{
+ /* see 802.11 17.3.8.3.2 and Annex J
+ * there are overlapping channel numbers in 5GHz and 2GHz bands */
+
+ if (band == IEEE80211_BAND_5GHZ) {
+ if (chan >= 182 && chan <= 196)
+ return 4000 + chan * 5;
+ else
+ return 5000 + chan * 5;
+ } else { /* IEEE80211_BAND_2GHZ */
+ if (chan == 14)
+ return 2484;
+ else if (chan < 14)
+ return 2407 + chan * 5;
+ else
+ return 0; /* not supported */
+ }
+}
+
+#define MAX_BSSINFO_LEN 1000
+struct cfg80211_bss *rtw_cfg80211_inform_bss(_adapter *padapter, struct wlan_network *pnetwork)
+{
+ struct ieee80211_channel *notify_channel;
+ struct cfg80211_bss *bss = NULL;
+ //struct ieee80211_supported_band *band;
+ u16 channel;
+ u32 freq;
+ u64 notify_timestamp;
+ u16 notify_capability;
+ u16 notify_interval;
+ u8 *notify_ie;
+ size_t notify_ielen;
+ s32 notify_signal;
+ u8 buf[MAX_BSSINFO_LEN], *pbuf;
+ size_t len,bssinf_len=0;
+ struct rtw_ieee80211_hdr *pwlanhdr;
+ unsigned short *fctrl;
+ u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+
+ struct wireless_dev *wdev = padapter->rtw_wdev;
+ struct wiphy *wiphy = wdev->wiphy;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+
+
+ //DBG_8192C("%s\n", __func__);
+
+ bssinf_len = pnetwork->network.IELength+sizeof (struct rtw_ieee80211_hdr_3addr);
+ if(bssinf_len > MAX_BSSINFO_LEN){
+ DBG_871X("%s IE Length too long > %d byte \n",__FUNCTION__,MAX_BSSINFO_LEN);
+ goto exit;
+ }
+
+ //To reduce PBC Overlap rate
+ //_enter_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
+ if(wdev_to_priv(wdev)->scan_request != NULL)
+ {
+ u8 *psr=NULL, sr = 0;
+ NDIS_802_11_SSID *pssid = &pnetwork->network.Ssid;
+ struct cfg80211_scan_request *request = wdev_to_priv(wdev)->scan_request;
+ struct cfg80211_ssid *ssids = request->ssids;
+ u32 wpsielen=0;
+ u8 *wpsie=NULL;
+
+ wpsie = rtw_get_wps_ie(pnetwork->network.IEs+_FIXED_IE_LENGTH_, pnetwork->network.IELength-_FIXED_IE_LENGTH_, NULL, &wpsielen);
+
+ if(wpsie && wpsielen>0)
+ psr = rtw_get_wps_attr_content(wpsie, wpsielen, WPS_ATTR_SELECTED_REGISTRAR, (u8*)(&sr), NULL);
+
+ if (sr != 0)
+ {
+ if(request->n_ssids == 1 && request->n_channels == 1) // it means under processing WPS
+ {
+ DBG_8192C("ssid=%s, len=%d\n", pssid->Ssid, pssid->SsidLength);
+
+ if(pssid->SsidLength == ssids[0].ssid_len &&
+ _rtw_memcmp(pssid->Ssid, ssids[0].ssid, ssids[0].ssid_len))
+ {
+ DBG_871X("%s, got sr and ssid match!\n", __func__);
+ }
+ else
+ {
+ if(psr !=NULL)
+ *psr = 0; //clear sr
+
+#if 0
+ WLAN_BSSID_EX *pselect_network = &pnetwork->network;
+ struct cfg80211_bss *pselect_bss = NULL;
+ struct ieee80211_channel *notify_channel = NULL;
+ u32 freq;
+
+ DBG_871X("%s, got sr, but ssid mismatch, to remove this bss\n", __func__);
+
+ if (pselect_network->Configuration.DSConfig <= RTW_CH_MAX_2G_CHANNEL)
+ freq = rtw_ieee80211_channel_to_frequency(pselect_network->Configuration.DSConfig, IEEE80211_BAND_2GHZ);
+ else
+ freq = rtw_ieee80211_channel_to_frequency(pselect_network->Configuration.DSConfig, IEEE80211_BAND_5GHZ);
+
+ notify_channel = ieee80211_get_channel(wiphy, freq);
+ pselect_bss = cfg80211_get_bss(wiphy, NULL/*notify_channel*/,
+ pselect_network->MacAddress, pselect_network->Ssid.Ssid,
+ pselect_network->Ssid.SsidLength, 0/*WLAN_CAPABILITY_ESS*/,
+ 0/*WLAN_CAPABILITY_ESS*/);
+
+ if(pselect_bss)
+ {
+ DBG_871X("%s, got bss for cfg80211 for unlinking bss\n", __func__);
+
+ cfg80211_unlink_bss(wiphy, pselect_bss);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
+ cfg80211_put_bss(wiphy, pselect_bss);
+#else
+ cfg80211_put_bss(pselect_bss);
+#endif
+
+ }
+
+ goto exit;
+#endif
+ }
+ }
+ }
+ }
+ //_exit_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
+
+ channel = pnetwork->network.Configuration.DSConfig;
+ if (channel <= RTW_CH_MAX_2G_CHANNEL)
+ freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
+ else
+ freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
+
+ notify_channel = ieee80211_get_channel(wiphy, freq);
+
+ //rtw_get_timestampe_from_ie()
+ notify_timestamp = jiffies_to_msecs(jiffies)*1000; /* uSec */
+
+ notify_interval = le16_to_cpu(*(u16*)rtw_get_beacon_interval_from_ie(pnetwork->network.IEs));
+ notify_capability = le16_to_cpu(*(u16*)rtw_get_capability_from_ie(pnetwork->network.IEs));
+
+
+ notify_ie = pnetwork->network.IEs+_FIXED_IE_LENGTH_;
+ notify_ielen = pnetwork->network.IELength-_FIXED_IE_LENGTH_;
+
+ //We've set wiphy's signal_type as CFG80211_SIGNAL_TYPE_MBM: signal strength in mBm (100*dBm)
+ if ( check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE &&
+ is_same_network(&pmlmepriv->cur_network.network, &pnetwork->network, 0)) {
+ notify_signal = 100*translate_percentage_to_dbm(padapter->recvpriv.signal_strength);//dbm
+ } else {
+ notify_signal = 100*translate_percentage_to_dbm(pnetwork->network.PhyInfo.SignalStrength);//dbm
+ }
+
+ #if 0
+ DBG_8192C("bssid: "MAC_FMT"\n", MAC_ARG(pnetwork->network.MacAddress));
+ DBG_8192C("Channel: %d(%d)\n", channel, freq);
+ DBG_8192C("Capability: %X\n", notify_capability);
+ DBG_8192C("Beacon interval: %d\n", notify_interval);
+ DBG_8192C("Signal: %d\n", notify_signal);
+ DBG_8192C("notify_timestamp: %#018llx\n", notify_timestamp);
+ #endif
+
+ pbuf = buf;
+
+ pwlanhdr = (struct rtw_ieee80211_hdr *)pbuf;
+ fctrl = &(pwlanhdr->frame_ctl);
+ *(fctrl) = 0;
+
+ SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
+ //pmlmeext->mgnt_seq++;
+
+ if (pnetwork->network.Reserved[0] == 1) { // WIFI_BEACON
+ _rtw_memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
+ SetFrameSubType(pbuf, WIFI_BEACON);
+ } else {
+ _rtw_memcpy(pwlanhdr->addr1, myid(&(padapter->eeprompriv)), ETH_ALEN);
+ SetFrameSubType(pbuf, WIFI_PROBERSP);
+ }
+
+ _rtw_memcpy(pwlanhdr->addr2, pnetwork->network.MacAddress, ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr3, pnetwork->network.MacAddress, ETH_ALEN);
+
+
+ pbuf += sizeof(struct rtw_ieee80211_hdr_3addr);
+ len = sizeof (struct rtw_ieee80211_hdr_3addr);
+
+ _rtw_memcpy(pbuf, pnetwork->network.IEs, pnetwork->network.IELength);
+ len += pnetwork->network.IELength;
+
+ //#ifdef CONFIG_P2P
+ //if(rtw_get_p2p_ie(pnetwork->network.IEs+12, pnetwork->network.IELength-12, NULL, NULL))
+ //{
+ // DBG_8192C("%s, got p2p_ie\n", __func__);
+ //}
+ //#endif
+
+
+#if 1
+ bss = cfg80211_inform_bss_frame(wiphy, notify_channel, (struct ieee80211_mgmt *)buf,
+ len, notify_signal, GFP_ATOMIC);
+#else
+
+ bss = cfg80211_inform_bss(wiphy, notify_channel, (const u8 *)pnetwork->network.MacAddress,
+ notify_timestamp, notify_capability, notify_interval, notify_ie,
+ notify_ielen, notify_signal, GFP_ATOMIC/*GFP_KERNEL*/);
+#endif
+
+ if (unlikely(!bss)) {
+ DBG_8192C(FUNC_ADPT_FMT" bss NULL\n", FUNC_ADPT_ARG(padapter));
+ goto exit;
+ }
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38))
+#ifndef COMPAT_KERNEL_RELEASE
+ //patch for cfg80211, update beacon ies to information_elements
+ if (pnetwork->network.Reserved[0] == 1) { // WIFI_BEACON
+
+ if(bss->len_information_elements != bss->len_beacon_ies)
+ {
+ bss->information_elements = bss->beacon_ies;
+ bss->len_information_elements = bss->len_beacon_ies;
+ }
+ }
+#endif //COMPAT_KERNEL_RELEASE
+#endif //LINUX_VERSION_CODE < KERNEL_VERSION(2,6,38)
+
+/*
+ {
+ if( bss->information_elements == bss->proberesp_ies)
+ {
+ if( bss->len_information_elements != bss->len_proberesp_ies)
+ {
+ DBG_8192C("error!, len_information_elements != bss->len_proberesp_ies\n");
+ }
+
+ }
+ else if(bss->len_information_elements < bss->len_beacon_ies)
+ {
+ bss->information_elements = bss->beacon_ies;
+ bss->len_information_elements = bss->len_beacon_ies;
+ }
+ }
+*/
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0)
+ cfg80211_put_bss(wiphy, bss);
+#else
+ cfg80211_put_bss(bss);
+#endif
+
+exit:
+ return bss;
+
+}
+
+/*
+ Check the given bss is valid by kernel API cfg80211_get_bss()
+ @padapter : the given adapter
+
+ return _TRUE if bss is valid, _FALSE for not found.
+*/
+int rtw_cfg80211_check_bss(_adapter *padapter)
+{
+ WLAN_BSSID_EX *pnetwork = &(padapter->mlmeextpriv.mlmext_info.network);
+ struct cfg80211_bss *bss = NULL;
+ struct ieee80211_channel *notify_channel = NULL;
+ u32 freq;
+
+ if (!(pnetwork) || !(padapter->rtw_wdev))
+ return _FALSE;
+
+ if (pnetwork->Configuration.DSConfig <= RTW_CH_MAX_2G_CHANNEL)
+ freq = rtw_ieee80211_channel_to_frequency(pnetwork->Configuration.DSConfig, IEEE80211_BAND_2GHZ);
+ else
+ freq = rtw_ieee80211_channel_to_frequency(pnetwork->Configuration.DSConfig, IEEE80211_BAND_5GHZ);
+
+ notify_channel = ieee80211_get_channel(padapter->rtw_wdev->wiphy, freq);
+ bss = cfg80211_get_bss(padapter->rtw_wdev->wiphy, notify_channel,
+ pnetwork->MacAddress, pnetwork->Ssid.Ssid,
+ pnetwork->Ssid.SsidLength,
+ WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS);
+
+ return (bss!=NULL);
+}
+
+void rtw_cfg80211_indicate_connect(_adapter *padapter)
+{
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct wlan_network *cur_network = &(pmlmepriv->cur_network);
+ struct wireless_dev *pwdev = padapter->rtw_wdev;
+#ifdef CONFIG_P2P
+ struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
+#endif
+ struct cfg80211_bss *bss = NULL;
+
+ DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
+ if (pwdev->iftype != NL80211_IFTYPE_STATION
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ && pwdev->iftype != NL80211_IFTYPE_P2P_CLIENT
+ #endif
+ ) {
+ return;
+ }
+
+ if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
+ return;
+
+#ifdef CONFIG_P2P
+ if(pwdinfo->driver_interface == DRIVER_CFG80211 )
+ {
+ if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
+ {
+ rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
+ rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
+ rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
+ DBG_8192C("%s, role=%d, p2p_state=%d, pre_p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), rtw_p2p_pre_state(pwdinfo));
+ }
+ }
+#endif //CONFIG_P2P
+
+ if (!rtw_cfg80211_check_bss(padapter)) {
+ WLAN_BSSID_EX *pnetwork = &(padapter->mlmeextpriv.mlmext_info.network);
+ struct wlan_network *scanned = pmlmepriv->cur_network_scanned;
+
+ //DBG_871X(FUNC_ADPT_FMT" BSS not found\n", FUNC_ADPT_ARG(padapter));
+
+ if(scanned == NULL)
+ rtw_warn_on(1);
+
+ if (_rtw_memcmp(&(scanned->network.Ssid), &(pnetwork->Ssid), sizeof(NDIS_802_11_SSID)) == _TRUE
+ && _rtw_memcmp(scanned->network.MacAddress, pnetwork->MacAddress, sizeof(NDIS_802_11_MAC_ADDRESS)) == _TRUE
+ ) {
+ if (!rtw_cfg80211_inform_bss(padapter,scanned)) {
+ DBG_871X(FUNC_ADPT_FMT" inform fail !!\n", FUNC_ADPT_ARG(padapter));
+ } else {
+ //DBG_871X(FUNC_ADPT_FMT" inform success !!\n", FUNC_ADPT_ARG(padapter));
+ }
+ } else {
+ rtw_warn_on(1);
+ }
+
+ if (!rtw_cfg80211_check_bss(padapter))
+ DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" BSS not found !!\n", FUNC_ADPT_ARG(padapter));
+ }
+
+ #ifdef CONFIG_LAYER2_ROAMING
+ if (rtw_to_roaming(padapter) > 0) {
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39) || defined(COMPAT_KERNEL_RELEASE)
+ struct wiphy *wiphy = pwdev->wiphy;
+ struct ieee80211_channel *notify_channel;
+ u32 freq;
+ u16 channel = cur_network->network.Configuration.DSConfig;
+
+ if (channel <= RTW_CH_MAX_2G_CHANNEL)
+ freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
+ else
+ freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
+
+ notify_channel = ieee80211_get_channel(wiphy, freq);
+ #endif
+
+ DBG_871X(FUNC_ADPT_FMT" call cfg80211_roamed\n", FUNC_ADPT_ARG(padapter));
+ cfg80211_roamed(padapter->pnetdev
+ #if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 39) || defined(COMPAT_KERNEL_RELEASE)
+ , notify_channel
+ #endif
+ , cur_network->network.MacAddress
+ , pmlmepriv->assoc_req+sizeof(struct rtw_ieee80211_hdr_3addr)+2
+ , pmlmepriv->assoc_req_len-sizeof(struct rtw_ieee80211_hdr_3addr)-2
+ , pmlmepriv->assoc_rsp+sizeof(struct rtw_ieee80211_hdr_3addr)+6
+ , pmlmepriv->assoc_rsp_len-sizeof(struct rtw_ieee80211_hdr_3addr)-6
+ , GFP_ATOMIC);
+ }
+ else
+ #endif
+ {
+ DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state);
+ cfg80211_connect_result(padapter->pnetdev, cur_network->network.MacAddress
+ , pmlmepriv->assoc_req+sizeof(struct rtw_ieee80211_hdr_3addr)+2
+ , pmlmepriv->assoc_req_len-sizeof(struct rtw_ieee80211_hdr_3addr)-2
+ , pmlmepriv->assoc_rsp+sizeof(struct rtw_ieee80211_hdr_3addr)+6
+ , pmlmepriv->assoc_rsp_len-sizeof(struct rtw_ieee80211_hdr_3addr)-6
+ , WLAN_STATUS_SUCCESS, GFP_ATOMIC);
+ DBG_8192C("pwdev->sme_state(a)=%d\n", pwdev->sme_state);
+ }
+}
+
+void rtw_cfg80211_indicate_disconnect(_adapter *padapter)
+{
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct wireless_dev *pwdev = padapter->rtw_wdev;
+#ifdef CONFIG_P2P
+ struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
+#endif
+
+ DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
+
+ if (pwdev->iftype != NL80211_IFTYPE_STATION
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ && pwdev->iftype != NL80211_IFTYPE_P2P_CLIENT
+ #endif
+ ) {
+ return;
+ }
+
+ if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
+ return;
+
+#ifdef CONFIG_P2P
+ if( pwdinfo->driver_interface == DRIVER_CFG80211 )
+ {
+ if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
+ {
+ _cancel_timer_ex( &pwdinfo->find_phase_timer );
+ _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
+ _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
+
+ rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
+ rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
+
+ DBG_8192C("%s, role=%d, p2p_state=%d, pre_p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), rtw_p2p_pre_state(pwdinfo));
+ }
+ }
+#endif //CONFIG_P2P
+
+ if (!padapter->mlmepriv.not_indic_disco) {
+ DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state);
+
+ if(pwdev->sme_state==CFG80211_SME_CONNECTING)
+ cfg80211_connect_result(padapter->pnetdev, NULL, NULL, 0, NULL, 0,
+ WLAN_STATUS_UNSPECIFIED_FAILURE, GFP_ATOMIC/*GFP_KERNEL*/);
+ else if(pwdev->sme_state==CFG80211_SME_CONNECTED)
+ cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0, GFP_ATOMIC);
+ //else
+ //DBG_8192C("pwdev->sme_state=%d\n", pwdev->sme_state);
+
+ DBG_8192C("pwdev->sme_state(a)=%d\n", pwdev->sme_state);
+ }
+}
+
+
+#ifdef CONFIG_AP_MODE
+static u8 set_pairwise_key(_adapter *padapter, struct sta_info *psta)
+{
+ struct cmd_obj* ph2c;
+ struct set_stakey_parm *psetstakey_para;
+ struct cmd_priv *pcmdpriv=&padapter->cmdpriv;
+ u8 res=_SUCCESS;
+
+ ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
+ if ( ph2c == NULL){
+ res= _FAIL;
+ goto exit;
+ }
+
+ psetstakey_para = (struct set_stakey_parm*)rtw_zmalloc(sizeof(struct set_stakey_parm));
+ if(psetstakey_para==NULL){
+ rtw_mfree((u8 *) ph2c, sizeof(struct cmd_obj));
+ res=_FAIL;
+ goto exit;
+ }
+
+ init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, _SetStaKey_CMD_);
+
+
+ psetstakey_para->algorithm = (u8)psta->dot118021XPrivacy;
+
+ _rtw_memcpy(psetstakey_para->addr, psta->hwaddr, ETH_ALEN);
+
+ _rtw_memcpy(psetstakey_para->key, &psta->dot118021x_UncstKey, 16);
+
+
+ res = rtw_enqueue_cmd(pcmdpriv, ph2c);
+
+exit:
+
+ return res;
+
+}
+
+static int set_group_key(_adapter *padapter, u8 *key, u8 alg, int keyid)
+{
+ u8 keylen;
+ struct cmd_obj* pcmd;
+ struct setkey_parm *psetkeyparm;
+ struct cmd_priv *pcmdpriv=&(padapter->cmdpriv);
+ int res=_SUCCESS;
+
+ DBG_8192C("%s\n", __FUNCTION__);
+
+ pcmd = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
+ if(pcmd==NULL){
+ res= _FAIL;
+ goto exit;
+ }
+ psetkeyparm=(struct setkey_parm*)rtw_zmalloc(sizeof(struct setkey_parm));
+ if(psetkeyparm==NULL){
+ rtw_mfree((unsigned char *)pcmd, sizeof(struct cmd_obj));
+ res= _FAIL;
+ goto exit;
+ }
+
+ _rtw_memset(psetkeyparm, 0, sizeof(struct setkey_parm));
+
+ psetkeyparm->keyid=(u8)keyid;
+ if (is_wep_enc(alg))
+ padapter->securitypriv.key_mask |= BIT(psetkeyparm->keyid);
+
+ psetkeyparm->algorithm = alg;
+
+ psetkeyparm->set_tx = 1;
+
+ switch(alg)
+ {
+ case _WEP40_:
+ keylen = 5;
+ break;
+ case _WEP104_:
+ keylen = 13;
+ break;
+ case _TKIP_:
+ case _TKIP_WTMIC_:
+ case _AES_:
+ keylen = 16;
+ default:
+ keylen = 16;
+ }
+
+ _rtw_memcpy(&(psetkeyparm->key[0]), key, keylen);
+
+ pcmd->cmdcode = _SetKey_CMD_;
+ pcmd->parmbuf = (u8 *)psetkeyparm;
+ pcmd->cmdsz = (sizeof(struct setkey_parm));
+ pcmd->rsp = NULL;
+ pcmd->rspsz = 0;
+
+
+ _rtw_init_listhead(&pcmd->list);
+
+ res = rtw_enqueue_cmd(pcmdpriv, pcmd);
+
+exit:
+
+ return res;
+
+
+}
+
+static int set_wep_key(_adapter *padapter, u8 *key, u8 keylen, int keyid)
+{
+ u8 alg;
+
+ switch(keylen)
+ {
+ case 5:
+ alg =_WEP40_;
+ break;
+ case 13:
+ alg =_WEP104_;
+ break;
+ default:
+ alg =_NO_PRIVACY_;
+ }
+
+ return set_group_key(padapter, key, alg, keyid);
+
+}
+
+static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, struct ieee_param *param, u32 param_len)
+{
+ int ret = 0;
+ u32 wep_key_idx, wep_key_len,wep_total_len;
+ struct sta_info *psta = NULL, *pbcmc_sta = NULL;
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct security_priv* psecuritypriv=&(padapter->securitypriv);
+ struct sta_priv *pstapriv = &padapter->stapriv;
+
+ DBG_8192C("%s\n", __FUNCTION__);
+
+ param->u.crypt.err = 0;
+ param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0';
+
+ //sizeof(struct ieee_param) = 64 bytes;
+ //if (param_len != (u32) ((u8 *) param->u.crypt.key - (u8 *) param) + param->u.crypt.key_len)
+ if (param_len != sizeof(struct ieee_param) + param->u.crypt.key_len)
+ {
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
+ param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
+ param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
+ {
+ if (param->u.crypt.idx >= WEP_KEYS)
+ {
+ ret = -EINVAL;
+ goto exit;
+ }
+ }
+ else
+ {
+ psta = rtw_get_stainfo(pstapriv, param->sta_addr);
+ if(!psta)
+ {
+ //ret = -EINVAL;
+ DBG_8192C("rtw_set_encryption(), sta has already been removed or never been added\n");
+ goto exit;
+ }
+ }
+
+ if (strcmp(param->u.crypt.alg, "none") == 0 && (psta==NULL))
+ {
+ //todo:clear default encryption keys
+
+ DBG_8192C("clear default encryption keys, keyid=%d\n", param->u.crypt.idx);
+
+ goto exit;
+ }
+
+
+ if (strcmp(param->u.crypt.alg, "WEP") == 0 && (psta==NULL))
+ {
+ DBG_8192C("r871x_set_encryption, crypt.alg = WEP\n");
+
+ wep_key_idx = param->u.crypt.idx;
+ wep_key_len = param->u.crypt.key_len;
+
+ DBG_8192C("r871x_set_encryption, wep_key_idx=%d, len=%d\n", wep_key_idx, wep_key_len);
+
+ if((wep_key_idx >= WEP_KEYS) || (wep_key_len<=0))
+ {
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if (wep_key_len > 0)
+ {
+ wep_key_len = wep_key_len <= 5 ? 5 : 13;
+ }
+
+ if (psecuritypriv->bWepDefaultKeyIdxSet == 0)
+ {
+ //wep default key has not been set, so use this key index as default key.
+
+ psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
+ psecuritypriv->dot11PrivacyAlgrthm=_WEP40_;
+ psecuritypriv->dot118021XGrpPrivacy=_WEP40_;
+
+ if(wep_key_len == 13)
+ {
+ psecuritypriv->dot11PrivacyAlgrthm=_WEP104_;
+ psecuritypriv->dot118021XGrpPrivacy=_WEP104_;
+ }
+
+ psecuritypriv->dot11PrivacyKeyIndex = wep_key_idx;
+ }
+
+ _rtw_memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), param->u.crypt.key, wep_key_len);
+
+ psecuritypriv->dot11DefKeylen[wep_key_idx] = wep_key_len;
+
+ set_wep_key(padapter, param->u.crypt.key, wep_key_len, wep_key_idx);
+
+ goto exit;
+
+ }
+
+
+ if(!psta && check_fwstate(pmlmepriv, WIFI_AP_STATE)) // //group key
+ {
+ if(param->u.crypt.set_tx == 0) //group key
+ {
+ if(strcmp(param->u.crypt.alg, "WEP") == 0)
+ {
+ DBG_8192C("%s, set group_key, WEP\n", __FUNCTION__);
+
+ _rtw_memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
+
+ psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
+ if(param->u.crypt.key_len==13)
+ {
+ psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
+ }
+
+ }
+ else if(strcmp(param->u.crypt.alg, "TKIP") == 0)
+ {
+ DBG_8192C("%s, set group_key, TKIP\n", __FUNCTION__);
+
+ psecuritypriv->dot118021XGrpPrivacy = _TKIP_;
+
+ _rtw_memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
+
+ //DEBUG_ERR("set key length :param->u.crypt.key_len=%d\n", param->u.crypt.key_len);
+ //set mic key
+ _rtw_memcpy(psecuritypriv->dot118021XGrptxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[16]), 8);
+ _rtw_memcpy(psecuritypriv->dot118021XGrprxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[24]), 8);
+
+ psecuritypriv->busetkipkey = _TRUE;
+
+ }
+ else if(strcmp(param->u.crypt.alg, "CCMP") == 0)
+ {
+ DBG_8192C("%s, set group_key, CCMP\n", __FUNCTION__);
+
+ psecuritypriv->dot118021XGrpPrivacy = _AES_;
+
+ _rtw_memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
+ }
+ else
+ {
+ DBG_8192C("%s, set group_key, none\n", __FUNCTION__);
+
+ psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
+ }
+
+ psecuritypriv->dot118021XGrpKeyid = param->u.crypt.idx;
+
+ psecuritypriv->binstallGrpkey = _TRUE;
+
+ psecuritypriv->dot11PrivacyAlgrthm = psecuritypriv->dot118021XGrpPrivacy;//!!!
+
+ set_group_key(padapter, param->u.crypt.key, psecuritypriv->dot118021XGrpPrivacy, param->u.crypt.idx);
+
+ pbcmc_sta=rtw_get_bcmc_stainfo(padapter);
+ if(pbcmc_sta)
+ {
+ pbcmc_sta->ieee8021x_blocked = _FALSE;
+ pbcmc_sta->dot118021XPrivacy= psecuritypriv->dot118021XGrpPrivacy;//rx will use bmc_sta's dot118021XPrivacy
+ }
+
+ }
+
+ goto exit;
+
+ }
+
+ if(psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X && psta) // psk/802_1x
+ {
+ if(check_fwstate(pmlmepriv, WIFI_AP_STATE))
+ {
+ if(param->u.crypt.set_tx ==1) //pairwise key
+ {
+ _rtw_memcpy(psta->dot118021x_UncstKey.skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
+
+ if(strcmp(param->u.crypt.alg, "WEP") == 0)
+ {
+ DBG_8192C("%s, set pairwise key, WEP\n", __FUNCTION__);
+
+ psta->dot118021XPrivacy = _WEP40_;
+ if(param->u.crypt.key_len==13)
+ {
+ psta->dot118021XPrivacy = _WEP104_;
+ }
+ }
+ else if(strcmp(param->u.crypt.alg, "TKIP") == 0)
+ {
+ DBG_8192C("%s, set pairwise key, TKIP\n", __FUNCTION__);
+
+ psta->dot118021XPrivacy = _TKIP_;
+
+ //DEBUG_ERR("set key length :param->u.crypt.key_len=%d\n", param->u.crypt.key_len);
+ //set mic key
+ _rtw_memcpy(psta->dot11tkiptxmickey.skey, &(param->u.crypt.key[16]), 8);
+ _rtw_memcpy(psta->dot11tkiprxmickey.skey, &(param->u.crypt.key[24]), 8);
+
+ psecuritypriv->busetkipkey = _TRUE;
+
+ }
+ else if(strcmp(param->u.crypt.alg, "CCMP") == 0)
+ {
+
+ DBG_8192C("%s, set pairwise key, CCMP\n", __FUNCTION__);
+
+ psta->dot118021XPrivacy = _AES_;
+ }
+ else
+ {
+ DBG_8192C("%s, set pairwise key, none\n", __FUNCTION__);
+
+ psta->dot118021XPrivacy = _NO_PRIVACY_;
+ }
+
+ set_pairwise_key(padapter, psta);
+
+ psta->ieee8021x_blocked = _FALSE;
+
+ psta->bpairwise_key_installed = _TRUE;
+
+ }
+ else//group key???
+ {
+ if(strcmp(param->u.crypt.alg, "WEP") == 0)
+ {
+ _rtw_memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
+
+ psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
+ if(param->u.crypt.key_len==13)
+ {
+ psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
+ }
+ }
+ else if(strcmp(param->u.crypt.alg, "TKIP") == 0)
+ {
+ psecuritypriv->dot118021XGrpPrivacy = _TKIP_;
+
+ _rtw_memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
+
+ //DEBUG_ERR("set key length :param->u.crypt.key_len=%d\n", param->u.crypt.key_len);
+ //set mic key
+ _rtw_memcpy(psecuritypriv->dot118021XGrptxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[16]), 8);
+ _rtw_memcpy(psecuritypriv->dot118021XGrprxmickey[param->u.crypt.idx].skey, &(param->u.crypt.key[24]), 8);
+
+ psecuritypriv->busetkipkey = _TRUE;
+
+ }
+ else if(strcmp(param->u.crypt.alg, "CCMP") == 0)
+ {
+ psecuritypriv->dot118021XGrpPrivacy = _AES_;
+
+ _rtw_memcpy(psecuritypriv->dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
+ }
+ else
+ {
+ psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
+ }
+
+ psecuritypriv->dot118021XGrpKeyid = param->u.crypt.idx;
+
+ psecuritypriv->binstallGrpkey = _TRUE;
+
+ psecuritypriv->dot11PrivacyAlgrthm = psecuritypriv->dot118021XGrpPrivacy;//!!!
+
+ set_group_key(padapter, param->u.crypt.key, psecuritypriv->dot118021XGrpPrivacy, param->u.crypt.idx);
+
+ pbcmc_sta=rtw_get_bcmc_stainfo(padapter);
+ if(pbcmc_sta)
+ {
+ pbcmc_sta->ieee8021x_blocked = _FALSE;
+ pbcmc_sta->dot118021XPrivacy= psecuritypriv->dot118021XGrpPrivacy;//rx will use bmc_sta's dot118021XPrivacy
+ }
+
+ }
+
+ }
+
+ }
+
+exit:
+
+ return ret;
+
+}
+#endif
+
+static int rtw_cfg80211_set_encryption(struct net_device *dev, struct ieee_param *param, u32 param_len)
+{
+ int ret = 0;
+ u32 wep_key_idx, wep_key_len,wep_total_len;
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct security_priv *psecuritypriv = &padapter->securitypriv;
+#ifdef CONFIG_P2P
+ struct wifidirect_info* pwdinfo = &padapter->wdinfo;
+#endif //CONFIG_P2P
+
+_func_enter_;
+
+ DBG_8192C("%s\n", __func__);
+
+ param->u.crypt.err = 0;
+ param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0';
+
+ if (param_len < (u32) ((u8 *) param->u.crypt.key - (u8 *) param) + param->u.crypt.key_len)
+ {
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
+ param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
+ param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
+ {
+ if (param->u.crypt.idx >= WEP_KEYS
+#ifdef CONFIG_IEEE80211W
+ && param->u.crypt.idx > BIP_MAX_KEYID
+#endif //CONFIG_IEEE80211W
+ )
+ {
+ ret = -EINVAL;
+ goto exit;
+ }
+ } else {
+#ifdef CONFIG_WAPI_SUPPORT
+ if (strcmp(param->u.crypt.alg, "SMS4"))
+#endif
+ {
+ ret = -EINVAL;
+ goto exit;
+ }
+ }
+
+ if (strcmp(param->u.crypt.alg, "WEP") == 0)
+ {
+ RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,("wpa_set_encryption, crypt.alg = WEP\n"));
+ DBG_8192C("wpa_set_encryption, crypt.alg = WEP\n");
+
+ wep_key_idx = param->u.crypt.idx;
+ wep_key_len = param->u.crypt.key_len;
+
+ if ((wep_key_idx > WEP_KEYS) || (wep_key_len <= 0))
+ {
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if (psecuritypriv->bWepDefaultKeyIdxSet == 0)
+ {
+ //wep default key has not been set, so use this key index as default key.
+
+ wep_key_len = wep_key_len <= 5 ? 5 : 13;
+
+ psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
+ psecuritypriv->dot11PrivacyAlgrthm = _WEP40_;
+ psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
+
+ if(wep_key_len==13)
+ {
+ psecuritypriv->dot11PrivacyAlgrthm = _WEP104_;
+ psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
+ }
+
+ psecuritypriv->dot11PrivacyKeyIndex = wep_key_idx;
+ }
+
+ _rtw_memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), param->u.crypt.key, wep_key_len);
+
+ psecuritypriv->dot11DefKeylen[wep_key_idx] = wep_key_len;
+
+ rtw_set_key(padapter, psecuritypriv, wep_key_idx, 0,_TRUE);
+
+ goto exit;
+ }
+
+ if(padapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X) // 802_1x
+ {
+ struct sta_info * psta,*pbcmc_sta;
+ struct sta_priv * pstapriv = &padapter->stapriv;
+
+ //DBG_8192C("%s, : dot11AuthAlgrthm == dot11AuthAlgrthm_8021X \n", __func__);
+
+ if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_MP_STATE) == _TRUE) //sta mode
+ {
+ psta = rtw_get_stainfo(pstapriv, get_bssid(pmlmepriv));
+ if (psta == NULL) {
+ //DEBUG_ERR( ("Set wpa_set_encryption: Obtain Sta_info fail \n"));
+ DBG_8192C("%s, : Obtain Sta_info fail \n", __func__);
+ }
+ else
+ {
+ //Jeff: don't disable ieee8021x_blocked while clearing key
+ if (strcmp(param->u.crypt.alg, "none") != 0)
+ psta->ieee8021x_blocked = _FALSE;
+
+
+ if((padapter->securitypriv.ndisencryptstatus == Ndis802_11Encryption2Enabled)||
+ (padapter->securitypriv.ndisencryptstatus == Ndis802_11Encryption3Enabled))
+ {
+ psta->dot118021XPrivacy = padapter->securitypriv.dot11PrivacyAlgrthm;
+ }
+
+ if(param->u.crypt.set_tx ==1)//pairwise key
+ {
+
+ DBG_8192C("%s, : param->u.crypt.set_tx ==1 \n", __func__);
+
+ _rtw_memcpy(psta->dot118021x_UncstKey.skey, param->u.crypt.key, (param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
+
+ if(strcmp(param->u.crypt.alg, "TKIP") == 0)//set mic key
+ {
+ //DEBUG_ERR(("\nset key length :param->u.crypt.key_len=%d\n", param->u.crypt.key_len));
+ _rtw_memcpy(psta->dot11tkiptxmickey.skey, &(param->u.crypt.key[16]), 8);
+ _rtw_memcpy(psta->dot11tkiprxmickey.skey, &(param->u.crypt.key[24]), 8);
+
+ padapter->securitypriv.busetkipkey=_FALSE;
+ //_set_timer(&padapter->securitypriv.tkip_timer, 50);
+ }
+
+ //DEBUG_ERR((" param->u.crypt.key_len=%d\n",param->u.crypt.key_len));
+ DBG_871X(" ~~~~set sta key:unicastkey\n");
+
+ rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE, _TRUE);
+ }
+ else//group key
+ {
+ if(strcmp(param->u.crypt.alg, "TKIP") == 0 || strcmp(param->u.crypt.alg, "CCMP") == 0)
+ {
+ _rtw_memcpy(padapter->securitypriv.dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key,(param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
+ _rtw_memcpy(padapter->securitypriv.dot118021XGrptxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[16]),8);
+ _rtw_memcpy(padapter->securitypriv.dot118021XGrprxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[24]),8);
+ padapter->securitypriv.binstallGrpkey = _TRUE;
+ //DEBUG_ERR((" param->u.crypt.key_len=%d\n", param->u.crypt.key_len));
+ DBG_871X(" ~~~~set sta key:groupkey\n");
+
+ padapter->securitypriv.dot118021XGrpKeyid = param->u.crypt.idx;
+#ifdef CONFIG_CONCURRENT_MODE
+ if (padapter->adapter_type == PRIMARY_ADAPTER)
+ rtw_set_key(padapter,&padapter->securitypriv,param->u.crypt.idx, 1,_TRUE);
+ else
+ DBG_871X_LEVEL(_drv_always_, "second interface do not set cam.\n");
+#else
+ rtw_set_key(padapter,&padapter->securitypriv,param->u.crypt.idx, 1,_TRUE);
+#endif
+ }
+#ifdef CONFIG_IEEE80211W
+ else if(strcmp(param->u.crypt.alg, "BIP") == 0)
+ {
+ int no;
+ //DBG_871X("BIP key_len=%d , index=%d @@@@@@@@@@@@@@@@@@\n", param->u.crypt.key_len, param->u.crypt.idx);
+ //save the IGTK key, length 16 bytes
+ _rtw_memcpy(padapter->securitypriv.dot11wBIPKey[param->u.crypt.idx].skey, param->u.crypt.key,(param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
+ /*DBG_871X("IGTK key below:\n");
+ for(no=0;no<16;no++)
+ printk(" %02x ", padapter->securitypriv.dot11wBIPKey[param->u.crypt.idx].skey[no]);
+ DBG_871X("\n");*/
+ padapter->securitypriv.dot11wBIPKeyid = param->u.crypt.idx;
+ padapter->securitypriv.binstallBIPkey = _TRUE;
+ DBG_871X(" ~~~~set sta key:IGKT\n");
+ }
+#endif //CONFIG_IEEE80211W
+
+#ifdef CONFIG_P2P
+ if(pwdinfo->driver_interface == DRIVER_CFG80211 )
+ {
+ if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
+ {
+ rtw_p2p_set_state(pwdinfo, P2P_STATE_PROVISIONING_DONE);
+ }
+ }
+#endif //CONFIG_P2P
+
+ }
+ }
+
+ pbcmc_sta=rtw_get_bcmc_stainfo(padapter);
+ if(pbcmc_sta==NULL)
+ {
+ //DEBUG_ERR( ("Set OID_802_11_ADD_KEY: bcmc stainfo is null \n"));
+ }
+ else
+ {
+ //Jeff: don't disable ieee8021x_blocked while clearing key
+ if (strcmp(param->u.crypt.alg, "none") != 0)
+ pbcmc_sta->ieee8021x_blocked = _FALSE;
+
+ if((padapter->securitypriv.ndisencryptstatus == Ndis802_11Encryption2Enabled)||
+ (padapter->securitypriv.ndisencryptstatus == Ndis802_11Encryption3Enabled))
+ {
+ pbcmc_sta->dot118021XPrivacy = padapter->securitypriv.dot11PrivacyAlgrthm;
+ }
+ }
+ }
+ else if(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) //adhoc mode
+ {
+ }
+ }
+
+#ifdef CONFIG_WAPI_SUPPORT
+ if (strcmp(param->u.crypt.alg, "SMS4") == 0)
+ {
+ PRT_WAPI_T pWapiInfo = &padapter->wapiInfo;
+ PRT_WAPI_STA_INFO pWapiSta;
+ u8 WapiASUEPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
+ u8 WapiAEPNInitialValueSrc[16] = {0x37,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
+ u8 WapiAEMultiCastPNInitialValueSrc[16] = {0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C,0x36,0x5C} ;
+
+ if(param->u.crypt.set_tx == 1)
+ {
+ list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
+ if(_rtw_memcmp(pWapiSta->PeerMacAddr,param->sta_addr,6))
+ {
+ _rtw_memcpy(pWapiSta->lastTxUnicastPN,WapiASUEPNInitialValueSrc,16);
+
+ pWapiSta->wapiUsk.bSet = true;
+ _rtw_memcpy(pWapiSta->wapiUsk.dataKey,param->u.crypt.key,16);
+ _rtw_memcpy(pWapiSta->wapiUsk.micKey,param->u.crypt.key+16,16);
+ pWapiSta->wapiUsk.keyId = param->u.crypt.idx ;
+ pWapiSta->wapiUsk.bTxEnable = true;
+
+ _rtw_memcpy(pWapiSta->lastRxUnicastPNBEQueue,WapiAEPNInitialValueSrc,16);
+ _rtw_memcpy(pWapiSta->lastRxUnicastPNBKQueue,WapiAEPNInitialValueSrc,16);
+ _rtw_memcpy(pWapiSta->lastRxUnicastPNVIQueue,WapiAEPNInitialValueSrc,16);
+ _rtw_memcpy(pWapiSta->lastRxUnicastPNVOQueue,WapiAEPNInitialValueSrc,16);
+ _rtw_memcpy(pWapiSta->lastRxUnicastPN,WapiAEPNInitialValueSrc,16);
+ pWapiSta->wapiUskUpdate.bTxEnable = false;
+ pWapiSta->wapiUskUpdate.bSet = false;
+
+ if (psecuritypriv->sw_encrypt== false || psecuritypriv->sw_decrypt == false)
+ {
+ //set unicast key for ASUE
+ rtw_wapi_set_key(padapter, &pWapiSta->wapiUsk, pWapiSta, false, false);
+ }
+ }
+ }
+ }
+ else
+ {
+ list_for_each_entry(pWapiSta, &pWapiInfo->wapiSTAUsedList, list) {
+ if(_rtw_memcmp(pWapiSta->PeerMacAddr,get_bssid(pmlmepriv),6))
+ {
+ pWapiSta->wapiMsk.bSet = true;
+ _rtw_memcpy(pWapiSta->wapiMsk.dataKey,param->u.crypt.key,16);
+ _rtw_memcpy(pWapiSta->wapiMsk.micKey,param->u.crypt.key+16,16);
+ pWapiSta->wapiMsk.keyId = param->u.crypt.idx ;
+ pWapiSta->wapiMsk.bTxEnable = false;
+ if(!pWapiSta->bSetkeyOk)
+ pWapiSta->bSetkeyOk = true;
+ pWapiSta->bAuthenticateInProgress = false;
+
+ _rtw_memcpy(pWapiSta->lastRxMulticastPN, WapiAEMultiCastPNInitialValueSrc, 16);
+
+ if (psecuritypriv->sw_decrypt == false)
+ {
+ //set rx broadcast key for ASUE
+ rtw_wapi_set_key(padapter, &pWapiSta->wapiMsk, pWapiSta, true, false);
+ }
+ }
+
+ }
+ }
+ }
+#endif
+
+
+exit:
+
+ DBG_8192C("%s, ret=%d\n", __func__, ret);
+
+ _func_exit_;
+
+ return ret;
+}
+
+static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ u8 key_index, bool pairwise, const u8 *mac_addr,
+#else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
+ u8 key_index, const u8 *mac_addr,
+#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
+ struct key_params *params)
+{
+ char *alg_name;
+ u32 param_len;
+ struct ieee_param *param = NULL;
+ int ret=0;
+ struct wireless_dev *rtw_wdev = wiphy_to_wdev(wiphy);
+ _adapter *padapter = wiphy_to_adapter(wiphy);
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+
+ DBG_871X(FUNC_NDEV_FMT" adding key for %pM\n", FUNC_NDEV_ARG(ndev), mac_addr);
+ DBG_871X("cipher=0x%x\n", params->cipher);
+ DBG_871X("key_len=0x%x\n", params->key_len);
+ DBG_871X("seq_len=0x%x\n", params->seq_len);
+ DBG_871X("key_index=%d\n", key_index);
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ DBG_871X("pairwise=%d\n", pairwise);
+#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
+
+ param_len = sizeof(struct ieee_param) + params->key_len;
+ param = (struct ieee_param *)rtw_malloc(param_len);
+ if (param == NULL)
+ return -1;
+
+ _rtw_memset(param, 0, param_len);
+
+ param->cmd = IEEE_CMD_SET_ENCRYPTION;
+ _rtw_memset(param->sta_addr, 0xff, ETH_ALEN);
+
+ switch (params->cipher) {
+ case IW_AUTH_CIPHER_NONE:
+ //todo: remove key
+ //remove = 1;
+ alg_name = "none";
+ break;
+ case WLAN_CIPHER_SUITE_WEP40:
+ case WLAN_CIPHER_SUITE_WEP104:
+ alg_name = "WEP";
+ break;
+ case WLAN_CIPHER_SUITE_TKIP:
+ alg_name = "TKIP";
+ break;
+ case WLAN_CIPHER_SUITE_CCMP:
+ alg_name = "CCMP";
+ break;
+#ifdef CONFIG_IEEE80211W
+ case WLAN_CIPHER_SUITE_AES_CMAC:
+ alg_name = "BIP";
+ break;
+#endif //CONFIG_IEEE80211W
+#ifdef CONFIG_WAPI_SUPPORT
+ case WLAN_CIPHER_SUITE_SMS4:
+ alg_name= "SMS4";
+ if(pairwise == NL80211_KEYTYPE_PAIRWISE) {
+ if (key_index != 0 && key_index != 1) {
+ ret = -ENOTSUPP;
+ goto addkey_end;
+ }
+ _rtw_memcpy((void*)param->sta_addr, (void*)mac_addr, ETH_ALEN);
+ } else {
+ DBG_871X("mac_addr is null \n");
+ }
+ DBG_871X("rtw_wx_set_enc_ext: SMS4 case \n");
+ break;
+#endif
+
+ default:
+ ret = -ENOTSUPP;
+ goto addkey_end;
+ }
+
+ strncpy((char *)param->u.crypt.alg, alg_name, IEEE_CRYPT_ALG_NAME_LEN);
+
+
+ if (!mac_addr || is_broadcast_ether_addr(mac_addr))
+ {
+ param->u.crypt.set_tx = 0; //for wpa/wpa2 group key
+ } else {
+ param->u.crypt.set_tx = 1; //for wpa/wpa2 pairwise key
+ }
+
+
+ //param->u.crypt.idx = key_index - 1;
+ param->u.crypt.idx = key_index;
+
+ if (params->seq_len && params->seq)
+ {
+ _rtw_memcpy(param->u.crypt.seq, params->seq, params->seq_len);
+ }
+
+ if(params->key_len && params->key)
+ {
+ param->u.crypt.key_len = params->key_len;
+ _rtw_memcpy(param->u.crypt.key, params->key, params->key_len);
+ }
+
+ if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
+ {
+ ret = rtw_cfg80211_set_encryption(ndev, param, param_len);
+ }
+ else if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
+ {
+#ifdef CONFIG_AP_MODE
+ if(mac_addr)
+ _rtw_memcpy(param->sta_addr, (void*)mac_addr, ETH_ALEN);
+
+ ret = rtw_cfg80211_ap_set_encryption(ndev, param, param_len);
+#endif
+ }
+ else
+ {
+ DBG_8192C("error! fw_state=0x%x, iftype=%d\n", pmlmepriv->fw_state, rtw_wdev->iftype);
+
+ }
+
+addkey_end:
+ if(param)
+ {
+ rtw_mfree((u8*)param, param_len);
+ }
+
+ return ret;
+
+}
+
+static int cfg80211_rtw_get_key(struct wiphy *wiphy, struct net_device *ndev,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ u8 key_index, bool pairwise, const u8 *mac_addr,
+#else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
+ u8 key_index, const u8 *mac_addr,
+#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
+ void *cookie,
+ void (*callback)(void *cookie,
+ struct key_params*))
+{
+#if 0
+ struct iwm_priv *iwm = ndev_to_iwm(ndev);
+ struct iwm_key *key = &iwm->keys[key_index];
+ struct key_params params;
+
+ IWM_DBG_WEXT(iwm, DBG, "Getting key %d\n", key_index);
+
+ memset(&params, 0, sizeof(params));
+
+ params.cipher = key->cipher;
+ params.key_len = key->key_len;
+ params.seq_len = key->seq_len;
+ params.seq = key->seq;
+ params.key = key->key;
+
+ callback(cookie, &params);
+
+ return key->key_len ? 0 : -ENOENT;
+#endif
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+ return 0;
+}
+
+static int cfg80211_rtw_del_key(struct wiphy *wiphy, struct net_device *ndev,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ u8 key_index, bool pairwise, const u8 *mac_addr)
+#else // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
+ u8 key_index, const u8 *mac_addr)
+#endif // (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37))
+{
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
+ struct security_priv *psecuritypriv = &padapter->securitypriv;
+
+ DBG_871X(FUNC_NDEV_FMT" key_index=%d\n", FUNC_NDEV_ARG(ndev), key_index);
+
+ if (key_index == psecuritypriv->dot11PrivacyKeyIndex)
+ {
+ //clear the flag of wep default key set.
+ psecuritypriv->bWepDefaultKeyIdxSet = 0;
+ }
+
+ return 0;
+}
+
+static int cfg80211_rtw_set_default_key(struct wiphy *wiphy,
+ struct net_device *ndev, u8 key_index
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
+ , bool unicast, bool multicast
+ #endif
+ )
+{
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
+ struct security_priv *psecuritypriv = &padapter->securitypriv;
+
+ DBG_871X(FUNC_NDEV_FMT" key_index=%d"
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
+ ", unicast=%d, multicast=%d"
+ #endif
+ ".\n", FUNC_NDEV_ARG(ndev), key_index
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
+ , unicast, multicast
+ #endif
+ );
+
+ if ((key_index < WEP_KEYS) && ((psecuritypriv->dot11PrivacyAlgrthm == _WEP40_) || (psecuritypriv->dot11PrivacyAlgrthm == _WEP104_))) //set wep default key
+ {
+ psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
+
+ psecuritypriv->dot11PrivacyKeyIndex = key_index;
+
+ psecuritypriv->dot11PrivacyAlgrthm = _WEP40_;
+ psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
+ if (psecuritypriv->dot11DefKeylen[key_index] == 13)
+ {
+ psecuritypriv->dot11PrivacyAlgrthm = _WEP104_;
+ psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
+ }
+
+ psecuritypriv->bWepDefaultKeyIdxSet = 1; //set the flag to represent that wep default key has been set
+ }
+
+ return 0;
+
+}
+
+static int cfg80211_rtw_get_station(struct wiphy *wiphy,
+ struct net_device *ndev,
+ u8 *mac, struct station_info *sinfo)
+{
+ int ret = 0;
+ _adapter *padapter = wiphy_to_adapter(wiphy);
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct sta_info *psta = NULL;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+
+ sinfo->filled = 0;
+
+ if (!mac) {
+ DBG_871X(FUNC_NDEV_FMT" mac==%p\n", FUNC_NDEV_ARG(ndev), mac);
+ ret = -ENOENT;
+ goto exit;
+ }
+
+ psta = rtw_get_stainfo(pstapriv, mac);
+ if (psta == NULL) {
+ DBG_8192C("%s, sta_info is null\n", __func__);
+ ret = -ENOENT;
+ goto exit;
+ }
+
+#ifdef CONFIG_DEBUG_CFG80211
+ DBG_871X(FUNC_NDEV_FMT" mac="MAC_FMT"\n", FUNC_NDEV_ARG(ndev), MAC_ARG(mac));
+#endif
+
+ //for infra./P2PClient mode
+ if( check_fwstate(pmlmepriv, WIFI_STATION_STATE)
+ && check_fwstate(pmlmepriv, _FW_LINKED)
+ )
+ {
+ struct wlan_network *cur_network = &(pmlmepriv->cur_network);
+
+ if (_rtw_memcmp(mac, cur_network->network.MacAddress, ETH_ALEN) == _FALSE) {
+ DBG_871X("%s, mismatch bssid="MAC_FMT"\n", __func__, MAC_ARG(cur_network->network.MacAddress));
+ ret = -ENOENT;
+ goto exit;
+ }
+
+ sinfo->filled |= STATION_INFO_SIGNAL;
+ sinfo->signal = translate_percentage_to_dbm(padapter->recvpriv.signal_strength);
+
+ sinfo->filled |= STATION_INFO_TX_BITRATE;
+ sinfo->txrate.legacy = rtw_get_cur_max_rate(padapter);
+
+ sinfo->filled |= STATION_INFO_RX_PACKETS;
+ sinfo->rx_packets = sta_rx_data_pkts(psta);
+
+ sinfo->filled |= STATION_INFO_TX_PACKETS;
+ sinfo->tx_packets = psta->sta_stats.tx_pkts;
+
+ }
+
+ //for Ad-Hoc/AP mode
+ if ((check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)
+ ||check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)
+ ||check_fwstate(pmlmepriv, WIFI_AP_STATE))
+ && check_fwstate(pmlmepriv, _FW_LINKED)
+ )
+ {
+ //TODO: should acquire station info...
+ }
+
+exit:
+ return ret;
+}
+
+extern int netdev_open(struct net_device *pnetdev);
+#ifdef CONFIG_CONCURRENT_MODE
+extern int netdev_if2_open(struct net_device *pnetdev);
+#endif
+
+/*
+enum nl80211_iftype {
+ NL80211_IFTYPE_UNSPECIFIED,
+ NL80211_IFTYPE_ADHOC, //1
+ NL80211_IFTYPE_STATION, //2
+ NL80211_IFTYPE_AP, //3
+ NL80211_IFTYPE_AP_VLAN,
+ NL80211_IFTYPE_WDS,
+ NL80211_IFTYPE_MONITOR, //6
+ NL80211_IFTYPE_MESH_POINT,
+ NL80211_IFTYPE_P2P_CLIENT, //8
+ NL80211_IFTYPE_P2P_GO, //9
+ //keep last
+ NUM_NL80211_IFTYPES,
+ NL80211_IFTYPE_MAX = NUM_NL80211_IFTYPES - 1
+};
+*/
+static int cfg80211_rtw_change_iface(struct wiphy *wiphy,
+ struct net_device *ndev,
+ enum nl80211_iftype type, u32 *flags,
+ struct vif_params *params)
+{
+ enum nl80211_iftype old_type;
+ NDIS_802_11_NETWORK_INFRASTRUCTURE networkType ;
+ _adapter *padapter = wiphy_to_adapter(wiphy);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct wireless_dev *rtw_wdev = wiphy_to_wdev(wiphy);
+#ifdef CONFIG_P2P
+ struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
+#endif
+ int ret = 0;
+ u8 change = _FALSE;
+
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+
+ if(adapter_to_dvobj(padapter)->processing_dev_remove == _TRUE)
+ {
+ ret= -EPERM;
+ goto exit;
+ }
+
+
+#ifdef CONFIG_CONCURRENT_MODE
+ if(padapter->adapter_type == SECONDARY_ADAPTER)
+ {
+ DBG_871X(FUNC_NDEV_FMT" call netdev_if2_open\n", FUNC_NDEV_ARG(ndev));
+ if(netdev_if2_open(ndev) != 0) {
+ ret= -EPERM;
+ goto exit;
+ }
+ }
+ else if(padapter->adapter_type == PRIMARY_ADAPTER)
+#endif //CONFIG_CONCURRENT_MODE
+ {
+ DBG_871X(FUNC_NDEV_FMT" call netdev_open\n", FUNC_NDEV_ARG(ndev));
+ if(netdev_open(ndev) != 0) {
+ ret= -EPERM;
+ goto exit;
+ }
+ }
+
+ if(_FAIL == rtw_pwr_wakeup(padapter)) {
+ ret= -EPERM;
+ goto exit;
+ }
+
+ old_type = rtw_wdev->iftype;
+ DBG_871X(FUNC_NDEV_FMT" old_iftype=%d, new_iftype=%d\n",
+ FUNC_NDEV_ARG(ndev), old_type, type);
+
+ if(old_type != type)
+ {
+ change = _TRUE;
+ pmlmeext->action_public_rxseq = 0xffff;
+ pmlmeext->action_public_dialog_token = 0xff;
+ }
+
+ switch (type) {
+ case NL80211_IFTYPE_ADHOC:
+ networkType = Ndis802_11IBSS;
+ break;
+#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
+ case NL80211_IFTYPE_P2P_CLIENT:
+#endif
+ case NL80211_IFTYPE_STATION:
+ networkType = Ndis802_11Infrastructure;
+ #ifdef CONFIG_P2P
+ if(pwdinfo->driver_interface == DRIVER_CFG80211 )
+ {
+ if(change && rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
+ {
+ _cancel_timer_ex( &pwdinfo->find_phase_timer );
+ _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
+ _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
+
+ //it means remove GO and change mode from AP(GO) to station(P2P DEVICE)
+ rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
+ rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
+
+ DBG_8192C("%s, role=%d, p2p_state=%d, pre_p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo), rtw_p2p_pre_state(pwdinfo));
+ }
+ }
+ #endif //CONFIG_P2P
+ break;
+#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
+ case NL80211_IFTYPE_P2P_GO:
+#endif
+ case NL80211_IFTYPE_AP:
+ networkType = Ndis802_11APMode;
+ #ifdef CONFIG_P2P
+ if(pwdinfo->driver_interface == DRIVER_CFG80211 )
+ {
+ if(change && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
+ {
+ //it means P2P Group created, we will be GO and change mode from P2P DEVICE to AP(GO)
+ rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
+ }
+ }
+ #endif //CONFIG_P2P
+ break;
+ default:
+ return -EOPNOTSUPP;
+ }
+
+ rtw_wdev->iftype = type;
+
+ if (rtw_set_802_11_infrastructure_mode(padapter, networkType) ==_FALSE)
+ {
+ rtw_wdev->iftype = old_type;
+ ret = -EPERM;
+ goto exit;
+ }
+
+ rtw_setopmode_cmd(padapter, networkType,_TRUE);
+
+exit:
+
+ return ret;
+}
+
+void rtw_cfg80211_indicate_scan_done(struct rtw_wdev_priv *pwdev_priv, bool aborted)
+{
+ _irqL irqL;
+
+ _enter_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
+ if(pwdev_priv->scan_request != NULL)
+ {
+ //struct cfg80211_scan_request *scan_request = pwdev_priv->scan_request;
+
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_871X("%s with scan req\n", __FUNCTION__);
+ #endif
+
+ //avoid WARN_ON(request != wiphy_to_dev(request->wiphy)->scan_req);
+ //if(scan_request == wiphy_to_dev(scan_request->wiphy)->scan_req)
+ if(pwdev_priv->scan_request->wiphy != pwdev_priv->rtw_wdev->wiphy)
+ {
+ DBG_8192C("error wiphy compare\n");
+ }
+ else
+ {
+ cfg80211_scan_done(pwdev_priv->scan_request, aborted);
+ }
+
+ pwdev_priv->scan_request = NULL;
+
+ } else {
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_871X("%s without scan req\n", __FUNCTION__);
+ #endif
+ }
+ _exit_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
+}
+
+void rtw_cfg80211_surveydone_event_callback(_adapter *padapter)
+{
+ _irqL irqL;
+ _list *plist, *phead;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ _queue *queue = &(pmlmepriv->scanned_queue);
+ struct wlan_network *pnetwork = NULL;
+ u32 cnt=0;
+ u32 wait_for_surveydone;
+ sint wait_status;
+#ifdef CONFIG_P2P
+ struct wifidirect_info* pwdinfo = &padapter->wdinfo;
+#endif //CONFIG_P2P
+ struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
+
+#ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("%s\n", __func__);
+#endif
+
+ _enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
+
+ phead = get_list_head(queue);
+ plist = get_next(phead);
+
+ while(1)
+ {
+ if (rtw_end_of_queue_search(phead,plist)== _TRUE)
+ break;
+
+ pnetwork = LIST_CONTAINOR(plist, struct wlan_network, list);
+
+ //report network only if the current channel set contains the channel to which this network belongs
+ if(rtw_ch_set_search_ch(padapter->mlmeextpriv.channel_set, pnetwork->network.Configuration.DSConfig) >= 0
+ && _TRUE == rtw_validate_ssid(&(pnetwork->network.Ssid))
+ )
+ {
+ //ev=translate_scan(padapter, a, pnetwork, ev, stop);
+ rtw_cfg80211_inform_bss(padapter, pnetwork);
+ }
+
+ plist = get_next(plist);
+
+ }
+
+ _exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
+
+ //call this after other things have been done
+ rtw_cfg80211_indicate_scan_done(wdev_to_priv(padapter->rtw_wdev), _FALSE);
+}
+
+static int rtw_cfg80211_set_probe_req_wpsp2pie(_adapter *padapter, char *buf, int len)
+{
+ int ret = 0;
+ uint wps_ielen = 0;
+ u8 *wps_ie;
+ u32 p2p_ielen = 0;
+ u8 *p2p_ie;
+ u32 wfd_ielen = 0;
+ u8 *wfd_ie;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+
+#ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("%s, ielen=%d\n", __func__, len);
+#endif
+
+ if(len>0)
+ {
+ if((wps_ie = rtw_get_wps_ie(buf, len, NULL, &wps_ielen)))
+ {
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("probe_req_wps_ielen=%d\n", wps_ielen);
+ #endif
+
+ if(pmlmepriv->wps_probe_req_ie)
+ {
+ u32 free_len = pmlmepriv->wps_probe_req_ie_len;
+ pmlmepriv->wps_probe_req_ie_len = 0;
+ rtw_mfree(pmlmepriv->wps_probe_req_ie, free_len);
+ pmlmepriv->wps_probe_req_ie = NULL;
+ }
+
+ pmlmepriv->wps_probe_req_ie = rtw_malloc(wps_ielen);
+ if ( pmlmepriv->wps_probe_req_ie == NULL) {
+ DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
+ return -EINVAL;
+
+ }
+ _rtw_memcpy(pmlmepriv->wps_probe_req_ie, wps_ie, wps_ielen);
+ pmlmepriv->wps_probe_req_ie_len = wps_ielen;
+ }
+
+ //buf += wps_ielen;
+ //len -= wps_ielen;
+
+ #ifdef CONFIG_P2P
+ if((p2p_ie=rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen)))
+ {
+ struct wifidirect_info *wdinfo = &padapter->wdinfo;
+ u32 attr_contentlen = 0;
+ u8 listen_ch_attr[5];
+
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("probe_req_p2p_ielen=%d\n", p2p_ielen);
+ #endif
+
+ if(pmlmepriv->p2p_probe_req_ie)
+ {
+ u32 free_len = pmlmepriv->p2p_probe_req_ie_len;
+ pmlmepriv->p2p_probe_req_ie_len = 0;
+ rtw_mfree(pmlmepriv->p2p_probe_req_ie, free_len);
+ pmlmepriv->p2p_probe_req_ie = NULL;
+ }
+
+ pmlmepriv->p2p_probe_req_ie = rtw_malloc(p2p_ielen);
+ if ( pmlmepriv->p2p_probe_req_ie == NULL) {
+ DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
+ return -EINVAL;
+
+ }
+ _rtw_memcpy(pmlmepriv->p2p_probe_req_ie, p2p_ie, p2p_ielen);
+ pmlmepriv->p2p_probe_req_ie_len = p2p_ielen;
+
+ if(rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_LISTEN_CH, (u8*)listen_ch_attr, (uint*) &attr_contentlen)
+ && attr_contentlen == 5)
+ {
+ if (wdinfo->listen_channel != listen_ch_attr[4]) {
+ DBG_871X(FUNC_ADPT_FMT" listen channel - country:%c%c%c, class:%u, ch:%u\n",
+ FUNC_ADPT_ARG(padapter), listen_ch_attr[0], listen_ch_attr[1], listen_ch_attr[2],
+ listen_ch_attr[3], listen_ch_attr[4]);
+ wdinfo->listen_channel = listen_ch_attr[4];
+ }
+ }
+ }
+ #endif //CONFIG_P2P
+
+ //buf += p2p_ielen;
+ //len -= p2p_ielen;
+
+ #ifdef CONFIG_WFD
+ if(rtw_get_wfd_ie(buf, len, NULL, &wfd_ielen))
+ {
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("probe_req_wfd_ielen=%d\n", wfd_ielen);
+ #endif
+
+ if(pmlmepriv->wfd_probe_req_ie)
+ {
+ u32 free_len = pmlmepriv->wfd_probe_req_ie_len;
+ pmlmepriv->wfd_probe_req_ie_len = 0;
+ rtw_mfree(pmlmepriv->wfd_probe_req_ie, free_len);
+ pmlmepriv->wfd_probe_req_ie = NULL;
+ }
+
+ pmlmepriv->wfd_probe_req_ie = rtw_malloc(wfd_ielen);
+ if ( pmlmepriv->wfd_probe_req_ie == NULL) {
+ DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
+ return -EINVAL;
+
+ }
+ rtw_get_wfd_ie(buf, len, pmlmepriv->wfd_probe_req_ie, &pmlmepriv->wfd_probe_req_ie_len);
+ }
+ #endif //CONFIG_WFD
+
+ }
+
+ return ret;
+
+}
+
+static int cfg80211_rtw_scan(struct wiphy *wiphy
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0))
+ , struct net_device *ndev
+ #endif
+ , struct cfg80211_scan_request *request)
+{
+ int i;
+ u8 _status = _FALSE;
+ int ret = 0;
+ _adapter *padapter = wiphy_to_adapter(wiphy);
+ struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
+ NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT];
+ struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
+ _irqL irqL;
+ u8 *wps_ie=NULL;
+ uint wps_ielen=0;
+ u8 *p2p_ie=NULL;
+ uint p2p_ielen=0;
+ u8 survey_times=3;
+ u8 survey_times_for_one_ch=6;
+#ifdef CONFIG_P2P
+ struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
+#endif //CONFIG_P2P
+ struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
+ struct cfg80211_ssid *ssids = request->ssids;
+ int social_channel = 0, j = 0;
+ bool need_indicate_scan_done = _FALSE;
+#ifdef CONFIG_CONCURRENT_MODE
+ PADAPTER pbuddy_adapter = NULL;
+ struct mlme_priv *pbuddy_mlmepriv = NULL;
+#endif //CONFIG_CONCURRENT_MODE
+
+//#ifdef CONFIG_DEBUG_CFG80211
+ DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
+//#endif
+
+#ifdef CONFIG_CONCURRENT_MODE
+ if (padapter->pbuddy_adapter) {
+ pbuddy_adapter = padapter->pbuddy_adapter;
+ pbuddy_mlmepriv = &(pbuddy_adapter->mlmepriv);
+ }
+#endif //CONFIG_CONCURRENT_MODE
+
+#ifdef CONFIG_MP_INCLUDED
+if (padapter->registrypriv.mp_mode == 1)
+{
+ if (check_fwstate(pmlmepriv, WIFI_MP_STATE) == _TRUE)
+ {
+ ret = -EPERM;
+ goto exit;
+ }
+}
+#endif
+
+ _enter_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
+ pwdev_priv->scan_request = request;
+ _exit_critical_bh(&pwdev_priv->scan_req_lock, &irqL);
+
+ if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
+ {
+#ifdef CONFIG_DEBUG_CFG80211
+ DBG_871X("%s under WIFI_AP_STATE\n", __FUNCTION__);
+#endif
+
+ if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS|_FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE)
+ {
+ DBG_8192C("%s, fwstate=0x%x\n", __func__, pmlmepriv->fw_state);
+
+ if(check_fwstate(pmlmepriv, WIFI_UNDER_WPS))
+ {
+ DBG_8192C("AP mode process WPS \n");
+ }
+
+ need_indicate_scan_done = _TRUE;
+ goto check_need_indicate_scan_done;
+ }
+ }
+
+ if(_FAIL == rtw_pwr_wakeup(padapter)) {
+ need_indicate_scan_done = _TRUE;
+ goto check_need_indicate_scan_done;
+ }
+
+ #ifdef CONFIG_P2P
+ if( pwdinfo->driver_interface == DRIVER_CFG80211 )
+ {
+ if(ssids->ssid != NULL
+ && _rtw_memcmp(ssids->ssid, "DIRECT-", 7)
+ && rtw_get_p2p_ie((u8 *)request->ie, request->ie_len, NULL, NULL)
+ )
+ {
+ if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
+ {
+ rtw_p2p_enable(padapter, P2P_ROLE_DEVICE);
+ wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _TRUE;
+ }
+ else
+ {
+ rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
+ #endif
+ }
+ rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
+
+ if(request->n_channels == 3 &&
+ request->channels[0]->hw_value == 1 &&
+ request->channels[1]->hw_value == 6 &&
+ request->channels[2]->hw_value == 11
+ )
+ {
+ social_channel = 1;
+ }
+ }
+ }
+ #endif //CONFIG_P2P
+
+ if(request->ie && request->ie_len>0)
+ {
+ rtw_cfg80211_set_probe_req_wpsp2pie(padapter, (u8 *)request->ie, request->ie_len );
+ }
+
+ if (pmlmepriv->LinkDetectInfo.bBusyTraffic == _TRUE)
+ {
+ DBG_8192C("%s, bBusyTraffic == _TRUE\n", __func__);
+ need_indicate_scan_done = _TRUE;
+ goto check_need_indicate_scan_done;
+ }
+
+ if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) {
+ DBG_8192C("%s, fwstate=0x%x\n", __func__, pmlmepriv->fw_state);
+ need_indicate_scan_done = _TRUE;
+ goto check_need_indicate_scan_done;
+ } else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE) {
+ DBG_8192C("%s, fwstate=0x%x\n", __func__, pmlmepriv->fw_state);
+ ret = -EBUSY;
+ goto check_need_indicate_scan_done;
+ }
+
+ if (rtw_is_scan_deny(padapter)){
+ DBG_871X(FUNC_ADPT_FMT ": scan deny\n", FUNC_ADPT_ARG(padapter));
+ need_indicate_scan_done = _TRUE;
+ goto check_need_indicate_scan_done;
+ }
+
+#ifdef CONFIG_CONCURRENT_MODE
+ if(pbuddy_mlmepriv && (pbuddy_mlmepriv->LinkDetectInfo.bBusyTraffic == _TRUE))
+ {
+ DBG_8192C("%s, bBusyTraffic == _TRUE at buddy_intf\n", __func__);
+ need_indicate_scan_done = _TRUE;
+ goto check_need_indicate_scan_done;
+ }
+
+ if (check_buddy_fwstate(padapter,
+ _FW_UNDER_SURVEY|_FW_UNDER_LINKING|WIFI_UNDER_WPS) == _TRUE)
+ {
+ if(check_buddy_fwstate(padapter, _FW_UNDER_SURVEY))
+ {
+ DBG_8192C("scanning_via_buddy_intf\n");
+ pmlmepriv->scanning_via_buddy_intf = _TRUE;
+ }
+
+ DBG_8192C("buddy_intf's mlme state:0x%x\n", pbuddy_mlmepriv->fw_state);
+
+ need_indicate_scan_done = _TRUE;
+ goto check_need_indicate_scan_done;
+ }
+#endif
+
+
+#ifdef CONFIG_P2P
+ if( pwdinfo->driver_interface == DRIVER_CFG80211 )
+ {
+ if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
+ {
+ rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);
+ rtw_free_network_queue(padapter, _TRUE);
+
+ if(social_channel == 0)
+ rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
+ else
+ rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_SOCIAL_LAST);
+ }
+ }
+#endif //CONFIG_P2P
+
+
+ _rtw_memset(ssid, 0, sizeof(NDIS_802_11_SSID)*RTW_SSID_SCAN_AMOUNT);
+ //parsing request ssids, n_ssids
+ for (i = 0; i < request->n_ssids && i < RTW_SSID_SCAN_AMOUNT; i++) {
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("ssid=%s, len=%d\n", ssids[i].ssid, ssids[i].ssid_len);
+ #endif
+ _rtw_memcpy(ssid[i].Ssid, ssids[i].ssid, ssids[i].ssid_len);
+ ssid[i].SsidLength = ssids[i].ssid_len;
+ }
+
+
+ /* parsing channels, n_channels */
+ _rtw_memset(ch, 0, sizeof(struct rtw_ieee80211_channel)*RTW_CHANNEL_SCAN_AMOUNT);
+ for (i=0;i<request->n_channels && i<RTW_CHANNEL_SCAN_AMOUNT;i++) {
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_871X(FUNC_ADPT_FMT CHAN_FMT"\n", FUNC_ADPT_ARG(padapter), CHAN_ARG(request->channels[i]));
+ #endif
+ ch[i].hw_value = request->channels[i]->hw_value;
+ ch[i].flags = request->channels[i]->flags;
+ }
+
+ _enter_critical_bh(&pmlmepriv->lock, &irqL);
+ if (request->n_channels == 1) {
+ for(i=1;i<survey_times_for_one_ch;i++)
+ _rtw_memcpy(&ch[i], &ch[0], sizeof(struct rtw_ieee80211_channel));
+ _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, ch, survey_times_for_one_ch);
+ } else if (request->n_channels == 2) {
+ _rtw_memcpy(&ch[3], &ch[1], sizeof(struct rtw_ieee80211_channel));
+ for(i=1;i<survey_times;i++) {
+ _rtw_memcpy(&ch[i], &ch[0], sizeof(struct rtw_ieee80211_channel));
+ _rtw_memcpy(&ch[i+3], &ch[3], sizeof(struct rtw_ieee80211_channel));
+ }
+ _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, ch, survey_times * 2);
+ } else {
+ _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, NULL, 0);
+ }
+ _exit_critical_bh(&pmlmepriv->lock, &irqL);
+
+
+ if(_status == _FALSE)
+ {
+ ret = -1;
+ }
+
+check_need_indicate_scan_done:
+ if(need_indicate_scan_done)
+ rtw_cfg80211_surveydone_event_callback(padapter);
+
+exit:
+
+ return ret;
+
+}
+
+static int cfg80211_rtw_set_wiphy_params(struct wiphy *wiphy, u32 changed)
+{
+#if 0
+ struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
+
+ if (changed & WIPHY_PARAM_RTS_THRESHOLD &&
+ (iwm->conf.rts_threshold != wiphy->rts_threshold)) {
+ int ret;
+
+ iwm->conf.rts_threshold = wiphy->rts_threshold;
+
+ ret = iwm_umac_set_config_fix(iwm, UMAC_PARAM_TBL_CFG_FIX,
+ CFG_RTS_THRESHOLD,
+ iwm->conf.rts_threshold);
+ if (ret < 0)
+ return ret;
+ }
+
+ if (changed & WIPHY_PARAM_FRAG_THRESHOLD &&
+ (iwm->conf.frag_threshold != wiphy->frag_threshold)) {
+ int ret;
+
+ iwm->conf.frag_threshold = wiphy->frag_threshold;
+
+ ret = iwm_umac_set_config_fix(iwm, UMAC_PARAM_TBL_FA_CFG_FIX,
+ CFG_FRAG_THRESHOLD,
+ iwm->conf.frag_threshold);
+ if (ret < 0)
+ return ret;
+ }
+#endif
+ DBG_8192C("%s\n", __func__);
+ return 0;
+}
+
+static int cfg80211_rtw_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
+ struct cfg80211_ibss_params *params)
+{
+#if 0
+ struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
+ struct ieee80211_channel *chan = params->channel;
+
+ if (!test_bit(IWM_STATUS_READY, &iwm->status))
+ return -EIO;
+
+ /* UMAC doesn't support creating or joining an IBSS network
+ * with specified bssid. */
+ if (params->bssid)
+ return -EOPNOTSUPP;
+
+ iwm->channel = ieee80211_frequency_to_channel(chan->center_freq);
+ iwm->umac_profile->ibss.band = chan->band;
+ iwm->umac_profile->ibss.channel = iwm->channel;
+ iwm->umac_profile->ssid.ssid_len = params->ssid_len;
+ memcpy(iwm->umac_profile->ssid.ssid, params->ssid, params->ssid_len);
+
+ return iwm_send_mlme_profile(iwm);
+#endif
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+ return 0;
+}
+
+static int cfg80211_rtw_leave_ibss(struct wiphy *wiphy, struct net_device *ndev)
+{
+#if 0
+ struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
+
+ if (iwm->umac_profile_active)
+ return iwm_invalidate_mlme_profile(iwm);
+#endif
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+ return 0;
+}
+
+static int rtw_cfg80211_set_wpa_version(struct security_priv *psecuritypriv, u32 wpa_version)
+{
+ DBG_8192C("%s, wpa_version=%d\n", __func__, wpa_version);
+
+ if (!wpa_version) {
+ psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
+ return 0;
+ }
+
+
+ if (wpa_version & (NL80211_WPA_VERSION_1 | NL80211_WPA_VERSION_2))
+ {
+ psecuritypriv->ndisauthtype = Ndis802_11AuthModeWPAPSK;
+ }
+
+/*
+ if (wpa_version & NL80211_WPA_VERSION_2)
+ {
+ psecuritypriv->ndisauthtype = Ndis802_11AuthModeWPA2PSK;
+ }
+*/
+
+ return 0;
+
+}
+
+static int rtw_cfg80211_set_auth_type(struct security_priv *psecuritypriv,
+ enum nl80211_auth_type sme_auth_type)
+{
+ DBG_8192C("%s, nl80211_auth_type=%d\n", __func__, sme_auth_type);
+
+
+ switch (sme_auth_type) {
+ case NL80211_AUTHTYPE_AUTOMATIC:
+
+ psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Auto;
+
+ break;
+ case NL80211_AUTHTYPE_OPEN_SYSTEM:
+
+ psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open;
+
+ if(psecuritypriv->ndisauthtype>Ndis802_11AuthModeWPA)
+ psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
+
+#ifdef CONFIG_WAPI_SUPPORT
+ if(psecuritypriv->ndisauthtype == Ndis802_11AuthModeWAPI)
+ psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_WAPI;
+#endif
+
+ break;
+ case NL80211_AUTHTYPE_SHARED_KEY:
+
+ psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Shared;
+
+ psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
+
+
+ break;
+ default:
+ psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open;
+ //return -ENOTSUPP;
+ }
+
+ return 0;
+
+}
+
+static int rtw_cfg80211_set_cipher(struct security_priv *psecuritypriv, u32 cipher, bool ucast)
+{
+ u32 ndisencryptstatus = Ndis802_11EncryptionDisabled;
+
+ u32 *profile_cipher = ucast ? &psecuritypriv->dot11PrivacyAlgrthm :
+ &psecuritypriv->dot118021XGrpPrivacy;
+
+ DBG_8192C("%s, ucast=%d, cipher=0x%x\n", __func__, ucast, cipher);
+
+
+ if (!cipher) {
+ *profile_cipher = _NO_PRIVACY_;
+ psecuritypriv->ndisencryptstatus = ndisencryptstatus;
+ return 0;
+ }
+
+ switch (cipher) {
+ case IW_AUTH_CIPHER_NONE:
+ *profile_cipher = _NO_PRIVACY_;
+ ndisencryptstatus = Ndis802_11EncryptionDisabled;
+#ifdef CONFIG_WAPI_SUPPORT
+ if(psecuritypriv->dot11PrivacyAlgrthm ==_SMS4_ )
+ {
+ *profile_cipher = _SMS4_;
+ }
+#endif
+ break;
+ case WLAN_CIPHER_SUITE_WEP40:
+ *profile_cipher = _WEP40_;
+ ndisencryptstatus = Ndis802_11Encryption1Enabled;
+ break;
+ case WLAN_CIPHER_SUITE_WEP104:
+ *profile_cipher = _WEP104_;
+ ndisencryptstatus = Ndis802_11Encryption1Enabled;
+ break;
+ case WLAN_CIPHER_SUITE_TKIP:
+ *profile_cipher = _TKIP_;
+ ndisencryptstatus = Ndis802_11Encryption2Enabled;
+ break;
+ case WLAN_CIPHER_SUITE_CCMP:
+ *profile_cipher = _AES_;
+ ndisencryptstatus = Ndis802_11Encryption3Enabled;
+ break;
+#ifdef CONFIG_WAPI_SUPPORT
+ case WLAN_CIPHER_SUITE_SMS4:
+ *profile_cipher = _SMS4_;
+ ndisencryptstatus = Ndis802_11_EncrypteionWAPI;
+ break;
+#endif
+ default:
+ DBG_8192C("Unsupported cipher: 0x%x\n", cipher);
+ return -ENOTSUPP;
+ }
+
+ if(ucast)
+ {
+ psecuritypriv->ndisencryptstatus = ndisencryptstatus;
+
+ //if(psecuritypriv->dot11PrivacyAlgrthm >= _AES_)
+ // psecuritypriv->ndisauthtype = Ndis802_11AuthModeWPA2PSK;
+ }
+
+ return 0;
+}
+
+static int rtw_cfg80211_set_key_mgt(struct security_priv *psecuritypriv, u32 key_mgt)
+{
+ DBG_8192C("%s, key_mgt=0x%x\n", __func__, key_mgt);
+
+ if (key_mgt == WLAN_AKM_SUITE_8021X)
+ //*auth_type = UMAC_AUTH_TYPE_8021X;
+ psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
+ else if (key_mgt == WLAN_AKM_SUITE_PSK) {
+ psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
+ }
+#ifdef CONFIG_WAPI_SUPPORT
+ else if(key_mgt ==WLAN_AKM_SUITE_WAPI_PSK){
+ psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_WAPI;
+ }
+ else if(key_mgt ==WLAN_AKM_SUITE_WAPI_CERT){
+ psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_WAPI;
+ }
+#endif
+
+
+ else {
+ DBG_8192C("Invalid key mgt: 0x%x\n", key_mgt);
+ //return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int rtw_cfg80211_set_wpa_ie(_adapter *padapter, u8 *pie, size_t ielen)
+{
+ u8 *buf=NULL, *pos=NULL;
+ u32 left;
+ int group_cipher = 0, pairwise_cipher = 0;
+ int ret = 0;
+ int wpa_ielen=0;
+ int wpa2_ielen=0;
+ u8 *pwpa, *pwpa2;
+ u8 null_addr[]= {0,0,0,0,0,0};
+
+ if (pie == NULL || !ielen) {
+ /* Treat this as normal case, but need to clear WIFI_UNDER_WPS */
+ _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
+ goto exit;
+ }
+
+ if (ielen > MAX_WPA_IE_LEN+MAX_WPS_IE_LEN+MAX_P2P_IE_LEN) {
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ buf = rtw_zmalloc(ielen);
+ if (buf == NULL){
+ ret = -ENOMEM;
+ goto exit;
+ }
+
+ _rtw_memcpy(buf, pie , ielen);
+
+ //dump
+ {
+ int i;
+ DBG_8192C("set wpa_ie(length:%zu):\n", ielen);
+ for(i=0;i<ielen;i=i+8)
+ DBG_8192C("0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x \n",buf[i],buf[i+1],buf[i+2],buf[i+3],buf[i+4],buf[i+5],buf[i+6],buf[i+7]);
+ }
+
+ pos = buf;
+ if(ielen < RSN_HEADER_LEN){
+ RT_TRACE(_module_rtl871x_ioctl_os_c,_drv_err_,("Ie len too short %d\n", ielen));
+ ret = -1;
+ goto exit;
+ }
+
+ pwpa = rtw_get_wpa_ie(buf, &wpa_ielen, ielen);
+ if(pwpa && wpa_ielen>0)
+ {
+ if(rtw_parse_wpa_ie(pwpa, wpa_ielen+2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS)
+ {
+ padapter->securitypriv.dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
+ padapter->securitypriv.ndisauthtype=Ndis802_11AuthModeWPAPSK;
+ _rtw_memcpy(padapter->securitypriv.supplicant_ie, &pwpa[0], wpa_ielen+2);
+
+ DBG_8192C("got wpa_ie, wpa_ielen:%u\n", wpa_ielen);
+ }
+ }
+
+ pwpa2 = rtw_get_wpa2_ie(buf, &wpa2_ielen, ielen);
+ if(pwpa2 && wpa2_ielen>0)
+ {
+ if(rtw_parse_wpa2_ie(pwpa2, wpa2_ielen+2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS)
+ {
+ padapter->securitypriv.dot11AuthAlgrthm= dot11AuthAlgrthm_8021X;
+ padapter->securitypriv.ndisauthtype=Ndis802_11AuthModeWPA2PSK;
+ _rtw_memcpy(padapter->securitypriv.supplicant_ie, &pwpa2[0], wpa2_ielen+2);
+
+ DBG_8192C("got wpa2_ie, wpa2_ielen:%u\n", wpa2_ielen);
+ }
+ }
+
+ if (group_cipher == 0)
+ {
+ group_cipher = WPA_CIPHER_NONE;
+ }
+ if (pairwise_cipher == 0)
+ {
+ pairwise_cipher = WPA_CIPHER_NONE;
+ }
+
+ switch(group_cipher)
+ {
+ case WPA_CIPHER_NONE:
+ padapter->securitypriv.dot118021XGrpPrivacy=_NO_PRIVACY_;
+ padapter->securitypriv.ndisencryptstatus=Ndis802_11EncryptionDisabled;
+ break;
+ case WPA_CIPHER_WEP40:
+ padapter->securitypriv.dot118021XGrpPrivacy=_WEP40_;
+ padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
+ break;
+ case WPA_CIPHER_TKIP:
+ padapter->securitypriv.dot118021XGrpPrivacy=_TKIP_;
+ padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled;
+ break;
+ case WPA_CIPHER_CCMP:
+ padapter->securitypriv.dot118021XGrpPrivacy=_AES_;
+ padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
+ break;
+ case WPA_CIPHER_WEP104:
+ padapter->securitypriv.dot118021XGrpPrivacy=_WEP104_;
+ padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
+ break;
+ }
+
+ switch(pairwise_cipher)
+ {
+ case WPA_CIPHER_NONE:
+ padapter->securitypriv.dot11PrivacyAlgrthm=_NO_PRIVACY_;
+ padapter->securitypriv.ndisencryptstatus=Ndis802_11EncryptionDisabled;
+ break;
+ case WPA_CIPHER_WEP40:
+ padapter->securitypriv.dot11PrivacyAlgrthm=_WEP40_;
+ padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
+ break;
+ case WPA_CIPHER_TKIP:
+ padapter->securitypriv.dot11PrivacyAlgrthm=_TKIP_;
+ padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled;
+ break;
+ case WPA_CIPHER_CCMP:
+ padapter->securitypriv.dot11PrivacyAlgrthm=_AES_;
+ padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
+ break;
+ case WPA_CIPHER_WEP104:
+ padapter->securitypriv.dot11PrivacyAlgrthm=_WEP104_;
+ padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
+ break;
+ }
+
+ {/* handle wps_ie */
+ uint wps_ielen;
+ u8 *wps_ie;
+
+ wps_ie = rtw_get_wps_ie(buf, ielen, NULL, &wps_ielen);
+ if (wps_ie && wps_ielen > 0) {
+ DBG_8192C("got wps_ie, wps_ielen:%u\n", wps_ielen);
+ padapter->securitypriv.wps_ie_len = wps_ielen<MAX_WPS_IE_LEN?wps_ielen:MAX_WPS_IE_LEN;
+ _rtw_memcpy(padapter->securitypriv.wps_ie, wps_ie, padapter->securitypriv.wps_ie_len);
+ set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS);
+ } else {
+ _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
+ }
+ }
+
+ #ifdef CONFIG_P2P
+ {//check p2p_ie for assoc req;
+ uint p2p_ielen=0;
+ u8 *p2p_ie;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+
+ if((p2p_ie=rtw_get_p2p_ie(buf, ielen, NULL, &p2p_ielen)))
+ {
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("%s p2p_assoc_req_ielen=%d\n", __FUNCTION__, p2p_ielen);
+ #endif
+
+ if(pmlmepriv->p2p_assoc_req_ie)
+ {
+ u32 free_len = pmlmepriv->p2p_assoc_req_ie_len;
+ pmlmepriv->p2p_assoc_req_ie_len = 0;
+ rtw_mfree(pmlmepriv->p2p_assoc_req_ie, free_len);
+ pmlmepriv->p2p_assoc_req_ie = NULL;
+ }
+
+ pmlmepriv->p2p_assoc_req_ie = rtw_malloc(p2p_ielen);
+ if ( pmlmepriv->p2p_assoc_req_ie == NULL) {
+ DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
+ goto exit;
+ }
+ _rtw_memcpy(pmlmepriv->p2p_assoc_req_ie, p2p_ie, p2p_ielen);
+ pmlmepriv->p2p_assoc_req_ie_len = p2p_ielen;
+ }
+ }
+ #endif //CONFIG_P2P
+
+ #ifdef CONFIG_WFD
+ {//check wfd_ie for assoc req;
+ uint wfd_ielen=0;
+ u8 *wfd_ie;
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+
+ if(rtw_get_wfd_ie(buf, ielen, NULL, &wfd_ielen))
+ {
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("%s wfd_assoc_req_ielen=%d\n", __FUNCTION__, wfd_ielen);
+ #endif
+
+ if(pmlmepriv->wfd_assoc_req_ie)
+ {
+ u32 free_len = pmlmepriv->wfd_assoc_req_ie_len;
+ pmlmepriv->wfd_assoc_req_ie_len = 0;
+ rtw_mfree(pmlmepriv->wfd_assoc_req_ie, free_len);
+ pmlmepriv->wfd_assoc_req_ie = NULL;
+ }
+
+ pmlmepriv->wfd_assoc_req_ie = rtw_malloc(wfd_ielen);
+ if ( pmlmepriv->wfd_assoc_req_ie == NULL) {
+ DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
+ goto exit;
+ }
+ rtw_get_wfd_ie(buf, ielen, pmlmepriv->wfd_assoc_req_ie, &pmlmepriv->wfd_assoc_req_ie_len);
+ }
+ }
+ #endif //CONFIG_WFD
+
+ //TKIP and AES disallow multicast packets until installing group key
+ if(padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_
+ || padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_WTMIC_
+ || padapter->securitypriv.dot11PrivacyAlgrthm == _AES_)
+ //WPS open need to enable multicast
+ //|| check_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS) == _TRUE)
+ rtw_hal_set_hwreg(padapter, HW_VAR_OFF_RCR_AM, null_addr);
+
+ RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_,
+ ("rtw_set_wpa_ie: pairwise_cipher=0x%08x padapter->securitypriv.ndisencryptstatus=%d padapter->securitypriv.ndisauthtype=%d\n",
+ pairwise_cipher, padapter->securitypriv.ndisencryptstatus, padapter->securitypriv.ndisauthtype));
+
+exit:
+ if (buf)
+ rtw_mfree(buf, ielen);
+ if (ret)
+ _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
+ return ret;
+}
+
+static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
+ struct cfg80211_connect_params *sme)
+{
+ int ret=0;
+ _irqL irqL;
+ _list *phead;
+ struct wlan_network *pnetwork = NULL;
+ NDIS_802_11_AUTHENTICATION_MODE authmode;
+ NDIS_802_11_SSID ndis_ssid;
+ u8 *dst_ssid, *src_ssid;
+ u8 *dst_bssid, *src_bssid;
+ //u8 matched_by_bssid=_FALSE;
+ //u8 matched_by_ssid=_FALSE;
+ u8 matched=_FALSE;
+ _adapter *padapter = wiphy_to_adapter(wiphy);
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct security_priv *psecuritypriv = &padapter->securitypriv;
+ _queue *queue = &pmlmepriv->scanned_queue;
+
+ DBG_871X("=>"FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+ DBG_871X("privacy=%d, key=%p, key_len=%d, key_idx=%d\n",
+ sme->privacy, sme->key, sme->key_len, sme->key_idx);
+
+
+ if(wdev_to_priv(padapter->rtw_wdev)->block == _TRUE)
+ {
+ ret = -EBUSY;
+ DBG_871X("%s wdev_priv.block is set\n", __FUNCTION__);
+ goto exit;
+ }
+
+#ifdef CONFIG_PLATFORM_MSTAR
+ printk("MStar Android!\n");
+ if((wdev_to_priv(padapter->rtw_wdev))->bandroid_scan == _FALSE)
+ {
+#ifdef CONFIG_P2P
+ struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
+ if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
+#endif //CONFIG_P2P
+ {
+ ret = -EBUSY;
+ printk("Android hasn't attached yet!\n");
+ goto exit;
+ }
+ }
+#endif
+
+ if(_FAIL == rtw_pwr_wakeup(padapter)) {
+ ret= -EPERM;
+ goto exit;
+ }
+
+ if(check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
+ ret = -EPERM;
+ goto exit;
+ }
+
+#ifdef CONFIG_CONCURRENT_MODE
+ if (check_buddy_fwstate(padapter, _FW_UNDER_LINKING) == _TRUE) {
+ DBG_8192C("%s, but buddy_intf is under linking\n", __FUNCTION__);
+ ret = -EINVAL;
+ goto exit;
+ }
+ if (check_buddy_fwstate(padapter, _FW_UNDER_SURVEY) == _TRUE) {
+ rtw_scan_abort(padapter->pbuddy_adapter);
+ }
+#endif
+
+ if (!sme->ssid || !sme->ssid_len)
+ {
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if (sme->ssid_len > IW_ESSID_MAX_SIZE){
+
+ ret= -E2BIG;
+ goto exit;
+ }
+
+ _rtw_memset(&ndis_ssid, 0, sizeof(NDIS_802_11_SSID));
+ ndis_ssid.SsidLength = sme->ssid_len;
+ _rtw_memcpy(ndis_ssid.Ssid, sme->ssid, sme->ssid_len);
+
+ DBG_8192C("ssid=%s, len=%zu\n", ndis_ssid.Ssid, sme->ssid_len);
+
+
+ if (sme->bssid)
+ DBG_8192C("bssid="MAC_FMT"\n", MAC_ARG(sme->bssid));
+
+
+ if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE) {
+ ret = -EBUSY;
+ DBG_8192C("%s, fw_state=0x%x, goto exit\n", __FUNCTION__, pmlmepriv->fw_state);
+ goto exit;
+ }
+ if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE) {
+ rtw_scan_abort(padapter);
+ }
+
+ psecuritypriv->ndisencryptstatus = Ndis802_11EncryptionDisabled;
+ psecuritypriv->dot11PrivacyAlgrthm = _NO_PRIVACY_;
+ psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
+ psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open; //open system
+ psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
+
+#ifdef CONFIG_WAPI_SUPPORT
+ padapter->wapiInfo.bWapiEnable = false;
+#endif
+
+ ret = rtw_cfg80211_set_wpa_version(psecuritypriv, sme->crypto.wpa_versions);
+ if (ret < 0)
+ goto exit;
+
+#ifdef CONFIG_WAPI_SUPPORT
+ if(sme->crypto.wpa_versions & NL80211_WAPI_VERSION_1)
+ {
+ padapter->wapiInfo.bWapiEnable = true;
+ padapter->wapiInfo.extra_prefix_len = WAPI_EXT_LEN;
+ padapter->wapiInfo.extra_postfix_len = SMS4_MIC_LEN;
+ }
+#endif
+
+ ret = rtw_cfg80211_set_auth_type(psecuritypriv, sme->auth_type);
+
+#ifdef CONFIG_WAPI_SUPPORT
+ if(psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_WAPI)
+ padapter->mlmeextpriv.mlmext_info.auth_algo = psecuritypriv->dot11AuthAlgrthm;
+#endif
+
+
+ if (ret < 0)
+ goto exit;
+
+ DBG_8192C("%s, ie_len=%zu\n", __func__, sme->ie_len);
+
+ ret = rtw_cfg80211_set_wpa_ie(padapter, sme->ie, sme->ie_len);
+ if (ret < 0)
+ goto exit;
+
+ if (sme->crypto.n_ciphers_pairwise) {
+ ret = rtw_cfg80211_set_cipher(psecuritypriv, sme->crypto.ciphers_pairwise[0], _TRUE);
+ if (ret < 0)
+ goto exit;
+ }
+
+ //For WEP Shared auth
+ if((psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_Shared
+ || psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_Auto) && sme->key
+ )
+ {
+ u32 wep_key_idx, wep_key_len,wep_total_len;
+ NDIS_802_11_WEP *pwep = NULL;
+ DBG_871X("%s(): Shared/Auto WEP\n",__FUNCTION__);
+
+ wep_key_idx = sme->key_idx;
+ wep_key_len = sme->key_len;
+
+ if (sme->key_idx > WEP_KEYS) {
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if (wep_key_len > 0)
+ {
+ wep_key_len = wep_key_len <= 5 ? 5 : 13;
+ wep_total_len = wep_key_len + FIELD_OFFSET(NDIS_802_11_WEP, KeyMaterial);
+ pwep =(NDIS_802_11_WEP *) rtw_malloc(wep_total_len);
+ if(pwep == NULL){
+ DBG_871X(" wpa_set_encryption: pwep allocate fail !!!\n");
+ ret = -ENOMEM;
+ goto exit;
+ }
+
+ _rtw_memset(pwep, 0, wep_total_len);
+
+ pwep->KeyLength = wep_key_len;
+ pwep->Length = wep_total_len;
+
+ if(wep_key_len==13)
+ {
+ padapter->securitypriv.dot11PrivacyAlgrthm=_WEP104_;
+ padapter->securitypriv.dot118021XGrpPrivacy=_WEP104_;
+ }
+ }
+ else {
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ pwep->KeyIndex = wep_key_idx;
+ pwep->KeyIndex |= 0x80000000;
+
+ _rtw_memcpy(pwep->KeyMaterial, (void *)sme->key, pwep->KeyLength);
+
+ if(rtw_set_802_11_add_wep(padapter, pwep) == (u8)_FAIL)
+ {
+ ret = -EOPNOTSUPP ;
+ }
+
+ if (pwep) {
+ rtw_mfree((u8 *)pwep,wep_total_len);
+ }
+
+ if(ret < 0)
+ goto exit;
+ }
+
+ ret = rtw_cfg80211_set_cipher(psecuritypriv, sme->crypto.cipher_group, _FALSE);
+ if (ret < 0)
+ return ret;
+
+ if (sme->crypto.n_akm_suites) {
+ ret = rtw_cfg80211_set_key_mgt(psecuritypriv, sme->crypto.akm_suites[0]);
+ if (ret < 0)
+ goto exit;
+ }
+
+#ifdef CONFIG_WAPI_SUPPORT
+ if(sme->crypto.akm_suites[0] ==WLAN_AKM_SUITE_WAPI_PSK){
+ padapter->wapiInfo.bWapiPSK = true;
+ }
+ else if(sme->crypto.akm_suites[0] ==WLAN_AKM_SUITE_WAPI_CERT){
+ padapter->wapiInfo.bWapiPSK = false;
+ }
+#endif
+
+ authmode = psecuritypriv->ndisauthtype;
+ rtw_set_802_11_authentication_mode(padapter, authmode);
+
+ //rtw_set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus);
+
+ if (rtw_set_802_11_connect(padapter, sme->bssid, &ndis_ssid) == _FALSE) {
+ ret = -1;
+ goto exit;
+ }
+
+ DBG_8192C("set ssid:dot11AuthAlgrthm=%d, dot11PrivacyAlgrthm=%d, dot118021XGrpPrivacy=%d\n", psecuritypriv->dot11AuthAlgrthm, psecuritypriv->dot11PrivacyAlgrthm, psecuritypriv->dot118021XGrpPrivacy);
+
+exit:
+
+ DBG_8192C("<=%s, ret %d\n",__FUNCTION__, ret);
+
+ return ret;
+}
+
+static int cfg80211_rtw_disconnect(struct wiphy *wiphy, struct net_device *ndev,
+ u16 reason_code)
+{
+ _adapter *padapter = wiphy_to_adapter(wiphy);
+
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+
+ rtw_set_roaming(padapter, 0);
+
+ if(check_fwstate(&padapter->mlmepriv, _FW_LINKED))
+ {
+ rtw_scan_abort(padapter);
+ LeaveAllPowerSaveMode(padapter);
+ rtw_disassoc_cmd(padapter, 500, _FALSE);
+
+ DBG_871X("%s...call rtw_indicate_disconnect\n", __FUNCTION__);
+
+ padapter->mlmepriv.not_indic_disco = _TRUE;
+ rtw_indicate_disconnect(padapter);
+ padapter->mlmepriv.not_indic_disco = _FALSE;
+
+ rtw_free_assoc_resources(padapter, 1);
+ }
+
+ return 0;
+}
+
+static int cfg80211_rtw_set_txpower(struct wiphy *wiphy,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
+ struct wireless_dev *wdev,
+#endif
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,36)) || defined(COMPAT_KERNEL_RELEASE)
+ enum nl80211_tx_power_setting type, int mbm)
+#else
+ enum tx_power_setting type, int dbm)
+#endif
+{
+#if 0
+ struct iwm_priv *iwm = wiphy_to_iwm(wiphy);
+ int ret;
+
+ switch (type) {
+ case NL80211_TX_POWER_AUTOMATIC:
+ return 0;
+ case NL80211_TX_POWER_FIXED:
+ if (mbm < 0 || (mbm % 100))
+ return -EOPNOTSUPP;
+
+ if (!test_bit(IWM_STATUS_READY, &iwm->status))
+ return 0;
+
+ ret = iwm_umac_set_config_fix(iwm, UMAC_PARAM_TBL_CFG_FIX,
+ CFG_TX_PWR_LIMIT_USR,
+ MBM_TO_DBM(mbm) * 2);
+ if (ret < 0)
+ return ret;
+
+ return iwm_tx_power_trigger(iwm);
+ default:
+ IWM_ERR(iwm, "Unsupported power type: %d\n", type);
+ return -EOPNOTSUPP;
+ }
+#endif
+ DBG_8192C("%s\n", __func__);
+ return 0;
+}
+
+static int cfg80211_rtw_get_txpower(struct wiphy *wiphy,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0))
+ struct wireless_dev *wdev,
+#endif
+ int *dbm)
+{
+ //_adapter *padapter = wiphy_to_adapter(wiphy);
+
+ DBG_8192C("%s\n", __func__);
+
+ *dbm = (12);
+
+ return 0;
+}
+
+inline bool rtw_cfg80211_pwr_mgmt(_adapter *adapter)
+{
+ struct rtw_wdev_priv *rtw_wdev_priv = wdev_to_priv(adapter->rtw_wdev);
+ return rtw_wdev_priv->power_mgmt;
+}
+
+static int cfg80211_rtw_set_power_mgmt(struct wiphy *wiphy,
+ struct net_device *ndev,
+ bool enabled, int timeout)
+{
+ _adapter *padapter = wiphy_to_adapter(wiphy);
+ struct rtw_wdev_priv *rtw_wdev_priv = wdev_to_priv(padapter->rtw_wdev);
+
+ DBG_871X(FUNC_NDEV_FMT" enabled:%u, timeout:%d\n", FUNC_NDEV_ARG(ndev),
+ enabled, timeout);
+
+ rtw_wdev_priv->power_mgmt = enabled;
+
+ #ifdef CONFIG_LPS
+ if (!enabled)
+ LPS_Leave(padapter);
+ #endif
+
+ return 0;
+}
+
+static int cfg80211_rtw_set_pmksa(struct wiphy *wiphy,
+ struct net_device *netdev,
+ struct cfg80211_pmksa *pmksa)
+{
+ u8 index,blInserted = _FALSE;
+ _adapter *padapter = wiphy_to_adapter(wiphy);
+ struct security_priv *psecuritypriv = &padapter->securitypriv;
+ u8 strZeroMacAddress[ ETH_ALEN ] = { 0x00 };
+
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(netdev));
+
+ if ( _rtw_memcmp( pmksa->bssid, strZeroMacAddress, ETH_ALEN ) == _TRUE )
+ {
+ return -EINVAL;
+ }
+
+ blInserted = _FALSE;
+
+ //overwrite PMKID
+ for(index=0 ; index<NUM_PMKID_CACHE; index++)
+ {
+ if( _rtw_memcmp( psecuritypriv->PMKIDList[index].Bssid, pmksa->bssid, ETH_ALEN) ==_TRUE )
+ { // BSSID is matched, the same AP => rewrite with new PMKID.
+ DBG_871X(FUNC_NDEV_FMT" BSSID exists in the PMKList.\n", FUNC_NDEV_ARG(netdev));
+
+ _rtw_memcpy( psecuritypriv->PMKIDList[index].PMKID, pmksa->pmkid, WLAN_PMKID_LEN);
+ psecuritypriv->PMKIDList[index].bUsed = _TRUE;
+ psecuritypriv->PMKIDIndex = index+1;
+ blInserted = _TRUE;
+ break;
+ }
+ }
+
+ if(!blInserted)
+ {
+ // Find a new entry
+ DBG_871X(FUNC_NDEV_FMT" Use the new entry index = %d for this PMKID.\n",
+ FUNC_NDEV_ARG(netdev), psecuritypriv->PMKIDIndex );
+
+ _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].Bssid, pmksa->bssid, ETH_ALEN);
+ _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].PMKID, pmksa->pmkid, WLAN_PMKID_LEN);
+
+ psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].bUsed = _TRUE;
+ psecuritypriv->PMKIDIndex++ ;
+ if(psecuritypriv->PMKIDIndex==16)
+ {
+ psecuritypriv->PMKIDIndex =0;
+ }
+ }
+
+ return 0;
+}
+
+static int cfg80211_rtw_del_pmksa(struct wiphy *wiphy,
+ struct net_device *netdev,
+ struct cfg80211_pmksa *pmksa)
+{
+ u8 index, bMatched = _FALSE;
+ _adapter *padapter = wiphy_to_adapter(wiphy);
+ struct security_priv *psecuritypriv = &padapter->securitypriv;
+
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(netdev));
+
+ for(index=0 ; index<NUM_PMKID_CACHE; index++)
+ {
+ if( _rtw_memcmp( psecuritypriv->PMKIDList[index].Bssid, pmksa->bssid, ETH_ALEN) ==_TRUE )
+ { // BSSID is matched, the same AP => Remove this PMKID information and reset it.
+ _rtw_memset( psecuritypriv->PMKIDList[index].Bssid, 0x00, ETH_ALEN );
+ _rtw_memset( psecuritypriv->PMKIDList[index].PMKID, 0x00, WLAN_PMKID_LEN );
+ psecuritypriv->PMKIDList[index].bUsed = _FALSE;
+ bMatched = _TRUE;
+ break;
+ }
+ }
+
+ if(_FALSE == bMatched)
+ {
+ DBG_871X(FUNC_NDEV_FMT" do not have matched BSSID\n"
+ , FUNC_NDEV_ARG(netdev));
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int cfg80211_rtw_flush_pmksa(struct wiphy *wiphy,
+ struct net_device *netdev)
+{
+ _adapter *padapter = wiphy_to_adapter(wiphy);
+ struct security_priv *psecuritypriv = &padapter->securitypriv;
+
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(netdev));
+
+ _rtw_memset( &psecuritypriv->PMKIDList[ 0 ], 0x00, sizeof( RT_PMKID_LIST ) * NUM_PMKID_CACHE );
+ psecuritypriv->PMKIDIndex = 0;
+
+ return 0;
+}
+
+#ifdef CONFIG_AP_MODE
+void rtw_cfg80211_indicate_sta_assoc(_adapter *padapter, u8 *pmgmt_frame, uint frame_len)
+{
+ s32 freq;
+ int channel;
+ struct wireless_dev *pwdev = padapter->rtw_wdev;
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct net_device *ndev = padapter->pnetdev;
+
+ DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
+
+#if defined(RTW_USE_CFG80211_STA_EVENT) || defined(COMPAT_KERNEL_RELEASE)
+ {
+ struct station_info sinfo;
+ u8 ie_offset;
+ if (GetFrameSubType(pmgmt_frame) == WIFI_ASSOCREQ)
+ ie_offset = _ASOCREQ_IE_OFFSET_;
+ else // WIFI_REASSOCREQ
+ ie_offset = _REASOCREQ_IE_OFFSET_;
+
+ sinfo.filled = 0;
+ sinfo.filled = STATION_INFO_ASSOC_REQ_IES;
+ sinfo.assoc_req_ies = pmgmt_frame + WLAN_HDR_A3_LEN + ie_offset;
+ sinfo.assoc_req_ies_len = frame_len - WLAN_HDR_A3_LEN - ie_offset;
+ cfg80211_new_sta(ndev, GetAddr2Ptr(pmgmt_frame), &sinfo, GFP_ATOMIC);
+ }
+#else /* defined(RTW_USE_CFG80211_STA_EVENT) */
+ channel = pmlmeext->cur_channel;
+ if (channel <= RTW_CH_MAX_2G_CHANNEL)
+ freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
+ else
+ freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
+
+ #ifdef COMPAT_KERNEL_RELEASE
+ rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
+ #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
+ rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
+ #else //COMPAT_KERNEL_RELEASE
+ {
+ //to avoid WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION) when calling cfg80211_send_rx_assoc()
+ #ifndef CONFIG_PLATFORM_MSTAR
+ pwdev->iftype = NL80211_IFTYPE_STATION;
+ #endif //CONFIG_PLATFORM_MSTAR
+ DBG_8192C("iftype=%d before call cfg80211_send_rx_assoc()\n", pwdev->iftype);
+ rtw_cfg80211_send_rx_assoc(padapter, NULL, pmgmt_frame, frame_len);
+ DBG_8192C("iftype=%d after call cfg80211_send_rx_assoc()\n", pwdev->iftype);
+ pwdev->iftype = NL80211_IFTYPE_AP;
+ //cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
+ }
+ #endif //COMPAT_KERNEL_RELEASE
+#endif /* defined(RTW_USE_CFG80211_STA_EVENT) */
+
+}
+
+void rtw_cfg80211_indicate_sta_disassoc(_adapter *padapter, unsigned char *da, unsigned short reason)
+{
+ s32 freq;
+ int channel;
+ u8 *pmgmt_frame;
+ uint frame_len;
+ struct rtw_ieee80211_hdr *pwlanhdr;
+ unsigned short *fctrl;
+ u8 mgmt_buf[128] = {0};
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+ struct net_device *ndev = padapter->pnetdev;
+
+ DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
+
+#if defined(RTW_USE_CFG80211_STA_EVENT) || defined(COMPAT_KERNEL_RELEASE)
+ cfg80211_del_sta(ndev, da, GFP_ATOMIC);
+#else /* defined(RTW_USE_CFG80211_STA_EVENT) */
+ channel = pmlmeext->cur_channel;
+ if (channel <= RTW_CH_MAX_2G_CHANNEL)
+ freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
+ else
+ freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
+
+ pmgmt_frame = mgmt_buf;
+ pwlanhdr = (struct rtw_ieee80211_hdr *)pmgmt_frame;
+
+ fctrl = &(pwlanhdr->frame_ctl);
+ *(fctrl) = 0;
+
+ //_rtw_memcpy(pwlanhdr->addr1, da, ETH_ALEN);
+ //_rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr1, myid(&(padapter->eeprompriv)), ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr2, da, ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)), ETH_ALEN);
+
+ SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
+ pmlmeext->mgnt_seq++;
+ SetFrameSubType(pmgmt_frame, WIFI_DEAUTH);
+
+ pmgmt_frame += sizeof(struct rtw_ieee80211_hdr_3addr);
+ frame_len = sizeof(struct rtw_ieee80211_hdr_3addr);
+
+ reason = cpu_to_le16(reason);
+ pmgmt_frame = rtw_set_fixed_ie(pmgmt_frame, _RSON_CODE_ , (unsigned char *)&reason, &frame_len);
+
+ #ifdef COMPAT_KERNEL_RELEASE
+ rtw_cfg80211_rx_mgmt(padapter, freq, 0, mgmt_buf, frame_len, GFP_ATOMIC);
+ #elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) && !defined(CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER)
+ rtw_cfg80211_rx_mgmt(padapter, freq, 0, mgmt_buf, frame_len, GFP_ATOMIC);
+ #else //COMPAT_KERNEL_RELEASE
+ cfg80211_send_disassoc(padapter->pnetdev, mgmt_buf, frame_len);
+ //cfg80211_rx_action(padapter->pnetdev, freq, mgmt_buf, frame_len, GFP_ATOMIC);
+ #endif //COMPAT_KERNEL_RELEASE
+#endif /* defined(RTW_USE_CFG80211_STA_EVENT) */
+}
+
+static int rtw_cfg80211_monitor_if_open(struct net_device *ndev)
+{
+ int ret = 0;
+
+ DBG_8192C("%s\n", __func__);
+
+ return ret;
+}
+
+static int rtw_cfg80211_monitor_if_close(struct net_device *ndev)
+{
+ int ret = 0;
+
+ DBG_8192C("%s\n", __func__);
+
+ return ret;
+}
+
+static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb, struct net_device *ndev)
+{
+ int ret = 0;
+ int rtap_len;
+ int qos_len = 0;
+ int dot11_hdr_len = 24;
+ int snap_len = 6;
+ unsigned char *pdata;
+ u16 frame_ctl;
+ unsigned char src_mac_addr[6];
+ unsigned char dst_mac_addr[6];
+ struct ieee80211_hdr *dot11_hdr;
+ struct ieee80211_radiotap_header *rtap_hdr;
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
+
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+
+ if (skb)
+ rtw_mstat_update(MSTAT_TYPE_SKB, MSTAT_ALLOC_SUCCESS, skb->truesize);
+
+ if (unlikely(skb->len < sizeof(struct ieee80211_radiotap_header)))
+ goto fail;
+
+ rtap_hdr = (struct ieee80211_radiotap_header *)skb->data;
+ if (unlikely(rtap_hdr->it_version))
+ goto fail;
+
+ rtap_len = ieee80211_get_radiotap_len(skb->data);
+ if (unlikely(skb->len < rtap_len))
+ goto fail;
+
+ if(rtap_len != 14)
+ {
+ DBG_8192C("radiotap len (should be 14): %d\n", rtap_len);
+ goto fail;
+ }
+
+ /* Skip the ratio tap header */
+ skb_pull(skb, rtap_len);
+
+ dot11_hdr = (struct ieee80211_hdr *)skb->data;
+ frame_ctl = le16_to_cpu(dot11_hdr->frame_control);
+ /* Check if the QoS bit is set */
+ if ((frame_ctl & RTW_IEEE80211_FCTL_FTYPE) == RTW_IEEE80211_FTYPE_DATA) {
+ /* Check if this ia a Wireless Distribution System (WDS) frame
+ * which has 4 MAC addresses
+ */
+ if (dot11_hdr->frame_control & 0x0080)
+ qos_len = 2;
+ if ((dot11_hdr->frame_control & 0x0300) == 0x0300)
+ dot11_hdr_len += 6;
+
+ memcpy(dst_mac_addr, dot11_hdr->addr1, sizeof(dst_mac_addr));
+ memcpy(src_mac_addr, dot11_hdr->addr2, sizeof(src_mac_addr));
+
+ /* Skip the 802.11 header, QoS (if any) and SNAP, but leave spaces for
+ * for two MAC addresses
+ */
+ skb_pull(skb, dot11_hdr_len + qos_len + snap_len - sizeof(src_mac_addr) * 2);
+ pdata = (unsigned char*)skb->data;
+ memcpy(pdata, dst_mac_addr, sizeof(dst_mac_addr));
+ memcpy(pdata + sizeof(dst_mac_addr), src_mac_addr, sizeof(src_mac_addr));
+
+ DBG_8192C("should be eapol packet\n");
+
+ /* Use the real net device to transmit the packet */
+ ret = _rtw_xmit_entry(skb, padapter->pnetdev);
+
+ return ret;
+
+ }
+ else if ((frame_ctl & (RTW_IEEE80211_FCTL_FTYPE|RTW_IEEE80211_FCTL_STYPE))
+ == (RTW_IEEE80211_FTYPE_MGMT|RTW_IEEE80211_STYPE_ACTION)
+ )
+ {
+ //only for action frames
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ unsigned char *pframe;
+ //u8 category, action, OUI_Subtype, dialogToken=0;
+ //unsigned char *frame_body;
+ struct rtw_ieee80211_hdr *pwlanhdr;
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ u8 *buf = skb->data;
+ u32 len = skb->len;
+ u8 category, action;
+ int type = -1;
+
+ if (rtw_action_frame_parse(buf, len, &category, &action) == _FALSE) {
+ DBG_8192C(FUNC_NDEV_FMT" frame_control:0x%x\n", FUNC_NDEV_ARG(ndev),
+ le16_to_cpu(((struct rtw_ieee80211_hdr_3addr *)buf)->frame_ctl));
+ goto fail;
+ }
+
+ DBG_8192C("RTW_Tx:da="MAC_FMT" via "FUNC_NDEV_FMT"\n",
+ MAC_ARG(GetAddr1Ptr(buf)), FUNC_NDEV_ARG(ndev));
+ #ifdef CONFIG_P2P
+ if((type = rtw_p2p_check_frames(padapter, buf, len, _TRUE)) >= 0)
+ goto dump;
+ #endif
+ if (category == RTW_WLAN_CATEGORY_PUBLIC)
+ DBG_871X("RTW_Tx:%s\n", action_public_str(action));
+ else
+ DBG_871X("RTW_Tx:category(%u), action(%u)\n", category, action);
+
+dump:
+ //starting alloc mgmt frame to dump it
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ goto fail;
+ }
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+ update_mgntframe_attrib(padapter, pattrib);
+ pattrib->retry_ctrl = _FALSE;
+
+ _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
+
+ pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
+
+ _rtw_memcpy(pframe, (void*)buf, len);
+ #ifdef CONFIG_WFD
+ if (type >= 0)
+ {
+ struct wifi_display_info *pwfd_info;
+
+ pwfd_info = padapter->wdinfo.wfd_info;
+
+ if ( _TRUE == pwfd_info->wfd_enable )
+ {
+ rtw_append_wfd_ie( padapter, pframe, &len );
+ }
+ }
+ #endif // CONFIG_WFD
+ pattrib->pktlen = len;
+
+ pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+ //update seq number
+ pmlmeext->mgnt_seq = GetSequence(pwlanhdr);
+ pattrib->seqnum = pmlmeext->mgnt_seq;
+ pmlmeext->mgnt_seq++;
+
+
+ pattrib->last_txcmdsz = pattrib->pktlen;
+
+ dump_mgntframe(padapter, pmgntframe);
+
+ }
+ else
+ {
+ DBG_8192C("frame_ctl=0x%x\n", frame_ctl & (RTW_IEEE80211_FCTL_FTYPE|RTW_IEEE80211_FCTL_STYPE));
+ }
+
+
+fail:
+
+ dev_kfree_skb(skb);
+
+ return 0;
+
+}
+
+static void rtw_cfg80211_monitor_if_set_multicast_list(struct net_device *ndev)
+{
+ DBG_8192C("%s\n", __func__);
+}
+
+static int rtw_cfg80211_monitor_if_set_mac_address(struct net_device *ndev, void *addr)
+{
+ int ret = 0;
+
+ DBG_8192C("%s\n", __func__);
+
+ return ret;
+}
+
+#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
+static const struct net_device_ops rtw_cfg80211_monitor_if_ops = {
+ .ndo_open = rtw_cfg80211_monitor_if_open,
+ .ndo_stop = rtw_cfg80211_monitor_if_close,
+ .ndo_start_xmit = rtw_cfg80211_monitor_if_xmit_entry,
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0))
+ .ndo_set_multicast_list = rtw_cfg80211_monitor_if_set_multicast_list,
+ #endif
+ .ndo_set_mac_address = rtw_cfg80211_monitor_if_set_mac_address,
+};
+#endif
+
+static int rtw_cfg80211_add_monitor_if(_adapter *padapter, char *name, struct net_device **ndev)
+{
+ int ret = 0;
+ struct net_device* mon_ndev = NULL;
+ struct wireless_dev* mon_wdev = NULL;
+ struct rtw_netdev_priv_indicator *pnpi;
+ struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
+
+ if (!name ) {
+ DBG_871X(FUNC_ADPT_FMT" without specific name\n", FUNC_ADPT_ARG(padapter));
+ ret = -EINVAL;
+ goto out;
+ }
+
+ if (pwdev_priv->pmon_ndev) {
+ DBG_871X(FUNC_ADPT_FMT" monitor interface exist: "NDEV_FMT"\n",
+ FUNC_ADPT_ARG(padapter), NDEV_ARG(pwdev_priv->pmon_ndev));
+ ret = -EBUSY;
+ goto out;
+ }
+
+ mon_ndev = alloc_etherdev(sizeof(struct rtw_netdev_priv_indicator));
+ if (!mon_ndev) {
+ DBG_871X(FUNC_ADPT_FMT" allocate ndev fail\n", FUNC_ADPT_ARG(padapter));
+ ret = -ENOMEM;
+ goto out;
+ }
+
+ mon_ndev->type = ARPHRD_IEEE80211_RADIOTAP;
+ strncpy(mon_ndev->name, name, IFNAMSIZ);
+ mon_ndev->name[IFNAMSIZ - 1] = 0;
+ mon_ndev->destructor = rtw_ndev_destructor;
+
+#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29))
+ mon_ndev->netdev_ops = &rtw_cfg80211_monitor_if_ops;
+#else
+ mon_ndev->open = rtw_cfg80211_monitor_if_open;
+ mon_ndev->stop = rtw_cfg80211_monitor_if_close;
+ mon_ndev->hard_start_xmit = rtw_cfg80211_monitor_if_xmit_entry;
+ mon_ndev->set_mac_address = rtw_cfg80211_monitor_if_set_mac_address;
+#endif
+
+ pnpi = netdev_priv(mon_ndev);
+ pnpi->priv = padapter;
+ pnpi->sizeof_priv = sizeof(_adapter);
+
+ /* wdev */
+ mon_wdev = (struct wireless_dev *)rtw_zmalloc(sizeof(struct wireless_dev));
+ if (!mon_wdev) {
+ DBG_871X(FUNC_ADPT_FMT" allocate mon_wdev fail\n", FUNC_ADPT_ARG(padapter));
+ ret = -ENOMEM;
+ goto out;
+ }
+
+ mon_wdev->wiphy = padapter->rtw_wdev->wiphy;
+ mon_wdev->netdev = mon_ndev;
+ mon_wdev->iftype = NL80211_IFTYPE_MONITOR;
+ mon_ndev->ieee80211_ptr = mon_wdev;
+
+ ret = register_netdevice(mon_ndev);
+ if (ret) {
+ goto out;
+ }
+
+ *ndev = pwdev_priv->pmon_ndev = mon_ndev;
+ _rtw_memcpy(pwdev_priv->ifname_mon, name, IFNAMSIZ+1);
+
+out:
+ if (ret && mon_wdev) {
+ rtw_mfree((u8*)mon_wdev, sizeof(struct wireless_dev));
+ mon_wdev = NULL;
+ }
+
+ if (ret && mon_ndev) {
+ free_netdev(mon_ndev);
+ *ndev = mon_ndev = NULL;
+ }
+
+ return ret;
+}
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
+static struct wireless_dev *
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
+static struct net_device *
+#else
+static int
+#endif
+ cfg80211_rtw_add_virtual_intf(
+ struct wiphy *wiphy,
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0))
+ const char *name,
+ #else
+ char *name,
+ #endif
+ enum nl80211_iftype type, u32 *flags, struct vif_params *params)
+{
+ int ret = 0;
+ struct net_device* ndev = NULL;
+ _adapter *padapter = wiphy_to_adapter(wiphy);
+
+ DBG_871X(FUNC_ADPT_FMT " wiphy:%s, name:%s, type:%d\n",
+ FUNC_ADPT_ARG(padapter), wiphy_name(wiphy), name, type);
+
+ switch (type) {
+ case NL80211_IFTYPE_ADHOC:
+ case NL80211_IFTYPE_AP_VLAN:
+ case NL80211_IFTYPE_WDS:
+ case NL80211_IFTYPE_MESH_POINT:
+ ret = -ENODEV;
+ break;
+ case NL80211_IFTYPE_MONITOR:
+ ret = rtw_cfg80211_add_monitor_if(padapter, (char *)name, &ndev);
+ break;
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ case NL80211_IFTYPE_P2P_CLIENT:
+#endif
+ case NL80211_IFTYPE_STATION:
+ ret = -ENODEV;
+ break;
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ case NL80211_IFTYPE_P2P_GO:
+#endif
+ case NL80211_IFTYPE_AP:
+ ret = -ENODEV;
+ break;
+ default:
+ ret = -ENODEV;
+ DBG_871X("Unsupported interface type\n");
+ break;
+ }
+
+ DBG_871X(FUNC_ADPT_FMT" ndev:%p, ret:%d\n", FUNC_ADPT_ARG(padapter), ndev, ret);
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
+ return ndev ? ndev->ieee80211_ptr : ERR_PTR(ret);
+#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
+ return ndev ? ndev : ERR_PTR(ret);
+#else
+ return ret;
+#endif
+}
+
+static int cfg80211_rtw_del_virtual_intf(struct wiphy *wiphy,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
+ struct wireless_dev *wdev
+#else
+ struct net_device *ndev
+#endif
+)
+{
+ struct rtw_wdev_priv *pwdev_priv = (struct rtw_wdev_priv *)wiphy_priv(wiphy);
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
+ struct net_device *ndev;
+ ndev = wdev ? wdev->netdev : NULL;
+#endif
+
+ if (!ndev)
+ goto exit;
+
+ unregister_netdevice(ndev);
+
+ if (ndev == pwdev_priv->pmon_ndev) {
+ pwdev_priv->pmon_ndev = NULL;
+ pwdev_priv->ifname_mon[0] = '\0';
+ DBG_871X(FUNC_NDEV_FMT" remove monitor interface\n", FUNC_NDEV_ARG(ndev));
+ }
+
+exit:
+ return 0;
+}
+
+static int rtw_add_beacon(_adapter *adapter, const u8 *head, size_t head_len, const u8 *tail, size_t tail_len)
+{
+ int ret=0;
+ u8 *pbuf = NULL;
+ uint len, wps_ielen=0;
+ uint p2p_ielen=0;
+ u8 *p2p_ie;
+ u8 got_p2p_ie = _FALSE;
+ struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
+ //struct sta_priv *pstapriv = &padapter->stapriv;
+
+
+ DBG_8192C("%s beacon_head_len=%zu, beacon_tail_len=%zu\n", __FUNCTION__, head_len, tail_len);
+
+
+ if(check_fwstate(pmlmepriv, WIFI_AP_STATE) != _TRUE)
+ return -EINVAL;
+
+ if(head_len<24)
+ return -EINVAL;
+
+
+ pbuf = rtw_zmalloc(head_len+tail_len);
+ if(!pbuf)
+ return -ENOMEM;
+
+
+ //_rtw_memcpy(&pstapriv->max_num_sta, param->u.bcn_ie.reserved, 2);
+
+ //if((pstapriv->max_num_sta>NUM_STA) || (pstapriv->max_num_sta<=0))
+ // pstapriv->max_num_sta = NUM_STA;
+
+
+ _rtw_memcpy(pbuf, (void *)head+24, head_len-24);// 24=beacon header len.
+ _rtw_memcpy(pbuf+head_len-24, (void *)tail, tail_len);
+
+ len = head_len+tail_len-24;
+
+ //check wps ie if inclued
+ if(rtw_get_wps_ie(pbuf+_FIXED_IE_LENGTH_, len-_FIXED_IE_LENGTH_, NULL, &wps_ielen))
+ DBG_8192C("add bcn, wps_ielen=%d\n", wps_ielen);
+
+#ifdef CONFIG_P2P
+ //check p2p ie if inclued
+ if( adapter->wdinfo.driver_interface == DRIVER_CFG80211 )
+ {
+ //check p2p if enable
+ if(rtw_get_p2p_ie(pbuf+_FIXED_IE_LENGTH_, len-_FIXED_IE_LENGTH_, NULL, &p2p_ielen))
+ {
+ struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
+ struct wifidirect_info *pwdinfo= &(adapter->wdinfo);
+
+ DBG_8192C("got p2p_ie, len=%d\n", p2p_ielen);
+ got_p2p_ie = _TRUE;
+
+ if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
+ {
+ DBG_8192C("Enable P2P function for the first time\n");
+ rtw_p2p_enable(adapter, P2P_ROLE_GO);
+ wdev_to_priv(adapter->rtw_wdev)->p2p_enabled = _TRUE;
+ }
+ else
+ {
+ _cancel_timer_ex( &pwdinfo->find_phase_timer );
+ _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
+ _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
+
+ DBG_8192C("enter GO Mode, p2p_ielen=%d\n", p2p_ielen);
+
+ rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
+ rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
+ pwdinfo->intent = 15;
+ }
+ }
+ }
+#endif // CONFIG_P2P
+
+ /* pbss_network->IEs will not include p2p_ie, wfd ie */
+ rtw_ies_remove_ie(pbuf, &len, _BEACON_IE_OFFSET_, _VENDOR_SPECIFIC_IE_, P2P_OUI, 4);
+ rtw_ies_remove_ie(pbuf, &len, _BEACON_IE_OFFSET_, _VENDOR_SPECIFIC_IE_, WFD_OUI, 4);
+
+ if (rtw_check_beacon_data(adapter, pbuf, len) == _SUCCESS)
+ {
+#ifdef CONFIG_P2P
+ //check p2p if enable
+ if(got_p2p_ie == _TRUE)
+ {
+ struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
+ struct wifidirect_info *pwdinfo= &(adapter->wdinfo);
+ pwdinfo->operating_channel = pmlmeext->cur_channel;
+ }
+#endif //CONFIG_P2P
+ ret = 0;
+ }
+ else
+ {
+ ret = -EINVAL;
+ }
+
+
+ rtw_mfree(pbuf, head_len+tail_len);
+
+ return ret;
+}
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) && !defined(COMPAT_KERNEL_RELEASE)
+static int cfg80211_rtw_add_beacon(struct wiphy *wiphy, struct net_device *ndev,
+ struct beacon_parameters *info)
+{
+ int ret=0;
+ _adapter *adapter = wiphy_to_adapter(wiphy);
+
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+ ret = rtw_add_beacon(adapter, info->head, info->head_len, info->tail, info->tail_len);
+
+ return ret;
+}
+
+static int cfg80211_rtw_set_beacon(struct wiphy *wiphy, struct net_device *ndev,
+ struct beacon_parameters *info)
+{
+ _adapter *padapter = wiphy_to_adapter(wiphy);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+
+ pmlmeext->bstart_bss = _TRUE;
+
+ cfg80211_rtw_add_beacon(wiphy, ndev, info);
+
+ return 0;
+}
+
+static int cfg80211_rtw_del_beacon(struct wiphy *wiphy, struct net_device *ndev)
+{
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+
+ return 0;
+}
+#else
+static int cfg80211_rtw_start_ap(struct wiphy *wiphy, struct net_device *ndev,
+ struct cfg80211_ap_settings *settings)
+{
+ int ret = 0;
+ _adapter *adapter = wiphy_to_adapter(wiphy);
+
+ DBG_871X(FUNC_NDEV_FMT" hidden_ssid:%d, auth_type:%d\n", FUNC_NDEV_ARG(ndev),
+ settings->hidden_ssid, settings->auth_type);
+
+ ret = rtw_add_beacon(adapter, settings->beacon.head, settings->beacon.head_len,
+ settings->beacon.tail, settings->beacon.tail_len);
+
+ adapter->mlmeextpriv.mlmext_info.hidden_ssid_mode = settings->hidden_ssid;
+
+ if (settings->ssid && settings->ssid_len) {
+ WLAN_BSSID_EX *pbss_network = &adapter->mlmepriv.cur_network.network;
+ WLAN_BSSID_EX *pbss_network_ext = &adapter->mlmeextpriv.mlmext_info.network;
+
+ if(0)
+ DBG_871X(FUNC_ADPT_FMT" ssid:(%s,%d), from ie:(%s,%d)\n", FUNC_ADPT_ARG(adapter),
+ settings->ssid, settings->ssid_len,
+ pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength);
+
+ _rtw_memcpy(pbss_network->Ssid.Ssid, (void *)settings->ssid, settings->ssid_len);
+ pbss_network->Ssid.SsidLength = settings->ssid_len;
+ _rtw_memcpy(pbss_network_ext->Ssid.Ssid, (void *)settings->ssid, settings->ssid_len);
+ pbss_network_ext->Ssid.SsidLength = settings->ssid_len;
+
+ if(0)
+ DBG_871X(FUNC_ADPT_FMT" after ssid:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),
+ pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,
+ pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);
+ }
+
+ return ret;
+}
+
+static int cfg80211_rtw_change_beacon(struct wiphy *wiphy, struct net_device *ndev,
+ struct cfg80211_beacon_data *info)
+{
+ int ret = 0;
+ _adapter *adapter = wiphy_to_adapter(wiphy);
+
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+
+ ret = rtw_add_beacon(adapter, info->head, info->head_len, info->tail, info->tail_len);
+
+ return ret;
+}
+
+static int cfg80211_rtw_stop_ap(struct wiphy *wiphy, struct net_device *ndev)
+{
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+ return 0;
+}
+
+#endif //(LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0))
+
+static int cfg80211_rtw_add_station(struct wiphy *wiphy, struct net_device *ndev,
+ u8 *mac, struct station_parameters *params)
+{
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+
+ return 0;
+}
+
+static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev,
+ u8 *mac)
+{
+ int ret=0;
+ _irqL irqL;
+ _list *phead, *plist;
+ u8 updated;
+ struct sta_info *psta = NULL;
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct sta_priv *pstapriv = &padapter->stapriv;
+
+ DBG_871X("+"FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+
+ if(check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) != _TRUE)
+ {
+ DBG_8192C("%s, fw_state != FW_LINKED|WIFI_AP_STATE\n", __func__);
+ return -EINVAL;
+ }
+
+
+ if(!mac)
+ {
+ DBG_8192C("flush all sta, and cam_entry\n");
+
+ flush_all_cam_entry(padapter); //clear CAM
+
+ ret = rtw_sta_flush(padapter);
+
+ return ret;
+ }
+
+
+ DBG_8192C("free sta macaddr =" MAC_FMT "\n", MAC_ARG(mac));
+
+ if (mac[0] == 0xff && mac[1] == 0xff &&
+ mac[2] == 0xff && mac[3] == 0xff &&
+ mac[4] == 0xff && mac[5] == 0xff)
+ {
+ return -EINVAL;
+ }
+
+
+ _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+
+ phead = &pstapriv->asoc_list;
+ plist = get_next(phead);
+
+ //check asoc_queue
+ while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
+ {
+ psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
+
+ plist = get_next(plist);
+
+ if(_rtw_memcmp(mac, psta->hwaddr, ETH_ALEN))
+ {
+ if(psta->dot8021xalg == 1 && psta->bpairwise_key_installed == _FALSE)
+ {
+ DBG_8192C("%s, sta's dot8021xalg = 1 and key_installed = _FALSE\n", __func__);
+ }
+ else
+ {
+ DBG_8192C("free psta=%p, aid=%d\n", psta, psta->aid);
+
+ rtw_list_delete(&psta->asoc_list);
+ pstapriv->asoc_list_cnt--;
+
+ //_exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+ updated = ap_free_sta(padapter, psta, _TRUE, WLAN_REASON_DEAUTH_LEAVING);
+ //_enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+
+ psta = NULL;
+
+ break;
+ }
+
+ }
+
+ }
+
+ _exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);
+
+ associated_clients_update(padapter, updated);
+
+ DBG_871X("-"FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+
+ return ret;
+
+}
+
+static int cfg80211_rtw_change_station(struct wiphy *wiphy, struct net_device *ndev,
+ u8 *mac, struct station_parameters *params)
+{
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+
+ return 0;
+}
+
+static int cfg80211_rtw_dump_station(struct wiphy *wiphy, struct net_device *ndev,
+ int idx, u8 *mac, struct station_info *sinfo)
+{
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+
+ //TODO: dump scanned queue
+
+ return -ENOENT;
+}
+
+static int cfg80211_rtw_change_bss(struct wiphy *wiphy, struct net_device *ndev,
+ struct bss_parameters *params)
+{
+ u8 i;
+
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+/*
+ DBG_8192C("use_cts_prot=%d\n", params->use_cts_prot);
+ DBG_8192C("use_short_preamble=%d\n", params->use_short_preamble);
+ DBG_8192C("use_short_slot_time=%d\n", params->use_short_slot_time);
+ DBG_8192C("ap_isolate=%d\n", params->ap_isolate);
+
+ DBG_8192C("basic_rates_len=%d\n", params->basic_rates_len);
+ for(i=0; i<params->basic_rates_len; i++)
+ {
+ DBG_8192C("basic_rates=%d\n", params->basic_rates[i]);
+
+ }
+*/
+ return 0;
+
+}
+
+static int cfg80211_rtw_set_channel(struct wiphy *wiphy
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ , struct net_device *ndev
+ #endif
+ , struct ieee80211_channel *chan, enum nl80211_channel_type channel_type)
+{
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+ #endif
+
+ return 0;
+}
+
+static int cfg80211_rtw_auth(struct wiphy *wiphy, struct net_device *ndev,
+ struct cfg80211_auth_request *req)
+{
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+
+ return 0;
+}
+
+static int cfg80211_rtw_assoc(struct wiphy *wiphy, struct net_device *ndev,
+ struct cfg80211_assoc_request *req)
+{
+ DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));
+
+ return 0;
+}
+#endif //CONFIG_AP_MODE
+
+void rtw_cfg80211_rx_action_p2p(_adapter *padapter, u8 *pmgmt_frame, uint frame_len)
+{
+ int type;
+ s32 freq;
+ int channel;
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ u8 category, action;
+
+ channel = rtw_get_oper_ch(padapter);
+
+ DBG_8192C("RTW_Rx:cur_ch=%d\n", channel);
+ #ifdef CONFIG_P2P
+ type = rtw_p2p_check_frames(padapter, pmgmt_frame, frame_len, _FALSE);
+ if (type >= 0)
+ goto indicate;
+ #endif
+ rtw_action_frame_parse(pmgmt_frame, frame_len, &category, &action);
+ DBG_871X("RTW_Rx:category(%u), action(%u)\n", category, action);
+
+indicate:
+ if (channel <= RTW_CH_MAX_2G_CHANNEL)
+ freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
+ else
+ freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
+#else
+ cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
+#endif
+}
+
+void rtw_cfg80211_rx_p2p_action_public(_adapter *padapter, u8 *pmgmt_frame, uint frame_len)
+{
+ int type;
+ s32 freq;
+ int channel;
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ u8 category, action;
+
+ channel = rtw_get_oper_ch(padapter);
+
+ DBG_8192C("RTW_Rx:cur_ch=%d\n", channel);
+ #ifdef CONFIG_P2P
+ type = rtw_p2p_check_frames(padapter, pmgmt_frame, frame_len, _FALSE);
+ if (type >= 0) {
+ switch (type) {
+ case P2P_GO_NEGO_CONF:
+ case P2P_PROVISION_DISC_RESP:
+ case P2P_INVIT_RESP:
+ rtw_set_scan_deny(padapter, 2000);
+ rtw_clear_scan_deny(padapter);
+ }
+ goto indicate;
+ }
+ #endif
+ rtw_action_frame_parse(pmgmt_frame, frame_len, &category, &action);
+ DBG_871X("RTW_Rx:category(%u), action(%u)\n", category, action);
+
+indicate:
+ if (channel <= RTW_CH_MAX_2G_CHANNEL)
+ freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
+ else
+ freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC);
+#else
+ cfg80211_rx_action(padapter->pnetdev, freq, pmgmt_frame, frame_len, GFP_ATOMIC);
+#endif
+}
+
+void rtw_cfg80211_rx_action(_adapter *adapter, u8 *frame, uint frame_len, const char*msg)
+{
+ s32 freq;
+ int channel;
+ struct mlme_ext_priv *pmlmeext = &(adapter->mlmeextpriv);
+ struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(adapter->rtw_wdev);
+ u8 category, action;
+
+ channel = rtw_get_oper_ch(adapter);
+
+ rtw_action_frame_parse(frame, frame_len, &category, &action);
+
+ DBG_8192C("RTW_Rx:cur_ch=%d\n", channel);
+ if (msg)
+ DBG_871X("RTW_Rx:%s\n", msg);
+ else
+ DBG_871X("RTW_Rx:category(%u), action(%u)\n", category, action);
+
+ if (channel <= RTW_CH_MAX_2G_CHANNEL)
+ freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ);
+ else
+ freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ);
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ rtw_cfg80211_rx_mgmt(adapter, freq, 0, frame, frame_len, GFP_ATOMIC);
+#else
+ cfg80211_rx_action(adapter->pnetdev, freq, frame, frame_len, GFP_ATOMIC);
+#endif
+
+}
+
+#ifdef CONFIG_P2P
+void rtw_cfg80211_issue_p2p_provision_request(_adapter *padapter, const u8 *buf, size_t len)
+{
+ u16 wps_devicepassword_id = 0x0000;
+ uint wps_devicepassword_id_len = 0;
+ u8 wpsie[ 255 ] = { 0x00 }, p2p_ie[ 255 ] = { 0x00 };
+ uint p2p_ielen = 0;
+ uint wpsielen = 0;
+ u32 devinfo_contentlen = 0;
+ u8 devinfo_content[64] = { 0x00 };
+ u16 capability = 0;
+ uint capability_len = 0;
+
+ unsigned char category = RTW_WLAN_CATEGORY_PUBLIC;
+ u8 action = P2P_PUB_ACTION_ACTION;
+ u8 dialogToken = 1;
+ u32 p2poui = cpu_to_be32(P2POUI);
+ u8 oui_subtype = P2P_PROVISION_DISC_REQ;
+ u32 p2pielen = 0;
+#ifdef CONFIG_WFD
+ u32 wfdielen = 0;
+#endif //CONFIG_WFD
+
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ unsigned char *pframe;
+ struct rtw_ieee80211_hdr *pwlanhdr;
+ unsigned short *fctrl;
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
+
+ struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
+ u8 *frame_body = (unsigned char *)(buf + sizeof(struct rtw_ieee80211_hdr_3addr));
+ size_t frame_body_len = len - sizeof(struct rtw_ieee80211_hdr_3addr);
+
+
+ DBG_871X( "[%s] In\n", __FUNCTION__ );
+
+ //prepare for building provision_request frame
+ _rtw_memcpy(pwdinfo->tx_prov_disc_info.peerIFAddr, GetAddr1Ptr(buf), ETH_ALEN);
+ _rtw_memcpy(pwdinfo->tx_prov_disc_info.peerDevAddr, GetAddr1Ptr(buf), ETH_ALEN);
+
+ pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_PUSH_BUTTON;
+
+ rtw_get_wps_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, frame_body_len - _PUBLIC_ACTION_IE_OFFSET_, wpsie, &wpsielen);
+ rtw_get_wps_attr_content( wpsie, wpsielen, WPS_ATTR_DEVICE_PWID, (u8*) &wps_devicepassword_id, &wps_devicepassword_id_len);
+ wps_devicepassword_id = be16_to_cpu( wps_devicepassword_id );
+
+ switch(wps_devicepassword_id)
+ {
+ case WPS_DPID_PIN:
+ pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_LABEL;
+ break;
+ case WPS_DPID_USER_SPEC:
+ pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_DISPLYA;
+ break;
+ case WPS_DPID_MACHINE_SPEC:
+ break;
+ case WPS_DPID_REKEY:
+ break;
+ case WPS_DPID_PBC:
+ pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_PUSH_BUTTON;
+ break;
+ case WPS_DPID_REGISTRAR_SPEC:
+ pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_KEYPAD;
+ break;
+ default:
+ break;
+ }
+
+
+ if ( rtw_get_p2p_ie( frame_body + _PUBLIC_ACTION_IE_OFFSET_, frame_body_len - _PUBLIC_ACTION_IE_OFFSET_, p2p_ie, &p2p_ielen ) )
+ {
+
+ rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_DEVICE_INFO, devinfo_content, &devinfo_contentlen);
+ rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&capability, &capability_len);
+
+ }
+
+
+ //start to build provision_request frame
+ _rtw_memset(wpsie, 0, sizeof(wpsie));
+ _rtw_memset(p2p_ie, 0, sizeof(p2p_ie));
+ p2p_ielen = 0;
+
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ return;
+ }
+
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+ update_mgntframe_attrib(padapter, pattrib);
+
+ _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
+
+ pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
+ pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+
+ fctrl = &(pwlanhdr->frame_ctl);
+ *(fctrl) = 0;
+
+ _rtw_memcpy(pwlanhdr->addr1, pwdinfo->tx_prov_disc_info.peerDevAddr, ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
+ _rtw_memcpy(pwlanhdr->addr3, pwdinfo->tx_prov_disc_info.peerDevAddr, ETH_ALEN);
+
+ SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
+ pmlmeext->mgnt_seq++;
+ SetFrameSubType(pframe, WIFI_ACTION);
+
+ pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
+ pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+
+ pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *) &(p2poui), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(oui_subtype), &(pattrib->pktlen));
+ pframe = rtw_set_fixed_ie(pframe, 1, &(dialogToken), &(pattrib->pktlen));
+
+
+ //build_prov_disc_request_p2p_ie
+ // P2P OUI
+ p2pielen = 0;
+ p2p_ie[ p2pielen++ ] = 0x50;
+ p2p_ie[ p2pielen++ ] = 0x6F;
+ p2p_ie[ p2pielen++ ] = 0x9A;
+ p2p_ie[ p2pielen++ ] = 0x09; // WFA P2P v1.0
+
+ // Commented by Albert 20110301
+ // According to the P2P Specification, the provision discovery request frame should contain 3 P2P attributes
+ // 1. P2P Capability
+ // 2. Device Info
+ // 3. Group ID ( When joining an operating P2P Group )
+
+ // P2P Capability ATTR
+ // Type:
+ p2p_ie[ p2pielen++ ] = P2P_ATTR_CAPABILITY;
+
+ // Length:
+ //*(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 0x0002 );
+ RTW_PUT_LE16(p2p_ie + p2pielen, 0x0002);
+ p2pielen += 2;
+
+ // Value:
+ // Device Capability Bitmap, 1 byte
+ // Group Capability Bitmap, 1 byte
+ _rtw_memcpy(p2p_ie + p2pielen, &capability, 2);
+ p2pielen += 2;
+
+
+ // Device Info ATTR
+ // Type:
+ p2p_ie[ p2pielen++ ] = P2P_ATTR_DEVICE_INFO;
+
+ // Length:
+ // 21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes)
+ // + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes)
+ //*(u16*) ( p2pie + p2pielen ) = cpu_to_le16( 21 + pwdinfo->device_name_len );
+ RTW_PUT_LE16(p2p_ie + p2pielen, devinfo_contentlen);
+ p2pielen += 2;
+
+ // Value:
+ _rtw_memcpy(p2p_ie + p2pielen, devinfo_content, devinfo_contentlen);
+ p2pielen += devinfo_contentlen;
+
+
+ pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *) p2p_ie, &p2p_ielen);
+ //p2pielen = build_prov_disc_request_p2p_ie( pwdinfo, pframe, NULL, 0, pwdinfo->tx_prov_disc_info.peerDevAddr);
+ //pframe += p2pielen;
+ pattrib->pktlen += p2p_ielen;
+
+ wpsielen = 0;
+ // WPS OUI
+ *(u32*) ( wpsie ) = cpu_to_be32( WPSOUI );
+ wpsielen += 4;
+
+ // WPS version
+ // Type:
+ *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_VER1 );
+ wpsielen += 2;
+
+ // Length:
+ *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( 0x0001 );
+ wpsielen += 2;
+
+ // Value:
+ wpsie[wpsielen++] = WPS_VERSION_1; // Version 1.0
+
+ // Config Method
+ // Type:
+ *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( WPS_ATTR_CONF_METHOD );
+ wpsielen += 2;
+
+ // Length:
+ *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( 0x0002 );
+ wpsielen += 2;
+
+ // Value:
+ *(u16*) ( wpsie + wpsielen ) = cpu_to_be16( pwdinfo->tx_prov_disc_info.wps_config_method_request );
+ wpsielen += 2;
+
+ pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *) wpsie, &pattrib->pktlen );
+
+
+#ifdef CONFIG_WFD
+ wfdielen = build_provdisc_req_wfd_ie(pwdinfo, pframe);
+ pframe += wfdielen;
+ pattrib->pktlen += wfdielen;
+#endif //CONFIG_WFD
+
+ pattrib->last_txcmdsz = pattrib->pktlen;
+
+ //dump_mgntframe(padapter, pmgntframe);
+ if (dump_mgntframe_and_wait_ack(padapter, pmgntframe) != _SUCCESS)
+ DBG_8192C("%s, ack to\n", __func__);
+
+ //if(wps_devicepassword_id == WPS_DPID_REGISTRAR_SPEC)
+ //{
+ // DBG_8192C("waiting for p2p peer key-in PIN CODE\n");
+ // rtw_msleep_os(15000); // 15 sec for key in PIN CODE, workaround for GS2 before issuing Nego Req.
+ //}
+
+}
+
+static s32 cfg80211_rtw_remain_on_channel(struct wiphy *wiphy,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
+ struct wireless_dev *wdev,
+#else
+ struct net_device *ndev,
+#endif
+ struct ieee80211_channel * channel,
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
+ enum nl80211_channel_type channel_type,
+#endif
+ unsigned int duration, u64 *cookie)
+{
+ s32 err = 0;
+ _adapter *padapter = wiphy_to_adapter(wiphy);
+ struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct wifidirect_info *pwdinfo = &padapter->wdinfo;
+ struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
+ u8 remain_ch = (u8) ieee80211_frequency_to_channel(channel->center_freq);
+ u8 ready_on_channel = _FALSE;
+
+ DBG_871X(FUNC_ADPT_FMT" ch:%u duration:%d\n", FUNC_ADPT_ARG(padapter), remain_ch, duration);
+
+ if(pcfg80211_wdinfo->is_ro_ch == _TRUE)
+ {
+ DBG_8192C("%s, cancel ro ch timer\n", __func__);
+
+ _cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);
+
+#ifdef CONFIG_CONCURRENT_MODE
+ ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);
+#endif //CONFIG_CONCURRENT_MODE
+
+ p2p_protocol_wk_hdl(padapter, P2P_RO_CH_WK);
+ }
+
+ pcfg80211_wdinfo->is_ro_ch = _TRUE;
+
+ if(_FAIL == rtw_pwr_wakeup(padapter)) {
+ err = -EFAULT;
+ goto exit;
+ }
+
+ _rtw_memcpy(&pcfg80211_wdinfo->remain_on_ch_channel, channel, sizeof(struct ieee80211_channel));
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
+ pcfg80211_wdinfo->remain_on_ch_type= channel_type;
+ #endif
+ pcfg80211_wdinfo->remain_on_ch_cookie= *cookie;
+
+ rtw_scan_abort(padapter);
+#ifdef CONFIG_CONCURRENT_MODE
+ if(rtw_buddy_adapter_up(padapter))
+ rtw_scan_abort(padapter->pbuddy_adapter);
+#endif //CONFIG_CONCURRENT_MODE
+
+ //if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) && !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
+ if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
+ {
+ rtw_p2p_enable(padapter, P2P_ROLE_DEVICE);
+ wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _TRUE;
+ }
+ else
+ {
+ rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
+#ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
+#endif
+ }
+
+
+ rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
+
+
+ if(duration < 400)
+ duration = duration*3;//extend from exper.
+
+
+#ifdef CONFIG_CONCURRENT_MODE
+ if(check_buddy_fwstate(padapter, _FW_LINKED) &&
+ (duration<pwdinfo->ext_listen_interval))
+ {
+ duration = duration + pwdinfo->ext_listen_interval;
+ }
+#endif
+
+ pcfg80211_wdinfo->restore_channel = rtw_get_oper_ch(padapter);
+
+ if(rtw_ch_set_search_ch(pmlmeext->channel_set, remain_ch) >= 0) {
+#ifdef CONFIG_CONCURRENT_MODE
+ if ( check_buddy_fwstate(padapter, _FW_LINKED ) )
+ {
+ PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
+ struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
+
+ if(remain_ch != pbuddy_mlmeext->cur_channel)
+ {
+ if(ATOMIC_READ(&pwdev_priv->switch_ch_to)==1 ||
+ (remain_ch != pmlmeext->cur_channel))
+ {
+ DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);
+ issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);
+
+ ATOMIC_SET(&pwdev_priv->switch_ch_to, 0);
+
+ DBG_8192C("%s, set switch ch timer, duration=%d\n", __func__, duration-pwdinfo->ext_listen_interval);
+ _set_timer(&pwdinfo->ap_p2p_switch_timer, duration-pwdinfo->ext_listen_interval);
+ }
+ }
+
+ ready_on_channel = _TRUE;
+ //pmlmeext->cur_channel = remain_ch;
+ //set_channel_bwmode(padapter, remain_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
+ }else
+#endif //CONFIG_CONCURRENT_MODE
+ if(remain_ch != pmlmeext->cur_channel )
+ {
+ ready_on_channel = _TRUE;
+ //pmlmeext->cur_channel = remain_ch;
+ //set_channel_bwmode(padapter, remain_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
+ }
+ } else {
+ DBG_871X("%s remain_ch:%u not in channel plan!!!!\n", __FUNCTION__, remain_ch);
+ }
+
+
+ //call this after other things have been done
+#ifdef CONFIG_CONCURRENT_MODE
+ if(ATOMIC_READ(&pwdev_priv->ro_ch_to)==1 ||
+ (remain_ch != pmlmeext->cur_channel))
+ {
+ u8 co_channel = 0xff;
+ ATOMIC_SET(&pwdev_priv->ro_ch_to, 0);
+#endif
+
+ if(ready_on_channel == _TRUE)
+ {
+ if ( !check_fwstate(&padapter->mlmepriv, _FW_LINKED ) )
+ {
+ pmlmeext->cur_channel = remain_ch;
+
+
+ set_channel_bwmode(padapter, remain_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
+ }
+ }
+ DBG_8192C("%s, set ro ch timer, duration=%d\n", __func__, duration);
+ _set_timer( &pcfg80211_wdinfo->remain_on_ch_timer, duration);
+
+#ifdef CONFIG_CONCURRENT_MODE
+ }
+#endif
+
+ rtw_cfg80211_ready_on_channel(padapter, *cookie, channel, channel_type, duration, GFP_KERNEL);
+
+exit:
+ if (err)
+ pcfg80211_wdinfo->is_ro_ch = _FALSE;
+
+ return err;
+}
+
+static s32 cfg80211_rtw_cancel_remain_on_channel(struct wiphy *wiphy,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
+ struct wireless_dev *wdev,
+#else
+ struct net_device *ndev,
+#endif
+ u64 cookie)
+{
+ s32 err = 0;
+ _adapter *padapter = wiphy_to_adapter(wiphy);
+ struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
+ struct wifidirect_info *pwdinfo = &padapter->wdinfo;
+ struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
+
+ DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));
+
+ if (pcfg80211_wdinfo->is_ro_ch == _TRUE) {
+ DBG_8192C("%s, cancel ro ch timer\n", __func__);
+ _cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);
+ #ifdef CONFIG_CONCURRENT_MODE
+ ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);
+ #endif
+ p2p_protocol_wk_hdl(padapter, P2P_RO_CH_WK);
+ }
+
+ #if 0
+ // Disable P2P Listen State
+ if(!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) && !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
+ {
+ if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
+ {
+ _cancel_timer_ex( &pwdinfo->find_phase_timer );
+ _cancel_timer_ex( &pwdinfo->restore_p2p_state_timer );
+ _cancel_timer_ex( &pwdinfo->pre_tx_scan_timer);
+
+ rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
+ _rtw_memset(pwdinfo, 0x00, sizeof(struct wifidirect_info));
+ }
+ }
+ else
+ #endif
+ {
+ rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
+#ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("%s, role=%d, p2p_state=%d\n", __func__, rtw_p2p_role(pwdinfo), rtw_p2p_state(pwdinfo));
+#endif
+ }
+ pcfg80211_wdinfo->is_ro_ch = _FALSE;
+
+ return err;
+}
+
+#endif //CONFIG_P2P
+
+static int _cfg80211_rtw_mgmt_tx(_adapter *padapter, u8 tx_ch, const u8 *buf, size_t len)
+{
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ unsigned char *pframe;
+ int ret = _FAIL;
+ bool ack = _TRUE;
+ struct rtw_ieee80211_hdr *pwlanhdr;
+ struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
+ struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+ struct wifidirect_info *pwdinfo = &padapter->wdinfo;
+ //struct cfg80211_wifidirect_info *pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;
+
+ if(_FAIL == rtw_pwr_wakeup(padapter)) {
+ ret = -EFAULT;
+ goto exit;
+ }
+
+ rtw_set_scan_deny(padapter, 1000);
+
+ rtw_scan_abort(padapter);
+ #ifdef CONFIG_CONCURRENT_MODE
+ if(rtw_buddy_adapter_up(padapter))
+ rtw_scan_abort(padapter->pbuddy_adapter);
+ #endif /* CONFIG_CONCURRENT_MODE */
+
+ if (padapter->cfg80211_wdinfo.is_ro_ch == _TRUE) {
+ //DBG_8192C("%s, cancel ro ch timer\n", __func__);
+ //_cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);
+ //padapter->cfg80211_wdinfo.is_ro_ch = _FALSE;
+ #ifdef CONFIG_CONCURRENT_MODE
+ if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED ))
+ {
+ DBG_8192C("%s, extend ro ch time\n", __func__);
+ _set_timer( &padapter->cfg80211_wdinfo.remain_on_ch_timer, pwdinfo->ext_listen_period);
+ }
+ #endif //CONFIG_CONCURRENT_MODE
+ }
+
+#ifdef CONFIG_CONCURRENT_MODE
+ if (check_buddy_fwstate(padapter, _FW_LINKED )) {
+ u8 co_channel=0xff;
+ PADAPTER pbuddy_adapter = padapter->pbuddy_adapter;
+ struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
+
+ co_channel = rtw_get_oper_ch(padapter);
+
+ if (tx_ch != pbuddy_mlmeext->cur_channel) {
+
+ u16 ext_listen_period;
+
+ if (ATOMIC_READ(&pwdev_priv->switch_ch_to)==1) {
+ DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);
+ issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);
+
+ ATOMIC_SET(&pwdev_priv->switch_ch_to, 0);
+
+ //DBG_8192C("%s, set switch ch timer, period=%d\n", __func__, pwdinfo->ext_listen_period);
+ //_set_timer(&pwdinfo->ap_p2p_switch_timer, pwdinfo->ext_listen_period);
+ }
+
+ if (check_fwstate(&padapter->mlmepriv, _FW_LINKED ))
+ {
+ ext_listen_period = 500;// 500ms
+ }
+ else
+ {
+ ext_listen_period = pwdinfo->ext_listen_period;
+ }
+
+ DBG_8192C("%s, set switch ch timer, period=%d\n", __func__, ext_listen_period);
+ _set_timer(&pwdinfo->ap_p2p_switch_timer, ext_listen_period);
+
+ }
+
+ if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED ))
+ pmlmeext->cur_channel = tx_ch;
+
+ if (tx_ch != co_channel)
+ set_channel_bwmode(padapter, tx_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
+ }else
+#endif //CONFIG_CONCURRENT_MODE
+ //if (tx_ch != pmlmeext->cur_channel) {
+ if(tx_ch != rtw_get_oper_ch(padapter)) {
+ if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED ))
+ pmlmeext->cur_channel = tx_ch;
+ set_channel_bwmode(padapter, tx_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
+ }
+
+ //starting alloc mgmt frame to dump it
+ if ((pmgntframe = alloc_mgtxmitframe(pxmitpriv)) == NULL)
+ {
+ //ret = -ENOMEM;
+ ret = _FAIL;
+ goto exit;
+ }
+
+ //update attribute
+ pattrib = &pmgntframe->attrib;
+ update_mgntframe_attrib(padapter, pattrib);
+ pattrib->retry_ctrl = _FALSE;
+
+ _rtw_memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
+
+ pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
+
+ _rtw_memcpy(pframe, (void*)buf, len);
+ pattrib->pktlen = len;
+
+ pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+ //update seq number
+ pmlmeext->mgnt_seq = GetSequence(pwlanhdr);
+ pattrib->seqnum = pmlmeext->mgnt_seq;
+ pmlmeext->mgnt_seq++;
+
+#ifdef CONFIG_WFD
+ {
+ struct wifi_display_info *pwfd_info;
+
+ pwfd_info = padapter->wdinfo.wfd_info;
+
+ if ( _TRUE == pwfd_info->wfd_enable )
+ {
+ rtw_append_wfd_ie( padapter, pframe, &pattrib->pktlen );
+ }
+ }
+#endif // CONFIG_WFD
+
+ pattrib->last_txcmdsz = pattrib->pktlen;
+
+ if (dump_mgntframe_and_wait_ack(padapter, pmgntframe) != _SUCCESS)
+ {
+ ack = _FALSE;
+ ret = _FAIL;
+
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("%s, ack == _FAIL\n", __func__);
+ #endif
+ }
+ else
+ {
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("%s, ack=%d, ok!\n", __func__, ack);
+ #endif
+ ret = _SUCCESS;
+ }
+
+exit:
+
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("%s, ret=%d\n", __func__, ret);
+ #endif
+
+ return ret;
+
+}
+
+static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
+ struct wireless_dev *wdev,
+#else
+ struct net_device *ndev,
+#endif
+ struct ieee80211_channel *chan,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
+ bool offchan,
+#endif
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
+ enum nl80211_channel_type channel_type,
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ bool channel_type_valid,
+ #endif
+#endif
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
+ unsigned int wait,
+#endif
+ const u8 *buf, size_t len,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
+ bool no_cck,
+#endif
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
+ bool dont_wait_for_ack,
+#endif
+ u64 *cookie)
+{
+ _adapter *padapter = (_adapter *)wiphy_to_adapter(wiphy);
+ struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
+ int ret = 0;
+ int tx_ret;
+ u32 dump_limit = RTW_MAX_MGMT_TX_CNT;
+ u32 dump_cnt = 0;
+ bool ack = _TRUE;
+ u8 tx_ch = (u8)ieee80211_frequency_to_channel(chan->center_freq);
+ u8 category, action;
+ int type = (-1);
+ u32 start = rtw_get_current_time();
+
+ /* cookie generation */
+ *cookie = (unsigned long) buf;
+
+#ifdef CONFIG_DEBUG_CFG80211
+ DBG_871X(FUNC_ADPT_FMT" len=%zu, ch=%d"
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
+ ", ch_type=%d"
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ ", channel_type_valid=%d"
+ #endif
+ #endif
+ "\n", FUNC_ADPT_ARG(padapter),
+ len, tx_ch
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))
+ , channel_type
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ , channel_type_valid
+ #endif
+ #endif
+ );
+#endif /* CONFIG_DEBUG_CFG80211 */
+
+ /* indicate ack before issue frame to avoid racing with rsp frame */
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ rtw_cfg80211_mgmt_tx_status(padapter, *cookie, buf, len, ack, GFP_KERNEL);
+#elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,34) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,35))
+ cfg80211_action_tx_status(ndev, *cookie, buf, len, ack, GFP_KERNEL);
+#endif
+
+ if (rtw_action_frame_parse(buf, len, &category, &action) == _FALSE) {
+ DBG_8192C(FUNC_ADPT_FMT" frame_control:0x%x\n", FUNC_ADPT_ARG(padapter),
+ le16_to_cpu(((struct rtw_ieee80211_hdr_3addr *)buf)->frame_ctl));
+ goto exit;
+ }
+
+ DBG_8192C("RTW_Tx:tx_ch=%d, da="MAC_FMT"\n", tx_ch, MAC_ARG(GetAddr1Ptr(buf)));
+ #ifdef CONFIG_P2P
+ if((type = rtw_p2p_check_frames(padapter, buf, len, _TRUE)) >= 0) {
+ goto dump;
+ }
+ #endif
+ if (category == RTW_WLAN_CATEGORY_PUBLIC)
+ DBG_871X("RTW_Tx:%s\n", action_public_str(action));
+ else
+ DBG_871X("RTW_Tx:category(%u), action(%u)\n", category, action);
+
+dump:
+ do {
+ dump_cnt++;
+ tx_ret = _cfg80211_rtw_mgmt_tx(padapter, tx_ch, buf, len);
+ } while (dump_cnt < dump_limit && tx_ret != _SUCCESS);
+
+ if (tx_ret != _SUCCESS || dump_cnt > 1) {
+ DBG_871X(FUNC_ADPT_FMT" %s (%d/%d) in %d ms\n", FUNC_ADPT_ARG(padapter),
+ tx_ret==_SUCCESS?"OK":"FAIL", dump_cnt, dump_limit, rtw_get_passing_time_ms(start));
+ }
+
+ switch (type) {
+ case P2P_GO_NEGO_CONF:
+ rtw_clear_scan_deny(padapter);
+ break;
+ case P2P_INVIT_RESP:
+ if (pwdev_priv->invit_info.flags & BIT(0)
+ && pwdev_priv->invit_info.status == 0)
+ {
+ DBG_871X(FUNC_ADPT_FMT" agree with invitation of persistent group\n",
+ FUNC_ADPT_ARG(padapter));
+ rtw_set_scan_deny(padapter, 5000);
+ rtw_pwr_wakeup_ex(padapter, 5000);
+ rtw_clear_scan_deny(padapter);
+ }
+ break;
+ }
+
+exit:
+ return ret;
+}
+
+static void cfg80211_rtw_mgmt_frame_register(struct wiphy *wiphy,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 6, 0))
+ struct wireless_dev *wdev,
+#else
+ struct net_device *ndev,
+#endif
+ u16 frame_type, bool reg)
+{
+ _adapter *adapter = wiphy_to_adapter(wiphy);
+
+#ifdef CONFIG_DEBUG_CFG80211
+ DBG_871X(FUNC_ADPT_FMT" frame_type:%x, reg:%d\n", FUNC_ADPT_ARG(adapter),
+ frame_type, reg);
+#endif
+
+ if (frame_type != (IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_REQ))
+ return;
+
+ return;
+}
+
+static int rtw_cfg80211_set_beacon_wpsp2pie(struct net_device *ndev, char *buf, int len)
+{
+ int ret = 0;
+ uint wps_ielen = 0;
+ u8 *wps_ie;
+ u32 p2p_ielen = 0;
+ u8 wps_oui[8]={0x0,0x50,0xf2,0x04};
+ u8 *p2p_ie;
+ u32 wfd_ielen = 0;
+ u8 *wfd_ie;
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+ struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
+
+ DBG_871X(FUNC_NDEV_FMT" ielen=%d\n", FUNC_NDEV_ARG(ndev), len);
+
+ if(len>0)
+ {
+ if((wps_ie = rtw_get_wps_ie(buf, len, NULL, &wps_ielen)))
+ {
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("bcn_wps_ielen=%d\n", wps_ielen);
+ #endif
+
+ if(pmlmepriv->wps_beacon_ie)
+ {
+ u32 free_len = pmlmepriv->wps_beacon_ie_len;
+ pmlmepriv->wps_beacon_ie_len = 0;
+ rtw_mfree(pmlmepriv->wps_beacon_ie, free_len);
+ pmlmepriv->wps_beacon_ie = NULL;
+ }
+
+ pmlmepriv->wps_beacon_ie = rtw_malloc(wps_ielen);
+ if ( pmlmepriv->wps_beacon_ie == NULL) {
+ DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
+ return -EINVAL;
+
+ }
+
+ _rtw_memcpy(pmlmepriv->wps_beacon_ie, wps_ie, wps_ielen);
+ pmlmepriv->wps_beacon_ie_len = wps_ielen;
+
+ update_beacon(padapter, _VENDOR_SPECIFIC_IE_, wps_oui, _TRUE);
+
+ }
+
+ //buf += wps_ielen;
+ //len -= wps_ielen;
+
+ #ifdef CONFIG_P2P
+ if((p2p_ie=rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen)))
+ {
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("bcn_p2p_ielen=%d\n", p2p_ielen);
+ #endif
+
+ if(pmlmepriv->p2p_beacon_ie)
+ {
+ u32 free_len = pmlmepriv->p2p_beacon_ie_len;
+ pmlmepriv->p2p_beacon_ie_len = 0;
+ rtw_mfree(pmlmepriv->p2p_beacon_ie, free_len);
+ pmlmepriv->p2p_beacon_ie = NULL;
+ }
+
+ pmlmepriv->p2p_beacon_ie = rtw_malloc(p2p_ielen);
+ if ( pmlmepriv->p2p_beacon_ie == NULL) {
+ DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
+ return -EINVAL;
+
+ }
+
+ _rtw_memcpy(pmlmepriv->p2p_beacon_ie, p2p_ie, p2p_ielen);
+ pmlmepriv->p2p_beacon_ie_len = p2p_ielen;
+
+ }
+ #endif //CONFIG_P2P
+
+ //buf += p2p_ielen;
+ //len -= p2p_ielen;
+
+ #ifdef CONFIG_WFD
+ if(rtw_get_wfd_ie(buf, len, NULL, &wfd_ielen))
+ {
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("bcn_wfd_ielen=%d\n", wfd_ielen);
+ #endif
+
+ if(pmlmepriv->wfd_beacon_ie)
+ {
+ u32 free_len = pmlmepriv->wfd_beacon_ie_len;
+ pmlmepriv->wfd_beacon_ie_len = 0;
+ rtw_mfree(pmlmepriv->wfd_beacon_ie, free_len);
+ pmlmepriv->wfd_beacon_ie = NULL;
+ }
+
+ pmlmepriv->wfd_beacon_ie = rtw_malloc(wfd_ielen);
+ if ( pmlmepriv->wfd_beacon_ie == NULL) {
+ DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
+ return -EINVAL;
+
+ }
+ rtw_get_wfd_ie(buf, len, pmlmepriv->wfd_beacon_ie, &pmlmepriv->wfd_beacon_ie_len);
+ }
+ #endif //CONFIG_WFD
+
+ pmlmeext->bstart_bss = _TRUE;
+
+ }
+
+ return ret;
+
+}
+
+static int rtw_cfg80211_set_probe_resp_wpsp2pie(struct net_device *net, char *buf, int len)
+{
+ int ret = 0;
+ uint wps_ielen = 0;
+ u8 *wps_ie;
+ u32 p2p_ielen = 0;
+ u8 *p2p_ie;
+ u32 wfd_ielen = 0;
+ u8 *wfd_ie;
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(net);
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+
+#ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("%s, ielen=%d\n", __func__, len);
+#endif
+
+ if(len>0)
+ {
+ if((wps_ie = rtw_get_wps_ie(buf, len, NULL, &wps_ielen)))
+ {
+ uint attr_contentlen = 0;
+ u16 uconfig_method, *puconfig_method = NULL;
+
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("probe_resp_wps_ielen=%d\n", wps_ielen);
+ #endif
+
+ if(check_fwstate(pmlmepriv, WIFI_UNDER_WPS))
+ {
+ u8 sr = 0;
+ rtw_get_wps_attr_content(wps_ie, wps_ielen, WPS_ATTR_SELECTED_REGISTRAR, (u8*)(&sr), NULL);
+
+ if (sr != 0)
+ {
+ DBG_871X("%s, got sr\n", __func__);
+ }
+ else
+ {
+ DBG_8192C("GO mode process WPS under site-survey, sr no set\n");
+ return ret;
+ }
+ }
+
+ if(pmlmepriv->wps_probe_resp_ie)
+ {
+ u32 free_len = pmlmepriv->wps_probe_resp_ie_len;
+ pmlmepriv->wps_probe_resp_ie_len = 0;
+ rtw_mfree(pmlmepriv->wps_probe_resp_ie, free_len);
+ pmlmepriv->wps_probe_resp_ie = NULL;
+ }
+
+ pmlmepriv->wps_probe_resp_ie = rtw_malloc(wps_ielen);
+ if ( pmlmepriv->wps_probe_resp_ie == NULL) {
+ DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
+ return -EINVAL;
+
+ }
+
+ //add PUSH_BUTTON config_method by driver self in wpsie of probe_resp at GO Mode
+ if ( (puconfig_method = (u16*)rtw_get_wps_attr_content( wps_ie, wps_ielen, WPS_ATTR_CONF_METHOD , NULL, &attr_contentlen)) != NULL )
+ {
+ #ifdef CONFIG_DEBUG_CFG80211
+ //printk("config_method in wpsie of probe_resp = 0x%x\n", be16_to_cpu(*puconfig_method));
+ #endif
+
+ uconfig_method = WPS_CM_PUSH_BUTTON;
+ uconfig_method = cpu_to_be16( uconfig_method );
+
+ *puconfig_method |= uconfig_method;
+ }
+
+ _rtw_memcpy(pmlmepriv->wps_probe_resp_ie, wps_ie, wps_ielen);
+ pmlmepriv->wps_probe_resp_ie_len = wps_ielen;
+
+ }
+
+ //buf += wps_ielen;
+ //len -= wps_ielen;
+
+ #ifdef CONFIG_P2P
+ if((p2p_ie=rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen)))
+ {
+ u8 is_GO = _FALSE;
+ u32 attr_contentlen = 0;
+ u16 cap_attr=0;
+
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("probe_resp_p2p_ielen=%d\n", p2p_ielen);
+ #endif
+
+ //Check P2P Capability ATTR
+ if( rtw_get_p2p_attr_content( p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8*)&cap_attr, (uint*) &attr_contentlen) )
+ {
+ u8 grp_cap=0;
+ //DBG_8192C( "[%s] Got P2P Capability Attr!!\n", __FUNCTION__ );
+ cap_attr = le16_to_cpu(cap_attr);
+ grp_cap = (u8)((cap_attr >> 8)&0xff);
+
+ is_GO = (grp_cap&BIT(0)) ? _TRUE:_FALSE;
+
+ if(is_GO)
+ DBG_8192C("Got P2P Capability Attr, grp_cap=0x%x, is_GO\n", grp_cap);
+ }
+
+
+ if(is_GO == _FALSE)
+ {
+ if(pmlmepriv->p2p_probe_resp_ie)
+ {
+ u32 free_len = pmlmepriv->p2p_probe_resp_ie_len;
+ pmlmepriv->p2p_probe_resp_ie_len = 0;
+ rtw_mfree(pmlmepriv->p2p_probe_resp_ie, free_len);
+ pmlmepriv->p2p_probe_resp_ie = NULL;
+ }
+
+ pmlmepriv->p2p_probe_resp_ie = rtw_malloc(p2p_ielen);
+ if ( pmlmepriv->p2p_probe_resp_ie == NULL) {
+ DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
+ return -EINVAL;
+
+ }
+ _rtw_memcpy(pmlmepriv->p2p_probe_resp_ie, p2p_ie, p2p_ielen);
+ pmlmepriv->p2p_probe_resp_ie_len = p2p_ielen;
+ }
+ else
+ {
+ if(pmlmepriv->p2p_go_probe_resp_ie)
+ {
+ u32 free_len = pmlmepriv->p2p_go_probe_resp_ie_len;
+ pmlmepriv->p2p_go_probe_resp_ie_len = 0;
+ rtw_mfree(pmlmepriv->p2p_go_probe_resp_ie, free_len);
+ pmlmepriv->p2p_go_probe_resp_ie = NULL;
+ }
+
+ pmlmepriv->p2p_go_probe_resp_ie = rtw_malloc(p2p_ielen);
+ if ( pmlmepriv->p2p_go_probe_resp_ie == NULL) {
+ DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
+ return -EINVAL;
+
+ }
+ _rtw_memcpy(pmlmepriv->p2p_go_probe_resp_ie, p2p_ie, p2p_ielen);
+ pmlmepriv->p2p_go_probe_resp_ie_len = p2p_ielen;
+ }
+
+ }
+ #endif //CONFIG_P2P
+
+ //buf += p2p_ielen;
+ //len -= p2p_ielen;
+
+ #ifdef CONFIG_WFD
+ if(rtw_get_wfd_ie(buf, len, NULL, &wfd_ielen))
+ {
+ #ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("probe_resp_wfd_ielen=%d\n", wfd_ielen);
+ #endif
+
+ if(pmlmepriv->wfd_probe_resp_ie)
+ {
+ u32 free_len = pmlmepriv->wfd_probe_resp_ie_len;
+ pmlmepriv->wfd_probe_resp_ie_len = 0;
+ rtw_mfree(pmlmepriv->wfd_probe_resp_ie, free_len);
+ pmlmepriv->wfd_probe_resp_ie = NULL;
+ }
+
+ pmlmepriv->wfd_probe_resp_ie = rtw_malloc(wfd_ielen);
+ if ( pmlmepriv->wfd_probe_resp_ie == NULL) {
+ DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
+ return -EINVAL;
+
+ }
+ rtw_get_wfd_ie(buf, len, pmlmepriv->wfd_probe_resp_ie, &pmlmepriv->wfd_probe_resp_ie_len);
+ }
+ #endif //CONFIG_WFD
+
+ }
+
+ return ret;
+
+}
+
+static int rtw_cfg80211_set_assoc_resp_wpsp2pie(struct net_device *net, char *buf, int len)
+{
+ int ret = 0;
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(net);
+ struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
+
+ DBG_8192C("%s, ielen=%d\n", __func__, len);
+
+ if(len>0)
+ {
+ if(pmlmepriv->wps_assoc_resp_ie)
+ {
+ u32 free_len = pmlmepriv->wps_assoc_resp_ie_len;
+ pmlmepriv->wps_assoc_resp_ie_len = 0;
+ rtw_mfree(pmlmepriv->wps_assoc_resp_ie, free_len);
+ pmlmepriv->wps_assoc_resp_ie = NULL;
+ }
+
+ pmlmepriv->wps_assoc_resp_ie = rtw_malloc(len);
+ if ( pmlmepriv->wps_assoc_resp_ie == NULL) {
+ DBG_8192C("%s()-%d: rtw_malloc() ERROR!\n", __FUNCTION__, __LINE__);
+ return -EINVAL;
+
+ }
+ _rtw_memcpy(pmlmepriv->wps_assoc_resp_ie, buf, len);
+ pmlmepriv->wps_assoc_resp_ie_len = len;
+ }
+
+ return ret;
+
+}
+
+int rtw_cfg80211_set_mgnt_wpsp2pie(struct net_device *net, char *buf, int len,
+ int type)
+{
+ int ret = 0;
+ uint wps_ielen = 0;
+ u32 p2p_ielen = 0;
+
+#ifdef CONFIG_DEBUG_CFG80211
+ DBG_8192C("%s, ielen=%d\n", __func__, len);
+#endif
+
+ if( (rtw_get_wps_ie(buf, len, NULL, &wps_ielen) && (wps_ielen>0))
+ #ifdef CONFIG_P2P
+ || (rtw_get_p2p_ie(buf, len, NULL, &p2p_ielen) && (p2p_ielen>0))
+ #endif
+ )
+ {
+ if (net != NULL)
+ {
+ switch (type)
+ {
+ case 0x1: //BEACON
+ ret = rtw_cfg80211_set_beacon_wpsp2pie(net, buf, len);
+ break;
+ case 0x2: //PROBE_RESP
+ ret = rtw_cfg80211_set_probe_resp_wpsp2pie(net, buf, len);
+ break;
+ case 0x4: //ASSOC_RESP
+ ret = rtw_cfg80211_set_assoc_resp_wpsp2pie(net, buf, len);
+ break;
+ }
+ }
+ }
+
+ return ret;
+
+}
+
+static struct cfg80211_ops rtw_cfg80211_ops = {
+ .change_virtual_intf = cfg80211_rtw_change_iface,
+ .add_key = cfg80211_rtw_add_key,
+ .get_key = cfg80211_rtw_get_key,
+ .del_key = cfg80211_rtw_del_key,
+ .set_default_key = cfg80211_rtw_set_default_key,
+ .get_station = cfg80211_rtw_get_station,
+ .scan = cfg80211_rtw_scan,
+ .set_wiphy_params = cfg80211_rtw_set_wiphy_params,
+ .connect = cfg80211_rtw_connect,
+ .disconnect = cfg80211_rtw_disconnect,
+ .join_ibss = cfg80211_rtw_join_ibss,
+ .leave_ibss = cfg80211_rtw_leave_ibss,
+ .set_tx_power = cfg80211_rtw_set_txpower,
+ .get_tx_power = cfg80211_rtw_get_txpower,
+ .set_power_mgmt = cfg80211_rtw_set_power_mgmt,
+ .set_pmksa = cfg80211_rtw_set_pmksa,
+ .del_pmksa = cfg80211_rtw_del_pmksa,
+ .flush_pmksa = cfg80211_rtw_flush_pmksa,
+
+#ifdef CONFIG_AP_MODE
+ .add_virtual_intf = cfg80211_rtw_add_virtual_intf,
+ .del_virtual_intf = cfg80211_rtw_del_virtual_intf,
+
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 4, 0)) && !defined(COMPAT_KERNEL_RELEASE)
+ .add_beacon = cfg80211_rtw_add_beacon,
+ .set_beacon = cfg80211_rtw_set_beacon,
+ .del_beacon = cfg80211_rtw_del_beacon,
+ #else
+ .start_ap = cfg80211_rtw_start_ap,
+ .change_beacon = cfg80211_rtw_change_beacon,
+ .stop_ap = cfg80211_rtw_stop_ap,
+ #endif
+
+ .add_station = cfg80211_rtw_add_station,
+ .del_station = cfg80211_rtw_del_station,
+ .change_station = cfg80211_rtw_change_station,
+ .dump_station = cfg80211_rtw_dump_station,
+ .change_bss = cfg80211_rtw_change_bss,
+ #if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 6, 0))
+ .set_channel = cfg80211_rtw_set_channel,
+ #endif
+ //.auth = cfg80211_rtw_auth,
+ //.assoc = cfg80211_rtw_assoc,
+#endif //CONFIG_AP_MODE
+
+#ifdef CONFIG_P2P
+ .remain_on_channel = cfg80211_rtw_remain_on_channel,
+ .cancel_remain_on_channel = cfg80211_rtw_cancel_remain_on_channel,
+#endif
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+ .mgmt_tx = cfg80211_rtw_mgmt_tx,
+ .mgmt_frame_register = cfg80211_rtw_mgmt_frame_register,
+#elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,34) && LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,35))
+ .action = cfg80211_rtw_mgmt_tx,
+#endif
+};
+
+static void rtw_cfg80211_init_ht_capab(struct ieee80211_sta_ht_cap *ht_cap, enum ieee80211_band band, u8 rf_type)
+{
+
+#define MAX_BIT_RATE_40MHZ_MCS15 300 /* Mbps */
+#define MAX_BIT_RATE_40MHZ_MCS7 150 /* Mbps */
+
+ ht_cap->ht_supported = _TRUE;
+
+ ht_cap->cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
+ IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_SGI_20 |
+ IEEE80211_HT_CAP_DSSSCCK40 | IEEE80211_HT_CAP_MAX_AMSDU;
+
+ /*
+ *Maximum length of AMPDU that the STA can receive.
+ *Length = 2 ^ (13 + max_ampdu_length_exp) - 1 (octets)
+ */
+ ht_cap->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
+
+ /*Minimum MPDU start spacing , */
+ ht_cap->ampdu_density = IEEE80211_HT_MPDU_DENSITY_16;
+
+ ht_cap->mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
+
+ /*
+ *hw->wiphy->bands[IEEE80211_BAND_2GHZ]
+ *base on ant_num
+ *rx_mask: RX mask
+ *if rx_ant =1 rx_mask[0]=0xff;==>MCS0-MCS7
+ *if rx_ant =2 rx_mask[1]=0xff;==>MCS8-MCS15
+ *if rx_ant >=3 rx_mask[2]=0xff;
+ *if BW_40 rx_mask[4]=0x01;
+ *highest supported RX rate
+ */
+ if(rf_type == RF_1T1R)
+ {
+ ht_cap->mcs.rx_mask[0] = 0xFF;
+ ht_cap->mcs.rx_mask[1] = 0x00;
+ ht_cap->mcs.rx_mask[4] = 0x01;
+
+ ht_cap->mcs.rx_highest = MAX_BIT_RATE_40MHZ_MCS7;
+ }
+ else if((rf_type == RF_1T2R) || (rf_type==RF_2T2R))
+ {
+ ht_cap->mcs.rx_mask[0] = 0xFF;
+ ht_cap->mcs.rx_mask[1] = 0xFF;
+ ht_cap->mcs.rx_mask[4] = 0x01;
+
+ ht_cap->mcs.rx_highest = MAX_BIT_RATE_40MHZ_MCS15;
+ }
+ else
+ {
+ DBG_8192C("%s, error rf_type=%d\n", __func__, rf_type);
+ }
+
+}
+
+void rtw_cfg80211_init_wiphy(_adapter *padapter)
+{
+ u8 rf_type;
+ struct ieee80211_supported_band *bands;
+ struct wireless_dev *pwdev = padapter->rtw_wdev;
+ struct wiphy *wiphy = pwdev->wiphy;
+
+ rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
+
+ DBG_8192C("%s:rf_type=%d\n", __func__, rf_type);
+
+ /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */
+ {
+ bands = wiphy->bands[IEEE80211_BAND_2GHZ];
+ if(bands)
+ rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_2GHZ, rf_type);
+ }
+
+ /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */
+ {
+ bands = wiphy->bands[IEEE80211_BAND_5GHZ];
+ if(bands)
+ rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_5GHZ, rf_type);
+ }
+}
+
+/*
+struct ieee80211_iface_limit rtw_limits[] = {
+ { .max = 1, .types = BIT(NL80211_IFTYPE_STATION)
+ | BIT(NL80211_IFTYPE_ADHOC)
+#ifdef CONFIG_AP_MODE
+ | BIT(NL80211_IFTYPE_AP)
+#endif
+#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
+ | BIT(NL80211_IFTYPE_P2P_CLIENT)
+ | BIT(NL80211_IFTYPE_P2P_GO)
+#endif
+ },
+ {.max = 1, .types = BIT(NL80211_IFTYPE_MONITOR)},
+};
+
+struct ieee80211_iface_combination rtw_combinations = {
+ .limits = rtw_limits,
+ .n_limits = ARRAY_SIZE(rtw_limits),
+ .max_interfaces = 2,
+ .num_different_channels = 1,
+};
+*/
+
+static void rtw_cfg80211_preinit_wiphy(_adapter *padapter, struct wiphy *wiphy)
+{
+
+ wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM;
+
+ wiphy->max_scan_ssids = RTW_SSID_SCAN_AMOUNT;
+ wiphy->max_scan_ie_len = RTW_SCAN_IE_LEN_MAX;
+ wiphy->max_num_pmkids = RTW_MAX_NUM_PMKIDS;
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)
+ wiphy->max_remain_on_channel_duration = RTW_MAX_REMAIN_ON_CHANNEL_DURATION;
+#endif
+
+ wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION)
+ | BIT(NL80211_IFTYPE_ADHOC)
+#ifdef CONFIG_AP_MODE
+ | BIT(NL80211_IFTYPE_AP)
+ | BIT(NL80211_IFTYPE_MONITOR)
+#endif
+#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))
+ | BIT(NL80211_IFTYPE_P2P_CLIENT)
+ | BIT(NL80211_IFTYPE_P2P_GO)
+#endif
+ ;
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)
+#ifdef CONFIG_AP_MODE
+ wiphy->mgmt_stypes = rtw_cfg80211_default_mgmt_stypes;
+#endif //CONFIG_AP_MODE
+#endif
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0))
+ wiphy->software_iftypes |= BIT(NL80211_IFTYPE_MONITOR);
+#endif
+
+ /*
+ wiphy->iface_combinations = &rtw_combinations;
+ wiphy->n_iface_combinations = 1;
+ */
+
+ wiphy->cipher_suites = rtw_cipher_suites;
+ wiphy->n_cipher_suites = ARRAY_SIZE(rtw_cipher_suites);
+
+ /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */
+ wiphy->bands[IEEE80211_BAND_2GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_2GHZ);
+ /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */
+ wiphy->bands[IEEE80211_BAND_5GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_5GHZ);
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) && LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0))
+ wiphy->flags |= WIPHY_FLAG_SUPPORTS_SEPARATE_DEFAULT_KEYS;
+#endif
+
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
+ wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
+ wiphy->flags |= WIPHY_FLAG_OFFCHAN_TX | WIPHY_FLAG_HAVE_AP_SME;
+#endif
+
+ if(padapter->registrypriv.power_mgnt != PS_MODE_ACTIVE)
+ wiphy->flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT;
+ else
+ wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
+}
+
+int rtw_wdev_alloc(_adapter *padapter, struct device *dev)
+{
+ int ret = 0;
+ struct wiphy *wiphy;
+ struct wireless_dev *wdev;
+ struct rtw_wdev_priv *pwdev_priv;
+ struct net_device *pnetdev = padapter->pnetdev;
+
+ DBG_8192C("%s(padapter=%p)\n", __func__, padapter);
+
+ /* wiphy */
+ wiphy = wiphy_new(&rtw_cfg80211_ops, sizeof(struct rtw_wdev_priv));
+ if (!wiphy) {
+ DBG_8192C("Couldn't allocate wiphy device\n");
+ ret = -ENOMEM;
+ goto exit;
+ }
+ set_wiphy_dev(wiphy, dev);
+ rtw_cfg80211_preinit_wiphy(padapter, wiphy);
+
+ ret = wiphy_register(wiphy);
+ if (ret < 0) {
+ DBG_8192C("Couldn't register wiphy device\n");
+ goto free_wiphy;
+ }
+
+ /* wdev */
+ wdev = (struct wireless_dev *)rtw_zmalloc(sizeof(struct wireless_dev));
+ if (!wdev) {
+ DBG_8192C("Couldn't allocate wireless device\n");
+ ret = -ENOMEM;
+ goto unregister_wiphy;
+ }
+ wdev->wiphy = wiphy;
+ wdev->netdev = pnetdev;
+ //wdev->iftype = NL80211_IFTYPE_STATION;
+ wdev->iftype = NL80211_IFTYPE_MONITOR; // for rtw_setopmode_cmd() in cfg80211_rtw_change_iface()
+ padapter->rtw_wdev = wdev;
+ pnetdev->ieee80211_ptr = wdev;
+
+ //init pwdev_priv
+ pwdev_priv = wdev_to_priv(wdev);
+ pwdev_priv->rtw_wdev = wdev;
+ pwdev_priv->pmon_ndev = NULL;
+ pwdev_priv->ifname_mon[0] = '\0';
+ pwdev_priv->padapter = padapter;
+ pwdev_priv->scan_request = NULL;
+ _rtw_spinlock_init(&pwdev_priv->scan_req_lock);
+
+ pwdev_priv->p2p_enabled = _FALSE;
+ pwdev_priv->provdisc_req_issued = _FALSE;
+ rtw_wdev_invit_info_init(&pwdev_priv->invit_info);
+ rtw_wdev_nego_info_init(&pwdev_priv->nego_info);
+
+ pwdev_priv->bandroid_scan = _FALSE;
+
+ if(padapter->registrypriv.power_mgnt != PS_MODE_ACTIVE)
+ pwdev_priv->power_mgmt = _TRUE;
+ else
+ pwdev_priv->power_mgmt = _FALSE;
+
+#ifdef CONFIG_CONCURRENT_MODE
+ ATOMIC_SET(&pwdev_priv->switch_ch_to, 1);
+ ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);
+#endif
+
+ return ret;
+
+ rtw_mfree((u8*)wdev, sizeof(struct wireless_dev));
+unregister_wiphy:
+ wiphy_unregister(wiphy);
+ free_wiphy:
+ wiphy_free(wiphy);
+exit:
+ return ret;
+
+}
+
+void rtw_wdev_free(struct wireless_dev *wdev)
+{
+ struct rtw_wdev_priv *pwdev_priv;
+
+ DBG_8192C("%s(wdev=%p)\n", __func__, wdev);
+
+ if (!wdev)
+ return;
+
+ pwdev_priv = wdev_to_priv(wdev);
+
+ rtw_spt_band_free(wdev->wiphy->bands[IEEE80211_BAND_2GHZ]);
+ rtw_spt_band_free(wdev->wiphy->bands[IEEE80211_BAND_5GHZ]);
+
+ wiphy_free(wdev->wiphy);
+
+ rtw_mfree((u8*)wdev, sizeof(struct wireless_dev));
+}
+
+void rtw_wdev_unregister(struct wireless_dev *wdev)
+{
+ struct rtw_wdev_priv *pwdev_priv;
+
+ DBG_8192C("%s(wdev=%p)\n", __func__, wdev);
+
+ if (!wdev)
+ return;
+
+ pwdev_priv = wdev_to_priv(wdev);
+
+ rtw_cfg80211_indicate_scan_done(pwdev_priv, _TRUE);
+
+ if (pwdev_priv->pmon_ndev) {
+ DBG_8192C("%s, unregister monitor interface\n", __func__);
+ unregister_netdev(pwdev_priv->pmon_ndev);
+ }
+
+ wiphy_unregister(wdev->wiphy);
+}
+
+#endif //CONFIG_IOCTL_CFG80211
+
diff --git a/drivers/net/wireless/rtl8723as/os_dep/linux/ioctl_linux.c b/drivers/net/wireless/rtl8723as/os_dep/linux/ioctl_linux.c
index e3252e233511..d0fd7479ec1e 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/linux/ioctl_linux.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/linux/ioctl_linux.c
@@ -376,7 +376,7 @@ static char *translate_scan(_adapter *padapter,
u8 wfd_ie[ 128 ] = { 0x00 };
uint wfd_ielen = 0;
- if ( rtw_get_wfd_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, wfd_ie, &wfd_ielen ) )
+ if ( rtw_get_wfd_ie_from_scan_queue( &pnetwork->network.IEs[0], pnetwork->network.IELength, wfd_ie, &wfd_ielen, pnetwork->network.Reserved[0]) )
{
u8 wfd_devinfo[ 6 ] = { 0x00 };
uint wfd_devlen = 6;
@@ -454,7 +454,7 @@ static char *translate_scan(_adapter *padapter,
if(ht_cap == _TRUE)
snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11bgn");
else
- snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11bg");
+ snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11bg");
}
else
{
@@ -608,6 +608,17 @@ static char *translate_scan(_adapter *padapter,
u8 *ie_ptr = pnetwork->network.IEs +_FIXED_IE_LENGTH_;
total_ielen= pnetwork->network.IELength - _FIXED_IE_LENGTH_;
+ if (pnetwork->network.Reserved[0] == 2) // Probe Request
+ {
+ ie_ptr = pnetwork->network.IEs;
+ total_ielen = pnetwork->network.IELength;
+ }
+ else // Beacon or Probe Respones
+ {
+ ie_ptr = pnetwork->network.IEs + _FIXED_IE_LENGTH_;
+ total_ielen = pnetwork->network.IELength - _FIXED_IE_LENGTH_;
+ }
+
while(cnt < total_ielen)
{
if(rtw_is_wps_ie(&ie_ptr[cnt], &wps_ielen) && (wps_ielen>2))
@@ -661,7 +672,7 @@ static char *translate_scan(_adapter *padapter,
start = iwe_stream_add_point(info, start, stop, &iwe, wapi_ie);
}
}
-#endif
+#endif //CONFIG_WAPI_SUPPORT
{
struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
@@ -676,7 +687,7 @@ static char *translate_scan(_adapter *padapter,
;
if ( check_fwstate(pmlmepriv, _FW_LINKED)== _TRUE &&
- is_same_network(&pmlmepriv->cur_network.network, &pnetwork->network)) {
+ is_same_network(&pmlmepriv->cur_network.network, &pnetwork->network, 0)) {
ss = padapter->recvpriv.signal_strength;
sq = padapter->recvpriv.signal_qual;
} else {
@@ -706,6 +717,20 @@ static char *translate_scan(_adapter *padapter,
start = iwe_stream_add_event(info, start, stop, &iwe, IW_EV_QUAL_LEN);
}
+
+ {
+ u8 buf[MAX_WPA_IE_LEN];
+ u8 * p,*pos;
+ int len;
+ p = buf;
+ pos = pnetwork->network.Reserved;
+ _rtw_memset(buf, 0, MAX_WPA_IE_LEN);
+ p += sprintf(p, "fm=%02X%02X", pos[1], pos[0]);
+ _rtw_memset(&iwe, 0, sizeof(iwe));
+ iwe.cmd = IWEVCUSTOM;
+ iwe.u.data.length = strlen(buf);
+ start = iwe_stream_add_point(info, start, stop, &iwe, buf);
+ }
return start;
}
@@ -792,20 +817,26 @@ _func_enter_;
param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff)
{
- if (param->u.crypt.idx >= WEP_KEYS)
+
+ if (param->u.crypt.idx >= WEP_KEYS
+#ifdef CONFIG_IEEE80211W
+ && param->u.crypt.idx > BIP_MAX_KEYID
+#endif //CONFIG_IEEE80211W
+ )
{
ret = -EINVAL;
goto exit;
}
- } else {
+ }
+ else
+ {
#ifdef CONFIG_WAPI_SUPPORT
- if (strcmp(param->u.crypt.alg, "SMS4"))
+ if (strcmp(param->u.crypt.alg, "SMS4"))
#endif
- {
-
- ret = -EINVAL;
- goto exit;
- }
+ {
+ ret = -EINVAL;
+ goto exit;
+ }
}
if (strcmp(param->u.crypt.alg, "WEP") == 0)
@@ -882,7 +913,7 @@ _func_enter_;
_rtw_memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), pwep->KeyMaterial, pwep->KeyLength);
psecuritypriv->dot11DefKeylen[wep_key_idx]=pwep->KeyLength;
- rtw_set_key(padapter, psecuritypriv, wep_key_idx, 0);
+ rtw_set_key(padapter, psecuritypriv, wep_key_idx, 0,_TRUE);
}
goto exit;
@@ -928,20 +959,45 @@ _func_enter_;
//DEBUG_ERR((" param->u.crypt.key_len=%d\n",param->u.crypt.key_len));
DBG_871X(" ~~~~set sta key:unicastkey\n");
- rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE);
+ rtw_setstakey_cmd(padapter, (unsigned char *)psta, _TRUE, _TRUE);
}
else//group key
{
- _rtw_memcpy(padapter->securitypriv.dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key,(param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
- _rtw_memcpy(padapter->securitypriv.dot118021XGrptxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[16]),8);
- _rtw_memcpy(padapter->securitypriv.dot118021XGrprxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[24]),8);
- padapter->securitypriv.binstallGrpkey = _TRUE;
- //DEBUG_ERR((" param->u.crypt.key_len=%d\n", param->u.crypt.key_len));
- DBG_871X(" ~~~~set sta key:groupkey\n");
-
- padapter->securitypriv.dot118021XGrpKeyid = param->u.crypt.idx;
-
- rtw_set_key(padapter,&padapter->securitypriv,param->u.crypt.idx, 1);
+ if(strcmp(param->u.crypt.alg, "TKIP") == 0 || strcmp(param->u.crypt.alg, "CCMP") == 0)
+ {
+ printk("[%s] GTK key_len=%d @@@@@@@@@@@@@@@@@@\n", param->u.crypt.alg, param->u.crypt.key_len);
+ _rtw_memcpy(padapter->securitypriv.dot118021XGrpKey[param->u.crypt.idx].skey, param->u.crypt.key,(param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
+ //only TKIP group key need to install this
+ if(param->u.crypt.key_len > 16)
+ {
+ _rtw_memcpy(padapter->securitypriv.dot118021XGrptxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[16]),8);
+ _rtw_memcpy(padapter->securitypriv.dot118021XGrprxmickey[param->u.crypt.idx].skey,&(param->u.crypt.key[24]),8);
+ }
+ padapter->securitypriv.binstallGrpkey = _TRUE;
+ //DEBUG_ERR((" param->u.crypt.key_len=%d\n", param->u.crypt.key_len));
+ DBG_871X(" ~~~~set sta key:groupkey\n");
+
+ padapter->securitypriv.dot118021XGrpKeyid = param->u.crypt.idx;
+
+ rtw_set_key(padapter,&padapter->securitypriv,param->u.crypt.idx, 1,_TRUE);
+ }
+#ifdef CONFIG_IEEE80211W
+ else if(strcmp(param->u.crypt.alg, "BIP") == 0)
+ {
+ int no;
+ //printk("BIP key_len=%d , index=%d @@@@@@@@@@@@@@@@@@\n", param->u.crypt.key_len, param->u.crypt.idx);
+ //save the IGTK key, length 16 bytes
+ _rtw_memcpy(padapter->securitypriv.dot11wBIPKey[param->u.crypt.idx].skey, param->u.crypt.key,(param->u.crypt.key_len>16 ?16:param->u.crypt.key_len));
+ /*printk("IGTK key below:\n");
+ for(no=0;no<16;no++)
+ printk(" %02x ", padapter->securitypriv.dot11wBIPKey[param->u.crypt.idx].skey[no]);
+ printk("\n");*/
+ padapter->securitypriv.dot11wBIPKeyid = param->u.crypt.idx;
+ padapter->securitypriv.binstallBIPkey = _TRUE;
+ DBG_871X(" ~~~~set sta key:IGKT\n");
+ }
+#endif //CONFIG_IEEE80211W
+
#ifdef CONFIG_P2P
if(rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
{
@@ -967,8 +1023,8 @@ _func_enter_;
(padapter->securitypriv.ndisencryptstatus == Ndis802_11Encryption3Enabled))
{
pbcmc_sta->dot118021XPrivacy = padapter->securitypriv.dot11PrivacyAlgrthm;
- }
- }
+ }
+ }
}
else if(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) //adhoc mode
{
@@ -1378,7 +1434,7 @@ static int rtw_wx_set_mode(struct net_device *dev, struct iw_request_info *a,
case IW_MODE_MASTER:
networkType = Ndis802_11APMode;
DBG_871X("set_mode = IW_MODE_MASTER\n");
- //rtw_setopmode_cmd(padapter, networkType);
+ //rtw_setopmode_cmd(padapter, networkType,_TRUE);
break;
case IW_MODE_INFRA:
networkType = Ndis802_11Infrastructure;
@@ -1394,11 +1450,11 @@ static int rtw_wx_set_mode(struct net_device *dev, struct iw_request_info *a,
/*
if(Ndis802_11APMode == networkType)
{
- rtw_setopmode_cmd(padapter, networkType);
+ rtw_setopmode_cmd(padapter, networkType,_TRUE);
}
else
{
- rtw_setopmode_cmd(padapter, Ndis802_11AutoUnknown);
+ rtw_setopmode_cmd(padapter, Ndis802_11AutoUnknown,_TRUE);
}
*/
@@ -1409,7 +1465,7 @@ static int rtw_wx_set_mode(struct net_device *dev, struct iw_request_info *a,
}
- rtw_setopmode_cmd(padapter, networkType);
+ rtw_setopmode_cmd(padapter, networkType,_TRUE);
exit:
@@ -2009,7 +2065,7 @@ if (padapter->registrypriv.mp_mode == 1)
// under DHCP(Special packet)
curr_time = rtw_get_current_time();
- delta_time = curr_time - padapter->pwrctrlpriv.DelayLPSLastTimeStamp;
+ delta_time = curr_time - adapter_to_pwrctl(padapter)->DelayLPSLastTimeStamp;
delta_time = rtw_systime_to_ms(delta_time);
if (delta_time < 500) // 500ms
{
@@ -2236,7 +2292,7 @@ static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a,
}
#endif
*/
- if(padapter->pwrctrlpriv.brfoffbyhw && padapter->bDriverStopped)
+ if(adapter_to_pwrctl(padapter)->brfoffbyhw && padapter->bDriverStopped)
{
ret = -EINVAL;
goto exit;
@@ -2276,7 +2332,18 @@ static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a,
}
#endif // CONFIG_CONCURRENT_MODE
*/
+#if 1 // Wireless Extension use EAGAIN to try
+ wait_status = _FW_UNDER_SURVEY
+#ifndef CONFIG_ANDROID
+ | _FW_UNDER_LINKING
+#endif
+ ;
+ while (check_fwstate(pmlmepriv, wait_status) == _TRUE)
+ {
+ return -EAGAIN;
+ }
+#else
wait_status = _FW_UNDER_SURVEY
#ifndef CONFIG_ANDROID
|_FW_UNDER_LINKING
@@ -2300,6 +2367,7 @@ static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a,
if(cnt > wait_for_surveydone )
break;
}
+#endif
_enter_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
@@ -2320,9 +2388,7 @@ static int rtw_wx_get_scan(struct net_device *dev, struct iw_request_info *a,
//report network only if the current channel set contains the channel to which this network belongs
if(rtw_ch_set_search_ch(padapter->mlmeextpriv.channel_set, pnetwork->network.Configuration.DSConfig) >= 0
- #ifdef CONFIG_VALIDATE_SSID
&& _TRUE == rtw_validate_ssid(&(pnetwork->network.Ssid))
- #endif
)
{
ev=translate_scan(padapter, a, pnetwork, ev, stop);
@@ -2362,7 +2428,6 @@ static int rtw_wx_set_essid(struct net_device *dev,
_adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
_queue *queue = &pmlmepriv->scanned_queue;
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
_list *phead;
s8 status = _TRUE;
struct wlan_network *pnetwork = NULL;
@@ -2832,7 +2897,7 @@ static int rtw_wx_set_enc(struct net_device *dev,
struct iw_point *erq = &(wrqu->encoding);
_adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
DBG_871X("+rtw_wx_set_enc, flags=0x%x\n", erq->flags);
_rtw_memset(&wep, 0, sizeof(NDIS_802_11_WEP));
@@ -3280,6 +3345,11 @@ static int rtw_wx_set_enc_ext(struct net_device *dev,
case IW_ENCODE_ALG_CCMP:
alg_name = "CCMP";
break;
+#ifdef CONFIG_IEEE80211W
+ case IW_ENCODE_ALG_AES_CMAC:
+ alg_name = "BIP";
+ break;
+#endif //CONFIG_IEEE80211W
#ifdef CONFIG_WAPI_SUPPORT
#ifndef CONFIG_IOCTL_CFG80211
case IW_ENCODE_ALG_SM4:
@@ -3304,7 +3374,11 @@ static int rtw_wx_set_enc_ext(struct net_device *dev,
* just not checking GROUP key setting
*/
if ((pext->alg != IW_ENCODE_ALG_WEP) &&
- (pext->ext_flags & IW_ENCODE_EXT_GROUP_KEY))
+ ((pext->ext_flags & IW_ENCODE_EXT_GROUP_KEY)
+#ifdef CONFIG_IEEE80211W
+ || (pext->ext_flags & IW_ENCODE_ALG_AES_CMAC)
+#endif //CONFIG_IEEE80211W
+ ))
{
param->u.crypt.set_tx = 0;
}
@@ -3318,8 +3392,8 @@ static int rtw_wx_set_enc_ext(struct net_device *dev,
if(pext->alg == IW_ENCODE_ALG_SM4)
_rtw_memcpy(param->u.crypt.seq, pext->rx_seq, 16);
else
-#endif
-#endif
+#endif //CONFIG_IOCTL_CFG80211
+#endif //CONFIG_WAPI_SUPPORT
_rtw_memcpy(param->u.crypt.seq, pext->rx_seq, 8);
}
@@ -4175,7 +4249,6 @@ static int rtw_wext_p2p_enable(struct net_device *dev,
struct iw_point *pdata = &wrqu->data;
struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
enum P2P_ROLE init_role = P2P_ROLE_DISABLE;
if(*extra == '0' )
@@ -4277,19 +4350,9 @@ static int rtw_p2p_set_intent(struct net_device *dev,
struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
u8 intent = pwdinfo->intent;
- switch( wrqu->data.length )
- {
- case 1:
- {
- intent = extra[ 0 ] - '0';
- break;
- }
- case 2:
- {
- intent = str_2char2num( extra[ 0 ], extra[ 1 ]);
- break;
- }
- }
+ extra[ wrqu->data.length ] = 0x00;
+
+ intent = rtw_atoi( extra );
if ( intent <= 15 )
{
@@ -4303,7 +4366,7 @@ static int rtw_p2p_set_intent(struct net_device *dev,
DBG_871X( "[%s] intent = %d\n", __FUNCTION__, intent);
return ret;
-
+
}
static int rtw_p2p_set_listen_ch(struct net_device *dev,
@@ -4316,19 +4379,8 @@ static int rtw_p2p_set_listen_ch(struct net_device *dev,
struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
u8 listen_ch = pwdinfo->listen_channel; // Listen channel number
- switch( wrqu->data.length )
- {
- case 1:
- {
- listen_ch = extra[ 0 ] - '0';
- break;
- }
- case 2:
- {
- listen_ch = str_2char2num( extra[ 0 ], extra[ 1 ]);
- break;
- }
- }
+ extra[ wrqu->data.length ] = 0x00;
+ listen_ch = rtw_atoi( extra );
if ( ( listen_ch == 1 ) || ( listen_ch == 6 ) || ( listen_ch == 11 ) )
{
@@ -4358,20 +4410,9 @@ static int rtw_p2p_set_op_ch(struct net_device *dev,
struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
u8 op_ch = pwdinfo->operating_channel; // Operating channel number
- switch( wrqu->data.length )
- {
- case 1:
- {
- op_ch = extra[ 0 ] - '0';
- break;
- }
- case 2:
- {
- op_ch = str_2char2num( extra[ 0 ], extra[ 1 ]);
- break;
- }
- }
+ extra[ wrqu->data.length ] = 0x00;
+ op_ch = ( u8 ) rtw_atoi( extra );
if ( op_ch > 0 )
{
pwdinfo->operating_channel = op_ch;
@@ -4384,7 +4425,7 @@ static int rtw_p2p_set_op_ch(struct net_device *dev,
DBG_871X( "[%s] op_ch = %d\n", __FUNCTION__, pwdinfo->operating_channel );
return ret;
-
+
}
@@ -4436,8 +4477,8 @@ static int rtw_p2p_profilefound(struct net_device *dev,
pwdinfo->profileinfo[ pwdinfo->profileindex ].peermac[ jj ] = key_2char2num(extra[ kk ], extra[ kk+ 1 ]);
}
- pwdinfo->profileinfo[ pwdinfo->profileindex ].ssidlen = ( extra[18] - '0' ) * 10 + ( extra[ 19 ] - '0' );
- _rtw_memcpy( pwdinfo->profileinfo[ pwdinfo->profileindex ].ssid, &extra[ 20 ], pwdinfo->profileinfo[ pwdinfo->profileindex ].ssidlen );
+ //pwdinfo->profileinfo[ pwdinfo->profileindex ].ssidlen = ( extra[18] - '0' ) * 10 + ( extra[ 19 ] - '0' );
+ //_rtw_memcpy( pwdinfo->profileinfo[ pwdinfo->profileindex ].ssid, &extra[ 20 ], pwdinfo->profileinfo[ pwdinfo->profileindex ].ssidlen );
pwdinfo->profileindex++;
}
}
@@ -4709,7 +4750,7 @@ static int rtw_p2p_get_wps_configmethod(struct net_device *dev,
// The mac address is matched.
- if ((wpsie = rtw_get_wps_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &wpsie_len)))
+ if ( (wpsie=rtw_get_wps_ie_from_scan_queue( &pnetwork->network.IEs[0], pnetwork->network.IELength, NULL, &wpsie_len, pnetwork->network.Reserved[0])) )
{
rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_CONF_METHOD, (u8 *)&attr_content, &attr_contentlen);
if (attr_contentlen)
@@ -4845,7 +4886,7 @@ static int rtw_p2p_get_go_device_address(struct net_device *dev,
// Match the device address located in the P2P IE
// This is for the case that the P2P device address is not the same as the P2P interface address.
- if ((p2pie = rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)))
+ if ((p2pie = rtw_get_p2p_ie_from_scan_queue( &pnetwork->network.IEs[0], pnetwork->network.IELength, NULL, &p2pielen, pnetwork->network.Reserved[0])))
{
while (p2pie)
{
@@ -4938,7 +4979,7 @@ static int rtw_p2p_get_device_type(struct net_device *dev,
// The mac address is matched.
- if ((wpsie = rtw_get_wps_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &wpsie_len)))
+ if ( (wpsie=rtw_get_wps_ie_from_scan_queue( &pnetwork->network.IEs[0], pnetwork->network.IELength, NULL, &wpsie_len, pnetwork->network.Reserved[0])) )
{
rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_PRIMARY_DEV_TYPE, dev_type, &dev_type_len);
if (dev_type_len)
@@ -5016,7 +5057,7 @@ static int rtw_p2p_get_device_name(struct net_device *dev,
// The mac address is matched.
- if ((wpsie = rtw_get_wps_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &wpsie_len)))
+ if ( (wpsie=rtw_get_wps_ie_from_scan_queue( &pnetwork->network.IEs[0], pnetwork->network.IELength, NULL, &wpsie_len, pnetwork->network.Reserved[0])) )
{
rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_DEVICE_NAME, dev_name, &dev_len);
if (dev_len)
@@ -5089,7 +5130,7 @@ static int rtw_p2p_get_invitation_procedure(struct net_device *dev,
// Match the device address located in the P2P IE
// This is for the case that the P2P device address is not the same as the P2P interface address.
- if ((p2pie = rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)))
+ if ((p2pie = rtw_get_p2p_ie_from_scan_queue( &pnetwork->network.IEs[0], pnetwork->network.IELength, NULL, &p2pielen, pnetwork->network.Reserved[0])))
{
while (p2pie)
{
@@ -5351,7 +5392,7 @@ static int rtw_p2p_invite_req(struct net_device *dev,
// Match the device address located in the P2P IE
// This is for the case that the P2P device address is not the same as the P2P interface address.
- if ( (p2pie=rtw_get_p2p_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)) )
+ if ( (p2pie=rtw_get_p2p_ie_from_scan_queue( &pnetwork->network.IEs[0], pnetwork->network.IELength, NULL, &p2pielen, pnetwork->network.Reserved[0])))
{
// The P2P Device ID attribute is included in the Beacon frame.
// The P2P Device Info attribute is included in the probe response frame.
@@ -5389,7 +5430,7 @@ static int rtw_p2p_invite_req(struct net_device *dev,
u8 wfd_ie[ 128 ] = { 0x00 };
uint wfd_ielen = 0;
- if ( rtw_get_wfd_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, wfd_ie, &wfd_ielen ) )
+ if ( rtw_get_wfd_ie_from_scan_queue( &pnetwork->network.IEs[0], pnetwork->network.IELength, wfd_ie, &wfd_ielen, pnetwork->network.Reserved[0]) )
{
u8 wfd_devinfo[ 6 ] = { 0x00 };
uint wfd_devlen = 6;
@@ -5555,6 +5596,79 @@ exit:
}
+static int hexstr2bin(const char *hex, u8 *buf, size_t len)
+{
+ size_t i;
+ int a;
+ const char *ipos = hex;
+ u8 *opos = buf;
+
+ for (i = 0; i < len; i++) {
+ a = hex2byte_i(ipos);
+ if (a < 0)
+ return -1;
+ *opos++ = a;
+ ipos += 2;
+ }
+ return 0;
+}
+
+static int uuid_str2bin(const char *str, u8 *bin)
+{
+ const char *pos;
+ u8 *opos;
+
+ pos = str;
+ opos = bin;
+
+ if (hexstr2bin(pos, opos, 4))
+ return -1;
+ pos += 8;
+ opos += 4;
+
+ if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
+ return -1;
+ pos += 4;
+ opos += 2;
+
+ if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
+ return -1;
+ pos += 4;
+ opos += 2;
+
+ if (*pos++ != '-' || hexstr2bin(pos, opos, 2))
+ return -1;
+ pos += 4;
+ opos += 2;
+
+ if (*pos++ != '-' || hexstr2bin(pos, opos, 6))
+ return -1;
+
+ return 0;
+}
+
+static int rtw_p2p_set_wps_uuid(struct net_device *dev,
+ struct iw_request_info *info,
+ union iwreq_data *wrqu, char *extra)
+{
+
+ int ret = 0;
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+ struct wifidirect_info *pwdinfo = &(padapter->wdinfo);
+
+ DBG_871X("[%s] data = %s\n", __FUNCTION__, extra);
+
+ if ((36 == strlen(extra)) && (uuid_str2bin(extra, pwdinfo->uuid) == 0))
+ {
+ pwdinfo->external_uuid = 1;
+ } else {
+ pwdinfo->external_uuid = 0;
+ ret = -EINVAL;
+ }
+
+ return ret;
+
+}
#ifdef CONFIG_WFD
static int rtw_p2p_set_pc(struct net_device *dev,
struct iw_request_info *info,
@@ -5616,7 +5730,7 @@ static int rtw_p2p_set_pc(struct net_device *dev,
// Match the device address located in the P2P IE
// This is for the case that the P2P device address is not the same as the P2P interface address.
- if ( (p2pie=rtw_get_p2p_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)) )
+ if ( (p2pie=rtw_get_p2p_ie_from_scan_queue( &pnetwork->network.IEs[0], pnetwork->network.IELength, NULL, &p2pielen, pnetwork->network.Reserved[0])))
{
// The P2P Device ID attribute is included in the Beacon frame.
// The P2P Device Info attribute is included in the probe response frame.
@@ -5656,7 +5770,7 @@ static int rtw_p2p_set_pc(struct net_device *dev,
u8 wfd_ie[ 128 ] = { 0x00 };
uint wfd_ielen = 0;
- if ( rtw_get_wfd_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, wfd_ie, &wfd_ielen ) )
+ if ( rtw_get_wfd_ie_from_scan_queue( &pnetwork->network.IEs[0], pnetwork->network.IELength, wfd_ie, &wfd_ielen, pnetwork->network.Reserved[0]) )
{
u8 wfd_devinfo[ 6 ] = { 0x00 };
uint wfd_devlen = 6;
@@ -5769,6 +5883,53 @@ exit:
}
+static int rtw_p2p_set_wfd_enable(struct net_device *dev,
+ struct iw_request_info *info,
+ union iwreq_data *wrqu, char *extra)
+{
+// Commented by Kurt 20121206
+// This function is used to set wfd enabled
+
+ int ret = 0;
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+ struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
+
+ if(*extra == '0' )
+ pwdinfo->wfd_info->wfd_enable = _FALSE;
+ else if(*extra == '1')
+ pwdinfo->wfd_info->wfd_enable = _TRUE;
+
+ DBG_871X( "[%s] wfd_enable = %d\n", __FUNCTION__, pwdinfo->wfd_info->wfd_enable );
+
+ return ret;
+
+}
+
+static int rtw_p2p_set_driver_iface(struct net_device *dev,
+ struct iw_request_info *info,
+ union iwreq_data *wrqu, char *extra)
+{
+// Commented by Kurt 20121206
+// This function is used to set driver iface is WEXT or CFG80211
+ int ret = 0;
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+ struct wifidirect_info *pwdinfo= &(padapter->wdinfo);
+
+ if(*extra == '1' )
+ {
+ pwdinfo->driver_interface = DRIVER_WEXT;
+ DBG_871X( "[%s] driver_interface = WEXT\n", __FUNCTION__);
+ }
+ else if(*extra == '2')
+ {
+ pwdinfo->driver_interface = DRIVER_CFG80211;
+ DBG_871X( "[%s] driver_interface = CFG80211\n", __FUNCTION__);
+ }
+
+ return ret;
+
+}
+
// To set the WFD session available to enable or disable
static int rtw_p2p_set_sa(struct net_device *dev,
struct iw_request_info *info,
@@ -5831,11 +5992,13 @@ static int rtw_p2p_prov_disc(struct net_device *dev,
u8 *p2pie;
uint p2pielen = 0, attr_contentlen = 0;
_irqL irqL;
+ u8 ie_offset;
#ifdef CONFIG_CONCURRENT_MODE
_adapter *pbuddy_adapter = padapter->pbuddy_adapter;
struct mlme_priv *pbuddy_mlmepriv = &pbuddy_adapter->mlmepriv;
struct mlme_ext_priv *pbuddy_mlmeext = &pbuddy_adapter->mlmeextpriv;
#endif // CONFIG_CONCURRENT_MODE
+
#ifdef CONFIG_WFD
struct wifi_display_info* pwfd_info = pwdinfo->wfd_info;
#endif // CONFIG_WFD
@@ -5858,6 +6021,13 @@ static int rtw_p2p_prov_disc(struct net_device *dev,
}
else
{
+#ifdef CONFIG_INTEL_WIDI
+ if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE){
+ DBG_871X( "[%s] WiFi is under survey!\n", __FUNCTION__ );
+ return ret;
+ }
+#endif //CONFIG_INTEL_WIDI
+
// Reset the content of struct tx_provdisc_req_info excluded the wps_config_method_request.
_rtw_memset( pwdinfo->tx_prov_disc_info.peerDevAddr, 0x00, ETH_ALEN );
_rtw_memset( pwdinfo->tx_prov_disc_info.peerIFAddr, 0x00, ETH_ALEN );
@@ -5913,7 +6083,12 @@ static int rtw_p2p_prov_disc(struct net_device *dev,
// Match the device address located in the P2P IE
// This is for the case that the P2P device address is not the same as the P2P interface address.
- if ( (p2pie=rtw_get_p2p_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen)) )
+ if (pnetwork->network.Reserved[0] == 2) { // Probe Request
+ ie_offset = 0;
+ } else { // Beacon or Probe Respones
+ ie_offset = 12;
+ }
+ if ( (p2pie=rtw_get_p2p_ie_from_scan_queue( &pnetwork->network.IEs[0], pnetwork->network.IELength, NULL, &p2pielen, pnetwork->network.Reserved[0])))
{
while ( p2pie )
{
@@ -5940,10 +6115,23 @@ static int rtw_p2p_prov_disc(struct net_device *dev,
}
//Get the next P2P IE
- p2pie = rtw_get_p2p_ie(p2pie+p2pielen, pnetwork->network.IELength - 12 -(p2pie -&pnetwork->network.IEs[12] + p2pielen), NULL, &p2pielen);
+ p2pie = rtw_get_p2p_ie(p2pie+p2pielen, pnetwork->network.IELength - ie_offset -(p2pie -&pnetwork->network.IEs[ie_offset] + p2pielen), NULL, &p2pielen);
}
+ }
+#ifdef CONFIG_INTEL_WIDI
+ // Some Intel WiDi source may not provide P2P IE,
+ // so we could only compare mac addr by 802.11 Source Address
+ if( pmlmepriv->widi_state == INTEL_WIDI_STATE_WFD_CONNECTION
+ && uintPeerChannel == 0 )
+ {
+ if ( _rtw_memcmp( pnetwork->network.MacAddress, peerMAC, ETH_ALEN ) )
+ {
+ uintPeerChannel = pnetwork->network.Configuration.DSConfig;
+ break;
+ }
}
+#endif //CONFIG_INTEL_WIDI
plist = get_next(plist);
@@ -5951,47 +6139,46 @@ static int rtw_p2p_prov_disc(struct net_device *dev,
_exit_critical_bh(&(pmlmepriv->scanned_queue.lock), &irqL);
-#ifdef CONFIG_WFD
+ if ( uintPeerChannel )
{
- u8 wfd_ie[ 128 ] = { 0x00 };
- uint wfd_ielen = 0;
-
- if ( rtw_get_wfd_ie( &pnetwork->network.IEs[12], pnetwork->network.IELength - 12, wfd_ie, &wfd_ielen ) )
+#ifdef CONFIG_WFD
{
- u8 wfd_devinfo[ 6 ] = { 0x00 };
- uint wfd_devlen = 6;
-
- DBG_871X( "[%s] Found WFD IE!\n", __FUNCTION__ );
- if ( rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, wfd_devinfo, &wfd_devlen ) )
+ u8 wfd_ie[ 128 ] = { 0x00 };
+ uint wfd_ielen = 0;
+
+ if ( rtw_get_wfd_ie_from_scan_queue( &pnetwork->network.IEs[0], pnetwork->network.IELength, wfd_ie, &wfd_ielen, pnetwork->network.Reserved[0]) )
{
- u16 wfd_devinfo_field = 0;
-
- // Commented by Albert 20120319
- // The first two bytes are the WFD device information field of WFD device information subelement.
- // In big endian format.
- wfd_devinfo_field = RTW_GET_BE16(wfd_devinfo);
- if ( wfd_devinfo_field & WFD_DEVINFO_SESSION_AVAIL )
- {
- pwfd_info->peer_session_avail = _TRUE;
- }
- else
+ u8 wfd_devinfo[ 6 ] = { 0x00 };
+ uint wfd_devlen = 6;
+
+ DBG_871X( "[%s] Found WFD IE!\n", __FUNCTION__ );
+ if ( rtw_get_wfd_attr_content( wfd_ie, wfd_ielen, WFD_ATTR_DEVICE_INFO, wfd_devinfo, &wfd_devlen ) )
{
- pwfd_info->peer_session_avail = _FALSE;
+ u16 wfd_devinfo_field = 0;
+
+ // Commented by Albert 20120319
+ // The first two bytes are the WFD device information field of WFD device information subelement.
+ // In big endian format.
+ wfd_devinfo_field = RTW_GET_BE16(wfd_devinfo);
+ if ( wfd_devinfo_field & WFD_DEVINFO_SESSION_AVAIL )
+ {
+ pwfd_info->peer_session_avail = _TRUE;
+ }
+ else
+ {
+ pwfd_info->peer_session_avail = _FALSE;
+ }
}
}
+
+ if ( _FALSE == pwfd_info->peer_session_avail )
+ {
+ DBG_871X( "[%s] WFD Session not avaiable!\n", __FUNCTION__ );
+ goto exit;
+ }
}
-
- if ( _FALSE == pwfd_info->peer_session_avail )
- {
- DBG_871X( "[%s] WFD Session not avaiable!\n", __FUNCTION__ );
- goto exit;
- }
- }
#endif // CONFIG_WFD
- if ( uintPeerChannel )
- {
-
DBG_871X( "[%s] peer channel: %d!\n", __FUNCTION__, uintPeerChannel );
#ifdef CONFIG_CONCURRENT_MODE
if ( check_fwstate( pbuddy_mlmepriv, _FW_LINKED ) )
@@ -6051,6 +6238,14 @@ static int rtw_p2p_prov_disc(struct net_device *dev,
else
{
DBG_871X( "[%s] NOT Found in the Scanning Queue!\n", __FUNCTION__ );
+#ifdef CONFIG_INTEL_WIDI
+ rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);
+ rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
+ rtw_free_network_queue(padapter, _TRUE);
+ _enter_critical_bh(&pmlmepriv->lock, &irqL);
+ rtw_sitesurvey_cmd(padapter, NULL, 0, NULL, 0);
+ _exit_critical_bh(&pmlmepriv->lock, &irqL);
+#endif //CONFIG_INTEL_WIDI
}
exit:
@@ -6190,6 +6385,11 @@ static int rtw_p2p_set(struct net_device *dev,
wrqu->data.length -= 11;
rtw_p2p_set_persistent( dev, info, wrqu, &extra[11] );
}
+ else if ( _rtw_memcmp ( extra, "uuid=", 5) )
+ {
+ wrqu->data.length -= 5;
+ ret = rtw_p2p_set_wps_uuid( dev, info, wrqu, &extra[5] );
+ }
#ifdef CONFIG_WFD
else if ( _rtw_memcmp( extra, "sa=", 3 ) )
{
@@ -6214,8 +6414,17 @@ static int rtw_p2p_set(struct net_device *dev,
wrqu->data.length -= 10;
rtw_p2p_set_scan_result_type( dev, info, wrqu, &extra[10] );
}
+ else if ( _rtw_memcmp( extra, "wfd_enable=", 11 ) )
+ {
+ wrqu->data.length -= 11;
+ rtw_p2p_set_wfd_enable( dev, info, wrqu, &extra[11] );
+ }
+ else if ( _rtw_memcmp( extra, "driver_iface=", 13 ) )
+ {
+ wrqu->data.length -= 13;
+ rtw_p2p_set_driver_iface( dev, info, wrqu, &extra[13] );
+ }
#endif //CONFIG_WFD
-
#endif //CONFIG_P2P
return ret;
@@ -6267,7 +6476,7 @@ static int rtw_p2p_get(struct net_device *dev,
{
rtw_p2p_get_groupid( dev, info, wrqu, extra);
}
- else if ( _rtw_memcmp( wrqu->data.pointer, "peer_deva_inv", 9 ) )
+ else if ( _rtw_memcmp( wrqu->data.pointer, "inv_peer_deva", 13 ) )
{
// Get the P2P device address when receiving the P2P Invitation request frame.
rtw_p2p_get_peer_devaddr_by_invitation( dev, info, wrqu, extra);
@@ -6347,7 +6556,7 @@ static int rtw_p2p_get2(struct net_device *dev,
bad:
if (buffer)
{
- _rtw_mfree(buffer, length);
+ rtw_mfree(buffer, length);
}
#endif //CONFIG_P2P
@@ -6429,7 +6638,7 @@ static int rtw_rereg_nd_name(struct net_device *dev,
if(_rtw_memcmp(rereg_priv->old_ifname, "disable%d", 9) == _TRUE) {
padapter->ledpriv.bRegUseLed= rereg_priv->old_bRegUseLed;
rtw_hal_sw_led_init(padapter);
- rtw_ips_mode_req(&padapter->pwrctrlpriv, rereg_priv->old_ips_mode);
+ /* rtw_ips_mode_req(&padapter->pwrctrlpriv, rereg_priv->old_ips_mode); */
}
strncpy(rereg_priv->old_ifname, new_ifname, IFNAMSIZ);
@@ -6446,10 +6655,12 @@ static int rtw_rereg_nd_name(struct net_device *dev,
rereg_priv->old_bRegUseLed = padapter->ledpriv.bRegUseLed;
padapter->ledpriv.bRegUseLed= _FALSE;
rtw_hal_sw_led_deinit(padapter);
-
+
+ /*
// the interface is being "disabled", we can do deeper IPS
rereg_priv->old_ips_mode = rtw_get_ips_mode_req(&padapter->pwrctrlpriv);
rtw_ips_mode_req(&padapter->pwrctrlpriv, IPS_NORMAL);
+ */
}
exit:
return ret;
@@ -6998,8 +7209,58 @@ static int rtw_dbg_port(struct net_device *dev,
}
break;
+ case 0x0a:
+ {
+ #ifdef DBG_TRX_STA_PKTS
+ int i, j;
+ _list *plist, *phead;
+
+ _enter_critical_bh(&pstapriv->sta_hash_lock, &irqL);
+
+ for(i=0; i< NUM_STA; i++)
+ {
+ phead = &(pstapriv->sta_hash[i]);
+ plist = get_next(phead);
+
+ while ((rtw_end_of_queue_search(phead, plist)) == _FALSE)
+ {
+ psta = LIST_CONTAINOR(plist, struct sta_info, hash_list);
- case 0x0c://dump rx/tx packet
+ plist = get_next(plist);
+ if(arg == 0xff){
+ psta->rx_bk_cnt =0;
+ psta->rx_be_cnt =0;
+ psta->rx_vo_cnt =0;
+ psta->rx_vi_cnt =0;
+ psta->tx_bk_cnt =0;
+ psta->tx_be_cnt =0;
+ psta->tx_vo_cnt =0;
+ psta->tx_vi_cnt =0;
+ }
+ else{
+ if(extra_arg == psta->mac_id)
+ {
+ DBG_871X("=== sta's macaddr:" MAC_FMT "===\n", MAC_ARG(psta->hwaddr));
+ DBG_871X("rx_bk_cnt =%d\n", psta->rx_bk_cnt);
+ DBG_871X("rx_be_cnt =%d\n", psta->rx_be_cnt);
+ DBG_871X("rx_vo_cnt =%d\n", psta->rx_vo_cnt);
+ DBG_871X("rx_vi_cnt =%d\n\n", psta->rx_vi_cnt);
+
+ DBG_871X("tx_bk_cnt =%d\n", psta->tx_bk_cnt);
+ DBG_871X("tx_be_cnt =%d\n", psta->tx_be_cnt);
+ DBG_871X("tx_vo_cnt =%d\n", psta->tx_vo_cnt);
+ DBG_871X("tx_vi_cnt =%dn\n", psta->tx_vi_cnt);
+ }
+ }
+
+ }
+ }
+ _exit_critical_bh(&pstapriv->sta_hash_lock, &irqL);
+ #endif
+ }
+ break;
+
+ case 0x0c://dump rx/tx packet
{
if(arg == 0){
DBG_871X("dump rx packet (%d)\n",extra_arg);
@@ -7039,7 +7300,7 @@ static int rtw_dbg_port(struct net_device *dev,
break;
case 0x15:
{
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
DBG_871X("==>silent resete cnts:%d\n",pwrpriv->ips_enter_cnts);
}
break;
@@ -7050,10 +7311,10 @@ static int rtw_dbg_port(struct net_device *dev,
DBG_871X("rtw driver version=%s\n", DRIVERVERSION);
break;
case 0x11:
- {
+ {
DBG_871X("turn %s Rx RSSI display function\n",(extra_arg==1)?"on":"off");
- padapter->bRxRSSIDisplay = extra_arg ;
- rtw_hal_set_def_var(padapter, HW_DEF_FA_CNT_DUMP,&extra_arg);
+ padapter->bRxRSSIDisplay = extra_arg;
+ rtw_hal_set_def_var(padapter, HW_DEF_FA_CNT_DUMP, &(padapter->bRxRSSIDisplay));
}
break;
case 0x12: //set rx_stbc
@@ -7095,29 +7356,11 @@ static int rtw_dbg_port(struct net_device *dev,
case 0x16:
{
if(arg == 0xff){
- printk("ODM_COMP_DIG\t\tBIT0\n");
- printk("ODM_COMP_RA_MASK\t\tBIT1\n");
- printk("ODM_COMP_DYNAMIC_TXPWR\tBIT2\n");
- printk("ODM_COMP_FA_CNT\t\tBIT3\n");
- printk("ODM_COMP_RSSI_MONITOR\tBIT4\n");
- printk("ODM_COMP_CCK_PD\t\tBIT5\n");
- printk("ODM_COMP_ANT_DIV\t\tBIT6\n");
- printk("ODM_COMP_PWR_SAVE\t\tBIT7\n");
- printk("ODM_COMP_PWR_TRAIN\tBIT8\n");
- printk("ODM_COMP_RATE_ADAPTIVE\tBIT9\n");
- printk("ODM_COMP_PATH_DIV\t\tBIT10\n");
- printk("ODM_COMP_PSD \tBIT11\n");
- printk("ODM_COMP_DYNAMIC_PRICCA\tBIT12\n");
- printk("ODM_COMP_RXHP\t\tBIT13\n");
- printk("ODM_COMP_EDCA_TURBO\tBIT16\n");
- printk("ODM_COMP_EARLY_MODE\tBIT17\n");
- printk("ODM_COMP_TX_PWR_TRACK\tBIT24\n");
- printk("ODM_COMP_RX_GAIN_TRACK\tBIT25\n");
- printk("ODM_COMP_CALIBRATION\tBIT26\n");
- rtw_hal_get_def_var(padapter, HW_DEF_ODM_DBG_FLAG,&extra_arg);
+ rtw_odm_dbg_comp_msg(padapter);
}
else{
- rtw_hal_set_def_var(padapter, HW_DEF_ODM_DBG_FLAG,&extra_arg);
+ u64 dbg_comp = (u64)extra_arg;
+ rtw_odm_dbg_comp_set(padapter, dbg_comp);
}
}
break;
@@ -7527,7 +7770,7 @@ static int set_group_key(_adapter *padapter, u8 *key, u8 alg, int keyid)
psetkeyparm->keyid=(u8)keyid;
if (is_wep_enc(alg))
- padapter->mlmepriv.key_mask |= BIT(psetkeyparm->keyid);
+ padapter->securitypriv.key_mask |= BIT(psetkeyparm->keyid);
psetkeyparm->algorithm = alg;
psetkeyparm->set_tx = 1;
@@ -8814,6 +9057,101 @@ FREE_EXT:
}
+#ifdef CONFIG_WOWLAN
+static int rtw_wowlan_ctrl(struct net_device *dev,
+ struct iw_request_info *info,
+ union iwreq_data *wrqu, char *extra)
+{
+ _adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
+ struct wowlan_ioctl_param poidparam;
+ struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(padapter);
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct sta_info *psta = NULL;
+ int ret = 0;
+ u32 start_time = rtw_get_current_time();
+ poidparam.subcode = 0;
+
+ DBG_871X("+rtw_wowlan_ctrl: %s\n", extra);
+
+ if(pwrctrlpriv->bSupportRemoteWakeup==_FALSE){
+ ret = -EPERM;
+ DBG_871X("+rtw_wowlan_ctrl: Device didn't support the remote wakeup!!\n");
+ goto _rtw_wowlan_ctrl_exit_free;
+ }
+
+ if (!check_fwstate(pmlmepriv, _FW_LINKED) &&
+ check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
+ DBG_871X("[%s] WARNING: Please Connect With AP First!!\n", __func__);
+ goto _rtw_wowlan_ctrl_exit_free;
+ }
+
+ if (_rtw_memcmp( extra, "enable", 6 )) {
+
+ while (pwrctrlpriv->bips_processing == _TRUE)
+ rtw_msleep_os(1);
+
+ rtw_cancel_all_timer(padapter);
+
+ padapter->bDriverStopped = _TRUE; //for stop thread
+ rtw_stop_drv_threads(padapter);
+ padapter->bDriverStopped = _FALSE; //for 32k command
+
+#ifdef CONFIG_LPS
+ rtw_set_ps_mode(padapter, PS_MODE_ACTIVE, 0, 0);
+#endif
+ rtw_hal_disable_interrupt(padapter); // It need wait for leaving 32K.
+
+ // 2.1 clean interupt
+ if (padapter->HalFunc.clear_interrupt)
+ padapter->HalFunc.clear_interrupt(padapter);
+
+ poidparam.subcode = WOWLAN_ENABLE;
+
+ rtw_hal_set_hwreg(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
+ } else if (_rtw_memcmp( extra, "disable", 6 )) {
+#ifdef CONFIG_LPS
+ rtw_set_ps_mode(padapter, PS_MODE_ACTIVE, 0, 0);
+#endif //CONFIG_LPS
+ pwrctrlpriv->bFwCurrentInPSMode = _FALSE;
+
+ rtw_hal_disable_interrupt(padapter);
+
+ if (padapter->HalFunc.clear_interrupt)
+ padapter->HalFunc.clear_interrupt(padapter);
+
+ poidparam.subcode = WOWLAN_DISABLE;
+
+ rtw_hal_set_hwreg(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
+
+ psta = rtw_get_stainfo(&padapter->stapriv, get_bssid(&padapter->mlmepriv));
+ if (psta) {
+ set_sta_rate(padapter, psta);
+ }
+
+ padapter->bDriverStopped = _FALSE;
+ DBG_871X("%s: wowmode resuming, DriverStopped:%d\n", __func__, padapter->bDriverStopped);
+ rtw_start_drv_threads(padapter);
+
+ rtw_hal_enable_interrupt(padapter);
+
+ _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
+ pwrctrlpriv->bips_processing = _FALSE;
+ rtw_set_pwr_state_check_timer(pwrctrlpriv);
+
+ } else {
+ DBG_871X("[%s] Invalid Parameter.\n", __func__);
+ goto _rtw_wowlan_ctrl_exit_free;
+ }
+ //mutex_lock(&ioctl_mutex);
+_rtw_wowlan_ctrl_exit_free:
+ DBG_871X("-rtw_wowlan_ctrl( subcode = %d)\n", poidparam.subcode);
+ DBG_871X_LEVEL(_drv_always_, "%s in %d ms\n", __func__,
+ rtw_get_passing_time_ms(start_time));
+_rtw_wowlan_ctrl_exit:
+ return ret;
+}
+#endif //CONFIG_WOWLAN
+
static int rtw_pm_set(struct net_device *dev,
struct iw_request_info *info,
union iwreq_data *wrqu, char *extra)
@@ -8867,17 +9205,17 @@ static int rtw_mp_efuse_get(struct net_device *dev,
#endif
wrqu = (struct iw_point*)wdata;
- pwrctrlpriv = &padapter->pwrctrlpriv;
+ pwrctrlpriv = adapter_to_pwrctl(padapter);
pEfuseHal = &pHalData->EfuseHal;
err = 0;
- data = _rtw_zmalloc(EFUSE_BT_MAX_MAP_LEN);
+ data = rtw_zmalloc(EFUSE_BT_MAX_MAP_LEN);
if (data == NULL)
{
err = -ENOMEM;
goto exit;
}
- rawdata = _rtw_zmalloc(EFUSE_BT_MAX_MAP_LEN);
+ rawdata = rtw_zmalloc(EFUSE_BT_MAX_MAP_LEN);
if (rawdata == NULL)
{
err = -ENOMEM;
@@ -9070,6 +9408,15 @@ static int rtw_mp_efuse_get(struct net_device *dev,
addr = EEPROM_MAC_ADDR_8723AU;
#endif
#endif // CONFIG_RTL8723A
+
+ #ifdef CONFIG_RTL8188E
+ #ifdef CONFIG_SDIO_HCI
+ addr = EEPROM_MAC_ADDR_88ES;
+ #else
+ addr = EEPROM_MAC_ADDR_88EU;
+ #endif
+ #endif
+
cnts = 6;
EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
@@ -9388,9 +9735,9 @@ static int rtw_mp_efuse_get(struct net_device *dev,
exit:
if (data)
- _rtw_mfree(data, EFUSE_BT_MAX_MAP_LEN);
+ rtw_mfree(data, EFUSE_BT_MAX_MAP_LEN);
if (rawdata)
- _rtw_mfree(rawdata, EFUSE_BT_MAX_MAP_LEN);
+ rtw_mfree(rawdata, EFUSE_BT_MAX_MAP_LEN);
if (!err)
wrqu->length = strlen(extra);
@@ -9429,29 +9776,29 @@ static int rtw_mp_efuse_set(struct net_device *dev,
wrqu = (struct iw_point*)wdata;
padapter = rtw_netdev_priv(dev);
- pwrctrlpriv = &padapter->pwrctrlpriv;
+ pwrctrlpriv = adapter_to_pwrctl(padapter);
pHalData = GET_HAL_DATA(padapter);
pEfuseHal = &pHalData->EfuseHal;
err = 0;
- setdata = _rtw_zmalloc(1024);
+ setdata = rtw_zmalloc(1024);
if (setdata == NULL)
{
err = -ENOMEM;
goto exit;
}
- ShadowMapBT = _rtw_malloc(EFUSE_BT_MAX_MAP_LEN);
+ ShadowMapBT = rtw_malloc(EFUSE_BT_MAX_MAP_LEN);
if (ShadowMapBT == NULL)
{
err = -ENOMEM;
goto exit;
}
- ShadowMapWiFi = _rtw_malloc(EFUSE_MAP_SIZE);
+ ShadowMapWiFi = rtw_malloc(EFUSE_MAP_SIZE);
if (ShadowMapWiFi == NULL)
{
err = -ENOMEM;
goto exit;
}
- setrawdata = _rtw_malloc(EFUSE_MAX_SIZE);
+ setrawdata = rtw_malloc(EFUSE_MAX_SIZE);
if (setrawdata == NULL)
{
err = -ENOMEM;
@@ -9890,13 +10237,13 @@ static int rtw_mp_efuse_set(struct net_device *dev,
exit:
if (setdata)
- _rtw_mfree(setdata, 1024);
+ rtw_mfree(setdata, 1024);
if (ShadowMapBT)
- _rtw_mfree(ShadowMapBT, EFUSE_BT_MAX_MAP_LEN);
+ rtw_mfree(ShadowMapBT, EFUSE_BT_MAX_MAP_LEN);
if (ShadowMapWiFi)
- _rtw_mfree(ShadowMapWiFi, EFUSE_MAP_SIZE);
+ rtw_mfree(ShadowMapWiFi, EFUSE_MAP_SIZE);
if (setrawdata)
- _rtw_mfree(setrawdata, EFUSE_MAX_SIZE);
+ rtw_mfree(setrawdata, EFUSE_MAX_SIZE);
#ifdef CONFIG_IPS
rtw_pm_set_ips(padapter, ips_mode);
@@ -9928,9 +10275,15 @@ static int rtw_mp_write_reg(struct net_device *dev,
u32 addr, data;
int ret;
PADAPTER padapter = rtw_netdev_priv(dev);
+ char input[wrqu->length];
+
+ if (copy_from_user(input, wrqu->pointer, wrqu->length))
+ return -EFAULT;
+
+ _rtw_memset(extra, 0, wrqu->length);
+
+ pch = input;
-
- pch = extra;
pnext = strpbrk(pch, " ,.-");
if (pnext == NULL) return -EINVAL;
*pnext = 0;
@@ -10141,9 +10494,13 @@ static int rtw_mp_read_reg(struct net_device *dev,
u32 path, addr, data;
int ret;
PADAPTER padapter = rtw_netdev_priv(dev);
+ char input[wrqu->length];
+
+ if (copy_from_user(input, wrqu->pointer, wrqu->length))
+ return -EFAULT;
- ret = sscanf(extra, "%d,%x,%x", &path, &addr, &data);
+ ret = sscanf(input, "%d,%x,%x", &path, &addr, &data);
if (ret < 3) return -EINVAL;
if (path >= MAX_RF_PATH_NUMS) return -EINVAL;
@@ -10234,20 +10591,40 @@ static int rtw_mp_start(struct net_device *dev,
{
u8 val8;
PADAPTER padapter = rtw_netdev_priv(dev);
-
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct dm_priv *pdmpriv = &pHalData->dmpriv;
+ struct hal_ops *pHalFunc = &padapter->HalFunc;
+#ifdef CONFIG_BT_COEXIST
+ PBT30Info pBTInfo;
+ PBT_MGNT pBtMgnt;
+
+ pBTInfo = GET_BT_INFO(padapter);
+ pBtMgnt = &pBTInfo->BtMgnt;
+#endif
if(padapter->registrypriv.mp_mode ==0)
{
#ifdef CONFIG_RTL8723A
DBG_871X("_rtw_mp_xmit_priv for Download BT patch FW\n");
_rtw_mp_xmit_priv(&padapter->xmitpriv);
#endif
-
- padapter->registrypriv.mp_mode =1;
-
+
+ padapter->registrypriv.mp_mode =1;
rtw_pm_set_ips(padapter,IPS_NONE);
LeaveAllPowerSaveMode(padapter);
-
MPT_InitializeAdapter(padapter, 1);
+#ifdef CONFIG_BT_COEXIST
+ pHalData->bt_coexist.BluetoothCoexist = 0;
+ pBtMgnt->ExtConfig.bManualControl = _TRUE;
+ pdmpriv->DMFlag &= (~DYNAMIC_FUNC_BT);
+ BT_HaltProcess(padapter);
+ DBG_871X("Set disable BT_COEXIST\n");
+ //padapter->registrypriv.mp_mode =0;
+ //pHalFunc->hal_init(padapter);
+ //padapter->registrypriv.mp_mode =1;
+ // Force to switch Antenna to WiFi
+ rtw_write16(padapter, 0x870, 0x300);
+ rtw_write16(padapter, 0x860, 0x110);
+#endif
}
if (padapter->registrypriv.mp_mode == 0)
@@ -10257,6 +10634,7 @@ static int rtw_mp_start(struct net_device *dev,
if (mp_start_test(padapter) == _FAIL)
return -EPERM;
padapter->mppriv.mode = MP_ON;
+ MPT_PwrCtlDM(padapter,0);
}
return 0;
@@ -10370,24 +10748,30 @@ static int rtw_mp_txpower(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *wrqu, char *extra)
{
- u32 idx_a=0,idx_b=0;
+ u32 idx_a=0,idx_b=0,MsetPower=1;
u8 input[wrqu->length];
PADAPTER padapter = rtw_netdev_priv(dev);
-
if (copy_from_user(input, wrqu->pointer, wrqu->length))
return -EFAULT;
+ MsetPower = strncmp(input, "off", 3);
sscanf(input,"patha=%d,pathb=%d",&idx_a,&idx_b);
//DBG_871X("%s: tx_pwr_idx_a=%x b=%x\n", __func__, idx_a, idx_b);
-
+ if(MsetPower==0)
+ {
+ padapter->mppriv.bSetTxPower = 0;
+ sprintf( extra, "MP Set power off");
+ }
+ else
+ {
sprintf( extra, "Set power level path_A:%d path_B:%d", idx_a , idx_b );
padapter->mppriv.txpoweridx = (u8)idx_a;
padapter->mppriv.txpoweridx_b = (u8)idx_b;
padapter->mppriv.bSetTxPower = 1;
Hal_SetAntennaPathPower(padapter);
-
+ }
wrqu->length = strlen(extra) + 1;
return 0;
}
@@ -10622,6 +11006,10 @@ static int rtw_mp_disable_bt_coexist(struct net_device *dev,
union iwreq_data *wrqu, char *extra)
{
PADAPTER padapter = (PADAPTER)rtw_netdev_priv(dev);
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ struct dm_priv *pdmpriv = &pHalData->dmpriv;
+ struct hal_ops *pHalFunc = &padapter->HalFunc;
+
u8 input[wrqu->data.length];
u32 bt_coexist;
@@ -10641,8 +11029,17 @@ static int rtw_mp_disable_bt_coexist(struct net_device *dev,
{
RT_TRACE(_module_mp_, _drv_info_,
("Set OID_RT_SET_DISABLE_BT_COEXIST: disable BT_COEXIST\n"));
-#ifdef CONFIG_BT_COEXIST
+ DBG_871X("Set OID_RT_SET_DISABLE_BT_COEXIST: disable BT_COEXIST\n");
+#ifdef CONFIG_BT_COEXIST
+ pHalData->bt_coexist.BluetoothCoexist = 0;
pBtMgnt->ExtConfig.bManualControl = _TRUE;
+ pdmpriv->DMFlag &= (~DYNAMIC_FUNC_BT);
+ BT_HaltProcess(padapter);
+#if 1
+ padapter->registrypriv.mp_mode=0;
+ pHalFunc->hal_init(padapter);
+ padapter->registrypriv.mp_mode=1;
+#endif
// Force to switch Antenna to WiFi
rtw_write16(padapter, 0x870, 0x300);
rtw_write16(padapter, 0x860, 0x110);
@@ -10668,9 +11065,10 @@ static int rtw_mp_arx(struct net_device *dev,
struct iw_point *wrqu, char *extra)
{
u8 bStartRx=0,bStopRx=0,bQueryPhy=0,bQueryMac=0;
- u32 cckok=0,cckcrc=0,ofdmok=0,ofdmcrc=0,htok=0,htcrc=0,OFDM_FA=0,CCK_FA=0,DropPacket=0;
+ u32 cckok=0,cckcrc=0,ofdmok=0,ofdmcrc=0,htok=0,htcrc=0,OFDM_FA=0,CCK_FA=0,DropPacket=0,vht_ok=0,vht_err=0;
u8 input[wrqu->length];
-
+ u32 mac_cck_ok=0, mac_ofdm_ok=0, mac_ht_ok=0, mac_vht_ok=0;
+ u32 mac_cck_err=0, mac_ofdm_err=0, mac_ht_err=0, mac_vht_err=0;
PADAPTER padapter = rtw_netdev_priv(dev);
@@ -10696,62 +11094,63 @@ static int rtw_mp_arx(struct net_device *dev,
}
else if(bQueryPhy)
{
- /*
- OFDM FA
- RegCF0[15:0]
- RegCF2[31:16]
- RegDA0[31:16]
- RegDA4[15:0]
- RegDA4[31:16]
- RegDA8[15:0]
- CCK FA
- (RegA5B<<8) | RegA5C
- */
- cckok = read_bbreg(padapter, 0xf88, 0xffffffff );
- cckcrc = read_bbreg(padapter, 0xf84, 0xffffffff );
- ofdmok = read_bbreg(padapter, 0xf94, 0x0000FFFF );
- ofdmcrc = read_bbreg(padapter, 0xf94 , 0xFFFF0000 );
- htok = read_bbreg(padapter, 0xf90, 0x0000FFFF );
- htcrc = read_bbreg(padapter,0xf90, 0xFFFF0000 );
-
- OFDM_FA=+read_bbreg(padapter, 0xcf0, 0x0000FFFF );
- OFDM_FA=+read_bbreg(padapter, 0xcf2, 0xFFFF0000 );
- OFDM_FA=+read_bbreg(padapter, 0xda0, 0xFFFF0000 );
- OFDM_FA=+read_bbreg(padapter, 0xda4, 0x0000FFFF );
- OFDM_FA=+read_bbreg(padapter, 0xda4, 0xFFFF0000 );
- OFDM_FA=+read_bbreg(padapter, 0xda8, 0x0000FFFF );
+
+ //if (IS_HARDWARE_TYPE_JAGUAR(padapter))
+ #ifdef CONFIG_RTL8188A
+ {
+ cckok = PHY_QueryBBReg(padapter, 0xF04, 0x3FFF); // [13:0]
+ ofdmok = PHY_QueryBBReg(padapter, 0xF14, 0x3FFF); // [13:0]
+ htok = PHY_QueryBBReg(padapter, 0xF10, 0x3FFF); // [13:0]
+ vht_ok = PHY_QueryBBReg(padapter, 0xF0C, 0x3FFF); // [13:0]
+
+ cckcrc = PHY_QueryBBReg(padapter, 0xF04, 0x3FFF0000); // [29:16]
+ ofdmcrc = PHY_QueryBBReg(padapter, 0xF14, 0x3FFF0000); // [29:16]
+ htcrc = PHY_QueryBBReg(padapter, 0xF10, 0x3FFF0000); // [29:16]
+ vht_err = PHY_QueryBBReg(padapter, 0xF0C, 0x3FFF0000); // [29:16]
+ }
+ #else
+ {
+ cckok = PHY_QueryBBReg(padapter, 0xF88, bMaskDWord);
+ ofdmok = PHY_QueryBBReg(padapter, 0xF94, bMaskLWord);
+ htok = PHY_QueryBBReg(padapter, 0xF90, bMaskLWord);
+ vht_ok = 0;
+
+ cckcrc = PHY_QueryBBReg(padapter, 0xF84, bMaskDWord);
+ ofdmcrc = PHY_QueryBBReg(padapter, 0xF94, bMaskHWord);
+ htcrc = PHY_QueryBBReg(padapter, 0xF90, bMaskHWord);
+ vht_err = 0;
+ }
+ #endif
CCK_FA=(rtw_read8(padapter, 0xa5b )<<8 ) | (rtw_read8(padapter, 0xa5c));
-
- sprintf( extra, "Phy Received packet OK:%d CRC error:%d FA Counter: %d",cckok+ofdmok+htok,cckcrc+ofdmcrc+htcrc,OFDM_FA+CCK_FA);
+ sprintf( extra, "Phy Received packet OK:%d CRC error:%d FA Counter: %d",cckok+ofdmok+htok+vht_ok,cckcrc+ofdmcrc+htcrc+vht_err,OFDM_FA+CCK_FA);
}
else if(bQueryMac)
{
- //OFDM
- rtw_write32(padapter, 0x664, (rtw_read32(padapter, 0x0664)& 0x0FFFFFFF)| Mac_OFDM_OK);
- ofdmok = rtw_read32(padapter, 0x664)& 0x0000FFFF; //[15:0] R/W 0 BIT_RPT_COUNTER
- rtw_write32(padapter, 0x664, (rtw_read32(padapter, 0x0664)& 0x0FFFFFFF)| Mac_OFDM_Fail);
- ofdmcrc = rtw_read32(padapter, 0x664)& 0x0000FFFF;
- rtw_write32(padapter, 0x664, (rtw_read32(padapter, 0x0664)& 0x0FFFFFFF)| Mac_OFDM_FasleAlarm);
- OFDM_FA = rtw_read32(padapter, 0x664)& 0x0000FFFF;
- //CCK
- rtw_write32(padapter, 0x664, (rtw_read32(padapter, 0x0664)& 0x0FFFFFFF)|Mac_CCK_OK);
- cckok = rtw_read32(padapter, 0x664)& 0x0000FFFF;
- rtw_write32(padapter, 0x664, (rtw_read32(padapter, 0x0664)& 0x0FFFFFFF)| Mac_CCK_Fail);
- cckcrc = rtw_read32(padapter, 0x664)& 0x0000FFFF;
- rtw_write32(padapter, 0x664, (rtw_read32(padapter, 0x0664)& 0x0FFFFFFF)| Mac_CCK_FasleAlarm);
- CCK_FA = rtw_read32(padapter, 0x664)& 0x0000FFFF;
- //HT
- rtw_write32(padapter, 0x664, (rtw_read32(padapter, 0x0664)& 0x0FFFFFFF)| Mac_HT_OK);
- htok = rtw_read32(padapter, 0x664)& 0x0000FFFF;
- rtw_write32(padapter, 0x664, (rtw_read32(padapter, 0x0664)& 0x0FFFFFFF)| Mac_HT_Fail);
- htcrc = rtw_read32(padapter, 0x664)& 0x0000FFFF;
- rtw_write32(padapter, 0x664, (rtw_read32(padapter, 0x0664)& 0x0FFFFFFF)|Mac_HT_FasleAlarm);
- OFDM_FA += rtw_read32(padapter, 0x664)& 0x0000FFFF;
- //Mac_DropPacket
+
+ // for 8723A
+ {
+ PHY_SetMacReg(padapter, 0x664, BIT28|BIT29|BIT30|BIT31, 0x3);
+ mac_cck_ok = PHY_QueryMacReg(padapter, 0x664, bMaskLWord); // [15:0]
+ PHY_SetMacReg(padapter, 0x664, BIT28|BIT29|BIT30|BIT31, 0x0);
+ mac_ofdm_ok = PHY_QueryMacReg(padapter, 0x664, bMaskLWord); // [15:0]
+ PHY_SetMacReg(padapter, 0x664, BIT28|BIT29|BIT30|BIT31, 0x6);
+ mac_ht_ok = PHY_QueryMacReg(padapter, 0x664, bMaskLWord); // [15:0]
+ mac_vht_ok = 0;
+
+ PHY_SetMacReg(padapter, 0x664, BIT28|BIT29|BIT30|BIT31, 0x4);
+ mac_cck_err = PHY_QueryMacReg(padapter, 0x664, bMaskLWord); // [15:0]
+ PHY_SetMacReg(padapter, 0x664, BIT28|BIT29|BIT30|BIT31, 0x1);
+ mac_ofdm_err = PHY_QueryMacReg(padapter, 0x664, bMaskLWord); // [15:0]
+ PHY_SetMacReg(padapter, 0x664, BIT28|BIT29|BIT30|BIT31, 0x7);
+ mac_ht_err = PHY_QueryMacReg(padapter, 0x664, bMaskLWord); // [15:0]
+ mac_vht_err = 0;
+ //Mac_DropPacket
rtw_write32(padapter, 0x664, (rtw_read32(padapter, 0x0664)& 0x0FFFFFFF)| Mac_DropPacket);
DropPacket = rtw_read32(padapter, 0x664)& 0x0000FFFF;
-
- sprintf( extra, "Mac Received packet OK: %d , CRC error: %d , FA Counter: %d , Drop Packets: %d\n",cckok+ofdmok+htok,cckcrc+ofdmcrc+htcrc,OFDM_FA+CCK_FA,DropPacket);
+ }
+
+ sprintf( extra, "Mac Received packet OK: %d , CRC error: %d , FA Counter: %d , Drop Packets: %d\n",
+ mac_cck_ok+mac_ofdm_ok+mac_ht_ok+mac_vht_ok,mac_cck_err+mac_ofdm_err+mac_ht_err+mac_vht_err,OFDM_FA+CCK_FA,DropPacket);
}
wrqu->length = strlen(extra) + 1;
return 0;
@@ -10913,7 +11312,9 @@ static int rtw_mp_reset_stats(struct net_device *dev,
write_bbreg(padapter,0xf14,BIT16,0x1);
rtw_msleep_os(10);
write_bbreg(padapter,0xf14,BIT16,0x0);
-
+ //reset mac counter
+ PHY_SetMacReg(padapter, 0x664, BIT27, 0x1);
+ PHY_SetMacReg(padapter, 0x664, BIT27, 0x0);
return 0;
}
@@ -10921,39 +11322,40 @@ static int rtw_mp_dump(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *wrqu, char *extra)
{
- struct mp_priv *pmp_priv;
- struct pkt_attrib *pattrib;
- u32 value;
+ u32 value,i,j=1,path;
+ u8 input[wrqu->length];
u8 rf_type,path_nums = 0;
- u32 i,j=1,path;
PADAPTER padapter = rtw_netdev_priv(dev);
-
+ struct mp_priv *pmp_priv;
+ struct pkt_attrib *pattrib;
+
pmp_priv = &padapter->mppriv;
-
- //if (copy_from_user(extra, wrqu->data.pointer, wrqu->data.length))
- // return -EFAULT;
-
- if ( strncmp(extra, "all", 4)==0 )
+ if (copy_from_user(input, wrqu->pointer, wrqu->length))
+ return -EFAULT;
+
+ if ( strncmp(input, "all", 4)==0 )
{
- DBG_871X("\n======= MAC REG =======\n");
+ printk("\n======= MAC REG =======\n");
for ( i=0x0;i<0x300;i+=4 )
{
- if(j%4==1) DBG_871X("0x%02x",i);
- DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
- if((j++)%4 == 0) DBG_871X("\n");
+ if(j%4==1) printk("0x%02x ",i);
+ printk(" 0x%08x ",rtw_read32(padapter,i));
+ if((j++)%4 == 0) printk("\n");
}
for( i=0x400;i<0x1000;i+=4 )
{
if(j%4==1) DBG_871X("0x%02x",i);
- DBG_871X(" 0x%08x ",rtw_read32(padapter,i));
- if((j++)%4 == 0) DBG_871X("\n");
+ printk(" 0x%08x ",rtw_read32(padapter,i));
+ if((j++)%4 == 0) printk("\n");
}
i,j=1;
rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
-
- DBG_871X("\n======= RF REG =======\n");
+ bb_reg_dump(padapter);
+ rf_reg_dump(padapter);
+ /*
+ printk("\n======= RF REG =======\n");
if(( RF_1T2R == rf_type ) ||( RF_1T1R ==rf_type ))
path_nums = 1;
else
@@ -10969,11 +11371,11 @@ static int rtw_mp_dump(struct net_device *dev,
{
//value = PHY_QueryRFReg(padapter, (RF_RADIO_PATH_E)path,i, bMaskDWord);
value = rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
- if(j%4==1) DBG_871X("0x%02x ",i);
- DBG_871X(" 0x%08x ",value);
- if((j++)%4==0) DBG_871X("\n");
+ if(j%4==1) printk("0x%02x ",i);
+ printk(" 0x%08x ",value);
+ if((j++)%4==0) printk("\n");
}
- }
+ }*/
}
return 0;
}
@@ -11115,9 +11517,9 @@ static int rtw_mp_SetBT(struct net_device *dev,
char *pch, *ptmp, *token, *tmp[2]={0x00,0x00};
u8 setdata[100];
u8 resetbt=0x00;
- u16 dltime=0;
+ u8 H2cSetbtmac[6];
- u16 testmode=1,ready=1,trxparam=1,setgen=1,getgen=1,testctrl=1,testbt=1;
+ u16 testmode=1,ready=1,trxparam=1,setgen=1,getgen=1,testctrl=1,testbt=1,readtherm=1,setbtmac=1;
u32 i,ii,jj,kk,cnts,status;
PRT_FIRMWARE_8723A pBTFirmware = NULL;
@@ -11133,26 +11535,28 @@ static int rtw_mp_SetBT(struct net_device *dev,
getgen = strncmp(extra, "getgen", 6);
testctrl = strncmp(extra, "testctrl", 8);
testbt = strncmp(extra, "testbt", 6);
+ readtherm = strncmp(extra, "readtherm", 9);
+ setbtmac = strncmp(extra, "setbtmac", 8);
if ( strncmp(extra, "dlfw", 4) == 0)
{
-
- while(dltime<3)
- {
- //rtw_write32(padapter, 0x6a, (rtw_read32(padapter, 0x6a)| 0x00000002));
- //rtw_msleep_os(1000);
- rtw_write32(padapter, 0xcc, (rtw_read32(padapter, 0xcc)| 0x00000002));
- rtw_write32(padapter, 0x6b, (rtw_read32(padapter, 0x6b)& 0xFFFFFFFB));
- rtw_msleep_os(500);
- rtw_write32(padapter, 0x6a, (rtw_read32(padapter, 0x6a)& 0xFFFFFFFE));
- rtw_msleep_os(500);
- rtw_write32(padapter, 0x6b, (rtw_read32(padapter, 0x6b)| 0x00000004));
- rtw_write32(padapter, 0xcc, (rtw_read32(padapter, 0xcc)& 0xFFFFFFFD));
- rtw_msleep_os(1000);
- #if 0
+ padapter->registrypriv.mp_mode =0;
+ pHalFunc->hal_init(padapter);
+ padapter->registrypriv.mp_mode =1;
+ MPT_PwrCtlDM(padapter,0);
+ rtw_write32(padapter, 0xcc, (rtw_read32(padapter, 0xcc)| 0x00000004));
+ rtw_write32(padapter, 0x6b, (rtw_read32(padapter, 0x6b)& 0xFFFFFFEF));
+ rtw_msleep_os(600);
+ //rtw_write32(padapter, 0x6a, (rtw_read32(padapter, 0x6a)& 0xFFFFFFFE));
+ rtw_write32(padapter, 0x6b, (rtw_read32(padapter, 0x6b)| 0x00000010));
+ rtw_write32(padapter, 0xcc, (rtw_read32(padapter, 0xcc)& 0xFFFFFFFB));
+ rtw_msleep_os(1200);
+
+ DBG_871X("padapter->bBTFWReady == _FALSE rtl8723a_FirmwareDownload !\n");
+ status = rtl8723a_FirmwareDownload(padapter);
+ #if 0
FillH2CCmd(padapter, 0x32, 1, &resetbt);
rtw_msleep_os(1000);
- #endif
if(padapter->bBTFWReady == _FALSE && padapter->registrypriv.mp_mode == 1)
{
@@ -11168,42 +11572,63 @@ static int rtw_mp_SetBT(struct net_device *dev,
if (pBTFirmware)
rtw_mfree((u8*)pBTFirmware, sizeof(RT_FIRMWARE_8723A));
}
-
- rtw_msleep_os(1200);
+ #endif
+ DBG_871X("Wait for FirmwareDownloadBT fw boot!\n");
+ rtw_msleep_os(1000);
_rtw_memset(extra,'\0', wrqu->data.length);
BtReq.opCodeVer=1;
BtReq.OpCode=0;
BtReq.paraLength=0;
mptbt_BtControlProcess(padapter,&BtReq);
-
+ rtw_msleep_os(100);
for (i=4; i<pMptCtx->mptOutLen; i++)
{
DBG_8192C("FirmwareDownloadBT ready = 0x%x ", pMptCtx->mptOutBuf[i]);
if( (pMptCtx->mptOutBuf[i]==0x00) && (pMptCtx->mptOutBuf[i+1]==0x00))
{
- sprintf(extra, "download FW Fail! retry = %d\n",dltime);
- padapter->bBTFWReady = _FALSE;
-
+ sprintf(extra, "download FW Fail.\n");
}
else
{
- padapter->bBTFWReady = _TRUE;
- sprintf(extra, "download FW OK. \n");
+ sprintf(extra, "download FW OK.\n");
goto exit;
}
}
- dltime++;
- }
-
+
goto exit;
}
if ( strncmp(extra, "down", 4) == 0){
DBG_871X("SetBT down for to hal_init !\n");
+ mp_stop_test(padapter);
pHalFunc->hal_init(padapter);
+ mp_start_test(padapter);
+ MPT_PwrCtlDM(padapter,0);
+ rtw_write32(padapter, 0xcc, (rtw_read32(padapter, 0xcc)| 0x00000004));
+ rtw_write32(padapter, 0x6b, (rtw_read32(padapter, 0x6b)& 0xFFFFFFEF));
+ rtw_msleep_os(600);
+ //rtw_write32(padapter, 0x6a, (rtw_read32(padapter, 0x6a)& 0xFFFFFFFE));
+ rtw_write32(padapter, 0x6b, (rtw_read32(padapter, 0x6b)| 0x00000010));
+ rtw_write32(padapter, 0xcc, (rtw_read32(padapter, 0xcc)& 0xFFFFFFFB));
+ rtw_msleep_os(1200);
+ goto exit;
+ }
+ if ( strncmp(extra, "disable", 4) == 0){
+ DBG_871X("SetBT enable !\n");
+ rtw_write32(padapter, 0x6a, (rtw_read32(padapter, 0x6a)& 0xFFFFFFFB));
+ rtw_msleep_os(500);
+ goto exit;
+ }
+ if ( strncmp(extra, "enable", 4) == 0){
+ DBG_871X("SetBT disable !\n");
+ rtw_write32(padapter, 0x6a, (rtw_read32(padapter, 0x6a)| 0x00000004));
+ rtw_msleep_os(500);
goto exit;
}
+ if( ready!=0 && testmode!=0 && trxparam!=0 && setgen!=0 && getgen!=0 && testctrl!=0 && testbt!=0 && readtherm!=0 &&setbtmac!=0)
+ return -EFAULT;
+
if( testbt==0 )
{
BtReq.opCodeVer=1;
@@ -11247,6 +11672,25 @@ static int rtw_mp_SetBT(struct net_device *dev,
DBG_871X("BtReq.pParamStart[%d]=%x \n",ii,BtReq.pParamStart[jj]);
}
}
+ if( setbtmac==0 ) {
+ H2cSetbtmac[0]=54;
+ H2cSetbtmac[1]=00;
+ H2cSetbtmac[2]=BtReq.pParamStart[0];
+ H2cSetbtmac[3]=BtReq.pParamStart[1];
+ H2cSetbtmac[4]=BtReq.pParamStart[2];
+ H2cSetbtmac[5]=BtReq.pParamStart[3];
+ FillH2CCmd(padapter, 70, 6, H2cSetbtmac);
+ sprintf(extra, "%s\n",H2cSetbtmac);
+ rtw_msleep_os(200);
+ H2cSetbtmac[0]=54;
+ H2cSetbtmac[1]=01;
+ H2cSetbtmac[2]=BtReq.pParamStart[4];
+ H2cSetbtmac[3]=BtReq.pParamStart[5];
+ FillH2CCmd(padapter, 70, 4, H2cSetbtmac);
+
+ sprintf(extra, "setbtmac H2C part1=%s ,part2=%s \n",extra,H2cSetbtmac);
+ goto exit;
+ }
if( testmode==0 )
{
@@ -11274,6 +11718,14 @@ static int rtw_mp_SetBT(struct net_device *dev,
BtReq.OpCode=4; //BT_GET_GENERAL 4
BtReq.paraLength=cnts/2;
}
+ if( readtherm==0 )
+ {
+ DBG_871X("%s: BT_GET_GENERAL \n", __func__);
+ BtReq.opCodeVer=1;
+ BtReq.OpCode=4; //BT_GET_GENERAL 4
+ BtReq.paraLength=cnts/2;
+ }
+
if( testctrl==0 )
{
DBG_871X("%s: BT_TEST_CTRL \n", __func__);
@@ -11299,12 +11751,23 @@ todo:
_rtw_memset(extra,'\0', wrqu->data.length);
mptbt_BtControlProcess(padapter,&BtReq);
-
- for (i=4; i<pMptCtx->mptOutLen; i++)
- {
- DBG_8192C("0x%x ", pMptCtx->mptOutBuf[i]);
- sprintf(extra, "%s 0x%x ", extra, pMptCtx->mptOutBuf[i]);
- }
+
+ if(readtherm==0){
+ sprintf(extra,"BT thermal=");
+ for (i=4; i<pMptCtx->mptOutLen; i++)
+ {
+ if( (pMptCtx->mptOutBuf[i]==0x00) && (pMptCtx->mptOutBuf[i+1]==0x00))
+ goto exit;
+ DBG_8192C("0x%x ", pMptCtx->mptOutBuf[i]);
+ sprintf(extra, "%s %d ", extra, pMptCtx->mptOutBuf[i]);
+ }
+ }else{
+ for (i=4; i<pMptCtx->mptOutLen; i++)
+ {
+ DBG_8192C("0x%x ", pMptCtx->mptOutBuf[i]);
+ sprintf(extra, "%s 0x%x ", extra, pMptCtx->mptOutBuf[i]);
+ }
+ }
exit:
wrqu->data.length = strlen(extra) + 1;
@@ -11368,7 +11831,13 @@ static int rtw_mp_set(struct net_device *dev,
case MP_DISABLE_BT_COEXIST:
DBG_871X("set case MP_DISABLE_BT_COEXIST \n");
rtw_mp_disable_bt_coexist(dev, info, wdata, extra);
- break;
+ break;
+#ifdef CONFIG_WOWLAN
+ case MP_WOW_ENABLE:
+ DBG_871X("set case MP_WOW_ENABLE: %s \n", extra);
+ rtw_wowlan_ctrl(dev, info, wdata, extra);
+ break;
+#endif
}
@@ -12178,18 +12647,17 @@ static int rtw_widi_set_probe_request(struct net_device *dev,
u8 *pbuf = NULL;
_adapter *padapter = (_adapter *)rtw_netdev_priv(dev);
-#if 1
pbuf = rtw_malloc(sizeof(l2_msg_t));
if(pbuf)
{
- _rtw_memcpy(pbuf, wrqu->data.pointer, wrqu->data.length);
+ copy_from_user(pbuf, wrqu->data.pointer, wrqu->data.length);
+ //_rtw_memcpy(pbuf, wrqu->data.pointer, wrqu->data.length);
+
+ if( wrqu->data.flags == 0 )
intel_widi_wk_cmd(padapter, INTEL_WIDI_ISSUE_PROB_WK, pbuf);
+ else if( wrqu->data.flags == 1 )
+ rtw_set_wfd_rds_sink_info( padapter, (l2_msg_t *)pbuf );
}
-#else
- DBG_871X( "[%s] len = %d\n", __FUNCTION__,wrqu->data.length);
-
- issue_probereq_widi(padapter, wrqu->data.pointer);
-#endif
return ret;
}
#endif // CONFIG_INTEL_WIDI
@@ -12253,7 +12721,7 @@ static s32 initpseudoadhoc(PADAPTER padapter)
err = rtw_set_802_11_infrastructure_mode(padapter, networkType);
if (err == _FALSE) return _FAIL;
- err = rtw_setopmode_cmd(padapter, networkType);
+ err = rtw_setopmode_cmd(padapter, networkType,_TRUE);
if (err == _FAIL) return _FAIL;
return _SUCCESS;
@@ -13100,18 +13568,13 @@ static const struct iw_priv_args rtw_private_args[] = {
SIOCIWFIRSTPRIV + 0xD,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 2, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | IFNAMSIZ, "rfr"
},
-#if 0
- {
- SIOCIWFIRSTPRIV + 0xE,0,0, "wowlan_ctrl"
- },
-#endif
{
SIOCIWFIRSTPRIV + 0x10,
- IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, 0, "p2p_set"
+ IW_PRIV_TYPE_CHAR | 1024, 0, "p2p_set"
},
{
SIOCIWFIRSTPRIV + 0x11,
- IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | P2P_PRIVATE_IOCTL_SET_LEN , "p2p_get"
+ IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK , "p2p_get"
},
{
SIOCIWFIRSTPRIV + 0x12, 0, 0, "NULL"
@@ -13145,7 +13608,7 @@ static const struct iw_priv_args rtw_private_args[] = {
#ifdef CONFIG_INTEL_WIDI
{
SIOCIWFIRSTPRIV + 0x1E,
- IW_PRIV_TYPE_CHAR | 64, 0, "widi_set"
+ IW_PRIV_TYPE_CHAR | 1024, 0, "widi_set"
},
{
SIOCIWFIRSTPRIV + 0x1F,
@@ -13193,6 +13656,9 @@ static const struct iw_priv_args rtw_private_args[] = {
#endif
{ CTA_TEST, IW_PRIV_TYPE_CHAR | 1024, 0, "cta_test"},
#endif
+#ifdef CONFIG_WOWLAN
+ { MP_WOW_ENABLE , IW_PRIV_TYPE_CHAR | 1024, 0, "wow_enable" }, //set
+#endif
};
static iw_handler rtw_private_handler[] =
@@ -13726,4 +14192,3 @@ int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
return ret;
}
-
diff --git a/drivers/net/wireless/rtl8723as/os_dep/linux/mlme_linux.c b/drivers/net/wireless/rtl8723as/os_dep/linux/mlme_linux.c
index 1e5a19c0ee97..41e870f7aac5 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/linux/mlme_linux.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/linux/mlme_linux.c
@@ -94,11 +94,12 @@ void _rtw_scan_timeout_handler (void *FunctionContext)
void _dynamic_check_timer_handlder (void *FunctionContext)
{
_adapter *adapter = (_adapter *)FunctionContext;
-
+/* remove for MP power tracking DM.
#if (MP_DRIVER == 1)
if (adapter->registrypriv.mp_mode == 1)
return;
#endif
+*/
rtw_dynamic_check_timer_handlder(adapter);
_set_timer(&adapter->mlmepriv.dynamic_chk_timer, 2000);
@@ -112,6 +113,16 @@ void _rtw_set_scan_deny_timer_hdl(void *FunctionContext)
}
#endif
+#ifdef CONFIG_DETECT_C2H_BY_POLLING
+void _rtw_event_polling_timer_hdl(void *FunctionContext)
+{
+ _adapter *adapter = (_adapter *)FunctionContext;
+
+ rtw_event_polling_timer_hdl(adapter);
+
+ _set_timer(&adapter->mlmepriv.event_polling_timer, 200);
+}
+#endif
void rtw_init_mlme_timer(_adapter *padapter)
{
@@ -127,6 +138,10 @@ void rtw_init_mlme_timer(_adapter *padapter)
_init_timer(&(pmlmepriv->set_scan_deny_timer), padapter->pnetdev, _rtw_set_scan_deny_timer_hdl, padapter);
#endif
+#ifdef CONFIG_DETECT_C2H_BY_POLLING
+ _init_timer(&(pmlmepriv->event_polling_timer), padapter->pnetdev, _rtw_event_polling_timer_hdl, padapter);
+#endif
+
#ifdef RTK_DMP_PLATFORM
_init_workitem(&(pmlmepriv->Linkup_workitem), Linkup_workitem_callback, padapter);
_init_workitem(&(pmlmepriv->Linkdown_workitem), Linkdown_workitem_callback, padapter);
@@ -178,7 +193,12 @@ void rtw_reset_securitypriv( _adapter *adapter )
u8 backupPMKIDIndex = 0;
u8 backupTKIPCountermeasure = 0x00;
u32 backupTKIPcountermeasure_time = 0;
-
+ // add for CONFIG_IEEE80211W, none 11w also can use
+ _irqL irqL;
+ struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
+
+ _enter_critical_bh(&adapter->security_key_mutex, &irqL);
+
if(adapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)//802.1x
{
// Added by Albert 2009/02/18
@@ -193,7 +213,10 @@ void rtw_reset_securitypriv( _adapter *adapter )
backupPMKIDIndex = adapter->securitypriv.PMKIDIndex;
backupTKIPCountermeasure = adapter->securitypriv.btkip_countermeasure;
backupTKIPcountermeasure_time = adapter->securitypriv.btkip_countermeasure_time;
-
+#ifdef CONFIG_IEEE80211W
+ //reset RX BIP packet number
+ pmlmeext->mgnt_80211w_IPN_rx = 0;
+#endif //CONFIG_IEEE80211W
_rtw_memset((unsigned char *)&adapter->securitypriv, 0, sizeof (struct security_priv));
//_init_timer(&(adapter->securitypriv.tkip_timer),adapter->pnetdev, rtw_use_tkipkey_handler, adapter);
@@ -225,6 +248,8 @@ void rtw_reset_securitypriv( _adapter *adapter )
psec_priv->ndisencryptstatus = Ndis802_11WEPDisabled;
//}
}
+ // add for CONFIG_IEEE80211W, none 11w also can use
+ _exit_critical_bh(&adapter->security_key_mutex, &irqL);
}
void rtw_os_indicate_disconnect( _adapter *adapter )
@@ -244,7 +269,8 @@ _func_enter_;
#ifdef RTK_DMP_PLATFORM
_set_workitem(&adapter->mlmepriv.Linkdown_workitem);
#endif
- rtw_reset_securitypriv( adapter );
+ //modify for CONFIG_IEEE80211W, none 11w also can use the same command
+ rtw_reset_securitypriv_cmd(adapter);
_func_exit_;
@@ -320,6 +346,14 @@ void _addba_timer_hdl(void *FunctionContext)
addba_timer_hdl(psta);
}
+#ifdef CONFIG_IEEE80211W
+void _sa_query_timer_hdl (void *FunctionContext)
+{
+ _adapter *padapter = (_adapter *)FunctionContext;
+ sa_query_timer_hdl(padapter);
+}
+#endif //CONFIG_IEEE80211W
+
void init_addba_retry_timer(_adapter *padapter, struct sta_info *psta)
{
@@ -346,6 +380,9 @@ void init_mlme_ext_timer(_adapter *padapter)
_init_timer(&pmlmeext->survey_timer, padapter->pnetdev, _survey_timer_hdl, padapter);
_init_timer(&pmlmeext->link_timer, padapter->pnetdev, _link_timer_hdl, padapter);
+#ifdef CONFIG_IEEE80211W
+ _init_timer(&pmlmeext->sa_query_timer, padapter->pnetdev, _sa_query_timer_hdl, padapter);
+#endif //CONFIG_IEEE80211W
//_init_timer(&pmlmeext->ADDBA_timer, padapter->pnetdev, _addba_timer_hdl, padapter);
//_init_timer(&pmlmeext->reauth_timer, padapter->pnetdev, _reauth_timer_hdl, padapter);
diff --git a/drivers/net/wireless/rtl8723as/os_dep/linux/os_intfs.c b/drivers/net/wireless/rtl8723as/os_dep/linux/os_intfs.c
index 6d89da078749..ce0b23dd04c4 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/linux/os_intfs.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/linux/os_intfs.c
@@ -48,8 +48,15 @@
#endif //CONFIG_BR_EXT
#ifdef CONFIG_RF_GAIN_OFFSET
+#ifdef CONFIG_RTL8723A
+#define RF_GAIN_OFFSET_ON BIT0
+#define REG_RF_BB_GAIN_OFFSET 0x7f
+#define RF_GAIN_OFFSET_MASK 0xfffff
+#else
+#define RF_GAIN_OFFSET_ON BIT4
#define REG_RF_BB_GAIN_OFFSET 0x55
#define RF_GAIN_OFFSET_MASK 0xfffff
+#endif //CONFIG_RTL8723A
#endif //CONFIG_RF_GAIN_OFFSET
MODULE_LICENSE("GPL");
@@ -198,6 +205,13 @@ module_param(rtw_force_ant, int, 0644);
module_param(rtw_force_igi, int, 0644);
#endif
+#ifdef CONFIG_QOS_OPTIMIZATION
+int rtw_qos_opt_enable=1;//0: disable,1:enable
+#else
+int rtw_qos_opt_enable=0;//0: disable,1:enable
+#endif
+module_param(rtw_qos_opt_enable,int,0644);
+
char* ifname = "wlan%d";
module_param(ifname, charp, 0644);
MODULE_PARM_DESC(ifname, "The default name to allocate for first interface");
@@ -354,6 +368,15 @@ void rtw_proc_init_one(struct net_device *dev)
DBG_871X("Unable to create_proc_read_entry!\n");
return;
}
+
+#ifdef DBG_MEM_ALLOC
+ entry = create_proc_read_entry("mstat", S_IFREG | S_IRUGO,
+ rtw_proc, proc_get_mstat, dev);
+ if (!entry) {
+ DBG_871X("Unable to create_proc_read_entry!\n");
+ return;
+ }
+#endif /* DBG_MEM_ALLOC */
}
@@ -573,6 +596,7 @@ void rtw_proc_init_one(struct net_device *dev)
DBG_871X("Unable to create_proc_read_entry!\n");
return;
}
+ entry->write_proc = proc_set_best_channel;
#endif
entry = create_proc_read_entry("rx_signal", S_IFREG | S_IRUGO,
@@ -647,6 +671,50 @@ void rtw_proc_init_one(struct net_device *dev)
entry->write_proc = proc_set_sreset;
#endif /* DBG_CONFIG_ERROR_DETECT */
+ /* for odm */
+ {
+ struct proc_dir_entry *dir_odm = NULL;
+
+ if (padapter->dir_odm == NULL) {
+ padapter->dir_odm = create_proc_entry(
+ "odm", S_IFDIR | S_IRUGO | S_IXUGO, dir_dev);
+
+ dir_odm = padapter->dir_odm;
+
+ if(dir_odm==NULL) {
+ DBG_871X("Unable to create dir_odm directory\n");
+ return;
+ }
+ }
+ else
+ {
+ return;
+ }
+
+ entry = create_proc_read_entry("dbg_comp", S_IFREG | S_IRUGO,
+ dir_odm, proc_get_odm_dbg_comp, dev);
+ if (!entry) {
+ rtw_warn_on(1);
+ return;
+ }
+ entry->write_proc = proc_set_odm_dbg_comp;
+
+ entry = create_proc_read_entry("dbg_level", S_IFREG | S_IRUGO,
+ dir_odm, proc_get_odm_dbg_level, dev);
+ if (!entry) {
+ rtw_warn_on(1);
+ return;
+ }
+ entry->write_proc = proc_set_odm_dbg_level;
+
+ entry = create_proc_read_entry("adaptivity", S_IFREG | S_IRUGO,
+ dir_odm, proc_get_odm_adaptivity, dev);
+ if (!entry) {
+ rtw_warn_on(1);
+ return;
+ }
+ entry->write_proc = proc_set_odm_adaptivity;
+ }
}
void rtw_proc_remove_one(struct net_device *dev)
@@ -718,6 +786,21 @@ void rtw_proc_remove_one(struct net_device *dev)
remove_proc_entry("sreset", dir_dev);
#endif /* DBG_CONFIG_ERROR_DETECT */
+ /* for odm */
+ {
+ struct proc_dir_entry *dir_odm = NULL;
+ dir_odm = padapter->dir_odm;
+ padapter->dir_odm = NULL;
+
+ if (dir_odm) {
+ remove_proc_entry("dbg_comp", dir_odm);
+ remove_proc_entry("dbg_level", dir_odm);
+ remove_proc_entry("adaptivity", dir_odm);
+
+ remove_proc_entry("odm", dir_dev);
+ }
+ }
+
remove_proc_entry(dev->name, rtw_proc);
dir_dev = NULL;
@@ -733,7 +816,9 @@ void rtw_proc_remove_one(struct net_device *dev)
{
if(rtw_proc){
remove_proc_entry("ver_info", rtw_proc);
-
+ #ifdef DBG_MEM_ALLOC
+ remove_proc_entry("mstat", rtw_proc);
+ #endif /* DBG_MEM_ALLOC */
#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24))
remove_proc_entry(rtw_proc_name, proc_net);
#else
@@ -836,6 +921,7 @@ _func_enter_;
registry_par->hwpwrp_detect = (u8)rtw_hwpwrp_detect;//0:disable,1:enable
#endif
+ registry_par->qos_opt_enable = (u8)rtw_qos_opt_enable;
registry_par->hw_wps_pbc = (u8)rtw_hw_wps_pbc;
#ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
@@ -1163,6 +1249,37 @@ u32 rtw_start_drv_threads(_adapter *padapter)
}
+void rtw_unregister_netdevs(struct dvobj_priv *dvobj)
+{
+ int i;
+ _adapter *padapter = NULL;
+
+ for(i=0;i<dvobj->iface_nums;i++)
+ {
+ struct net_device *pnetdev = NULL;
+
+ padapter = dvobj->padapters[i];
+
+ if (padapter == NULL)
+ continue;
+
+ pnetdev = padapter->pnetdev;
+
+ if((padapter->DriverState != DRIVER_DISAPPEAR) && pnetdev) {
+
+ unregister_netdev(pnetdev); //will call netdev_close()
+ rtw_proc_remove_one(pnetdev);
+ }
+
+#ifdef CONFIG_IOCTL_CFG80211
+ rtw_wdev_unregister(padapter->rtw_wdev);
+#endif
+
+ }
+
+}
+
+
void rtw_stop_drv_threads (_adapter *padapter)
{
RT_TRACE(_module_os_intfs_c_,_drv_info_,("+rtw_stop_drv_threads\n"));
@@ -1171,12 +1288,7 @@ void rtw_stop_drv_threads (_adapter *padapter)
if(padapter->isprimary == _TRUE)
#endif //CONFIG_CONCURRENT_MODE
{
- //Below is to termindate rtw_cmd_thread & event_thread...
- _rtw_up_sema(&padapter->cmdpriv.cmd_queue_sema);
- //_rtw_up_sema(&padapter->cmdpriv.cmd_done_sema);
- if(padapter->cmdThread){
- _rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema);
- }
+ rtw_stop_cmd_thread(padapter);
}
#ifdef CONFIG_EVENT_THREAD_MODE
@@ -1287,7 +1399,7 @@ u8 rtw_reset_drv_sw(_adapter *padapter)
{
u8 ret8=_SUCCESS;
struct mlme_priv *pmlmepriv= &padapter->mlmepriv;
- struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(padapter);
//hal_priv
rtw_hal_def_value_init(padapter);
@@ -1400,7 +1512,9 @@ _func_enter_;
ret8=_FAIL;
goto exit;
}
-
+ // add for CONFIG_IEEE80211W, none 11w also can use
+ _rtw_spinlock_init(&padapter->security_key_mutex);
+
// We don't need to memset padapter->XXX to zero, because adapter is allocated by rtw_zvmalloc().
//_rtw_memset((unsigned char *)&padapter->securitypriv, 0, sizeof (struct security_priv));
@@ -1414,7 +1528,8 @@ _func_enter_;
}
padapter->stapriv.padapter = padapter;
- padapter->setband = GHZ24_50;
+ padapter->setband = GHZ24_50;
+ padapter->fix_rate = 0xFF;
rtw_init_bcmc_stainfo(padapter);
rtw_init_pwrctrl_priv(padapter);
@@ -1492,7 +1607,7 @@ void rtw_cancel_all_timer(_adapter *padapter)
rtw_hal_sw_led_deinit(padapter);
RT_TRACE(_module_os_intfs_c_,_drv_info_,("rtw_cancel_all_timer:cancel DeInitSwLeds! \n"));
- _cancel_timer_ex(&padapter->pwrctrlpriv.pwr_state_check_timer);
+ _cancel_timer_ex(&(adapter_to_pwrctl(padapter)->pwr_state_check_timer));
#ifdef CONFIG_IOCTL_CFG80211
#ifdef CONFIG_P2P
@@ -1509,6 +1624,11 @@ void rtw_cancel_all_timer(_adapter *padapter)
#ifdef CONFIG_NEW_SIGNAL_STAT_PROCESS
_cancel_timer_ex(&padapter->recvpriv.signal_stat_timer);
#endif
+
+#ifdef CONFIG_DETECT_C2H_BY_POLLING
+ _cancel_timer_ex(&padapter->mlmepriv.event_polling_timer);
+#endif
+
#if defined(CONFIG_CHECK_BT_HANG) && defined(CONFIG_BT_COEXIST)
if (padapter->HalFunc.hal_cancel_checkbthang_workqueue)
padapter->HalFunc.hal_cancel_checkbthang_workqueue(padapter);
@@ -1546,8 +1666,9 @@ u8 rtw_free_drv_sw(_adapter *padapter)
}
}
#endif
-
-
+ // add for CONFIG_IEEE80211W, none 11w also can use
+ _rtw_spinlock_free(&padapter->security_key_mutex);
+
#ifdef CONFIG_BR_EXT
_rtw_spinlock_free(&padapter->br_ext_lock);
#endif // CONFIG_BR_EXT
@@ -1630,9 +1751,6 @@ int _netdev_if2_open(struct net_device *pnetdev)
padapter->bSurpriseRemoved = _FALSE;
padapter->bCardDisableWOHSM = _FALSE;
-// _rtw_memcpy(padapter->HalData, primary_padapter->HalData, padapter->hal_data_sz);
- rtw_hal_clone_data(padapter, primary_padapter);
-
padapter->bFWReady = primary_padapter->bFWReady;
//if (init_mlme_ext_priv(padapter) == _FAIL)
@@ -1649,12 +1767,7 @@ int _netdev_if2_open(struct net_device *pnetdev)
{
padapter->intf_start(padapter);
}
-
-
- padapter->hw_init_completed = _TRUE;
-
-
- padapter->dir_dev = NULL;
+
rtw_proc_init_one(pnetdev);
@@ -1774,7 +1887,8 @@ _adapter *rtw_drv_if2_init(_adapter *primary_padapter, void (*set_intf_ops)(stru
padapter->bup = _FALSE;
padapter->net_closed = _TRUE;
padapter->hw_init_completed = _FALSE;
-
+ padapter->dir_dev = NULL;
+ padapter->dir_odm = NULL;
//set adapter_type/iface type
padapter->isprimary = _FALSE;
@@ -1856,9 +1970,7 @@ _adapter *rtw_drv_if2_init(_adapter *primary_padapter, void (*set_intf_ops)(stru
_rtw_memcpy(padapter->eeprompriv.mac_addr, mac, ETH_ALEN);
rtw_init_wifidirect_addrs(padapter, padapter->eeprompriv.mac_addr, padapter->eeprompriv.mac_addr);
- primary_padapter->pbuddy_adapter = padapter;
-
- padapter->dir_dev = NULL;
+ primary_padapter->pbuddy_adapter = padapter;
res = _SUCCESS;
@@ -1901,18 +2013,18 @@ void rtw_drv_if2_free(_adapter *if2)
void rtw_drv_if2_stop(_adapter *if2)
{
_adapter *padapter = if2;
- struct net_device *pnetdev = NULL;
+ //struct net_device *pnetdev = NULL;
if (padapter == NULL)
return;
-
+/*
pnetdev = padapter->pnetdev;
if (pnetdev) {
unregister_netdev(pnetdev); //will call netdev_close()
rtw_proc_remove_one(pnetdev);
}
-
+*/
rtw_cancel_all_timer(padapter);
if (padapter->bup == _TRUE) {
@@ -1931,11 +2043,11 @@ void rtw_drv_if2_stop(_adapter *if2)
padapter->bup = _FALSE;
}
-
+/*
#ifdef CONFIG_IOCTL_CFG80211
rtw_wdev_unregister(padapter->rtw_wdev);
#endif
-
+*/
}
#endif //end of CONFIG_CONCURRENT_MODE
@@ -2057,7 +2169,7 @@ int _netdev_open(struct net_device *pnetdev)
{
uint status;
_adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
- struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(padapter);
RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - dev_open\n"));
DBG_871X("+871x_drv - drv_open, bup=%d\n", padapter->bup);
@@ -2093,12 +2205,6 @@ int _netdev_open(struct net_device *pnetdev)
goto netdev_open_error;
}
- if (init_hw_mlme_ext(padapter) == _FAIL)
- {
- DBG_871X("can't init mlme_ext_priv\n");
- goto netdev_open_error;
- }
-
#ifdef CONFIG_DRVEXT_MODULE
init_drvext(padapter);
#endif
@@ -2119,13 +2225,18 @@ int _netdev_open(struct net_device *pnetdev)
rtw_led_control(padapter, LED_CTL_NO_LINK);
padapter->bup = _TRUE;
+
+ pwrctrlpriv->bips_processing = _FALSE;
}
padapter->net_closed = _FALSE;
_set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
- padapter->pwrctrlpriv.bips_processing = _FALSE;
- rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
+#ifdef CONFIG_DETECT_C2H_BY_POLLING
+ _set_timer(&padapter->mlmepriv.event_polling_timer, 200);
+#endif
+
+ rtw_set_pwr_state_check_timer(pwrctrlpriv);
//netif_carrier_on(pnetdev);//call this func when rtw_joinbss_event_callback return success
if(!rtw_netif_queue_stopped(pnetdev))
@@ -2142,7 +2253,7 @@ netdev_open_normal_process:
#ifdef CONFIG_CONCURRENT_MODE
{
_adapter *sec_adapter = padapter->pbuddy_adapter;
- if(sec_adapter && (sec_adapter->bup == _FALSE || sec_adapter->hw_init_completed == _FALSE))
+ if(sec_adapter && (sec_adapter->bup == _FALSE))
_netdev_if2_open(sec_adapter->pnetdev);
}
#endif
@@ -2187,7 +2298,6 @@ int ips_netdrv_open(_adapter *padapter)
padapter->bDriverStopped = _FALSE;
- padapter->bSurpriseRemoved = _FALSE;
padapter->bCardDisableWOHSM = _FALSE;
//padapter->bup = _TRUE;
@@ -2197,13 +2307,17 @@ int ips_netdrv_open(_adapter *padapter)
RT_TRACE(_module_os_intfs_c_,_drv_err_,("ips_netdrv_open(): Can't init h/w!\n"));
goto netdev_open_error;
}
+
+#ifdef CONFIG_RF_GAIN_OFFSET
+ rtw_bb_rf_gain_offset(padapter);
+#endif //CONFIG_RF_GAIN_OFFSET
if(padapter->intf_start)
{
padapter->intf_start(padapter);
}
- rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
+ rtw_set_pwr_state_check_timer(adapter_to_pwrctl(padapter));
_set_timer(&padapter->mlmepriv.dynamic_chk_timer,5000);
return _SUCCESS;
@@ -2277,15 +2391,45 @@ void rtw_bb_rf_gain_offset(_adapter *padapter)
DBG_871X("+%s value: 0x%02x+\n", __func__, value);
- if (!(value & 0x01)) {
- DBG_871X("Offset RF Gain.\n");
- res = rtw_hal_read_rfreg(padapter, RF_PATH_A, REG_RF_BB_GAIN_OFFSET, 0xffffffff);
- value &= tmp;
- res = value << 14;
- rtw_hal_write_rfreg(padapter, RF_PATH_A, REG_RF_BB_GAIN_OFFSET, RF_GAIN_OFFSET_MASK, res);
+ if (value & RF_GAIN_OFFSET_ON) {
+ //DBG_871X("Offset RF Gain.\n");
+ //DBG_871X("Offset RF Gain. padapter->eeprompriv.EEPROMRFGainVal=0x%x\n",padapter->eeprompriv.EEPROMRFGainVal);
+ if(padapter->eeprompriv.EEPROMRFGainVal != 0xff){
+#ifdef CONFIG_RTL8723A
+ res = rtw_hal_read_rfreg(padapter, RF_PATH_A, 0xd, 0xffffffff);
+ //DBG_871X("Offset RF Gain. reg 0xd=0x%x\n",res);
+ res &= 0xfff87fff;
+
+ res |= (padapter->eeprompriv.EEPROMRFGainVal & 0x0f)<< 15;
+ //DBG_871X("Offset RF Gain. reg 0xd=0x%x\n",res);
+
+ rtw_hal_write_rfreg(padapter, RF_PATH_A, REG_RF_BB_GAIN_OFFSET, RF_GAIN_OFFSET_MASK, res);
+
+ res = rtw_hal_read_rfreg(padapter, RF_PATH_A, 0xe, 0xffffffff);
+ DBG_871X("Offset RF Gain. reg 0xe=0x%x\n",res);
+ res &= 0xfffffff0;
+
+ res |= (padapter->eeprompriv.EEPROMRFGainVal & 0x0f);
+ //DBG_871X("Offset RF Gain. reg 0xe=0x%x\n",res);
+
+ rtw_hal_write_rfreg(padapter, RF_PATH_A, REG_RF_BB_GAIN_OFFSET, RF_GAIN_OFFSET_MASK, res);
+#else
+ res = rtw_hal_read_rfreg(padapter, RF_PATH_A, REG_RF_BB_GAIN_OFFSET, 0xffffffff);
+ DBG_871X("REG_RF_BB_GAIN_OFFSET=%x \n",res);
+ res &= 0xfff87fff;
+ res |= (padapter->eeprompriv.EEPROMRFGainVal & 0x0f)<< 15;
+ DBG_871X("write REG_RF_BB_GAIN_OFFSET=%x \n",res);
+ rtw_hal_write_rfreg(padapter, RF_PATH_A, REG_RF_BB_GAIN_OFFSET, RF_GAIN_OFFSET_MASK, res);
+#endif
+ }
+ else
+ {
+ //DBG_871X("Offset RF Gain. padapter->eeprompriv.EEPROMRFGainVal=0x%x != 0xff, didn't run Kfree\n",padapter->eeprompriv.EEPROMRFGainVal);
+ }
} else {
- DBG_871X("Using the default RF gain.\n");
+ //DBG_871X("Using the default RF gain.\n");
}
+
}
#endif //CONFIG_RF_GAIN_OFFSET
@@ -2310,11 +2454,11 @@ static int netdev_close(struct net_device *pnetdev)
RT_TRACE(_module_os_intfs_c_,_drv_info_,("+871x_drv - drv_close\n"));
- if(padapter->pwrctrlpriv.bInternalAutoSuspend == _TRUE)
+ if(adapter_to_pwrctl(padapter)->bInternalAutoSuspend == _TRUE)
{
//rtw_pwr_wakeup(padapter);
- if(padapter->pwrctrlpriv.rf_pwrstate == rf_off)
- padapter->pwrctrlpriv.ps_flag = _TRUE;
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate == rf_off)
+ adapter_to_pwrctl(padapter)->ps_flag = _TRUE;
}
padapter->net_closed = _TRUE;
@@ -2327,7 +2471,7 @@ static int netdev_close(struct net_device *pnetdev)
rtw_dev_unload(padapter);
}
else*/
- if(padapter->pwrctrlpriv.rf_pwrstate == rf_on){
+ if(adapter_to_pwrctl(padapter)->rf_pwrstate == rf_on){
DBG_871X("(2)871x_drv - drv_close, bup=%d, hw_init_completed=%d\n", padapter->bup, padapter->hw_init_completed);
//s1.
@@ -2361,10 +2505,13 @@ static int netdev_close(struct net_device *pnetdev)
#endif // CONFIG_BR_EXT
#ifdef CONFIG_P2P
- #ifdef CONFIG_IOCTL_CFG80211
- if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled == _TRUE)
- wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _FALSE;
- #endif
+#ifdef CONFIG_IOCTL_CFG80211
+ if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
+ {
+ if(wdev_to_priv(padapter->rtw_wdev)->p2p_enabled == _TRUE)
+ wdev_to_priv(padapter->rtw_wdev)->p2p_enabled = _FALSE;
+ }
+#endif //CONFIG_IOCTL_CFG80211
rtw_p2p_enable(padapter, P2P_ROLE_DISABLE);
#endif //CONFIG_P2P
@@ -2396,3 +2543,445 @@ void rtw_ndev_destructor(struct net_device *ndev)
free_netdev(ndev);
}
+#ifdef CONFIG_ARP_KEEP_ALIVE
+struct route_info {
+ struct in_addr dst_addr;
+ struct in_addr src_addr;
+ struct in_addr gateway;
+ unsigned int dev_index;
+};
+
+static void parse_routes(struct nlmsghdr *nl_hdr, struct route_info *rt_info)
+{
+ struct rtmsg *rt_msg;
+ struct rtattr *rt_attr;
+ int rt_len;
+
+ rt_msg = (struct rtmsg *) NLMSG_DATA(nl_hdr);
+ if ((rt_msg->rtm_family != AF_INET) || (rt_msg->rtm_table != RT_TABLE_MAIN))
+ return;
+
+ rt_attr = (struct rtattr *) RTM_RTA(rt_msg);
+ rt_len = RTM_PAYLOAD(nl_hdr);
+
+ for (; RTA_OK(rt_attr, rt_len); rt_attr = RTA_NEXT(rt_attr, rt_len))
+ {
+ switch (rt_attr->rta_type) {
+ case RTA_OIF:
+ rt_info->dev_index = *(int *) RTA_DATA(rt_attr);
+ break;
+ case RTA_GATEWAY:
+ rt_info->gateway.s_addr = *(u_int *) RTA_DATA(rt_attr);
+ break;
+ case RTA_PREFSRC:
+ rt_info->src_addr.s_addr = *(u_int *) RTA_DATA(rt_attr);
+ break;
+ case RTA_DST:
+ rt_info->dst_addr.s_addr = *(u_int *) RTA_DATA(rt_attr);
+ break;
+ }
+ }
+}
+
+static int route_dump(u32 *gw_addr ,int* gw_index)
+{
+ int err = 0;
+ struct socket *sock;
+ struct {
+ struct nlmsghdr nlh;
+ struct rtgenmsg g;
+ } req;
+ struct msghdr msg;
+ struct iovec iov;
+ struct sockaddr_nl nladdr;
+ mm_segment_t oldfs;
+ char *pg;
+ int size = 0;
+
+ err = sock_create(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE, &sock);
+ if (err)
+ {
+ printk( ": Could not create a datagram socket, error = %d\n", -ENXIO);
+ return err;
+ }
+
+ memset(&nladdr, 0, sizeof(nladdr));
+ nladdr.nl_family = AF_NETLINK;
+
+ req.nlh.nlmsg_len = sizeof(req);
+ req.nlh.nlmsg_type = RTM_GETROUTE;
+ req.nlh.nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST;
+ req.nlh.nlmsg_pid = 0;
+ req.g.rtgen_family = AF_INET;
+
+ iov.iov_base = &req;
+ iov.iov_len = sizeof(req);
+
+ msg.msg_name = &nladdr;
+ msg.msg_namelen = sizeof(nladdr);
+ msg.msg_iov = &iov;
+ msg.msg_iovlen = 1;
+ msg.msg_control = NULL;
+ msg.msg_controllen = 0;
+ msg.msg_flags = MSG_DONTWAIT;
+
+ oldfs = get_fs(); set_fs(KERNEL_DS);
+ err = sock_sendmsg(sock, &msg, sizeof(req));
+ set_fs(oldfs);
+
+ if (size < 0)
+ goto out_sock;
+
+ pg = (char *) __get_free_page(GFP_KERNEL);
+ if (pg == NULL) {
+ err = -ENOMEM;
+ goto out_sock;
+ }
+
+#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
+restart:
+#endif
+
+ for (;;)
+ {
+ struct nlmsghdr *h;
+
+ iov.iov_base = pg;
+ iov.iov_len = PAGE_SIZE;
+
+ oldfs = get_fs(); set_fs(KERNEL_DS);
+ err = sock_recvmsg(sock, &msg, PAGE_SIZE, MSG_DONTWAIT);
+ set_fs(oldfs);
+
+ if (err < 0)
+ goto out_sock_pg;
+
+ if (msg.msg_flags & MSG_TRUNC) {
+ err = -ENOBUFS;
+ goto out_sock_pg;
+ }
+
+ h = (struct nlmsghdr*) pg;
+
+ while (NLMSG_OK(h, err))
+ {
+ struct route_info rt_info;
+ if (h->nlmsg_type == NLMSG_DONE) {
+ err = 0;
+ goto done;
+ }
+
+ if (h->nlmsg_type == NLMSG_ERROR) {
+ struct nlmsgerr *errm = (struct nlmsgerr*) NLMSG_DATA(h);
+ err = errm->error;
+ printk( "NLMSG error: %d\n", errm->error);
+ goto done;
+ }
+
+ if (h->nlmsg_type == RTM_GETROUTE)
+ {
+ printk( "RTM_GETROUTE: NLMSG: %d\n", h->nlmsg_type);
+ }
+ if (h->nlmsg_type != RTM_NEWROUTE) {
+ printk( "NLMSG: %d\n", h->nlmsg_type);
+ err = -EINVAL;
+ goto done;
+ }
+
+ memset(&rt_info, 0, sizeof(struct route_info));
+ parse_routes(h, &rt_info);
+ if(!rt_info.dst_addr.s_addr && rt_info.gateway.s_addr && rt_info.dev_index)
+ {
+ *gw_addr = rt_info.gateway.s_addr;
+ *gw_index = rt_info.dev_index;
+
+ }
+ h = NLMSG_NEXT(h, err);
+ }
+
+ if (err)
+ {
+ printk( "!!!Remnant of size %d %d %d\n", err, h->nlmsg_len, h->nlmsg_type);
+ err = -EINVAL;
+ break;
+ }
+ }
+
+done:
+#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE)
+ if (!err && req.g.rtgen_family == AF_INET) {
+ req.g.rtgen_family = AF_INET6;
+
+ iov.iov_base = &req;
+ iov.iov_len = sizeof(req);
+
+ msg.msg_name = &nladdr;
+ msg.msg_namelen = sizeof(nladdr);
+ msg.msg_iov = &iov;
+ msg.msg_iovlen = 1;
+ msg.msg_control = NULL;
+ msg.msg_controllen = 0;
+ msg.msg_flags=MSG_DONTWAIT;
+
+ oldfs = get_fs(); set_fs(KERNEL_DS);
+ err = sock_sendmsg(sock, &msg, sizeof(req));
+ set_fs(oldfs);
+
+ if (err > 0)
+ goto restart;
+ }
+#endif
+
+out_sock_pg:
+ free_page((unsigned long) pg);
+
+out_sock:
+ sock_release(sock);
+ return err;
+}
+
+static int arp_query(unsigned char *haddr, u32 paddr,
+ struct net_device *dev)
+{
+ struct neighbour *neighbor_entry;
+ int ret = 0;
+
+ neighbor_entry = neigh_lookup(&arp_tbl, &paddr, dev);
+
+ if (neighbor_entry != NULL) {
+ neighbor_entry->used = jiffies;
+ if (neighbor_entry->nud_state & NUD_VALID) {
+ _rtw_memcpy(haddr, neighbor_entry->ha, dev->addr_len);
+ ret = 1;
+ }
+ neigh_release(neighbor_entry);
+ }
+ return ret;
+}
+
+static int get_defaultgw(u32 *ip_addr ,char mac[])
+{
+ int gw_index = 0; // oif device index
+ struct net_device *gw_dev = NULL; //oif device
+
+ route_dump(ip_addr, &gw_index);
+
+ if( !(*ip_addr) || !gw_index )
+ {
+ //DBG_871X("No default GW \n");
+ return -1;
+ }
+
+ gw_dev = dev_get_by_index(&init_net, gw_index);
+
+ if(gw_dev == NULL)
+ {
+ //DBG_871X("get Oif Device Fail \n");
+ return -1;
+ }
+
+ if(!arp_query(mac, *ip_addr, gw_dev))
+ {
+ //DBG_871X( "arp query failed\n");
+ dev_put(gw_dev);
+ return -1;
+
+ }
+ dev_put(gw_dev);
+
+ return 0;
+}
+
+int rtw_gw_addr_query(_adapter *padapter)
+{
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ u32 gw_addr = 0; // default gw address
+ unsigned char gw_mac[32] = {0}; // default gw mac
+ int i;
+ int res;
+
+ res = get_defaultgw(&gw_addr, gw_mac);
+ if(!res)
+ {
+ pmlmepriv->gw_ip[0] = gw_addr&0xff;
+ pmlmepriv->gw_ip[1] = (gw_addr&0xff00)>>8;
+ pmlmepriv->gw_ip[2] = (gw_addr&0xff0000)>>16;
+ pmlmepriv->gw_ip[3] = (gw_addr&0xff000000)>>24;
+ _rtw_memcpy(pmlmepriv->gw_mac_addr, gw_mac, 6);
+ DBG_871X("%s Gateway Mac:\t" MAC_FMT "\n", __FUNCTION__, MAC_ARG(pmlmepriv->gw_mac_addr));
+ DBG_871X("%s Gateway IP:\t" IP_FMT "\n", __FUNCTION__, IP_ARG(pmlmepriv->gw_ip));
+ }
+ else
+ {
+ //DBG_871X("Get Gateway IP/MAC fail!\n");
+ }
+
+ return res;
+}
+#endif
+
+int rtw_suspend_free_assoc_resource(_adapter *padapter)
+{
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct net_device *pnetdev = padapter->pnetdev;
+ struct wifidirect_info* pwdinfo = &padapter->wdinfo;
+
+ DBG_871X("==> "FUNC_ADPT_FMT" entry....\n", FUNC_ADPT_ARG(padapter));
+
+ rtw_cancel_all_timer(padapter);
+ if(pnetdev){
+ netif_carrier_off(pnetdev);
+ rtw_netif_stop_queue(pnetdev);
+ }
+
+ #ifdef CONFIG_LAYER2_ROAMING_RESUME
+ if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED) && rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
+ {
+ DBG_871X("%s %s(" MAC_FMT "), length:%d assoc_ssid.length:%d\n",__FUNCTION__,
+ pmlmepriv->cur_network.network.Ssid.Ssid,
+ MAC_ARG(pmlmepriv->cur_network.network.MacAddress),
+ pmlmepriv->cur_network.network.Ssid.SsidLength,
+ pmlmepriv->assoc_ssid.SsidLength);
+ rtw_set_roaming(padapter, 1);
+ }
+ #endif //CONFIG_LAYER2_ROAMING_RESUME
+
+ if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED))
+ {
+ rtw_disassoc_cmd(padapter, 0, _FALSE);
+ }
+ #ifdef CONFIG_AP_MODE
+ else if(check_fwstate(pmlmepriv, WIFI_AP_STATE))
+ {
+ rtw_sta_flush(padapter);
+ }
+ #endif
+ if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) ){
+ //s2-2. indicate disconnect to os
+ rtw_indicate_disconnect(padapter);
+ }
+
+ //s2-3.
+ rtw_free_assoc_resources(padapter, 1);
+
+ //s2-4.
+#ifdef CONFIG_AUTOSUSPEND
+ if(is_primary_adapter(padapter) && (!adapter_to_pwrctl(padapter)->bInternalAutoSuspend ))
+#endif
+ rtw_free_network_queue(padapter, _TRUE);
+
+ if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
+ rtw_indicate_scan_done(padapter, 1);
+
+ DBG_871X("==> "FUNC_ADPT_FMT" exit....\n", FUNC_ADPT_ARG(padapter));
+ return 0;
+}
+extern void rtw_dev_unload(_adapter *padapter);
+int rtw_suspend_common(_adapter *padapter)
+{
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+
+ int ret = 0;
+ _func_enter_;
+ LeaveAllPowerSaveMode(padapter);
+
+ rtw_suspend_free_assoc_resource(padapter);
+
+#ifdef CONFIG_CONCURRENT_MODE
+ if(rtw_buddy_adapter_up(padapter)){
+ rtw_suspend_free_assoc_resource(padapter->pbuddy_adapter);
+ }
+#endif
+ rtw_led_control(padapter, LED_CTL_POWER_OFF);
+
+#ifdef CONFIG_CONCURRENT_MODE
+ if(rtw_buddy_adapter_up(padapter)){
+ rtw_dev_unload(padapter->pbuddy_adapter);
+ }
+#endif
+ rtw_dev_unload(padapter);
+
+exit:
+
+ _func_exit_;
+ return ret;
+}
+
+int rtw_resume_common(_adapter *padapter)
+{
+ int ret = 0;
+ struct net_device *pnetdev= padapter->pnetdev;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
+ struct mlme_priv *mlmepriv = &padapter->mlmepriv;
+
+ _func_enter_;
+
+ #ifdef CONFIG_CONCURRENT_MODE
+ rtw_reset_drv_sw(padapter->pbuddy_adapter);
+ #endif
+
+ rtw_reset_drv_sw(padapter);
+ pwrpriv->bkeepfwalive = _FALSE;
+
+ DBG_871X("bkeepfwalive(%x)\n",pwrpriv->bkeepfwalive);
+ if(pm_netdev_open(pnetdev,_TRUE) != 0) {
+ DBG_871X("%s ==> pm_netdev_open failed \n",__FUNCTION__);
+ ret = -1;
+ return ret;
+ }
+
+ netif_device_attach(pnetdev);
+ netif_carrier_on(pnetdev);
+
+
+ #ifdef CONFIG_CONCURRENT_MODE
+ if(rtw_buddy_adapter_up(padapter)){
+ pnetdev = padapter->pbuddy_adapter->pnetdev;
+
+ netif_device_attach(pnetdev);
+ netif_carrier_on(pnetdev);
+ }
+ #endif
+
+ if (check_fwstate(mlmepriv, WIFI_STATION_STATE)) {
+ DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_STATION_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
+
+ #ifdef CONFIG_LAYER2_ROAMING_RESUME
+ rtw_roaming(padapter, NULL);
+ #endif //CONFIG_LAYER2_ROAMING_RESUME
+
+ } else if (check_fwstate(mlmepriv, WIFI_AP_STATE)) {
+ DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_AP_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
+ rtw_ap_restore_network(padapter);
+ } else if (check_fwstate(mlmepriv, WIFI_ADHOC_STATE)) {
+ DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_ADHOC_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
+ } else {
+ DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - ???\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
+ }
+
+ #ifdef CONFIG_CONCURRENT_MODE
+ if(rtw_buddy_adapter_up(padapter))
+ {
+ mlmepriv = &padapter->pbuddy_adapter->mlmepriv;
+ if (check_fwstate(mlmepriv, WIFI_STATION_STATE)) {
+ DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_STATION_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
+
+ #ifdef CONFIG_LAYER2_ROAMING_RESUME
+ rtw_roaming(padapter->pbuddy_adapter, NULL);
+ #endif //CONFIG_LAYER2_ROAMING_RESUME
+
+ } else if (check_fwstate(mlmepriv, WIFI_AP_STATE)) {
+ DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_AP_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
+ rtw_ap_restore_network(padapter->pbuddy_adapter);
+ } else if (check_fwstate(mlmepriv, WIFI_ADHOC_STATE)) {
+ DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - WIFI_ADHOC_STATE\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
+ } else {
+ DBG_871X(FUNC_ADPT_FMT" fwstate:0x%08x - ???\n", FUNC_ADPT_ARG(padapter), get_fwstate(mlmepriv));
+ }
+ }
+ #endif
+
+ _func_exit_;
+ return ret;
+}
diff --git a/drivers/net/wireless/rtl8723as/os_dep/linux/pci_intf.c b/drivers/net/wireless/rtl8723as/os_dep/linux/pci_intf.c
index e6bca0b6a7a3..4d00d304bcb0 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/linux/pci_intf.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/linux/pci_intf.c
@@ -163,7 +163,7 @@ static u8 rtw_pci_switch_clk_req(_adapter *padapter, u8 value)
void rtw_pci_disable_aspm(_adapter *padapter)
{
struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(pdvobjpriv);
struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
u32 pcicfg_addrport = 0;
u8 num4bytes;
@@ -254,7 +254,7 @@ void rtw_pci_disable_aspm(_adapter *padapter)
void rtw_pci_enable_aspm(_adapter *padapter)
{
struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(pdvobjpriv);
struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
u16 aspmlevel = 0;
u32 pcicfg_addrport = 0;
@@ -728,7 +728,7 @@ rtw_get_amd_l1_patch(_adapter *padapter, u8 busnum, u8 devnum,
void rtw_pci_disable_aspm(_adapter *padapter)
{
struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(pdvobjpriv);
struct pci_dev *pdev = pdvobjpriv->ppcidev;
struct pci_dev *bridge_pdev = pdev->bus->self;
struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
@@ -802,7 +802,7 @@ or the system will show bluescreen.*/
void rtw_pci_enable_aspm(_adapter *padapter)
{
struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(pdvobjpriv);
struct pci_dev *pdev = pdvobjpriv->ppcidev;
struct pci_dev *bridge_pdev = pdev->bus->self;
struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
@@ -978,7 +978,7 @@ static void rtw_pci_update_default_setting(_adapter *padapter)
{
struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
struct pci_priv *pcipriv = &(pdvobjpriv->pcipriv);
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(pdvobjpriv);
//reset pPSC->reg_rfps_level & priv->b_support_aspm
pwrpriv->reg_rfps_level = 0;
@@ -1078,7 +1078,7 @@ static void rtw_pci_update_default_setting(_adapter *padapter)
static void rtw_pci_initialize_adapter_common(_adapter *padapter)
{
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
rtw_pci_update_default_setting(padapter);
@@ -1158,7 +1158,7 @@ _func_enter_;
_rtw_mutex_init(&dvobj->setch_mutex);
_rtw_mutex_init(&dvobj->setbw_mutex);
-
+ dvobj->processing_dev_remove = _FALSE;
if ( (err = pci_enable_device(pdev)) != 0) {
DBG_871X(KERN_ERR "%s : Cannot enable new PCI device\n", pci_name(pdev));
goto free_dvobj;
@@ -1531,7 +1531,7 @@ static void pci_intf_stop(_adapter *padapter)
}
-static void rtw_dev_unload(_adapter *padapter)
+void rtw_dev_unload(_adapter *padapter)
{
struct net_device *pnetdev= (struct net_device*)padapter->pnetdev;
@@ -1779,7 +1779,7 @@ static void rtw_pci_if1_deinit(_adapter *if1)
rtw_cancel_all_timer(if1);
#ifdef CONFIG_WOWLAN
- if1->pwrctrlpriv.wowlan_mode=_FALSE;
+ adapter_to_pwrctl(if1)->wowlan_mode=_FALSE;
#endif //CONFIG_WOWLAN
rtw_dev_unload(if1);
@@ -1892,6 +1892,7 @@ exit:
return status == _SUCCESS?0:-ENODEV;
}
+extern void rtw_unregister_netdevs(struct dvobj_priv *dvobj);
/*
* dev_remove() - our device is being removed
*/
@@ -1906,6 +1907,9 @@ _func_exit_;
DBG_871X("+rtw_dev_remove\n");
+ pdvobjpriv->processing_dev_remove = _TRUE;
+ rtw_unregister_netdevs(pdvobjpriv);
+
if (unlikely(!padapter)) {
return;
}
@@ -1929,7 +1933,7 @@ _func_exit_;
#endif
#if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
- rtw_unregister_early_suspend(&padapter->pwrctrlpriv);
+ rtw_unregister_early_suspend(dvobj_to_pwrctl(pdvobjpriv));
#endif
rtw_pm_set_ips(padapter, IPS_NONE);
@@ -1979,13 +1983,16 @@ static void __exit rtw_drv_halt(void)
{
RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+rtw_drv_halt\n"));
DBG_871X("+rtw_drv_halt\n");
-
- rtw_suspend_lock_uninit();
+
pci_drvpriv.drv_registered = _FALSE;
pci_unregister_driver(&pci_drvpriv.rtw_pci_drv);
+ rtw_suspend_lock_uninit();
+
DBG_871X("-rtw_drv_halt\n");
+
+ rtw_mstat_dump();
}
diff --git a/drivers/net/wireless/rtl8723as/os_dep/linux/pci_ops_linux.c b/drivers/net/wireless/rtl8723as/os_dep/linux/pci_ops_linux.c
index 7d671df3932c..12c6c6832304 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/linux/pci_ops_linux.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/linux/pci_ops_linux.c
@@ -1,24 +1,24 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *******************************************************************************/
-#define _PCI_OPS_LINUX_C_
-
-#include <drv_types.h>
-
-
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *******************************************************************************/
+#define _PCI_OPS_LINUX_C_
+
+#include <drv_types.h>
+
+
+
diff --git a/drivers/net/wireless/rtl8723as/os_dep/linux/recv_linux.c b/drivers/net/wireless/rtl8723as/os_dep/linux/recv_linux.c
index 3399918068be..bb6de8a96b6b 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/linux/recv_linux.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/linux/recv_linux.c
@@ -55,6 +55,19 @@ int rtw_os_recv_resource_alloc(_adapter *padapter, union recv_frame *precvframe)
//free os related resource in union recv_frame
void rtw_os_recv_resource_free(struct recv_priv *precvpriv)
{
+ sint i;
+ union recv_frame *precvframe;
+ precvframe = (union recv_frame*) precvpriv->precv_frame_buf;
+
+ for(i=0; i < NR_RECVFRAME; i++)
+ {
+ if(precvframe->u.hdr.pkt)
+ {
+ rtw_skb_free(precvframe->u.hdr.pkt);//free skb by driver
+ precvframe->u.hdr.pkt = NULL;
+ }
+ precvframe++;
+ }
}
@@ -126,7 +139,7 @@ int rtw_os_recvbuf_resource_free(_adapter *padapter, struct recv_buf *precvbuf)
if(precvbuf->pskb)
- dev_kfree_skb_any(precvbuf->pskb);
+ rtw_skb_free(precvbuf->pskb);
return ret;
@@ -217,7 +230,7 @@ void rtw_hostapd_mlme_rx(_adapter *padapter, union recv_frame *precv_frame)
skb->tail = precv_frame->u.hdr.rx_tail;
skb->len = precv_frame->u.hdr.len;
- //pskb_copy = skb_copy(skb, GFP_ATOMIC);
+ //pskb_copy = rtw_skb_copy(skb);
// if(skb == NULL) goto _exit;
skb->dev = pmgnt_netdev;
@@ -234,9 +247,9 @@ void rtw_hostapd_mlme_rx(_adapter *padapter, union recv_frame *precv_frame)
//skb_pull(skb, 24);
_rtw_memset(skb->cb, 0, sizeof(skb->cb));
- netif_rx(skb);
+ rtw_netif_rx(pmgnt_netdev, skb);
- precv_frame->u.hdr.pkt = NULL; // set pointer to NULL before rtw_free_recvframe() if call netif_rx()
+ precv_frame->u.hdr.pkt = NULL; // set pointer to NULL before rtw_free_recvframe() if call rtw_netif_rx()
#endif
}
@@ -310,7 +323,7 @@ _func_enter_;
if(bmcast)
{
psta = rtw_get_bcmc_stainfo(padapter);
- pskb2 = skb_clone(skb, GFP_ATOMIC);
+ pskb2 = rtw_skb_clone(skb);
} else {
psta = rtw_get_stainfo(pstapriv, pattrib->dst);
}
@@ -327,7 +340,7 @@ _func_enter_;
skb_set_queue_mapping(skb, rtw_recv_select_queue(skb));
#endif //LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35)
- rtw_xmit_entry(skb, pnetdev);
+ _rtw_xmit_entry(skb, pnetdev);
if(bmcast)
skb = pskb2;
@@ -389,7 +402,48 @@ _func_enter_;
skb->dev = padapter->pnetdev;
skb->protocol = eth_type_trans(skb, padapter->pnetdev);
- netif_rx(skb);
+ #ifdef DBG_TRX_STA_PKTS
+ {
+
+ struct sta_info *psta = NULL;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
+ int bmcast = IS_MCAST(pattrib->dst);
+
+ if(bmcast)
+ {
+ psta = rtw_get_bcmc_stainfo(padapter);
+
+ } else {
+ psta = rtw_get_stainfo(pstapriv, pattrib->src);
+ }
+ if(psta)
+ {
+ switch(pattrib->priority)
+ {
+ case 1:
+ case 2:
+ psta->rx_bk_cnt++;
+ break;
+ case 4:
+ case 5:
+ psta->rx_vi_cnt++;
+ break;
+ case 6:
+ case 7:
+ psta->rx_vo_cnt++;
+ break;
+ case 0:
+ case 3:
+ default:
+ psta->rx_be_cnt++;
+ break;
+ }
+ }
+ }
+ #endif
+
+ rtw_netif_rx(padapter->pnetdev, skb);
_recv_indicatepkt_end:
@@ -397,7 +451,7 @@ _recv_indicatepkt_end:
rtw_free_recvframe(precv_frame, pfree_recv_queue);
- RT_TRACE(_module_recv_osdep_c_,_drv_info_,("\n rtw_recv_indicatepkt :after netif_rx!!!!\n"));
+ RT_TRACE(_module_recv_osdep_c_,_drv_info_,("\n rtw_recv_indicatepkt :after rtw_netif_rx!!!!\n"));
_func_exit_;
@@ -424,7 +478,7 @@ void rtw_os_read_port(_adapter *padapter, struct recv_buf *precvbuf)
precvbuf->ref_cnt--;
//free skb in recv_buf
- dev_kfree_skb_any(precvbuf->pskb);
+ rtw_skb_free(precvbuf->pskb);
precvbuf->pskb = NULL;
precvbuf->reuse = _FALSE;
diff --git a/drivers/net/wireless/rtl8723as/os_dep/linux/rtw_android.c b/drivers/net/wireless/rtl8723as/os_dep/linux/rtw_android.c
index baedeb2f1fc5..440566e8a637 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/linux/rtw_android.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/linux/rtw_android.c
@@ -27,6 +27,11 @@
#include <ioctl_cfg80211.h>
#include <rtw_ioctl_set.h>
+#ifdef CONFIG_GPIO_WAKEUP
+#include <linux/gpio.h>
+#endif
+
+#include <drv_types.h>
#if defined(RTW_ENABLE_WIFI_CONTROL_FUNC)
#include <linux/platform_device.h>
@@ -37,6 +42,11 @@
#endif
#endif /* defined(RTW_ENABLE_WIFI_CONTROL_FUNC) */
+#ifdef CONFIG_GPIO_WAKEUP
+#include <linux/interrupt.h>
+#include <linux/irq.h>
+#endif
+
const char *android_wifi_cmd_str[ANDROID_WIFI_CMD_MAX] = {
"START",
"STOP",
@@ -118,6 +128,7 @@ typedef struct android_wifi_priv_cmd {
*/
static int g_wifi_on = _TRUE;
+unsigned int oob_irq;
#ifdef PNO_SUPPORT
static int wl_android_set_pno_setup(struct net_device *dev, char *command, int total_len)
@@ -279,7 +290,7 @@ int rtw_android_set_country(struct net_device *net, char *command, int total_len
{
_adapter *adapter = (_adapter *)rtw_netdev_priv(net);
char *country_code = command + strlen(android_wifi_cmd_str[ANDROID_WIFI_CMD_COUNTRY]) + 1;
- int ret;
+ int ret = _FAIL;
ret = rtw_set_country(adapter, country_code);
@@ -288,7 +299,6 @@ int rtw_android_set_country(struct net_device *net, char *command, int total_len
int rtw_android_get_p2p_dev_addr(struct net_device *net, char *command, int total_len)
{
- int ret;
int bytes_written = 0;
//We use the same address as our HW MAC address
@@ -300,7 +310,6 @@ int rtw_android_get_p2p_dev_addr(struct net_device *net, char *command, int tota
int rtw_android_set_block(struct net_device *net, char *command, int total_len)
{
- int ret;
_adapter *adapter = (_adapter *)rtw_netdev_priv(net);
char *block_value = command + strlen(android_wifi_cmd_str[ANDROID_WIFI_CMD_BLOCK]) + 1;
@@ -393,11 +402,11 @@ int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd)
case ANDROID_WIFI_CMD_SCAN_ACTIVE:
//rtw_set_scan_mode((_adapter *)rtw_netdev_priv(net), SCAN_ACTIVE);
-#ifdef CONFIG_PLATFORM_MSTAR_TITANIA12
+#ifdef CONFIG_PLATFORM_MSTAR
#ifdef CONFIG_IOCTL_CFG80211
(wdev_to_priv(net->ieee80211_ptr))->bandroid_scan = _TRUE;
#endif //CONFIG_IOCTL_CFG80211
-#endif //CONFIG_PLATFORM_MSTAR_TITANIA12
+#endif //CONFIG_PLATFORM_MSTAR
break;
case ANDROID_WIFI_CMD_SCAN_PASSIVE:
//rtw_set_scan_mode((_adapter *)rtw_netdev_priv(net), SCAN_PASSIVE);
@@ -522,7 +531,8 @@ int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd)
_adapter* padapter = ( _adapter * ) rtw_netdev_priv(net);
pwfd_info = &padapter->wfd_info;
- pwfd_info->wfd_enable = _TRUE;
+ if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
+ pwfd_info->wfd_enable = _TRUE;
break;
}
@@ -536,7 +546,8 @@ int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd)
_adapter* padapter = ( _adapter * ) rtw_netdev_priv(net);
pwfd_info = &padapter->wfd_info;
- pwfd_info->wfd_enable = _FALSE;
+ if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
+ pwfd_info->wfd_enable = _FALSE;
break;
}
case ANDROID_WIFI_CMD_WFD_SET_TCPPORT:
@@ -549,7 +560,8 @@ int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd)
_adapter* padapter = ( _adapter * ) rtw_netdev_priv(net);
pwfd_info = &padapter->wfd_info;
- pwfd_info->rtsp_ctrlport = ( u16 ) get_int_from_command( priv_cmd.buf );
+ if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
+ pwfd_info->rtsp_ctrlport = ( u16 ) get_int_from_command( priv_cmd.buf );
break;
}
case ANDROID_WIFI_CMD_WFD_SET_MAX_TPUT:
@@ -567,9 +579,12 @@ int rtw_android_priv_cmd(struct net_device *net, struct ifreq *ifr, int cmd)
_adapter* padapter = ( _adapter * ) rtw_netdev_priv(net);
pwfd_info = &padapter->wfd_info;
- pwfd_info->wfd_device_type = ( u8 ) get_int_from_command( priv_cmd.buf );
+ if( padapter->wdinfo.driver_interface == DRIVER_CFG80211 )
+ {
+ pwfd_info->wfd_device_type = ( u8 ) get_int_from_command( priv_cmd.buf );
- pwfd_info->wfd_device_type &= WFD_DEVINFO_DUAL;
+ pwfd_info->wfd_device_type &= WFD_DEVINFO_DUAL;
+ }
break;
}
#endif
@@ -602,7 +617,7 @@ response:
exit:
rtw_unlock_suspend();
if (command) {
- kfree(command);
+ rtw_mfree(command, priv_cmd.total_len);
}
return ret;
@@ -732,12 +747,28 @@ static int wifi_probe(struct platform_device *pdev)
{
struct wifi_platform_data *wifi_ctrl =
(struct wifi_platform_data *)(pdev->dev.platform_data);
+ int wifi_wake_gpio = 0;
DBG_871X("## %s\n", __FUNCTION__);
wifi_irqres = platform_get_resource_byname(pdev, IORESOURCE_IRQ, "bcmdhd_wlan_irq");
+
if (wifi_irqres == NULL)
wifi_irqres = platform_get_resource_byname(pdev,
IORESOURCE_IRQ, "bcm4329_wlan_irq");
+ else
+ wifi_wake_gpio = wifi_irqres->start;
+
+#ifdef CONFIG_GPIO_WAKEUP
+ printk("%s: gpio:%d wifi_wake_gpio:%d\n", __func__,
+ wifi_irqres->start, wifi_wake_gpio);
+
+ if (wifi_wake_gpio > 0) {
+ gpio_request(wifi_wake_gpio, "oob_irq");
+ gpio_direction_input(wifi_wake_gpio);
+ oob_irq = gpio_to_irq(wifi_wake_gpio);
+ printk("%s oob_irq:%d\n", __func__, oob_irq);
+ }
+#endif
wifi_control_data = wifi_ctrl;
wifi_set_power(1, 0); /* Power On */
diff --git a/drivers/net/wireless/rtl8723as/os_dep/linux/sdio_intf.c b/drivers/net/wireless/rtl8723as/os_dep/linux/sdio_intf.c
index 51abf690212e..8e188dad43c1 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/linux/sdio_intf.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/linux/sdio_intf.c
@@ -39,20 +39,21 @@
#endif
#ifdef CONFIG_PLATFORM_SPRD
-#include <linux/gpio.h>
#include <custom_gpio.h>
-#ifdef CONFIG_RTL8188E
-#include <mach/ldo.h>
-#endif
#endif // CONFIG_PLATFORM_SPRD
-
#include <hal_intf.h>
#include <sdio_hal.h>
#include <sdio_ops.h>
#include <rtw_android.h>
+#ifdef CONFIG_PLATFORM_SPRD
+#ifdef CONFIG_PM_RUNTIME
+#include <linux/pm_runtime.h>
+#endif
+#endif
+
#ifdef CONFIG_PLATFORM_ARM_SUNxI
#if defined(CONFIG_MMC_SUNXI_POWER_CONTROL)
@@ -92,6 +93,29 @@ int rtl8189es_sdio_poweroff(void)
#endif //defined(CONFIG_MMC_SUNXI_POWER_CONTROL)
#endif //CONFIG_PLATFORM_ARM_SUNxI
+#ifdef CONFIG_PLATFORM_ARM_SUN6I
+#ifdef CONFIG_MMC
+
+#ifdef CONFIG_A31_EVB
+#define SDIOID 0
+#else
+#define SDIOID 1
+#endif
+#define SUNXI_SDIO_WIFI_NUM_RTL8723AS 3
+#define SUNXI_SDIO_WIFI_NUM_RTL8189ES 4
+
+#ifdef CONFIG_RTL8188E
+#define SUNXI_SDIO_WIFI_NUM SUNXI_SDIO_WIFI_NUM_RTL8189ES
+#else // CONFIG_RTL8723A
+#define SUNXI_SDIO_WIFI_NUM SUNXI_SDIO_WIFI_NUM_RTL8723AS
+#endif
+
+extern void sw_mci_rescan_card(unsigned id, unsigned insert);
+extern int wifi_pm_get_mod_type(void);
+extern void wifi_pm_power(int on);
+#endif //CONFIG_MMC
+#endif //CONFIG_PLATFORM_ARM_SUN6I
+
#ifndef dev_to_sdio_func
#define dev_to_sdio_func(d) container_of(d, struct sdio_func, dev)
#endif
@@ -119,6 +143,9 @@ static int rtw_drv_init(struct sdio_func *func, const struct sdio_device_id *id)
static void rtw_dev_remove(struct sdio_func *func);
static int rtw_sdio_resume(struct device *dev);
static int rtw_sdio_suspend(struct device *dev);
+#ifdef CONFIG_PM_RUNTIME
+static void rtw_start_runtime(struct sdio_func *func);
+#endif
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,29))
static const struct dev_pm_ops rtw_sdio_pm_ops = {
@@ -161,48 +188,93 @@ static void sd_sync_int_hdl(struct sdio_func *func)
rtw_sdio_set_irq_thd(psdpriv, NULL);
}
-void sdio_free_irq(struct dvobj_priv *dvobj)
+int sdio_alloc_irq(struct dvobj_priv *dvobj)
{
PSDIO_DATA psdio_data;
struct sdio_func *func;
int err;
- if(dvobj->irq_alloc) {
psdio_data = &dvobj->intf_data;
func = psdio_data->func;
- if(func) {
+
sdio_claim_host(func);
- err = sdio_release_irq(func);
+
+ err = sdio_claim_irq(func, &sd_sync_int_hdl);
if (err)
- DBG_871X_LEVEL(_drv_err_,"%s: sdio_release_irq FAIL(%d)!\n", __func__, err);
+ printk(KERN_CRIT "%s: sdio_claim_irq FAIL(%d)!\n", __func__, err);
+ else
+ dvobj->irq_alloc = 1;
+
sdio_release_host(func);
- }
- dvobj->irq_alloc = 0;
- }
+ return err?_FAIL:_SUCCESS;
}
-int sdio_alloc_irq(struct dvobj_priv *dvobj)
+void sdio_free_irq(struct dvobj_priv *dvobj)
{
PSDIO_DATA psdio_data;
struct sdio_func *func;
int err;
- psdio_data = &dvobj->intf_data;
- func = psdio_data->func;
+ if (dvobj->irq_alloc) {
+ psdio_data = &dvobj->intf_data;
+ func = psdio_data->func;
- sdio_claim_host(func);
+ if (func) {
+ sdio_claim_host(func);
+ err = sdio_release_irq(func);
+ if (err)
+ DBG_871X_LEVEL(_drv_err_,"%s: sdio_release_irq FAIL(%d)!\n", __func__, err);
+ sdio_release_host(func);
+ }
+ dvobj->irq_alloc = 0;
+ }
+}
- err = sdio_claim_irq(func, &sd_sync_int_hdl);
- if (err)
- printk(KERN_CRIT "%s: sdio_claim_irq FAIL(%d)!\n", __func__, err);
- else
- dvobj->irq_alloc = 1;
+#ifdef CONFIG_GPIO_WAKEUP
+extern unsigned int oob_irq;
+static irqreturn_t gpio_hostwakeup_irq_thread(int irq, void *data)
+{
+ PADAPTER padapter = (PADAPTER)data;
+ DBG_871X_LEVEL(_drv_always_, "gpio_hostwakeup_irq_thread\n");
+ /* Disable interrupt before calling handler */
+ //disable_irq_nosync(oob_irq);
+ rtw_lock_suspend_timeout(HZ/2);
+ return IRQ_HANDLED;
+}
- sdio_release_host(func);
+static u8 gpio_hostwakeup_alloc_irq(PADAPTER padapter)
+{
+ int err;
+ if (oob_irq == 0)
+ return _FAIL;
+ /* dont set it IRQF_TRIGGER_LOW, or wowlan */
+ /* power is high after suspend */
+ /* and failing can prevent can not sleep issue if */
+ /* wifi gpio12 pin is not linked with CPU */
+ err = request_threaded_irq(oob_irq, gpio_hostwakeup_irq_thread, NULL,
+ //IRQF_TRIGGER_LOW | IRQF_ONESHOT,
+ IRQF_TRIGGER_FALLING,
+ "rtw_wifi_gpio_wakeup", padapter);
+ if (err < 0) {
+ DBG_871X("Oops: can't allocate gpio irq %d err:%d\n", oob_irq, err);
+ return _FALSE;
+ } else {
+ DBG_871X("allocate gpio irq %d ok\n", oob_irq);
+}
- return err?_FAIL:_SUCCESS;
+ enable_irq_wake(oob_irq);
+ return _SUCCESS;
+}
+
+static void gpio_hostwakeup_free_irq(PADAPTER padapter)
+{
+ if (oob_irq == 0)
+ return;
+ disable_irq_wake(oob_irq);
+ free_irq(oob_irq, padapter);
}
+#endif
static u32 sdio_init(struct dvobj_priv *dvobj)
{
@@ -283,14 +355,15 @@ _func_enter_;
_rtw_mutex_init(&dvobj->h2c_fwcmd_mutex);
_rtw_mutex_init(&dvobj->setch_mutex);
_rtw_mutex_init(&dvobj->setbw_mutex);
-
+
+ sdio_set_drvdata(func, dvobj);
+ dvobj->processing_dev_remove = _FALSE;
+
#ifdef CONFIG_WOWLAN
sdio_claim_host(func);
- sdio_set_drvdata(func, dvobj);
mmc_host = func->card->host;
+ sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER);
sdio_release_host(func);
-#else
- sdio_set_drvdata(func, dvobj);
#endif
psdio = &dvobj->intf_data;
@@ -300,7 +373,7 @@ _func_enter_;
RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("%s: initialize SDIO Failed!\n", __FUNCTION__));
goto free_dvobj;
}
-
+ rtw_reset_continual_io_error(dvobj);
status = _SUCCESS;
free_dvobj:
@@ -388,10 +461,11 @@ static void sd_intf_stop(PADAPTER padapter)
/*
* Do deinit job corresponding to netdev_open()
*/
-static void rtw_dev_unload(PADAPTER padapter)
+void rtw_dev_unload(PADAPTER padapter)
{
struct net_device *pnetdev = (struct net_device*)padapter->pnetdev;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct pwrctrl_priv *pwrctl = adapter_to_pwrctl(padapter);
RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("+rtw_dev_unload\n"));
@@ -415,7 +489,7 @@ static void rtw_dev_unload(PADAPTER padapter)
#endif
RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("@ rtw_dev_unload: stop intf complete!\n"));
- if (!padapter->pwrctrlpriv.bInternalAutoSuspend)
+ if (!pwrctl->bInternalAutoSuspend)
rtw_stop_drv_threads(padapter);
RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("@ rtw_dev_unload: stop thread complete!\n"));
@@ -423,8 +497,8 @@ static void rtw_dev_unload(PADAPTER padapter)
if (padapter->bSurpriseRemoved == _FALSE)
{
#ifdef CONFIG_WOWLAN
- if (padapter->pwrctrlpriv.bSupportRemoteWakeup == _TRUE &&
- padapter->pwrctrlpriv.wowlan_mode ==_TRUE) {
+ if (pwrctl->bSupportRemoteWakeup == _TRUE &&
+ pwrctl->wowlan_mode ==_TRUE) {
DBG_871X_LEVEL(_drv_always_, "%s bSupportRemoteWakeup==_TRUE do not run rtw_hal_deinit()\n",__FUNCTION__);
}
else
@@ -577,18 +651,22 @@ static void rtw_sdio_if1_deinit(_adapter *if1)
#endif
#endif
+#ifdef CONFIG_GPIO_WAKEUP
+ gpio_hostwakeup_free_irq(if1);
+#endif
+/*
if(if1->DriverState != DRIVER_DISAPPEAR) {
if(pnetdev) {
unregister_netdev(pnetdev); //will call netdev_close()
rtw_proc_remove_one(pnetdev);
}
}
-
+*/
rtw_cancel_all_timer(if1);
#ifdef CONFIG_WOWLAN
- if1->pwrctrlpriv.wowlan_mode=_FALSE;
- DBG_871X_LEVEL(_drv_always_, "%s wowlan_mode:%d\n", __func__, if1->pwrctrlpriv.wowlan_mode);
+ adapter_to_pwrctl(if1)->wowlan_mode=_FALSE;
+ DBG_871X_LEVEL(_drv_always_, "%s wowlan_mode:%d\n", __func__, adapter_to_pwrctl(if1)->wowlan_mode);
#endif //CONFIG_WOWLAN
rtw_dev_unload(if1);
@@ -599,7 +677,7 @@ static void rtw_sdio_if1_deinit(_adapter *if1)
#ifdef CONFIG_IOCTL_CFG80211
if (if1->rtw_wdev)
{
- rtw_wdev_unregister(if1->rtw_wdev);
+ //rtw_wdev_unregister(if1->rtw_wdev);
rtw_wdev_free(if1->rtw_wdev);
}
#endif
@@ -616,6 +694,26 @@ static void rtw_sdio_if1_deinit(_adapter *if1)
}
+#ifdef CONFIG_PLATFORM_SPRD
+#ifdef CONFIG_PM_RUNTIME
+#include <linux/pm_runtime.h>
+static void rtw_start_runtime(struct sdio_func *func)
+{
+ unsigned long flags;
+ struct mmc_card *card = func->card;
+ struct mmc_host *host = card->host;
+
+ DBG_871X("%s \n", __func__);
+
+ pm_runtime_no_callbacks(&func->dev);
+ pm_suspend_ignore_children(&func->dev, true);
+ pm_runtime_set_autosuspend_delay(&func->dev, 50);
+ pm_runtime_use_autosuspend(&func->dev);
+ pm_runtime_put_autosuspend(&func->dev);
+}
+#endif
+#endif
+
/*
* drv_init() - a device potentially for us
*
@@ -672,6 +770,10 @@ static int rtw_drv_init(
if (sdio_alloc_irq(dvobj) != _SUCCESS)
goto free_if2;
+#ifdef CONFIG_GPIO_WAKEUP
+ gpio_hostwakeup_alloc_irq(if1);
+#endif
+
#ifdef CONFIG_GLOBAL_UI_PID
if(ui_pid[1]!=0) {
DBG_871X("ui_pid[1]:%d\n",ui_pid[1]);
@@ -679,6 +781,12 @@ static int rtw_drv_init(
}
#endif
+#ifdef CONFIG_PLATFORM_SPRD
+#ifdef CONFIG_PM_RUNTIME
+ rtw_start_runtime(func);
+#endif
+#endif
+
RT_TRACE(_module_hci_intfs_c_,_drv_err_,("-871x_drv - drv_init, success!\n"));
status = _SUCCESS;
@@ -700,7 +808,7 @@ free_dvobj:
exit:
return status == _SUCCESS?0:-ENODEV;
}
-
+extern void rtw_unregister_netdevs(struct dvobj_priv *dvobj);
static void rtw_dev_remove(struct sdio_func *func)
{
struct dvobj_priv *dvobj = sdio_get_drvdata(func);
@@ -710,6 +818,9 @@ _func_enter_;
RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("+rtw_dev_remove\n"));
+ dvobj->processing_dev_remove = _TRUE;
+ rtw_unregister_netdevs(dvobj);
+
if (padapter->bSurpriseRemoved == _FALSE) {
int err;
@@ -727,7 +838,7 @@ _func_enter_;
MPT_DeInitAdapter(padapter);
#endif
#if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
- rtw_unregister_early_suspend(&padapter->pwrctrlpriv);
+ rtw_unregister_early_suspend(dvobj_to_pwrctl(dvobj));
#endif
rtw_pm_set_ips(padapter, IPS_NONE);
@@ -752,12 +863,257 @@ _func_enter_;
_func_exit_;
}
+#if 1
+
+#ifdef CONFIG_WOWLAN
+static int rtw_suspend_wow(_adapter *padapter,struct sdio_func *func )
+{
+ _adapter *pbuddy_adapter = padapter->pbuddy_adapter;
+
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct net_device *pnetdev = padapter->pnetdev;
+ struct wifidirect_info* pwdinfo = &padapter->wdinfo;
+ int ret = 0;
+
+ struct wowlan_ioctl_param poidparam;
+ u8 ps_mode;
+
+ _func_enter_;
+
+ if (check_fwstate(pmlmepriv, _FW_LINKED))
+ pwrpriv->wowlan_mode = _TRUE;
+ else
+ pwrpriv->wowlan_mode = _FALSE;
+
+ rtw_cancel_all_timer(padapter);
+
+ if (pwrpriv->wowlan_mode == _TRUE) {
+ // 1. stop thread
+ padapter->bDriverStopped = _TRUE; //for stop thread
+ rtw_stop_drv_threads(padapter);
+ padapter->bDriverStopped = _FALSE; //for 32k command
+#ifdef CONFIG_POWER_SAVING
+ rtw_set_ps_mode(padapter, PS_MODE_ACTIVE, 0, 0);
+#endif
+ // 2. disable interrupt
+ rtw_hal_disable_interrupt(padapter); // It need wait for leaving 32K.
+
+ // 2.1 clean interupt
+ if (padapter->HalFunc.clear_interrupt)
+ padapter->HalFunc.clear_interrupt(padapter);
+
+ // 2.2 free irq
+ sdio_free_irq(adapter_to_dvobj(padapter));
+ }
+ else {
+ LeaveAllPowerSaveMode(padapter);
+ }
+
+ if(pnetdev){
+ if(pwrpriv->wowlan_mode == _TRUE) {
+ rtw_netif_stop_queue(pnetdev);
+ } else {
+ netif_carrier_off(pnetdev);
+ rtw_netif_stop_queue(pnetdev);
+ }
+ }
+
+ DBG_871X("wowlan_mode: %d\n", pwrpriv->wowlan_mode);
+
+ if ((pwrpriv->bSupportRemoteWakeup == _TRUE) &&
+ (pwrpriv->wowlan_mode == _TRUE)) {
+ poidparam.subcode = WOWLAN_ENABLE;
+ padapter->HalFunc.SetHwRegHandler(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
+ } else {
+ //s2-1. issue rtw_disassoc_cmd to fw
+ rtw_disassoc_cmd(padapter, 0, _FALSE);
+ }
+
+
+#ifdef CONFIG_LAYER2_ROAMING_RESUME
+ if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED) && rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) )
+ {
+ DBG_871X("%s %s(" MAC_FMT "), length:%d assoc_ssid.length:%d\n",__FUNCTION__,
+ pmlmepriv->cur_network.network.Ssid.Ssid,
+ MAC_ARG(pmlmepriv->cur_network.network.MacAddress),
+ pmlmepriv->cur_network.network.Ssid.SsidLength,
+ pmlmepriv->assoc_ssid.SsidLength);
+
+ if (pwrpriv->wowlan_mode != _TRUE)
+ rtw_set_roaming(padapter, 1);
+ else
+ rtw_set_roaming(padapter, 0);
+ }
+#endif //CONFIG_LAYER2_ROAMING_RESUME
+
+ if (pwrpriv->wowlan_mode == _FALSE)
+ {
+ //s2-2. indicate disconnect to os
+ rtw_indicate_disconnect(padapter);
+ //s2-3.
+ rtw_free_assoc_resources(padapter, 1);
+
+ //s2-4.
+ rtw_free_network_queue(padapter, _TRUE);
+
+ rtw_led_control(padapter, LED_CTL_POWER_OFF);
+
+ rtw_dev_unload(padapter);
+
+ if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)){
+ DBG_871X_LEVEL(_drv_always_, "%s: fw_under_survey\n", __func__);
+ rtw_indicate_scan_done(padapter, 1);
+ }
+
+ if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING)){
+ DBG_871X_LEVEL(_drv_always_, "%s: fw_under_linking\n", __func__);
+ rtw_indicate_disconnect(padapter);
+ }
+
+ sdio_deinit(adapter_to_dvobj(padapter));
+ }
+ else
+ {
+ DBG_871X_LEVEL(_drv_always_, "%s: wowmode suspending\n", __func__);
+
+ if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE)
+ {
+ DBG_871X_LEVEL(_drv_always_, "%s: fw_under_survey\n", __func__);
+ rtw_indicate_scan_done(padapter, 1);
+ clr_fwstate(pmlmepriv, _FW_UNDER_SURVEY);
+ }
+#ifdef CONFIG_POWER_SAVING
+ rtw_set_ps_mode(padapter, PS_MODE_MIN, 0, 0);
+#endif
+ }
+
+exit:
+
+#if (!(defined ANDROID_2X)) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
+ //Android 4.0 don't support WIFI close power
+ //or power down or clock will close after wifi resume,
+ //this is sprd's bug in Android 4.0, but sprd don't
+ //want to fix it.
+ //we have test power under 8723as, power consumption is ok
+ if (func) {
+ mmc_pm_flag_t pm_flag = 0;
+ pm_flag = sdio_get_host_pm_caps(func);
+ DBG_871X("cmd: %s: suspend: PM flag = 0x%x\n", sdio_func_id(func), pm_flag);
+ if (!(pm_flag & MMC_PM_KEEP_POWER)) {
+ DBG_871X("%s: cannot remain alive while host is suspended\n", sdio_func_id(func));
+ return -ENOSYS;
+ } else {
+ DBG_871X("cmd: suspend with MMC_PM_KEEP_POWER\n");
+ sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER);
+ }
+ }
+#endif
+
+
+ _func_exit_;
+ return ret;
+}
+#endif //#ifdef CONFIG_WOWLAN
+
+static int rtw_sdio_suspend(struct device *dev)
+{
+ struct sdio_func *func =dev_to_sdio_func(dev);
+ struct dvobj_priv *psdpriv = sdio_get_drvdata(func);
+ _adapter *padapter = psdpriv->if1;
+
+ struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(psdpriv);
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct net_device *pnetdev = padapter->pnetdev;
+ int ret = 0;
+#ifdef CONFIG_PLATFORM_SPRD
+ u32 value;
+#endif // CONFIG_PLATFORM_SPRD
+
+ u32 start_time = rtw_get_current_time();
+
+ _func_enter_;
+
+ DBG_871X_LEVEL(_drv_always_, "sdio suspend start\n");
+ DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);
+
+ pwrpriv->bInSuspend = _TRUE;
+
+#if (!(defined ANDROID_2X) && (defined CONFIG_PLATFORM_SPRD))
+ if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE) {
+ //we should not suspend softap, bcm also do like this
+ DBG_871X("%s should not suspend hw and system in AP mode\n",__FUNCTION__);
+ goto exit;
+ }
+#endif
+
+ while (pwrpriv->bips_processing == _TRUE)
+ rtw_msleep_os(1);
+
+ if((!padapter->bup) || (padapter->bDriverStopped)||(padapter->bSurpriseRemoved))
+ {
+ DBG_871X("%s bup=%d bDriverStopped=%d bSurpriseRemoved = %d\n", __FUNCTION__
+ ,padapter->bup, padapter->bDriverStopped,padapter->bSurpriseRemoved);
+ goto exit;
+ }
+
+
+#ifdef CONFIG_WOWLAN
+ rtw_suspend_wow(padapter,func);
+#else
+ rtw_suspend_common(padapter);
+#endif
+
+ // interface deinit
+ sdio_deinit(adapter_to_dvobj(padapter));
+
+ DBG_871X_LEVEL(_drv_always_, "sdio suspend success in %d ms\n",
+ rtw_get_passing_time_ms(start_time));
+
+exit:
+ if (func) {
+ mmc_pm_flag_t pm_flag = 0;
+ pm_flag = sdio_get_host_pm_caps(func);
+ DBG_871X("cmd: %s: suspend: PM flag = 0x%x\n", sdio_func_id(func), pm_flag);
+ if (!(pm_flag & MMC_PM_KEEP_POWER)) {
+ DBG_871X("%s: cannot remain alive while host is suspended\n", sdio_func_id(func));
+ return -ENOSYS;
+ } else {
+ DBG_871X("cmd: suspend with MMC_PM_KEEP_POWER\n");
+ sdio_set_host_pm_flags(func, MMC_PM_KEEP_POWER);
+ }
+ }
+
+#ifdef CONFIG_PLATFORM_SPRD
+#ifndef CONFIG_WOWLAN
+#ifdef CONFIG_RTL8188E
+#ifdef ANDROID_2X
+ /*
+ * Pull down wifi power pin here
+ * Pull up wifi power pin before sdio resume.
+ */
+ rtw_wifi_gpio_wlan_ctrl(WLAN_POWER_OFF);
+#endif // ANDROID_2X
+#endif // CONFIG_RTL8188E
+#endif // CONFIG_WOWLAN
+#endif // CONFIG_PLATFORM_SPRD
+
+
+ DBG_871X("<=== %s return %d.............. in %dms\n", __FUNCTION__
+ , ret, rtw_get_passing_time_ms(start_time));
+
+ _func_exit_;
+ return ret;
+}
+
+
+#else
static int rtw_sdio_suspend(struct device *dev)
{
struct sdio_func *func =dev_to_sdio_func(dev);
struct dvobj_priv *psdpriv = sdio_get_drvdata(func);
_adapter *padapter = psdpriv->if1;
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(psdpriv);
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct net_device *pnetdev = padapter->pnetdev;
int ret = 0;
@@ -777,11 +1133,21 @@ static int rtw_sdio_suspend(struct device *dev)
DBG_871X_LEVEL(_drv_always_, "sdio suspend start\n");
DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);
+ pwrpriv->bInSuspend = _TRUE;
+
+#if (!(defined ANDROID_2X) && (defined CONFIG_PLATFORM_SPRD))
+ if(check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE) {
+ //we should not suspend softap, bcm also do like this
+ DBG_871X("%s should not suspend hw and system in AP mode\n",__FUNCTION__);
+ goto exit;
+ }
+#endif
+
#ifdef CONFIG_WOWLAN
if (check_fwstate(pmlmepriv, _FW_LINKED))
- padapter->pwrctrlpriv.wowlan_mode = _TRUE;
+ pwrpriv->wowlan_mode = _TRUE;
else
- padapter->pwrctrlpriv.wowlan_mode = _FALSE;
+ pwrpriv->wowlan_mode = _FALSE;
#endif
//pwrpriv->bInSuspend = _TRUE;
@@ -798,40 +1164,64 @@ static int rtw_sdio_suspend(struct device *dev)
rtw_cancel_all_timer(padapter);
- LeaveAllPowerSaveMode(padapter);
- //for power down during suspend, need leave ips mode before entering power down.
- pwrpriv->bInSuspend = _TRUE;
-
- //padapter->net_closed = _TRUE;
- //s1.
#ifdef CONFIG_WOWLAN
- if(pnetdev && !padapter->pwrctrlpriv.wowlan_mode)
- {
+ if (pwrpriv->wowlan_mode == _TRUE) {
+ // 1. stop thread
+ padapter->bDriverStopped = _TRUE; //for stop thread
+ rtw_stop_drv_threads(padapter);
+ padapter->bDriverStopped = _FALSE; //for 32k command
+#ifdef CONFIG_POWER_SAVING
+ rtw_set_ps_mode(padapter, PS_MODE_ACTIVE, 0, 0);
+#endif
+ // 2. disable interrupt
+ rtw_hal_disable_interrupt(padapter); // It need wait for leaving 32K.
+
+ // 2.1 clean interupt
+ if (padapter->HalFunc.clear_interrupt)
+ padapter->HalFunc.clear_interrupt(padapter);
+
+ // 2.2 free irq
+ sdio_free_irq(adapter_to_dvobj(padapter));
+ } else {
+ LeaveAllPowerSaveMode(padapter);
+ }
+
+ if(pnetdev){
+ if(pwrpriv->wowlan_mode == _TRUE) {
+ rtw_netif_stop_queue(pnetdev);
+ } else {
netif_carrier_off(pnetdev);
rtw_netif_stop_queue(pnetdev);
+ }
+ }
+
+ DBG_871X("wowlan_mode: %d\n", pwrpriv->wowlan_mode);
+
+ if ((pwrpriv->bSupportRemoteWakeup == _TRUE) &&
+ (pwrpriv->wowlan_mode == _TRUE)) {
+ poidparam.subcode = WOWLAN_ENABLE;
+ padapter->HalFunc.SetHwRegHandler(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
} else {
- DBG_871X_LEVEL(_drv_always_, "wowlan_mode: NO netif_off and stop queuq\n");
+ //s2-1. issue rtw_disassoc_cmd to fw
+ rtw_disassoc_cmd(padapter, 0, _FALSE);
}
-#else
+#else // !CONFIG_WOWLAN
+ LeaveAllPowerSaveMode(padapter);
+
if(pnetdev)
{
netif_carrier_off(pnetdev);
rtw_netif_stop_queue(pnetdev);
}
-#endif
-#ifdef CONFIG_WOWLAN
- DBG_871X_LEVEL(_drv_always_, "wowlan_mode: %d\n", padapter->pwrctrlpriv.wowlan_mode);
- if(padapter->pwrctrlpriv.bSupportRemoteWakeup==_TRUE &&
- padapter->pwrctrlpriv.wowlan_mode==_TRUE){
- poidparam.subcode=WOWLAN_ENABLE;
- padapter->HalFunc.SetHwRegHandler(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
- } else
-#else
- {
- //s2.
+
rtw_disassoc_cmd(padapter, 0, _FALSE);
- }
-#endif //CONFIG_WOWLAN
+#endif // !CONFIG_WOWLAN
+
+ //for power down during suspend, need leave ips mode before entering power down.
+ //pwrpriv->bInSuspend = _TRUE;
+
+ //padapter->net_closed = _TRUE;
+ //s1.
#ifdef CONFIG_LAYER2_ROAMING_RESUME
if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED) )
@@ -841,13 +1231,20 @@ static int rtw_sdio_suspend(struct device *dev)
MAC_ARG(pmlmepriv->cur_network.network.MacAddress),
pmlmepriv->cur_network.network.Ssid.SsidLength,
pmlmepriv->assoc_ssid.SsidLength);
-
+#ifdef CONFIG_WOWLAN
+ if (pwrpriv->wowlan_mode != _TRUE)
+ rtw_set_roaming(padapter, 1);
+ else
+ rtw_set_roaming(padapter, 0);
+#else //CONFIG_WOWLAN
rtw_set_roaming(padapter, 1);
+#endif // !CONFIG_WOWLAN
}
-#endif
+#endif //CONFIG_LAYER2_ROAMING_RESUME
#ifdef CONFIG_WOWLAN
- if(!padapter->pwrctrlpriv.wowlan_mode){
+ if (pwrpriv->wowlan_mode == _FALSE)
+ {
//s2-2. indicate disconnect to os
rtw_indicate_disconnect(padapter);
//s2-3.
@@ -871,28 +1268,20 @@ static int rtw_sdio_suspend(struct device *dev)
}
sdio_deinit(adapter_to_dvobj(padapter));
- } else {
- DBG_871X_LEVEL(_drv_always_, "%s: wowmode suspending, DriverStopped: %d\n",
- __func__, padapter->bDriverStopped);
-
- padapter->bDriverStopped = _TRUE; //for stop thread
-
- rtw_stop_drv_threads(padapter);
-
- padapter->bDriverStopped = _FALSE; //for 32k command
+ }
+ else
+ {
+ DBG_871X_LEVEL(_drv_always_, "%s: wowmode suspending\n", __func__);
- if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)){
+ if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == _TRUE)
+ {
DBG_871X_LEVEL(_drv_always_, "%s: fw_under_survey\n", __func__);
rtw_indicate_scan_done(padapter, 1);
+ clr_fwstate(pmlmepriv, _FW_UNDER_SURVEY);
}
- if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING)){
- DBG_871X_LEVEL(_drv_always_, "%s: fw_under_linking\n", __func__);
- rtw_indicate_disconnect(padapter);
- }
-
+#ifdef CONFIG_POWER_SAVING
rtw_set_ps_mode(padapter, PS_MODE_MIN, 0, 0);
-
- sdio_free_irq(adapter_to_dvobj(padapter));
+#endif
}
#else
//s2-2. indicate disconnect to os
@@ -920,8 +1309,10 @@ static int rtw_sdio_suspend(struct device *dev)
rtw_get_passing_time_ms(start_time));
exit:
-
-#if (defined CONFIG_WOWLAN) || (!(defined ANDROID_2X) && (defined CONFIG_PLATFORM_SPRD))
+
+//#if (defined CONFIG_WOWLAN) || (!(defined ANDROID_2X) && (defined CONFIG_PLATFORM_SPRD))
+#if (defined CONFIG_WOWLAN)
+#if (!(defined ANDROID_2X)) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
//Android 4.0 don't support WIFI close power
//or power down or clock will close after wifi resume,
//this is sprd's bug in Android 4.0, but sprd don't
@@ -940,15 +1331,18 @@ exit:
}
}
#endif
+#endif
#ifdef CONFIG_PLATFORM_SPRD
#ifndef CONFIG_WOWLAN
#ifdef CONFIG_RTL8188E
+#ifdef ANDROID_2X
/*
* Pull down wifi power pin here
* Pull up wifi power pin before sdio resume.
*/
rtw_wifi_gpio_wlan_ctrl(WLAN_POWER_OFF);
+#endif // ANDROID_2X
#endif // CONFIG_RTL8188E
#endif // CONFIG_WOWLAN
#endif // CONFIG_PLATFORM_SPRD
@@ -959,19 +1353,243 @@ exit:
_func_exit_;
return ret;
}
-
+#endif
extern int pm_netdev_open(struct net_device *pnetdev,u8 bnormal);
+
+#if 1
+#ifdef CONFIG_WOWLAN
+int rtw_resume_process_wow(_adapter *padapter)
+{
+ struct net_device *pnetdev = padapter->pnetdev;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
+ int ret = 0;
+
+ u32 value = 0;
+ struct wowlan_ioctl_param poidparam;
+ struct sta_info *psta = NULL;
+
+ _func_enter_;
+
+ if (pwrpriv->wowlan_mode == _FALSE){
+
+ // interface init
+ if (sdio_init(adapter_to_dvobj(padapter)) != _SUCCESS)
+ {
+ ret = -1;
+ RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("%s: initialize SDIO Failed!!\n", __FUNCTION__));
+ goto exit;
+ }
+
+ rtw_hal_disable_interrupt(padapter);
+
+ if (padapter->HalFunc.clear_interrupt)
+ padapter->HalFunc.clear_interrupt(padapter);
+
+ if (sdio_alloc_irq(adapter_to_dvobj(padapter)) != _SUCCESS)
+ {
+ ret = -1;
+ RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("%s: sdio_alloc_irq Failed!!\n", __FUNCTION__));
+ goto exit;
+ }
+
+ rtw_reset_drv_sw(padapter);
+ pwrpriv->bkeepfwalive = _FALSE;
+
+ DBG_871X("bkeepfwalive(%x)\n",pwrpriv->bkeepfwalive);
+
+ if(pm_netdev_open(pnetdev,_TRUE) != 0) {
+ ret = -1;
+ goto exit;
+ }
+
+ netif_device_attach(pnetdev);
+ netif_carrier_on(pnetdev);
+ }
+ else //pwrpriv->wowlan_mode == _TRUE
+ {
+
+#ifdef CONFIG_POWER_SAVING
+#ifdef CONFIG_LPS
+ rtw_set_ps_mode(padapter, PS_MODE_ACTIVE, 0, 0);
+#endif //CONFIG_LPS
+#endif
+
+ pwrpriv->bFwCurrentInPSMode = _FALSE;
+
+ rtw_hal_disable_interrupt(padapter);
+
+ if (padapter->HalFunc.clear_interrupt)
+ padapter->HalFunc.clear_interrupt(padapter);
+
+ if (sdio_alloc_irq(adapter_to_dvobj(padapter)) != _SUCCESS) {
+ ret = -1;
+ RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("%s: sdio_alloc_irq Failed!!\n", __FUNCTION__));
+ goto exit;
+ }
+
+ //Disable WOW, set H2C command
+ poidparam.subcode=WOWLAN_DISABLE;
+ padapter->HalFunc.SetHwRegHandler(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
+
+ psta = rtw_get_stainfo(&padapter->stapriv, get_bssid(&padapter->mlmepriv));
+ if (psta) {
+ set_sta_rate(padapter, psta);
+ }
+
+ padapter->bDriverStopped = _FALSE;
+
+ DBG_871X("%s: wowmode resuming, DriverStopped:%d\n", __func__, padapter->bDriverStopped);
+ rtw_start_drv_threads(padapter);
+
+ rtw_hal_enable_interrupt(padapter);
+
+ // start netif queue
+ if(pnetdev) {
+ if(!rtw_netif_queue_stopped(pnetdev))
+ rtw_netif_start_queue(pnetdev);
+ else
+ rtw_netif_wake_queue(pnetdev);
+ }
+ }
+
+
+#ifdef CONFIG_LAYER2_ROAMING_RESUME
+
+ if (pwrpriv->wowlan_wake_reason == FWDecisionDisconnect ||
+ pwrpriv->wowlan_wake_reason == Rx_DisAssoc ||
+ pwrpriv->wowlan_wake_reason == Rx_DeAuth) {
+
+ DBG_871X("%s: disconnect reason: %02x\n", __func__,
+ pwrpriv->wowlan_wake_reason);
+ rtw_indicate_disconnect(padapter);
+ rtw_sta_media_status_rpt(padapter, rtw_get_stainfo(&padapter->stapriv,
+ get_bssid(&padapter->mlmepriv)), 0);
+ rtw_free_assoc_resources(padapter, 1);
+ } else {
+ DBG_871X("%s: do roaming\n", __func__);
+ rtw_roaming(padapter, NULL);
+ }
+
+#endif //CONFIG_LAYER2_ROAMING_RESUME
+
+ if (pwrpriv->wowlan_wake_reason == Rx_GTK ||
+ pwrpriv->wowlan_wake_reason == Rx_DisAssoc ||
+ pwrpriv->wowlan_wake_reason == Rx_DeAuth) {
+ DBG_871X("%s: set ext wake lock\n", __func__);
+ rtw_lock_ext_suspend_timeout(1500);
+ }
+
+ if (pwrpriv->wowlan_mode == _TRUE) {
+ pwrpriv->bips_processing = _FALSE;
+ _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
+ rtw_set_pwr_state_check_timer(pwrpriv);
+ pwrpriv->bips_processing = _FALSE;
+ rtw_unlock_suspend();
+ } else {
+ DBG_871X_LEVEL(_drv_always_, "do not reset timer\n");
+ }
+
+ pwrpriv->wowlan_mode =_FALSE;
+
+exit:
+
+ _func_exit_;
+
+ return ret;
+}
+#endif //CONFIG_WOWLAN
+
+int rtw_resume_process_normal(_adapter *padapter)
+{
+ struct net_device *pnetdev= padapter->pnetdev;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
+ struct mlme_priv *mlmepriv = &padapter->mlmepriv;
+ int ret = 0;
+
+ _func_enter_;
+ // interface init
+ if (sdio_init(adapter_to_dvobj(padapter)) != _SUCCESS)
+ {
+ ret = -1;
+ RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("%s: initialize SDIO Failed!!\n", __FUNCTION__));
+ goto exit;
+ }
+ rtw_hal_disable_interrupt(padapter);
+ if (sdio_alloc_irq(adapter_to_dvobj(padapter)) != _SUCCESS)
+ {
+ ret = -1;
+ RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("%s: sdio_alloc_irq Failed!!\n", __FUNCTION__));
+ goto exit;
+ }
+
+ if(rtw_resume_common(padapter)!= 0) {
+ DBG_871X("%s rtw_resume_common failed\n",__FUNCTION__);
+ goto exit;
+ }
+ _func_exit_;
+exit:
+ return ret;
+}
+
+int rtw_resume_process(_adapter *padapter)
+{
+ struct net_device *pnetdev;
+ struct pwrctrl_priv *pwrpriv = NULL;
+
+ int ret = 0;
+ u32 start_time = rtw_get_current_time();
+
+ _func_enter_;
+
+ DBG_871X_LEVEL(_drv_always_, "sdio resume start\n");
+ DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);
+
+ if (padapter) {
+ pnetdev = padapter->pnetdev;
+ pwrpriv = adapter_to_pwrctl(padapter);
+ } else {
+ ret = -1;
+ goto exit;
+ }
+
+#ifdef CONFIG_WOWLAN
+ rtw_resume_process_wow( padapter);
+#else //!CONFIG_WOWLAN
+ rtw_resume_process_normal( padapter);
+#endif
+
+ if( padapter->pid[1]!=0) {
+ DBG_871X("pid[1]:%d\n",padapter->pid[1]);
+ rtw_signal_process(padapter->pid[1], SIGUSR2);
+ }
+
+ #ifdef CONFIG_RESUME_IN_WORKQUEUE
+ rtw_unlock_suspend();
+ #endif //CONFIG_RESUME_IN_WORKQUEUE
+
+exit:
+ if (pwrpriv)
+ pwrpriv->bInSuspend = _FALSE;
+ DBG_871X_LEVEL(_drv_always_, "sdio resume ret:%d in %d ms\n", ret,
+ rtw_get_passing_time_ms(start_time));
+
+ _func_exit_;
+
+ return ret;
+}
+#else
int rtw_resume_process(_adapter *padapter)
{
struct net_device *pnetdev;
- struct pwrctrl_priv *pwrpriv;
+ struct pwrctrl_priv *pwrpriv = NULL;
u8 is_pwrlock_hold_by_caller;
u8 is_directly_called_by_auto_resume;
int ret = 0;
u32 start_time = rtw_get_current_time();
#ifdef CONFIG_WOWLAN
u32 value = 0;
- struct wowlan_ioctl_param poidparam;
+ struct wowlan_ioctl_param poidparam;
+ struct sta_info *psta = NULL;
#endif // CONFIG_WOWLAN
_func_enter_;
@@ -979,15 +1597,16 @@ int rtw_resume_process(_adapter *padapter)
DBG_871X_LEVEL(_drv_always_, "sdio resume start\n");
DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);
+ if (padapter) {
+ pnetdev = padapter->pnetdev;
+ pwrpriv = adapter_to_pwrctl(padapter);
+ } else {
+ ret = -1;
+ goto exit;
+ }
+
#ifdef CONFIG_WOWLAN
- if (!padapter->pwrctrlpriv.wowlan_mode){
- if (padapter) {
- pnetdev = padapter->pnetdev;
- pwrpriv = &padapter->pwrctrlpriv;
- } else {
- ret = -1;
- goto exit;
- }
+ if (pwrpriv->wowlan_mode == _FALSE){
// interface init
if (sdio_init(adapter_to_dvobj(padapter)) != _SUCCESS)
@@ -996,7 +1615,12 @@ int rtw_resume_process(_adapter *padapter)
RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("%s: initialize SDIO Failed!!\n", __FUNCTION__));
goto exit;
}
+
rtw_hal_disable_interrupt(padapter);
+
+ if (padapter->HalFunc.clear_interrupt)
+ padapter->HalFunc.clear_interrupt(padapter);
+
if (sdio_alloc_irq(adapter_to_dvobj(padapter)) != _SUCCESS)
{
ret = -1;
@@ -1008,6 +1632,7 @@ int rtw_resume_process(_adapter *padapter)
pwrpriv->bkeepfwalive = _FALSE;
DBG_871X("bkeepfwalive(%x)\n",pwrpriv->bkeepfwalive);
+
if(pm_netdev_open(pnetdev,_TRUE) != 0) {
ret = -1;
goto exit;
@@ -1015,48 +1640,52 @@ int rtw_resume_process(_adapter *padapter)
netif_device_attach(pnetdev);
netif_carrier_on(pnetdev);
-
} else {
+#ifdef CONFIG_POWER_SAVING
+#ifdef CONFIG_LPS
rtw_set_ps_mode(padapter, PS_MODE_ACTIVE, 0, 0);
- LPS_RF_ON_check(padapter, 100);
+#endif //CONFIG_LPS
+#endif
+
+ pwrpriv->bFwCurrentInPSMode = _FALSE;
rtw_hal_disable_interrupt(padapter);
+
+ if (padapter->HalFunc.clear_interrupt)
+ padapter->HalFunc.clear_interrupt(padapter);
+
if (sdio_alloc_irq(adapter_to_dvobj(padapter)) != _SUCCESS) {
ret = -1;
RT_TRACE(_module_hci_intfs_c_, _drv_err_, ("%s: sdio_alloc_irq Failed!!\n", __FUNCTION__));
goto exit;
}
- if (padapter->HalFunc.clear_interrupt)
- padapter->HalFunc.clear_interrupt(padapter);
-
- rtw_hal_enable_interrupt(padapter);
+ //Disable WOW, set H2C command
+ poidparam.subcode=WOWLAN_DISABLE;
+ padapter->HalFunc.SetHwRegHandler(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
+ psta = rtw_get_stainfo(&padapter->stapriv, get_bssid(&padapter->mlmepriv));
+ if (psta) {
+ set_sta_rate(padapter, psta);
+ }
+
padapter->bDriverStopped = _FALSE;
+
DBG_871X("%s: wowmode resuming, DriverStopped:%d\n", __func__, padapter->bDriverStopped);
rtw_start_drv_threads(padapter);
- //Disable WOW, set H2C command
- poidparam.subcode=WOWLAN_DISABLE;
- padapter->HalFunc.SetHwRegHandler(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
+ rtw_hal_enable_interrupt(padapter);
- if (padapter) {
- pnetdev = padapter->pnetdev;
- pwrpriv = &padapter->pwrctrlpriv;
- } else {
- ret = -1;
- goto exit;
- }
+ // start netif queue
+ if(pnetdev) {
+ if(!rtw_netif_queue_stopped(pnetdev))
+ rtw_netif_start_queue(pnetdev);
+ else
+ rtw_netif_wake_queue(pnetdev);
}
-#else //CONFIG_WOWLAN
- if (padapter) {
- pnetdev = padapter->pnetdev;
- pwrpriv = &padapter->pwrctrlpriv;
- } else {
- ret = -1;
- goto exit;
- }
+ }
+#else //!CONFIG_WOWLAN
// interface init
if (sdio_init(adapter_to_dvobj(padapter)) != _SUCCESS)
@@ -1092,11 +1721,18 @@ int rtw_resume_process(_adapter *padapter)
#ifdef CONFIG_LAYER2_ROAMING_RESUME
#ifdef CONFIG_WOWLAN
- if(!padapter->pwrctrlpriv.wowlan_mode){
- rtw_roaming(padapter, NULL);
- } else if (padapter->pwrctrlpriv.wowlan_wake_reason & FWDecisionDisconnect){
+ if (pwrpriv->wowlan_wake_reason == FWDecisionDisconnect ||
+ pwrpriv->wowlan_wake_reason == Rx_DisAssoc ||
+ pwrpriv->wowlan_wake_reason == Rx_DeAuth) {
+
+ DBG_871X("%s: disconnect reason: %02x\n", __func__,
+ pwrpriv->wowlan_wake_reason);
rtw_indicate_disconnect(padapter);
- } else if (padapter->pwrctrlpriv.wowlan_wake_reason & Rx_GTK){
+ rtw_sta_media_status_rpt(padapter, rtw_get_stainfo(&padapter->stapriv,
+ get_bssid(&padapter->mlmepriv)), 0);
+ rtw_free_assoc_resources(padapter, 1);
+ } else {
+ DBG_871X("%s: do roaming\n", __func__);
rtw_roaming(padapter, NULL);
}
#else
@@ -1109,17 +1745,29 @@ int rtw_resume_process(_adapter *padapter)
#endif //CONFIG_RESUME_IN_WORKQUEUE
#ifdef CONFIG_WOWLAN
- if (padapter->pwrctrlpriv.wowlan_wake_reason & FWDecisionDisconnect)
- rtw_indicate_disconnect(padapter);
-
- padapter->pwrctrlpriv.wowlan_mode =_FALSE;
+ if (pwrpriv->wowlan_wake_reason == Rx_GTK ||
+ pwrpriv->wowlan_wake_reason == Rx_DisAssoc ||
+ pwrpriv->wowlan_wake_reason == Rx_DeAuth) {
+ DBG_871X("%s: set ext wake lock\n", __func__);
+ rtw_lock_ext_suspend_timeout(1500);
+ }
- _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
+ if (pwrpriv->wowlan_mode == _TRUE) {
+ pwrpriv->bips_processing = _FALSE;
+ _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
+ rtw_set_pwr_state_check_timer(pwrpriv);
+ pwrpriv->bips_processing = _FALSE;
+ rtw_unlock_suspend();
+ } else {
+ DBG_871X_LEVEL(_drv_always_, "do not reset timer\n");
+ }
+ pwrpriv->wowlan_mode =_FALSE;
#endif //CONFIG_WOWLAN
exit:
- pwrpriv->bInSuspend = _FALSE;
+ if (pwrpriv)
+ pwrpriv->bInSuspend = _FALSE;
DBG_871X_LEVEL(_drv_always_, "sdio resume ret:%d in %d ms\n", ret,
rtw_get_passing_time_ms(start_time));
@@ -1127,13 +1775,15 @@ exit:
return ret;
}
+#endif
+
static int rtw_sdio_resume(struct device *dev)
{
struct sdio_func *func =dev_to_sdio_func(dev);
struct dvobj_priv *psdpriv = sdio_get_drvdata(func);
_adapter *padapter = psdpriv->if1;
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(psdpriv);
int ret = 0;
DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);
@@ -1146,14 +1796,16 @@ static int rtw_sdio_resume(struct device *dev)
#else
if (rtw_is_earlysuspend_registered(pwrpriv)
#ifdef CONFIG_WOWLAN
- && !padapter->pwrctrlpriv.wowlan_mode
+ && !pwrpriv->wowlan_mode
#endif /* CONFIG_WOWLAN */
) {
/* jeff: bypass resume here, do in late_resume */
rtw_set_do_late_resume(pwrpriv, _TRUE);
} else {
+ rtw_set_do_late_resume(pwrpriv, _FALSE);
#ifdef CONFIG_WOWLAN
- rtw_lock_suspend_timeout(15 * HZ);
+ //rtw_lock_suspend_timeout(4000);
+ rtw_lock_suspend();
#endif
ret = rtw_resume_process(padapter);
}
@@ -1190,7 +1842,14 @@ static int __init rtw_drv_entry(void)
unsigned int mod_sel = mmc_pm_get_mod_type();
#endif
#endif
- DBG_871X_LEVEL(_drv_always_, "module init start version:"DRIVERVERSION"\n");
+
+#ifdef CONFIG_PLATFORM_ARM_SUN6I
+#ifdef CONFIG_MMC
+ unsigned int mod_sel = wifi_pm_get_mod_type();
+#endif //CONFIG_MMC
+#endif //CONFIG_PLATFORM_ARM_SUN6I
+
+ DBG_871X_LEVEL(_drv_always_, "module init start version:"DRIVERVERSION"\n");
// DBG_871X(KERN_INFO "+%s", __func__);
RT_TRACE(_module_hci_intfs_c_, _drv_notice_, ("+rtw_drv_entry\n"));
@@ -1218,23 +1877,40 @@ static int __init rtw_drv_entry(void)
#endif //CONFIG_PLATFORM_ARM_SUNxI
+#ifdef CONFIG_PLATFORM_ARM_SUN6I
+#ifdef CONFIG_MMC
+ DBG_871X("----- %s mod_sel: %d, sdio num: %d\n", __FUNCTION__, mod_sel, SUNXI_SDIO_WIFI_NUM);
+ if(mod_sel == SUNXI_SDIO_WIFI_NUM)
+ {
+ wifi_pm_power(1);
+ mdelay(10);
+ sw_mci_rescan_card(SDIOID, 1);
+ printk("[rtw_sdio] %s: power up, rescan card.\n", __FUNCTION__);
+ }
+ else
+ {
+ ret = -1;
+ printk("[rtw_sdio] %s: mod_sel = %d is incorrect.\n", __FUNCTION__, mod_sel);
+ }
+#endif //CONFIG_MMC
+ if(ret != 0)
+ goto exit;
+#endif //CONFIG_PLATFORM_ARM_SUN6I
+
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
//console_suspend_enabled=0;
#endif
#ifdef CONFIG_PLATFORM_SPRD
+ rtw_wifi_gpio_init();
+#ifdef ANDROID_2X
#ifdef CONFIG_RTL8188E
rtw_wifi_gpio_wlan_ctrl(WLAN_POWER_ON);
-
- DBG_8192C("%s: turn on VDD-WIFI0 3.3V\n", __func__);
- //---VDD-WIFI0 3.3V
- LDO_TurnOnLDO(LDO_LDO_WIF0);
- LDO_SetVoltLevel(LDO_LDO_WIF0,LDO_VOLT_LEVEL1);
-#endif //CONFIG_RTL8188E
+#endif //CONFIG_RTL8188E
+#endif //ANDROID_2X
/* Pull up pwd pin, make wifi leave power down mode. */
- rtw_wifi_gpio_init();
rtw_wifi_gpio_wlan_ctrl(WLAN_PWDN_ON);
#if defined(CONFIG_RTL8723A) && (MP_DRIVER == 1)
@@ -1246,18 +1922,8 @@ static int __init rtw_drv_entry(void)
sdhci_bus_scan();
#if (defined ANDROID_2X)
rtw_mdelay_os(200);
-#else
- if (1) {
- int i = 0;
-
- for (i = 0; i <= 50; i++) {
- msleep(10);
- if (sdhci_device_attached())
- break;
- printk("%s delay times:%d\n", __func__, i);
- }
- }
-#endif
+#endif //ANDROID_2X
+
#endif // CONFIG_PLATFORM_SPRD
rtw_suspend_lock_init();
@@ -1279,9 +1945,7 @@ static void __exit rtw_drv_halt(void)
{
DBG_871X_LEVEL(_drv_always_, "module exit start\n");
- rtw_android_wifictrl_func_del();
-
- rtw_suspend_lock_uninit();
+ rtw_android_wifictrl_func_del();
sdio_drvpriv.drv_registered = _FALSE;
sdio_unregister_driver(&sdio_drvpriv.r871xs_drv);
@@ -1292,17 +1956,11 @@ static void __exit rtw_drv_halt(void)
rtw_mdelay_os(5);
rtw_wifi_gpio_deinit();
+#ifdef ANDROID_2X
#ifdef CONFIG_RTL8188E
- DBG_8192C("%s: turn off VDD-WIFI0 3.3V\n", __func__);
- LDO_TurnOffLDO(LDO_LDO_WIF0);
rtw_wifi_gpio_wlan_ctrl(WLAN_POWER_OFF);
#endif // CONFIG_RTL8188E
-
-#ifdef CONFIG_WOWLAN
- if(mmc_host){
- mmc_host->pm_flags &= ~MMC_PM_KEEP_POWER;
- }
-#endif //CONFIG_WOWLAN
+#endif // ANDROID_2X
#endif // CONFIG_PLATFORM_SPRD
@@ -1316,7 +1974,17 @@ static void __exit rtw_drv_halt(void)
#endif //defined(CONFIG_MMC_SUNXI_POWER_CONTROL)
#endif //CONFIG_PLATFORM_ARM_SUNxI
- DBG_871X_LEVEL(_drv_always_, "module exit success\n");
+#ifdef CONFIG_PLATFORM_ARM_SUN6I
+#ifdef CONFIG_MMC
+ wifi_pm_power(0);
+ sw_mci_rescan_card(SDIOID, 0);
+ printk("[rtl8723as] %s: remove card, power off.\n", __FUNCTION__);
+#endif //CONFIG_MMC
+#endif //CONFIG_PLATFORM_ARM_SUN6I
+ rtw_suspend_lock_uninit();
+ DBG_871X_LEVEL(_drv_always_, "module exit success\n");
+
+ rtw_mstat_dump();
}
diff --git a/drivers/net/wireless/rtl8723as/os_dep/linux/sdio_ops_linux.c b/drivers/net/wireless/rtl8723as/os_dep/linux/sdio_ops_linux.c
index 2950a783c5aa..4a1078927f5f 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/linux/sdio_ops_linux.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/linux/sdio_ops_linux.c
@@ -22,8 +22,6 @@
#include <linux/mmc/sdio_func.h>
-#define SD_IO_TRY_CNT (8)
-
static bool rtw_sdio_claim_host_needed(struct sdio_func *func)
{
struct dvobj_priv *dvobj = sdio_get_drvdata(func);
@@ -41,14 +39,27 @@ inline void rtw_sdio_set_irq_thd(struct dvobj_priv *dvobj, _thread_hdl_ thd_hdl)
sdio_data->sys_sdio_irq_thd = thd_hdl;
}
-u8 sd_f0_read8(PSDIO_DATA psdio, u32 addr, s32 *err)
+u8 sd_f0_read8(struct intf_hdl *pintfhdl,u32 addr, s32 *err)
{
- u8 v;
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
+ u8 v=0;
struct sdio_func *func;
bool claim_needed;
_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
+
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return v;
+ }
+
func = psdio->func;
claim_needed = rtw_sdio_claim_host_needed(func);
@@ -65,13 +76,25 @@ _func_exit_;
return v;
}
-void sd_f0_write8(PSDIO_DATA psdio, u32 addr, u8 v, s32 *err)
+void sd_f0_write8(struct intf_hdl *pintfhdl, u32 addr, u8 v, s32 *err)
{
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
struct sdio_func *func;
bool claim_needed;
_func_enter_;
-
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
+
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return;
+ }
+
func = psdio->func;
claim_needed = rtw_sdio_claim_host_needed(func);
@@ -91,14 +114,25 @@ _func_exit_;
* 0 Success
* others Fail
*/
-s32 _sd_cmd52_read(PSDIO_DATA psdio, u32 addr, u32 cnt, u8 *pdata)
+s32 _sd_cmd52_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pdata)
{
- int err, i;
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
+ int err=0, i;
struct sdio_func *func;
_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
- err = 0;
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return err;
+ }
+
func = psdio->func;
for (i = 0; i < cnt; i++) {
@@ -119,21 +153,32 @@ _func_exit_;
* 0 Success
* others Fail
*/
-s32 sd_cmd52_read(PSDIO_DATA psdio, u32 addr, u32 cnt, u8 *pdata)
+s32 sd_cmd52_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pdata)
{
- int err, i;
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
+ int err=0, i;
struct sdio_func *func;
- bool claim_needed;
+ bool claim_needed;
_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
- err = 0;
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return err;
+ }
+
func = psdio->func;
claim_needed = rtw_sdio_claim_host_needed(func);
if (claim_needed)
sdio_claim_host(func);
- err = _sd_cmd52_read(psdio, addr, cnt, pdata);
+ err = _sd_cmd52_read(pintfhdl, addr, cnt, pdata);
if (claim_needed)
sdio_release_host(func);
@@ -147,14 +192,25 @@ _func_exit_;
* 0 Success
* others Fail
*/
-s32 _sd_cmd52_write(PSDIO_DATA psdio, u32 addr, u32 cnt, u8 *pdata)
+s32 _sd_cmd52_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pdata)
{
- int err, i;
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
+ int err=0, i;
struct sdio_func *func;
_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
- err = 0;
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved)!!!\n",__FUNCTION__);
+ return err;
+ }
+
func = psdio->func;
for (i = 0; i < cnt; i++) {
@@ -175,21 +231,32 @@ _func_exit_;
* 0 Success
* others Fail
*/
-s32 sd_cmd52_write(PSDIO_DATA psdio, u32 addr, u32 cnt, u8 *pdata)
+s32 sd_cmd52_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pdata)
{
- int err, i;
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
+ int err=0, i;
struct sdio_func *func;
bool claim_needed;
_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
- err = 0;
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return err;
+ }
+
func = psdio->func;
claim_needed = rtw_sdio_claim_host_needed(func);
if (claim_needed)
sdio_claim_host(func);
- err = _sd_cmd52_write(psdio, addr, cnt, pdata);
+ err = _sd_cmd52_write(pintfhdl, addr, cnt, pdata);
if (claim_needed)
sdio_release_host(func);
@@ -198,13 +265,25 @@ _func_exit_;
return err;
}
-u8 _sd_read8(PSDIO_DATA psdio, u32 addr, s32 *err)
+u8 _sd_read8(struct intf_hdl *pintfhdl, u32 addr, s32 *err)
{
- u8 v;
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
+ u8 v=0;
struct sdio_func *func;
_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved)!!!\n",__FUNCTION__);
+ return v;
+ }
+
func = psdio->func;
v = sdio_readb(func, addr, err);
@@ -217,14 +296,26 @@ _func_exit_;
return v;
}
-u8 sd_read8(PSDIO_DATA psdio, u32 addr, s32 *err)
+u8 sd_read8(struct intf_hdl *pintfhdl, u32 addr, s32 *err)
{
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
u8 v;
struct sdio_func *func;
bool claim_needed;
_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return v;
+ }
+
func = psdio->func;
claim_needed = rtw_sdio_claim_host_needed(func);
@@ -241,14 +332,26 @@ _func_exit_;
return v;
}
-u16 sd_read16(PSDIO_DATA psdio, u32 addr, s32 *err)
+u16 sd_read16(struct intf_hdl *pintfhdl, u32 addr, s32 *err)
{
- u16 v;
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
+ u16 v=0;
struct sdio_func *func;
bool claim_needed;
_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return v;
+ }
+
func = psdio->func;
claim_needed = rtw_sdio_claim_host_needed(func);
@@ -265,13 +368,25 @@ _func_exit_;
return v;
}
-u32 _sd_read32(PSDIO_DATA psdio, u32 addr, s32 *err)
+u32 _sd_read32(struct intf_hdl *pintfhdl, u32 addr, s32 *err)
{
- u32 v;
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
+ u32 v=0;
struct sdio_func *func;
_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return v;
+ }
+
func = psdio->func;
v = sdio_readl(func, addr, err);
@@ -288,8 +403,23 @@ _func_enter_;
//sdio_claim_host(func);
v = sdio_readl(func, addr, err);
//sdio_release_host(func);
- if (*err == 0)
+ if (*err == 0){
+ rtw_reset_continual_io_error(psdiodev);
break;
+ }
+ else{
+ DBG_871X(KERN_ERR "%s: (%d) addr=0x%05x, val=0x%x, try_cnt=%d\n", __func__, *err, addr, v, i);
+ if(( -ESHUTDOWN == *err ) || ( -ENODEV == *err))
+ {
+ padapter->bSurpriseRemoved = _TRUE;
+ }
+
+ if(rtw_inc_and_chk_continual_io_error(psdiodev) == _TRUE ){
+ padapter->bSurpriseRemoved = _TRUE;
+ break;
+ }
+
+ }
}
if (i==SD_IO_TRY_CNT)
@@ -304,14 +434,26 @@ _func_exit_;
return v;
}
-u32 sd_read32(PSDIO_DATA psdio, u32 addr, s32 *err)
+u32 sd_read32(struct intf_hdl *pintfhdl, u32 addr, s32 *err)
{
- u32 v;
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
+ u32 v=0;
struct sdio_func *func;
bool claim_needed;
_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return v;
+ }
+
func = psdio->func;
claim_needed = rtw_sdio_claim_host_needed(func);
@@ -333,8 +475,21 @@ _func_enter_;
if (claim_needed) sdio_claim_host(func);
v = sdio_readl(func, addr, err);
if (claim_needed) sdio_release_host(func);
- if (*err == 0)
+
+ if (*err == 0){
+ rtw_reset_continual_io_error(psdiodev);
break;
+ }else{
+ DBG_871X(KERN_ERR "%s: (%d) addr=0x%05x, val=0x%x, try_cnt=%d\n", __func__, *err, addr, v, i);
+ if(( -ESHUTDOWN == *err ) || ( -ENODEV == *err)){
+ padapter->bSurpriseRemoved = _TRUE;
+ }
+
+ if(rtw_inc_and_chk_continual_io_error(psdiodev) == _TRUE ){
+ padapter->bSurpriseRemoved = _TRUE;
+ break;
+ }
+ }
}
if (i==SD_IO_TRY_CNT)
@@ -349,13 +504,26 @@ _func_exit_;
return v;
}
-void sd_write8(PSDIO_DATA psdio, u32 addr, u8 v, s32 *err)
+void sd_write8(struct intf_hdl *pintfhdl, u32 addr, u8 v, s32 *err)
{
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
struct sdio_func *func;
bool claim_needed;
_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
+
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return ;
+ }
+
func = psdio->func;
claim_needed = rtw_sdio_claim_host_needed(func);
@@ -370,13 +538,25 @@ _func_enter_;
_func_exit_;
}
-void sd_write16(PSDIO_DATA psdio, u32 addr, u16 v, s32 *err)
+void sd_write16(struct intf_hdl *pintfhdl, u32 addr, u16 v, s32 *err)
{
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
struct sdio_func *func;
bool claim_needed;
_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return ;
+ }
+
func = psdio->func;
claim_needed = rtw_sdio_claim_host_needed(func);
@@ -391,12 +571,24 @@ _func_enter_;
_func_exit_;
}
-void _sd_write32(PSDIO_DATA psdio, u32 addr, u32 v, s32 *err)
+void _sd_write32(struct intf_hdl *pintfhdl, u32 addr, u32 v, s32 *err)
{
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
struct sdio_func *func;
_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return ;
+ }
+
func = psdio->func;
sdio_writel(func, v, addr, err);
@@ -411,8 +603,20 @@ _func_enter_;
for(i=0; i<SD_IO_TRY_CNT; i++)
{
sdio_writel(func, v, addr, err);
- if (*err == 0)
+ if (*err == 0){
+ rtw_reset_continual_io_error(psdiodev);
break;
+ }else{
+ DBG_871X(KERN_ERR "%s: (%d) addr=0x%05x, val=0x%x, try_cnt=%d\n", __func__, *err, addr, v, i);
+ if(( -ESHUTDOWN == *err ) || ( -ENODEV == *err)){
+ padapter->bSurpriseRemoved = _TRUE;
+ }
+
+ if(rtw_inc_and_chk_continual_io_error(psdiodev) == _TRUE ){
+ padapter->bSurpriseRemoved = _TRUE;
+ break;
+ }
+ }
}
if (i==SD_IO_TRY_CNT)
@@ -425,13 +629,24 @@ _func_enter_;
_func_exit_;
}
-void sd_write32(PSDIO_DATA psdio, u32 addr, u32 v, s32 *err)
+void sd_write32(struct intf_hdl *pintfhdl, u32 addr, u32 v, s32 *err)
{
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
struct sdio_func *func;
bool claim_needed;
_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved)!!!\n",__FUNCTION__);
+ return ;
+ }
+
func = psdio->func;
claim_needed = rtw_sdio_claim_host_needed(func);
@@ -453,8 +668,20 @@ _func_enter_;
if (claim_needed) sdio_claim_host(func);
sdio_writel(func, v, addr, err);
if (claim_needed) sdio_release_host(func);
- if (*err == 0)
+ if (*err == 0){
+ rtw_reset_continual_io_error(psdiodev);
break;
+ }else{
+ DBG_871X(KERN_ERR "%s: (%d) addr=0x%05x, val=0x%x, try_cnt=%d\n", __func__, *err, addr, v, i);
+ if(( -ESHUTDOWN == *err ) || ( -ENODEV == *err)){
+ padapter->bSurpriseRemoved = _TRUE;
+ }
+
+ if(rtw_inc_and_chk_continual_io_error(psdiodev) == _TRUE ){
+ padapter->bSurpriseRemoved = _TRUE;
+ break;
+ }
+ }
}
if (i==SD_IO_TRY_CNT)
@@ -481,13 +708,25 @@ _func_exit_;
* 0 Success
* others Fail
*/
-s32 _sd_read(PSDIO_DATA psdio, u32 addr, u32 cnt, void *pdata)
+s32 _sd_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata)
{
- int err;
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
+ int err= -EPERM;
struct sdio_func *func;
_func_enter_;
-
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
+
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return err;
+ }
+
func = psdio->func;
if (unlikely((cnt==1) || (cnt==2)))
@@ -530,21 +769,34 @@ _func_exit_;
* 0 Success
* others Fail
*/
-s32 sd_read(PSDIO_DATA psdio, u32 addr, u32 cnt, void *pdata)
+s32 sd_read(struct intf_hdl * pintfhdl, u32 addr, u32 cnt, void *pdata)
{
- s32 err;
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
struct sdio_func *func;
bool claim_needed;
-
+ s32 err= -EPERM;
+
+_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
+
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return err;
+ }
func = psdio->func;
claim_needed = rtw_sdio_claim_host_needed(func);
if (claim_needed)
sdio_claim_host(func);
- err = _sd_read(psdio, addr, cnt, pdata);
+ err = _sd_read(pintfhdl, addr, cnt, pdata);
if (claim_needed)
sdio_release_host(func);
-
+_func_exit_;
return err;
}
@@ -563,14 +815,26 @@ s32 sd_read(PSDIO_DATA psdio, u32 addr, u32 cnt, void *pdata)
* 0 Success
* others Fail
*/
-s32 _sd_write(PSDIO_DATA psdio, u32 addr, u32 cnt, void *pdata)
+s32 _sd_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata)
{
- int err;
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
struct sdio_func *func;
u32 size;
+ s32 err=-EPERM;
_func_enter_;
-
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
+
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return err;
+ }
+
func = psdio->func;
// size = sdio_align_size(func, cnt);
@@ -615,21 +879,34 @@ _func_exit_;
* 0 Success
* others Fail
*/
-s32 sd_write(PSDIO_DATA psdio, u32 addr, u32 cnt, void *pdata)
+s32 sd_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata)
{
- s32 err;
+ PADAPTER padapter;
+ struct dvobj_priv *psdiodev;
+ PSDIO_DATA psdio;
+
struct sdio_func *func;
bool claim_needed;
-
+ s32 err=-EPERM;
+_func_enter_;
+ padapter = pintfhdl->padapter;
+ psdiodev = pintfhdl->pintf_dev;
+ psdio = &psdiodev->intf_data;
+
+ if(padapter->bSurpriseRemoved){
+ //DBG_871X(" %s (padapter->bSurpriseRemoved )!!!\n",__FUNCTION__);
+ return err;
+ }
+
func = psdio->func;
claim_needed = rtw_sdio_claim_host_needed(func);
if (claim_needed)
sdio_claim_host(func);
- err = _sd_write(psdio, addr, cnt, pdata);
+ err = _sd_write(pintfhdl, addr, cnt, pdata);
if (claim_needed)
sdio_release_host(func);
-
+_func_exit_;
return err;
}
diff --git a/drivers/net/wireless/rtl8723as/os_dep/linux/usb_intf.c b/drivers/net/wireless/rtl8723as/os_dep/linux/usb_intf.c
index 0815a0cc9146..284d23a8d71b 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/linux/usb_intf.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/linux/usb_intf.c
@@ -66,6 +66,23 @@ int rtw_resume_process(_adapter *padapter);
static int rtw_drv_init(struct usb_interface *pusb_intf,const struct usb_device_id *pdid);
static void rtw_dev_remove(struct usb_interface *pusb_intf);
+static void rtw_dev_shutdown(struct device *dev)
+{
+ struct usb_interface *usb_intf = container_of(dev, struct usb_interface, dev);
+ struct dvobj_priv *dvobj = usb_get_intfdata(usb_intf);
+ _adapter *adapter = dvobj->if1;
+ int i;
+
+ DBG_871X("%s\n", __func__);
+
+ for (i = 0; i<dvobj->iface_nums; i++) {
+ adapter = dvobj->padapters[i];
+ adapter->bSurpriseRemoved = _TRUE;
+ }
+
+ ATOMIC_SET(&dvobj->continual_io_error, MAX_CONTINUAL_IO_ERR+1);
+}
+
#if (LINUX_VERSION_CODE<=KERNEL_VERSION(2,6,23))
/* Some useful macros to use to create struct usb_device_id */
#define USB_DEVICE_ID_MATCH_VENDOR 0x0001
@@ -320,6 +337,12 @@ struct rtw_usb_drv rtl8192c_usb_drv = {
#ifdef CONFIG_AUTOSUSPEND
.usbdrv.supports_autosuspend = 1,
#endif
+
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19))
+ .usbdrv.drvwrap.driver.shutdown = rtw_dev_shutdown,
+ #else
+ .usbdrv.driver.shutdown = rtw_dev_shutdown,
+ #endif
};
static struct rtw_usb_drv *usb_drv = &rtl8192c_usb_drv;
@@ -344,6 +367,12 @@ struct rtw_usb_drv rtl8192d_usb_drv = {
#ifdef CONFIG_AUTOSUSPEND
.usbdrv.supports_autosuspend = 1,
#endif
+
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19))
+ .usbdrv.drvwrap.driver.shutdown = rtw_dev_shutdown,
+ #else
+ .usbdrv.driver.shutdown = rtw_dev_shutdown,
+ #endif
};
static struct rtw_usb_drv *usb_drv = &rtl8192d_usb_drv;
#endif /* CONFIG_RTL8192D */
@@ -367,6 +396,12 @@ struct rtw_usb_drv rtl8723a_usb_drv = {
#ifdef CONFIG_AUTOSUSPEND
.usbdrv.supports_autosuspend = 1,
#endif
+
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19))
+ .usbdrv.drvwrap.driver.shutdown = rtw_dev_shutdown,
+ #else
+ .usbdrv.driver.shutdown = rtw_dev_shutdown,
+ #endif
};
static struct rtw_usb_drv *usb_drv = &rtl8723a_usb_drv;
@@ -391,6 +426,12 @@ struct rtw_usb_drv rtl8188e_usb_drv = {
#ifdef CONFIG_AUTOSUSPEND
.usbdrv.supports_autosuspend = 1,
#endif
+
+ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19))
+ .usbdrv.drvwrap.driver.shutdown = rtw_dev_shutdown,
+ #else
+ .usbdrv.driver.shutdown = rtw_dev_shutdown,
+ #endif
};
static struct rtw_usb_drv *usb_drv = &rtl8188e_usb_drv;
@@ -502,7 +543,7 @@ _func_enter_;
_rtw_mutex_init(&pdvobjpriv->h2c_fwcmd_mutex);
_rtw_mutex_init(&pdvobjpriv->setch_mutex);
_rtw_mutex_init(&pdvobjpriv->setbw_mutex);
-
+ pdvobjpriv->processing_dev_remove = _FALSE;
pdvobjpriv->pusbintf = usb_intf ;
pusbd = pdvobjpriv->pusbdev = interface_to_usbdev(usb_intf);
@@ -629,7 +670,7 @@ _func_enter_;
//.3 misc
_rtw_init_sema(&(pdvobjpriv->usb_suspend_sema), 0);
- rtw_reset_continual_urb_error(pdvobjpriv);
+ rtw_reset_continual_io_error(pdvobjpriv);
usb_get_dev(pusbd);
@@ -724,7 +765,7 @@ static void usb_intf_stop(_adapter *padapter)
}
-static void rtw_dev_unload(_adapter *padapter)
+void rtw_dev_unload(_adapter *padapter)
{
struct net_device *pnetdev= (struct net_device*)padapter->pnetdev;
u8 val8;
@@ -747,7 +788,7 @@ static void rtw_dev_unload(_adapter *padapter)
}
//s4.
- if(!padapter->pwrctrlpriv.bInternalAutoSuspend )
+ if(!adapter_to_pwrctl(padapter)->bInternalAutoSuspend )
rtw_stop_drv_threads(padapter);
@@ -756,7 +797,7 @@ static void rtw_dev_unload(_adapter *padapter)
{
//DBG_871X("r871x_dev_unload()->rtl871x_hal_deinit()\n");
#ifdef CONFIG_WOWLAN
- if((padapter->pwrctrlpriv.bSupportRemoteWakeup==_TRUE)&&(padapter->pwrctrlpriv.wowlan_mode==_TRUE)){
+ if((adapter_to_pwrctl(padapter)->bSupportRemoteWakeup==_TRUE)&&(adapter_to_pwrctl(padapter)->wowlan_mode==_TRUE)){
DBG_871X("%s bSupportWakeOnWlan==_TRUE do not run rtw_hal_deinit()\n",__FUNCTION__);
}
else
@@ -822,7 +863,7 @@ static void process_spec_devid(const struct usb_device_id *pdid)
#ifdef SUPPORT_HW_RFOFF_DETECTED
int rtw_hw_suspend(_adapter *padapter )
{
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
struct usb_interface *pusb_intf = adapter_to_dvobj(padapter)->pusbintf;
struct net_device *pnetdev = padapter->pnetdev;
@@ -900,7 +941,7 @@ error_exit:
int rtw_hw_resume(_adapter *padapter)
{
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
struct usb_interface *pusb_intf = adapter_to_dvobj(padapter)->pusbintf;
struct net_device *pnetdev = padapter->pnetdev;
@@ -949,13 +990,150 @@ error_exit:
}
#endif
+#if 1
+#ifdef CONFIG_WOWLAN
+static void rtw_suspend_wow(_adapter *padapter)
+{
+ struct net_device *pnetdev = padapter->pnetdev;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
+ struct wifidirect_info* pwdinfo = &padapter->wdinfo;
+ struct wowlan_ioctl_param poidparam;
+
+ if (check_fwstate(pmlmepriv, _FW_LINKED))
+ pwrpriv->wowlan_mode = _TRUE;
+ else
+ pwrpriv->wowlan_mode = _FALSE;
+
+ rtw_cancel_all_timer(padapter);
+ LeaveAllPowerSaveMode(padapter);
+
+ rtw_stop_cmd_thread(padapter);
+
+
+ //padapter->net_closed = _TRUE;
+ //s1.
+ if(pnetdev)
+ {
+ netif_carrier_off(pnetdev);
+ rtw_netif_stop_queue(pnetdev);
+ }
+
+ if(pwrpriv->bSupportRemoteWakeup==_TRUE && pwrpriv->wowlan_mode==_TRUE){
+ //set H2C command
+ poidparam.subcode=WOWLAN_ENABLE;
+ padapter->HalFunc.SetHwRegHandler(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
+ }
+ else
+ {
+ //s2.
+ rtw_disassoc_cmd(padapter, 0, _FALSE);
+ }
+
+
+#ifdef CONFIG_LAYER2_ROAMING_RESUME
+ if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED)&& rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
+ {
+ //DBG_871X("%s:%d assoc_ssid:%s\n", __FUNCTION__, __LINE__, pmlmepriv->assoc_ssid.Ssid);
+ DBG_871X("%s:%d %s(" MAC_FMT "), length:%d assoc_ssid.length:%d\n",__FUNCTION__, __LINE__,
+ pmlmepriv->cur_network.network.Ssid.Ssid,
+ MAC_ARG(pmlmepriv->cur_network.network.MacAddress),
+ pmlmepriv->cur_network.network.Ssid.SsidLength,
+ pmlmepriv->assoc_ssid.SsidLength);
+
+ rtw_set_roaming(padapter, 1);
+ }
+#endif
+ //s2-2. indicate disconnect to os
+ rtw_indicate_disconnect(padapter);
+ //s2-3.
+ rtw_free_assoc_resources(padapter, 1);
+#ifdef CONFIG_AUTOSUSPEND
+ if(!pwrpriv->bInternalAutoSuspend )
+#endif
+ //s2-4.
+ rtw_free_network_queue(padapter, _TRUE);
+
+ rtw_dev_unload(padapter);
+
+ if(check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
+ rtw_indicate_scan_done(padapter, 1);
+
+ //if(check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
+ // rtw_indicate_disconnect(padapter);
+
+}
+#endif
+static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
+{
+ struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf);
+ _adapter *padapter = dvobj->if1;
+ struct net_device *pnetdev = padapter->pnetdev;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(dvobj);
+ struct usb_device *usb_dev = interface_to_usbdev(pusb_intf);
+
+
+ int ret = 0;
+ u32 start_time = rtw_get_current_time();
+
+ _func_enter_;
+
+ DBG_871X("==> %s (%s:%d)\n",__FUNCTION__, current->comm, current->pid);
+
+ if((!padapter->bup) || (padapter->bDriverStopped)||(padapter->bSurpriseRemoved))
+ {
+ DBG_871X("padapter->bup=%d bDriverStopped=%d bSurpriseRemoved = %d\n",
+ padapter->bup, padapter->bDriverStopped,padapter->bSurpriseRemoved);
+ goto exit;
+ }
+
+ if(pwrpriv->bInternalAutoSuspend )
+ {
+ #ifdef CONFIG_AUTOSUSPEND
+ #ifdef SUPPORT_HW_RFOFF_DETECTED
+ // The FW command register update must after MAC and FW init ready.
+ if((padapter->bFWReady) && (pwrpriv->bHWPwrPindetect ) && (padapter->registrypriv.usbss_enable ))
+ {
+ u8 bOpen = _TRUE;
+ rtw_interface_ps_func(padapter,HAL_USB_SELECT_SUSPEND,&bOpen);
+ //rtl8192c_set_FwSelectSuspend_cmd(padapter,_TRUE ,500);//note fw to support hw power down ping detect
+ }
+ #endif
+ #endif
+ }
+
+ pwrpriv->bInSuspend = _TRUE;
+
+ _enter_pwrlock(&pwrpriv->lock);
+#ifdef CONFIG_WOWLAN
+ rtw_suspend_wow(padapter);
+#else
+ rtw_suspend_common(padapter);
+#endif
+
+#ifdef CONFIG_AUTOSUSPEND
+ pwrpriv->rf_pwrstate = rf_off;
+ pwrpriv->bips_processing = _FALSE;
+#endif
+ _exit_pwrlock(&pwrpriv->lock);
+
+
+exit:
+ DBG_871X("<=== %s return %d.............. in %dms\n", __FUNCTION__
+ , ret, rtw_get_passing_time_ms(start_time));
+
+ _func_exit_;
+ return ret;
+}
+#else
static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
{
struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf);
_adapter *padapter = dvobj->if1;
struct net_device *pnetdev = padapter->pnetdev;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(dvobj);
struct usb_device *usb_dev = interface_to_usbdev(pusb_intf);
#ifdef CONFIG_WOWLAN
struct wowlan_ioctl_param poidparam;
@@ -970,9 +1148,9 @@ static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
#ifdef CONFIG_WOWLAN
if (check_fwstate(pmlmepriv, _FW_LINKED))
- padapter->pwrctrlpriv.wowlan_mode = _TRUE;
+ pwrpriv->wowlan_mode = _TRUE;
else
- padapter->pwrctrlpriv.wowlan_mode = _FALSE;
+ pwrpriv->wowlan_mode = _FALSE;
#endif
if((!padapter->bup) || (padapter->bDriverStopped)||(padapter->bSurpriseRemoved))
@@ -987,7 +1165,7 @@ static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
#ifdef CONFIG_AUTOSUSPEND
#ifdef SUPPORT_HW_RFOFF_DETECTED
// The FW command register update must after MAC and FW init ready.
- if((padapter->bFWReady) && ( padapter->pwrctrlpriv.bHWPwrPindetect ) && (padapter->registrypriv.usbss_enable ))
+ if((padapter->bFWReady) && (pwrpriv->bHWPwrPindetect ) && (padapter->registrypriv.usbss_enable ))
{
u8 bOpen = _TRUE;
rtw_interface_ps_func(padapter,HAL_USB_SELECT_SUSPEND,&bOpen);
@@ -1000,6 +1178,8 @@ static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
rtw_cancel_all_timer(padapter);
LeaveAllPowerSaveMode(padapter);
+ rtw_stop_cmd_thread(padapter);
+
_enter_pwrlock(&pwrpriv->lock);
//padapter->net_closed = _TRUE;
//s1.
@@ -1010,7 +1190,7 @@ static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
}
#ifdef CONFIG_WOWLAN
- if(padapter->pwrctrlpriv.bSupportRemoteWakeup==_TRUE&&padapter->pwrctrlpriv.wowlan_mode==_TRUE){
+ if(pwrpriv->bSupportRemoteWakeup==_TRUE && pwrpriv->wowlan_mode==_TRUE){
//set H2C command
poidparam.subcode=WOWLAN_ENABLE;
padapter->HalFunc.SetHwRegHandler(padapter,HW_VAR_WOWLAN,(u8 *)&poidparam);
@@ -1067,12 +1247,13 @@ exit:
return ret;
}
+#endif
static int rtw_resume(struct usb_interface *pusb_intf)
{
struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf);
_adapter *padapter = dvobj->if1;
struct net_device *pnetdev = padapter->pnetdev;
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(dvobj);
int ret = 0;
if(pwrpriv->bInternalAutoSuspend ){
@@ -1083,7 +1264,7 @@ static int rtw_resume(struct usb_interface *pusb_intf)
#else
if (rtw_is_earlysuspend_registered(pwrpriv)
#ifdef CONFIG_WOWLAN
- && !padapter->pwrctrlpriv.wowlan_mode
+ && !pwrpriv->wowlan_mode
#endif /* CONFIG_WOWLAN */
) {
/* jeff: bypass resume here, do in late_resume */
@@ -1113,7 +1294,7 @@ int rtw_resume_process(_adapter *padapter)
if(padapter) {
pnetdev= padapter->pnetdev;
- pwrpriv = &padapter->pwrctrlpriv;
+ pwrpriv = adapter_to_pwrctl(padapter);
} else {
goto exit;
}
@@ -1138,15 +1319,13 @@ int rtw_resume_process(_adapter *padapter)
}
#endif //#ifdef CONFIG_AUTOSUSPEND
#endif //#ifdef CONFIG_BT_COEXIST
- rtw_reset_drv_sw(padapter);
- pwrpriv->bkeepfwalive = _FALSE;
- DBG_871X("bkeepfwalive(%x)\n",pwrpriv->bkeepfwalive);
- if(pm_netdev_open(pnetdev,_TRUE) != 0)
- goto exit;
- netif_device_attach(pnetdev);
- netif_carrier_on(pnetdev);
+ if(rtw_resume_common(padapter)!= 0) {
+ DBG_871X("%s rtw_resume_common failed\n",__FUNCTION__);
+ _exit_pwrlock(&pwrpriv->lock);
+ goto exit;
+ }
#ifdef CONFIG_AUTOSUSPEND
if(pwrpriv->bInternalAutoSuspend )
@@ -1154,7 +1333,7 @@ int rtw_resume_process(_adapter *padapter)
#ifdef CONFIG_AUTOSUSPEND
#ifdef SUPPORT_HW_RFOFF_DETECTED
// The FW command register update must after MAC and FW init ready.
- if((padapter->bFWReady) && ( padapter->pwrctrlpriv.bHWPwrPindetect ) && (padapter->registrypriv.usbss_enable ))
+ if((padapter->bFWReady) && (pwrpriv->bHWPwrPindetect) && (padapter->registrypriv.usbss_enable ))
{
//rtl8192c_set_FwSelectSuspend_cmd(padapter,_FALSE ,500);//note fw to support hw power down ping detect
u8 bOpen = _FALSE;
@@ -1165,7 +1344,7 @@ int rtw_resume_process(_adapter *padapter)
#ifdef CONFIG_BT_COEXIST
DBG_871X("pwrpriv->bAutoResume (%x)\n",pwrpriv->bAutoResume );
if( _TRUE == pwrpriv->bAutoResume ){
- pwrpriv->bInternalAutoSuspend = _FALSE;
+ pwrpriv->bInternalAutoSuspend = _FALSE;
pwrpriv->bAutoResume=_FALSE;
DBG_871X("pwrpriv->bAutoResume (%x) pwrpriv->bInternalAutoSuspend(%x)\n",pwrpriv->bAutoResume,pwrpriv->bInternalAutoSuspend );
}
@@ -1174,24 +1353,6 @@ int rtw_resume_process(_adapter *padapter)
pwrpriv->bInternalAutoSuspend = _FALSE;
#endif //#ifdef CONFIG_BT_COEXIST
pwrpriv->brfoffbyhw = _FALSE;
- {
- DBG_871X("enc_algorithm(%x),wepkeymask(%x)\n",
- padapter->securitypriv.dot11PrivacyAlgrthm,pwrpriv->wepkeymask);
- if( (_WEP40_ == padapter->securitypriv.dot11PrivacyAlgrthm) ||
- (_WEP104_ == padapter->securitypriv.dot11PrivacyAlgrthm))
- {
- sint keyid;
-
- for(keyid=0;keyid<4;keyid++){
- if(pwrpriv->wepkeymask & BIT(keyid)) {
- if(keyid == padapter->securitypriv.dot11PrivacyKeyIndex)
- rtw_set_key(padapter,&padapter->securitypriv, keyid, 1);
- else
- rtw_set_key(padapter,&padapter->securitypriv, keyid, 0);
- }
- }
- }
- }
}
#endif
_exit_pwrlock(&pwrpriv->lock);
@@ -1199,11 +1360,7 @@ int rtw_resume_process(_adapter *padapter)
if( padapter->pid[1]!=0) {
DBG_871X("pid[1]:%d\n",padapter->pid[1]);
rtw_signal_process(padapter->pid[1], SIGUSR2);
- }
-
- #ifdef CONFIG_LAYER2_ROAMING_RESUME
- rtw_roaming(padapter, NULL);
- #endif
+ }
ret = 0;
exit:
@@ -1223,7 +1380,7 @@ exit:
#ifdef CONFIG_AUTOSUSPEND
void autosuspend_enter(_adapter* padapter)
{
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
DBG_871X("==>autosuspend_enter...........\n");
@@ -1279,7 +1436,7 @@ void autosuspend_enter(_adapter* padapter)
int autoresume_enter(_adapter* padapter)
{
int result = _SUCCESS;
- struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
+ struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
struct security_priv* psecuritypriv=&(padapter->securitypriv);
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
@@ -1447,13 +1604,13 @@ _adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
#ifdef CONFIG_PM
#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
- if(padapter->pwrctrlpriv.bSupportRemoteWakeup)
+ if(adapter_to_pwrctl(padapter)->bSupportRemoteWakeup)
{
dvobj->pusbdev->do_remote_wakeup=1;
pusb_intf->needs_remote_wakeup = 1;
device_init_wakeup(&pusb_intf->dev, 1);
- DBG_871X("\n padapter->pwrctrlpriv.bSupportRemoteWakeup~~~~~~\n");
- DBG_871X("\n padapter->pwrctrlpriv.bSupportRemoteWakeup~~~[%d]~~~\n",device_may_wakeup(&pusb_intf->dev));
+ DBG_871X("\n pwrctrlpriv.bSupportRemoteWakeup~~~~~~\n");
+ DBG_871X("\n pwrctrlpriv.bSupportRemoteWakeup~~~[%d]~~~\n",device_may_wakeup(&pusb_intf->dev));
}
#endif
#endif
@@ -1493,7 +1650,7 @@ _adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
}
#endif
#ifdef CONFIG_BT_COEXIST
- padapter->pwrctrlpriv.autopm_cnt=1;
+ adapter_to_pwrctl(padapter)->autopm_cnt=1;
#endif
// set mac addr
@@ -1538,6 +1695,7 @@ static void rtw_usb_if1_deinit(_adapter *if1)
{
struct net_device *pnetdev = if1->pnetdev;
struct mlme_priv *pmlmepriv= &if1->mlmepriv;
+ struct pwrctrl_priv *pwrctl = adapter_to_pwrctl(if1);
if(check_fwstate(pmlmepriv, _FW_LINKED))
rtw_disassoc_cmd(if1, 0, _FALSE);
@@ -1549,18 +1707,18 @@ static void rtw_usb_if1_deinit(_adapter *if1)
hostapd_mode_unload(if1);
#endif
#endif
-
+/*
if(if1->DriverState != DRIVER_DISAPPEAR) {
if(pnetdev) {
unregister_netdev(pnetdev); //will call netdev_close()
rtw_proc_remove_one(pnetdev);
}
}
-
+*/
rtw_cancel_all_timer(if1);
#ifdef CONFIG_WOWLAN
- if1->pwrctrlpriv.wowlan_mode=_FALSE;
+ pwrctl->wowlan_mode=_FALSE;
#endif //CONFIG_WOWLAN
rtw_dev_unload(if1);
@@ -1572,13 +1730,13 @@ static void rtw_usb_if1_deinit(_adapter *if1)
#ifdef CONFIG_IOCTL_CFG80211
if(if1->rtw_wdev)
{
- rtw_wdev_unregister(if1->rtw_wdev);
+ //rtw_wdev_unregister(if1->rtw_wdev);
rtw_wdev_free(if1->rtw_wdev);
}
#endif
#ifdef CONFIG_BT_COEXIST
- if(1 == if1->pwrctrlpriv.autopm_cnt){
+ if(1 == pwrctl->autopm_cnt){
#if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,33))
usb_autopm_put_interface(adapter_to_dvobj(if1)->pusbintf);
#elif (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,20))
@@ -1586,7 +1744,7 @@ static void rtw_usb_if1_deinit(_adapter *if1)
#else
usb_autosuspend_device(adapter_to_dvobj(if1)->pusbdev, 1);
#endif
- if1->pwrctrlpriv.autopm_cnt --;
+ pwrctl->autopm_cnt --;
}
#endif
@@ -1804,7 +1962,7 @@ free_dvobj:
exit:
return status == _SUCCESS?0:-ENODEV;
}
-
+extern void rtw_unregister_netdevs(struct dvobj_priv *dvobj);
/*
* dev_remove() - our device is being removed
*/
@@ -1820,7 +1978,9 @@ _func_enter_;
DBG_871X("+rtw_dev_remove\n");
RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+dev_remove()\n"));
-
+ dvobj->processing_dev_remove = _TRUE;
+ rtw_unregister_netdevs(dvobj);
+
if(usb_drv->drv_registered == _TRUE)
{
//DBG_871X("r871xu_dev_remove():padapter->bSurpriseRemoved == _TRUE\n");
@@ -1836,7 +1996,7 @@ _func_enter_;
MPT_DeInitAdapter(padapter);
#endif
#if defined(CONFIG_HAS_EARLYSUSPEND) || defined(CONFIG_ANDROID_POWER)
- rtw_unregister_early_suspend(&padapter->pwrctrlpriv);
+ rtw_unregister_early_suspend(dvobj_to_pwrctl(dvobj));
#endif
rtw_pm_set_ips(padapter, IPS_NONE);
@@ -1864,9 +2024,6 @@ _func_enter_;
rtw_sw_export=NULL;
#endif
- #ifdef DBG_MEM_ALLOC
- rtw_dump_mem_stat ();
- #endif
_func_exit_;
return;
@@ -1900,7 +2057,7 @@ static int __init rtw_drv_entry(void)
#endif //CONFIG_RTL8723A
#endif //CONFIG_PLATFORM_ARM_SUNxI
-#ifdef CONFIG_PLATFORM_ARM_SUN6I
+#if defined CONFIG_PLATFORM_ARM_SUN6I
script_item_value_type_e type;
type = script_get_item("wifi_para", "wifi_usbc_id", &item);
@@ -1912,8 +2069,11 @@ static int __init rtw_drv_entry(void)
printk("sw_usb_enable_hcd: usbc_num = %d\n", item.val);
wifi_pm_power(1);
mdelay(10);
+
+ #ifndef CONFIG_RTL8723A
sw_usb_enable_hcd(item.val);
-#endif //CONFIG_PLATFORM_ARM_SUN6I
+ #endif
+#endif // defined CONFIG_PLATFORM_ARM_SUN6I && !(defined CONFIG_RTL8723A)
RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+rtw_drv_entry\n"));
@@ -1933,9 +2093,7 @@ static int __init rtw_drv_entry(void)
static void __exit rtw_drv_halt(void)
{
RT_TRACE(_module_hci_intfs_c_,_drv_err_,("+rtw_drv_halt\n"));
- DBG_871X("+rtw_drv_halt\n");
-
- rtw_suspend_lock_uninit();
+ DBG_871X("+rtw_drv_halt\n");
usb_drv->drv_registered = _FALSE;
usb_deregister(&usb_drv->usbdrv);
@@ -1947,12 +2105,17 @@ static void __exit rtw_drv_halt(void)
#endif //ifndef CONFIG_RTL8723A
#endif //CONFIG_PLATFORM_ARM_SUNxI
-#ifdef CONFIG_PLATFORM_ARM_SUN6I
+#if defined CONFIG_PLATFORM_ARM_SUN6I
+ #ifndef CONFIG_RTL8723A
sw_usb_disable_hcd(item.val);
+ #endif
wifi_pm_power(0);
-#endif
+#endif // defined CONFIG_PLATFORM_ARM_SUN6I && !(defined CONFIG_RTL8723A)
+ rtw_suspend_lock_uninit();
DBG_871X("-rtw_drv_halt\n");
+
+ rtw_mstat_dump();
}
diff --git a/drivers/net/wireless/rtl8723as/os_dep/linux/usb_ops_linux.c b/drivers/net/wireless/rtl8723as/os_dep/linux/usb_ops_linux.c
index c9418e593a9e..db7546447bf0 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/linux/usb_ops_linux.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/linux/usb_ops_linux.c
@@ -1,646 +1,698 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
- *
- *******************************************************************************/
-#define _USB_OPS_LINUX_C_
-
-#include <drv_types.h>
-#include <usb_ops_linux.h>
-#include <rtw_sreset.h>
-
-#ifdef CONFIG_USB_SUPPORT_ASYNC_VDN_REQ
-static void _usbctrl_vendorreq_async_callback(struct urb *urb, struct pt_regs *regs)
-{
- if (urb) {
- if (urb->context) {
- kfree(urb->context);
- }
- usb_free_urb(urb);
- }
-}
-
-static int _usbctrl_vendorreq_async_write(struct usb_device *udev, u8 request,
- u16 value, u16 index, void *pdata, u16 len, u8 requesttype)
-{
- int rc;
- unsigned int pipe;
- u8 reqtype;
- struct usb_ctrlrequest *dr;
- struct urb *urb;
- struct rtl819x_async_write_data {
- u8 data[VENDOR_CMD_MAX_DATA_LEN];
- struct usb_ctrlrequest dr;
- } *buf;
-
-
- if (requesttype == VENDOR_READ) {
- pipe = usb_rcvctrlpipe(udev, 0);//read_in
- reqtype = REALTEK_USB_VENQT_READ;
- }
- else {
- pipe = usb_sndctrlpipe(udev, 0);//write_out
- reqtype = REALTEK_USB_VENQT_WRITE;
- }
-
- buf = (struct rtl819x_async_write_data *)rtw_zmalloc(sizeof(*buf));
- if (!buf) {
- rc = -ENOMEM;
- goto exit;
- }
-
- urb = usb_alloc_urb(0, GFP_ATOMIC);
- if (!urb) {
- rtw_mfree((u8*)buf, sizeof(*buf));
- rc = -ENOMEM;
- goto exit;
- }
-
- dr = &buf->dr;
-
- dr->bRequestType = reqtype;
- dr->bRequest = request;
- dr->wValue = cpu_to_le16(value);
- dr->wIndex = cpu_to_le16(index);
- dr->wLength = cpu_to_le16(len);
-
- _rtw_memcpy(buf, pdata, len);
-
- usb_fill_control_urb(urb, udev, pipe, (unsigned char *)dr, buf, len,
- _usbctrl_vendorreq_async_callback, buf);
-
- rc = usb_submit_urb(urb, GFP_ATOMIC);
- if (rc < 0) {
- rtw_mfree((u8*)buf, sizeof(*buf));
- usb_free_urb(urb);
- }
-
-exit:
- return rc;
-}
-
-int usb_write_async(struct usb_device *udev, u32 addr, void *pdata, u16 len)
-{
- u8 request;
- u8 requesttype;
- u16 wvalue;
- u16 index;
-
- int ret;
-
- requesttype = VENDOR_WRITE;//write_out
- request = REALTEK_USB_VENQT_CMD_REQ;
- index = REALTEK_USB_VENQT_CMD_IDX;//n/a
-
- wvalue = (u16)(addr&0x0000ffff);
-
- ret = _usbctrl_vendorreq_async_write(udev, request, wvalue, index, pdata, len, requesttype);
-
- return ret;
-}
-
-int usb_async_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val)
-{
- u8 data;
- int ret;
- struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
- struct usb_device *udev=pdvobjpriv->pusbdev;
-
- _func_enter_;
- data = val;
- ret = usb_write_async(udev, addr, &data, 1);
- _func_exit_;
-
- return ret;
-}
-
-int usb_async_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val)
-{
- u16 data;
- int ret;
- struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
- struct usb_device *udev=pdvobjpriv->pusbdev;
-
- _func_enter_;
- data = val;
- ret = usb_write_async(udev, addr, &data, 2);
- _func_exit_;
-
- return ret;
-}
-
-int usb_async_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val)
-{
- u32 data;
- int ret;
- struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
- struct usb_device *udev=pdvobjpriv->pusbdev;
-
- _func_enter_;
- data = val;
- ret = usb_write_async(udev, addr, &data, 4);
- _func_exit_;
-
- return ret;
-}
-#endif /* CONFIG_USB_SUPPORT_ASYNC_VDN_REQ */
-
-unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr)
-{
- unsigned int pipe=0, ep_num=0;
- struct usb_device *pusbd = pdvobj->pusbdev;
-
- if (addr == RECV_BULK_IN_ADDR) {
- pipe=usb_rcvbulkpipe(pusbd, pdvobj->RtInPipe[0]);
-
- } else if (addr == RECV_INT_IN_ADDR) {
- pipe=usb_rcvbulkpipe(pusbd, pdvobj->RtInPipe[1]);
-
- } else if (addr < HW_QUEUE_ENTRY) {
- ep_num = pdvobj->Queue2Pipe[addr];
- pipe = usb_sndbulkpipe(pusbd, ep_num);
- }
-
- return pipe;
-}
-
-struct zero_bulkout_context{
- void *pbuf;
- void *purb;
- void *pirp;
- void *padapter;
-};
-
-static void usb_bulkout_zero_complete(struct urb *purb, struct pt_regs *regs)
-{
- struct zero_bulkout_context *pcontext = (struct zero_bulkout_context *)purb->context;
-
- //DBG_8192C("+usb_bulkout_zero_complete\n");
-
- if(pcontext)
- {
- if(pcontext->pbuf)
- {
- rtw_mfree(pcontext->pbuf, sizeof(int));
- }
-
- if(pcontext->purb && (pcontext->purb==purb))
- {
- usb_free_urb(pcontext->purb);
- }
-
-
- rtw_mfree((u8*)pcontext, sizeof(struct zero_bulkout_context));
- }
-
-
-}
-
-static u32 usb_bulkout_zero(struct intf_hdl *pintfhdl, u32 addr)
-{
- int pipe, status, len;
- u32 ret;
- unsigned char *pbuf;
- struct zero_bulkout_context *pcontext;
- PURB purb = NULL;
- _adapter *padapter = (_adapter *)pintfhdl->padapter;
- struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
- struct usb_device *pusbd = pdvobj->pusbdev;
-
- //DBG_871X("%s\n", __func__);
-
-
- if((padapter->bDriverStopped) || (padapter->bSurpriseRemoved) ||(padapter->pwrctrlpriv.pnp_bstop_trx))
- {
- return _FAIL;
- }
-
-
- pcontext = (struct zero_bulkout_context *)rtw_zmalloc(sizeof(struct zero_bulkout_context));
-
- pbuf = (unsigned char *)rtw_zmalloc(sizeof(int));
- purb = usb_alloc_urb(0, GFP_ATOMIC);
-
- len = 0;
- pcontext->pbuf = pbuf;
- pcontext->purb = purb;
- pcontext->pirp = NULL;
- pcontext->padapter = padapter;
-
-
- //translate DMA FIFO addr to pipehandle
- //pipe = ffaddr2pipehdl(pdvobj, addr);
-
- usb_fill_bulk_urb(purb, pusbd, pipe,
- pbuf,
- len,
- usb_bulkout_zero_complete,
- pcontext);//context is pcontext
-
- status = usb_submit_urb(purb, GFP_ATOMIC);
-
- if (!status)
- {
- ret= _SUCCESS;
- }
- else
- {
- ret= _FAIL;
- }
-
-
- return _SUCCESS;
-
-}
-
-void usb_read_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)
-{
-
-}
-
-void usb_write_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
-{
-
-}
-
-
-void usb_read_port_cancel(struct intf_hdl *pintfhdl)
-{
- int i;
- struct recv_buf *precvbuf;
- _adapter *padapter = pintfhdl->padapter;
- precvbuf = (struct recv_buf *)padapter->recvpriv.precv_buf;
-
- DBG_871X("%s\n", __func__);
-
- padapter->bReadPortCancel = _TRUE;
-
- for (i=0; i < NR_RECVBUFF ; i++) {
-
- precvbuf->reuse = _TRUE;
- if (precvbuf->purb) {
- //DBG_8192C("usb_read_port_cancel : usb_kill_urb \n");
- usb_kill_urb(precvbuf->purb);
- }
- precvbuf++;
- }
-
-#ifdef CONFIG_USB_INTERRUPT_IN_PIPE
- usb_kill_urb(padapter->recvpriv.int_in_urb);
-#endif
-}
-
-static void usb_write_port_complete(struct urb *purb, struct pt_regs *regs)
-{
- _irqL irqL;
- int i;
- struct xmit_buf *pxmitbuf = (struct xmit_buf *)purb->context;
- //struct xmit_frame *pxmitframe = (struct xmit_frame *)pxmitbuf->priv_data;
- //_adapter *padapter = pxmitframe->padapter;
- _adapter *padapter = pxmitbuf->padapter;
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- //struct pkt_attrib *pattrib = &pxmitframe->attrib;
-
-_func_enter_;
-
- switch(pxmitbuf->flags)
- {
- case VO_QUEUE_INX:
- pxmitpriv->voq_cnt--;
- break;
- case VI_QUEUE_INX:
- pxmitpriv->viq_cnt--;
- break;
- case BE_QUEUE_INX:
- pxmitpriv->beq_cnt--;
- break;
- case BK_QUEUE_INX:
- pxmitpriv->bkq_cnt--;
- break;
- case HIGH_QUEUE_INX:
-#ifdef CONFIG_AP_MODE
- rtw_chk_hi_queue_cmd(padapter);
-#endif
- break;
- default:
- break;
- }
-
-
-/*
- _enter_critical(&pxmitpriv->lock, &irqL);
-
- pxmitpriv->txirp_cnt--;
-
- switch(pattrib->priority)
- {
- case 1:
- case 2:
- pxmitpriv->bkq_cnt--;
- //DBG_8192C("pxmitpriv->bkq_cnt=%d\n", pxmitpriv->bkq_cnt);
- break;
- case 4:
- case 5:
- pxmitpriv->viq_cnt--;
- //DBG_8192C("pxmitpriv->viq_cnt=%d\n", pxmitpriv->viq_cnt);
- break;
- case 6:
- case 7:
- pxmitpriv->voq_cnt--;
- //DBG_8192C("pxmitpriv->voq_cnt=%d\n", pxmitpriv->voq_cnt);
- break;
- case 0:
- case 3:
- default:
- pxmitpriv->beq_cnt--;
- //DBG_8192C("pxmitpriv->beq_cnt=%d\n", pxmitpriv->beq_cnt);
- break;
-
- }
-
- _exit_critical(&pxmitpriv->lock, &irqL);
-
-
- if(pxmitpriv->txirp_cnt==0)
- {
- RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: txirp_cnt== 0, set allrxreturnevt!\n"));
- _rtw_up_sema(&(pxmitpriv->tx_retevt));
- }
-*/
- //rtw_free_xmitframe(pxmitpriv, pxmitframe);
-
- if(padapter->bSurpriseRemoved || padapter->bDriverStopped ||padapter->bWritePortCancel)
- {
- RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bDriverStopped(%d) OR bSurpriseRemoved(%d)", padapter->bDriverStopped, padapter->bSurpriseRemoved));
- DBG_8192C("%s(): TX Warning! bDriverStopped(%d) OR bSurpriseRemoved(%d) bWritePortCancel(%d) pxmitbuf->ext_tag(%x) \n",
- __FUNCTION__,padapter->bDriverStopped, padapter->bSurpriseRemoved,padapter->bReadPortCancel,pxmitbuf->ext_tag);
-
- goto check_completion;
- }
-
-
- if (purb->status==0) {
-
- } else {
- RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete : purb->status(%d) != 0 \n", purb->status));
- DBG_871X("###=> urb_write_port_complete status(%d)\n",purb->status);
- if((purb->status==-EPIPE)||(purb->status==-EPROTO))
- {
- //usb_clear_halt(pusbdev, purb->pipe);
- //msleep(10);
- sreset_set_wifi_error_status(padapter, USB_WRITE_PORT_FAIL);
- } else if (purb->status == -EINPROGRESS) {
- RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: EINPROGESS\n"));
- goto check_completion;
-
- } else if (purb->status == -ENOENT) {
- DBG_871X("%s: -ENOENT\n", __func__);
- goto check_completion;
-
- } else if (purb->status == -ECONNRESET) {
- DBG_871X("%s: -ECONNRESET\n", __func__);
- goto check_completion;
-
- } else if (purb->status == -ESHUTDOWN) {
- RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: ESHUTDOWN\n"));
- padapter->bDriverStopped=_TRUE;
- RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bDriverStopped=TRUE\n"));
-
- goto check_completion;
- }
- else
- {
- padapter->bSurpriseRemoved=_TRUE;
- DBG_8192C("bSurpriseRemoved=TRUE\n");
- //rtl8192cu_trigger_gpio_0(padapter);
- RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bSurpriseRemoved=TRUE\n"));
-
- goto check_completion;
- }
- }
-
- #ifdef DBG_CONFIG_ERROR_DETECT
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- pHalData->srestpriv.last_tx_complete_time = rtw_get_current_time();
- }
- #endif
-
-check_completion:
- _enter_critical(&pxmitpriv->lock_sctx, &irqL);
- rtw_sctx_done_err(&pxmitbuf->sctx,
- purb->status ? RTW_SCTX_DONE_WRITE_PORT_ERR : RTW_SCTX_DONE_SUCCESS);
- _exit_critical(&pxmitpriv->lock_sctx, &irqL);
-
- rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
-
- //if(rtw_txframes_pending(padapter))
- {
- tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
- }
-
-_func_exit_;
-
-}
-
-u32 usb_write_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
-{
- _irqL irqL;
- unsigned int pipe;
- int status;
- u32 ret = _FAIL, bwritezero = _FALSE;
- PURB purb = NULL;
- _adapter *padapter = (_adapter *)pintfhdl->padapter;
- struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- struct xmit_buf *pxmitbuf = (struct xmit_buf *)wmem;
- struct xmit_frame *pxmitframe = (struct xmit_frame *)pxmitbuf->priv_data;
- struct usb_device *pusbd = pdvobj->pusbdev;
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
-
-_func_enter_;
-
- RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("+usb_write_port\n"));
-
- if ((padapter->bDriverStopped) || (padapter->bSurpriseRemoved) ||(padapter->pwrctrlpriv.pnp_bstop_trx)) {
- #ifdef DBG_TX
- DBG_871X(" DBG_TX %s:%d bDriverStopped%d, bSurpriseRemoved:%d, pnp_bstop_trx:%d\n",__FUNCTION__, __LINE__
- ,padapter->bDriverStopped, padapter->bSurpriseRemoved, padapter->pwrctrlpriv.pnp_bstop_trx );
- #endif
- RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port:( padapter->bDriverStopped ||padapter->bSurpriseRemoved ||adapter->pwrctrlpriv.pnp_bstop_trx)!!!\n"));
- rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_TX_DENY);
- goto exit;
- }
-
- _enter_critical(&pxmitpriv->lock, &irqL);
-
- switch(addr)
- {
- case VO_QUEUE_INX:
- pxmitpriv->voq_cnt++;
- pxmitbuf->flags = VO_QUEUE_INX;
- break;
- case VI_QUEUE_INX:
- pxmitpriv->viq_cnt++;
- pxmitbuf->flags = VI_QUEUE_INX;
- break;
- case BE_QUEUE_INX:
- pxmitpriv->beq_cnt++;
- pxmitbuf->flags = BE_QUEUE_INX;
- break;
- case BK_QUEUE_INX:
- pxmitpriv->bkq_cnt++;
- pxmitbuf->flags = BK_QUEUE_INX;
- break;
- case HIGH_QUEUE_INX:
- pxmitbuf->flags = HIGH_QUEUE_INX;
- break;
- default:
- pxmitbuf->flags = MGT_QUEUE_INX;
- break;
- }
-
- _exit_critical(&pxmitpriv->lock, &irqL);
-
- purb = pxmitbuf->pxmit_urb[0];
-
-#if 0
- if(pdvobj->ishighspeed)
- {
- if(cnt> 0 && cnt%512 == 0)
- {
- //DBG_8192C("ishighspeed, cnt=%d\n", cnt);
- bwritezero = _TRUE;
- }
- }
- else
- {
- if(cnt > 0 && cnt%64 == 0)
- {
- //DBG_8192C("cnt=%d\n", cnt);
- bwritezero = _TRUE;
- }
- }
-#endif
-
- //translate DMA FIFO addr to pipehandle
- pipe = ffaddr2pipehdl(pdvobj, addr);
-
-#ifdef CONFIG_REDUCE_USB_TX_INT
- if ( (pxmitpriv->free_xmitbuf_cnt%NR_XMITBUFF == 0)
- || (pxmitbuf->ext_tag == _TRUE) )
- {
- purb->transfer_flags &= (~URB_NO_INTERRUPT);
- } else {
- purb->transfer_flags |= URB_NO_INTERRUPT;
- //DBG_8192C("URB_NO_INTERRUPT ");
- }
-#endif
-
-
- usb_fill_bulk_urb(purb, pusbd, pipe,
- pxmitframe->buf_addr, //= pxmitbuf->pbuf
- cnt,
- usb_write_port_complete,
- pxmitbuf);//context is pxmitbuf
-
-#ifdef CONFIG_USE_USB_BUFFER_ALLOC_TX
- purb->transfer_dma = pxmitbuf->dma_transfer_addr;
- purb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
- purb->transfer_flags |= URB_ZERO_PACKET;
-#endif // CONFIG_USE_USB_BUFFER_ALLOC_TX
-
-#if 0
- if (bwritezero)
- {
- purb->transfer_flags |= URB_ZERO_PACKET;
- }
-#endif
-
- status = usb_submit_urb(purb, GFP_ATOMIC);
- if (!status) {
- #ifdef DBG_CONFIG_ERROR_DETECT
- {
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
- pHalData->srestpriv.last_tx_time = rtw_get_current_time();
- }
- #endif
- } else {
- rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_WRITE_PORT_ERR);
- DBG_871X("usb_write_port, status=%d\n", status);
- RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port(): usb_submit_urb, status=%x\n", status));
-
- switch (status) {
- case -ENODEV:
- padapter->bDriverStopped=_TRUE;
- break;
- default:
- break;
- }
- goto exit;
- }
-
- ret= _SUCCESS;
-
-// Commented by Albert 2009/10/13
-// We add the URB_ZERO_PACKET flag to urb so that the host will send the zero packet automatically.
-/*
- if(bwritezero == _TRUE)
- {
- usb_bulkout_zero(pintfhdl, addr);
- }
-*/
-
- RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("-usb_write_port\n"));
-
-exit:
- if (ret != _SUCCESS)
- rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
-_func_exit_;
- return ret;
-
-}
-
-void usb_write_port_cancel(struct intf_hdl *pintfhdl)
-{
- int i, j;
- _adapter *padapter = pintfhdl->padapter;
- struct xmit_buf *pxmitbuf = (struct xmit_buf *)padapter->xmitpriv.pxmitbuf;
-
- DBG_871X("%s \n", __func__);
-
- padapter->bWritePortCancel = _TRUE;
-
- for (i=0; i<NR_XMITBUFF; i++) {
- for (j=0; j<8; j++) {
- if (pxmitbuf->pxmit_urb[j]) {
- usb_kill_urb(pxmitbuf->pxmit_urb[j]);
- }
- }
- pxmitbuf++;
- }
-
- pxmitbuf = (struct xmit_buf*)padapter->xmitpriv.pxmit_extbuf;
- for (i = 0; i < NR_XMIT_EXTBUFF; i++) {
- for (j=0; j<8; j++) {
- if(pxmitbuf->pxmit_urb[j]) {
- usb_kill_urb(pxmitbuf->pxmit_urb[j]);
- }
- }
- pxmitbuf++;
- }
-}
-
+/******************************************************************************
+ *
+ * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
+ *
+ *******************************************************************************/
+#define _USB_OPS_LINUX_C_
+
+#include <drv_types.h>
+#include <usb_ops_linux.h>
+#include <rtw_sreset.h>
+
+#ifdef CONFIG_USB_SUPPORT_ASYNC_VDN_REQ
+static void _usbctrl_vendorreq_async_callback(struct urb *urb, struct pt_regs *regs)
+{
+ if (urb) {
+ if (urb->context) {
+ rtw_mfree(urb->context);
+ }
+ usb_free_urb(urb);
+ }
+}
+
+static int _usbctrl_vendorreq_async_write(struct usb_device *udev, u8 request,
+ u16 value, u16 index, void *pdata, u16 len, u8 requesttype)
+{
+ int rc;
+ unsigned int pipe;
+ u8 reqtype;
+ struct usb_ctrlrequest *dr;
+ struct urb *urb;
+ struct rtl819x_async_write_data {
+ u8 data[VENDOR_CMD_MAX_DATA_LEN];
+ struct usb_ctrlrequest dr;
+ } *buf;
+
+
+ if (requesttype == VENDOR_READ) {
+ pipe = usb_rcvctrlpipe(udev, 0);//read_in
+ reqtype = REALTEK_USB_VENQT_READ;
+ }
+ else {
+ pipe = usb_sndctrlpipe(udev, 0);//write_out
+ reqtype = REALTEK_USB_VENQT_WRITE;
+ }
+
+ buf = (struct rtl819x_async_write_data *)rtw_zmalloc(sizeof(*buf));
+ if (!buf) {
+ rc = -ENOMEM;
+ goto exit;
+ }
+
+ urb = usb_alloc_urb(0, GFP_ATOMIC);
+ if (!urb) {
+ rtw_mfree((u8*)buf, sizeof(*buf));
+ rc = -ENOMEM;
+ goto exit;
+ }
+
+ dr = &buf->dr;
+
+ dr->bRequestType = reqtype;
+ dr->bRequest = request;
+ dr->wValue = cpu_to_le16(value);
+ dr->wIndex = cpu_to_le16(index);
+ dr->wLength = cpu_to_le16(len);
+
+ _rtw_memcpy(buf, pdata, len);
+
+ usb_fill_control_urb(urb, udev, pipe, (unsigned char *)dr, buf, len,
+ _usbctrl_vendorreq_async_callback, buf);
+
+ rc = usb_submit_urb(urb, GFP_ATOMIC);
+ if (rc < 0) {
+ rtw_mfree((u8*)buf, sizeof(*buf));
+ usb_free_urb(urb);
+ }
+
+exit:
+ return rc;
+}
+
+int usb_write_async(struct usb_device *udev, u32 addr, void *pdata, u16 len)
+{
+ u8 request;
+ u8 requesttype;
+ u16 wvalue;
+ u16 index;
+
+ int ret;
+
+ requesttype = VENDOR_WRITE;//write_out
+ request = REALTEK_USB_VENQT_CMD_REQ;
+ index = REALTEK_USB_VENQT_CMD_IDX;//n/a
+
+ wvalue = (u16)(addr&0x0000ffff);
+
+ ret = _usbctrl_vendorreq_async_write(udev, request, wvalue, index, pdata, len, requesttype);
+
+ return ret;
+}
+
+int usb_async_write8(struct intf_hdl *pintfhdl, u32 addr, u8 val)
+{
+ u8 data;
+ int ret;
+ struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
+ struct usb_device *udev=pdvobjpriv->pusbdev;
+
+ _func_enter_;
+ data = val;
+ ret = usb_write_async(udev, addr, &data, 1);
+ _func_exit_;
+
+ return ret;
+}
+
+int usb_async_write16(struct intf_hdl *pintfhdl, u32 addr, u16 val)
+{
+ u16 data;
+ int ret;
+ struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
+ struct usb_device *udev=pdvobjpriv->pusbdev;
+
+ _func_enter_;
+ data = val;
+ ret = usb_write_async(udev, addr, &data, 2);
+ _func_exit_;
+
+ return ret;
+}
+
+int usb_async_write32(struct intf_hdl *pintfhdl, u32 addr, u32 val)
+{
+ u32 data;
+ int ret;
+ struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *)pintfhdl->pintf_dev;
+ struct usb_device *udev=pdvobjpriv->pusbdev;
+
+ _func_enter_;
+ data = val;
+ ret = usb_write_async(udev, addr, &data, 4);
+ _func_exit_;
+
+ return ret;
+}
+#endif /* CONFIG_USB_SUPPORT_ASYNC_VDN_REQ */
+
+unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr)
+{
+ unsigned int pipe=0, ep_num=0;
+ struct usb_device *pusbd = pdvobj->pusbdev;
+
+ if (addr == RECV_BULK_IN_ADDR) {
+ pipe=usb_rcvbulkpipe(pusbd, pdvobj->RtInPipe[0]);
+
+ } else if (addr == RECV_INT_IN_ADDR) {
+ pipe=usb_rcvbulkpipe(pusbd, pdvobj->RtInPipe[1]);
+
+ } else if (addr < HW_QUEUE_ENTRY) {
+ ep_num = pdvobj->Queue2Pipe[addr];
+ pipe = usb_sndbulkpipe(pusbd, ep_num);
+ }
+
+ return pipe;
+}
+
+struct zero_bulkout_context{
+ void *pbuf;
+ void *purb;
+ void *pirp;
+ void *padapter;
+};
+
+static void usb_bulkout_zero_complete(struct urb *purb, struct pt_regs *regs)
+{
+ struct zero_bulkout_context *pcontext = (struct zero_bulkout_context *)purb->context;
+
+ //DBG_8192C("+usb_bulkout_zero_complete\n");
+
+ if(pcontext)
+ {
+ if(pcontext->pbuf)
+ {
+ rtw_mfree(pcontext->pbuf, sizeof(int));
+ }
+
+ if(pcontext->purb && (pcontext->purb==purb))
+ {
+ usb_free_urb(pcontext->purb);
+ }
+
+
+ rtw_mfree((u8*)pcontext, sizeof(struct zero_bulkout_context));
+ }
+
+
+}
+
+static u32 usb_bulkout_zero(struct intf_hdl *pintfhdl, u32 addr)
+{
+ int pipe, status, len;
+ u32 ret;
+ unsigned char *pbuf;
+ struct zero_bulkout_context *pcontext;
+ PURB purb = NULL;
+ _adapter *padapter = (_adapter *)pintfhdl->padapter;
+ struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
+ struct usb_device *pusbd = pdvobj->pusbdev;
+
+ //DBG_871X("%s\n", __func__);
+
+
+ if((padapter->bDriverStopped) || (padapter->bSurpriseRemoved) ||(dvobj_to_pwrctl(pdvobj)->pnp_bstop_trx))
+ {
+ return _FAIL;
+ }
+
+
+ pcontext = (struct zero_bulkout_context *)rtw_zmalloc(sizeof(struct zero_bulkout_context));
+
+ pbuf = (unsigned char *)rtw_zmalloc(sizeof(int));
+ purb = usb_alloc_urb(0, GFP_ATOMIC);
+
+ len = 0;
+ pcontext->pbuf = pbuf;
+ pcontext->purb = purb;
+ pcontext->pirp = NULL;
+ pcontext->padapter = padapter;
+
+
+ //translate DMA FIFO addr to pipehandle
+ //pipe = ffaddr2pipehdl(pdvobj, addr);
+
+ usb_fill_bulk_urb(purb, pusbd, pipe,
+ pbuf,
+ len,
+ usb_bulkout_zero_complete,
+ pcontext);//context is pcontext
+
+ status = usb_submit_urb(purb, GFP_ATOMIC);
+
+ if (!status)
+ {
+ ret= _SUCCESS;
+ }
+ else
+ {
+ ret= _FAIL;
+ }
+
+
+ return _SUCCESS;
+
+}
+
+void usb_read_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)
+{
+
+}
+
+void usb_write_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
+{
+
+}
+
+
+void usb_read_port_cancel(struct intf_hdl *pintfhdl)
+{
+ int i;
+ struct recv_buf *precvbuf;
+ _adapter *padapter = pintfhdl->padapter;
+ precvbuf = (struct recv_buf *)padapter->recvpriv.precv_buf;
+
+ DBG_871X("%s\n", __func__);
+
+ padapter->bReadPortCancel = _TRUE;
+
+ for (i=0; i < NR_RECVBUFF ; i++) {
+
+ precvbuf->reuse = _TRUE;
+ if (precvbuf->purb) {
+ //DBG_8192C("usb_read_port_cancel : usb_kill_urb \n");
+ usb_kill_urb(precvbuf->purb);
+ }
+ precvbuf++;
+ }
+
+#ifdef CONFIG_USB_INTERRUPT_IN_PIPE
+ usb_kill_urb(padapter->recvpriv.int_in_urb);
+#endif
+}
+
+static void usb_write_port_complete(struct urb *purb, struct pt_regs *regs)
+{
+ _irqL irqL;
+ int i;
+ struct xmit_buf *pxmitbuf = (struct xmit_buf *)purb->context;
+ //struct xmit_frame *pxmitframe = (struct xmit_frame *)pxmitbuf->priv_data;
+ //_adapter *padapter = pxmitframe->padapter;
+ _adapter *padapter = pxmitbuf->padapter;
+ struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
+ //struct pkt_attrib *pattrib = &pxmitframe->attrib;
+
+_func_enter_;
+
+ switch(pxmitbuf->flags)
+ {
+ case VO_QUEUE_INX:
+ pxmitpriv->voq_cnt--;
+ break;
+ case VI_QUEUE_INX:
+ pxmitpriv->viq_cnt--;
+ break;
+ case BE_QUEUE_INX:
+ pxmitpriv->beq_cnt--;
+ break;
+ case BK_QUEUE_INX:
+ pxmitpriv->bkq_cnt--;
+ break;
+ case HIGH_QUEUE_INX:
+#ifdef CONFIG_AP_MODE
+ rtw_chk_hi_queue_cmd(padapter);
+#endif
+ break;
+ default:
+ break;
+ }
+
+
+/*
+ _enter_critical(&pxmitpriv->lock, &irqL);
+
+ pxmitpriv->txirp_cnt--;
+
+ switch(pattrib->priority)
+ {
+ case 1:
+ case 2:
+ pxmitpriv->bkq_cnt--;
+ //DBG_8192C("pxmitpriv->bkq_cnt=%d\n", pxmitpriv->bkq_cnt);
+ break;
+ case 4:
+ case 5:
+ pxmitpriv->viq_cnt--;
+ //DBG_8192C("pxmitpriv->viq_cnt=%d\n", pxmitpriv->viq_cnt);
+ break;
+ case 6:
+ case 7:
+ pxmitpriv->voq_cnt--;
+ //DBG_8192C("pxmitpriv->voq_cnt=%d\n", pxmitpriv->voq_cnt);
+ break;
+ case 0:
+ case 3:
+ default:
+ pxmitpriv->beq_cnt--;
+ //DBG_8192C("pxmitpriv->beq_cnt=%d\n", pxmitpriv->beq_cnt);
+ break;
+
+ }
+
+ _exit_critical(&pxmitpriv->lock, &irqL);
+
+
+ if(pxmitpriv->txirp_cnt==0)
+ {
+ RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: txirp_cnt== 0, set allrxreturnevt!\n"));
+ _rtw_up_sema(&(pxmitpriv->tx_retevt));
+ }
+*/
+ //rtw_free_xmitframe(pxmitpriv, pxmitframe);
+
+ if(padapter->bSurpriseRemoved || padapter->bDriverStopped ||padapter->bWritePortCancel)
+ {
+ RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bDriverStopped(%d) OR bSurpriseRemoved(%d)", padapter->bDriverStopped, padapter->bSurpriseRemoved));
+ DBG_8192C("%s(): TX Warning! bDriverStopped(%d) OR bSurpriseRemoved(%d) bWritePortCancel(%d) pxmitbuf->ext_tag(%x) \n",
+ __FUNCTION__,padapter->bDriverStopped, padapter->bSurpriseRemoved,padapter->bReadPortCancel,pxmitbuf->ext_tag);
+
+ goto check_completion;
+ }
+
+
+ if (purb->status==0) {
+
+ } else {
+ RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete : purb->status(%d) != 0 \n", purb->status));
+ DBG_871X("###=> urb_write_port_complete status(%d)\n",purb->status);
+ if((purb->status==-EPIPE)||(purb->status==-EPROTO))
+ {
+ //usb_clear_halt(pusbdev, purb->pipe);
+ //msleep(10);
+ sreset_set_wifi_error_status(padapter, USB_WRITE_PORT_FAIL);
+ } else if (purb->status == -EINPROGRESS) {
+ RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: EINPROGESS\n"));
+ goto check_completion;
+
+ } else if (purb->status == -ENOENT) {
+ DBG_871X("%s: -ENOENT\n", __func__);
+ goto check_completion;
+
+ } else if (purb->status == -ECONNRESET) {
+ DBG_871X("%s: -ECONNRESET\n", __func__);
+ goto check_completion;
+
+ } else if (purb->status == -ESHUTDOWN) {
+ RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete: ESHUTDOWN\n"));
+ padapter->bDriverStopped=_TRUE;
+ RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bDriverStopped=TRUE\n"));
+
+ goto check_completion;
+ }
+ else
+ {
+ padapter->bSurpriseRemoved=_TRUE;
+ DBG_8192C("bSurpriseRemoved=TRUE\n");
+ //rtl8192cu_trigger_gpio_0(padapter);
+ RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port_complete:bSurpriseRemoved=TRUE\n"));
+
+ goto check_completion;
+ }
+ }
+
+ #ifdef DBG_CONFIG_ERROR_DETECT
+ {
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ pHalData->srestpriv.last_tx_complete_time = rtw_get_current_time();
+ }
+ #endif
+
+check_completion:
+ _enter_critical(&pxmitpriv->lock_sctx, &irqL);
+ rtw_sctx_done_err(&pxmitbuf->sctx,
+ purb->status ? RTW_SCTX_DONE_WRITE_PORT_ERR : RTW_SCTX_DONE_SUCCESS);
+ _exit_critical(&pxmitpriv->lock_sctx, &irqL);
+
+ rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
+
+ //if(rtw_txframes_pending(padapter))
+ {
+ tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
+ }
+
+_func_exit_;
+
+}
+
+u32 usb_write_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
+{
+ _irqL irqL;
+ unsigned int pipe;
+ int status;
+ u32 ret = _FAIL, bwritezero = _FALSE;
+ PURB purb = NULL;
+ _adapter *padapter = (_adapter *)pintfhdl->padapter;
+ struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
+ struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
+ struct xmit_buf *pxmitbuf = (struct xmit_buf *)wmem;
+ struct xmit_frame *pxmitframe = (struct xmit_frame *)pxmitbuf->priv_data;
+ struct usb_device *pusbd = pdvobj->pusbdev;
+ struct pkt_attrib *pattrib = &pxmitframe->attrib;
+
+_func_enter_;
+
+ RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("+usb_write_port\n"));
+
+ if ((padapter->bDriverStopped) || (padapter->bSurpriseRemoved) ||(dvobj_to_pwrctl(pdvobj)->pnp_bstop_trx)) {
+ #ifdef DBG_TX
+ DBG_871X(" DBG_TX %s:%d bDriverStopped%d, bSurpriseRemoved:%d, pnp_bstop_trx:%d\n",__FUNCTION__, __LINE__
+ ,padapter->bDriverStopped, padapter->bSurpriseRemoved, dvobj_to_pwrctl(pdvobj)->pnp_bstop_trx );
+ #endif
+ RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port:( padapter->bDriverStopped ||padapter->bSurpriseRemoved ||pwrctl->pnp_bstop_trx)!!!\n"));
+ rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_TX_DENY);
+ goto exit;
+ }
+
+ _enter_critical(&pxmitpriv->lock, &irqL);
+
+ switch(addr)
+ {
+ case VO_QUEUE_INX:
+ pxmitpriv->voq_cnt++;
+ pxmitbuf->flags = VO_QUEUE_INX;
+ break;
+ case VI_QUEUE_INX:
+ pxmitpriv->viq_cnt++;
+ pxmitbuf->flags = VI_QUEUE_INX;
+ break;
+ case BE_QUEUE_INX:
+ pxmitpriv->beq_cnt++;
+ pxmitbuf->flags = BE_QUEUE_INX;
+ break;
+ case BK_QUEUE_INX:
+ pxmitpriv->bkq_cnt++;
+ pxmitbuf->flags = BK_QUEUE_INX;
+ break;
+ case HIGH_QUEUE_INX:
+ pxmitbuf->flags = HIGH_QUEUE_INX;
+ break;
+ default:
+ pxmitbuf->flags = MGT_QUEUE_INX;
+ break;
+ }
+
+ _exit_critical(&pxmitpriv->lock, &irqL);
+
+ #ifdef DBG_TRX_STA_PKTS
+ {
+ struct sta_info *psta = NULL;
+ struct sta_priv *pstapriv = &padapter->stapriv;
+ int bmcast = IS_MCAST(pattrib->dst);
+ u8 agg_num = 1;
+
+ #ifdef CONFIG_USB_HCI
+ #ifdef CONFIG_USB_TX_AGGREGATION
+ if(pxmitframe->agg_num>1)
+ agg_num = pxmitframe->agg_num;
+ #endif
+ #endif
+
+ #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
+ if(pxmitframe->agg_num>1)
+ agg_num = pxmitframe->agg_num;
+ #endif
+
+ if(bmcast)
+ {
+ psta = rtw_get_bcmc_stainfo(padapter);
+
+ } else {
+ psta = rtw_get_stainfo(pstapriv, pattrib->dst);
+ }
+ if(psta)
+ {
+ switch(pattrib->priority)
+ {
+ case 1:
+ case 2:
+ psta->tx_bk_cnt += agg_num;
+ break;
+ case 4:
+ case 5:
+ psta->tx_vi_cnt += agg_num;
+ break;
+ case 6:
+ case 7:
+ psta->tx_vo_cnt += agg_num;
+ break;
+ case 0:
+ case 3:
+ default:
+ psta->tx_be_cnt += agg_num;
+ break;
+ }
+ }
+ }
+ #endif
+
+ purb = pxmitbuf->pxmit_urb[0];
+
+#if 0
+ if(pdvobj->ishighspeed)
+ {
+ if(cnt> 0 && cnt%512 == 0)
+ {
+ //DBG_8192C("ishighspeed, cnt=%d\n", cnt);
+ bwritezero = _TRUE;
+ }
+ }
+ else
+ {
+ if(cnt > 0 && cnt%64 == 0)
+ {
+ //DBG_8192C("cnt=%d\n", cnt);
+ bwritezero = _TRUE;
+ }
+ }
+#endif
+
+ //translate DMA FIFO addr to pipehandle
+ pipe = ffaddr2pipehdl(pdvobj, addr);
+
+#ifdef CONFIG_REDUCE_USB_TX_INT
+ if ( (pxmitpriv->free_xmitbuf_cnt%NR_XMITBUFF == 0)
+ || (pxmitbuf->ext_tag == _TRUE) )
+ {
+ purb->transfer_flags &= (~URB_NO_INTERRUPT);
+ } else {
+ purb->transfer_flags |= URB_NO_INTERRUPT;
+ //DBG_8192C("URB_NO_INTERRUPT ");
+ }
+#endif
+
+
+ usb_fill_bulk_urb(purb, pusbd, pipe,
+ pxmitframe->buf_addr, //= pxmitbuf->pbuf
+ cnt,
+ usb_write_port_complete,
+ pxmitbuf);//context is pxmitbuf
+
+#ifdef CONFIG_USE_USB_BUFFER_ALLOC_TX
+ purb->transfer_dma = pxmitbuf->dma_transfer_addr;
+ purb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
+ purb->transfer_flags |= URB_ZERO_PACKET;
+#endif // CONFIG_USE_USB_BUFFER_ALLOC_TX
+
+#if 0
+ if (bwritezero)
+ {
+ purb->transfer_flags |= URB_ZERO_PACKET;
+ }
+#endif
+
+ status = usb_submit_urb(purb, GFP_ATOMIC);
+ if (!status) {
+ #ifdef DBG_CONFIG_ERROR_DETECT
+ {
+ HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ pHalData->srestpriv.last_tx_time = rtw_get_current_time();
+ }
+ #endif
+ } else {
+ rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_WRITE_PORT_ERR);
+ DBG_871X("usb_write_port, status=%d\n", status);
+ RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("usb_write_port(): usb_submit_urb, status=%x\n", status));
+
+ switch (status) {
+ case -ENODEV:
+ padapter->bDriverStopped=_TRUE;
+ break;
+ default:
+ break;
+ }
+ goto exit;
+ }
+
+ ret= _SUCCESS;
+
+// Commented by Albert 2009/10/13
+// We add the URB_ZERO_PACKET flag to urb so that the host will send the zero packet automatically.
+/*
+ if(bwritezero == _TRUE)
+ {
+ usb_bulkout_zero(pintfhdl, addr);
+ }
+*/
+
+ RT_TRACE(_module_hci_ops_os_c_,_drv_err_,("-usb_write_port\n"));
+
+exit:
+ if (ret != _SUCCESS)
+ rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
+_func_exit_;
+ return ret;
+
+}
+
+void usb_write_port_cancel(struct intf_hdl *pintfhdl)
+{
+ int i, j;
+ _adapter *padapter = pintfhdl->padapter;
+ struct xmit_buf *pxmitbuf = (struct xmit_buf *)padapter->xmitpriv.pxmitbuf;
+
+ DBG_871X("%s \n", __func__);
+
+ padapter->bWritePortCancel = _TRUE;
+
+ for (i=0; i<NR_XMITBUFF; i++) {
+ for (j=0; j<8; j++) {
+ if (pxmitbuf->pxmit_urb[j]) {
+ usb_kill_urb(pxmitbuf->pxmit_urb[j]);
+ }
+ }
+ pxmitbuf++;
+ }
+
+ pxmitbuf = (struct xmit_buf*)padapter->xmitpriv.pxmit_extbuf;
+ for (i = 0; i < NR_XMIT_EXTBUFF; i++) {
+ for (j=0; j<8; j++) {
+ if(pxmitbuf->pxmit_urb[j]) {
+ usb_kill_urb(pxmitbuf->pxmit_urb[j]);
+ }
+ }
+ pxmitbuf++;
+ }
+}
+
diff --git a/drivers/net/wireless/rtl8723as/os_dep/linux/xmit_linux.c b/drivers/net/wireless/rtl8723as/os_dep/linux/xmit_linux.c
index 1d852964031d..979066d86b8a 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/linux/xmit_linux.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/linux/xmit_linux.c
@@ -229,19 +229,13 @@ void rtw_os_pkt_complete(_adapter *padapter, _pkt *pkt)
netif_wake_queue(padapter->pnetdev);
#endif
- dev_kfree_skb_any(pkt);
+ rtw_skb_free(pkt);
}
void rtw_os_xmit_complete(_adapter *padapter, struct xmit_frame *pxframe)
{
if(pxframe->pkt)
- {
- //RT_TRACE(_module_xmit_osdep_c_,_drv_err_,("linux : rtw_os_xmit_complete, dev_kfree_skb()\n"));
-
- //dev_kfree_skb_any(pxframe->pkt);
rtw_os_pkt_complete(padapter, pxframe->pkt);
-
- }
pxframe->pkt = NULL;
}
@@ -357,7 +351,7 @@ int rtw_mlcst2unicst(_adapter *padapter, struct sk_buff *skb)
)
continue;
- newskb = skb_copy(skb, GFP_ATOMIC);
+ newskb = rtw_skb_copy(skb);
if (newskb) {
_rtw_memcpy(newskb->data, psta->hwaddr, 6);
@@ -365,24 +359,24 @@ int rtw_mlcst2unicst(_adapter *padapter, struct sk_buff *skb)
if (res < 0) {
DBG_871X("%s()-%d: rtw_xmit() return error!\n", __FUNCTION__, __LINE__);
pxmitpriv->tx_drop++;
- dev_kfree_skb_any(newskb);
+ rtw_skb_free(newskb);
} else
pxmitpriv->tx_pkts++;
} else {
- DBG_871X("%s-%d: skb_copy() failed!\n", __FUNCTION__, __LINE__);
+ DBG_871X("%s-%d: rtw_skb_copy() failed!\n", __FUNCTION__, __LINE__);
pxmitpriv->tx_drop++;
- //dev_kfree_skb_any(skb);
+ //rtw_skb_free(skb);
return _FALSE; // Caller shall tx this multicast frame via normal way.
}
}
- dev_kfree_skb_any(skb);
+ rtw_skb_free(skb);
return _TRUE;
}
#endif // CONFIG_TX_MCAST2UNI
-int rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev)
+int _rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev)
{
_adapter *padapter = (_adapter *)rtw_netdev_priv(pnetdev);
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
@@ -443,7 +437,7 @@ _func_enter_;
drop_packet:
pxmitpriv->tx_drop++;
- dev_kfree_skb_any(pkt);
+ rtw_skb_free(pkt);
RT_TRACE(_module_xmit_osdep_c_, _drv_notice_, ("rtw_xmit_entry: drop, tx_drop=%d\n", (u32)pxmitpriv->tx_drop));
exit:
@@ -453,3 +447,10 @@ _func_exit_;
return 0;
}
+int rtw_xmit_entry(_pkt *pkt, _nic_hdl pnetdev)
+{
+ if (pkt)
+ rtw_mstat_update(MSTAT_TYPE_SKB, MSTAT_ALLOC_SUCCESS, pkt->truesize);
+ return _rtw_xmit_entry(pkt, pnetdev);
+}
+
diff --git a/drivers/net/wireless/rtl8723as/os_dep/osdep_service.c b/drivers/net/wireless/rtl8723as/os_dep/osdep_service.c
index 646877ccdee8..ac86e4d2f251 100755
--- a/drivers/net/wireless/rtl8723as/os_dep/osdep_service.c
+++ b/drivers/net/wireless/rtl8723as/os_dep/osdep_service.c
@@ -249,235 +249,524 @@ void _rtw_mfree(u8 *pbuf, u32 sz)
}
-#ifdef DBG_MEM_ALLOC
+#ifdef PLATFORM_FREEBSD
+//review again
+struct sk_buff * dev_alloc_skb(unsigned int size)
+{
+ struct sk_buff *skb=NULL;
+ u8 *data=NULL;
+
+ //skb = (struct sk_buff *)_rtw_zmalloc(sizeof(struct sk_buff)); // for skb->len, etc.
+ skb = (struct sk_buff *)_rtw_malloc(sizeof(struct sk_buff));
+ if(!skb)
+ goto out;
+ data = _rtw_malloc(size);
+ if(!data)
+ goto nodata;
+
+ skb->head = (unsigned char*)data;
+ skb->data = (unsigned char*)data;
+ skb->tail = (unsigned char*)data;
+ skb->end = (unsigned char*)data + size;
+ skb->len = 0;
+ //printf("%s()-%d: skb=%p, skb->head = %p\n", __FUNCTION__, __LINE__, skb, skb->head);
-struct rtw_dbg_mem_stat {
- ATOMIC_T vir_alloc; // the memory bytes we allocate now
- ATOMIC_T vir_peak; // the peak memory bytes we allocate
- ATOMIC_T vir_alloc_err; // the error times we fail to allocate memory
+out:
+ return skb;
+nodata:
+ _rtw_mfree((u8 *)skb, sizeof(struct sk_buff));
+ skb = NULL;
+goto out;
- ATOMIC_T phy_alloc;
- ATOMIC_T phy_peak;
- ATOMIC_T phy_alloc_err;
+}
+
+void dev_kfree_skb_any(struct sk_buff *skb)
+{
+ //printf("%s()-%d: skb->head = %p\n", __FUNCTION__, __LINE__, skb->head);
+ if(skb->head)
+ _rtw_mfree(skb->head, 0);
+ //printf("%s()-%d: skb = %p\n", __FUNCTION__, __LINE__, skb);
+ if(skb)
+ _rtw_mfree((u8 *)skb, 0);
+}
+struct sk_buff *skb_clone(const struct sk_buff *skb)
+{
+ return NULL;
+}
+
+#endif /* PLATFORM_FREEBSD */
- ATOMIC_T tx_alloc;
- ATOMIC_T tx_peak;
- ATOMIC_T tx_alloc_err;
+inline struct sk_buff *_rtw_skb_alloc(u32 sz)
+{
+#ifdef PLATFORM_LINUX
+ return __dev_alloc_skb(sz, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
+#endif /* PLATFORM_LINUX */
- ATOMIC_T rx_alloc;
- ATOMIC_T rx_peak;
- ATOMIC_T rx_alloc_err;
-} rtw_dbg_mem_stat;
+#ifdef PLATFORM_FREEBSD
+ return dev_alloc_skb(sz);
+#endif /* PLATFORM_FREEBSD */
+}
-void rtw_dump_mem_stat (void)
+inline void _rtw_skb_free(struct sk_buff *skb)
{
- int vir_alloc, vir_peak, vir_alloc_err, phy_alloc, phy_peak, phy_alloc_err;
- int tx_alloc, tx_peak, tx_alloc_err, rx_alloc, rx_peak, rx_alloc_err;
+ dev_kfree_skb_any(skb);
+}
+
+inline struct sk_buff *_rtw_skb_copy(const struct sk_buff *skb)
+{
+#ifdef PLATFORM_LINUX
+ return skb_copy(skb, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
+#endif /* PLATFORM_LINUX */
+
+#ifdef PLATFORM_FREEBSD
+ return NULL;
+#endif /* PLATFORM_FREEBSD */
+}
+
+inline struct sk_buff *_rtw_skb_clone(struct sk_buff *skb)
+{
+#ifdef PLATFORM_LINUX
+ return skb_clone(skb, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
+#endif /* PLATFORM_LINUX */
+
+#ifdef PLATFORM_FREEBSD
+ return skb_clone(skb);
+#endif /* PLATFORM_FREEBSD */
+}
+
+inline int _rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb)
+{
+#ifdef PLATFORM_LINUX
+ skb->dev = ndev;
+ return netif_rx(skb);
+#endif /* PLATFORM_LINUX */
+
+#ifdef PLATFORM_FREEBSD
+ return (*ndev->if_input)(ndev, skb);
+#endif /* PLATFORM_FREEBSD */
+}
+
+void _rtw_skb_queue_purge(struct sk_buff_head *list)
+{
+ struct sk_buff *skb;
+
+ while ((skb = skb_dequeue(list)) != NULL)
+ _rtw_skb_free(skb);
+}
+
+#ifdef CONFIG_USB_HCI
+inline void *_rtw_usb_buffer_alloc(struct usb_device *dev, size_t size, dma_addr_t *dma)
+{
+#ifdef PLATFORM_LINUX
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ return usb_alloc_coherent(dev, size, (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL), dma);
+#else
+ return usb_buffer_alloc(dev, size, (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL), dma);
+#endif
+#endif /* PLATFORM_LINUX */
- vir_alloc=ATOMIC_READ(&rtw_dbg_mem_stat.vir_alloc);
- vir_peak=ATOMIC_READ(&rtw_dbg_mem_stat.vir_peak);
- vir_alloc_err=ATOMIC_READ(&rtw_dbg_mem_stat.vir_alloc_err);
+#ifdef PLATFORM_FREEBSD
+ return (malloc(size, M_USBDEV, M_NOWAIT | M_ZERO));
+#endif /* PLATFORM_FREEBSD */
+}
+inline void _rtw_usb_buffer_free(struct usb_device *dev, size_t size, void *addr, dma_addr_t dma)
+{
+#ifdef PLATFORM_LINUX
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ usb_free_coherent(dev, size, addr, dma);
+#else
+ usb_buffer_free(dev, size, addr, dma);
+#endif
+#endif /* PLATFORM_LINUX */
+
+#ifdef PLATFORM_FREEBSD
+ free(addr, M_USBDEV);
+#endif /* PLATFORM_FREEBSD */
+}
+#endif /* CONFIG_USB_HCI */
+
+#ifdef DBG_MEM_ALLOC
- phy_alloc=ATOMIC_READ(&rtw_dbg_mem_stat.phy_alloc);
- phy_peak=ATOMIC_READ(&rtw_dbg_mem_stat.phy_peak);
- phy_alloc_err=ATOMIC_READ(&rtw_dbg_mem_stat.phy_alloc_err);
+struct rtw_mem_stat {
+ ATOMIC_T alloc; // the memory bytes we allocate currently
+ ATOMIC_T peak; // the peak memory bytes we allocate
+ ATOMIC_T alloc_cnt; // the alloc count for alloc currently
+ ATOMIC_T alloc_err_cnt; // the error times we fail to allocate memory
+};
+
+struct rtw_mem_stat rtw_mem_type_stat[mstat_tf_idx(MSTAT_TYPE_MAX)];
+struct rtw_mem_stat rtw_mem_func_stat[mstat_ff_idx(MSTAT_FUNC_MAX)];
- tx_alloc=ATOMIC_READ(&rtw_dbg_mem_stat.tx_alloc);
- tx_peak=ATOMIC_READ(&rtw_dbg_mem_stat.tx_peak);
- tx_alloc_err=ATOMIC_READ(&rtw_dbg_mem_stat.tx_alloc_err);
+char *MSTAT_TYPE_str[] = {
+ "VIR",
+ "PHY",
+ "SKB",
+ "USB",
+};
+
+char *MSTAT_FUNC_str[] = {
+ "UNSP",
+ "IO",
+ "TXIO",
+ "RXIO",
+ "TX",
+ "RX",
+};
+
+int _rtw_mstat_dump(char *buf, int len)
+{
+ int cnt = 0;
+ int i;
+ int value_t[4][mstat_tf_idx(MSTAT_TYPE_MAX)];
+ int value_f[4][mstat_ff_idx(MSTAT_FUNC_MAX)];
- rx_alloc=ATOMIC_READ(&rtw_dbg_mem_stat.rx_alloc);
- rx_peak=ATOMIC_READ(&rtw_dbg_mem_stat.rx_peak);
- rx_alloc_err=ATOMIC_READ(&rtw_dbg_mem_stat.rx_alloc_err);
-
- DBG_871X( "vir_alloc:%d, vir_peak:%d, vir_alloc_err:%d\n"
- "phy_alloc:%d, phy_peak:%d, phy_alloc_err:%d\n"
- "tx_alloc:%d, tx_peak:%d, tx_alloc_err:%d\n"
- "rx_alloc:%d, rx_peak:%d, rx_alloc_err:%d\n"
- , vir_alloc, vir_peak, vir_alloc_err
- , phy_alloc, phy_peak, phy_alloc_err
- , tx_alloc, tx_peak, tx_alloc_err
- , rx_alloc, rx_peak, rx_alloc_err
- );
+ int vir_alloc, vir_peak, vir_alloc_err, phy_alloc, phy_peak, phy_alloc_err;
+ int tx_alloc, tx_peak, tx_alloc_err, rx_alloc, rx_peak, rx_alloc_err;
+
+ for(i=0;i<mstat_tf_idx(MSTAT_TYPE_MAX);i++) {
+ value_t[0][i] = ATOMIC_READ(&(rtw_mem_type_stat[i].alloc));
+ value_t[1][i] = ATOMIC_READ(&(rtw_mem_type_stat[i].peak));
+ value_t[2][i] = ATOMIC_READ(&(rtw_mem_type_stat[i].alloc_cnt));
+ value_t[3][i] = ATOMIC_READ(&(rtw_mem_type_stat[i].alloc_err_cnt));
+ }
+
+ #if 0
+ for(i=0;i<mstat_ff_idx(MSTAT_FUNC_MAX);i++) {
+ value_f[0][i] = ATOMIC_READ(&(rtw_mem_func_stat[i].alloc));
+ value_f[1][i] = ATOMIC_READ(&(rtw_mem_func_stat[i].peak));
+ value_f[2][i] = ATOMIC_READ(&(rtw_mem_func_stat[i].alloc_cnt));
+ value_f[3][i] = ATOMIC_READ(&(rtw_mem_func_stat[i].alloc_err_cnt));
+ }
+ #endif
+
+ cnt += snprintf(buf+cnt, len-cnt, "===================== MSTAT =====================\n");
+ cnt += snprintf(buf+cnt, len-cnt, "%4s %10s %10s %10s %10s\n", "TAG", "alloc", "peak", "aloc_cnt", "err_cnt");
+ cnt += snprintf(buf+cnt, len-cnt, "-------------------------------------------------\n");
+ for(i=0;i<mstat_tf_idx(MSTAT_TYPE_MAX);i++) {
+ cnt += snprintf(buf+cnt, len-cnt, "%4s %10d %10d %10d %10d\n", MSTAT_TYPE_str[i], value_t[0][i], value_t[1][i], value_t[2][i], value_t[3][i]);
+ }
+ #if 0
+ cnt += snprintf(buf+cnt, len-cnt, "-------------------------------------------------\n");
+ for(i=0;i<mstat_ff_idx(MSTAT_FUNC_MAX);i++) {
+ cnt += snprintf(buf+cnt, len-cnt, "%4s %10d %10d %10d %10d\n", MSTAT_FUNC_str[i], value_f[0][i], value_f[1][i], value_f[2][i], value_f[3][i]);
+ }
+ #endif
+
+ return cnt;
+}
+
+void rtw_mstat_dump(void)
+{
+ char buf[768] = {0};
+
+ _rtw_mstat_dump(buf, 768);
+ DBG_871X("\n%s", buf);
}
-void rtw_update_mem_stat(u8 flag, u32 sz)
+void rtw_mstat_update(const enum mstat_f flags, const MSTAT_STATUS status, u32 sz)
{
static u32 update_time = 0;
int peak, alloc;
+ int i;
+ /* initialization */
if(!update_time) {
- ATOMIC_SET(&rtw_dbg_mem_stat.vir_alloc,0);
- ATOMIC_SET(&rtw_dbg_mem_stat.vir_peak,0);
- ATOMIC_SET(&rtw_dbg_mem_stat.vir_alloc_err,0);
- ATOMIC_SET(&rtw_dbg_mem_stat.phy_alloc,0);
- ATOMIC_SET(&rtw_dbg_mem_stat.phy_peak,0);
- ATOMIC_SET(&rtw_dbg_mem_stat.phy_alloc_err,0);
+ for(i=0;i<mstat_tf_idx(MSTAT_TYPE_MAX);i++) {
+ ATOMIC_SET(&(rtw_mem_type_stat[i].alloc), 0);
+ ATOMIC_SET(&(rtw_mem_type_stat[i].peak), 0);
+ ATOMIC_SET(&(rtw_mem_type_stat[i].alloc_cnt), 0);
+ ATOMIC_SET(&(rtw_mem_type_stat[i].alloc_err_cnt), 0);
+ }
+ for(i=0;i<mstat_ff_idx(MSTAT_FUNC_MAX);i++) {
+ ATOMIC_SET(&(rtw_mem_func_stat[i].alloc), 0);
+ ATOMIC_SET(&(rtw_mem_func_stat[i].peak), 0);
+ ATOMIC_SET(&(rtw_mem_func_stat[i].alloc_cnt), 0);
+ ATOMIC_SET(&(rtw_mem_func_stat[i].alloc_err_cnt), 0);
+ }
}
-
- switch(flag) {
- case MEM_STAT_VIR_ALLOC_SUCCESS:
- alloc = ATOMIC_ADD_RETURN(&rtw_dbg_mem_stat.vir_alloc, sz);
- peak=ATOMIC_READ(&rtw_dbg_mem_stat.vir_peak);
- if (peak<alloc)
- ATOMIC_SET(&rtw_dbg_mem_stat.vir_peak, alloc);
- break;
-
- case MEM_STAT_VIR_ALLOC_FAIL:
- ATOMIC_INC(&rtw_dbg_mem_stat.vir_alloc_err);
- break;
-
- case MEM_STAT_VIR_FREE:
- alloc = ATOMIC_SUB_RETURN(&rtw_dbg_mem_stat.vir_alloc, sz);
- break;
-
- case MEM_STAT_PHY_ALLOC_SUCCESS:
- alloc = ATOMIC_ADD_RETURN(&rtw_dbg_mem_stat.phy_alloc, sz);
- peak=ATOMIC_READ(&rtw_dbg_mem_stat.phy_peak);
- if (peak<alloc)
- ATOMIC_SET(&rtw_dbg_mem_stat.phy_peak, alloc);
- break;
- case MEM_STAT_PHY_ALLOC_FAIL:
- ATOMIC_INC(&rtw_dbg_mem_stat.phy_alloc_err);
- break;
-
- case MEM_STAT_PHY_FREE:
- alloc = ATOMIC_SUB_RETURN(&rtw_dbg_mem_stat.phy_alloc, sz);
- break;
-
- case MEM_STAT_TX_ALLOC_SUCCESS:
- alloc = ATOMIC_ADD_RETURN(&rtw_dbg_mem_stat.tx_alloc, sz);
- peak=ATOMIC_READ(&rtw_dbg_mem_stat.tx_peak);
+ switch(status) {
+ case MSTAT_ALLOC_SUCCESS:
+ ATOMIC_INC(&(rtw_mem_type_stat[mstat_tf_idx(flags)].alloc_cnt));
+ alloc = ATOMIC_ADD_RETURN(&(rtw_mem_type_stat[mstat_tf_idx(flags)].alloc), sz);
+ peak=ATOMIC_READ(&(rtw_mem_type_stat[mstat_tf_idx(flags)].peak));
if (peak<alloc)
- ATOMIC_SET(&rtw_dbg_mem_stat.tx_peak, alloc);
- break;
-
- case MEM_STAT_TX_ALLOC_FAIL:
- ATOMIC_INC(&rtw_dbg_mem_stat.tx_alloc_err);
- break;
-
- case MEM_STAT_TX_FREE:
- alloc = ATOMIC_SUB_RETURN(&rtw_dbg_mem_stat.tx_alloc, sz);
- break;
-
- case MEM_STAT_RX_ALLOC_SUCCESS:
- alloc = ATOMIC_ADD_RETURN(&rtw_dbg_mem_stat.rx_alloc, sz);
- peak=ATOMIC_READ(&rtw_dbg_mem_stat.rx_peak);
+ ATOMIC_SET(&(rtw_mem_type_stat[mstat_tf_idx(flags)].peak), alloc);
+
+ ATOMIC_INC(&(rtw_mem_func_stat[mstat_ff_idx(flags)].alloc_cnt));
+ alloc = ATOMIC_ADD_RETURN(&(rtw_mem_func_stat[mstat_ff_idx(flags)].alloc), sz);
+ peak=ATOMIC_READ(&(rtw_mem_func_stat[mstat_ff_idx(flags)].peak));
if (peak<alloc)
- ATOMIC_SET(&rtw_dbg_mem_stat.rx_peak, alloc);
+ ATOMIC_SET(&(rtw_mem_func_stat[mstat_ff_idx(flags)].peak), alloc);
break;
-
- case MEM_STAT_RX_ALLOC_FAIL:
- ATOMIC_INC(&rtw_dbg_mem_stat.rx_alloc_err);
+
+ case MSTAT_ALLOC_FAIL:
+ ATOMIC_INC(&(rtw_mem_type_stat[mstat_tf_idx(flags)].alloc_err_cnt));
+
+ ATOMIC_INC(&(rtw_mem_func_stat[mstat_ff_idx(flags)].alloc_err_cnt));
break;
-
- case MEM_STAT_RX_FREE:
- alloc = ATOMIC_SUB_RETURN(&rtw_dbg_mem_stat.rx_alloc, sz);
+
+ case MSTAT_FREE:
+ ATOMIC_DEC(&(rtw_mem_type_stat[mstat_tf_idx(flags)].alloc_cnt));
+ ATOMIC_SUB(&(rtw_mem_type_stat[mstat_tf_idx(flags)].alloc), sz);
+
+ ATOMIC_DEC(&(rtw_mem_func_stat[mstat_ff_idx(flags)].alloc_cnt));
+ ATOMIC_SUB(&(rtw_mem_func_stat[mstat_ff_idx(flags)].alloc), sz);
break;
-
};
- if (rtw_get_passing_time_ms(update_time) > 5000) {
- rtw_dump_mem_stat();
+ //if (rtw_get_passing_time_ms(update_time) > 5000) {
+ // rtw_mstat_dump();
update_time=rtw_get_current_time();
- }
-
-
+ //}
}
-inline u8* dbg_rtw_vmalloc(u32 sz, const char *func, int line)
+
+inline u8* dbg_rtw_vmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line)
{
u8 *p;
//DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
p=_rtw_vmalloc((sz));
- rtw_update_mem_stat(
- p ? MEM_STAT_VIR_ALLOC_SUCCESS : MEM_STAT_VIR_ALLOC_FAIL
+ rtw_mstat_update(
+ flags
+ , p ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
, sz
);
return p;
}
-inline u8* dbg_rtw_zvmalloc(u32 sz, const char *func, int line)
+inline u8* dbg_rtw_zvmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line)
{
u8 *p;
//DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
p=_rtw_zvmalloc((sz));
- rtw_update_mem_stat(
- p ? MEM_STAT_VIR_ALLOC_SUCCESS : MEM_STAT_VIR_ALLOC_FAIL
+ rtw_mstat_update(
+ flags
+ , p ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
, sz
);
return p;
}
-inline void dbg_rtw_vmfree(u8 *pbuf, u32 sz, const char *func, int line)
+inline void dbg_rtw_vmfree(u8 *pbuf, u32 sz, const enum mstat_f flags, const char *func, const int line)
{
//DBG_871X("DBG_MEM_ALLOC %s:%d %s(%p,%d)\n", func, line, __FUNCTION__, (pbuf), (sz));
_rtw_vmfree((pbuf), (sz));
- rtw_update_mem_stat(
- MEM_STAT_VIR_FREE
+ rtw_mstat_update(
+ flags
+ , MSTAT_FREE
, sz
);
-
}
-inline u8* dbg_rtw_malloc(u32 sz, const char *func, int line)
+inline u8* dbg_rtw_malloc(u32 sz, const enum mstat_f flags, const char *func, const int line)
{
u8 *p;
-
- if((sz)>4096)
- DBG_871X("DBG_MEM_ALLOC !!!!!!!!!!!!!! %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
+
+ //if(sz>=153 && sz<=306)
+ // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
+
+ //if((sz)>4096)
+ // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
p=_rtw_malloc((sz));
- rtw_update_mem_stat(
- p ? MEM_STAT_PHY_ALLOC_SUCCESS : MEM_STAT_PHY_ALLOC_FAIL
+ rtw_mstat_update(
+ flags
+ , p ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
, sz
);
return p;
}
-inline u8* dbg_rtw_zmalloc(u32 sz, const char *func, int line)
+inline u8* dbg_rtw_zmalloc(u32 sz, const enum mstat_f flags, const char *func, const int line)
{
u8 *p;
- if((sz)>4096)
- DBG_871X("DBG_MEM_ALLOC !!!!!!!!!!!!!! %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
+ //if(sz>=153 && sz<=306)
+ // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
+
+ //if((sz)>4096)
+ // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
p = _rtw_zmalloc((sz));
- rtw_update_mem_stat(
- p ? MEM_STAT_PHY_ALLOC_SUCCESS : MEM_STAT_PHY_ALLOC_FAIL
+ rtw_mstat_update(
+ flags
+ , p ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
, sz
);
return p;
-
}
-inline void dbg_rtw_mfree(u8 *pbuf, u32 sz, const char *func, int line)
+inline void dbg_rtw_mfree(u8 *pbuf, u32 sz, const enum mstat_f flags, const char *func, const int line)
{
- if((sz)>4096)
- DBG_871X("DBG_MEM_ALLOC !!!!!!!!!!!!!! %s:%d %s(%p,%d)\n", func, line, __FUNCTION__, (pbuf), (sz));
+ //if(sz>=153 && sz<=306)
+ // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, (sz));
+
+ //if((sz)>4096)
+ // DBG_871X("DBG_MEM_ALLOC %s:%d %s(%p,%d)\n", func, line, __FUNCTION__, (pbuf), (sz));
_rtw_mfree((pbuf), (sz));
- rtw_update_mem_stat(
- MEM_STAT_PHY_FREE
+ rtw_mstat_update(
+ flags
+ , MSTAT_FREE
, sz
);
}
-#endif
+
+inline struct sk_buff * dbg_rtw_skb_alloc(unsigned int size, const enum mstat_f flags, const char *func, int line)
+{
+ struct sk_buff *skb;
+ unsigned int truesize = 0;
+
+ skb = _rtw_skb_alloc(size);
+
+ if(skb)
+ truesize = skb->truesize;
+
+ if(!skb || truesize < size /*|| size > 4096*/)
+ DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d), skb:%p, truesize=%u\n", func, line, __FUNCTION__, size, skb, truesize);
+
+ rtw_mstat_update(
+ flags
+ , skb ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
+ , truesize
+ );
+
+ return skb;
+}
+
+inline void dbg_rtw_skb_free(struct sk_buff *skb, const enum mstat_f flags, const char *func, int line)
+{
+ unsigned int truesize = skb->truesize;
+
+ //if(truesize > 4096)
+ // DBG_871X("DBG_MEM_ALLOC %s:%d %s, truesize=%u\n", func, line, __FUNCTION__, truesize);
+
+ _rtw_skb_free(skb);
+
+ rtw_mstat_update(
+ flags
+ , MSTAT_FREE
+ , truesize
+ );
+}
+
+inline struct sk_buff *dbg_rtw_skb_copy(const struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line)
+{
+ struct sk_buff *skb_cp;
+ unsigned int truesize = skb->truesize;
+ unsigned int cp_truesize = 0;
+
+ skb_cp = _rtw_skb_copy(skb);
+ if(skb_cp)
+ cp_truesize = skb_cp->truesize;
+
+ if(!skb_cp || cp_truesize != truesize /*||cp_truesize > 4096*/)
+ DBG_871X("DBG_MEM_ALLOC %s:%d %s(%u), skb_cp:%p, cp_truesize=%u\n", func, line, __FUNCTION__, truesize, skb_cp, cp_truesize);
+
+ rtw_mstat_update(
+ flags
+ , skb_cp ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
+ , truesize
+ );
+
+ return skb_cp;
+}
+
+inline struct sk_buff *dbg_rtw_skb_clone(struct sk_buff *skb, const enum mstat_f flags, const char *func, const int line)
+{
+ struct sk_buff *skb_cl;
+ unsigned int truesize = skb->truesize;
+ unsigned int cl_truesize = 0;
+
+ skb_cl = _rtw_skb_clone(skb);
+ if(skb_cl)
+ cl_truesize = skb_cl->truesize;
+
+ if(!skb_cl || cl_truesize != truesize /*|| cl_truesize > 4096*/)
+ DBG_871X("DBG_MEM_ALLOC %s:%d %s(%u), skb_cl:%p, cl_truesize=%u\n", func, line, __FUNCTION__, truesize, skb_cl, cl_truesize);
+
+ rtw_mstat_update(
+ flags
+ , skb_cl ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
+ , truesize
+ );
+
+ return skb_cl;
+}
+
+inline int dbg_rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb, const enum mstat_f flags, const char *func, int line)
+{
+ int ret;
+ unsigned int truesize = skb->truesize;
+
+ //if(truesize > 4096)
+ // DBG_871X("DBG_MEM_ALLOC %s:%d %s, truesize=%u\n", func, line, __FUNCTION__, truesize);
+
+ ret = _rtw_netif_rx(ndev, skb);
+
+ rtw_mstat_update(
+ flags
+ , MSTAT_FREE
+ , truesize
+ );
+
+ return ret;
+}
+
+inline void dbg_rtw_skb_queue_purge(struct sk_buff_head *list, enum mstat_f flags, const char *func, int line)
+{
+ struct sk_buff *skb;
+
+ while ((skb = skb_dequeue(list)) != NULL)
+ dbg_rtw_skb_free(skb, flags, func, line);
+}
+
+#ifdef CONFIG_USB_HCI
+inline void *dbg_rtw_usb_buffer_alloc(struct usb_device *dev, size_t size, dma_addr_t *dma, const enum mstat_f flags, const char *func, int line)
+{
+ void *p;
+ //DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, size);
+
+ p = _rtw_usb_buffer_alloc(dev, size, dma);
+
+ rtw_mstat_update(
+ flags
+ , p ? MSTAT_ALLOC_SUCCESS : MSTAT_ALLOC_FAIL
+ , size
+ );
+
+ return p;
+}
+
+inline void dbg_rtw_usb_buffer_free(struct usb_device *dev, size_t size, void *addr, dma_addr_t dma, const enum mstat_f flags, const char *func, int line)
+{
+ //DBG_871X("DBG_MEM_ALLOC %s:%d %s(%d)\n", func, line, __FUNCTION__, size);
+
+ _rtw_usb_buffer_free(dev, size, addr, dma);
+
+ rtw_mstat_update(
+ flags
+ , MSTAT_FREE
+ , size
+ );
+}
+#endif /* CONFIG_USB_HCI */
+#endif /* DBG_MEM_ALLOC */
void* rtw_malloc2d(int h, int w, int size)
{
@@ -566,7 +855,6 @@ void _rtw_memset(void *pbuf, int c, u32 sz)
}
#ifdef PLATFORM_FREEBSD
-
static inline void __list_add(_list *pnew, _list *pprev, _list *pnext)
{
pnext->prev = pnew;
@@ -574,53 +862,7 @@ static inline void __list_add(_list *pnew, _list *pprev, _list *pnext)
pnew->prev = pprev;
pprev->next = pnew;
}
-
-//review again
-struct sk_buff * dev_alloc_skb(unsigned int size)
-{
- struct sk_buff *skb=NULL;
- u8 *data=NULL;
-
- //skb = (struct sk_buff *)_rtw_zmalloc(sizeof(struct sk_buff)); // for skb->len, etc.
- skb = (struct sk_buff *)_rtw_malloc(sizeof(struct sk_buff));
- if(!skb)
- goto out;
- data = _rtw_malloc(size);
- if(!data)
- goto nodata;
-
- skb->head = (unsigned char*)data;
- skb->data = (unsigned char*)data;
- skb->tail = (unsigned char*)data;
- skb->end = (unsigned char*)data + size;
- skb->len = 0;
- //printf("%s()-%d: skb=%p, skb->head = %p\n", __FUNCTION__, __LINE__, skb, skb->head);
-
-out:
- return skb;
-nodata:
- _rtw_mfree((u8 *)skb, sizeof(struct sk_buff));
- skb = NULL;
-goto out;
-
-}
-
-void dev_kfree_skb_any(struct sk_buff *skb)
-{
- //printf("%s()-%d: skb->head = %p\n", __FUNCTION__, __LINE__, skb->head);
- if(skb->head)
- _rtw_mfree(skb->head, 0);
- //printf("%s()-%d: skb = %p\n", __FUNCTION__, __LINE__, skb);
- if(skb)
- _rtw_mfree((u8 *)skb, 0);
-}
-struct sk_buff *skb_clone(const struct sk_buff *skb)
-{
- return NULL;
-}
-
-#endif
-
+#endif /* PLATFORM_FREEBSD */
void _rtw_init_listhead(_list *list)
{
@@ -1286,21 +1528,29 @@ void rtw_yield_os()
}
#define RTW_SUSPEND_LOCK_NAME "rtw_wifi"
+#define RTW_SUSPEND_EXT_LOCK_NAME "rtw_wifi_ext"
+
#ifdef CONFIG_WAKELOCK
static struct wake_lock rtw_suspend_lock;
+static struct wake_lock rtw_suspend_ext_lock;
#elif defined(CONFIG_ANDROID_POWER)
static android_suspend_lock_t rtw_suspend_lock ={
.name = RTW_SUSPEND_LOCK_NAME
};
+static android_suspend_lock_t rtw_suspend_ext_lock ={
+ .name = RTW_SUSPEND_EXT_LOCK_NAME
+};
#endif
inline void rtw_suspend_lock_init()
{
#ifdef CONFIG_WAKELOCK
wake_lock_init(&rtw_suspend_lock, WAKE_LOCK_SUSPEND, RTW_SUSPEND_LOCK_NAME);
+ wake_lock_init(&rtw_suspend_ext_lock, WAKE_LOCK_SUSPEND, RTW_SUSPEND_EXT_LOCK_NAME);
#elif defined(CONFIG_ANDROID_POWER)
android_init_suspend_lock(&rtw_suspend_lock);
+ android_init_suspend_ext_lock(&rtw_suspend_ext_lock);
#endif
}
@@ -1308,8 +1558,10 @@ inline void rtw_suspend_lock_uninit()
{
#ifdef CONFIG_WAKELOCK
wake_lock_destroy(&rtw_suspend_lock);
+ wake_lock_destroy(&rtw_suspend_ext_lock);
#elif defined(CONFIG_ANDROID_POWER)
android_uninit_suspend_lock(&rtw_suspend_lock);
+ android_uninit_suspend_lock(&rtw_suspend_ext_lock);
#endif
}
@@ -1339,16 +1591,23 @@ inline void rtw_unlock_suspend()
#endif
}
-#ifdef CONFIG_WOWLAN
-inline void rtw_lock_suspend_timeout(long timeout)
+inline void rtw_lock_suspend_timeout(u32 timeout_ms)
+{
+ #ifdef CONFIG_WAKELOCK
+ wake_lock_timeout(&rtw_suspend_lock, rtw_ms_to_systime(timeout_ms));
+ #elif defined(CONFIG_ANDROID_POWER)
+ android_lock_suspend_auto_expire(&rtw_suspend_lock, rtw_ms_to_systime(timeout_ms));
+ #endif
+}
+
+inline void rtw_lock_ext_suspend_timeout(u32 timeout_ms)
{
#ifdef CONFIG_WAKELOCK
- wake_lock_timeout(&rtw_suspend_lock, timeout);
+ wake_lock_timeout(&rtw_suspend_ext_lock, rtw_ms_to_systime(timeout_ms));
#elif defined(CONFIG_ANDROID_POWER)
- android_lock_suspend_auto_expire(&rtw_suspend_lock, timeout);
+ android_lock_suspend_auto_expire(&rtw_suspend_ext_lock, rtw_ms_to_systime(timeout_ms));
#endif
}
-#endif //CONFIG_WOWLAN
inline void ATOMIC_SET(ATOMIC_T *v, int i)
{
@@ -1940,8 +2199,9 @@ void rtw_buf_free(u8 **buf, u32 *buf_len)
ori_len = *buf_len;
if (*buf) {
+ u32 tmp_buf_len = *buf_len;
*buf_len = 0;
- _rtw_mfree(*buf, *buf_len);
+ rtw_mfree(*buf, tmp_buf_len);
*buf = NULL;
}
}
@@ -1976,7 +2236,7 @@ keep_ori:
/* free ori */
if (ori && ori_len > 0)
- _rtw_mfree(ori, ori_len);
+ rtw_mfree(ori, ori_len);
}